* Processing True Lines ** Processing line: ~* DragonRuby Game Toolkit Live Docs~ - Header detected. *** True Line Result *** True Line Result * DragonRuby Game Toolkit Live Docs ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The information contained here is all available via the DragonRuby~ ** Processing line: ~Console. You can Open the DragonRuby Console by pressing [`] [~] [²]~ ** Processing line: ~[^] [º] or [§] within your game.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The information contained here is all available via the DragonRuby Console. You can Open the DragonRuby Console by pressing [`] [~] [²] [^] [º] or [§] within your game. ** Processing line: ~To search docs you can type ~docs_search "SEARCH TERM"~ or if you want~ ** Processing line: ~to get fancy you can provide a ~lambda~ to filter documentation:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result To search docs you can type ~docs_search "SEARCH TERM"~ or if you want to get fancy you can provide a ~lambda~ to filter documentation: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ docs_search { |entry| (entry.include? "Array") && (!entry.include? "Enumerable") }~ - Inside source: true *** True Line Result docs_search { |entry| (entry.include? "Array") && (!entry.include? "Enumerable") } ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* Hello World~ - Header detected. *** True Line Result *** True Line Result * Hello World ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Welcome to DragonRuby Game Toolkit. Take the steps below to get started.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Welcome to DragonRuby Game Toolkit. Take the steps below to get started. ** Processing line: ~* Join the Discord and Subscribe to the News Letter~ - Header detected. *** True Line Result *** True Line Result * Join the Discord and Subscribe to the News Letter ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Our Discord channel is [[http://discord.dragonruby.org]].~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Our Discord channel is [[http://discord.dragonruby.org]]. ** Processing line: ~The News Letter will keep you in the loop with regards to current~ ** Processing line: ~DragonRuby Events: [[http://dragonrubydispatch.com]].~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The News Letter will keep you in the loop with regards to current DragonRuby Events: [[http://dragonrubydispatch.com]]. ** Processing line: ~Those who use DragonRuby are called Dragon Riders. This identity is~ ** Processing line: ~incredibly important to us. When someone asks you:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Those who use DragonRuby are called Dragon Riders. This identity is incredibly important to us. When someone asks you: ** Processing line: ~#+begin_quote~ - Line was identified as a literal block. *** True Line Result *** True Line Result #+begin_quote ** Processing line: ~What game engine do you use?~ ** Processing line: ~#+end_quote~ - Line was identified as a literal block. *** True Line Result What game engine do you use? *** True Line Result #+end_quote ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Reply with:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Reply with: ** Processing line: ~#+begin_quote~ - Line was identified as a literal block. *** True Line Result *** True Line Result #+begin_quote ** Processing line: ~I am a Dragon Rider.~ ** Processing line: ~#+end_quote~ - Line was identified as a literal block. *** True Line Result I am a Dragon Rider. *** True Line Result #+end_quote ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* Intro Videos~ - Header detected. *** True Line Result *** True Line Result * Intro Videos ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Here are some videos to help you get the lay of the land.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Here are some videos to help you get the lay of the land. ** Processing line: ~** Quick Api Tour~ - Header detected. *** True Line Result *** True Line Result ** Quick Api Tour ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~1. Beginner Introduction to DragonRuby Game Toolkit: [[https://youtu.be/ixw7TJhU08E]]~ - Line was identified as a start of a list. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result 1. Beginner Introduction to DragonRuby Game Toolkit: [[https://youtu.be/ixw7TJhU08E]] ** Processing line: ~** If You Are Completely New to Ruby and Programming~ - Header detected. *** True Line Result *** True Line Result ** If You Are Completely New to Ruby and Programming ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~1. Intermediate Introduction to Ruby Syntax: [[https://youtu.be/HG-XRZ5Ppgc]]~ - Line was identified as a start of a list. *** True Line Result ** Processing line: ~2. Intermediate Introduction to Arrays in Ruby: [[https://youtu.be/N72sEYFRqfo]]~ - Line was identified as a continuation of a list. *** True Line Result 1. Intermediate Introduction to Ruby Syntax: [[https://youtu.be/HG-XRZ5Ppgc]] ** Processing line: ~3. You may also want to try this free course provided at [[http://dragonruby.school]].~ - Line was identified as a continuation of a list. *** True Line Result 2. Intermediate Introduction to Arrays in Ruby: [[https://youtu.be/N72sEYFRqfo]] ** Processing line: ~~ - End of paragraph detected. *** True Line Result 3. You may also want to try this free course provided at [[http://dragonruby.school]]. ** Processing line: ~** If You Have Game Dev Experience~ - Header detected. *** True Line Result *** True Line Result ** If You Have Game Dev Experience ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~1. Building Tetris - Part 1: [[https://youtu.be/xZMwRSbC4rY]]~ - Line was identified as a start of a list. *** True Line Result ** Processing line: ~2. Building Tetris - Part 2: [[https://youtu.be/C3LLzDUDgz4]]~ - Line was identified as a continuation of a list. *** True Line Result 1. Building Tetris - Part 1: [[https://youtu.be/xZMwRSbC4rY]] ** Processing line: ~3. Low Res Game Jam Tutorial: [[https://youtu.be/pCI90ukKCME]]~ - Line was identified as a continuation of a list. *** True Line Result 2. Building Tetris - Part 2: [[https://youtu.be/C3LLzDUDgz4]] ** Processing line: ~~ - End of paragraph detected. *** True Line Result 3. Low Res Game Jam Tutorial: [[https://youtu.be/pCI90ukKCME]] ** Processing line: ~* Getting Started Tutorial~ - Header detected. *** True Line Result *** True Line Result * Getting Started Tutorial ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~This is a tutorial written by Ryan C Gordon (a Juggernaut in the~ ** Processing line: ~industry who has contracted to Valve, Epic, Activision, and~ ** Processing line: ~EA... check out his Wikipedia page: [[https://en.wikipedia.org/wiki/Ryan_C._Gordon]]).~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result This is a tutorial written by Ryan C Gordon (a Juggernaut in the industry who has contracted to Valve, Epic, Activision, and EA... check out his Wikipedia page: [[https://en.wikipedia.org/wiki/Ryan_C._Gordon]]). ** Processing line: ~** Introduction~ - Header detected. *** True Line Result *** True Line Result ** Introduction ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Welcome!~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Welcome! ** Processing line: ~Here's just a little push to get you started if you're new to~ ** Processing line: ~programming or game development.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Here's just a little push to get you started if you're new to programming or game development. ** Processing line: ~If you want to write a game, it's no different than writing any other~ ** Processing line: ~program for any other framework: there are a few simple rules that~ ** Processing line: ~might be new to you, but more or less programming is programming no~ ** Processing line: ~matter what you are building.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result If you want to write a game, it's no different than writing any other program for any other framework: there are a few simple rules that might be new to you, but more or less programming is programming no matter what you are building. ** Processing line: ~Did you not know that? Did you think you couldn't write a game because~ ** Processing line: ~you're a "web guy" or you're writing Java at a desk job? Stop letting~ ** Processing line: ~people tell you that you can't, because you already have everything~ ** Processing line: ~you need.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Did you not know that? Did you think you couldn't write a game because you're a "web guy" or you're writing Java at a desk job? Stop letting people tell you that you can't, because you already have everything you need. ** Processing line: ~Here, we're going to be programming in a language called "Ruby." In~ ** Processing line: ~the interest of full disclosure, I (Ryan Gordon) wrote the C parts of~ ** Processing line: ~this toolkit and Ruby looks a little strange to me (Amir Rajan wrote~ ** Processing line: ~the Ruby parts, discounting the parts I mangled), but I'm going to~ ** Processing line: ~walk you through the basics because we're all learning together, and~ ** Processing line: ~if you mostly think of yourself as someone that writes C (or C++, C#,~ ** Processing line: ~Objective-C), PHP, or Java, then you're only a step behind me right~ ** Processing line: ~now.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Here, we're going to be programming in a language called "Ruby." In the interest of full disclosure, I (Ryan Gordon) wrote the C parts of this toolkit and Ruby looks a little strange to me (Amir Rajan wrote the Ruby parts, discounting the parts I mangled), but I'm going to walk you through the basics because we're all learning together, and if you mostly think of yourself as someone that writes C (or C++, C#, Objective-C), PHP, or Java, then you're only a step behind me right now. ** Processing line: ~** Prerequisites~ - Header detected. *** True Line Result *** True Line Result ** Prerequisites ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Here's the most important thing you should know: Ruby lets you do some~ ** Processing line: ~complicated things really easily, and you can learn that stuff~ ** Processing line: ~later. I'm going to show you one or two cool tricks, but that's all.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Here's the most important thing you should know: Ruby lets you do some complicated things really easily, and you can learn that stuff later. I'm going to show you one or two cool tricks, but that's all. ** Processing line: ~Do you know what an if statement is? A for-loop? An array? That's all~ ** Processing line: ~you'll need to start.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Do you know what an if statement is? A for-loop? An array? That's all you'll need to start. ** Processing line: ~** The Game Loop~ - Header detected. *** True Line Result *** True Line Result ** The Game Loop ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Ok, here are few rules with regards to game development with GTK:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Ok, here are few rules with regards to game development with GTK: ** Processing line: ~- Your game is all going to happen under one function ...~ - Line was identified as a list. *** True Line Result ** Processing line: ~- that runs 60 times a second ...~ - Line was identified as a list. *** True Line Result - Your game is all going to happen under one function ... ** Processing line: ~- and has to tell the computer what to draw each time.~ - Line was identified as a list. *** True Line Result - that runs 60 times a second ... ** Processing line: ~~ - End of paragraph detected. *** True Line Result - and has to tell the computer what to draw each time. ** Processing line: ~That's an entire video game in one run-on sentence.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result That's an entire video game in one run-on sentence. ** Processing line: ~Here's that function. You're going to want to put this in~ ** Processing line: ~mygame/app/main.rb, because that's where we'll look for it by~ ** Processing line: ~default. Load it up in your favorite text editor.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Here's that function. You're going to want to put this in mygame/app/main.rb, because that's where we'll look for it by default. Load it up in your favorite text editor. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.labels << [580, 400, 'Hello World!']~ - Inside source: true *** True Line Result args.outputs.labels << [580, 400, 'Hello World!'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Now run ~dragonruby~ ...did you get a window with "Hello World!"~ ** Processing line: ~written in it? Good, you're officially a game developer!~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Now run ~dragonruby~ ...did you get a window with "Hello World!" written in it? Good, you're officially a game developer! ** Processing line: ~** Breakdown Of The ~tick~ Method~ - Header detected. *** True Line Result *** True Line Result ** Breakdown Of The ~tick~ Method ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~mygame/app/main.rb~, is where the Ruby source code is located. This~ ** Processing line: ~looks a little strange, so I'll break it down line by line. In Ruby, a~ ** Processing line: ~'#' character starts a single-line comment, so I'll talk about this~ ** Processing line: ~inline.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ~mygame/app/main.rb~, is where the Ruby source code is located. This looks a little strange, so I'll break it down line by line. In Ruby, a '#' character starts a single-line comment, so I'll talk about this inline. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # This "def"ines a function, named "tick," which takes a single argument~ - Inside source: true *** True Line Result # This "def"ines a function, named "tick," which takes a single argument ** Processing line: ~ # named "args". DragonRuby looks for this function and calls it every~ - Inside source: true *** True Line Result # named "args". DragonRuby looks for this function and calls it every ** Processing line: ~ # frame, 60 times a second. "args" is a magic structure with lots of~ - Inside source: true *** True Line Result # frame, 60 times a second. "args" is a magic structure with lots of ** Processing line: ~ # information in it. You can set variables in there for your own game state,~ - Inside source: true *** True Line Result # information in it. You can set variables in there for your own game state, ** Processing line: ~ # and every frame it will updated if keys are pressed, joysticks moved,~ - Inside source: true *** True Line Result # and every frame it will updated if keys are pressed, joysticks moved, ** Processing line: ~ # mice clicked, etc.~ - Inside source: true *** True Line Result # mice clicked, etc. ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # One of the things in "args" is the "outputs" object that your game uses~ - Inside source: true *** True Line Result # One of the things in "args" is the "outputs" object that your game uses ** Processing line: ~ # to draw things. Afraid of rendering APIs? No problem. In DragonRuby,~ - Inside source: true *** True Line Result # to draw things. Afraid of rendering APIs? No problem. In DragonRuby, ** Processing line: ~ # you use arrays to draw things and we figure out the details.~ - Inside source: true *** True Line Result # you use arrays to draw things and we figure out the details. ** Processing line: ~ # If you want to draw text on the screen, you give it an array (the thing~ - Inside source: true *** True Line Result # If you want to draw text on the screen, you give it an array (the thing ** Processing line: ~ # in the [ brackets ]), with an X and Y coordinate and the text to draw.~ - Inside source: true *** True Line Result # in the [ brackets ]), with an X and Y coordinate and the text to draw. ** Processing line: ~ # The "<<" thing says "append this array onto the list of them at~ - Inside source: true *** True Line Result # The "<<" thing says "append this array onto the list of them at ** Processing line: ~ # args.outputs.labels)~ - Inside source: true *** True Line Result # args.outputs.labels) ** Processing line: ~ args.outputs.labels << [580, 400, 'Hello World!']~ - Inside source: true *** True Line Result args.outputs.labels << [580, 400, 'Hello World!'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Once your ~tick~ function finishes, we look at all the arrays you made~ ** Processing line: ~and figure out how to draw it. You don't need to know about graphics~ ** Processing line: ~APIs. You're just setting up some arrays! DragonRuby clears out these~ ** Processing line: ~arrays every frame, so you just need to add what you need _right now_~ ** Processing line: ~each time.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Once your ~tick~ function finishes, we look at all the arrays you made and figure out how to draw it. You don't need to know about graphics APIs. You're just setting up some arrays! DragonRuby clears out these arrays every frame, so you just need to add what you need _right now_ each time. ** Processing line: ~** Rendering A Sprite~ - Header detected. *** True Line Result *** True Line Result ** Rendering A Sprite ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Now let's spice this up a little.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Now let's spice this up a little. ** Processing line: ~We're going to add some graphics. Each 2D image in DragonRuby is~ ** Processing line: ~called a "sprite," and to use them, you just make sure they exist in a~ ** Processing line: ~reasonable file format (png, jpg, gif, bmp, etc) and specify them by~ ** Processing line: ~filename. The first time you use one, DragonRuby will load it and keep~ ** Processing line: ~it in video memory for fast access in the future. If you use a~ ** Processing line: ~filename that doesn't exist, you get a fun checkerboard pattern!~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result We're going to add some graphics. Each 2D image in DragonRuby is called a "sprite," and to use them, you just make sure they exist in a reasonable file format (png, jpg, gif, bmp, etc) and specify them by filename. The first time you use one, DragonRuby will load it and keep it in video memory for fast access in the future. If you use a filename that doesn't exist, you get a fun checkerboard pattern! ** Processing line: ~There's a "dragonruby.png" file included, just to get you~ ** Processing line: ~started. Let's have it draw every frame with our text:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result There's a "dragonruby.png" file included, just to get you started. Let's have it draw every frame with our text: ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.labels << [580, 400, 'Hello World!']~ - Inside source: true *** True Line Result args.outputs.labels << [580, 400, 'Hello World!'] ** Processing line: ~ args.outputs.sprites << [576, 100, 128, 101, 'dragonruby.png']~ - Inside source: true *** True Line Result args.outputs.sprites << [576, 100, 128, 101, 'dragonruby.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~(Pro Tip: you don't have to restart DragonRuby to test your changes;~ ** Processing line: ~when you save main.rb, DragonRuby will notice and reload your~ ** Processing line: ~program.)~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result (Pro Tip: you don't have to restart DragonRuby to test your changes; when you save main.rb, DragonRuby will notice and reload your program.) ** Processing line: ~That ~.sprites~ line says "add a sprite to the list of sprites we're~ ** Processing line: ~drawing, and draw it at position (576, 100) at a size of 128x101~ ** Processing line: ~pixels". You can find the image to draw at dragonruby.png.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result That ~.sprites~ line says "add a sprite to the list of sprites we're drawing, and draw it at position (576, 100) at a size of 128x101 pixels". You can find the image to draw at dragonruby.png. ** Processing line: ~** Coordinate System and Virtual Canvas~ - Header detected. *** True Line Result *** True Line Result ** Coordinate System and Virtual Canvas ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Quick note about coordinates: (0, 0) is the bottom left corner of the~ ** Processing line: ~screen, and positive numbers go up and to the right. This is more~ ** Processing line: ~"geometrically correct," even if it's not how you remember doing 2D~ ** Processing line: ~graphics, but we chose this for a simpler reason: when you're making~ ** Processing line: ~Super Mario Brothers and you want Mario to jump, you should be able to~ ** Processing line: ~add to Mario's y position as he goes up and subtract as he falls. It~ ** Processing line: ~makes things easier to understand.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Quick note about coordinates: (0, 0) is the bottom left corner of the screen, and positive numbers go up and to the right. This is more "geometrically correct," even if it's not how you remember doing 2D graphics, but we chose this for a simpler reason: when you're making Super Mario Brothers and you want Mario to jump, you should be able to add to Mario's y position as he goes up and subtract as he falls. It makes things easier to understand. ** Processing line: ~Also: your game screen is _always_ 1280x720 pixels. If you resize the~ ** Processing line: ~window, we will scale and letterbox everything appropriately, so you~ ** Processing line: ~never have to worry about different resolutions.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Also: your game screen is _always_ 1280x720 pixels. If you resize the window, we will scale and letterbox everything appropriately, so you never have to worry about different resolutions. ** Processing line: ~Ok, now we have an image on the screen, let's animate it:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Ok, now we have an image on the screen, let's animate it: ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.rotation ||= 0~ - Inside source: true *** True Line Result args.state.rotation ||= 0 ** Processing line: ~ args.outputs.labels << [580, 400, 'Hello World!' ]~ - Inside source: true *** True Line Result args.outputs.labels << [580, 400, 'Hello World!' ] ** Processing line: ~ args.outputs.sprites << [576, 100, 128, 101, 'dragonruby.png', args.state.rotation]~ - Inside source: true *** True Line Result args.outputs.sprites << [576, 100, 128, 101, 'dragonruby.png', args.state.rotation] ** Processing line: ~ args.state.rotation -= 1~ - Inside source: true *** True Line Result args.state.rotation -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Now you can see that this function is getting called a lot!~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Now you can see that this function is getting called a lot! ** Processing line: ~** Game State~ - Header detected. *** True Line Result *** True Line Result ** Game State ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Here's a fun Ruby thing: ~args.state.rotation ||= 0~ is shorthand for~ ** Processing line: ~"if args.state.rotation isn't initialized, set it to zero." It's a~ ** Processing line: ~nice way to embed your initialization code right next to where you~ ** Processing line: ~need the variable.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Here's a fun Ruby thing: ~args.state.rotation ||= 0~ is shorthand for "if args.state.rotation isn't initialized, set it to zero." It's a nice way to embed your initialization code right next to where you need the variable. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~args.state~ is a place you can hang your own data. It's an open data~ ** Processing line: ~structure that allows you to define properties that are arbitrarily~ ** Processing line: ~nested. You don't need to define any kind of class.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ~args.state~ is a place you can hang your own data. It's an open data structure that allows you to define properties that are arbitrarily nested. You don't need to define any kind of class. ** Processing line: ~In this case, the current rotation of our sprite, which is happily~ ** Processing line: ~spinning at 60 frames per second. If you don't specify rotation (or~ ** Processing line: ~alpha, or color modulation, or a source rectangle, etc), DragonRuby~ ** Processing line: ~picks a reasonable default, and the array is ordered by the most~ ** Processing line: ~likely things you need to tell us: position, size, name.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result In this case, the current rotation of our sprite, which is happily spinning at 60 frames per second. If you don't specify rotation (or alpha, or color modulation, or a source rectangle, etc), DragonRuby picks a reasonable default, and the array is ordered by the most likely things you need to tell us: position, size, name. ** Processing line: ~** There Is No Delta Time~ - Header detected. *** True Line Result *** True Line Result ** There Is No Delta Time ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~One thing we decided to do in DragonRuby is not make you worry about~ ** Processing line: ~delta time: your function runs at 60 frames per second (about 16~ ** Processing line: ~milliseconds) and that's that. Having to worry about framerate is~ ** Processing line: ~something massive triple-AAA games do, but for fun little 2D games?~ ** Processing line: ~You'd have to work really hard to not hit 60fps. All your drawing is~ ** Processing line: ~happening on a GPU designed to run Fortnite quickly; it can definitely~ ** Processing line: ~handle this.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result One thing we decided to do in DragonRuby is not make you worry about delta time: your function runs at 60 frames per second (about 16 milliseconds) and that's that. Having to worry about framerate is something massive triple-AAA games do, but for fun little 2D games? You'd have to work really hard to not hit 60fps. All your drawing is happening on a GPU designed to run Fortnite quickly; it can definitely handle this. ** Processing line: ~Since we didn't make you worry about delta time, you can just move the~ ** Processing line: ~rotation by 1 every time and it works without you having to keep track~ ** Processing line: ~of time and math. Want it to move faster? Subtract 2.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Since we didn't make you worry about delta time, you can just move the rotation by 1 every time and it works without you having to keep track of time and math. Want it to move faster? Subtract 2. ** Processing line: ~** Handling User Input~ - Header detected. *** True Line Result *** True Line Result ** Handling User Input ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Now, let's move that image around.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Now, let's move that image around. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.rotation ||= 0~ - Inside source: true *** True Line Result args.state.rotation ||= 0 ** Processing line: ~ args.state.x ||= 576~ - Inside source: true *** True Line Result args.state.x ||= 576 ** Processing line: ~ args.state.y ||= 100~ - Inside source: true *** True Line Result args.state.y ||= 100 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.mouse.click~ - Inside source: true *** True Line Result if args.inputs.mouse.click ** Processing line: ~ args.state.x = args.inputs.mouse.click.point.x - 64~ - Inside source: true *** True Line Result args.state.x = args.inputs.mouse.click.point.x - 64 ** Processing line: ~ args.state.y = args.inputs.mouse.click.point.y - 50~ - Inside source: true *** True Line Result args.state.y = args.inputs.mouse.click.point.y - 50 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << [580, 400, 'Hello World!']~ - Inside source: true *** True Line Result args.outputs.labels << [580, 400, 'Hello World!'] ** Processing line: ~ args.outputs.sprites << [args.state.x,~ - Inside source: true *** True Line Result args.outputs.sprites << [args.state.x, ** Processing line: ~ args.state.y,~ - Inside source: true *** True Line Result args.state.y, ** Processing line: ~ 128,~ - Inside source: true *** True Line Result 128, ** Processing line: ~ 101,~ - Inside source: true *** True Line Result 101, ** Processing line: ~ 'dragonruby.png',~ - Inside source: true *** True Line Result 'dragonruby.png', ** Processing line: ~ args.state.rotation]~ - Inside source: true *** True Line Result args.state.rotation] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.rotation -= 1~ - Inside source: true *** True Line Result args.state.rotation -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Everywhere you click your mouse, the image moves there. We set a~ ** Processing line: ~default location for it with ~args.state.x ||= 576~, and then we~ ** Processing line: ~change those variables when we see the mouse button in action. You can~ ** Processing line: ~get at the keyboard and game controllers in similar ways.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Everywhere you click your mouse, the image moves there. We set a default location for it with ~args.state.x ||= 576~, and then we change those variables when we see the mouse button in action. You can get at the keyboard and game controllers in similar ways. ** Processing line: ~** Coding On A Raspberry Pi~ - Header detected. *** True Line Result *** True Line Result ** Coding On A Raspberry Pi ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~We have only tested DragonRuby on a Raspberry Pi 3, Models B and B+, but we~ ** Processing line: ~believe it _should_ work on any model with comparable specs.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result We have only tested DragonRuby on a Raspberry Pi 3, Models B and B+, but we believe it _should_ work on any model with comparable specs. ** Processing line: ~If you're running DragonRuby Game Toolkit on a Raspberry Pi, or trying to run~ ** Processing line: ~a game made with the Toolkit on a Raspberry Pi, and it's really really slow--~ ** Processing line: ~like one frame every few seconds--then there's likely a simple fix.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result If you're running DragonRuby Game Toolkit on a Raspberry Pi, or trying to run a game made with the Toolkit on a Raspberry Pi, and it's really really slow-- like one frame every few seconds--then there's likely a simple fix. ** Processing line: ~You're probably running a desktop environment: menus, apps, web browsers,~ ** Processing line: ~etc. This is okay! Launch the terminal app and type:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You're probably running a desktop environment: menus, apps, web browsers, etc. This is okay! Launch the terminal app and type: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~sudo raspi-config~ - Inside source: true *** True Line Result sudo raspi-config ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~It'll ask you for your password (if you don't know, try "raspberry"), and then~ ** Processing line: ~give you a menu of options. Find your way to "Advanced Options", then "GL~ ** Processing line: ~Driver", and change this to "GL (Full KMS)" ... not "fake KMS," which is~ ** Processing line: ~also listed there. Save and reboot. In theory, this should fix the problem.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result It'll ask you for your password (if you don't know, try "raspberry"), and then give you a menu of options. Find your way to "Advanced Options", then "GL Driver", and change this to "GL (Full KMS)" ... not "fake KMS," which is also listed there. Save and reboot. In theory, this should fix the problem. ** Processing line: ~If you're _still_ having problems and have a Raspberry Pi 2 or better, go back~ ** Processing line: ~to raspi-config and head over to "Advanced Options", "Memory split," and give~ ** Processing line: ~the GPU 256 megabytes. You might be able to avoid this for simple games, as~ ** Processing line: ~this takes RAM away from the system and reserves it for graphics. You can~ ** Processing line: ~also try 128 megabytes as a gentler option.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result If you're _still_ having problems and have a Raspberry Pi 2 or better, go back to raspi-config and head over to "Advanced Options", "Memory split," and give the GPU 256 megabytes. You might be able to avoid this for simple games, as this takes RAM away from the system and reserves it for graphics. You can also try 128 megabytes as a gentler option. ** Processing line: ~Note that you can also run DragonRuby without X11 at all: if you run it from~ ** Processing line: ~a virtual terminal it will render fullscreen and won't need the "Full KMS"~ ** Processing line: ~option. This might be attractive if you want to use it as a game console~ ** Processing line: ~sort of thing, or develop over ssh, or launch it from RetroPie, etc.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Note that you can also run DragonRuby without X11 at all: if you run it from a virtual terminal it will render fullscreen and won't need the "Full KMS" option. This might be attractive if you want to use it as a game console sort of thing, or develop over ssh, or launch it from RetroPie, etc. ** Processing line: ~** Conclusion~ - Header detected. *** True Line Result *** True Line Result ** Conclusion ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~There is a lot more you can do with DragonRuby, but now you've already~ ** Processing line: ~got just about everything you need to make a simple game. After all,~ ** Processing line: ~even the most fancy games are just creating objects and moving them~ ** Processing line: ~around. Experiment a little. Add a few more things and have them~ ** Processing line: ~interact in small ways. Want something to go away? Just don't add it~ ** Processing line: ~to ~args.output~ anymore.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result There is a lot more you can do with DragonRuby, but now you've already got just about everything you need to make a simple game. After all, even the most fancy games are just creating objects and moving them around. Experiment a little. Add a few more things and have them interact in small ways. Want something to go away? Just don't add it to ~args.output~ anymore. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* Deploying To Itch.io~ - Header detected. *** True Line Result *** True Line Result * Deploying To Itch.io ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Once you've built your game, you're all set to deploy! Good luck in~ ** Processing line: ~your game dev journey and if you get stuck, come to the Discord~ ** Processing line: ~channel!~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Once you've built your game, you're all set to deploy! Good luck in your game dev journey and if you get stuck, come to the Discord channel! ** Processing line: ~** Creating Your Game Landing Page~ - Header detected. *** True Line Result *** True Line Result ** Creating Your Game Landing Page ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Log into Itch.io and go to [[https://itch.io/game/new]].~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Log into Itch.io and go to [[https://itch.io/game/new]]. ** Processing line: ~- Title: Give your game a Title. This value represents your `gametitle`.~ - Line was identified as a list. *** True Line Result ** Processing line: ~- Project URL: Set your project url. This value represents your `gameid`.~ - Line was identified as a list. *** True Line Result - Title: Give your game a Title. This value represents your `gametitle`. ** Processing line: ~- Classification: Keep this as Game.~ - Line was identified as a list. *** True Line Result - Project URL: Set your project url. This value represents your `gameid`. ** Processing line: ~- Kind of Project: Select HTML from the drop down list. Don't worry,~ - Line was identified as a list. *** True Line Result - Classification: Keep this as Game. ** Processing line: ~ the HTML project type _also supports binary downloads_.~ ** Processing line: ~- Uploads: Skip this section for now.~ - Line was identified as a list. *** True Line Result - Kind of Project: Select HTML from the drop down list. Don't worry, the HTML project type _also supports binary downloads_. ** Processing line: ~~ - End of paragraph detected. *** True Line Result - Uploads: Skip this section for now. ** Processing line: ~You can fill out all the other options later.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You can fill out all the other options later. ** Processing line: ~** Update Your Game's Metadata~ - Header detected. *** True Line Result *** True Line Result ** Update Your Game's Metadata ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Point your text editor at mygame/metadata/game_metadata.txt and~ ** Processing line: ~make it look like this:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Point your text editor at mygame/metadata/game_metadata.txt and make it look like this: ** Processing line: ~NOTE: Remove the ~#~ at the beginning of each line.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result NOTE: Remove the ~#~ at the beginning of each line. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ devid=bob~ - Inside source: true *** True Line Result devid=bob ** Processing line: ~ devtitle=Bob The Game Developer~ - Inside source: true *** True Line Result devtitle=Bob The Game Developer ** Processing line: ~ gameid=mygame~ - Inside source: true *** True Line Result gameid=mygame ** Processing line: ~ gametitle=My Game~ - Inside source: true *** True Line Result gametitle=My Game ** Processing line: ~ version=0.1~ - Inside source: true *** True Line Result version=0.1 ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The ~devid~ property is the username you use to log into Itch.io.~ ** Processing line: ~The ~devtitle~ is your name or company name (it can contain spaces).~ ** Processing line: ~The ~gameid~ is the Project URL value.~ ** Processing line: ~The ~gametitle~ is the name of your game (it can contain spaces).~ ** Processing line: ~The ~version~ can be any ~major.minor~ number format.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The ~devid~ property is the username you use to log into Itch.io. The ~devtitle~ is your name or company name (it can contain spaces). The ~gameid~ is the Project URL value. The ~gametitle~ is the name of your game (it can contain spaces). The ~version~ can be any ~major.minor~ number format. ** Processing line: ~** Building Your Game For Distribution~ - Header detected. *** True Line Result *** True Line Result ** Building Your Game For Distribution ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Open up the terminal and run this from the command line:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Open up the terminal and run this from the command line: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ ./dragonruby-publish --only-package mygame~ - Inside source: true *** True Line Result ./dragonruby-publish --only-package mygame ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~(if you're on Windows, don't put the "./" on the front. That's a Mac and~ ** Processing line: ~Linux thing.)~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result (if you're on Windows, don't put the "./" on the front. That's a Mac and Linux thing.) ** Processing line: ~A directory called ~./build~ will be created that contains your~ ** Processing line: ~binaries. You can upload this to Itch.io manually.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result A directory called ~./build~ will be created that contains your binaries. You can upload this to Itch.io manually. ** Processing line: ~For the HTML version of your game after you upload it. Check the checkbox labeled~ ** Processing line: ~"This file will be played in the browser".~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result For the HTML version of your game after you upload it. Check the checkbox labeled "This file will be played in the browser". ** Processing line: ~For subsequent updates you can use an automated deployment to Itch.io:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result For subsequent updates you can use an automated deployment to Itch.io: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ ./dragonruby-publish mygame~ - Inside source: true *** True Line Result ./dragonruby-publish mygame ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~DragonRuby will package _and publish_ your game to itch.io! Tell your~ ** Processing line: ~friends to go to your game's very own webpage and buy it!~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result DragonRuby will package _and publish_ your game to itch.io! Tell your friends to go to your game's very own webpage and buy it! ** Processing line: ~If you make changes to your game, just re-run dragonruby-publish and it'll~ ** Processing line: ~update the downloads for you.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result If you make changes to your game, just re-run dragonruby-publish and it'll update the downloads for you. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* Deploying To Mobile Devices~ - Header detected. *** True Line Result *** True Line Result * Deploying To Mobile Devices ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~If you have a Pro subscription, you also have the capability to deploy~ ** Processing line: ~to mobile devices.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result If you have a Pro subscription, you also have the capability to deploy to mobile devices. ** Processing line: ~To deploy to iOS, you need to have a Mac running MacOS Catalina, an~ ** Processing line: ~iOS device, and an active/paid Developer Account with Apple. From the~ ** Processing line: ~Console type: ~$wizards.ios.start~ and you will be guided through the~ ** Processing line: ~deployment process.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result To deploy to iOS, you need to have a Mac running MacOS Catalina, an iOS device, and an active/paid Developer Account with Apple. From the Console type: ~$wizards.ios.start~ and you will be guided through the deployment process. ** Processing line: ~To deploy to Android, you need to have an Android emulator/device, and~ ** Processing line: ~an environment that is able to run Android SDK. ~dragonruby-publish~~ ** Processing line: ~will create an APK for you. From there, you can sign the APK and~ ** Processing line: ~install it to your device. The signing and installation procedure~ ** Processing line: ~varies from OS to OS. Here's an example of what the command might look~ ** Processing line: ~like:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result To deploy to Android, you need to have an Android emulator/device, and an environment that is able to run Android SDK. ~dragonruby-publish~ will create an APK for you. From there, you can sign the APK and install it to your device. The signing and installation procedure varies from OS to OS. Here's an example of what the command might look like: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ > adb logcat -e mygame # you'll want to run this in a separate terminal~ - Inside source: true *** True Line Result > adb logcat -e mygame # you'll want to run this in a separate terminal ** Processing line: ~ > keytool -genkey -v -keystore mygame.keystore -alias mygame -keyalg RSA -keysize 2048 -validity 10000~ - Inside source: true *** True Line Result > keytool -genkey -v -keystore mygame.keystore -alias mygame -keyalg RSA -keysize 2048 -validity 10000 ** Processing line: ~ > apksigner sign --ks mygame.keystore mygame-android.apk~ - Inside source: true *** True Line Result > apksigner sign --ks mygame.keystore mygame-android.apk ** Processing line: ~ > adb install mygame-android.apk~ - Inside source: true *** True Line Result > adb install mygame-android.apk ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DragonRuby's Philosophy~ - Header detected. *** True Line Result *** True Line Result * DragonRuby's Philosophy ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The following tenants of DragonRuby are what set us apart from other~ ** Processing line: ~game engines. Given that Game Toolkit is a relatively new engine,~ ** Processing line: ~there are definitely features that are missing. So having a big check~ ** Processing line: ~list of "all the cool things" is not this engine's forte. This is~ ** Processing line: ~compensated with a strong commitment to the following principles.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The following tenants of DragonRuby are what set us apart from other game engines. Given that Game Toolkit is a relatively new engine, there are definitely features that are missing. So having a big check list of "all the cool things" is not this engine's forte. This is compensated with a strong commitment to the following principles. ** Processing line: ~** Challenge The Status Quo~ - Header detected. *** True Line Result *** True Line Result ** Challenge The Status Quo ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Game engines of today are in a local maximum and don't take into~ ** Processing line: ~consideration the challenges of this day and age. Unity and GameMaker~ ** Processing line: ~specifically rot your brain. It's not sufficient to say:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Game engines of today are in a local maximum and don't take into consideration the challenges of this day and age. Unity and GameMaker specifically rot your brain. It's not sufficient to say: ** Processing line: ~#+begin_quote~ - Line was identified as a literal block. *** True Line Result *** True Line Result #+begin_quote ** Processing line: ~But that's how we've always done it.~ ** Processing line: ~#+end_quote~ - Line was identified as a literal block. *** True Line Result But that's how we've always done it. *** True Line Result #+end_quote ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~It's a hard pill to swallow, but forget blindly accepted best~ ** Processing line: ~practices and try to figure out the underlying motivation for a~ ** Processing line: ~specific approach to game development. Collaborate with us.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result It's a hard pill to swallow, but forget blindly accepted best practices and try to figure out the underlying motivation for a specific approach to game development. Collaborate with us. ** Processing line: ~** Continuity of Design~ - Header detected. *** True Line Result *** True Line Result ** Continuity of Design ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~There is a programming idiom in software called "The Pit of~ ** Processing line: ~Success". The term normalizes upfront pain as a necessity/requirement in the~ ** Processing line: ~hopes that the investment will yield dividends "when you become~ ** Processing line: ~successful" or "when the code becomes more complicated". This approach to~ ** Processing line: ~development is strongly discouraged by us. It leads to over-architected~ ** Processing line: ~and unnecessary code; creates barriers to rapid prototyping and shipping a game; and~ ** Processing line: ~overwhelms beginners who are new to the engine or programming in general.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result There is a programming idiom in software called "The Pit of Success". The term normalizes upfront pain as a necessity/requirement in the hopes that the investment will yield dividends "when you become successful" or "when the code becomes more complicated". This approach to development is strongly discouraged by us. It leads to over-architected and unnecessary code; creates barriers to rapid prototyping and shipping a game; and overwhelms beginners who are new to the engine or programming in general. ** Processing line: ~DragonRuby's philosophy is to provide multiple options across the "make it~ ** Processing line: ~fast" vs "make it right" spectrum, with incremental/intuitive~ ** Processing line: ~transitions between the options provided. A concrete example of this philosophy~ ** Processing line: ~would be render primitives: the spectrum of options allows renderable constructs that~ ** Processing line: ~take the form of tuples/arrays (easy to pickup, simple, and fast to code/prototype with),~ ** Processing line: ~hashes (a little more work, but gives you the ability to add additional properties),~ ** Processing line: ~open and strict entities (more work than hashes, but yields cleaner apis),~ ** Processing line: ~and finally - if you really need full power/flexibility in rendering - classes~ ** Processing line: ~(which take the most amount of code and programming knowledge to create).~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result DragonRuby's philosophy is to provide multiple options across the "make it fast" vs "make it right" spectrum, with incremental/intuitive transitions between the options provided. A concrete example of this philosophy would be render primitives: the spectrum of options allows renderable constructs that take the form of tuples/arrays (easy to pickup, simple, and fast to code/prototype with), hashes (a little more work, but gives you the ability to add additional properties), open and strict entities (more work than hashes, but yields cleaner apis), and finally - if you really need full power/flexibility in rendering - classes (which take the most amount of code and programming knowledge to create). ** Processing line: ~** Release Early and Often~ - Header detected. *** True Line Result *** True Line Result ** Release Early and Often ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The biggest mistake game devs make is spending too much time in~ ** Processing line: ~isolation building their game. Release something, however small, and~ ** Processing line: ~release it soon.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The biggest mistake game devs make is spending too much time in isolation building their game. Release something, however small, and release it soon. ** Processing line: ~Stop worrying about everything being pixel perfect. Don't wait until~ ** Processing line: ~your game is 100% complete. Build your game publicly and~ ** Processing line: ~iterate. Post in the #show-and-tell channel in the community Discord.~ ** Processing line: ~You'll find a lot of support and encouragement there.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Stop worrying about everything being pixel perfect. Don't wait until your game is 100% complete. Build your game publicly and iterate. Post in the #show-and-tell channel in the community Discord. You'll find a lot of support and encouragement there. ** Processing line: ~Real artists ship. Remember that.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Real artists ship. Remember that. ** Processing line: ~** Sustainable And Ethical Monetization~ - Header detected. *** True Line Result *** True Line Result ** Sustainable And Ethical Monetization ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~We all aspire to put food on the table doing what we love. Whether it~ ** Processing line: ~is building games, writing tools to support game development, or~ ** Processing line: ~anything in between.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result We all aspire to put food on the table doing what we love. Whether it is building games, writing tools to support game development, or anything in between. ** Processing line: ~Charge a fair amount of money for the things you create. It's expected~ ** Processing line: ~and encouraged within the community. Give what you create away for~ ** Processing line: ~free to those that can't afford it.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Charge a fair amount of money for the things you create. It's expected and encouraged within the community. Give what you create away for free to those that can't afford it. ** Processing line: ~If you are gainfully employed, pay full price for the things you use. If you~ ** Processing line: ~do end up getting something at a discount, pay the difference "forward" to~ ** Processing line: ~someone else.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result If you are gainfully employed, pay full price for the things you use. If you do end up getting something at a discount, pay the difference "forward" to someone else. ** Processing line: ~** Sustainable And Ethical Open Source~ - Header detected. *** True Line Result *** True Line Result ** Sustainable And Ethical Open Source ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~This goes hand in hand with sustainable and ethical monetization. The~ ** Processing line: ~current state of open source is not sustainable. There is an immense~ ** Processing line: ~amount of contributor burnout. Users of open source expect everything~ ** Processing line: ~to be free, and few give back. This is a problem we want to fix (we're~ ** Processing line: ~still trying to figure out the best solution).~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result This goes hand in hand with sustainable and ethical monetization. The current state of open source is not sustainable. There is an immense amount of contributor burnout. Users of open source expect everything to be free, and few give back. This is a problem we want to fix (we're still trying to figure out the best solution). ** Processing line: ~So, don't be "that guy" in the Discord that says "DragonRuby should be~ ** Processing line: ~free and open source!" You will be personally flogged by Amir.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result So, don't be "that guy" in the Discord that says "DragonRuby should be free and open source!" You will be personally flogged by Amir. ** Processing line: ~** People Over Entities~ - Header detected. *** True Line Result *** True Line Result ** People Over Entities ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~We prioritize the endorsement of real people over faceless~ ** Processing line: ~entities. This game engine, and other products we create, are not~ ** Processing line: ~insignificant line items of a large company. And you aren't a generic~ ** Processing line: ~"commodity" or "corporate resource". So be active in the community~ ** Processing line: ~Discord and you'll reap the benefits as more devs use DragonRuby.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result We prioritize the endorsement of real people over faceless entities. This game engine, and other products we create, are not insignificant line items of a large company. And you aren't a generic "commodity" or "corporate resource". So be active in the community Discord and you'll reap the benefits as more devs use DragonRuby. ** Processing line: ~** Building A Game Should Be Fun And Bring Happiness~ - Header detected. *** True Line Result *** True Line Result ** Building A Game Should Be Fun And Bring Happiness ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~We will prioritize the removal of pain. The aesthetics of Ruby make it~ ** Processing line: ~such a joy to work with, and we want to capture that within the~ ** Processing line: ~engine.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result We will prioritize the removal of pain. The aesthetics of Ruby make it such a joy to work with, and we want to capture that within the engine. ** Processing line: ~** Real World Application Drives Features~ - Header detected. *** True Line Result *** True Line Result ** Real World Application Drives Features ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~We are bombarded by marketing speak day in and day out. We don't do~ ** Processing line: ~that here. There are things that are really great in the engine, and~ ** Processing line: ~things that need a lot of work. Collaborate with us so we can help you~ ** Processing line: ~reach your goals. Ask for features you actually need as opposed to~ ** Processing line: ~anything speculative.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result We are bombarded by marketing speak day in and day out. We don't do that here. There are things that are really great in the engine, and things that need a lot of work. Collaborate with us so we can help you reach your goals. Ask for features you actually need as opposed to anything speculative. ** Processing line: ~We want DragonRuby to *actually* help you build the game you~ ** Processing line: ~want to build (as opposed to sell you something piece of demoware that~ ** Processing line: ~doesn't work).~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result We want DragonRuby to *actually* help you build the game you want to build (as opposed to sell you something piece of demoware that doesn't work). ** Processing line: ~* Frequently Asked Questions, Comments, and Concerns~ - Header detected. *** True Line Result *** True Line Result * Frequently Asked Questions, Comments, and Concerns ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Here are questions, comments, and concerns that frequently come~ ** Processing line: ~up.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Here are questions, comments, and concerns that frequently come up. ** Processing line: ~** Frequently Asked Questions~ - Header detected. *** True Line Result *** True Line Result ** Frequently Asked Questions ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** What is DragonRuby LLP?~ - Header detected. *** True Line Result *** True Line Result *** What is DragonRuby LLP? ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~DragonRuby LLP is a partnership of four devs who came together~ ** Processing line: ~with the goal of bringing the aesthetics and joy of Ruby, everywhere possible.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result DragonRuby LLP is a partnership of four devs who came together with the goal of bringing the aesthetics and joy of Ruby, everywhere possible. ** Processing line: ~Under DragonRuby LLP, we offer a number of products (with more on the~ ** Processing line: ~way):~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Under DragonRuby LLP, we offer a number of products (with more on the way): ** Processing line: ~- Game Toolkit (GTK): A 2D game engine that is compatible with modern~ - Line was identified as a list. *** True Line Result ** Processing line: ~ gaming platforms.~ ** Processing line: ~- RubyMotion (RM): A compiler toolchain that allows you to build native, cross-platform mobile~ - Line was identified as a list. *** True Line Result - Game Toolkit (GTK): A 2D game engine that is compatible with modern gaming platforms. ** Processing line: ~ apps. [[http://rubymotion.com]]~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result - RubyMotion (RM): A compiler toolchain that allows you to build native, cross-platform mobile apps. [[http://rubymotion.com]] ** Processing line: ~All of the products above leverage a shared core called DragonRuby.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result All of the products above leverage a shared core called DragonRuby. ** Processing line: ~NOTE: From an official branding standpoint each one of the products is~ ** Processing line: ~suffixed with "A DragonRuby LLP Product" tagline. Also, DragonRuby is~ ** Processing line: ~_one word, title cased_.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result NOTE: From an official branding standpoint each one of the products is suffixed with "A DragonRuby LLP Product" tagline. Also, DragonRuby is _one word, title cased_. ** Processing line: ~NOTE: We leave the "A DragonRuby LLP Product" off of this one because~ ** Processing line: ~that just sounds really weird.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result NOTE: We leave the "A DragonRuby LLP Product" off of this one because that just sounds really weird. ** Processing line: ~NOTE: Devs who use DragonRuby are "Dragon Riders/Riders of Dragons". That's a bad ass~ ** Processing line: ~identifier huh?~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result NOTE: Devs who use DragonRuby are "Dragon Riders/Riders of Dragons". That's a bad ass identifier huh? ** Processing line: ~*** What is DragonRuby?~ - Header detected. *** True Line Result *** True Line Result *** What is DragonRuby? ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The response to this question requires a few subparts. First we need~ ** Processing line: ~to clarify some terms. Specifically _language specification_ vs _runtime_.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The response to this question requires a few subparts. First we need to clarify some terms. Specifically _language specification_ vs _runtime_. ** Processing line: ~**** Okay... so what is the difference between a language specification and a runtime?~ - Header detected. *** True Line Result *** True Line Result **** Okay... so what is the difference between a language specification and a runtime? ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~A runtime is an _implementation_ of a language specification. When~ ** Processing line: ~people say "Ruby," they are usually referring to "the Ruby 3.0+ language~ ** Processing line: ~specification implemented via the CRuby/MRI Runtime."~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result A runtime is an _implementation_ of a language specification. When people say "Ruby," they are usually referring to "the Ruby 3.0+ language specification implemented via the CRuby/MRI Runtime." ** Processing line: ~But, there are many Ruby Runtimes: CRuby/MRI, JRuby, Truffle, Rubinius, Artichoke,~ ** Processing line: ~and (last but certainly not least) DragonRuby.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result But, there are many Ruby Runtimes: CRuby/MRI, JRuby, Truffle, Rubinius, Artichoke, and (last but certainly not least) DragonRuby. ** Processing line: ~**** Okay... what language specification does DragonRuby use then?~ - Header detected. *** True Line Result *** True Line Result **** Okay... what language specification does DragonRuby use then? ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~DragonRuby's goal is to be compliant with the ISO/IEC 30170:2012 standard. It's~ ** Processing line: ~syntax is Ruby 2.x compatible, but also contains semantic changes that help~ ** Processing line: ~it natively interface with platform specific libraries.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result DragonRuby's goal is to be compliant with the ISO/IEC 30170:2012 standard. It's syntax is Ruby 2.x compatible, but also contains semantic changes that help it natively interface with platform specific libraries. ** Processing line: ~**** So... why another runtime?~ - Header detected. *** True Line Result *** True Line Result **** So... why another runtime? ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The elevator pitch is:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The elevator pitch is: ** Processing line: ~DragonRuby is a Multilevel Cross-platform Runtime. The "multiple levels"~ ** Processing line: ~within the runtime allows us to target platforms no other Ruby can~ ** Processing line: ~target: PC, Mac, Linux, Raspberry Pi, WASM, iOS, Android, Nintendo~ ** Processing line: ~Switch, PS4, Xbox, and Stadia.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result DragonRuby is a Multilevel Cross-platform Runtime. The "multiple levels" within the runtime allows us to target platforms no other Ruby can target: PC, Mac, Linux, Raspberry Pi, WASM, iOS, Android, Nintendo Switch, PS4, Xbox, and Stadia. ** Processing line: ~**** What does Multilevel Cross-platform mean?~ - Header detected. *** True Line Result *** True Line Result **** What does Multilevel Cross-platform mean? ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~There are complexities associated with targeting all the platforms we~ ** Processing line: ~support. Because of this, the runtime had to be architected in such a~ ** Processing line: ~way that new platforms could be easily added (which lead to us partitioning the~ ** Processing line: ~runtime internally):~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result There are complexities associated with targeting all the platforms we support. Because of this, the runtime had to be architected in such a way that new platforms could be easily added (which lead to us partitioning the runtime internally): ** Processing line: ~- Level 1 we leverage a good portion of mRuby.~ - Line was identified as a list. *** True Line Result ** Processing line: ~- Level 2 consists of optimizations to mRuby we've made given that our~ - Line was identified as a list. *** True Line Result - Level 1 we leverage a good portion of mRuby. ** Processing line: ~ target platforms are well known.~ ** Processing line: ~- Level 3 consists of portable C libraries and their Ruby~ - Line was identified as a list. *** True Line Result - Level 2 consists of optimizations to mRuby we've made given that our target platforms are well known. ** Processing line: ~ C-Extensions.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result - Level 3 consists of portable C libraries and their Ruby C-Extensions. ** Processing line: ~Levels 1 through 3 are fairly commonplace in many runtime~ ** Processing line: ~implementations (with level 1 being the most portable, and level 3~ ** Processing line: ~being the fastest). But the DragonRuby Runtime has taken things a~ ** Processing line: ~bit further:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Levels 1 through 3 are fairly commonplace in many runtime implementations (with level 1 being the most portable, and level 3 being the fastest). But the DragonRuby Runtime has taken things a bit further: ** Processing line: ~- Level 4 consists of shared abstractions around hardware I/O and operating~ - Line was identified as a list. *** True Line Result ** Processing line: ~ system resources. This level leverages open source and proprietary~ ** Processing line: ~ components within Simple DirectMedia Layer (a low level multimedia~ ** Processing line: ~ component library that has been in active development for 22 years~ ** Processing line: ~ and counting).~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result - Level 4 consists of shared abstractions around hardware I/O and operating system resources. This level leverages open source and proprietary components within Simple DirectMedia Layer (a low level multimedia component library that has been in active development for 22 years and counting). ** Processing line: ~- Level 5 is a code generation layer which creates metadata that allows~ - Line was identified as a list. *** True Line Result ** Processing line: ~ for native interoperability with host runtime libraries. It also~ ** Processing line: ~ includes OS specific message pump orchestrations.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result - Level 5 is a code generation layer which creates metadata that allows for native interoperability with host runtime libraries. It also includes OS specific message pump orchestrations. ** Processing line: ~- Level 6 is a Ahead of Time/Just in Time Ruby compiler built with LLVM. This~ - Line was identified as a list. *** True Line Result ** Processing line: ~ compiler outputs _very_ fast platform specific bitcode, but only~ ** Processing line: ~ supports a subset of the Ruby language specification.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result - Level 6 is a Ahead of Time/Just in Time Ruby compiler built with LLVM. This compiler outputs _very_ fast platform specific bitcode, but only supports a subset of the Ruby language specification. ** Processing line: ~These levels allow us to stay up to date with open source~ ** Processing line: ~implementations of Ruby; provide fast, native code execution~ ** Processing line: ~on proprietary platforms; ensure good separation between these two~ ** Processing line: ~worlds; and provides a means to add new platforms without going insane.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result These levels allow us to stay up to date with open source implementations of Ruby; provide fast, native code execution on proprietary platforms; ensure good separation between these two worlds; and provides a means to add new platforms without going insane. ** Processing line: ~**** Cool cool. So given that I understand everything to this point, can we answer the original question? What is DragonRuby?~ - Header detected. *** True Line Result *** True Line Result **** Cool cool. So given that I understand everything to this point, can we answer the original question? What is DragonRuby? ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~DragonRuby is a Ruby runtime implementation that takes all the lessons~ ** Processing line: ~we've learned from MRI/CRuby, and merges it with the latest and greatest~ ** Processing line: ~compiler and OSS technologies.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result DragonRuby is a Ruby runtime implementation that takes all the lessons we've learned from MRI/CRuby, and merges it with the latest and greatest compiler and OSS technologies. ** Processing line: ~*** How is DragonRuby different than MRI?~ - Header detected. *** True Line Result *** True Line Result *** How is DragonRuby different than MRI? ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~DragonRuby supports a subset of MRI apis. Our target is to support all~ ** Processing line: ~of mRuby's standard lib. There are challenges to this given the number~ ** Processing line: ~of platforms we are trying to support (specifically console).~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result DragonRuby supports a subset of MRI apis. Our target is to support all of mRuby's standard lib. There are challenges to this given the number of platforms we are trying to support (specifically console). ** Processing line: ~**** Does DragonRuby support Gems?~ - Header detected. *** True Line Result *** True Line Result **** Does DragonRuby support Gems? ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~DragonRuby does not support gems because that requires the~ ** Processing line: ~installation of MRI Ruby on the developer's machine (which is a~ ** Processing line: ~non-starter given that we want DragonRuby to be a zero dependency~ ** Processing line: ~runtime). While this seems easy for Mac and Linux, it is much harder~ ** Processing line: ~on Windows and Raspberry Pi. mRuby has taken the approach of having a~ ** Processing line: ~git repository for compatible gems and we will most likely follow~ ** Processing line: ~suite: [[https://github.com/mruby/mgem-list]].~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result DragonRuby does not support gems because that requires the installation of MRI Ruby on the developer's machine (which is a non-starter given that we want DragonRuby to be a zero dependency runtime). While this seems easy for Mac and Linux, it is much harder on Windows and Raspberry Pi. mRuby has taken the approach of having a git repository for compatible gems and we will most likely follow suite: [[https://github.com/mruby/mgem-list]]. ** Processing line: ~**** Does DragonRuby have a REPL/IRB?~ - Header detected. *** True Line Result *** True Line Result **** Does DragonRuby have a REPL/IRB? ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~You can use DragonRuby's Console within the game to inspect object and~ ** Processing line: ~execute small pieces of code. For more complex pieces of code create a~ ** Processing line: ~file called ~repl.rb~ and put it in ~mygame/app/repl.rb~:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You can use DragonRuby's Console within the game to inspect object and execute small pieces of code. For more complex pieces of code create a file called ~repl.rb~ and put it in ~mygame/app/repl.rb~: ** Processing line: ~- Any code you write in there will be executed when you change the file. You can organize different pieces of code using the ~repl~ method:~ - Line was identified as a list. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result - Any code you write in there will be executed when you change the file. You can organize different pieces of code using the ~repl~ method: ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "hello world"~ - Inside source: true *** True Line Result puts "hello world" ** Processing line: ~ puts 1 + 1~ - Inside source: true *** True Line Result puts 1 + 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~- If you use the `repl` method, the code will be executed and the DragonRuby Console will automatically open so you can see the results (on Mac and Linux, the results will also be printed to the terminal).~ - Line was identified as a list. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result - If you use the `repl` method, the code will be executed and the DragonRuby Console will automatically open so you can see the results (on Mac and Linux, the results will also be printed to the terminal). ** Processing line: ~- All ~puts~ statements will also be saved to ~logs/puts.txt~. So if you want to stay in your editor and not look at the terminal, or the DragonRuby Console, you can ~tail~ this file.~ - Line was identified as a list. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result - All ~puts~ statements will also be saved to ~logs/puts.txt~. So if you want to stay in your editor and not look at the terminal, or the DragonRuby Console, you can ~tail~ this file. ** Processing line: ~4. To ignore code in ~repl.rb~, instead of commenting it out, prefix ~repl~ with the letter ~x~ and it'll be ignored.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result 4. To ignore code in ~repl.rb~, instead of commenting it out, prefix ~repl~ with the letter ~x~ and it'll be ignored. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ xrepl do # <------- line is prefixed with an "x"~ - Inside source: true *** True Line Result xrepl do # <------- line is prefixed with an "x" ** Processing line: ~ puts "hello world"~ - Inside source: true *** True Line Result puts "hello world" ** Processing line: ~ puts 1 + 1~ - Inside source: true *** True Line Result puts 1 + 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This code will be executed when you save the file.~ - Inside source: true *** True Line Result # This code will be executed when you save the file. ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "Hello"~ - Inside source: true *** True Line Result puts "Hello" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "This code will also be executed."~ - Inside source: true *** True Line Result puts "This code will also be executed." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # use xrepl to "comment out" code~ - Inside source: true *** True Line Result # use xrepl to "comment out" code ** Processing line: ~ xrepl do~ - Inside source: true *** True Line Result xrepl do ** Processing line: ~ puts "This code will not be executed because of the x in front of repl".~ - Inside source: true *** True Line Result puts "This code will not be executed because of the x in front of repl". ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~**** Does DragonRuby support ~pry~ or have any other debugging facilities?~ - Header detected. *** True Line Result *** True Line Result **** Does DragonRuby support ~pry~ or have any other debugging facilities? ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~pry~ is a gem that assumes you are using the MRI Runtime (which is~ ** Processing line: ~incompatible with DragonRuby). Eventually DragonRuby will have a pry~ ** Processing line: ~based experience that is compatible with a debugging infrastructure~ ** Processing line: ~called LLDB. Take the time to read about LLDB as it shows the~ ** Processing line: ~challenges in creating something that is compatible.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ~pry~ is a gem that assumes you are using the MRI Runtime (which is incompatible with DragonRuby). Eventually DragonRuby will have a pry based experience that is compatible with a debugging infrastructure called LLDB. Take the time to read about LLDB as it shows the challenges in creating something that is compatible. ** Processing line: ~You can use DragonRuby's replay capabilities to troubleshoot:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You can use DragonRuby's replay capabilities to troubleshoot: ** Processing line: ~1. DragonRuby is hot loaded which gives you a very fast feedback loop (if the game throws an exception, it's because of the code you just added).~ - Line was identified as a start of a list. *** True Line Result ** Processing line: ~2. Use ~./dragonruby mygame --record~ to create a game play recording that you can use to find the exception (you can replay a recording by executing ~./dragonruby mygame --replay last_replay.txt~ or through the DragonRuby Console using ~$gtk.recording.start_replay "last_replay.txt"~.~ - Line was identified as a continuation of a list. *** True Line Result 1. DragonRuby is hot loaded which gives you a very fast feedback loop (if the game throws an exception, it's because of the code you just added). ** Processing line: ~3. DragonRuby also ships with a unit testing facility. You can invoke the following command to run a test: ~./dragonruby . --eval some_ruby_file.rb --no-tick~.~ - Line was identified as a continuation of a list. *** True Line Result 2. Use ~./dragonruby mygame --record~ to create a game play recording that you can use to find the exception (you can replay a recording by executing ~./dragonruby mygame --replay last_replay.txt~ or through the DragonRuby Console using ~$gtk.recording.start_replay "last_replay.txt"~. ** Processing line: ~4. Get into the habit of adding debugging facilities within the game itself. You can add drawing primitives to ~args.outputs.debug~ that will render on top of your game but will be ignored in a production release.~ - Line was identified as a continuation of a list. *** True Line Result 3. DragonRuby also ships with a unit testing facility. You can invoke the following command to run a test: ~./dragonruby . --eval some_ruby_file.rb --no-tick~. ** Processing line: ~5. Debugging something that runs at 60fps is (imo) not that helpful. The exception you are seeing could have been because of a change that occurred many frames ago.~ - Line was identified as a continuation of a list. *** True Line Result 4. Get into the habit of adding debugging facilities within the game itself. You can add drawing primitives to ~args.outputs.debug~ that will render on top of your game but will be ignored in a production release. ** Processing line: ~~ - End of paragraph detected. *** True Line Result 5. Debugging something that runs at 60fps is (imo) not that helpful. The exception you are seeing could have been because of a change that occurred many frames ago. ** Processing line: ~** Frequent Comments About Ruby as a Language Choice~ - Header detected. *** True Line Result *** True Line Result ** Frequent Comments About Ruby as a Language Choice ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** But Ruby is dead.~ - Header detected. *** True Line Result *** True Line Result *** But Ruby is dead. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Let's check the official source for the answer to this question:~ ** Processing line: ~isrubydead.com: [[https://isrubydead.com/]].~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Let's check the official source for the answer to this question: isrubydead.com: [[https://isrubydead.com/]]. ** Processing line: ~On a more serious note, Ruby's _quantity_ levels aren't what they used~ ** Processing line: ~to be. And that's totally fine. Everyone chases the new and shiny.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result On a more serious note, Ruby's _quantity_ levels aren't what they used to be. And that's totally fine. Everyone chases the new and shiny. ** Processing line: ~What really matters is _quality/maturity_. Here is the latest (StackOverflow~ ** Processing line: ~Survey sorted by highest paid developers)[https://insights.stackoverflow.com/survey/2019#top-paying-technologies].~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result What really matters is _quality/maturity_. Here is the latest (StackOverflow Survey sorted by highest paid developers)[https://insights.stackoverflow.com/survey/2019#top-paying-technologies]. ** Processing line: ~Let's stop making this comment shall we?~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Let's stop making this comment shall we? ** Processing line: ~*** But Ruby is slow.~ - Header detected. *** True Line Result *** True Line Result *** But Ruby is slow. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~That doesn't make any sense. A language specification can't be~ ** Processing line: ~slow... it's a language spec. Sure, an _implementation/runtime_ can be slow though, but then we'd~ ** Processing line: ~have to talk about which runtime.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result That doesn't make any sense. A language specification can't be slow... it's a language spec. Sure, an _implementation/runtime_ can be slow though, but then we'd have to talk about which runtime. ** Processing line: ~*** Dynamic languages are slow.~ - Header detected. *** True Line Result *** True Line Result *** Dynamic languages are slow. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~They are certainly slower than statically compiled languages. With the~ ** Processing line: ~processing power and compiler optimizations we have today,~ ** Processing line: ~dynamic languages like Ruby are _fast enough_.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result They are certainly slower than statically compiled languages. With the processing power and compiler optimizations we have today, dynamic languages like Ruby are _fast enough_. ** Processing line: ~Unless you are writing in some form of intermediate representation by hand,~ ** Processing line: ~your language of choice also suffers this same fallacy of slow. Like, nothing is~ ** Processing line: ~faster than a low level assembly-like language. So unless you're~ ** Processing line: ~writing in that, let's stop making this comment.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Unless you are writing in some form of intermediate representation by hand, your language of choice also suffers this same fallacy of slow. Like, nothing is faster than a low level assembly-like language. So unless you're writing in that, let's stop making this comment. ** Processing line: ~NOTE: If you _are_ hand writing LLVM IR, we are always open to~ ** Processing line: ~bringing on new partners with such a skill set. Email us ^_^.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result NOTE: If you _are_ hand writing LLVM IR, we are always open to bringing on new partners with such a skill set. Email us ^_^. ** Processing line: ~** Frequent Concerns~ - Header detected. *** True Line Result *** True Line Result ** Frequent Concerns ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** DragonRuby is not open source. That's not right.~ - Header detected. *** True Line Result *** True Line Result *** DragonRuby is not open source. That's not right. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The current state of open source is unsustainable. Contributors work~ ** Processing line: ~for free, most all open source repositories are severely under-staffed,~ ** Processing line: ~and burnout from core members is rampant.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The current state of open source is unsustainable. Contributors work for free, most all open source repositories are severely under-staffed, and burnout from core members is rampant. ** Processing line: ~We believe in open source very strongly. Parts of DragonRuby are~ ** Processing line: ~in fact, open source. Just not all of it (for legal reasons, and~ ** Processing line: ~because the IP we've created has value). And we promise that we are~ ** Processing line: ~looking for (or creating) ways to _sustainably_ open source everything we do.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result We believe in open source very strongly. Parts of DragonRuby are in fact, open source. Just not all of it (for legal reasons, and because the IP we've created has value). And we promise that we are looking for (or creating) ways to _sustainably_ open source everything we do. ** Processing line: ~If you have ideas on how we can do this, email us!~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result If you have ideas on how we can do this, email us! ** Processing line: ~If the reason above isn't sufficient, then definitely use something else.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result If the reason above isn't sufficient, then definitely use something else. ** Processing line: ~All this being said, we do have parts of the engine open sourced on GitHub: [[https://github.com/dragonruby/dragonruby-game-toolkit-contrib/]]~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result All this being said, we do have parts of the engine open sourced on GitHub: [[https://github.com/dragonruby/dragonruby-game-toolkit-contrib/]] ** Processing line: ~*** DragonRuby is for pay. You should offer a free version.~ - Header detected. *** True Line Result *** True Line Result *** DragonRuby is for pay. You should offer a free version. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~If you can afford to pay for DragonRuby, you should (and will). We don't go~ ** Processing line: ~around telling writers that they should give us their books for free,~ ** Processing line: ~and only require payment if we read the entire thing. It's time we stop asking that~ ** Processing line: ~of software products.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result If you can afford to pay for DragonRuby, you should (and will). We don't go around telling writers that they should give us their books for free, and only require payment if we read the entire thing. It's time we stop asking that of software products. ** Processing line: ~That being said, we will _never_ put someone out financially. We have~ ** Processing line: ~income assistance for anyone that can't afford a license to any one of~ ** Processing line: ~our products.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result That being said, we will _never_ put someone out financially. We have income assistance for anyone that can't afford a license to any one of our products. ** Processing line: ~You qualify for a free, unrestricted license to DragonRuby products if~ ** Processing line: ~any of the following items pertain to you:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You qualify for a free, unrestricted license to DragonRuby products if any of the following items pertain to you: ** Processing line: ~- Your income is below $2,000.00 (USD) per month.~ - Line was identified as a list. *** True Line Result ** Processing line: ~- You are under 18 years of age.~ - Line was identified as a list. *** True Line Result - Your income is below $2,000.00 (USD) per month. ** Processing line: ~- You are a student of any type: traditional public school, home~ - Line was identified as a list. *** True Line Result - You are under 18 years of age. ** Processing line: ~ schooling, college, bootcamp, or online.~ ** Processing line: ~- You are a teacher, mentor, or parent who wants to teach a kid how to code.~ - Line was identified as a list. *** True Line Result - You are a student of any type: traditional public school, home schooling, college, bootcamp, or online. ** Processing line: ~- You work/worked in public service or at a charitable organization:~ - Line was identified as a list. *** True Line Result - You are a teacher, mentor, or parent who wants to teach a kid how to code. ** Processing line: ~ for example public office, army, or any 501(c)(3) organization.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result - You work/worked in public service or at a charitable organization: for example public office, army, or any 501(c)(3) organization. ** Processing line: ~Just contact Amir at amir.rajan@dragonruby.org with a short~ ** Processing line: ~explanation of your current situation and he'll set you up. No~ ** Processing line: ~questions asked.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Just contact Amir at amir.rajan@dragonruby.org with a short explanation of your current situation and he'll set you up. No questions asked. ** Processing line: ~*** But still, you should offer a free version. So I can try it out and see if I like it.~ - Header detected. *** True Line Result *** True Line Result *** But still, you should offer a free version. So I can try it out and see if I like it. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~You can try our web-based sandbox environment at [[http://fiddle.dragonruby.org]]. But it won't do the~ ** Processing line: ~runtime justice. Or just come to our Discord Channel at [[http://discord.dragonruby.org]] and ask questions.~ ** Processing line: ~We'd be happy to have a one on one video chat with you and show off all the cool stuff we're doing.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You can try our web-based sandbox environment at [[http://fiddle.dragonruby.org]]. But it won't do the runtime justice. Or just come to our Discord Channel at [[http://discord.dragonruby.org]] and ask questions. We'd be happy to have a one on one video chat with you and show off all the cool stuff we're doing. ** Processing line: ~Seriously just buy it. Get a refund if you don't like it. We make it stupid easy to do so.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Seriously just buy it. Get a refund if you don't like it. We make it stupid easy to do so. ** Processing line: ~*** I still think you should do a free version. Think of all people who would give it a shot.~ - Header detected. *** True Line Result *** True Line Result *** I still think you should do a free version. Think of all people who would give it a shot. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Free isn't a sustainable financial model. We don't want to spam your~ ** Processing line: ~email. We don't want to collect usage data off of you either. We just~ ** Processing line: ~want to provide quality toolchains to quality developers (as opposed~ ** Processing line: ~to a large quantity of developers).~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Free isn't a sustainable financial model. We don't want to spam your email. We don't want to collect usage data off of you either. We just want to provide quality toolchains to quality developers (as opposed to a large quantity of developers). ** Processing line: ~The people that pay for DragonRuby and make an effort to understand it are the~ ** Processing line: ~ones we want to build a community around, partner with, and collaborate~ ** Processing line: ~with. So having that small monetary wall deters entitled individuals~ ** Processing line: ~that don't value the same things we do.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The people that pay for DragonRuby and make an effort to understand it are the ones we want to build a community around, partner with, and collaborate with. So having that small monetary wall deters entitled individuals that don't value the same things we do. ** Processing line: ~*** What if I build something with DragonRuby, but DragonRuby LLP becomes insolvent.~ - Header detected. *** True Line Result *** True Line Result *** What if I build something with DragonRuby, but DragonRuby LLP becomes insolvent. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~That won't happen if the development world stop asking for free stuff~ ** Processing line: ~and non-trivially compensate open source developers. Look, we want to be~ ** Processing line: ~able to work on the stuff we love, every day of our lives. And we'll go~ ** Processing line: ~to great lengths to make that happen.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result That won't happen if the development world stop asking for free stuff and non-trivially compensate open source developers. Look, we want to be able to work on the stuff we love, every day of our lives. And we'll go to great lengths to make that happen. ** Processing line: ~But, in the event that sad day comes, our partnership bylaws state that~ ** Processing line: ~_all_ DragonRuby IP that can be legally open sourced, will be released~ ** Processing line: ~under a permissive license.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result But, in the event that sad day comes, our partnership bylaws state that _all_ DragonRuby IP that can be legally open sourced, will be released under a permissive license. ** Processing line: ~* RECIPIES:~ - Header detected. *** True Line Result *** True Line Result * RECIPIES: ** Processing line: ~** How To Determine What Frame You Are On~ - Header detected. *** True Line Result *** True Line Result ** How To Determine What Frame You Are On ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~There is a property on ~state~ called ~tick_count~ that is incremented~ ** Processing line: ~by DragonRuby every time the ~tick~ method is called. The following~ ** Processing line: ~code renders a label that displays the current ~tick_count~.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result There is a property on ~state~ called ~tick_count~ that is incremented by DragonRuby every time the ~tick~ method is called. The following code renders a label that displays the current ~tick_count~. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.labels << [10, 670, "#{args.state.tick_count}"]~ - Inside source: true *** True Line Result args.outputs.labels << [10, 670, "#{args.state.tick_count}"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** How To Get Current Framerate~ - Header detected. *** True Line Result *** True Line Result ** How To Get Current Framerate ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Current framerate is a top level property on the Game Toolkit Runtime~ ** Processing line: ~and is accessible via ~args.gtk.current_framerate~.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Current framerate is a top level property on the Game Toolkit Runtime and is accessible via ~args.gtk.current_framerate~. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.labels << [10, 710, "framerate: #{args.gtk.current_framerate.round}"]~ - Inside source: true *** True Line Result args.outputs.labels << [10, 710, "framerate: #{args.gtk.current_framerate.round}"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** How To Render A Sprite Using An Array~ - Header detected. *** True Line Result *** True Line Result ** How To Render A Sprite Using An Array ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~All file paths should use the forward slash ~/~ *not* backslash~ ** Processing line: ~~~. Game Toolkit includes a number of sprites in the ~sprites~~ ** Processing line: ~folder (everything about your game is located in the ~mygame~ directory).~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result All file paths should use the forward slash ~/~ *not* backslash ~~. Game Toolkit includes a number of sprites in the ~sprites~ folder (everything about your game is located in the ~mygame~ directory). ** Processing line: ~The following code renders a sprite with a ~width~ and ~height~ of~ ** Processing line: ~~100~ in the center of the screen.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The following code renders a sprite with a ~width~ and ~height~ of ~100~ in the center of the screen. ** Processing line: ~~args.outputs.sprites~ is used to render a sprite.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ~args.outputs.sprites~ is used to render a sprite. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.sprites << [~ - Inside source: true *** True Line Result args.outputs.sprites << [ ** Processing line: ~ 640 - 50, # X~ - Inside source: true *** True Line Result 640 - 50, # X ** Processing line: ~ 360 - 50, # Y~ - Inside source: true *** True Line Result 360 - 50, # Y ** Processing line: ~ 100, # W~ - Inside source: true *** True Line Result 100, # W ** Processing line: ~ 100, # H~ - Inside source: true *** True Line Result 100, # H ** Processing line: ~ 'sprites/square-blue.png' # PATH~ - Inside source: true *** True Line Result 'sprites/square-blue.png' # PATH ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** More Sprite Properties As An Array~ - Header detected. *** True Line Result *** True Line Result ** More Sprite Properties As An Array ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Here are all the properties you can set on a sprite.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Here are all the properties you can set on a sprite. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.sprites << [~ - Inside source: true *** True Line Result args.outputs.sprites << [ ** Processing line: ~ 100, # X~ - Inside source: true *** True Line Result 100, # X ** Processing line: ~ 100, # Y~ - Inside source: true *** True Line Result 100, # Y ** Processing line: ~ 32, # W~ - Inside source: true *** True Line Result 32, # W ** Processing line: ~ 64, # H~ - Inside source: true *** True Line Result 64, # H ** Processing line: ~ 'sprites/square-blue.png', # PATH~ - Inside source: true *** True Line Result 'sprites/square-blue.png', # PATH ** Processing line: ~ 0, # ANGLE~ - Inside source: true *** True Line Result 0, # ANGLE ** Processing line: ~ 255, # ALPHA~ - Inside source: true *** True Line Result 255, # ALPHA ** Processing line: ~ 0, # RED_SATURATION~ - Inside source: true *** True Line Result 0, # RED_SATURATION ** Processing line: ~ 255, # GREEN_SATURATION~ - Inside source: true *** True Line Result 255, # GREEN_SATURATION ** Processing line: ~ 0 # BLUE_SATURATION~ - Inside source: true *** True Line Result 0 # BLUE_SATURATION ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** Different Sprite Representations~ - Header detected. *** True Line Result *** True Line Result ** Different Sprite Representations ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Using ordinal positioning can get a little unruly given so many~ ** Processing line: ~properties you have control over.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Using ordinal positioning can get a little unruly given so many properties you have control over. ** Processing line: ~You can represent a sprite as a ~Hash~:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You can represent a sprite as a ~Hash~: ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.sprites << {~ - Inside source: true *** True Line Result args.outputs.sprites << { ** Processing line: ~ x: 640 - 50,~ - Inside source: true *** True Line Result x: 640 - 50, ** Processing line: ~ y: 360 - 50,~ - Inside source: true *** True Line Result y: 360 - 50, ** Processing line: ~ w: 100,~ - Inside source: true *** True Line Result w: 100, ** Processing line: ~ h: 100,~ - Inside source: true *** True Line Result h: 100, ** Processing line: ~ path: 'sprites/square-blue.png',~ - Inside source: true *** True Line Result path: 'sprites/square-blue.png', ** Processing line: ~ angle: 0,~ - Inside source: true *** True Line Result angle: 0, ** Processing line: ~ a: 255,~ - Inside source: true *** True Line Result a: 255, ** Processing line: ~ r: 255,~ - Inside source: true *** True Line Result r: 255, ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 255,~ - Inside source: true *** True Line Result b: 255, ** Processing line: ~ source_x: 0,~ - Inside source: true *** True Line Result source_x: 0, ** Processing line: ~ source_y: 0,~ - Inside source: true *** True Line Result source_y: 0, ** Processing line: ~ source_w: -1,~ - Inside source: true *** True Line Result source_w: -1, ** Processing line: ~ source_h: -1,~ - Inside source: true *** True Line Result source_h: -1, ** Processing line: ~ flip_vertically: false,~ - Inside source: true *** True Line Result flip_vertically: false, ** Processing line: ~ flip_horizontally: false,~ - Inside source: true *** True Line Result flip_horizontally: false, ** Processing line: ~ angle_anchor_x: 0.5,~ - Inside source: true *** True Line Result angle_anchor_x: 0.5, ** Processing line: ~ angle_anchor_y: 1.0,~ - Inside source: true *** True Line Result angle_anchor_y: 1.0, ** Processing line: ~ blendmode_enum: 1~ - Inside source: true *** True Line Result blendmode_enum: 1 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The ~blendmode_enum~ value can be set to ~0~ (no blending), ~1~ (alpha blending),~ ** Processing line: ~~2~ (additive blending), ~3~ (modulo blending), ~4~ (multiply blending).~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The ~blendmode_enum~ value can be set to ~0~ (no blending), ~1~ (alpha blending), ~2~ (additive blending), ~3~ (modulo blending), ~4~ (multiply blending). ** Processing line: ~You can represent a sprite as an ~object~:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You can represent a sprite as an ~object~: ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # Create type with ALL sprite properties AND primitive_marker~ - Inside source: true *** True Line Result # Create type with ALL sprite properties AND primitive_marker ** Processing line: ~ class Sprite~ - Inside source: true *** True Line Result class Sprite ** Processing line: ~ attr_accessor :x, :y, :w, :h, :path, :angle, :a, :r, :g, :b,~ - Inside source: true *** True Line Result attr_accessor :x, :y, :w, :h, :path, :angle, :a, :r, :g, :b, ** Processing line: ~ :source_x, :source_y, :source_w, :source_h,~ - Inside source: true *** True Line Result :source_x, :source_y, :source_w, :source_h, ** Processing line: ~ :tile_x, :tile_y, :tile_w, :tile_h,~ - Inside source: true *** True Line Result :tile_x, :tile_y, :tile_w, :tile_h, ** Processing line: ~ :flip_horizontally, :flip_vertically,~ - Inside source: true *** True Line Result :flip_horizontally, :flip_vertically, ** Processing line: ~ :angle_anchor_x, :angle_anchor_y, :blendmode_enum~ - Inside source: true *** True Line Result :angle_anchor_x, :angle_anchor_y, :blendmode_enum ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def primitive_marker~ - Inside source: true *** True Line Result def primitive_marker ** Processing line: ~ :sprite~ - Inside source: true *** True Line Result :sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class BlueSquare < Sprite~ - Inside source: true *** True Line Result class BlueSquare < Sprite ** Processing line: ~ def initialize opts~ - Inside source: true *** True Line Result def initialize opts ** Processing line: ~ @x = opts[:x]~ - Inside source: true *** True Line Result @x = opts[:x] ** Processing line: ~ @y = opts[:y]~ - Inside source: true *** True Line Result @y = opts[:y] ** Processing line: ~ @w = opts[:w]~ - Inside source: true *** True Line Result @w = opts[:w] ** Processing line: ~ @h = opts[:h]~ - Inside source: true *** True Line Result @h = opts[:h] ** Processing line: ~ @path = 'sprites/square-blue.png'~ - Inside source: true *** True Line Result @path = 'sprites/square-blue.png' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.sprites << (BlueSquare.new x: 640 - 50,~ - Inside source: true *** True Line Result args.outputs.sprites << (BlueSquare.new x: 640 - 50, ** Processing line: ~ y: 360 - 50,~ - Inside source: true *** True Line Result y: 360 - 50, ** Processing line: ~ w: 50,~ - Inside source: true *** True Line Result w: 50, ** Processing line: ~ h: 50)~ - Inside source: true *** True Line Result h: 50) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** How To Render A Label~ - Header detected. *** True Line Result *** True Line Result ** How To Render A Label ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~args.outputs.labels~ is used to render labels.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ~args.outputs.labels~ is used to render labels. ** Processing line: ~Labels are how you display text. This code will go directly inside of~ ** Processing line: ~the ~def tick args~ method.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Labels are how you display text. This code will go directly inside of the ~def tick args~ method. ** Processing line: ~Here is the minimum code:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Here is the minimum code: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # X Y TEXT~ - Inside source: true *** True Line Result # X Y TEXT ** Processing line: ~ args.outputs.labels << [640, 360, "I am a black label."]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 360, "I am a black label."] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** A Colored Label~ - Header detected. *** True Line Result *** True Line Result ** A Colored Label ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # A colored label~ - Inside source: true *** True Line Result # A colored label ** Processing line: ~ # X Y TEXT, RED GREEN BLUE ALPHA~ - Inside source: true *** True Line Result # X Y TEXT, RED GREEN BLUE ALPHA ** Processing line: ~ args.outputs.labels << [640, 360, "I am a redish label.", 255, 128, 128, 255]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 360, "I am a redish label.", 255, 128, 128, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** Extended Label Properties~ - Header detected. *** True Line Result *** True Line Result ** Extended Label Properties ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # A colored label~ - Inside source: true *** True Line Result # A colored label ** Processing line: ~ # X Y TEXT SIZE ALIGNMENT RED GREEN BLUE ALPHA FONT FILE~ - Inside source: true *** True Line Result # X Y TEXT SIZE ALIGNMENT RED GREEN BLUE ALPHA FONT FILE ** Processing line: ~ args.outputs.labels << [~ - Inside source: true *** True Line Result args.outputs.labels << [ ** Processing line: ~ 640, # X~ - Inside source: true *** True Line Result 640, # X ** Processing line: ~ 360, # Y~ - Inside source: true *** True Line Result 360, # Y ** Processing line: ~ "Hello world", # TEXT~ - Inside source: true *** True Line Result "Hello world", # TEXT ** Processing line: ~ 0, # SIZE_ENUM~ - Inside source: true *** True Line Result 0, # SIZE_ENUM ** Processing line: ~ 1, # ALIGNMENT_ENUM~ - Inside source: true *** True Line Result 1, # ALIGNMENT_ENUM ** Processing line: ~ 0, # RED~ - Inside source: true *** True Line Result 0, # RED ** Processing line: ~ 0, # GREEN~ - Inside source: true *** True Line Result 0, # GREEN ** Processing line: ~ 0, # BLUE~ - Inside source: true *** True Line Result 0, # BLUE ** Processing line: ~ 255, # ALPHA~ - Inside source: true *** True Line Result 255, # ALPHA ** Processing line: ~ "fonts/coolfont.ttf" # FONT~ - Inside source: true *** True Line Result "fonts/coolfont.ttf" # FONT ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~A ~SIZE_ENUM~ of ~0~ represents "default size". A ~negative~ value~ ** Processing line: ~will decrease the label size. A ~positive~ value will increase the~ ** Processing line: ~label's size.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result A ~SIZE_ENUM~ of ~0~ represents "default size". A ~negative~ value will decrease the label size. A ~positive~ value will increase the label's size. ** Processing line: ~An ~ALIGNMENT_ENUM~ of ~0~ represents "left aligned". ~1~ represents~ ** Processing line: ~"center aligned". ~2~ represents "right aligned".~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result An ~ALIGNMENT_ENUM~ of ~0~ represents "left aligned". ~1~ represents "center aligned". ~2~ represents "right aligned". ** Processing line: ~** Rendering A Label As A ~Hash~~ - Header detected. *** True Line Result *** True Line Result ** Rendering A Label As A ~Hash~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~You can add additional metadata about your game within a label, which requires you to use a `Hash` instead.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You can add additional metadata about your game within a label, which requires you to use a `Hash` instead. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.labels << {~ - Inside source: true *** True Line Result args.outputs.labels << { ** Processing line: ~ x: 200,~ - Inside source: true *** True Line Result x: 200, ** Processing line: ~ y: 550,~ - Inside source: true *** True Line Result y: 550, ** Processing line: ~ text: "dragonruby",~ - Inside source: true *** True Line Result text: "dragonruby", ** Processing line: ~ size_enum: 2,~ - Inside source: true *** True Line Result size_enum: 2, ** Processing line: ~ alignment_enum: 1,~ - Inside source: true *** True Line Result alignment_enum: 1, ** Processing line: ~ r: 155,~ - Inside source: true *** True Line Result r: 155, ** Processing line: ~ g: 50,~ - Inside source: true *** True Line Result g: 50, ** Processing line: ~ b: 50,~ - Inside source: true *** True Line Result b: 50, ** Processing line: ~ a: 255,~ - Inside source: true *** True Line Result a: 255, ** Processing line: ~ font: "fonts/manaspc.ttf",~ - Inside source: true *** True Line Result font: "fonts/manaspc.ttf", ** Processing line: ~ vertical_alignment_enum: 0, # 0 is bottom, 1 is middle, 2 is top~ - Inside source: true *** True Line Result vertical_alignment_enum: 0, # 0 is bottom, 1 is middle, 2 is top ** Processing line: ~ # You can add any properties you like (this will be ignored/won't cause errors)~ - Inside source: true *** True Line Result # You can add any properties you like (this will be ignored/won't cause errors) ** Processing line: ~ game_data_one: "Something",~ - Inside source: true *** True Line Result game_data_one: "Something", ** Processing line: ~ game_data_two: {~ - Inside source: true *** True Line Result game_data_two: { ** Processing line: ~ value_1: "value",~ - Inside source: true *** True Line Result value_1: "value", ** Processing line: ~ value_2: "value two",~ - Inside source: true *** True Line Result value_2: "value two", ** Processing line: ~ a_number: 15~ - Inside source: true *** True Line Result a_number: 15 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** Getting The Size Of A Piece Of Text~ - Header detected. *** True Line Result *** True Line Result ** Getting The Size Of A Piece Of Text ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~You can get the render size of any string using ~args.gtk.calcstringbox~.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You can get the render size of any string using ~args.gtk.calcstringbox~. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # TEXT SIZE_ENUM FONT~ - Inside source: true *** True Line Result # TEXT SIZE_ENUM FONT ** Processing line: ~ w, h = args.gtk.calcstringbox("some string", 0, "font.ttf")~ - Inside source: true *** True Line Result w, h = args.gtk.calcstringbox("some string", 0, "font.ttf") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # NOTE: The SIZE_ENUM and FONT are optional arguments.~ - Inside source: true *** True Line Result # NOTE: The SIZE_ENUM and FONT are optional arguments. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a label showing the w and h of the text:~ - Inside source: true *** True Line Result # Render a label showing the w and h of the text: ** Processing line: ~ args.outputs.labels << [~ - Inside source: true *** True Line Result args.outputs.labels << [ ** Processing line: ~ 10,~ - Inside source: true *** True Line Result 10, ** Processing line: ~ 710,~ - Inside source: true *** True Line Result 710, ** Processing line: ~ # This string uses Ruby's string interpolation literal: #{}~ - Inside source: true *** True Line Result # This string uses Ruby's string interpolation literal: #{} ** Processing line: ~ "'some string' has width: #{w}, and height: #{h}."~ - Inside source: true *** True Line Result "'some string' has width: #{w}, and height: #{h}." ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** Rendering Labels With New Line Characters And Wrapping~ - Header detected. *** True Line Result *** True Line Result ** Rendering Labels With New Line Characters And Wrapping ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~You can use a strategy like the following to create multiple labels from a String.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You can use a strategy like the following to create multiple labels from a String. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ long_string = "Lorem ipsum dolor sit amet, consectetur adipiscing elitteger dolor velit, ultricies vitae libero vel, aliquam imperdiet enim."~ - Inside source: true *** True Line Result long_string = "Lorem ipsum dolor sit amet, consectetur adipiscing elitteger dolor velit, ultricies vitae libero vel, aliquam imperdiet enim." ** Processing line: ~ max_character_length = 30~ - Inside source: true *** True Line Result max_character_length = 30 ** Processing line: ~ long_strings_split = args.string.wrapped_lines long_string, max_character_length~ - Inside source: true *** True Line Result long_strings_split = args.string.wrapped_lines long_string, max_character_length ** Processing line: ~ args.outputs.labels << long_strings_split.map_with_index do |s, i|~ - Inside source: true *** True Line Result args.outputs.labels << long_strings_split.map_with_index do |s, i| ** Processing line: ~ { x: 10, y: 600 - (i * 20), text: s }~ - Inside source: true *** True Line Result { x: 10, y: 600 - (i * 20), text: s } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** How To Play A Sound~ - Header detected. *** True Line Result *** True Line Result ** How To Play A Sound ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Sounds that end ~.wav~ will play once:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Sounds that end ~.wav~ will play once: ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # Play a sound every second~ - Inside source: true *** True Line Result # Play a sound every second ** Processing line: ~ if (args.state.tick_count % 60) == 0~ - Inside source: true *** True Line Result if (args.state.tick_count % 60) == 0 ** Processing line: ~ args.outputs.sounds << 'something.wav'~ - Inside source: true *** True Line Result args.outputs.sounds << 'something.wav' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Sounds that end ~.ogg~ is considered background music and will loop:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Sounds that end ~.ogg~ is considered background music and will loop: ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # Start a sound loop at the beginning of the game~ - Inside source: true *** True Line Result # Start a sound loop at the beginning of the game ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.outputs.sounds << 'background_music.ogg'~ - Inside source: true *** True Line Result args.outputs.sounds << 'background_music.ogg' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~If you want to play a ~.ogg~ once as if it were a sound effect, you can do:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result If you want to play a ~.ogg~ once as if it were a sound effect, you can do: ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # Play a sound every second~ - Inside source: true *** True Line Result # Play a sound every second ** Processing line: ~ if (args.state.tick_count % 60) == 0~ - Inside source: true *** True Line Result if (args.state.tick_count % 60) == 0 ** Processing line: ~ args.gtk.queue_sound 'some-ogg.ogg'~ - Inside source: true *** True Line Result args.gtk.queue_sound 'some-ogg.ogg' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** Using ~args.state~ To Store Your Game State~ - Header detected. *** True Line Result *** True Line Result ** Using ~args.state~ To Store Your Game State ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~args.state~ is a open data structure that allows you to define~ ** Processing line: ~properties that are arbitrarily nested. You don't need to define any kind of~ ** Processing line: ~~class~.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ~args.state~ is a open data structure that allows you to define properties that are arbitrarily nested. You don't need to define any kind of ~class~. ** Processing line: ~To initialize your game state, use the ~||=~ operator. Any value on~ ** Processing line: ~the right side of ~||=~ will only be assigned _once_.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result To initialize your game state, use the ~||=~ operator. Any value on the right side of ~||=~ will only be assigned _once_. ** Processing line: ~To assign a value every frame, just use the ~=~ operator, but _make~ ** Processing line: ~sure_ you've initialized a default value.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result To assign a value every frame, just use the ~=~ operator, but _make sure_ you've initialized a default value. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # initialize your game state ONCE~ - Inside source: true *** True Line Result # initialize your game state ONCE ** Processing line: ~ args.state.player.x ||= 0~ - Inside source: true *** True Line Result args.state.player.x ||= 0 ** Processing line: ~ args.state.player.y ||= 0~ - Inside source: true *** True Line Result args.state.player.y ||= 0 ** Processing line: ~ args.state.player.hp ||= 100~ - Inside source: true *** True Line Result args.state.player.hp ||= 100 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # increment the x position of the character by one every frame~ - Inside source: true *** True Line Result # increment the x position of the character by one every frame ** Processing line: ~ args.state.player.x += 1~ - Inside source: true *** True Line Result args.state.player.x += 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a sprite with a label above the sprite~ - Inside source: true *** True Line Result # Render a sprite with a label above the sprite ** Processing line: ~ args.outputs.sprites << [~ - Inside source: true *** True Line Result args.outputs.sprites << [ ** Processing line: ~ args.state.player.x,~ - Inside source: true *** True Line Result args.state.player.x, ** Processing line: ~ args.state.player.y,~ - Inside source: true *** True Line Result args.state.player.y, ** Processing line: ~ 32, 32,~ - Inside source: true *** True Line Result 32, 32, ** Processing line: ~ "player.png"~ - Inside source: true *** True Line Result "player.png" ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << [~ - Inside source: true *** True Line Result args.outputs.labels << [ ** Processing line: ~ args.state.player.x,~ - Inside source: true *** True Line Result args.state.player.x, ** Processing line: ~ args.state.player.y - 50,~ - Inside source: true *** True Line Result args.state.player.y - 50, ** Processing line: ~ args.state.player.hp~ - Inside source: true *** True Line Result args.state.player.hp ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** Troubleshoot Performance~ - Header detected. *** True Line Result *** True Line Result ** Troubleshoot Performance ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~1. If you're using ~Array~s for your primitives (~args.outputs.sprites << []~), use ~Hash~ instead (~args.outputs.sprites << { x: ... }~).~ - Line was identified as a start of a list. *** True Line Result ** Processing line: ~2. If you're using ~Entity~ for your primitives (~args.outputs.sprites << args.state.new_entity~), use ~StrictEntity~ instead (~args.outputs.sprites << args.state.new_entity_strict~).~ - Line was identified as a continuation of a list. *** True Line Result 1. If you're using ~Array~s for your primitives (~args.outputs.sprites << []~), use ~Hash~ instead (~args.outputs.sprites << { x: ... }~). ** Processing line: ~3. Use ~.each~ instead of ~.map~ if you don't care about the return value.~ - Line was identified as a continuation of a list. *** True Line Result 2. If you're using ~Entity~ for your primitives (~args.outputs.sprites << args.state.new_entity~), use ~StrictEntity~ instead (~args.outputs.sprites << args.state.new_entity_strict~). ** Processing line: ~4. When concatenating primitives to outputs, do them in bulk. Instead of:~ - Line was identified as a continuation of a list. *** True Line Result 3. Use ~.each~ instead of ~.map~ if you don't care about the return value. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result 4. When concatenating primitives to outputs, do them in bulk. Instead of: *** True Line Result #+begin_src ruby ** Processing line: ~ args.state.bullets.each do |bullet|~ - Inside source: true *** True Line Result args.state.bullets.each do |bullet| ** Processing line: ~ args.outputs.sprites << bullet.sprite~ - Inside source: true *** True Line Result args.outputs.sprites << bullet.sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~do~ ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result do *** True Line Result #+begin_src ** Processing line: ~ args.outputs.sprites << args.state.bullets.map do |b|~ - Inside source: true *** True Line Result args.outputs.sprites << args.state.bullets.map do |b| ** Processing line: ~ b.sprite~ - Inside source: true *** True Line Result b.sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~5. Use ~args.outputs.static_~ variant for things that don't change often (take a look at the Basic Gorillas sample app and Dueling Starships sample app to see how ~static_~ is leveraged.~ - Line was identified as a continuation of a list. *** True Line Result ** Processing line: ~6. Consider using a ~render_target~ if you're doing some form of a camera that moves a lot of primitives (take a look at the Render Target sample apps for more info).~ - Line was identified as a continuation of a list. *** True Line Result 5. Use ~args.outputs.static_~ variant for things that don't change often (take a look at the Basic Gorillas sample app and Dueling Starships sample app to see how ~static_~ is leveraged. ** Processing line: ~~ - End of paragraph detected. *** True Line Result 6. Consider using a ~render_target~ if you're doing some form of a camera that moves a lot of primitives (take a look at the Render Target sample apps for more info). ** Processing line: ~* DOCS: ~GTK::Runtime~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::Runtime~ ** Processing line: ~The GTK::Runtime class is the core of DragonRuby. It is globally accessible via ~$gtk~.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The GTK::Runtime class is the core of DragonRuby. It is globally accessible via ~$gtk~. ** Processing line: ~* SUMMARY: ~def tick args; end;~~ - Header detected. *** True Line Result *** True Line Result * SUMMARY: ~def tick args; end;~ ** Processing line: ~Most everything you will need to build your game is in the ~args~ parameter that is provided to your ~tick~ method. Follows is a high level summary of each function that is available from ~args~.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Most everything you will need to build your game is in the ~args~ parameter that is provided to your ~tick~ method. Follows is a high level summary of each function that is available from ~args~. ** Processing line: ~All the properties below hang off of ~args~ and can be accessed in the ~tick~ method:~ ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result All the properties below hang off of ~args~ and can be accessed in the ~tick~ method: *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.PROPERTY~ - Inside source: true *** True Line Result args.PROPERTY ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~** ~args.state~~ - Header detected. *** True Line Result *** True Line Result ** ~args.state~ ** Processing line: ~Store your game state inside of this ~state~. Properties with arbitrary nesting is allowed and a backing Entity will be created on your behalf.~ ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result Store your game state inside of this ~state~. Properties with arbitrary nesting is allowed and a backing Entity will be created on your behalf. *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.player.x ||= 0~ - Inside source: true *** True Line Result args.state.player.x ||= 0 ** Processing line: ~ args.state.player.y ||= 0~ - Inside source: true *** True Line Result args.state.player.y ||= 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~*** ~.*.entity_id~~ - Header detected. *** True Line Result *** True Line Result *** ~.*.entity_id~ ** Processing line: ~Entities automatically receive an ~entity_id~ of type ~Fixnum~.~ ** Processing line: ~*** ~.*.entity_type~~ - Header detected. *** True Line Result Entities automatically receive an ~entity_id~ of type ~Fixnum~. *** True Line Result *** ~.*.entity_type~ ** Processing line: ~Entities can have an ~entity_type~ which is represented as a ~Symbol~.~ ** Processing line: ~*** ~.*.created_at~~ - Header detected. *** True Line Result Entities can have an ~entity_type~ which is represented as a ~Symbol~. *** True Line Result *** ~.*.created_at~ ** Processing line: ~Entities have ~created_at~ set to ~args.state.tick_count~ when they are created.~ ** Processing line: ~*** ~.*.created_at_elapsed~~ - Header detected. *** True Line Result Entities have ~created_at~ set to ~args.state.tick_count~ when they are created. *** True Line Result *** ~.*.created_at_elapsed~ ** Processing line: ~Returns the elapsed number of ticks since creation.~ ** Processing line: ~*** ~.*.global_created_at~~ - Header detected. *** True Line Result Returns the elapsed number of ticks since creation. *** True Line Result *** ~.*.global_created_at~ ** Processing line: ~Entities have ~global_created_at~ set to ~Kernel.global_tick_count~ when they are created.~ ** Processing line: ~*** ~.*.global_created_at_elapsed~~ - Header detected. *** True Line Result Entities have ~global_created_at~ set to ~Kernel.global_tick_count~ when they are created. *** True Line Result *** ~.*.global_created_at_elapsed~ ** Processing line: ~Returns the elapsed number of global ticks since creation.~ ** Processing line: ~*** ~.*.as_hash~~ - Header detected. *** True Line Result Returns the elapsed number of global ticks since creation. *** True Line Result *** ~.*.as_hash~ ** Processing line: ~Entity cast to a ~Hash~ so you can update values as if you were updating a ~Hash~.~ ** Processing line: ~*** ~.new_entity~~ - Header detected. *** True Line Result Entity cast to a ~Hash~ so you can update values as if you were updating a ~Hash~. *** True Line Result *** ~.new_entity~ ** Processing line: ~Creates a new Entity with a ~type~, and initial properties. An option block can be passed to change the newly created entity:~ ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result Creates a new Entity with a ~type~, and initial properties. An option block can be passed to change the newly created entity: *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.player ||= args.state.new_entity :player, x: 0, y: 0 do |e|~ - Inside source: true *** True Line Result args.state.player ||= args.state.new_entity :player, x: 0, y: 0 do |e| ** Processing line: ~ e.max_hp = 100~ - Inside source: true *** True Line Result e.max_hp = 100 ** Processing line: ~ e.hp = e.max_hp * rand~ - Inside source: true *** True Line Result e.hp = e.max_hp * rand ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~*** ~.new_entity_strict~~ - Header detected. *** True Line Result *** True Line Result *** ~.new_entity_strict~ ** Processing line: ~Creates a new Strict Entity. While Entities created via ~args.state.new_entity~ can have new properties added later on, Entities created~ ** Processing line: ~using ~args.state.new_entity~ must define all properties that are allowed during its initialization. Attempting to add new properties after~ ** Processing line: ~initialization will result in an exception.~ ** Processing line: ~*** ~.tick_count~~ - Header detected. *** True Line Result Creates a new Strict Entity. While Entities created via ~args.state.new_entity~ can have new properties added later on, Entities created using ~args.state.new_entity~ must define all properties that are allowed during its initialization. Attempting to add new properties after initialization will result in an exception. *** True Line Result *** ~.tick_count~ ** Processing line: ~Returns the current tick of the game. ~args.state.tick_count~ is ~0~ when the game is first started or if the game is reset via ~$gtk.reset~.~ ** Processing line: ~** ~args.inputs~~ - Header detected. *** True Line Result Returns the current tick of the game. ~args.state.tick_count~ is ~0~ when the game is first started or if the game is reset via ~$gtk.reset~. *** True Line Result ** ~args.inputs~ ** Processing line: ~Access using input using ~args.inputs~.~ ** Processing line: ~*** ~.up~~ - Header detected. *** True Line Result Access using input using ~args.inputs~. *** True Line Result *** ~.up~ ** Processing line: ~Returns ~true~ if: the ~up~ arrow or ~w~ key is pressed or held on the ~keyboard~; or if ~up~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted upwards.~ ** Processing line: ~*** ~.down~~ - Header detected. *** True Line Result Returns ~true~ if: the ~up~ arrow or ~w~ key is pressed or held on the ~keyboard~; or if ~up~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted upwards. *** True Line Result *** ~.down~ ** Processing line: ~Returns ~true~ if: the ~down~ arrow or ~s~ key is pressed or held on the ~keyboard~; or if ~down~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted downwards.~ ** Processing line: ~*** ~.left~~ - Header detected. *** True Line Result Returns ~true~ if: the ~down~ arrow or ~s~ key is pressed or held on the ~keyboard~; or if ~down~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted downwards. *** True Line Result *** ~.left~ ** Processing line: ~Returns ~true~ if: the ~left~ arrow or ~a~ key is pressed or held on the ~keyboard~; or if ~left~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted to the left.~ ** Processing line: ~*** ~.right~~ - Header detected. *** True Line Result Returns ~true~ if: the ~left~ arrow or ~a~ key is pressed or held on the ~keyboard~; or if ~left~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted to the left. *** True Line Result *** ~.right~ ** Processing line: ~Returns ~true~ if: the ~right~ arrow or ~d~ key is pressed or held on the ~keyboard~; or if ~right~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted to the right.~ ** Processing line: ~*** ~.left_right~~ - Header detected. *** True Line Result Returns ~true~ if: the ~right~ arrow or ~d~ key is pressed or held on the ~keyboard~; or if ~right~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted to the right. *** True Line Result *** ~.left_right~ ** Processing line: ~Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.left~ and ~args.inputs.right~.~ ** Processing line: ~*** ~.up_down~~ - Header detected. *** True Line Result Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.left~ and ~args.inputs.right~. *** True Line Result *** ~.up_down~ ** Processing line: ~Returns ~-1~ (down), ~0~ (neutral), or ~+1~ (up) depending on results of ~args.inputs.down~ and ~args.inputs.up~.~ ** Processing line: ~*** ~.text~ OR ~.history~~ - Header detected. *** True Line Result Returns ~-1~ (down), ~0~ (neutral), or ~+1~ (up) depending on results of ~args.inputs.down~ and ~args.inputs.up~. *** True Line Result *** ~.text~ OR ~.history~ ** Processing line: ~Returns a string that represents the last key that was pressed on the keyboard.~ ** Processing line: ~*** ~.mouse~~ - Header detected. *** True Line Result Returns a string that represents the last key that was pressed on the keyboard. *** True Line Result *** ~.mouse~ ** Processing line: ~Represents the user's~ ** Processing line: ~**** ~.x~~ - Header detected. *** True Line Result Represents the user's *** True Line Result **** ~.x~ ** Processing line: ~Returns the current ~x~ location of the mouse.~ ** Processing line: ~**** ~mouse.y~~ - Header detected. *** True Line Result Returns the current ~x~ location of the mouse. *** True Line Result **** ~mouse.y~ ** Processing line: ~Return.~ ** Processing line: ~**** ~.inside_rect? rect~~ - Header detected. *** True Line Result Return. *** True Line Result **** ~.inside_rect? rect~ ** Processing line: ~Return. ~args.inputs.mouse.inside_rect?~ takes in any primitive that responds to ~x, y, w, h~:~ ** Processing line: ~**** ~.inside_circle? center_point, radius~~ - Header detected. *** True Line Result Return. ~args.inputs.mouse.inside_rect?~ takes in any primitive that responds to ~x, y, w, h~: *** True Line Result **** ~.inside_circle? center_point, radius~ ** Processing line: ~Returns ~true~ if the mouse is inside of a specified circle. ~args.inputs.mouse.inside_circle?~ takes in any primitive that responds to ~x, y~ (which represents the circle's center), and takes in a ~radius~:~ ** Processing line: ~**** ~.moved~~ - Header detected. *** True Line Result Returns ~true~ if the mouse is inside of a specified circle. ~args.inputs.mouse.inside_circle?~ takes in any primitive that responds to ~x, y~ (which represents the circle's center), and takes in a ~radius~: *** True Line Result **** ~.moved~ ** Processing line: ~Returns ~true~ if the mouse has moved on the current frame.~ ** Processing line: ~**** ~.button_left~~ - Header detected. *** True Line Result Returns ~true~ if the mouse has moved on the current frame. *** True Line Result **** ~.button_left~ ** Processing line: ~Returns ~true~ if the left mouse button is down.~ ** Processing line: ~**** ~.button_middle~~ - Header detected. *** True Line Result Returns ~true~ if the left mouse button is down. *** True Line Result **** ~.button_middle~ ** Processing line: ~Returns ~true~ if the middle mouse button is down.~ ** Processing line: ~**** ~.button_right~~ - Header detected. *** True Line Result Returns ~true~ if the middle mouse button is down. *** True Line Result **** ~.button_right~ ** Processing line: ~Returns ~true~ if the right mouse button is down.~ ** Processing line: ~**** ~.button_bits~~ - Header detected. *** True Line Result Returns ~true~ if the right mouse button is down. *** True Line Result **** ~.button_bits~ ** Processing line: ~Returns a bitmask for all buttons on the mouse: ~1~ for a button in the ~down~ state, ~0~ for a button in the ~up~ state.~ ** Processing line: ~**** ~mouse.wheel~~ - Header detected. *** True Line Result Returns a bitmask for all buttons on the mouse: ~1~ for a button in the ~down~ state, ~0~ for a button in the ~up~ state. *** True Line Result **** ~mouse.wheel~ ** Processing line: ~Represents the mouse wheel. Returns ~nil~ if no mouse wheel actions occurred.~ ** Processing line: ~***** ~.x~~ - Header detected. *** True Line Result Represents the mouse wheel. Returns ~nil~ if no mouse wheel actions occurred. *** True Line Result ***** ~.x~ ** Processing line: ~Returns the negative or positive number if the mouse wheel has changed in the ~x~ axis.~ ** Processing line: ~***** ~.y~~ - Header detected. *** True Line Result Returns the negative or positive number if the mouse wheel has changed in the ~x~ axis. *** True Line Result ***** ~.y~ ** Processing line: ~Returns the negative or positive number if the mouse wheel has changed in the ~y~ axis.~ ** Processing line: ~**** ~.click~ OR ~.down~, ~.previous_click~, ~.up~~ - Header detected. *** True Line Result Returns the negative or positive number if the mouse wheel has changed in the ~y~ axis. *** True Line Result **** ~.click~ OR ~.down~, ~.previous_click~, ~.up~ ** Processing line: ~The properties ~args.inputs.mouse.(click|down|previous_click|up)~ each return ~nil~ if the mouse button event didn't occur. And return an Entity~ ** Processing line: ~that has an ~x~, ~y~ properties along with helper functions to determine collision: ~inside_rect?~, ~inside_circle~.~ ** Processing line: ~*** ~.controller_one~, ~.controller_two~~ - Header detected. *** True Line Result The properties ~args.inputs.mouse.(click|down|previous_click|up)~ each return ~nil~ if the mouse button event didn't occur. And return an Entity that has an ~x~, ~y~ properties along with helper functions to determine collision: ~inside_rect?~, ~inside_circle~. *** True Line Result *** ~.controller_one~, ~.controller_two~ ** Processing line: ~Represents controllers connected to the usb ports.~ ** Processing line: ~**** ~.up~~ - Header detected. *** True Line Result Represents controllers connected to the usb ports. *** True Line Result **** ~.up~ ** Processing line: ~Returns ~true~ if ~up~ is pressed or held on the directional or left analog.~ ** Processing line: ~**** ~.down~~ - Header detected. *** True Line Result Returns ~true~ if ~up~ is pressed or held on the directional or left analog. *** True Line Result **** ~.down~ ** Processing line: ~Returns ~true~ if ~down~ is pressed or held on the directional or left analog.~ ** Processing line: ~**** ~.left~~ - Header detected. *** True Line Result Returns ~true~ if ~down~ is pressed or held on the directional or left analog. *** True Line Result **** ~.left~ ** Processing line: ~Returns ~true~ if ~left~ is pressed or held on the directional or left analog.~ ** Processing line: ~**** ~.right~~ - Header detected. *** True Line Result Returns ~true~ if ~left~ is pressed or held on the directional or left analog. *** True Line Result **** ~.right~ ** Processing line: ~Returns ~true~ if ~right~ is pressed or held on the directional or left analog.~ ** Processing line: ~**** ~.left_right~~ - Header detected. *** True Line Result Returns ~true~ if ~right~ is pressed or held on the directional or left analog. *** True Line Result **** ~.left_right~ ** Processing line: ~Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.controller_(one|two).left~ and ~args.inputs.controller_(one|two).right~.~ ** Processing line: ~**** ~.up_down~~ - Header detected. *** True Line Result Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.controller_(one|two).left~ and ~args.inputs.controller_(one|two).right~. *** True Line Result **** ~.up_down~ ** Processing line: ~Returns ~-1~ (down), ~0~ (neutral), or ~+1~ (up) depending on results of ~args.inputs.controller_(one|two).up~ and ~args.inputs.controller_(one|two).down~.~ ** Processing line: ~**** ~.(left_analog_x_raw|right_analog_x_raw)~~ - Header detected. *** True Line Result Returns ~-1~ (down), ~0~ (neutral), or ~+1~ (up) depending on results of ~args.inputs.controller_(one|two).up~ and ~args.inputs.controller_(one|two).down~. *** True Line Result **** ~.(left_analog_x_raw|right_analog_x_raw)~ ** Processing line: ~Returns the raw integer value for the analog's horizontal movement (~-32,000 to +32,000~).~ ** Processing line: ~**** ~.left_analog_y_raw|right_analog_y_raw)~~ - Header detected. *** True Line Result Returns the raw integer value for the analog's horizontal movement (~-32,000 to +32,000~). *** True Line Result **** ~.left_analog_y_raw|right_analog_y_raw)~ ** Processing line: ~Returns the raw integer value for the analog's vertical movement (~-32,000 to +32,000~).~ ** Processing line: ~**** ~.left_analog_x_perc|right_analog_x_perc)~~ - Header detected. *** True Line Result Returns the raw integer value for the analog's vertical movement (~-32,000 to +32,000~). *** True Line Result **** ~.left_analog_x_perc|right_analog_x_perc)~ ** Processing line: ~Returns a number between ~-1~ and ~1~ which represents the percentage the analog is moved horizontally as a ratio of the maximum horizontal movement.~ ** Processing line: ~**** ~.left_analog_y_perc|right_analog_y_perc)~~ - Header detected. *** True Line Result Returns a number between ~-1~ and ~1~ which represents the percentage the analog is moved horizontally as a ratio of the maximum horizontal movement. *** True Line Result **** ~.left_analog_y_perc|right_analog_y_perc)~ ** Processing line: ~Returns a number between ~-1~ and ~1~ which represents the percentage the analog is moved vertically as a ratio of the maximum vertical movement.~ ** Processing line: ~**** ~.directional_up~~ - Header detected. *** True Line Result Returns a number between ~-1~ and ~1~ which represents the percentage the analog is moved vertically as a ratio of the maximum vertical movement. *** True Line Result **** ~.directional_up~ ** Processing line: ~Returns ~true~ if ~up~ is pressed or held on the directional.~ ** Processing line: ~**** ~.directional_down~~ - Header detected. *** True Line Result Returns ~true~ if ~up~ is pressed or held on the directional. *** True Line Result **** ~.directional_down~ ** Processing line: ~Returns ~true~ if ~down~ is pressed or held on the directional.~ ** Processing line: ~**** ~.directional_left~~ - Header detected. *** True Line Result Returns ~true~ if ~down~ is pressed or held on the directional. *** True Line Result **** ~.directional_left~ ** Processing line: ~Returns ~true~ if ~left~ is pressed or held on the directional.~ ** Processing line: ~**** ~.directional_right~~ - Header detected. *** True Line Result Returns ~true~ if ~left~ is pressed or held on the directional. *** True Line Result **** ~.directional_right~ ** Processing line: ~Returns ~true~ if ~right~ is pressed or held on the directional.~ ** Processing line: ~**** ~.(a|b|x|y|l1|r1|l2|r2|l3|r3|start|select)~~ - Header detected. *** True Line Result Returns ~true~ if ~right~ is pressed or held on the directional. *** True Line Result **** ~.(a|b|x|y|l1|r1|l2|r2|l3|r3|start|select)~ ** Processing line: ~Returns ~true~ if the specific button is pressed or held.~ ** Processing line: ~**** ~.truthy_keys~~ - Header detected. *** True Line Result Returns ~true~ if the specific button is pressed or held. *** True Line Result **** ~.truthy_keys~ ** Processing line: ~Returns a collection of ~Symbol~s that represent all keys that are in the pressed or held state.~ ** Processing line: ~**** ~.key_down~~ - Header detected. *** True Line Result Returns a collection of ~Symbol~s that represent all keys that are in the pressed or held state. *** True Line Result **** ~.key_down~ ** Processing line: ~Returns ~true~ if the specific button was pressed on this frame. ~args.inputs.controller_(one|two).key_down.BUTTON~ will only be true on the frame it was pressed.~ ** Processing line: ~**** ~.key_held~~ - Header detected. *** True Line Result Returns ~true~ if the specific button was pressed on this frame. ~args.inputs.controller_(one|two).key_down.BUTTON~ will only be true on the frame it was pressed. *** True Line Result **** ~.key_held~ ** Processing line: ~Returns ~true~ if the specific button is being held. ~args.inputs.controller_(one|two).key_held.BUTTON~ will be true for all frames after ~key_down~ (until released).~ ** Processing line: ~**** ~.key_up~~ - Header detected. *** True Line Result Returns ~true~ if the specific button is being held. ~args.inputs.controller_(one|two).key_held.BUTTON~ will be true for all frames after ~key_down~ (until released). *** True Line Result **** ~.key_up~ ** Processing line: ~Returns ~true~ if the specific button was released. ~args.inputs.controller_(one|two).key_up.BUTTON~ will be true only on the frame the button was released.~ ** Processing line: ~*** ~.keyboard~~ - Header detected. *** True Line Result Returns ~true~ if the specific button was released. ~args.inputs.controller_(one|two).key_up.BUTTON~ will be true only on the frame the button was released. *** True Line Result *** ~.keyboard~ ** Processing line: ~Represents the user's keyboard~ ** Processing line: ~**** ~.up~~ - Header detected. *** True Line Result Represents the user's keyboard *** True Line Result **** ~.up~ ** Processing line: ~Returns ~true~ if ~up~ or ~w~ is pressed or held on the keyboard.~ ** Processing line: ~**** ~.down~~ - Header detected. *** True Line Result Returns ~true~ if ~up~ or ~w~ is pressed or held on the keyboard. *** True Line Result **** ~.down~ ** Processing line: ~Returns ~true~ if ~down~ or ~s~ is pressed or held on the keyboard.~ ** Processing line: ~**** ~.left~~ - Header detected. *** True Line Result Returns ~true~ if ~down~ or ~s~ is pressed or held on the keyboard. *** True Line Result **** ~.left~ ** Processing line: ~Returns ~true~ if ~left~ or ~a~ is pressed or held on the keyboard.~ ** Processing line: ~**** ~.right~~ - Header detected. *** True Line Result Returns ~true~ if ~left~ or ~a~ is pressed or held on the keyboard. *** True Line Result **** ~.right~ ** Processing line: ~Returns ~true~ if ~right~ or ~d~ is pressed or held on the keyboard.~ ** Processing line: ~**** ~.left_right~~ - Header detected. *** True Line Result Returns ~true~ if ~right~ or ~d~ is pressed or held on the keyboard. *** True Line Result **** ~.left_right~ ** Processing line: ~Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.keyboard.left~ and ~args.inputs.keyboard.right~.~ ** Processing line: ~**** ~.up_down~~ - Header detected. *** True Line Result Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.keyboard.left~ and ~args.inputs.keyboard.right~. *** True Line Result **** ~.up_down~ ** Processing line: ~Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.keyboard.up~ and ~args.inputs.keyboard.up~.~ ** Processing line: ~**** keyboard properties~ - Header detected. *** True Line Result Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.keyboard.up~ and ~args.inputs.keyboard.up~. *** True Line Result **** keyboard properties ** Processing line: ~The following properties represent keys on the keyboard and are available on ~args.inputs.keyboard.KEY~, ~args.inputs.keyboard.key_down.KEY~, ~args.inputs.keyboard.key_held.KEY~, and ~args.inputs.keyboard.key_up.KEY~:~ ** Processing line: ~- ~alt~~ - Line was identified as a list. *** True Line Result The following properties represent keys on the keyboard and are available on ~args.inputs.keyboard.KEY~, ~args.inputs.keyboard.key_down.KEY~, ~args.inputs.keyboard.key_held.KEY~, and ~args.inputs.keyboard.key_up.KEY~: ** Processing line: ~- ~meta~~ - Line was identified as a list. *** True Line Result - ~alt~ ** Processing line: ~- ~control~~ - Line was identified as a list. *** True Line Result - ~meta~ ** Processing line: ~- ~shift~~ - Line was identified as a list. *** True Line Result - ~control~ ** Processing line: ~- ~ctrl_KEY~ (dynamic method, eg ~args.inputs.keyboard.ctrl_a~)~ - Line was identified as a list. *** True Line Result - ~shift~ ** Processing line: ~- ~exclamation_point~~ - Line was identified as a list. *** True Line Result - ~ctrl_KEY~ (dynamic method, eg ~args.inputs.keyboard.ctrl_a~) ** Processing line: ~- ~zero~~ - Line was identified as a list. *** True Line Result - ~exclamation_point~ ** Processing line: ~- ~one~~ - Line was identified as a list. *** True Line Result - ~zero~ ** Processing line: ~- ~two~~ - Line was identified as a list. *** True Line Result - ~one~ ** Processing line: ~- ~three~~ - Line was identified as a list. *** True Line Result - ~two~ ** Processing line: ~- ~four~~ - Line was identified as a list. *** True Line Result - ~three~ ** Processing line: ~- ~five~~ - Line was identified as a list. *** True Line Result - ~four~ ** Processing line: ~- ~six~~ - Line was identified as a list. *** True Line Result - ~five~ ** Processing line: ~- ~seven~~ - Line was identified as a list. *** True Line Result - ~six~ ** Processing line: ~- ~eight~~ - Line was identified as a list. *** True Line Result - ~seven~ ** Processing line: ~- ~nine~~ - Line was identified as a list. *** True Line Result - ~eight~ ** Processing line: ~- ~backspace~~ - Line was identified as a list. *** True Line Result - ~nine~ ** Processing line: ~- ~delete~~ - Line was identified as a list. *** True Line Result - ~backspace~ ** Processing line: ~- ~escape~~ - Line was identified as a list. *** True Line Result - ~delete~ ** Processing line: ~- ~enter~~ - Line was identified as a list. *** True Line Result - ~escape~ ** Processing line: ~- ~tab~~ - Line was identified as a list. *** True Line Result - ~enter~ ** Processing line: ~- ~open_round_brace~~ - Line was identified as a list. *** True Line Result - ~tab~ ** Processing line: ~- ~close_round_brace~~ - Line was identified as a list. *** True Line Result - ~open_round_brace~ ** Processing line: ~- ~open_curly_brace~~ - Line was identified as a list. *** True Line Result - ~close_round_brace~ ** Processing line: ~- ~close_curly_brace~~ - Line was identified as a list. *** True Line Result - ~open_curly_brace~ ** Processing line: ~- ~open_square_brace~~ - Line was identified as a list. *** True Line Result - ~close_curly_brace~ ** Processing line: ~- ~close_square_brace~~ - Line was identified as a list. *** True Line Result - ~open_square_brace~ ** Processing line: ~- ~colon~~ - Line was identified as a list. *** True Line Result - ~close_square_brace~ ** Processing line: ~- ~semicolon~~ - Line was identified as a list. *** True Line Result - ~colon~ ** Processing line: ~- ~equal_sign~~ - Line was identified as a list. *** True Line Result - ~semicolon~ ** Processing line: ~- ~hyphen~~ - Line was identified as a list. *** True Line Result - ~equal_sign~ ** Processing line: ~- ~space~~ - Line was identified as a list. *** True Line Result - ~hyphen~ ** Processing line: ~- ~dollar_sign~~ - Line was identified as a list. *** True Line Result - ~space~ ** Processing line: ~- ~double_quotation_mark~~ - Line was identified as a list. *** True Line Result - ~dollar_sign~ ** Processing line: ~- ~single_quotation_mark~~ - Line was identified as a list. *** True Line Result - ~double_quotation_mark~ ** Processing line: ~- ~backtick~~ - Line was identified as a list. *** True Line Result - ~single_quotation_mark~ ** Processing line: ~- ~tilde~~ - Line was identified as a list. *** True Line Result - ~backtick~ ** Processing line: ~- ~period~~ - Line was identified as a list. *** True Line Result - ~tilde~ ** Processing line: ~- ~comma~~ - Line was identified as a list. *** True Line Result - ~period~ ** Processing line: ~- ~pipe~~ - Line was identified as a list. *** True Line Result - ~comma~ ** Processing line: ~- ~underscore~~ - Line was identified as a list. *** True Line Result - ~pipe~ ** Processing line: ~- ~a~~ - Line was identified as a list. *** True Line Result - ~underscore~ ** Processing line: ~- ~b~~ - Line was identified as a list. *** True Line Result - ~a~ ** Processing line: ~- ~c~~ - Line was identified as a list. *** True Line Result - ~b~ ** Processing line: ~- ~d~~ - Line was identified as a list. *** True Line Result - ~c~ ** Processing line: ~- ~e~~ - Line was identified as a list. *** True Line Result - ~d~ ** Processing line: ~- ~f~~ - Line was identified as a list. *** True Line Result - ~e~ ** Processing line: ~- ~g~~ - Line was identified as a list. *** True Line Result - ~f~ ** Processing line: ~- ~h~~ - Line was identified as a list. *** True Line Result - ~g~ ** Processing line: ~- ~i~~ - Line was identified as a list. *** True Line Result - ~h~ ** Processing line: ~- ~j~~ - Line was identified as a list. *** True Line Result - ~i~ ** Processing line: ~- ~k~~ - Line was identified as a list. *** True Line Result - ~j~ ** Processing line: ~- ~l~~ - Line was identified as a list. *** True Line Result - ~k~ ** Processing line: ~- ~m~~ - Line was identified as a list. *** True Line Result - ~l~ ** Processing line: ~- ~n~~ - Line was identified as a list. *** True Line Result - ~m~ ** Processing line: ~- ~o~~ - Line was identified as a list. *** True Line Result - ~n~ ** Processing line: ~- ~p~~ - Line was identified as a list. *** True Line Result - ~o~ ** Processing line: ~- ~q~~ - Line was identified as a list. *** True Line Result - ~p~ ** Processing line: ~- ~r~~ - Line was identified as a list. *** True Line Result - ~q~ ** Processing line: ~- ~s~~ - Line was identified as a list. *** True Line Result - ~r~ ** Processing line: ~- ~t~~ - Line was identified as a list. *** True Line Result - ~s~ ** Processing line: ~- ~u~~ - Line was identified as a list. *** True Line Result - ~t~ ** Processing line: ~- ~v~~ - Line was identified as a list. *** True Line Result - ~u~ ** Processing line: ~- ~w~~ - Line was identified as a list. *** True Line Result - ~v~ ** Processing line: ~- ~x~~ - Line was identified as a list. *** True Line Result - ~w~ ** Processing line: ~- ~y~~ - Line was identified as a list. *** True Line Result - ~x~ ** Processing line: ~- ~z~~ - Line was identified as a list. *** True Line Result - ~y~ ** Processing line: ~- ~shift~~ - Line was identified as a list. *** True Line Result - ~z~ ** Processing line: ~- ~control~~ - Line was identified as a list. *** True Line Result - ~shift~ ** Processing line: ~- ~alt~~ - Line was identified as a list. *** True Line Result - ~control~ ** Processing line: ~- ~meta~~ - Line was identified as a list. *** True Line Result - ~alt~ ** Processing line: ~- ~left~~ - Line was identified as a list. *** True Line Result - ~meta~ ** Processing line: ~- ~right~~ - Line was identified as a list. *** True Line Result - ~left~ ** Processing line: ~- ~up~~ - Line was identified as a list. *** True Line Result - ~right~ ** Processing line: ~- ~down~~ - Line was identified as a list. *** True Line Result - ~up~ ** Processing line: ~- ~pageup~~ - Line was identified as a list. *** True Line Result - ~down~ ** Processing line: ~- ~pagedown~~ - Line was identified as a list. *** True Line Result - ~pageup~ ** Processing line: ~- ~char~~ - Line was identified as a list. *** True Line Result - ~pagedown~ ** Processing line: ~- ~plus~~ - Line was identified as a list. *** True Line Result - ~char~ ** Processing line: ~- ~at~~ - Line was identified as a list. *** True Line Result - ~plus~ ** Processing line: ~- ~forward_slash~~ - Line was identified as a list. *** True Line Result - ~at~ ** Processing line: ~- ~back_slash~~ - Line was identified as a list. *** True Line Result - ~forward_slash~ ** Processing line: ~- ~asterisk~~ - Line was identified as a list. *** True Line Result - ~back_slash~ ** Processing line: ~- ~less_than~~ - Line was identified as a list. *** True Line Result - ~asterisk~ ** Processing line: ~- ~greater_than~~ - Line was identified as a list. *** True Line Result - ~less_than~ ** Processing line: ~- ~carat~~ - Line was identified as a list. *** True Line Result - ~greater_than~ ** Processing line: ~- ~ampersand~~ - Line was identified as a list. *** True Line Result - ~carat~ ** Processing line: ~- ~superscript_two~~ - Line was identified as a list. *** True Line Result - ~ampersand~ ** Processing line: ~- ~circumflex~~ - Line was identified as a list. *** True Line Result - ~superscript_two~ ** Processing line: ~- ~question_mark~~ - Line was identified as a list. *** True Line Result - ~circumflex~ ** Processing line: ~- ~section_sign~~ - Line was identified as a list. *** True Line Result - ~question_mark~ ** Processing line: ~- ~ordinal_indicator~~ - Line was identified as a list. *** True Line Result - ~section_sign~ ** Processing line: ~- ~raw_key~~ - Line was identified as a list. *** True Line Result - ~ordinal_indicator~ ** Processing line: ~- ~raw_key~~ - Line was identified as a list. *** True Line Result - ~raw_key~ ** Processing line: ~- ~left_right~~ - Line was identified as a list. *** True Line Result - ~raw_key~ ** Processing line: ~- ~up_down~~ - Line was identified as a list. *** True Line Result - ~left_right~ ** Processing line: ~- ~directional_vector~~ - Line was identified as a list. *** True Line Result - ~up_down~ ** Processing line: ~- ~truthy_keys~~ - Line was identified as a list. *** True Line Result - ~directional_vector~ ** Processing line: ~**** ~inputs.keyboard.keys~~ - Header detected. *** True Line Result - ~truthy_keys~ *** True Line Result **** ~inputs.keyboard.keys~ ** Processing line: ~Returns a ~Hash~ with all keys on the keyboard in their respective state. The ~Hash~ contains the following ~keys~~ ** Processing line: ~- ~:down~~ - Line was identified as a list. *** True Line Result Returns a ~Hash~ with all keys on the keyboard in their respective state. The ~Hash~ contains the following ~keys~ ** Processing line: ~- ~:held~~ - Line was identified as a list. *** True Line Result - ~:down~ ** Processing line: ~- ~:down_or_held~~ - Line was identified as a list. *** True Line Result - ~:held~ ** Processing line: ~- ~:up~~ - Line was identified as a list. *** True Line Result - ~:down_or_held~ ** Processing line: ~** ~args.outputs~~ - Header detected. *** True Line Result - ~:up~ *** True Line Result ** ~args.outputs~ ** Processing line: ~~args.outputs.PROPERTY~ is how you render to the screen.~ ** Processing line: ~*** ~.background_color~~ - Header detected. *** True Line Result ~args.outputs.PROPERTY~ is how you render to the screen. *** True Line Result *** ~.background_color~ ** Processing line: ~Set ~args.outputs.background_color~ to an ~Array~ with ~RGB~ values (eg. ~[255, 255, 255]~ for the color white).~ ** Processing line: ~*** ~.sounds~~ - Header detected. *** True Line Result Set ~args.outputs.background_color~ to an ~Array~ with ~RGB~ values (eg. ~[255, 255, 255]~ for the color white). *** True Line Result *** ~.sounds~ ** Processing line: ~Send a file path to this collection to play a sound. The sound file must be under the ~mygame~ directory. Example: ~args.outputs.sounds << "sounds/jump.wav"~.~ ** Processing line: ~*** ~.solids~~ - Header detected. *** True Line Result Send a file path to this collection to play a sound. The sound file must be under the ~mygame~ directory. Example: ~args.outputs.sounds << "sounds/jump.wav"~. *** True Line Result *** ~.solids~ ** Processing line: ~Send a Primitive to this collection to render a filled in rectangle to the screen. This collection is cleared at the end of every frame.~ ** Processing line: ~*** ~.static_solids~~ - Header detected. *** True Line Result Send a Primitive to this collection to render a filled in rectangle to the screen. This collection is cleared at the end of every frame. *** True Line Result *** ~.static_solids~ ** Processing line: ~Send a Primitive to this collection to render a filled in rectangle to the screen. This collection is not cleared at the end of every frame. And objects can be mutated by reference.~ ** Processing line: ~*** ~.sprites~, ~.static_sprites~~ - Header detected. *** True Line Result Send a Primitive to this collection to render a filled in rectangle to the screen. This collection is not cleared at the end of every frame. And objects can be mutated by reference. *** True Line Result *** ~.sprites~, ~.static_sprites~ ** Processing line: ~Send a Primitive to this collection to render a sprite to the screen.~ ** Processing line: ~*** ~.primitives~, ~.static_primitives~~ - Header detected. *** True Line Result Send a Primitive to this collection to render a sprite to the screen. *** True Line Result *** ~.primitives~, ~.static_primitives~ ** Processing line: ~Send a Primitive of any type and it'll be rendered. The Primitive must have a ~primitive_marker~ that returns ~:solid~, ~:sprite~, ~:label~, ~:line~, ~:border~.~ ** Processing line: ~*** ~.labels~, ~.static_labels~~ - Header detected. *** True Line Result Send a Primitive of any type and it'll be rendered. The Primitive must have a ~primitive_marker~ that returns ~:solid~, ~:sprite~, ~:label~, ~:line~, ~:border~. *** True Line Result *** ~.labels~, ~.static_labels~ ** Processing line: ~Send a Primitive to this collection to render text to the screen.~ ** Processing line: ~*** ~.lines~, ~.static_lines~~ - Header detected. *** True Line Result Send a Primitive to this collection to render text to the screen. *** True Line Result *** ~.lines~, ~.static_lines~ ** Processing line: ~Send a Primitive to this collection to render a line to the screen.~ ** Processing line: ~*** ~.borders~, ~.static_borders~~ - Header detected. *** True Line Result Send a Primitive to this collection to render a line to the screen. *** True Line Result *** ~.borders~, ~.static_borders~ ** Processing line: ~Send a Primitive to this collection to render an unfilled rectangle to the screen.~ ** Processing line: ~*** ~.debug~, ~.static_debug~~ - Header detected. *** True Line Result Send a Primitive to this collection to render an unfilled rectangle to the screen. *** True Line Result *** ~.debug~, ~.static_debug~ ** Processing line: ~Send any Primitive to this collection which represents things you render to the screen for debugging purposes. Primitives in this collection will not be rendered in a production release of your game.~ ** Processing line: ~** ~args.geometry~~ - Header detected. *** True Line Result Send any Primitive to this collection which represents things you render to the screen for debugging purposes. Primitives in this collection will not be rendered in a production release of your game. *** True Line Result ** ~args.geometry~ ** Processing line: ~This property contains geometric functions. Functions can be invoked via ~args.geometry.FUNCTION~.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result This property contains geometric functions. Functions can be invoked via ~args.geometry.FUNCTION~. ** Processing line: ~Here are some general notes with regards to the arguments these geometric functions accept.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Here are some general notes with regards to the arguments these geometric functions accept. ** Processing line: ~1. ~Rectangles~ can be represented as an ~Array~ with four (or more) values ~[x, y, w, h]~, as a ~Hash~ ~{ x:, y:, w:, h: }~ or an object that responds to ~x~, ~y~, ~w~, and ~h~.~ - Line was identified as a start of a list. *** True Line Result ** Processing line: ~2. ~Points~ can be represent as an ~Array~ with two (or more) values ~[x, y]~, as a ~Hash~ ~{ x:, y:}~ or an object that responds to ~x~, and ~y~.~ - Line was identified as a continuation of a list. *** True Line Result 1. ~Rectangles~ can be represented as an ~Array~ with four (or more) values ~[x, y, w, h]~, as a ~Hash~ ~{ x:, y:, w:, h: }~ or an object that responds to ~x~, ~y~, ~w~, and ~h~. ** Processing line: ~3. ~Lines~ can be represented as an ~Array~ with four (or more) values ~[x, y, x2, y2]~, as a ~Hash~ ~{ x:, y:, x2:, y2: }~ or an object that responds to ~x~, ~y~, ~x2~, and ~y2~.~ - Line was identified as a continuation of a list. *** True Line Result 2. ~Points~ can be represent as an ~Array~ with two (or more) values ~[x, y]~, as a ~Hash~ ~{ x:, y:}~ or an object that responds to ~x~, and ~y~. ** Processing line: ~4. ~Angles~ are represented as degrees (not radians).~ - Line was identified as a continuation of a list. *** True Line Result 3. ~Lines~ can be represented as an ~Array~ with four (or more) values ~[x, y, x2, y2]~, as a ~Hash~ ~{ x:, y:, x2:, y2: }~ or an object that responds to ~x~, ~y~, ~x2~, and ~y2~. ** Processing line: ~~ - End of paragraph detected. *** True Line Result 4. ~Angles~ are represented as degrees (not radians). ** Processing line: ~*** ~.inside_rect? rect_1, rect_2~~ - Header detected. *** True Line Result *** True Line Result *** ~.inside_rect? rect_1, rect_2~ ** Processing line: ~Returns ~true~ if ~rect_1~ is inside ~rect_2~.~ ** Processing line: ~*** ~.intersect_rect? rect_2, rect_2~~ - Header detected. *** True Line Result Returns ~true~ if ~rect_1~ is inside ~rect_2~. *** True Line Result *** ~.intersect_rect? rect_2, rect_2~ ** Processing line: ~Returns ~true~ if ~rect_1~ intersects ~rect_2~.~ ** Processing line: ~*** ~.scale_rect rect, x_percentage, y_percentage~~ - Header detected. *** True Line Result Returns ~true~ if ~rect_1~ intersects ~rect_2~. *** True Line Result *** ~.scale_rect rect, x_percentage, y_percentage~ ** Processing line: ~Returns a new rectangle that is scaled by the percentages provided.~ ** Processing line: ~*** ~.angle_to start_point, end_point~~ - Header detected. *** True Line Result Returns a new rectangle that is scaled by the percentages provided. *** True Line Result *** ~.angle_to start_point, end_point~ ** Processing line: ~Returns the angle in degrees between two points ~start_point~ to ~end_point~.~ ** Processing line: ~*** ~.angle_from start_point, end_point~~ - Header detected. *** True Line Result Returns the angle in degrees between two points ~start_point~ to ~end_point~. *** True Line Result *** ~.angle_from start_point, end_point~ ** Processing line: ~Returns the angle in degrees between two points ~start_point~ from ~end_point~.~ ** Processing line: ~*** ~.point_inside_circle? point, circle_center_point, radius~~ - Header detected. *** True Line Result Returns the angle in degrees between two points ~start_point~ from ~end_point~. *** True Line Result *** ~.point_inside_circle? point, circle_center_point, radius~ ** Processing line: ~Returns ~true~ if a point is inside a circle defined by its center and radius.~ ** Processing line: ~*** ~.center_inside_rect rect, other_rect~~ - Header detected. *** True Line Result Returns ~true~ if a point is inside a circle defined by its center and radius. *** True Line Result *** ~.center_inside_rect rect, other_rect~ ** Processing line: ~Returns a new rectangle based of off ~rect~ that is centered inside of ~other_rect~.~ ** Processing line: ~*** ~.center_inside_rect_x rect, other_rect~~ - Header detected. *** True Line Result Returns a new rectangle based of off ~rect~ that is centered inside of ~other_rect~. *** True Line Result *** ~.center_inside_rect_x rect, other_rect~ ** Processing line: ~Returns a new rectangle based of off ~rect~ that is centered horizontally inside of ~other_rect~.~ ** Processing line: ~*** ~.center_inside_rect_y rect, other_rect~~ - Header detected. *** True Line Result Returns a new rectangle based of off ~rect~ that is centered horizontally inside of ~other_rect~. *** True Line Result *** ~.center_inside_rect_y rect, other_rect~ ** Processing line: ~Returns a new rectangle based of off ~rect~ that is centered vertically inside of ~other_rect~.~ ** Processing line: ~*** ~.anchor_rect rect, anchor_x, anchor_y~~ - Header detected. *** True Line Result Returns a new rectangle based of off ~rect~ that is centered vertically inside of ~other_rect~. *** True Line Result *** ~.anchor_rect rect, anchor_x, anchor_y~ ** Processing line: ~Returns a new rectangle based of off ~rect~ that has been repositioned based on the percentages passed into anchor_x, and anchor_y.~ ** Processing line: ~*** ~.shift_line line, x, y~~ - Header detected. *** True Line Result Returns a new rectangle based of off ~rect~ that has been repositioned based on the percentages passed into anchor_x, and anchor_y. *** True Line Result *** ~.shift_line line, x, y~ ** Processing line: ~Returns a line that is offset by ~x~, and ~y~.~ ** Processing line: ~*** ~.line_y_intercept line~~ - Header detected. *** True Line Result Returns a line that is offset by ~x~, and ~y~. *** True Line Result *** ~.line_y_intercept line~ ** Processing line: ~Given a line, the ~b~ value is determined for the point slope form equation: ~y = mx + b~.~ ** Processing line: ~*** ~.angle_between_lines line_one, line_two, replace_infinity:~~ - Header detected. *** True Line Result Given a line, the ~b~ value is determined for the point slope form equation: ~y = mx + b~. *** True Line Result *** ~.angle_between_lines line_one, line_two, replace_infinity:~ ** Processing line: ~Returns the angle between two lines as if they were infinitely long. A numeric value can be passed in for the last parameter which would represent lines that do not intersect.~ ** Processing line: ~*** ~.line_slope line, replace_infinity:~~ - Header detected. *** True Line Result Returns the angle between two lines as if they were infinitely long. A numeric value can be passed in for the last parameter which would represent lines that do not intersect. *** True Line Result *** ~.line_slope line, replace_infinity:~ ** Processing line: ~Given a line, the ~m~ value is determined for the point slope form equation: ~y = mx + b~.~ ** Processing line: ~*** ~.line_rise_run~~ - Header detected. *** True Line Result Given a line, the ~m~ value is determined for the point slope form equation: ~y = mx + b~. *** True Line Result *** ~.line_rise_run~ ** Processing line: ~Given a line, a ~Hash~ is returned that returns the slope as ~x~ and ~y~ properties with normalized values (the number is between -1 and 1).~ ** Processing line: ~*** ~.ray_test point, line~~ - Header detected. *** True Line Result Given a line, a ~Hash~ is returned that returns the slope as ~x~ and ~y~ properties with normalized values (the number is between -1 and 1). *** True Line Result *** ~.ray_test point, line~ ** Processing line: ~Given a point and a line, ~:on~, ~:left~, or ~:right~ which represents the location of the point relative to the line.~ ** Processing line: ~*** ~.line_rect line~~ - Header detected. *** True Line Result Given a point and a line, ~:on~, ~:left~, or ~:right~ which represents the location of the point relative to the line. *** True Line Result *** ~.line_rect line~ ** Processing line: ~Returns the bounding rectangle for a line.~ ** Processing line: ~*** ~.line_intersect line_one, line_two~~ - Header detected. *** True Line Result Returns the bounding rectangle for a line. *** True Line Result *** ~.line_intersect line_one, line_two~ ** Processing line: ~Returns a point that represents the intersection of the lines.~ ** Processing line: ~*** ~.distance point_one, point_two~~ - Header detected. *** True Line Result Returns a point that represents the intersection of the lines. *** True Line Result *** ~.distance point_one, point_two~ ** Processing line: ~Returns the distance between two points.~ ** Processing line: ~*** ~.cubic_bezier t, a, b, c, d~~ - Header detected. *** True Line Result Returns the distance between two points. *** True Line Result *** ~.cubic_bezier t, a, b, c, d~ ** Processing line: ~Returns the cubic bezier function for tick_count ~t~ with anchors ~a~, ~b~, ~c~, and ~d~.~ ** Processing line: ~** ~args.easing~~ - Header detected. *** True Line Result Returns the cubic bezier function for tick_count ~t~ with anchors ~a~, ~b~, ~c~, and ~d~. *** True Line Result ** ~args.easing~ ** Processing line: ~A set of functions that allow you to determine the current progression of an easing function.~ ** Processing line: ~*** ~.ease start_tick, current_tick, duration, easing_functions~~ - Header detected. *** True Line Result A set of functions that allow you to determine the current progression of an easing function. *** True Line Result *** ~.ease start_tick, current_tick, duration, easing_functions~ ** Processing line: ~Given a start, current, duration, and easing function names, ~ease~ returns a number between 0 and 1 that represents the progress of an easing function.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Given a start, current, duration, and easing function names, ~ease~ returns a number between 0 and 1 that represents the progress of an easing function. ** Processing line: ~The built in easing definitions you have access to are ~:identity~, ~:flip~, ~:quad~, ~:cube~, ~:quart~, and ~:quint~.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The built in easing definitions you have access to are ~:identity~, ~:flip~, ~:quad~, ~:cube~, ~:quart~, and ~:quint~. ** Processing line: ~This example will move a box at a linear speed from 0 to 1280.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result This example will move a box at a linear speed from 0 to 1280. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ start_time = 10~ - Inside source: true *** True Line Result start_time = 10 ** Processing line: ~ duration = 60~ - Inside source: true *** True Line Result duration = 60 ** Processing line: ~ current_progress = args.easing.ease start_time,~ - Inside source: true *** True Line Result current_progress = args.easing.ease start_time, ** Processing line: ~ args.state.tick_count,~ - Inside source: true *** True Line Result args.state.tick_count, ** Processing line: ~ duration,~ - Inside source: true *** True Line Result duration, ** Processing line: ~ :identity~ - Inside source: true *** True Line Result :identity ** Processing line: ~ args.outputs.solids << { x: 1280 * current_progress, y: 360, w: 10, h: 10 }~ - Inside source: true *** True Line Result args.outputs.solids << { x: 1280 * current_progress, y: 360, w: 10, h: 10 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~*** ~.ease_spline start_tick, current_tick, duration, spline~~ - Header detected. *** True Line Result *** True Line Result *** ~.ease_spline start_tick, current_tick, duration, spline~ ** Processing line: ~Given a start, current, duration, and a multiple bezier values, this function returns a number between 0 and 1 that represents the progress of an easing function.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Given a start, current, duration, and a multiple bezier values, this function returns a number between 0 and 1 that represents the progress of an easing function. ** Processing line: ~This example will move a box at a linear speed from 0 to 1280 and then back to 0 using two bezier definitions (represented as an array with four values).~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result This example will move a box at a linear speed from 0 to 1280 and then back to 0 using two bezier definitions (represented as an array with four values). ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ start_time = 10~ - Inside source: true *** True Line Result start_time = 10 ** Processing line: ~ duration = 60~ - Inside source: true *** True Line Result duration = 60 ** Processing line: ~ spline = [~ - Inside source: true *** True Line Result spline = [ ** Processing line: ~ [ 0, 0.25, 0.75, 1.0],~ - Inside source: true *** True Line Result [ 0, 0.25, 0.75, 1.0], ** Processing line: ~ [1.0, 0.75, 0.25, 0]~ - Inside source: true *** True Line Result [1.0, 0.75, 0.25, 0] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ current_progress = args.easing.ease_spline start_time,~ - Inside source: true *** True Line Result current_progress = args.easing.ease_spline start_time, ** Processing line: ~ args.state.tick_count,~ - Inside source: true *** True Line Result args.state.tick_count, ** Processing line: ~ duration,~ - Inside source: true *** True Line Result duration, ** Processing line: ~ spline~ - Inside source: true *** True Line Result spline ** Processing line: ~ args.outputs.solids << { x: 1280 * current_progress, y: 360, w: 10, h: 10 }~ - Inside source: true *** True Line Result args.outputs.solids << { x: 1280 * current_progress, y: 360, w: 10, h: 10 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~** ~args.string~~ - Header detected. *** True Line Result *** True Line Result ** ~args.string~ ** Processing line: ~Useful string functions not included in Ruby core libraries.~ ** Processing line: ~*** ~.wrapped_lines string, max_character_length~~ - Header detected. *** True Line Result Useful string functions not included in Ruby core libraries. *** True Line Result *** ~.wrapped_lines string, max_character_length~ ** Processing line: ~This function will return a collection of strings given an input~ ** Processing line: ~~string~ and ~max_character_length~. The collection of strings returned will split the~ ** Processing line: ~input string into strings of ~length <= max_character_length~.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result This function will return a collection of strings given an input ~string~ and ~max_character_length~. The collection of strings returned will split the input string into strings of ~length <= max_character_length~. ** Processing line: ~The following example takes a string with new lines and creates a label for each one.~ ** Processing line: ~Labels (~args.outputs.labels~) ignore newline characters ~\n~.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The following example takes a string with new lines and creates a label for each one. Labels (~args.outputs.labels~) ignore newline characters ~\n~. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ long_string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.~ - Inside source: true *** True Line Result long_string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. ** Processing line: ~Integer dolor velit, ultricies vitae libero vel, aliquam imperdiet enim."~ - Inside source: true *** True Line Result Integer dolor velit, ultricies vitae libero vel, aliquam imperdiet enim." ** Processing line: ~ max_character_length = 30~ - Inside source: true *** True Line Result max_character_length = 30 ** Processing line: ~ long_strings_split = args.string.wrapped_lines long_string, max_character_length~ - Inside source: true *** True Line Result long_strings_split = args.string.wrapped_lines long_string, max_character_length ** Processing line: ~ args.outputs.labels << long_strings_split.map_with_index do |s, i|~ - Inside source: true *** True Line Result args.outputs.labels << long_strings_split.map_with_index do |s, i| ** Processing line: ~ { x: 10, y: 600 - (i * 20), text: s }~ - Inside source: true *** True Line Result { x: 10, y: 600 - (i * 20), text: s } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~** ~args.grid~~ - Header detected. *** True Line Result *** True Line Result ** ~args.grid~ ** Processing line: ~Returns the virtual grid for the game.~ ** Processing line: ~*** ~.name~~ - Header detected. *** True Line Result Returns the virtual grid for the game. *** True Line Result *** ~.name~ ** Processing line: ~Returns either ~:origin_bottom_left~ or ~:origin_center~.~ ** Processing line: ~*** ~.bottom~~ - Header detected. *** True Line Result Returns either ~:origin_bottom_left~ or ~:origin_center~. *** True Line Result *** ~.bottom~ ** Processing line: ~Returns the ~y~ value that represents the bottom of the grid.~ ** Processing line: ~*** ~.top~~ - Header detected. *** True Line Result Returns the ~y~ value that represents the bottom of the grid. *** True Line Result *** ~.top~ ** Processing line: ~Returns the ~y~ value that represents the top of the grid.~ ** Processing line: ~*** ~.left~~ - Header detected. *** True Line Result Returns the ~y~ value that represents the top of the grid. *** True Line Result *** ~.left~ ** Processing line: ~Returns the ~x~ value that represents the left of the grid.~ ** Processing line: ~*** ~.right~~ - Header detected. *** True Line Result Returns the ~x~ value that represents the left of the grid. *** True Line Result *** ~.right~ ** Processing line: ~Returns the ~x~ value that represents the right of the grid.~ ** Processing line: ~*** ~.rect~~ - Header detected. *** True Line Result Returns the ~x~ value that represents the right of the grid. *** True Line Result *** ~.rect~ ** Processing line: ~Returns a rectangle Primitive that represents the grid.~ ** Processing line: ~*** ~.origin_bottom_left!~~ - Header detected. *** True Line Result Returns a rectangle Primitive that represents the grid. *** True Line Result *** ~.origin_bottom_left!~ ** Processing line: ~Change the grids coordinate system to 0, 0 at the bottom left corner.~ ** Processing line: ~*** ~.origin_center!~~ - Header detected. *** True Line Result Change the grids coordinate system to 0, 0 at the bottom left corner. *** True Line Result *** ~.origin_center!~ ** Processing line: ~Change the grids coordinate system to 0, 0 at the center of the screen.~ ** Processing line: ~*** ~.w~~ - Header detected. *** True Line Result Change the grids coordinate system to 0, 0 at the center of the screen. *** True Line Result *** ~.w~ ** Processing line: ~Returns the grid's width (always 1280).~ ** Processing line: ~*** ~.h~~ - Header detected. *** True Line Result Returns the grid's width (always 1280). *** True Line Result *** ~.h~ ** Processing line: ~Returns the grid's height (always 720).~ ** Processing line: ~** ~args.gtk~~ - Header detected. *** True Line Result Returns the grid's height (always 720). *** True Line Result ** ~args.gtk~ ** Processing line: ~This represents the DragonRuby Game Toolkit's Runtime Environment and can be accessed via ~args.gtk.METHOD~.~ ** Processing line: ~*** ~.argv~~ - Header detected. *** True Line Result This represents the DragonRuby Game Toolkit's Runtime Environment and can be accessed via ~args.gtk.METHOD~. *** True Line Result *** ~.argv~ ** Processing line: ~Returns a ~String~ that represents the parameters passed into the ~./dragonruby~ binary.~ ** Processing line: ~*** ~.platform~~ - Header detected. *** True Line Result Returns a ~String~ that represents the parameters passed into the ~./dragonruby~ binary. *** True Line Result *** ~.platform~ ** Processing line: ~Returns a ~String~ representing the operating system the game is running on.~ ** Processing line: ~*** ~.request_quit~~ - Header detected. *** True Line Result Returns a ~String~ representing the operating system the game is running on. *** True Line Result *** ~.request_quit~ ** Processing line: ~Request that the runtime quit the game.~ ** Processing line: ~*** ~.write_file path, contents~~ - Header detected. *** True Line Result Request that the runtime quit the game. *** True Line Result *** ~.write_file path, contents~ ** Processing line: ~Writes/overwrites a file within the game directory + path.~ ** Processing line: ~*** ~.write_file_root~~ - Header detected. *** True Line Result Writes/overwrites a file within the game directory + path. *** True Line Result *** ~.write_file_root~ ** Processing line: ~Writes/overwrites a file within the root dragonruby binary directory + path.~ ** Processing line: ~*** ~.append_file path, contents~~ - Header detected. *** True Line Result Writes/overwrites a file within the root dragonruby binary directory + path. *** True Line Result *** ~.append_file path, contents~ ** Processing line: ~Append content to a file located at the game directory + path.~ ** Processing line: ~*** ~.append_file_root path, contents~~ - Header detected. *** True Line Result Append content to a file located at the game directory + path. *** True Line Result *** ~.append_file_root path, contents~ ** Processing line: ~Append content to a file located at the root dragonruby binary directory + path.~ ** Processing line: ~*** ~.read_file path~~ - Header detected. *** True Line Result Append content to a file located at the root dragonruby binary directory + path. *** True Line Result *** ~.read_file path~ ** Processing line: ~Reads a file from the sandboxed file system.~ ** Processing line: ~*** ~.parse_xml string, parse_xml_file path~~ - Header detected. *** True Line Result Reads a file from the sandboxed file system. *** True Line Result *** ~.parse_xml string, parse_xml_file path~ ** Processing line: ~Returns a ~Hash~ for a ~String~ that represents XML.~ ** Processing line: ~*** ~.parse_json string, parse_json_file path~~ - Header detected. *** True Line Result Returns a ~Hash~ for a ~String~ that represents XML. *** True Line Result *** ~.parse_json string, parse_json_file path~ ** Processing line: ~Returns a ~Hash~ for a ~String~ that represents JSON.~ ** Processing line: ~*** ~.http_get url, extra_headers = {}~~ - Header detected. *** True Line Result Returns a ~Hash~ for a ~String~ that represents JSON. *** True Line Result *** ~.http_get url, extra_headers = {}~ ** Processing line: ~Creates an async task to perform an HTTP GET.~ ** Processing line: ~*** ~.http_post url, form_fields = {}, extra_headers = {}~~ - Header detected. *** True Line Result Creates an async task to perform an HTTP GET. *** True Line Result *** ~.http_post url, form_fields = {}, extra_headers = {}~ ** Processing line: ~Creates an async task to perform an HTTP POST.~ ** Processing line: ~*** ~.reset~~ - Header detected. *** True Line Result Creates an async task to perform an HTTP POST. *** True Line Result *** ~.reset~ ** Processing line: ~Resets the game by deleting all data in ~args.state~ and setting ~args.state.tick_count~ back to ~0~.~ ** Processing line: ~*** ~.stop_music~~ - Header detected. *** True Line Result Resets the game by deleting all data in ~args.state~ and setting ~args.state.tick_count~ back to ~0~. *** True Line Result *** ~.stop_music~ ** Processing line: ~Stops all background music.~ ** Processing line: ~*** ~.calcstringbox str, size_enum, font~~ - Header detected. *** True Line Result Stops all background music. *** True Line Result *** ~.calcstringbox str, size_enum, font~ ** Processing line: ~Returns a tuple with width and height of a string being rendered.~ ** Processing line: ~*** ~.slowmo! factor~~ - Header detected. *** True Line Result Returns a tuple with width and height of a string being rendered. *** True Line Result *** ~.slowmo! factor~ ** Processing line: ~Slows the game down by the factor provided.~ ** Processing line: ~*** ~.notify! string~~ - Header detected. *** True Line Result Slows the game down by the factor provided. *** True Line Result *** ~.notify! string~ ** Processing line: ~Renders a toast message at the bottom of the screen.~ ** Processing line: ~*** ~.system~~ - Header detected. *** True Line Result Renders a toast message at the bottom of the screen. *** True Line Result *** ~.system~ ** Processing line: ~Invokes a shell command and prints the result to the console.~ ** Processing line: ~*** ~.exec~~ - Header detected. *** True Line Result Invokes a shell command and prints the result to the console. *** True Line Result *** ~.exec~ ** Processing line: ~Invokes a shell command and returns a ~String~ that represents the result.~ ** Processing line: ~*** ~.save_state~~ - Header detected. *** True Line Result Invokes a shell command and returns a ~String~ that represents the result. *** True Line Result *** ~.save_state~ ** Processing line: ~Saves the game state to ~game_state.txt~.~ ** Processing line: ~*** ~.load_state~~ - Header detected. *** True Line Result Saves the game state to ~game_state.txt~. *** True Line Result *** ~.load_state~ ** Processing line: ~Load ~args.state~ from ~game_state.txt~.~ ** Processing line: ~*** ~.serialize_state file, state~~ - Header detected. *** True Line Result Load ~args.state~ from ~game_state.txt~. *** True Line Result *** ~.serialize_state file, state~ ** Processing line: ~Saves entity state to a file. If only one parameter is provided a string is returned for state instead of writing to a file.~ ** Processing line: ~*** ~.deserialize_state file~~ - Header detected. *** True Line Result Saves entity state to a file. If only one parameter is provided a string is returned for state instead of writing to a file. *** True Line Result *** ~.deserialize_state file~ ** Processing line: ~Returns entity state from a file or serialization data represented as a ~String~.~ ** Processing line: ~*** ~.reset_sprite path~~ - Header detected. *** True Line Result Returns entity state from a file or serialization data represented as a ~String~. *** True Line Result *** ~.reset_sprite path~ ** Processing line: ~Invalids the texture cache of a sprite.~ ** Processing line: ~*** ~.show_cursor~~ - Header detected. *** True Line Result Invalids the texture cache of a sprite. *** True Line Result *** ~.show_cursor~ ** Processing line: ~Shows the mouse cursor.~ ** Processing line: ~*** ~.hide_cursor~~ - Header detected. *** True Line Result Shows the mouse cursor. *** True Line Result *** ~.hide_cursor~ ** Processing line: ~Hides the mouse cursor.~ ** Processing line: ~*** ~.set_cursor path, dx, dy~~ - Header detected. *** True Line Result Hides the mouse cursor. *** True Line Result *** ~.set_cursor path, dx, dy~ ** Processing line: ~Sets the system cursor to a sprite ~path~ with an offset of ~dx~ and ~dy~.~ ** Processing line: ~*** ~.cursor_shown?~~ - Header detected. *** True Line Result Sets the system cursor to a sprite ~path~ with an offset of ~dx~ and ~dy~. *** True Line Result *** ~.cursor_shown?~ ** Processing line: ~Returns ~true~ if the mouse cursor is shown.~ ** Processing line: ~*** ~.set_window_fullscreen enabled~~ - Header detected. *** True Line Result Returns ~true~ if the mouse cursor is shown. *** True Line Result *** ~.set_window_fullscreen enabled~ ** Processing line: ~Sets the game to either fullscreen (~enabled=true~) or windowed (~enabled=false)~.~ ** Processing line: ~*** ~.openurl url~~ - Header detected. *** True Line Result Sets the game to either fullscreen (~enabled=true~) or windowed (~enabled=false)~. *** True Line Result *** ~.openurl url~ ** Processing line: ~Opens a url using the Operating System's default browser.~ ** Processing line: ~*** ~.get_base_dir~~ - Header detected. *** True Line Result Opens a url using the Operating System's default browser. *** True Line Result *** ~.get_base_dir~ ** Processing line: ~Returns the full path of the DragonRuby binary directory.~ ** Processing line: ~*** ~.get_game_dir~~ - Header detected. *** True Line Result Returns the full path of the DragonRuby binary directory. *** True Line Result *** ~.get_game_dir~ ** Processing line: ~Returns the full path of the game directory in its sandboxed environment.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Returns the full path of the game directory in its sandboxed environment. ** Processing line: ~* DOCS: ~GTK::Runtime#reset~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::Runtime#reset~ ** Processing line: ~This function will reset Kernel.tick_count to 0 and will remove all data from args.state.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result This function will reset Kernel.tick_count to 0 and will remove all data from args.state. ** Processing line: ~* DOCS: ~GTK::Runtime#calcstringbox~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::Runtime#calcstringbox~ ** Processing line: ~This function returns the width and height of a string.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result This function returns the width and height of a string. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.string_size ||= args.gtk.calcstringbox "Hello World"~ - Inside source: true *** True Line Result args.state.string_size ||= args.gtk.calcstringbox "Hello World" ** Processing line: ~ args.state.string_size_font_size ||= args.gtk.calcstringbox "Hello World"~ - Inside source: true *** True Line Result args.state.string_size_font_size ||= args.gtk.calcstringbox "Hello World" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~GTK::Runtime#write_file~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::Runtime#write_file~ ** Processing line: ~This function takes in two parameters. The first parameter is the file path and assumes the the game~ ** Processing line: ~directory is the root. The second parameter is the string that will be written. The method overwrites whatever~ ** Processing line: ~is currently in the file. Use ~GTK::Runtime#append_file~ to append to the file as opposed to overwriting.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result This function takes in two parameters. The first parameter is the file path and assumes the the game directory is the root. The second parameter is the string that will be written. The method overwrites whatever is currently in the file. Use ~GTK::Runtime#append_file~ to append to the file as opposed to overwriting. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ if args.inputs.mouse.click~ - Inside source: true *** True Line Result if args.inputs.mouse.click ** Processing line: ~ args.gtk.write_file "last-mouse-click.txt", "Mouse was clicked at #{args.state.tick_count}."~ - Inside source: true *** True Line Result args.gtk.write_file "last-mouse-click.txt", "Mouse was clicked at #{args.state.tick_count}." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~GTK::Runtime#benchmark~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::Runtime#benchmark~ ** Processing line: ~You can use this function to compare the relative performance of methods.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You can use this function to compare the relative performance of methods. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # press r to run benchmark~ - Inside source: true *** True Line Result # press r to run benchmark ** Processing line: ~ if args.inputs.keyboard.key_down.r~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.r ** Processing line: ~ args.gtk.console.show~ - Inside source: true *** True Line Result args.gtk.console.show ** Processing line: ~ args.gtk.benchmark iterations: 1000, # number of iterations~ - Inside source: true *** True Line Result args.gtk.benchmark iterations: 1000, # number of iterations ** Processing line: ~ # label for experiment~ - Inside source: true *** True Line Result # label for experiment ** Processing line: ~ using_numeric_map: -> () {~ - Inside source: true *** True Line Result using_numeric_map: -> () { ** Processing line: ~ # experiment body~ - Inside source: true *** True Line Result # experiment body ** Processing line: ~ v = 100.map do |i|~ - Inside source: true *** True Line Result v = 100.map do |i| ** Processing line: ~ i * 100~ - Inside source: true *** True Line Result i * 100 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ },~ - Inside source: true *** True Line Result }, ** Processing line: ~ # label for experiment~ - Inside source: true *** True Line Result # label for experiment ** Processing line: ~ using_numeric_times: -> () {~ - Inside source: true *** True Line Result using_numeric_times: -> () { ** Processing line: ~ # experiment body~ - Inside source: true *** True Line Result # experiment body ** Processing line: ~ v = []~ - Inside source: true *** True Line Result v = [] ** Processing line: ~ 100.times do |i|~ - Inside source: true *** True Line Result 100.times do |i| ** Processing line: ~ v << i * 100~ - Inside source: true *** True Line Result v << i * 100 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Array~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Array~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The Array class has been extend to provide methods that~ ** Processing line: ~will help in common game development tasks. Array is one of the most~ ** Processing line: ~powerful classes in Ruby and a very fundamental component of Game Toolkit.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The Array class has been extend to provide methods that will help in common game development tasks. Array is one of the most powerful classes in Ruby and a very fundamental component of Game Toolkit. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Array#map~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Array#map~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The function given a block returns a new ~Enumerable~ of values.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The function given a block returns a new ~Enumerable~ of values. ** Processing line: ~Example of using ~Array#map~ in conjunction with ~args.state~ and~ ** Processing line: ~~args.outputs.sprites~ to render sprites to the screen.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Example of using ~Array#map~ in conjunction with ~args.state~ and ~args.outputs.sprites~ to render sprites to the screen. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # define the colors of the rainbow in ~args.state~~ - Inside source: true *** True Line Result # define the colors of the rainbow in ~args.state~ ** Processing line: ~ # as an ~Array~ of ~Hash~es with :order and :name.~ - Inside source: true *** True Line Result # as an ~Array~ of ~Hash~es with :order and :name. ** Processing line: ~ # :order will be used to determine render location~ - Inside source: true *** True Line Result # :order will be used to determine render location ** Processing line: ~ # and :name will be used to determine sprite path.~ - Inside source: true *** True Line Result # and :name will be used to determine sprite path. ** Processing line: ~ args.state.rainbow_colors ||= [~ - Inside source: true *** True Line Result args.state.rainbow_colors ||= [ ** Processing line: ~ { order: 0, name: :red },~ - Inside source: true *** True Line Result { order: 0, name: :red }, ** Processing line: ~ { order: 1, name: :orange },~ - Inside source: true *** True Line Result { order: 1, name: :orange }, ** Processing line: ~ { order: 2, name: :yellow },~ - Inside source: true *** True Line Result { order: 2, name: :yellow }, ** Processing line: ~ { order: 3, name: :green },~ - Inside source: true *** True Line Result { order: 3, name: :green }, ** Processing line: ~ { order: 4, name: :blue },~ - Inside source: true *** True Line Result { order: 4, name: :blue }, ** Processing line: ~ { order: 5, name: :indigo },~ - Inside source: true *** True Line Result { order: 5, name: :indigo }, ** Processing line: ~ { order: 6, name: :violet },~ - Inside source: true *** True Line Result { order: 6, name: :violet }, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render sprites diagonally to the screen~ - Inside source: true *** True Line Result # render sprites diagonally to the screen ** Processing line: ~ # with a width and height of 50.~ - Inside source: true *** True Line Result # with a width and height of 50. ** Processing line: ~ args.outputs~ - Inside source: true *** True Line Result args.outputs ** Processing line: ~ .sprites << args.state~ - Inside source: true *** True Line Result .sprites << args.state ** Processing line: ~ .rainbow_colors~ - Inside source: true *** True Line Result .rainbow_colors ** Processing line: ~ .map do |color| # <-- ~Array#map~ usage~ - Inside source: true *** True Line Result .map do |color| # <-- ~Array#map~ usage ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ color[:order] * 50,~ - Inside source: true *** True Line Result color[:order] * 50, ** Processing line: ~ color[:order] * 50,~ - Inside source: true *** True Line Result color[:order] * 50, ** Processing line: ~ 50,~ - Inside source: true *** True Line Result 50, ** Processing line: ~ 50,~ - Inside source: true *** True Line Result 50, ** Processing line: ~ "sprites/square-#{color[:name]}.png"~ - Inside source: true *** True Line Result "sprites/square-#{color[:name]}.png" ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Array#each~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Array#each~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The function, given a block, invokes the block for each item in the~ ** Processing line: ~~Array~. ~Array#each~ is synonymous to foreach constructs in other languages.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The function, given a block, invokes the block for each item in the ~Array~. ~Array#each~ is synonymous to foreach constructs in other languages. ** Processing line: ~Example of using ~Array#each~ in conjunction with ~args.state~ and~ ** Processing line: ~~args.outputs.sprites~ to render sprites to the screen:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Example of using ~Array#each~ in conjunction with ~args.state~ and ~args.outputs.sprites~ to render sprites to the screen: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # define the colors of the rainbow in ~args.state~~ - Inside source: true *** True Line Result # define the colors of the rainbow in ~args.state~ ** Processing line: ~ # as an ~Array~ of ~Hash~es with :order and :name.~ - Inside source: true *** True Line Result # as an ~Array~ of ~Hash~es with :order and :name. ** Processing line: ~ # :order will be used to determine render location~ - Inside source: true *** True Line Result # :order will be used to determine render location ** Processing line: ~ # and :name will be used to determine sprite path.~ - Inside source: true *** True Line Result # and :name will be used to determine sprite path. ** Processing line: ~ args.state.rainbow_colors ||= [~ - Inside source: true *** True Line Result args.state.rainbow_colors ||= [ ** Processing line: ~ { order: 0, name: :red },~ - Inside source: true *** True Line Result { order: 0, name: :red }, ** Processing line: ~ { order: 1, name: :orange },~ - Inside source: true *** True Line Result { order: 1, name: :orange }, ** Processing line: ~ { order: 2, name: :yellow },~ - Inside source: true *** True Line Result { order: 2, name: :yellow }, ** Processing line: ~ { order: 3, name: :green },~ - Inside source: true *** True Line Result { order: 3, name: :green }, ** Processing line: ~ { order: 4, name: :blue },~ - Inside source: true *** True Line Result { order: 4, name: :blue }, ** Processing line: ~ { order: 5, name: :indigo },~ - Inside source: true *** True Line Result { order: 5, name: :indigo }, ** Processing line: ~ { order: 6, name: :violet },~ - Inside source: true *** True Line Result { order: 6, name: :violet }, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render sprites diagonally to the screen~ - Inside source: true *** True Line Result # render sprites diagonally to the screen ** Processing line: ~ # with a width and height of 50.~ - Inside source: true *** True Line Result # with a width and height of 50. ** Processing line: ~ args.state~ - Inside source: true *** True Line Result args.state ** Processing line: ~ .rainbow_colors~ - Inside source: true *** True Line Result .rainbow_colors ** Processing line: ~ .map do |color| # <-- ~Array#each~ usage~ - Inside source: true *** True Line Result .map do |color| # <-- ~Array#each~ usage ** Processing line: ~ args.outputs.sprites << [~ - Inside source: true *** True Line Result args.outputs.sprites << [ ** Processing line: ~ color[:order] * 50,~ - Inside source: true *** True Line Result color[:order] * 50, ** Processing line: ~ color[:order] * 50,~ - Inside source: true *** True Line Result color[:order] * 50, ** Processing line: ~ 50,~ - Inside source: true *** True Line Result 50, ** Processing line: ~ 50,~ - Inside source: true *** True Line Result 50, ** Processing line: ~ "sprites/square-#{color[:name]}.png"~ - Inside source: true *** True Line Result "sprites/square-#{color[:name]}.png" ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Array#reject_nil~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Array#reject_nil~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Returns an ~Enumerable~ rejecting items that are ~nil~, this is an alias~ ** Processing line: ~for ~Array#compact~:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Returns an ~Enumerable~ rejecting items that are ~nil~, this is an alias for ~Array#compact~: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ a = [1, nil, 4, false, :a]~ - Inside source: true *** True Line Result a = [1, nil, 4, false, :a] ** Processing line: ~ puts a.reject_nil~ - Inside source: true *** True Line Result puts a.reject_nil ** Processing line: ~ # => [1, 4, false, :a]~ - Inside source: true *** True Line Result # => [1, 4, false, :a] ** Processing line: ~ puts a.compact~ - Inside source: true *** True Line Result puts a.compact ** Processing line: ~ # => [1, 4, false, :a]~ - Inside source: true *** True Line Result # => [1, 4, false, :a] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Array#reject_false~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Array#reject_false~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Returns an `Enumerable` rejecting items that are `nil` or `false`.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Returns an `Enumerable` rejecting items that are `nil` or `false`. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ a = [1, nil, 4, false, :a]~ - Inside source: true *** True Line Result a = [1, nil, 4, false, :a] ** Processing line: ~ puts a.reject_false~ - Inside source: true *** True Line Result puts a.reject_false ** Processing line: ~ # => [1, 4, :a]~ - Inside source: true *** True Line Result # => [1, 4, :a] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Array#product~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Array#product~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Returns all combinations of values between two arrays.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Returns all combinations of values between two arrays. ** Processing line: ~Here are some examples of using ~product~. Paste the~ ** Processing line: ~following code at the bottom of main.rb and save~ ** Processing line: ~the file to see the results:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Here are some examples of using ~product~. Paste the following code at the bottom of main.rb and save the file to see the results: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ a = [0, 1]~ - Inside source: true *** True Line Result a = [0, 1] ** Processing line: ~ puts a.product~ - Inside source: true *** True Line Result puts a.product ** Processing line: ~ # => [[0, 0], [0, 1], [1, 0], [1, 1]]~ - Inside source: true *** True Line Result # => [[0, 0], [0, 1], [1, 0], [1, 1]] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ a = [ 0, 1]~ - Inside source: true *** True Line Result a = [ 0, 1] ** Processing line: ~ b = [:a, :b]~ - Inside source: true *** True Line Result b = [:a, :b] ** Processing line: ~ puts a.product b~ - Inside source: true *** True Line Result puts a.product b ** Processing line: ~ # => [[0, :a], [0, :b], [1, :a], [1, :b]]~ - Inside source: true *** True Line Result # => [[0, :a], [0, :b], [1, :a], [1, :b]] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Array#map_2d~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Array#map_2d~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Assuming the array is an array of arrays, Given a block, each 2D array index invoked against the block.~ ** Processing line: ~A 2D array is a common way to store data/layout for a stage.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Assuming the array is an array of arrays, Given a block, each 2D array index invoked against the block. A 2D array is a common way to store data/layout for a stage. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ stage = [~ - Inside source: true *** True Line Result stage = [ ** Processing line: ~ [:enemy, :empty, :player],~ - Inside source: true *** True Line Result [:enemy, :empty, :player], ** Processing line: ~ [:empty, :empty, :empty],~ - Inside source: true *** True Line Result [:empty, :empty, :empty], ** Processing line: ~ [:enemy, :empty, :enemy],~ - Inside source: true *** True Line Result [:enemy, :empty, :enemy], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ occupied_tiles = stage.map_2d do |row, col, tile|~ - Inside source: true *** True Line Result occupied_tiles = stage.map_2d do |row, col, tile| ** Processing line: ~ if tile == :empty~ - Inside source: true *** True Line Result if tile == :empty ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ [row, col, tile]~ - Inside source: true *** True Line Result [row, col, tile] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end.reject_nil~ - Inside source: true *** True Line Result end.reject_nil ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts "Stage:"~ - Inside source: true *** True Line Result puts "Stage:" ** Processing line: ~ puts stage~ - Inside source: true *** True Line Result puts stage ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts "Occupied Tiles"~ - Inside source: true *** True Line Result puts "Occupied Tiles" ** Processing line: ~ puts occupied_tiles~ - Inside source: true *** True Line Result puts occupied_tiles ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Array#include_any?~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Array#include_any?~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Given a collection of items, the function will return~ ** Processing line: ~~true~ if any of ~self~'s items exists in the collection of items passed in:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Given a collection of items, the function will return ~true~ if any of ~self~'s items exists in the collection of items passed in: ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Array#any_intersect_rect?~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Array#any_intersect_rect?~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Assuming the array contains objects that respond to ~left~, ~right~, ~top~, ~bottom~,~ ** Processing line: ~this method returns ~true~ if any of the elements within~ ** Processing line: ~the array intersect the object being passed in. You are given an optional~ ** Processing line: ~parameter called ~tolerance~ which informs how close to the other rectangles~ ** Processing line: ~the elements need to be for it to be considered intersecting.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Assuming the array contains objects that respond to ~left~, ~right~, ~top~, ~bottom~, this method returns ~true~ if any of the elements within the array intersect the object being passed in. You are given an optional parameter called ~tolerance~ which informs how close to the other rectangles the elements need to be for it to be considered intersecting. ** Processing line: ~The default tolerance is set to ~0.1~, which means that the primitives are not~ ** Processing line: ~considered intersecting unless they are overlapping by more than ~0.1~.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The default tolerance is set to ~0.1~, which means that the primitives are not considered intersecting unless they are overlapping by more than ~0.1~. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ # Here is a player class that has position and implement~ - Inside source: true *** True Line Result # Here is a player class that has position and implement ** Processing line: ~ # the ~attr_rect~ contract.~ - Inside source: true *** True Line Result # the ~attr_rect~ contract. ** Processing line: ~ class Player~ - Inside source: true *** True Line Result class Player ** Processing line: ~ attr_rect~ - Inside source: true *** True Line Result attr_rect ** Processing line: ~ attr_accessor :x, :y, :w, :h~ - Inside source: true *** True Line Result attr_accessor :x, :y, :w, :h ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize x, y, w, h~ - Inside source: true *** True Line Result def initialize x, y, w, h ** Processing line: ~ @x = x~ - Inside source: true *** True Line Result @x = x ** Processing line: ~ @y = y~ - Inside source: true *** True Line Result @y = y ** Processing line: ~ @w = w~ - Inside source: true *** True Line Result @w = w ** Processing line: ~ @h = h~ - Inside source: true *** True Line Result @h = h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ { x: @x, y: @y, w: @w, h: @h }~ - Inside source: true *** True Line Result { x: @x, y: @y, w: @w, h: @h } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inspect~ - Inside source: true *** True Line Result def inspect ** Processing line: ~ "#{serialize}"~ - Inside source: true *** True Line Result "#{serialize}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ "#{serialize}"~ - Inside source: true *** True Line Result "#{serialize}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Here is a definition of two walls.~ - Inside source: true *** True Line Result # Here is a definition of two walls. ** Processing line: ~ walls = [~ - Inside source: true *** True Line Result walls = [ ** Processing line: ~ [10, 10, 10, 10],~ - Inside source: true *** True Line Result [10, 10, 10, 10], ** Processing line: ~ { x: 20, y: 20, w: 10, h: 10 },~ - Inside source: true *** True Line Result { x: 20, y: 20, w: 10, h: 10 }, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Display the walls.~ - Inside source: true *** True Line Result # Display the walls. ** Processing line: ~ puts "Walls."~ - Inside source: true *** True Line Result puts "Walls." ** Processing line: ~ puts walls~ - Inside source: true *** True Line Result puts walls ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Check any_intersect_rect? on player~ - Inside source: true *** True Line Result # Check any_intersect_rect? on player ** Processing line: ~ player = Player.new 30, 20, 10, 10~ - Inside source: true *** True Line Result player = Player.new 30, 20, 10, 10 ** Processing line: ~ puts "Is Player #{player} touching wall?"~ - Inside source: true *** True Line Result puts "Is Player #{player} touching wall?" ** Processing line: ~ puts (walls.any_intersect_rect? player)~ - Inside source: true *** True Line Result puts (walls.any_intersect_rect? player) ** Processing line: ~ # => false~ - Inside source: true *** True Line Result # => false ** Processing line: ~ # The value is false because of the default tolerance is 0.1.~ - Inside source: true *** True Line Result # The value is false because of the default tolerance is 0.1. ** Processing line: ~ # The overlap of the player rect and any of the wall rects is~ - Inside source: true *** True Line Result # The overlap of the player rect and any of the wall rects is ** Processing line: ~ # less than 0.1 (for those that intersect).~ - Inside source: true *** True Line Result # less than 0.1 (for those that intersect). ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ player = Player.new 9, 10, 10, 10~ - Inside source: true *** True Line Result player = Player.new 9, 10, 10, 10 ** Processing line: ~ puts "Is Player #{player} touching wall?"~ - Inside source: true *** True Line Result puts "Is Player #{player} touching wall?" ** Processing line: ~ puts (walls.any_intersect_rect? player)~ - Inside source: true *** True Line Result puts (walls.any_intersect_rect? player) ** Processing line: ~ # => true~ - Inside source: true *** True Line Result # => true ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~GTK::Args#audio~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::Args#audio~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Hash that contains audio sources that are playing. If you want to add a new sound add a hash with keys/values as~ ** Processing line: ~in the following example:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Hash that contains audio sources that are playing. If you want to add a new sound add a hash with keys/values as in the following example: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # The values below (except for input of course) are the default values that apply if you don't~ - Inside source: true *** True Line Result # The values below (except for input of course) are the default values that apply if you don't ** Processing line: ~ # specify the value in the hash.~ - Inside source: true *** True Line Result # specify the value in the hash. ** Processing line: ~ args.audio[:my_audio] = {~ - Inside source: true *** True Line Result args.audio[:my_audio] = { ** Processing line: ~ input: 'sound/boom.wav', # Filename~ - Inside source: true *** True Line Result input: 'sound/boom.wav', # Filename ** Processing line: ~ x: 0.0, y: 0.0, z: 0.0, # Relative position to the listener, x, y, z from -1.0 to 1.0~ - Inside source: true *** True Line Result x: 0.0, y: 0.0, z: 0.0, # Relative position to the listener, x, y, z from -1.0 to 1.0 ** Processing line: ~ gain: 1.0, # Volume (0.0 to 1.0)~ - Inside source: true *** True Line Result gain: 1.0, # Volume (0.0 to 1.0) ** Processing line: ~ pitch: 1.0, # Pitch of the sound (1.0 = original pitch)~ - Inside source: true *** True Line Result pitch: 1.0, # Pitch of the sound (1.0 = original pitch) ** Processing line: ~ paused: false, # Set to true to pause the sound at the current playback position~ - Inside source: true *** True Line Result paused: false, # Set to true to pause the sound at the current playback position ** Processing line: ~ looping: false, # Set to true to loop the sound/music until you stop it~ - Inside source: true *** True Line Result looping: false, # Set to true to loop the sound/music until you stop it ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Sounds that don't specify ~looping: true~ will be removed automatically from the hash after the playback ends.~ ** Processing line: ~Looping sounds or sounds that should stop early must be removed manually.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Sounds that don't specify ~looping: true~ will be removed automatically from the hash after the playback ends. Looping sounds or sounds that should stop early must be removed manually. ** Processing line: ~** Audio synthesis (Pro only)~ - Header detected. *** True Line Result *** True Line Result ** Audio synthesis (Pro only) ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Instead of a path to an audio file you can specify an array ~[channels, sample_rate, sound_source]~ for ~input~~ ** Processing line: ~to procedurally generate sound. You do this by providing an array of float values between -1.0 and 1.0 that~ ** Processing line: ~describe the waveform you want to play.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Instead of a path to an audio file you can specify an array ~[channels, sample_rate, sound_source]~ for ~input~ to procedurally generate sound. You do this by providing an array of float values between -1.0 and 1.0 that describe the waveform you want to play. ** Processing line: ~- ~channels~ is the number of channels: 1 = mono, 2 = stereo~ - Line was identified as a list. *** True Line Result ** Processing line: ~- ~sample_rate~ is the number of values per seconds you will provide to describe the audio wave~ - Line was identified as a list. *** True Line Result - ~channels~ is the number of channels: 1 = mono, 2 = stereo ** Processing line: ~- ~sound_source~ The source of your sound. See below~ - Line was identified as a list. *** True Line Result - ~sample_rate~ is the number of values per seconds you will provide to describe the audio wave ** Processing line: ~~ - End of paragraph detected. *** True Line Result - ~sound_source~ The source of your sound. See below ** Processing line: ~*** Sound source~ - Header detected. *** True Line Result *** True Line Result *** Sound source ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~A sound source can be one of two things:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result A sound source can be one of two things: ** Processing line: ~- A ~Proc~ object that is called on demand to generate the next samples to play. Every call should generate~ - Line was identified as a list. *** True Line Result ** Processing line: ~ enough samples for at least 0.1 to 0.5 seconds to get continuous playback without audio skips.~ ** Processing line: ~ The audio will continue playing endlessly until removed, so the ~looping~ option will have no effect.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result - A ~Proc~ object that is called on demand to generate the next samples to play. Every call should generate enough samples for at least 0.1 to 0.5 seconds to get continuous playback without audio skips. The audio will continue playing endlessly until removed, so the ~looping~ option will have no effect. ** Processing line: ~- An array of sample values that will be played back once. This is useful for procedurally generated one-off SFX.~ - Line was identified as a list. *** True Line Result ** Processing line: ~ ~looping~ will work as expected~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result - An array of sample values that will be played back once. This is useful for procedurally generated one-off SFX. ~looping~ will work as expected ** Processing line: ~When you specify 2 for ~channels~, then the generated sample array will be played back in an interleaved manner.~ ** Processing line: ~The first element is the first sample for the left channel, the second element is the first sample for the right~ ** Processing line: ~channel, the third element is the second sample for the left channel etc.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result When you specify 2 for ~channels~, then the generated sample array will be played back in an interleaved manner. The first element is the first sample for the left channel, the second element is the first sample for the right channel, the third element is the second sample for the left channel etc. ** Processing line: ~*** Example:~ - Header detected. *** True Line Result *** True Line Result *** Example: ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ sample_rate = 48000~ - Inside source: true *** True Line Result sample_rate = 48000 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ generate_sine_wave = lambda do~ - Inside source: true *** True Line Result generate_sine_wave = lambda do ** Processing line: ~ frequency = 440.0 # A5~ - Inside source: true *** True Line Result frequency = 440.0 # A5 ** Processing line: ~ samples_per_period = (sample_rate / frequency).ceil~ - Inside source: true *** True Line Result samples_per_period = (sample_rate / frequency).ceil ** Processing line: ~ one_period = samples_per_period.map_with_index { |i|~ - Inside source: true *** True Line Result one_period = samples_per_period.map_with_index { |i| ** Processing line: ~ Math.sin((2 * Math::PI) * (i / samples_per_period))~ - Inside source: true *** True Line Result Math.sin((2 * Math::PI) * (i / samples_per_period)) ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ one_period * frequency # Generate 1 second worth of sound~ - Inside source: true *** True Line Result one_period * frequency # Generate 1 second worth of sound ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.audio[:my_audio] ||= {~ - Inside source: true *** True Line Result args.audio[:my_audio] ||= { ** Processing line: ~ input: [1, sample_rate, generate_sine_wave]~ - Inside source: true *** True Line Result input: [1, sample_rate, generate_sine_wave] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~GTK::Outputs~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::Outputs~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Outputs is how you render primitives to the screen. The minimal setup for~ ** Processing line: ~rendering something to the screen is via a ~tick~ method defined in~ ** Processing line: ~mygame/app/main.rb~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Outputs is how you render primitives to the screen. The minimal setup for rendering something to the screen is via a ~tick~ method defined in mygame/app/main.rb ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # code goes here~ - Inside source: true *** True Line Result # code goes here ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~GTK::Outputs#solids~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::Outputs#solids~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Add primitives to this collection to render a solid to the screen.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Add primitives to this collection to render a solid to the screen. ** Processing line: ~** Rendering a solid using an Array~ - Header detected. *** True Line Result *** True Line Result ** Rendering a solid using an Array ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Creates a solid black rectangle located at 100, 100. 160 pixels~ ** Processing line: ~wide and 90 pixels tall.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Creates a solid black rectangle located at 100, 100. 160 pixels wide and 90 pixels tall. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # X Y WIDTH HEIGHT~ - Inside source: true *** True Line Result # X Y WIDTH HEIGHT ** Processing line: ~ args.outputs.solids << [100, 100, 160, 90]~ - Inside source: true *** True Line Result args.outputs.solids << [100, 100, 160, 90] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** Rendering a solid using an Array with colors and alpha~ - Header detected. *** True Line Result *** True Line Result ** Rendering a solid using an Array with colors and alpha ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The value for the color and alpha is a number between ~0~ and ~255~. The~ ** Processing line: ~alpha property is optional and will be set to ~255~ if not specified.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The value for the color and alpha is a number between ~0~ and ~255~. The alpha property is optional and will be set to ~255~ if not specified. ** Processing line: ~Creates a green solid rectangle with an opacity of 50%.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Creates a green solid rectangle with an opacity of 50%. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # X Y WIDTH HEIGHT RED GREEN BLUE ALPHA~ - Inside source: true *** True Line Result # X Y WIDTH HEIGHT RED GREEN BLUE ALPHA ** Processing line: ~ args.outputs.solids << [100, 100, 160, 90, 0, 255, 0, 128]~ - Inside source: true *** True Line Result args.outputs.solids << [100, 100, 160, 90, 0, 255, 0, 128] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** Rendering a solid using a Hash~ - Header detected. *** True Line Result *** True Line Result ** Rendering a solid using a Hash ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~If you want a more readable invocation. You can use the following hash to create a solid.~ ** Processing line: ~Any parameters that are not specified will be given a default value. The keys of the hash can~ ** Processing line: ~be provided in any order.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result If you want a more readable invocation. You can use the following hash to create a solid. Any parameters that are not specified will be given a default value. The keys of the hash can be provided in any order. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.solids << {~ - Inside source: true *** True Line Result args.outputs.solids << { ** Processing line: ~ x: 0,~ - Inside source: true *** True Line Result x: 0, ** Processing line: ~ y: 0,~ - Inside source: true *** True Line Result y: 0, ** Processing line: ~ w: 100,~ - Inside source: true *** True Line Result w: 100, ** Processing line: ~ h: 100,~ - Inside source: true *** True Line Result h: 100, ** Processing line: ~ r: 0,~ - Inside source: true *** True Line Result r: 0, ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 0,~ - Inside source: true *** True Line Result b: 0, ** Processing line: ~ a: 255~ - Inside source: true *** True Line Result a: 255 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** Rendering a solid using a Class~ - Header detected. *** True Line Result *** True Line Result ** Rendering a solid using a Class ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~You can also create a class with solid/border properties and render it as a primitive.~ ** Processing line: ~ALL properties must be on the class. *Additionally*, a method called ~primitive_marker~~ ** Processing line: ~must be defined on the class.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You can also create a class with solid/border properties and render it as a primitive. ALL properties must be on the class. *Additionally*, a method called ~primitive_marker~ must be defined on the class. ** Processing line: ~Here is an example:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Here is an example: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ # Create type with ALL solid properties AND primitive_marker~ - Inside source: true *** True Line Result # Create type with ALL solid properties AND primitive_marker ** Processing line: ~ class Solid~ - Inside source: true *** True Line Result class Solid ** Processing line: ~ attr_accessor :x, :y, :w, :h, :r, :g, :b, :a~ - Inside source: true *** True Line Result attr_accessor :x, :y, :w, :h, :r, :g, :b, :a ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def primitive_marker~ - Inside source: true *** True Line Result def primitive_marker ** Processing line: ~ :solid~ - Inside source: true *** True Line Result :solid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Inherit from type~ - Inside source: true *** True Line Result # Inherit from type ** Processing line: ~ class Square < Solid~ - Inside source: true *** True Line Result class Square < Solid ** Processing line: ~ # constructor~ - Inside source: true *** True Line Result # constructor ** Processing line: ~ def initialize x, y, size~ - Inside source: true *** True Line Result def initialize x, y, size ** Processing line: ~ self.x = x~ - Inside source: true *** True Line Result self.x = x ** Processing line: ~ self.y = y~ - Inside source: true *** True Line Result self.y = y ** Processing line: ~ self.w = size~ - Inside source: true *** True Line Result self.w = size ** Processing line: ~ self.h = size~ - Inside source: true *** True Line Result self.h = size ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # render solid/border~ - Inside source: true *** True Line Result # render solid/border ** Processing line: ~ args.outputs.solids << Square.new(10, 10, 32)~ - Inside source: true *** True Line Result args.outputs.solids << Square.new(10, 10, 32) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~GTK::Outputs#borders~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::Outputs#borders~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Add primitives to this collection to render an unfilled solid to the screen. Take a look at the~ ** Processing line: ~documentation for Outputs#solids.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Add primitives to this collection to render an unfilled solid to the screen. Take a look at the documentation for Outputs#solids. ** Processing line: ~The only difference between the two primitives is where they are added.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The only difference between the two primitives is where they are added. ** Processing line: ~Instead of using ~args.outputs.solids~:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Instead of using ~args.outputs.solids~: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # X Y WIDTH HEIGHT~ - Inside source: true *** True Line Result # X Y WIDTH HEIGHT ** Processing line: ~ args.outputs.solids << [100, 100, 160, 90]~ - Inside source: true *** True Line Result args.outputs.solids << [100, 100, 160, 90] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~You have to use ~args.outputs.borders~:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You have to use ~args.outputs.borders~: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # X Y WIDTH HEIGHT~ - Inside source: true *** True Line Result # X Y WIDTH HEIGHT ** Processing line: ~ args.outputs.borders << [100, 100, 160, 90]~ - Inside source: true *** True Line Result args.outputs.borders << [100, 100, 160, 90] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~GTK::Outputs#sprites~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::Outputs#sprites~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Add primitives to this collection to render a sprite to the screen.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Add primitives to this collection to render a sprite to the screen. ** Processing line: ~** Rendering a sprite using an Array~ - Header detected. *** True Line Result *** True Line Result ** Rendering a sprite using an Array ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Creates a sprite of a white circle located at 100, 100. 160 pixels~ ** Processing line: ~wide and 90 pixels tall.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Creates a sprite of a white circle located at 100, 100. 160 pixels wide and 90 pixels tall. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # X Y WIDTH HEIGHT PATH~ - Inside source: true *** True Line Result # X Y WIDTH HEIGHT PATH ** Processing line: ~ args.outputs.sprites << [100, 100, 160, 90, "sprites/circle/white.png]~ - Inside source: true *** True Line Result args.outputs.sprites << [100, 100, 160, 90, "sprites/circle/white.png] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** Rendering a sprite using an Array with colors and alpha~ - Header detected. *** True Line Result *** True Line Result ** Rendering a sprite using an Array with colors and alpha ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The value for the color and alpha is a number between ~0~ and ~255~. The~ ** Processing line: ~alpha property is optional and will be set to ~255~ if not specified.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The value for the color and alpha is a number between ~0~ and ~255~. The alpha property is optional and will be set to ~255~ if not specified. ** Processing line: ~Creates a green circle sprite with an opacity of 50%.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Creates a green circle sprite with an opacity of 50%. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # X Y WIDTH HEIGHT PATH ANGLE ALPHA RED GREEN BLUE~ - Inside source: true *** True Line Result # X Y WIDTH HEIGHT PATH ANGLE ALPHA RED GREEN BLUE ** Processing line: ~ args.outputs.sprites << [100, 100, 160, 90, "sprites/circle/white.png", 0, 128, 0, 255, 0]~ - Inside source: true *** True Line Result args.outputs.sprites << [100, 100, 160, 90, "sprites/circle/white.png", 0, 128, 0, 255, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** Rendering a sprite using a Hash~ - Header detected. *** True Line Result *** True Line Result ** Rendering a sprite using a Hash ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~If you want a more readable invocation. You can use the following hash to create a sprite.~ ** Processing line: ~Any parameters that are not specified will be given a default value. The keys of the hash can~ ** Processing line: ~be provided in any order.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result If you want a more readable invocation. You can use the following hash to create a sprite. Any parameters that are not specified will be given a default value. The keys of the hash can be provided in any order. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.sprites << {~ - Inside source: true *** True Line Result args.outputs.sprites << { ** Processing line: ~ x: 0,~ - Inside source: true *** True Line Result x: 0, ** Processing line: ~ y: 0,~ - Inside source: true *** True Line Result y: 0, ** Processing line: ~ w: 100,~ - Inside source: true *** True Line Result w: 100, ** Processing line: ~ h: 100,~ - Inside source: true *** True Line Result h: 100, ** Processing line: ~ path: "sprites/circle/white.png",~ - Inside source: true *** True Line Result path: "sprites/circle/white.png", ** Processing line: ~ angle: 0,~ - Inside source: true *** True Line Result angle: 0, ** Processing line: ~ a: 255,~ - Inside source: true *** True Line Result a: 255, ** Processing line: ~ r: 0,~ - Inside source: true *** True Line Result r: 0, ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 0~ - Inside source: true *** True Line Result b: 0 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** Rendering a solid using a Class~ - Header detected. *** True Line Result *** True Line Result ** Rendering a solid using a Class ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~You can also create a class with solid/border properties and render it as a primitive.~ ** Processing line: ~ALL properties must be on the class. *Additionally*, a method called ~primitive_marker~~ ** Processing line: ~must be defined on the class.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result You can also create a class with solid/border properties and render it as a primitive. ALL properties must be on the class. *Additionally*, a method called ~primitive_marker~ must be defined on the class. ** Processing line: ~Here is an example:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Here is an example: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ # Create type with ALL sprite properties AND primitive_marker~ - Inside source: true *** True Line Result # Create type with ALL sprite properties AND primitive_marker ** Processing line: ~ class Sprite~ - Inside source: true *** True Line Result class Sprite ** Processing line: ~ attr_accessor :x, :y, :w, :h, :path, :angle, :angle_anchor_x, :angle_anchor_y, :tile_x, :tile_y, :tile_w, :tile_h, :source_x, :source_y, :source_w, :source_h, :flip_horizontally, :flip_vertically, :a, :r, :g, :b~ - Inside source: true *** True Line Result attr_accessor :x, :y, :w, :h, :path, :angle, :angle_anchor_x, :angle_anchor_y, :tile_x, :tile_y, :tile_w, :tile_h, :source_x, :source_y, :source_w, :source_h, :flip_horizontally, :flip_vertically, :a, :r, :g, :b ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def primitive_marker~ - Inside source: true *** True Line Result def primitive_marker ** Processing line: ~ :sprite~ - Inside source: true *** True Line Result :sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Inherit from type~ - Inside source: true *** True Line Result # Inherit from type ** Processing line: ~ class Circle < Sprite~ - Inside source: true *** True Line Result class Circle < Sprite ** Processing line: ~ # constructor~ - Inside source: true *** True Line Result # constructor ** Processing line: ~ def initialize x, y, size, path~ - Inside source: true *** True Line Result def initialize x, y, size, path ** Processing line: ~ self.x = x~ - Inside source: true *** True Line Result self.x = x ** Processing line: ~ self.y = y~ - Inside source: true *** True Line Result self.y = y ** Processing line: ~ self.w = size~ - Inside source: true *** True Line Result self.w = size ** Processing line: ~ self.h = size~ - Inside source: true *** True Line Result self.h = size ** Processing line: ~ self.path = path~ - Inside source: true *** True Line Result self.path = path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ def serlialize~ - Inside source: true *** True Line Result def serlialize ** Processing line: ~ {x:self.x, y:self.y, w:self.w, h:self.h, path:self.path}~ - Inside source: true *** True Line Result {x:self.x, y:self.y, w:self.w, h:self.h, path:self.path} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inspect~ - Inside source: true *** True Line Result def inspect ** Processing line: ~ serlialize.to_s~ - Inside source: true *** True Line Result serlialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ serlialize.to_s~ - Inside source: true *** True Line Result serlialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # render circle sprite~ - Inside source: true *** True Line Result # render circle sprite ** Processing line: ~ args.outputs.sprites << Circle.new(10, 10, 32,"sprites/circle/white.png")~ - Inside source: true *** True Line Result args.outputs.sprites << Circle.new(10, 10, 32,"sprites/circle/white.png") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~GTK::Outputs#screenshots~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::Outputs#screenshots~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Add a hash to this collection to take a screenshot and save as png file.~ ** Processing line: ~The keys of the hash can be provided in any order.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Add a hash to this collection to take a screenshot and save as png file. The keys of the hash can be provided in any order. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.screenshots << {~ - Inside source: true *** True Line Result args.outputs.screenshots << { ** Processing line: ~ x: 0, y: 0, w: 100, h: 100, # Which portion of the screen should be captured~ - Inside source: true *** True Line Result x: 0, y: 0, w: 100, h: 100, # Which portion of the screen should be captured ** Processing line: ~ path: 'screenshot.png', # Output path of PNG file (inside game directory)~ - Inside source: true *** True Line Result path: 'screenshot.png', # Output path of PNG file (inside game directory) ** Processing line: ~ r: 255, g: 255, b: 255, a: 0 # Optional chroma key~ - Inside source: true *** True Line Result r: 255, g: 255, b: 255, a: 0 # Optional chroma key ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** Chroma key (Making a color transparent)~ - Header detected. *** True Line Result *** True Line Result ** Chroma key (Making a color transparent) ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~By specifying the r, g, b and a keys of the hash you change the transparency of a color in the resulting PNG file.~ ** Processing line: ~This can be useful if you want to create files with transparent background like spritesheets.~ ** Processing line: ~The transparency of the color specified by ~r~, ~g~, ~b~ will be set to the transparency specified by ~a~.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result By specifying the r, g, b and a keys of the hash you change the transparency of a color in the resulting PNG file. This can be useful if you want to create files with transparent background like spritesheets. The transparency of the color specified by ~r~, ~g~, ~b~ will be set to the transparency specified by ~a~. ** Processing line: ~The example above sets the color white (255, 255, 255) as transparent.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The example above sets the color white (255, 255, 255) as transparent. ** Processing line: ~* DOCS: ~GTK::Mouse~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::Mouse~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The mouse is accessible via ~args.inputs.mouse~:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The mouse is accessible via ~args.inputs.mouse~: ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # Rendering a label that shows the mouse's x and y position (via args.inputs.mouse).~ - Inside source: true *** True Line Result # Rendering a label that shows the mouse's x and y position (via args.inputs.mouse). ** Processing line: ~ args.outputs.labels << [~ - Inside source: true *** True Line Result args.outputs.labels << [ ** Processing line: ~ 10,~ - Inside source: true *** True Line Result 10, ** Processing line: ~ 710,~ - Inside source: true *** True Line Result 710, ** Processing line: ~ "The mouse's position is: #{args.inputs.mouse.x} #{args.inputs.mouse.y}."~ - Inside source: true *** True Line Result "The mouse's position is: #{args.inputs.mouse.x} #{args.inputs.mouse.y}." ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The mouse has the following properties.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The mouse has the following properties. ** Processing line: ~- ~args.inputs.mouse.x~: Returns the x position of the mouse.~ - Line was identified as a list. *** True Line Result ** Processing line: ~- ~args.inputs.mouse.y~: Returns the y position of the mouse.~ - Line was identified as a list. *** True Line Result - ~args.inputs.mouse.x~: Returns the x position of the mouse. ** Processing line: ~- ~args.inputs.mouse.moved~: Returns true if the mouse moved during the tick.~ - Line was identified as a list. *** True Line Result - ~args.inputs.mouse.y~: Returns the y position of the mouse. ** Processing line: ~- ~args.inputs.mouse.moved_at~: Returns the tick_count (~args.state.tick_count~) that the mouse was moved at. This property will be ~nil~ if the mouse didn't move.~ - Line was identified as a list. *** True Line Result - ~args.inputs.mouse.moved~: Returns true if the mouse moved during the tick. ** Processing line: ~- ~args.inputs.mouse.global_moved_at~: Returns the global tick_count (~Kernel.global_tick_count~) that the mouse was moved at. This property will be ~nil~ if the mouse didn't move.~ - Line was identified as a list. *** True Line Result - ~args.inputs.mouse.moved_at~: Returns the tick_count (~args.state.tick_count~) that the mouse was moved at. This property will be ~nil~ if the mouse didn't move. ** Processing line: ~- ~args.inputs.mouse.click~: Returns a ~GTK::MousePoint~ for that specific frame (~args.state.tick_count~) if the mouse button was pressed.~ - Line was identified as a list. *** True Line Result - ~args.inputs.mouse.global_moved_at~: Returns the global tick_count (~Kernel.global_tick_count~) that the mouse was moved at. This property will be ~nil~ if the mouse didn't move. ** Processing line: ~- ~args.inputs.mouse.previous_click~: Returns a ~GTK::MousePoint~ for the previous frame (~args.state.tick_count - 1~) if the mouse button was pressed.~ - Line was identified as a list. *** True Line Result - ~args.inputs.mouse.click~: Returns a ~GTK::MousePoint~ for that specific frame (~args.state.tick_count~) if the mouse button was pressed. ** Processing line: ~- ~args.inputs.mouse.up~: Returns true if for that specific frame (~args.state.tick_count~) if the mouse button was released.~ - Line was identified as a list. *** True Line Result - ~args.inputs.mouse.previous_click~: Returns a ~GTK::MousePoint~ for the previous frame (~args.state.tick_count - 1~) if the mouse button was pressed. ** Processing line: ~- ~args.inputs.mouse.point~ | ~args.inputs.mouse.position~: Returns an ~Array~ which contains the ~x~ and ~y~ position of the mouse.~ - Line was identified as a list. *** True Line Result - ~args.inputs.mouse.up~: Returns true if for that specific frame (~args.state.tick_count~) if the mouse button was released. ** Processing line: ~- ~args.inputs.mouse.has_focus~: Returns true if the game window has the mouse's focus.~ - Line was identified as a list. *** True Line Result - ~args.inputs.mouse.point~ | ~args.inputs.mouse.position~: Returns an ~Array~ which contains the ~x~ and ~y~ position of the mouse. ** Processing line: ~- ~args.inputs.mouse.wheel~: Returns an ~GTK::OpenEntity~ that contains an ~x~ and ~y~ property which represents how much the wheel has moved. If the wheel has not moved within the tick, this property will be ~nil~.~ - Line was identified as a list. *** True Line Result - ~args.inputs.mouse.has_focus~: Returns true if the game window has the mouse's focus. ** Processing line: ~- ~args.inputs.mouse.button_left~: Returns true if the left mouse button is down.~ - Line was identified as a list. *** True Line Result - ~args.inputs.mouse.wheel~: Returns an ~GTK::OpenEntity~ that contains an ~x~ and ~y~ property which represents how much the wheel has moved. If the wheel has not moved within the tick, this property will be ~nil~. ** Processing line: ~- ~args.inputs.mouse.button_right~: Returns true if the right mouse button is down.~ - Line was identified as a list. *** True Line Result - ~args.inputs.mouse.button_left~: Returns true if the left mouse button is down. ** Processing line: ~- ~args.inputs.mouse.button_middle~: Returns true if the middle mouse button is down.~ - Line was identified as a list. *** True Line Result - ~args.inputs.mouse.button_right~: Returns true if the right mouse button is down. ** Processing line: ~- ~args.inputs.mouse.button_bits~: Gives the bits for each mouse button and its current state.~ - Line was identified as a list. *** True Line Result - ~args.inputs.mouse.button_middle~: Returns true if the middle mouse button is down. ** Processing line: ~~ - End of paragraph detected. *** True Line Result - ~args.inputs.mouse.button_bits~: Gives the bits for each mouse button and its current state. ** Processing line: ~* DOCS: ~GTK::MousePoint~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::MousePoint~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The ~GTK::MousePoint~ has the following properties.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The ~GTK::MousePoint~ has the following properties. ** Processing line: ~- ~x~: Integer representing the mouse's x.~ - Line was identified as a list. *** True Line Result ** Processing line: ~- ~y~: Integer representing the mouse's y.~ - Line was identified as a list. *** True Line Result - ~x~: Integer representing the mouse's x. ** Processing line: ~- ~point~: Array with the ~x~ and ~y~ values.~ - Line was identified as a list. *** True Line Result - ~y~: Integer representing the mouse's y. ** Processing line: ~- ~w~: Width of the point that always returns ~0~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - Line was identified as a list. *** True Line Result - ~point~: Array with the ~x~ and ~y~ values. ** Processing line: ~- ~h~: Height of the point that always returns ~0~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - Line was identified as a list. *** True Line Result - ~w~: Width of the point that always returns ~0~ (included so that it can seamlessly work with ~GTK::Geometry~ functions). ** Processing line: ~- ~left~: This value is the same as ~x~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - Line was identified as a list. *** True Line Result - ~h~: Height of the point that always returns ~0~ (included so that it can seamlessly work with ~GTK::Geometry~ functions). ** Processing line: ~- ~right~: This value is the same as ~x~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - Line was identified as a list. *** True Line Result - ~left~: This value is the same as ~x~ (included so that it can seamlessly work with ~GTK::Geometry~ functions). ** Processing line: ~- ~top~: This value is the same as ~y~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - Line was identified as a list. *** True Line Result - ~right~: This value is the same as ~x~ (included so that it can seamlessly work with ~GTK::Geometry~ functions). ** Processing line: ~- ~bottom~: This value is the same as ~y~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - Line was identified as a list. *** True Line Result - ~top~: This value is the same as ~y~ (included so that it can seamlessly work with ~GTK::Geometry~ functions). ** Processing line: ~- ~created_at~: The tick (~args.state.tick_count~) that this structure was created.~ - Line was identified as a list. *** True Line Result - ~bottom~: This value is the same as ~y~ (included so that it can seamlessly work with ~GTK::Geometry~ functions). ** Processing line: ~- ~global_created_at~: The global tick (~Kernel.global_tick_count~) that this structure was created.~ - Line was identified as a list. *** True Line Result - ~created_at~: The tick (~args.state.tick_count~) that this structure was created. ** Processing line: ~~ - End of paragraph detected. *** True Line Result - ~global_created_at~: The global tick (~Kernel.global_tick_count~) that this structure was created. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~GTK::OpenEntity~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::OpenEntity~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~GTK::OpenEntity~ is accessible within the DragonRuby's top level~ ** Processing line: ~~tick~ function via the ~args.state~ property.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ~GTK::OpenEntity~ is accessible within the DragonRuby's top level ~tick~ function via the ~args.state~ property. ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.x ||= 100~ - Inside source: true *** True Line Result args.state.x ||= 100 ** Processing line: ~ args.outputs.labels << [10, 710, "value of x is: #{args.state.x}."]~ - Inside source: true *** True Line Result args.outputs.labels << [10, 710, "value of x is: #{args.state.x}."] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The primary benefit of using ~args.state~ as opposed to instance~ ** Processing line: ~variables is that ~GTK::OpenEntity~ allows for arbitrary nesting~ ** Processing line: ~of properties without the need to create intermediate objects.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The primary benefit of using ~args.state~ as opposed to instance variables is that ~GTK::OpenEntity~ allows for arbitrary nesting of properties without the need to create intermediate objects. ** Processing line: ~For example:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result For example: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # intermediate player object does not need to be created~ - Inside source: true *** True Line Result # intermediate player object does not need to be created ** Processing line: ~ args.state.player.x ||= 100~ - Inside source: true *** True Line Result args.state.player.x ||= 100 ** Processing line: ~ args.state.player.y ||= 100~ - Inside source: true *** True Line Result args.state.player.y ||= 100 ** Processing line: ~ args.outputs.labels << [~ - Inside source: true *** True Line Result args.outputs.labels << [ ** Processing line: ~ 10,~ - Inside source: true *** True Line Result 10, ** Processing line: ~ 710,~ - Inside source: true *** True Line Result 710, ** Processing line: ~ "player x, y is:#{args.state.player.x}, #{args.state.player.y}."~ - Inside source: true *** True Line Result "player x, y is:#{args.state.player.x}, #{args.state.player.y}." ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~GTK::OpenEntity#as_hash~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::OpenEntity#as_hash~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Returns a reference to the ~GTK::OpenEntity~ as a ~Hash~. This~ ** Processing line: ~property is useful when you want to treat ~args.state~ as a ~Hash~ and~ ** Processing line: ~invoke methods such as ~Hash#each~.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Returns a reference to the ~GTK::OpenEntity~ as a ~Hash~. This property is useful when you want to treat ~args.state~ as a ~Hash~ and invoke methods such as ~Hash#each~. ** Processing line: ~Example:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Example: ** Processing line: ~#+begin_src~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.x ||= 100~ - Inside source: true *** True Line Result args.state.x ||= 100 ** Processing line: ~ args.state.y ||= 100~ - Inside source: true *** True Line Result args.state.y ||= 100 ** Processing line: ~ values = args.state~ - Inside source: true *** True Line Result values = args.state ** Processing line: ~ .as_hash~ - Inside source: true *** True Line Result .as_hash ** Processing line: ~ .map { |k, v| "#{k} #{v}" }~ - Inside source: true *** True Line Result .map { |k, v| "#{k} #{v}" } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << values.map.with_index do |v, i|~ - Inside source: true *** True Line Result args.outputs.labels << values.map.with_index do |v, i| ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ 10,~ - Inside source: true *** True Line Result 10, ** Processing line: ~ 710 - (30 * i),~ - Inside source: true *** True Line Result 710 - (30 * i), ** Processing line: ~ v~ - Inside source: true *** True Line Result v ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Numeric#frame_index~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Numeric#frame_index~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~This function is helpful for determining the index of frame-by-frame~ ** Processing line: ~ sprite animation. The numeric value ~self~ represents the moment the~ ** Processing line: ~ animation started.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result This function is helpful for determining the index of frame-by-frame sprite animation. The numeric value ~self~ represents the moment the animation started. ** Processing line: ~~frame_index~ takes three additional parameters:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ~frame_index~ takes three additional parameters: ** Processing line: ~- How many frames exist in the sprite animation.~ - Line was identified as a list. *** True Line Result ** Processing line: ~- How long to hold each animation for.~ - Line was identified as a list. *** True Line Result - How many frames exist in the sprite animation. ** Processing line: ~- Whether the animation should repeat.~ - Line was identified as a list. *** True Line Result - How long to hold each animation for. ** Processing line: ~~ - End of paragraph detected. *** True Line Result - Whether the animation should repeat. ** Processing line: ~~frame_index~ will return ~nil~ if the time for the animation is out~ ** Processing line: ~of bounds of the parameter specification.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ~frame_index~ will return ~nil~ if the time for the animation is out of bounds of the parameter specification. ** Processing line: ~Example using variables:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Example using variables: ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ start_looping_at = 0~ - Inside source: true *** True Line Result start_looping_at = 0 ** Processing line: ~ number_of_sprites = 6~ - Inside source: true *** True Line Result number_of_sprites = 6 ** Processing line: ~ number_of_frames_to_show_each_sprite = 4~ - Inside source: true *** True Line Result number_of_frames_to_show_each_sprite = 4 ** Processing line: ~ does_sprite_loop = true~ - Inside source: true *** True Line Result does_sprite_loop = true ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sprite_index =~ - Inside source: true *** True Line Result sprite_index = ** Processing line: ~ start_looping_at.frame_index number_of_sprites,~ - Inside source: true *** True Line Result start_looping_at.frame_index number_of_sprites, ** Processing line: ~ number_of_frames_to_show_each_sprite,~ - Inside source: true *** True Line Result number_of_frames_to_show_each_sprite, ** Processing line: ~ does_sprite_loop~ - Inside source: true *** True Line Result does_sprite_loop ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sprite_index ||= 0~ - Inside source: true *** True Line Result sprite_index ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.sprites << [~ - Inside source: true *** True Line Result args.outputs.sprites << [ ** Processing line: ~ 640 - 50,~ - Inside source: true *** True Line Result 640 - 50, ** Processing line: ~ 360 - 50,~ - Inside source: true *** True Line Result 360 - 50, ** Processing line: ~ 100,~ - Inside source: true *** True Line Result 100, ** Processing line: ~ 100,~ - Inside source: true *** True Line Result 100, ** Processing line: ~ "sprites/dragon-#{sprite_index}.png"~ - Inside source: true *** True Line Result "sprites/dragon-#{sprite_index}.png" ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Example using named parameters:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Example using named parameters: ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ start_looping_at = 0~ - Inside source: true *** True Line Result start_looping_at = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sprite_index =~ - Inside source: true *** True Line Result sprite_index = ** Processing line: ~ start_looping_at.frame_index count: 6,~ - Inside source: true *** True Line Result start_looping_at.frame_index count: 6, ** Processing line: ~ hold_for: 4,~ - Inside source: true *** True Line Result hold_for: 4, ** Processing line: ~ repeat: true,~ - Inside source: true *** True Line Result repeat: true, ** Processing line: ~ tick_count_override: args.state.tick_count~ - Inside source: true *** True Line Result tick_count_override: args.state.tick_count ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sprite_index ||= 0~ - Inside source: true *** True Line Result sprite_index ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.sprites << [~ - Inside source: true *** True Line Result args.outputs.sprites << [ ** Processing line: ~ 640 - 50,~ - Inside source: true *** True Line Result 640 - 50, ** Processing line: ~ 360 - 50,~ - Inside source: true *** True Line Result 360 - 50, ** Processing line: ~ 100,~ - Inside source: true *** True Line Result 100, ** Processing line: ~ 100,~ - Inside source: true *** True Line Result 100, ** Processing line: ~ "sprites/dragon-#{sprite_index}.png"~ - Inside source: true *** True Line Result "sprites/dragon-#{sprite_index}.png" ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Numeric#elapsed_time~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Numeric#elapsed_time~ ** Processing line: ~For a given number, the elapsed frames since that number is returned.~ ** Processing line: ~`Kernel.tick_count` is used to determine how many frames have elapsed.~ ** Processing line: ~An optional numeric argument can be passed in which will be used instead~ ** Processing line: ~of `Kernel.tick_count`.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result For a given number, the elapsed frames since that number is returned. `Kernel.tick_count` is used to determine how many frames have elapsed. An optional numeric argument can be passed in which will be used instead of `Kernel.tick_count`. ** Processing line: ~Here is an example of how elapsed_time can be used.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Here is an example of how elapsed_time can be used. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.last_click_at ||= 0~ - Inside source: true *** True Line Result args.state.last_click_at ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # record when a mouse click occurs~ - Inside source: true *** True Line Result # record when a mouse click occurs ** Processing line: ~ if args.inputs.mouse.click~ - Inside source: true *** True Line Result if args.inputs.mouse.click ** Processing line: ~ args.state.last_click_at = args.state.tick_count~ - Inside source: true *** True Line Result args.state.last_click_at = args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Use Numeric#elapsed_time to determine how long it's been~ - Inside source: true *** True Line Result # Use Numeric#elapsed_time to determine how long it's been ** Processing line: ~ if args.state.last_click_at.elapsed_time > 120~ - Inside source: true *** True Line Result if args.state.last_click_at.elapsed_time > 120 ** Processing line: ~ args.outputs.labels << [10, 710, "It has been over 2 seconds since the mouse was clicked."]~ - Inside source: true *** True Line Result args.outputs.labels << [10, 710, "It has been over 2 seconds since the mouse was clicked."] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~And here is an example where the override parameter is passed in:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result And here is an example where the override parameter is passed in: ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.last_click_at ||= 0~ - Inside source: true *** True Line Result args.state.last_click_at ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # create a state variable that tracks time at half the speed of args.state.tick_count~ - Inside source: true *** True Line Result # create a state variable that tracks time at half the speed of args.state.tick_count ** Processing line: ~ args.state.simulation_tick = args.state.tick_count.idiv 2~ - Inside source: true *** True Line Result args.state.simulation_tick = args.state.tick_count.idiv 2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # record when a mouse click occurs~ - Inside source: true *** True Line Result # record when a mouse click occurs ** Processing line: ~ if args.inputs.mouse.click~ - Inside source: true *** True Line Result if args.inputs.mouse.click ** Processing line: ~ args.state.last_click_at = args.state.simulation_tick~ - Inside source: true *** True Line Result args.state.last_click_at = args.state.simulation_tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Use Numeric#elapsed_time to determine how long it's been~ - Inside source: true *** True Line Result # Use Numeric#elapsed_time to determine how long it's been ** Processing line: ~ if (args.state.last_click_at.elapsed_time args.state.simulation_tick) > 120~ - Inside source: true *** True Line Result if (args.state.last_click_at.elapsed_time args.state.simulation_tick) > 120 ** Processing line: ~ args.outputs.labels << [10, 710, "It has been over 4 seconds since the mouse was clicked."]~ - Inside source: true *** True Line Result args.outputs.labels << [10, 710, "It has been over 4 seconds since the mouse was clicked."] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Numeric#elapsed?~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Numeric#elapsed?~ ** Processing line: ~Returns true if ~Numeric#elapsed_time~ is greater than the number. An optional parameter can be~ ** Processing line: ~passed into ~elapsed?~ which is added to the number before evaluating whether ~elapsed?~ is true.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Returns true if ~Numeric#elapsed_time~ is greater than the number. An optional parameter can be passed into ~elapsed?~ which is added to the number before evaluating whether ~elapsed?~ is true. ** Processing line: ~Example usage (no optional parameter):~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Example usage (no optional parameter): ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.box_queue ||= []~ - Inside source: true *** True Line Result args.state.box_queue ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.box_queue.empty?~ - Inside source: true *** True Line Result if args.state.box_queue.empty? ** Processing line: ~ args.state.box_queue << { name: :red,~ - Inside source: true *** True Line Result args.state.box_queue << { name: :red, ** Processing line: ~ destroy_at: args.state.tick_count + 60 }~ - Inside source: true *** True Line Result destroy_at: args.state.tick_count + 60 } ** Processing line: ~ args.state.box_queue << { name: :green,~ - Inside source: true *** True Line Result args.state.box_queue << { name: :green, ** Processing line: ~ destroy_at: args.state.tick_count + 60 }~ - Inside source: true *** True Line Result destroy_at: args.state.tick_count + 60 } ** Processing line: ~ args.state.box_queue << { name: :blue,~ - Inside source: true *** True Line Result args.state.box_queue << { name: :blue, ** Processing line: ~ destroy_at: args.state.tick_count + 120 }~ - Inside source: true *** True Line Result destroy_at: args.state.tick_count + 120 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ boxes_to_destroy = args.state~ - Inside source: true *** True Line Result boxes_to_destroy = args.state ** Processing line: ~ .box_queue~ - Inside source: true *** True Line Result .box_queue ** Processing line: ~ .find_all { |b| b[:destroy_at].elapsed? }~ - Inside source: true *** True Line Result .find_all { |b| b[:destroy_at].elapsed? } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !boxes_to_destroy.empty?~ - Inside source: true *** True Line Result if !boxes_to_destroy.empty? ** Processing line: ~ puts "boxes to destroy count: #{boxes_to_destroy.length}"~ - Inside source: true *** True Line Result puts "boxes to destroy count: #{boxes_to_destroy.length}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ boxes_to_destroy.each { |b| puts "box #{b} was elapsed? on #{args.state.tick_count}." }~ - Inside source: true *** True Line Result boxes_to_destroy.each { |b| puts "box #{b} was elapsed? on #{args.state.tick_count}." } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.box_queue -= boxes_to_destroy~ - Inside source: true *** True Line Result args.state.box_queue -= boxes_to_destroy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Example usage (with optional parameter):~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Example usage (with optional parameter): ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.box_queue ||= []~ - Inside source: true *** True Line Result args.state.box_queue ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.box_queue.empty?~ - Inside source: true *** True Line Result if args.state.box_queue.empty? ** Processing line: ~ args.state.box_queue << { name: :red,~ - Inside source: true *** True Line Result args.state.box_queue << { name: :red, ** Processing line: ~ create_at: args.state.tick_count + 120,~ - Inside source: true *** True Line Result create_at: args.state.tick_count + 120, ** Processing line: ~ lifespan: 60 }~ - Inside source: true *** True Line Result lifespan: 60 } ** Processing line: ~ args.state.box_queue << { name: :green,~ - Inside source: true *** True Line Result args.state.box_queue << { name: :green, ** Processing line: ~ create_at: args.state.tick_count + 120,~ - Inside source: true *** True Line Result create_at: args.state.tick_count + 120, ** Processing line: ~ lifespan: 60 }~ - Inside source: true *** True Line Result lifespan: 60 } ** Processing line: ~ args.state.box_queue << { name: :blue,~ - Inside source: true *** True Line Result args.state.box_queue << { name: :blue, ** Processing line: ~ create_at: args.state.tick_count + 120,~ - Inside source: true *** True Line Result create_at: args.state.tick_count + 120, ** Processing line: ~ lifespan: 120 }~ - Inside source: true *** True Line Result lifespan: 120 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # lifespan is passed in as a parameter to ~elapsed?~~ - Inside source: true *** True Line Result # lifespan is passed in as a parameter to ~elapsed?~ ** Processing line: ~ boxes_to_destroy = args.state~ - Inside source: true *** True Line Result boxes_to_destroy = args.state ** Processing line: ~ .box_queue~ - Inside source: true *** True Line Result .box_queue ** Processing line: ~ .find_all { |b| b[:create_at].elapsed? b[:lifespan] }~ - Inside source: true *** True Line Result .find_all { |b| b[:create_at].elapsed? b[:lifespan] } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !boxes_to_destroy.empty?~ - Inside source: true *** True Line Result if !boxes_to_destroy.empty? ** Processing line: ~ puts "boxes to destroy count: #{boxes_to_destroy.length}"~ - Inside source: true *** True Line Result puts "boxes to destroy count: #{boxes_to_destroy.length}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ boxes_to_destroy.each { |b| puts "box #{b} was elapsed? on #{args.state.tick_count}." }~ - Inside source: true *** True Line Result boxes_to_destroy.each { |b| puts "box #{b} was elapsed? on #{args.state.tick_count}." } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.box_queue -= boxes_to_destroy~ - Inside source: true *** True Line Result args.state.box_queue -= boxes_to_destroy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Numeric#created?~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Numeric#created?~ ** Processing line: ~Returns true if ~Numeric#elapsed_time == 0~. Essentially communicating that~ ** Processing line: ~number is equal to the current frame.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Returns true if ~Numeric#elapsed_time == 0~. Essentially communicating that number is equal to the current frame. ** Processing line: ~Example usage:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Example usage: ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.box_queue ||= []~ - Inside source: true *** True Line Result args.state.box_queue ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.box_queue.empty?~ - Inside source: true *** True Line Result if args.state.box_queue.empty? ** Processing line: ~ args.state.box_queue << { name: :red,~ - Inside source: true *** True Line Result args.state.box_queue << { name: :red, ** Processing line: ~ create_at: args.state.tick_count + 60 }~ - Inside source: true *** True Line Result create_at: args.state.tick_count + 60 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ boxes_to_spawn_this_frame = args.state~ - Inside source: true *** True Line Result boxes_to_spawn_this_frame = args.state ** Processing line: ~ .box_queue~ - Inside source: true *** True Line Result .box_queue ** Processing line: ~ .find_all { |b| b[:create_at].new? }~ - Inside source: true *** True Line Result .find_all { |b| b[:create_at].new? } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ boxes_to_spawn_this_frame.each { |b| puts "box #{b} was new? on #{args.state.tick_count}." }~ - Inside source: true *** True Line Result boxes_to_spawn_this_frame.each { |b| puts "box #{b} was new? on #{args.state.tick_count}." } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.box_queue -= boxes_to_spawn_this_frame~ - Inside source: true *** True Line Result args.state.box_queue -= boxes_to_spawn_this_frame ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Kernel~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Kernel~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Kernel in the DragonRuby Runtime has patches for how standard out is handled and also~ ** Processing line: ~contains a unit of time in games called a tick.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Kernel in the DragonRuby Runtime has patches for how standard out is handled and also contains a unit of time in games called a tick. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Kernel::tick_count~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Kernel::tick_count~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Returns the current tick of the game. This value is reset if you call $gtk.reset.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Returns the current tick of the game. This value is reset if you call $gtk.reset. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Kernel::global_tick_count~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Kernel::global_tick_count~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Returns the current tick of the application from the point it was started. This value is never reset.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Returns the current tick of the application from the point it was started. This value is never reset. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~Geometry~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~Geometry~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~The Geometry module contains methods for calculations that are frequently used in game development.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The Geometry module contains methods for calculations that are frequently used in game development. ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* DOCS: ~GTK::Geometry#scale_rect~~ - Header detected. *** True Line Result *** True Line Result * DOCS: ~GTK::Geometry#scale_rect~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~Given an array with 4 elements representing a rect [x, y, w, h], this function returns a scaled rect. It accepts three arguments:~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result Given an array with 4 elements representing a rect [x, y, w, h], this function returns a scaled rect. It accepts three arguments: ** Processing line: ~~ratio~: the ratio by which to scale the rect. A ratio of 2 will double the dimensions of the rect while a ratio of 0.5 will halve its dimensions.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ~ratio~: the ratio by which to scale the rect. A ratio of 2 will double the dimensions of the rect while a ratio of 0.5 will halve its dimensions. ** Processing line: ~~anchor_x~ and ~anchor_y~ specify the point within the rect from which to resize it. Setting both to 0 will affect the width and height of the rect, leaving x and y unchanged. Setting both to 0.5 will scale all sides of the rect proportionally from the center.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result ~anchor_x~ and ~anchor_y~ specify the point within the rect from which to resize it. Setting both to 0 will affect the width and height of the rect, leaving x and y unchanged. Setting both to 0.5 will scale all sides of the rect proportionally from the center. ** Processing line: ~The ~scale_rect~ method can be applied directly to a sprite or other primitives. See CHEATSHEET: How to Scale a Sprite.~ ** Processing line: ~~ - End of paragraph detected. *** True Line Result The ~scale_rect~ method can be applied directly to a sprite or other primitives. See CHEATSHEET: How to Scale a Sprite. ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # x, y, w, h~ - Inside source: true *** True Line Result # x, y, w, h ** Processing line: ~ my_rect = [100, 100, 200, 200]~ - Inside source: true *** True Line Result my_rect = [100, 100, 200, 200] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # halve the dimensions of the rect:~ - Inside source: true *** True Line Result # halve the dimensions of the rect: ** Processing line: ~ # ratio, anchor_x, anchor_y~ - Inside source: true *** True Line Result # ratio, anchor_x, anchor_y ** Processing line: ~ new_rect = my_rect.scale_rect(0.5, 0.5, 0.5)~ - Inside source: true *** True Line Result new_rect = my_rect.scale_rect(0.5, 0.5, 0.5) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts new_rect # => [150.0, 150.0, 100.0, 100.0]~ - Inside source: true *** True Line Result puts new_rect # => [150.0, 150.0, 100.0, 100.0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~* Source Code~ - Header detected. *** True Line Result *** True Line Result * Source Code ** Processing line: ~Follows is a source code listing for all files that have been open sourced. This code can be found in the ~./samples~ directory.~ ** Processing line: ~** Samples~ - Header detected. *** True Line Result Follows is a source code listing for all files that have been open sourced. This code can be found in the ~./samples~ directory. *** True Line Result ** Samples ** Processing line: ~*** Learn Ruby Optional - Beginner Ruby Primer - automation.rb~ - Header detected. *** True Line Result *** True Line Result *** Learn Ruby Optional - Beginner Ruby Primer - automation.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_beginner_ruby_primer/app/automation.rb~ - Inside source: true *** True Line Result # ./samples/00_learn_ruby_optional/00_beginner_ruby_primer/app/automation.rb ** Processing line: ~ # ==========================================================================~ - Inside source: true *** True Line Result # ========================================================================== ** Processing line: ~ # _ _ ________ __ _ _____ _____ _______ ______ _ _ _ _ _ _~ - Inside source: true *** True Line Result # _ _ ________ __ _ _____ _____ _______ ______ _ _ _ _ _ _ ** Processing line: ~ # | | | | ____\ \ / / | | |_ _|/ ____|__ __| ____| \ | | | | | |~ - Inside source: true *** True Line Result # | | | | ____\ \ / / | | |_ _|/ ____|__ __| ____| \ | | | | | | ** Processing line: ~ # | |__| | |__ \ \_/ / | | | | | (___ | | | |__ | \| | | | | |~ - Inside source: true *** True Line Result # | |__| | |__ \ \_/ / | | | | | (___ | | | |__ | \| | | | | | ** Processing line: ~ # | __ | __| \ / | | | | \___ \ | | | __| | . ` | | | | |~ - Inside source: true *** True Line Result # | __ | __| \ / | | | | \___ \ | | | __| | . ` | | | | | ** Processing line: ~ # | | | | |____ | | | |____ _| |_ ____) | | | | |____| |\ |_|_|_|_|~ - Inside source: true *** True Line Result # | | | | |____ | | | |____ _| |_ ____) | | | | |____| |\ |_|_|_|_| ** Processing line: ~ # |_| |_|______| |_| |______|_____|_____/ |_| |______|_| \_(_|_|_|_)~ - Inside source: true *** True Line Result # |_| |_|______| |_| |______|_____|_____/ |_| |______|_| \_(_|_|_|_) ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # \ | /~ - Inside source: true *** True Line Result # \ | / ** Processing line: ~ # \ | /~ - Inside source: true *** True Line Result # \ | / ** Processing line: ~ # +~ - Inside source: true *** True Line Result # + ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # If you are new to the programming language Ruby, then you may find the~ - Inside source: true *** True Line Result # If you are new to the programming language Ruby, then you may find the ** Processing line: ~ # following code a bit overwhelming. Come back to this file when you have~ - Inside source: true *** True Line Result # following code a bit overwhelming. Come back to this file when you have ** Processing line: ~ # a better grasp of Ruby and Game Toolkit.~ - Inside source: true *** True Line Result # a better grasp of Ruby and Game Toolkit. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # What follows is an automations script # that can be run via terminal:~ - Inside source: true *** True Line Result # What follows is an automations script # that can be run via terminal: ** Processing line: ~ # ./samples/00_beginner_ruby_primer $ ../../dragonruby . --eval app/automation.rb~ - Inside source: true *** True Line Result # ./samples/00_beginner_ruby_primer $ ../../dragonruby . --eval app/automation.rb ** Processing line: ~ # ==========================================================================~ - Inside source: true *** True Line Result # ========================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ $gtk.scheduled_callbacks.clear~ - Inside source: true *** True Line Result $gtk.scheduled_callbacks.clear ** Processing line: ~ $gtk.schedule_callback 10 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 10 do ** Processing line: ~ $gtk.console.set_command 'puts "Hello DragonRuby!"'~ - Inside source: true *** True Line Result $gtk.console.set_command 'puts "Hello DragonRuby!"' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 20 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 20 do ** Processing line: ~ $gtk.console.eval_the_set_command~ - Inside source: true *** True Line Result $gtk.console.eval_the_set_command ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 30 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 30 do ** Processing line: ~ $gtk.console.set_command 'outputs.solids << [910, 200, 100, 100, 255, 0, 0]'~ - Inside source: true *** True Line Result $gtk.console.set_command 'outputs.solids << [910, 200, 100, 100, 255, 0, 0]' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 40 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 40 do ** Processing line: ~ $gtk.console.eval_the_set_command~ - Inside source: true *** True Line Result $gtk.console.eval_the_set_command ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 50 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 50 do ** Processing line: ~ $gtk.console.set_command 'outputs.solids << [1010, 200, 100, 100, 0, 0, 255]'~ - Inside source: true *** True Line Result $gtk.console.set_command 'outputs.solids << [1010, 200, 100, 100, 0, 0, 255]' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 60 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 60 do ** Processing line: ~ $gtk.console.eval_the_set_command~ - Inside source: true *** True Line Result $gtk.console.eval_the_set_command ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 70 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 70 do ** Processing line: ~ $gtk.console.set_command 'outputs.sprites << [1110, 200, 100, 100, "sprites/dragon_fly_0.png"]'~ - Inside source: true *** True Line Result $gtk.console.set_command 'outputs.sprites << [1110, 200, 100, 100, "sprites/dragon_fly_0.png"]' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 80 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 80 do ** Processing line: ~ $gtk.console.eval_the_set_command~ - Inside source: true *** True Line Result $gtk.console.eval_the_set_command ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 90 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 90 do ** Processing line: ~ $gtk.console.set_command "outputs.labels << [1210, 200, state.tick_count, 0, 255, 0]"~ - Inside source: true *** True Line Result $gtk.console.set_command "outputs.labels << [1210, 200, state.tick_count, 0, 255, 0]" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 100 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 100 do ** Processing line: ~ $gtk.console.eval_the_set_command~ - Inside source: true *** True Line Result $gtk.console.eval_the_set_command ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 110 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 110 do ** Processing line: ~ $gtk.console.set_command "state.sprite_frame = state.tick_count.idiv(4).mod(6)"~ - Inside source: true *** True Line Result $gtk.console.set_command "state.sprite_frame = state.tick_count.idiv(4).mod(6)" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 120 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 120 do ** Processing line: ~ $gtk.console.eval_the_set_command~ - Inside source: true *** True Line Result $gtk.console.eval_the_set_command ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 130 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 130 do ** Processing line: ~ $gtk.console.set_command "outputs.labels << [1210, 170, state.sprite_frame, 0, 255, 0]"~ - Inside source: true *** True Line Result $gtk.console.set_command "outputs.labels << [1210, 170, state.sprite_frame, 0, 255, 0]" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 140 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 140 do ** Processing line: ~ $gtk.console.eval_the_set_command~ - Inside source: true *** True Line Result $gtk.console.eval_the_set_command ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 150 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 150 do ** Processing line: ~ $gtk.console.set_command "state.sprite_path = \"sprites/dragon_fly_\#{state.sprite_frame}.png\""~ - Inside source: true *** True Line Result $gtk.console.set_command "state.sprite_path = \"sprites/dragon_fly_\#{state.sprite_frame}.png\"" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 160 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 160 do ** Processing line: ~ $gtk.console.eval_the_set_command~ - Inside source: true *** True Line Result $gtk.console.eval_the_set_command ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 170 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 170 do ** Processing line: ~ $gtk.console.set_command "outputs.labels << [910, 330, \"path: \#{state.sprite_path}\", 0, 255, 0]"~ - Inside source: true *** True Line Result $gtk.console.set_command "outputs.labels << [910, 330, \"path: \#{state.sprite_path}\", 0, 255, 0]" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 180 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 180 do ** Processing line: ~ $gtk.console.eval_the_set_command~ - Inside source: true *** True Line Result $gtk.console.eval_the_set_command ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 190 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 190 do ** Processing line: ~ $gtk.console.set_command "outputs.sprites << [910, 330, 370, 370, state.sprite_path]"~ - Inside source: true *** True Line Result $gtk.console.set_command "outputs.sprites << [910, 330, 370, 370, state.sprite_path]" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 200 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 200 do ** Processing line: ~ $gtk.console.eval_the_set_command~ - Inside source: true *** True Line Result $gtk.console.eval_the_set_command ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 300 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 300 do ** Processing line: ~ $gtk.console.set_command ":wq"~ - Inside source: true *** True Line Result $gtk.console.set_command ":wq" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.schedule_callback 400 do~ - Inside source: true *** True Line Result $gtk.schedule_callback 400 do ** Processing line: ~ $gtk.console.eval_the_set_command~ - Inside source: true *** True Line Result $gtk.console.eval_the_set_command ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Learn Ruby Optional - Beginner Ruby Primer - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Learn Ruby Optional - Beginner Ruby Primer - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_beginner_ruby_primer/app/main.rb~ - Inside source: true *** True Line Result # ./samples/00_learn_ruby_optional/00_beginner_ruby_primer/app/main.rb ** Processing line: ~ # ==========================================================================~ - Inside source: true *** True Line Result # ========================================================================== ** Processing line: ~ # _ _ ________ __ _ _____ _____ _______ ______ _ _ _ _ _ _~ - Inside source: true *** True Line Result # _ _ ________ __ _ _____ _____ _______ ______ _ _ _ _ _ _ ** Processing line: ~ # | | | | ____\ \ / / | | |_ _|/ ____|__ __| ____| \ | | | | | |~ - Inside source: true *** True Line Result # | | | | ____\ \ / / | | |_ _|/ ____|__ __| ____| \ | | | | | | ** Processing line: ~ # | |__| | |__ \ \_/ / | | | | | (___ | | | |__ | \| | | | | |~ - Inside source: true *** True Line Result # | |__| | |__ \ \_/ / | | | | | (___ | | | |__ | \| | | | | | ** Processing line: ~ # | __ | __| \ / | | | | \___ \ | | | __| | . ` | | | | |~ - Inside source: true *** True Line Result # | __ | __| \ / | | | | \___ \ | | | __| | . ` | | | | | ** Processing line: ~ # | | | | |____ | | | |____ _| |_ ____) | | | | |____| |\ |_|_|_|_|~ - Inside source: true *** True Line Result # | | | | |____ | | | |____ _| |_ ____) | | | | |____| |\ |_|_|_|_| ** Processing line: ~ # |_| |_|______| |_| |______|_____|_____/ |_| |______|_| \_(_|_|_|_)~ - Inside source: true *** True Line Result # |_| |_|______| |_| |______|_____|_____/ |_| |______|_| \_(_|_|_|_) ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # |~ - Inside source: true *** True Line Result # | ** Processing line: ~ # \ | /~ - Inside source: true *** True Line Result # \ | / ** Processing line: ~ # \ | /~ - Inside source: true *** True Line Result # \ | / ** Processing line: ~ # +~ - Inside source: true *** True Line Result # + ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # If you are new to the programming language Ruby, then you may find the~ - Inside source: true *** True Line Result # If you are new to the programming language Ruby, then you may find the ** Processing line: ~ # following code a bit overwhelming. This sample is only designed to be~ - Inside source: true *** True Line Result # following code a bit overwhelming. This sample is only designed to be ** Processing line: ~ # run interactively (as opposed to being manipulated via source code).~ - Inside source: true *** True Line Result # run interactively (as opposed to being manipulated via source code). ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Start up this sample and follow along by visiting:~ - Inside source: true *** True Line Result # Start up this sample and follow along by visiting: ** Processing line: ~ # https://s3.amazonaws.com/s3.dragonruby.org/dragonruby-gtk-primer.mp4~ - Inside source: true *** True Line Result # https://s3.amazonaws.com/s3.dragonruby.org/dragonruby-gtk-primer.mp4 ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # It is STRONGLY recommended that you work through all the samples before~ - Inside source: true *** True Line Result # It is STRONGLY recommended that you work through all the samples before ** Processing line: ~ # looking at the code in this file.~ - Inside source: true *** True Line Result # looking at the code in this file. ** Processing line: ~ # ==========================================================================~ - Inside source: true *** True Line Result # ========================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class TutorialOutputs~ - Inside source: true *** True Line Result class TutorialOutputs ** Processing line: ~ attr_accessor :solids, :sprites, :labels, :lines, :borders~ - Inside source: true *** True Line Result attr_accessor :solids, :sprites, :labels, :lines, :borders ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @solids = []~ - Inside source: true *** True Line Result @solids = [] ** Processing line: ~ @sprites = []~ - Inside source: true *** True Line Result @sprites = [] ** Processing line: ~ @labels = []~ - Inside source: true *** True Line Result @labels = [] ** Processing line: ~ @lines = []~ - Inside source: true *** True Line Result @lines = [] ** Processing line: ~ @borders = []~ - Inside source: true *** True Line Result @borders = [] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ @solids ||= []~ - Inside source: true *** True Line Result @solids ||= [] ** Processing line: ~ @sprites ||= []~ - Inside source: true *** True Line Result @sprites ||= [] ** Processing line: ~ @labels ||= []~ - Inside source: true *** True Line Result @labels ||= [] ** Processing line: ~ @lines ||= []~ - Inside source: true *** True Line Result @lines ||= [] ** Processing line: ~ @borders ||= []~ - Inside source: true *** True Line Result @borders ||= [] ** Processing line: ~ @solids.each { |p| $gtk.args.outputs.reserved << p.solid }~ - Inside source: true *** True Line Result @solids.each { |p| $gtk.args.outputs.reserved << p.solid } ** Processing line: ~ @sprites.each { |p| $gtk.args.outputs.reserved << p.sprite }~ - Inside source: true *** True Line Result @sprites.each { |p| $gtk.args.outputs.reserved << p.sprite } ** Processing line: ~ @labels.each { |p| $gtk.args.outputs.reserved << p.label }~ - Inside source: true *** True Line Result @labels.each { |p| $gtk.args.outputs.reserved << p.label } ** Processing line: ~ @lines.each { |p| $gtk.args.outputs.reserved << p.line }~ - Inside source: true *** True Line Result @lines.each { |p| $gtk.args.outputs.reserved << p.line } ** Processing line: ~ @borders.each { |p| $gtk.args.outputs.reserved << p.border }~ - Inside source: true *** True Line Result @borders.each { |p| $gtk.args.outputs.reserved << p.border } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def clear~ - Inside source: true *** True Line Result def clear ** Processing line: ~ @solids.clear~ - Inside source: true *** True Line Result @solids.clear ** Processing line: ~ @sprites.clear~ - Inside source: true *** True Line Result @sprites.clear ** Processing line: ~ @labels.clear~ - Inside source: true *** True Line Result @labels.clear ** Processing line: ~ @borders.clear~ - Inside source: true *** True Line Result @borders.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ state.reset_button ||=~ - Inside source: true *** True Line Result state.reset_button ||= ** Processing line: ~ state.new_entity(~ - Inside source: true *** True Line Result state.new_entity( ** Processing line: ~ :button,~ - Inside source: true *** True Line Result :button, ** Processing line: ~ label: [1190, 68, "RESTART", -2, 0, 0, 0, 0].label,~ - Inside source: true *** True Line Result label: [1190, 68, "RESTART", -2, 0, 0, 0, 0].label, ** Processing line: ~ background: [1160, 38, 120, 50, 255, 255, 255].solid~ - Inside source: true *** True Line Result background: [1160, 38, 120, 50, 255, 255, 255].solid ** Processing line: ~ )~ - Inside source: true *** True Line Result ) ** Processing line: ~ $gtk.log_level = :off~ - Inside source: true *** True Line Result $gtk.log_level = :off ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_reset_button~ - Inside source: true *** True Line Result def tick_reset_button ** Processing line: ~ return unless state.hello_dragonruby_confirmed~ - Inside source: true *** True Line Result return unless state.hello_dragonruby_confirmed ** Processing line: ~ $gtk.args.outputs.reserved << state.reset_button.background~ - Inside source: true *** True Line Result $gtk.args.outputs.reserved << state.reset_button.background ** Processing line: ~ $gtk.args.outputs.reserved << state.reset_button.label~ - Inside source: true *** True Line Result $gtk.args.outputs.reserved << state.reset_button.label ** Processing line: ~ if inputs.mouse.click && inputs.mouse.click.point.inside_rect?(state.reset_button.background)~ - Inside source: true *** True Line Result if inputs.mouse.click && inputs.mouse.click.point.inside_rect?(state.reset_button.background) ** Processing line: ~ restart_tutorial~ - Inside source: true *** True Line Result restart_tutorial ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def seperator~ - Inside source: true *** True Line Result def seperator ** Processing line: ~ @seperator = "=" * 80~ - Inside source: true *** True Line Result @seperator = "=" * 80 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_intro~ - Inside source: true *** True Line Result def tick_intro ** Processing line: ~ queue_message "Welcome to the DragonRuby GTK primer! Try typing the~ - Inside source: true *** True Line Result queue_message "Welcome to the DragonRuby GTK primer! Try typing the ** Processing line: ~ code below and press ENTER:~ - Inside source: true *** True Line Result code below and press ENTER: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts \"Hello DragonRuby!\"~ - Inside source: true *** True Line Result puts \"Hello DragonRuby!\" ** Processing line: ~ "~ - Inside source: true *** True Line Result " ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_hello_dragonruby~ - Inside source: true *** True Line Result def tick_hello_dragonruby ** Processing line: ~ return unless console_has? "Hello DragonRuby!"~ - Inside source: true *** True Line Result return unless console_has? "Hello DragonRuby!" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.args.state.hello_dragonruby_confirmed = true~ - Inside source: true *** True Line Result $gtk.args.state.hello_dragonruby_confirmed = true ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ queue_message "Well HELLO to you too!~ - Inside source: true *** True Line Result queue_message "Well HELLO to you too! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ If you ever want to RESTART the tutorial, just click the \"RESTART\"~ - Inside source: true *** True Line Result If you ever want to RESTART the tutorial, just click the \"RESTART\" ** Processing line: ~ button in the bottom right-hand corner.~ - Inside source: true *** True Line Result button in the bottom right-hand corner. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Let's continue shall we? Type the code below and press ENTER:~ - Inside source: true *** True Line Result Let's continue shall we? Type the code below and press ENTER: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.solids << [910, 200, 100, 100, 255, 0, 0]~ - Inside source: true *** True Line Result outputs.solids << [910, 200, 100, 100, 255, 0, 0] ** Processing line: ~ "~ - Inside source: true *** True Line Result " ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_explain_solid~ - Inside source: true *** True Line Result def tick_explain_solid ** Processing line: ~ return unless $tutorial_outputs.solids.any? {|s| s == [910, 200, 100, 100, 255, 0, 0]}~ - Inside source: true *** True Line Result return unless $tutorial_outputs.solids.any? {|s| s == [910, 200, 100, 100, 255, 0, 0]} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ queue_message "Sweet!~ - Inside source: true *** True Line Result queue_message "Sweet! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ The code: outputs.solids << [910, 200, 100, 100, 255, 0, 0]~ - Inside source: true *** True Line Result The code: outputs.solids << [910, 200, 100, 100, 255, 0, 0] ** Processing line: ~ Does the following:~ - Inside source: true *** True Line Result Does the following: ** Processing line: ~ 1. GET the place where SOLIDS go: outputs.solids~ - Inside source: true *** True Line Result 1. GET the place where SOLIDS go: outputs.solids ** Processing line: ~ 2. Request that a new SOLID be ADDED: <<~ - Inside source: true *** True Line Result 2. Request that a new SOLID be ADDED: << ** Processing line: ~ 3. The DEFINITION of a SOLID is the ARRAY:~ - Inside source: true *** True Line Result 3. The DEFINITION of a SOLID is the ARRAY: ** Processing line: ~ [910, 200, 100, 100, 255, 0, 0]~ - Inside source: true *** True Line Result [910, 200, 100, 100, 255, 0, 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ GET ADD X Y WIDTH HEIGHT RED GREEN BLUE~ - Inside source: true *** True Line Result GET ADD X Y WIDTH HEIGHT RED GREEN BLUE ** Processing line: ~ | | | | | | | | |~ - Inside source: true *** True Line Result | | | | | | | | | ** Processing line: ~ | | | | | | | | |~ - Inside source: true *** True Line Result | | | | | | | | | ** Processing line: ~ outputs.solids << [910, 200, 100, 100, 255, 0, 0]~ - Inside source: true *** True Line Result outputs.solids << [910, 200, 100, 100, 255, 0, 0] ** Processing line: ~ |_________________________________________|~ - Inside source: true *** True Line Result |_________________________________________| ** Processing line: ~ |~ - Inside source: true *** True Line Result | ** Processing line: ~ |~ - Inside source: true *** True Line Result | ** Processing line: ~ ARRAY~ - Inside source: true *** True Line Result ARRAY ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Now let's create a blue SOLID. Type:~ - Inside source: true *** True Line Result Now let's create a blue SOLID. Type: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.solids << [1010, 200, 100, 100, 0, 0, 255]~ - Inside source: true *** True Line Result outputs.solids << [1010, 200, 100, 100, 0, 0, 255] ** Processing line: ~ "~ - Inside source: true *** True Line Result " ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.explain_solid_confirmed = true~ - Inside source: true *** True Line Result state.explain_solid_confirmed = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_explain_solid_blue~ - Inside source: true *** True Line Result def tick_explain_solid_blue ** Processing line: ~ return unless state.explain_solid_confirmed~ - Inside source: true *** True Line Result return unless state.explain_solid_confirmed ** Processing line: ~ return unless $tutorial_outputs.solids.any? {|s| s == [1010, 200, 100, 100, 0, 0, 255]}~ - Inside source: true *** True Line Result return unless $tutorial_outputs.solids.any? {|s| s == [1010, 200, 100, 100, 0, 0, 255]} ** Processing line: ~ state.explain_solid_blue_confirmed = true~ - Inside source: true *** True Line Result state.explain_solid_blue_confirmed = true ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ queue_message "And there is our blue SOLID!~ - Inside source: true *** True Line Result queue_message "And there is our blue SOLID! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ The ARRAY is the MOST important thing in DragonRuby GTK.~ - Inside source: true *** True Line Result The ARRAY is the MOST important thing in DragonRuby GTK. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Let's create a SPRITE using an ARRAY:~ - Inside source: true *** True Line Result Let's create a SPRITE using an ARRAY: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.sprites << [1110, 200, 100, 100, 'sprites/dragon_fly_0.png']~ - Inside source: true *** True Line Result outputs.sprites << [1110, 200, 100, 100, 'sprites/dragon_fly_0.png'] ** Processing line: ~ "~ - Inside source: true *** True Line Result " ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_explain_tick_count~ - Inside source: true *** True Line Result def tick_explain_tick_count ** Processing line: ~ return unless $tutorial_outputs.sprites.any? {|s| s == [1110, 200, 100, 100, 'sprites/dragon_fly_0.png']}~ - Inside source: true *** True Line Result return unless $tutorial_outputs.sprites.any? {|s| s == [1110, 200, 100, 100, 'sprites/dragon_fly_0.png']} ** Processing line: ~ return if $tutorial_outputs.labels.any? {|l| l == [1210, 200, state.tick_count, 255, 255, 255]}~ - Inside source: true *** True Line Result return if $tutorial_outputs.labels.any? {|l| l == [1210, 200, state.tick_count, 255, 255, 255]} ** Processing line: ~ state.explain_tick_count_confirmed = true~ - Inside source: true *** True Line Result state.explain_tick_count_confirmed = true ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ queue_message "Look at the cute little dragon!~ - Inside source: true *** True Line Result queue_message "Look at the cute little dragon! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ We can create a LABEL with ARRAYS too. Let's create a LABEL showing~ - Inside source: true *** True Line Result We can create a LABEL with ARRAYS too. Let's create a LABEL showing ** Processing line: ~ THE PASSAGE OF TIME, which is called TICK_COUNT.~ - Inside source: true *** True Line Result THE PASSAGE OF TIME, which is called TICK_COUNT. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [1210, 200, state.tick_count, 0, 255, 0]~ - Inside source: true *** True Line Result outputs.labels << [1210, 200, state.tick_count, 0, 255, 0] ** Processing line: ~ "~ - Inside source: true *** True Line Result " ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_explain_mod~ - Inside source: true *** True Line Result def tick_explain_mod ** Processing line: ~ return unless $tutorial_outputs.labels.any? {|l| l == [1210, 200, state.tick_count, 0, 255, 0]}~ - Inside source: true *** True Line Result return unless $tutorial_outputs.labels.any? {|l| l == [1210, 200, state.tick_count, 0, 255, 0]} ** Processing line: ~ state.explain_mod_confirmed = true~ - Inside source: true *** True Line Result state.explain_mod_confirmed = true ** Processing line: ~ queue_message "~ - Inside source: true *** True Line Result queue_message " ** Processing line: ~ The code: outputs.labels << [1210, 200, state.tick_count, 0, 255, 0]~ - Inside source: true *** True Line Result The code: outputs.labels << [1210, 200, state.tick_count, 0, 255, 0] ** Processing line: ~ Does the following:~ - Inside source: true *** True Line Result Does the following: ** Processing line: ~ 1. GET the place where labels go: outputs.labels~ - Inside source: true *** True Line Result 1. GET the place where labels go: outputs.labels ** Processing line: ~ 2. Request that a new label be ADDED: <<~ - Inside source: true *** True Line Result 2. Request that a new label be ADDED: << ** Processing line: ~ 3. The DEFINITION of a LABEL is the ARRAY:~ - Inside source: true *** True Line Result 3. The DEFINITION of a LABEL is the ARRAY: ** Processing line: ~ [1210, 200, state.tick_count, 0, 255, 0]~ - Inside source: true *** True Line Result [1210, 200, state.tick_count, 0, 255, 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ GET ADD X Y TEXT RED GREEN BLUE~ - Inside source: true *** True Line Result GET ADD X Y TEXT RED GREEN BLUE ** Processing line: ~ | | | | | | | |~ - Inside source: true *** True Line Result | | | | | | | | ** Processing line: ~ | | | | | | | |~ - Inside source: true *** True Line Result | | | | | | | | ** Processing line: ~ outputs.labels << [1210, 200, state.tick_count, 0, 255, 0]~ - Inside source: true *** True Line Result outputs.labels << [1210, 200, state.tick_count, 0, 255, 0] ** Processing line: ~ |______________________________________________|~ - Inside source: true *** True Line Result |______________________________________________| ** Processing line: ~ |~ - Inside source: true *** True Line Result | ** Processing line: ~ |~ - Inside source: true *** True Line Result | ** Processing line: ~ ARRAY~ - Inside source: true *** True Line Result ARRAY ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Now let's do some MATH, save the result to STATE, and create a LABEL:~ - Inside source: true *** True Line Result Now let's do some MATH, save the result to STATE, and create a LABEL: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.sprite_frame = state.tick_count.idiv(4).mod(6)~ - Inside source: true *** True Line Result state.sprite_frame = state.tick_count.idiv(4).mod(6) ** Processing line: ~ outputs.labels << [1210, 170, state.sprite_frame, 0, 255, 0]~ - Inside source: true *** True Line Result outputs.labels << [1210, 170, state.sprite_frame, 0, 255, 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Type the lines above (pressing ENTER after each line).~ - Inside source: true *** True Line Result Type the lines above (pressing ENTER after each line). ** Processing line: ~ "~ - Inside source: true *** True Line Result " ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_explain_string_interpolation~ - Inside source: true *** True Line Result def tick_explain_string_interpolation ** Processing line: ~ return unless state.explain_mod_confirmed~ - Inside source: true *** True Line Result return unless state.explain_mod_confirmed ** Processing line: ~ return unless state.sprite_frame == state.tick_count.idiv(4).mod(6)~ - Inside source: true *** True Line Result return unless state.sprite_frame == state.tick_count.idiv(4).mod(6) ** Processing line: ~ return unless $tutorial_outputs.labels.any? {|l| l == [1210, 170, state.sprite_frame, 0, 255, 0]}~ - Inside source: true *** True Line Result return unless $tutorial_outputs.labels.any? {|l| l == [1210, 170, state.sprite_frame, 0, 255, 0]} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ queue_message "Here is what the mathematical computation you just typed does:~ - Inside source: true *** True Line Result queue_message "Here is what the mathematical computation you just typed does: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ 1. Create an item of STATE named SPRITE_FRAME: state.sprite_frame =~ - Inside source: true *** True Line Result 1. Create an item of STATE named SPRITE_FRAME: state.sprite_frame = ** Processing line: ~ 2. Set this SPRITE_FRAME to the PASSAGE OF TIME (tick_count),~ - Inside source: true *** True Line Result 2. Set this SPRITE_FRAME to the PASSAGE OF TIME (tick_count), ** Processing line: ~ DIVIDED EVENLY (idiv) into 4,~ - Inside source: true *** True Line Result DIVIDED EVENLY (idiv) into 4, ** Processing line: ~ and then compute the REMAINDER (mod) of 6.~ - Inside source: true *** True Line Result and then compute the REMAINDER (mod) of 6. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ STATE SPRITE_FRAME PASSAGE OF HOW LONG HOW MANY~ - Inside source: true *** True Line Result STATE SPRITE_FRAME PASSAGE OF HOW LONG HOW MANY ** Processing line: ~ | | TIME TO SHOW IMAGES~ - Inside source: true *** True Line Result | | TIME TO SHOW IMAGES ** Processing line: ~ | | | AN IMAGE TO FLIP THROUGH~ - Inside source: true *** True Line Result | | | AN IMAGE TO FLIP THROUGH ** Processing line: ~ | | | | |~ - Inside source: true *** True Line Result | | | | | ** Processing line: ~ state.sprite_frame = state.tick_count.idiv(4).mod(6)~ - Inside source: true *** True Line Result state.sprite_frame = state.tick_count.idiv(4).mod(6) ** Processing line: ~ | |~ - Inside source: true *** True Line Result | | ** Processing line: ~ | +- REMAINDER OF DIVIDE~ - Inside source: true *** True Line Result | +- REMAINDER OF DIVIDE ** Processing line: ~ DIVIDE EVENLY~ - Inside source: true *** True Line Result DIVIDE EVENLY ** Processing line: ~ (NO DECIMALS)~ - Inside source: true *** True Line Result (NO DECIMALS) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ With the information above, we can animate a SPRITE~ - Inside source: true *** True Line Result With the information above, we can animate a SPRITE ** Processing line: ~ using STRING INTERPOLATION: \#{}~ - Inside source: true *** True Line Result using STRING INTERPOLATION: \#{} ** Processing line: ~ which creates a unique SPRITE_PATH:~ - Inside source: true *** True Line Result which creates a unique SPRITE_PATH: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.sprite_path = \"sprites/dragon_fly_\#{state.sprite_frame}.png\"~ - Inside source: true *** True Line Result state.sprite_path = \"sprites/dragon_fly_\#{state.sprite_frame}.png\" ** Processing line: ~ outputs.labels << [910, 330, \"path: \#{state.sprite_path}\", 0, 255, 0]~ - Inside source: true *** True Line Result outputs.labels << [910, 330, \"path: \#{state.sprite_path}\", 0, 255, 0] ** Processing line: ~ outputs.sprites << [910, 330, 370, 370, state.sprite_path]~ - Inside source: true *** True Line Result outputs.sprites << [910, 330, 370, 370, state.sprite_path] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Type the lines above (pressing ENTER after each line).~ - Inside source: true *** True Line Result Type the lines above (pressing ENTER after each line). ** Processing line: ~ "~ - Inside source: true *** True Line Result " ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_reprint_on_error~ - Inside source: true *** True Line Result def tick_reprint_on_error ** Processing line: ~ return unless console.last_command_errored~ - Inside source: true *** True Line Result return unless console.last_command_errored ** Processing line: ~ puts $gtk.state.messages.last~ - Inside source: true *** True Line Result puts $gtk.state.messages.last ** Processing line: ~ puts "\nWhoops! Try again."~ - Inside source: true *** True Line Result puts "\nWhoops! Try again." ** Processing line: ~ console.last_command_errored = false~ - Inside source: true *** True Line Result console.last_command_errored = false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_evals~ - Inside source: true *** True Line Result def tick_evals ** Processing line: ~ state.evals ||= []~ - Inside source: true *** True Line Result state.evals ||= [] ** Processing line: ~ if console.last_command && (console.last_command.start_with?("outputs.") || console.last_command.start_with?("state."))~ - Inside source: true *** True Line Result if console.last_command && (console.last_command.start_with?("outputs.") || console.last_command.start_with?("state.")) ** Processing line: ~ state.evals << console.last_command~ - Inside source: true *** True Line Result state.evals << console.last_command ** Processing line: ~ console.last_command = nil~ - Inside source: true *** True Line Result console.last_command = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.evals.each do |l|~ - Inside source: true *** True Line Result state.evals.each do |l| ** Processing line: ~ Kernel.eval l~ - Inside source: true *** True Line Result Kernel.eval l ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ state.evals = state.evals[0..-2]~ - Inside source: true *** True Line Result state.evals = state.evals[0..-2] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $tutorial_outputs ||= TutorialOutputs.new~ - Inside source: true *** True Line Result $tutorial_outputs ||= TutorialOutputs.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $gtk.log_level = :off~ - Inside source: true *** True Line Result $gtk.log_level = :off ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ console.show~ - Inside source: true *** True Line Result console.show ** Processing line: ~ $tutorial_outputs.clear~ - Inside source: true *** True Line Result $tutorial_outputs.clear ** Processing line: ~ $tutorial_outputs.solids << [900, 37, 480, 700, 0, 0, 0, 255]~ - Inside source: true *** True Line Result $tutorial_outputs.solids << [900, 37, 480, 700, 0, 0, 0, 255] ** Processing line: ~ $tutorial_outputs.borders << [900, 37, 380, 683, 255, 255, 255]~ - Inside source: true *** True Line Result $tutorial_outputs.borders << [900, 37, 380, 683, 255, 255, 255] ** Processing line: ~ tick_evals~ - Inside source: true *** True Line Result tick_evals ** Processing line: ~ $tutorial_outputs.tick~ - Inside source: true *** True Line Result $tutorial_outputs.tick ** Processing line: ~ tick_intro~ - Inside source: true *** True Line Result tick_intro ** Processing line: ~ tick_hello_dragonruby~ - Inside source: true *** True Line Result tick_hello_dragonruby ** Processing line: ~ tick_reset_button~ - Inside source: true *** True Line Result tick_reset_button ** Processing line: ~ tick_explain_solid~ - Inside source: true *** True Line Result tick_explain_solid ** Processing line: ~ tick_explain_solid_blue~ - Inside source: true *** True Line Result tick_explain_solid_blue ** Processing line: ~ tick_reprint_on_error~ - Inside source: true *** True Line Result tick_reprint_on_error ** Processing line: ~ tick_explain_tick_count~ - Inside source: true *** True Line Result tick_explain_tick_count ** Processing line: ~ tick_explain_mod~ - Inside source: true *** True Line Result tick_explain_mod ** Processing line: ~ tick_explain_string_interpolation~ - Inside source: true *** True Line Result tick_explain_string_interpolation ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def console~ - Inside source: true *** True Line Result def console ** Processing line: ~ $gtk.console~ - Inside source: true *** True Line Result $gtk.console ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def queue_message message~ - Inside source: true *** True Line Result def queue_message message ** Processing line: ~ $gtk.args.state.messages ||= []~ - Inside source: true *** True Line Result $gtk.args.state.messages ||= [] ** Processing line: ~ return if $gtk.args.state.messages.include? message~ - Inside source: true *** True Line Result return if $gtk.args.state.messages.include? message ** Processing line: ~ $gtk.args.state.messages << message~ - Inside source: true *** True Line Result $gtk.args.state.messages << message ** Processing line: ~ last_three = [$gtk.console.log[-3], $gtk.console.log[-2], $gtk.console.log[-1]].reject_nil~ - Inside source: true *** True Line Result last_three = [$gtk.console.log[-3], $gtk.console.log[-2], $gtk.console.log[-1]].reject_nil ** Processing line: ~ $gtk.console.log.clear~ - Inside source: true *** True Line Result $gtk.console.log.clear ** Processing line: ~ puts seperator~ - Inside source: true *** True Line Result puts seperator ** Processing line: ~ $gtk.console.log += last_three~ - Inside source: true *** True Line Result $gtk.console.log += last_three ** Processing line: ~ puts seperator~ - Inside source: true *** True Line Result puts seperator ** Processing line: ~ puts message~ - Inside source: true *** True Line Result puts message ** Processing line: ~ puts seperator~ - Inside source: true *** True Line Result puts seperator ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def console_has? message~ - Inside source: true *** True Line Result def console_has? message ** Processing line: ~ console.log.map(&:upcase).include? "#{message.upcase}\n"~ - Inside source: true *** True Line Result console.log.map(&:upcase).include? "#{message.upcase}\n" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def restart_tutorial~ - Inside source: true *** True Line Result def restart_tutorial ** Processing line: ~ $tutorial_outputs.clear~ - Inside source: true *** True Line Result $tutorial_outputs.clear ** Processing line: ~ $gtk.console.log.clear~ - Inside source: true *** True Line Result $gtk.console.log.clear ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ puts "Starting the tutorial over!"~ - Inside source: true *** True Line Result puts "Starting the tutorial over!" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def state~ - Inside source: true *** True Line Result def state ** Processing line: ~ $gtk.args.state~ - Inside source: true *** True Line Result $gtk.args.state ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inputs~ - Inside source: true *** True Line Result def inputs ** Processing line: ~ $gtk.args.inputs~ - Inside source: true *** True Line Result $gtk.args.inputs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def outputs~ - Inside source: true *** True Line Result def outputs ** Processing line: ~ $tutorial_outputs~ - Inside source: true *** True Line Result $tutorial_outputs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - printing.txt~ - Header detected. *** True Line Result *** True Line Result *** Learn Ruby Optional - Intermediate Ruby Primer - printing.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/01_printing.txt~ - Inside source: true *** True Line Result # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/01_printing.txt ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Commenting Code~ - Inside source: true *** True Line Result # Commenting Code ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Prefixing text with a pound sign (#) is how you comment code in Ruby. Example:~ - Inside source: true *** True Line Result # Prefixing text with a pound sign (#) is how you comment code in Ruby. Example: ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # I am commented code. And so are the lines above.~ - Inside source: true *** True Line Result # I am commented code. And so are the lines above. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # I you want more than a quick primer on Ruby, check out https://poignant.guide/. It's~ - Inside source: true *** True Line Result # I you want more than a quick primer on Ruby, check out https://poignant.guide/. It's ** Processing line: ~ # an entertaining read. Otherwise, go to the next txt file.~ - Inside source: true *** True Line Result # an entertaining read. Otherwise, go to the next txt file. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Follow along by visiting:~ - Inside source: true *** True Line Result # Follow along by visiting: ** Processing line: ~ # https://s3.amazonaws.com/s3.dragonruby.org/dragonruby-gtk-intermediate.mp4~ - Inside source: true *** True Line Result # https://s3.amazonaws.com/s3.dragonruby.org/dragonruby-gtk-intermediate.mp4 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Printing to the Console:~ - Inside source: true *** True Line Result # Printing to the Console: ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Every time you save repl.rb file, DragonRuby runs the code within it. Copy this text~ - Inside source: true *** True Line Result # Every time you save repl.rb file, DragonRuby runs the code within it. Copy this text ** Processing line: ~ # to repl.rb and save to see Hello World printed to the console.~ - Inside source: true *** True Line Result # to repl.rb and save to see Hello World printed to the console. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts '* RUBY PRIMER: Printing to the console using the ~puts~ function.'~ - Inside source: true *** True Line Result puts '* RUBY PRIMER: Printing to the console using the ~puts~ function.' ** Processing line: ~ puts '===='~ - Inside source: true *** True Line Result puts '====' ** Processing line: ~ puts '======'~ - Inside source: true *** True Line Result puts '======' ** Processing line: ~ puts '================================'~ - Inside source: true *** True Line Result puts '================================' ** Processing line: ~ puts 'Hello World'~ - Inside source: true *** True Line Result puts 'Hello World' ** Processing line: ~ puts '================================'~ - Inside source: true *** True Line Result puts '================================' ** Processing line: ~ puts '======'~ - Inside source: true *** True Line Result puts '======' ** Processing line: ~ puts '===='~ - Inside source: true *** True Line Result puts '====' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - strings.txt~ - Header detected. *** True Line Result *** True Line Result *** Learn Ruby Optional - Intermediate Ruby Primer - strings.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/02_strings.txt~ - Inside source: true *** True Line Result # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/02_strings.txt ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Strings~ - Inside source: true *** True Line Result # Strings ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Here is how you work with strings in Ruby. Take the text~ - Inside source: true *** True Line Result # Here is how you work with strings in Ruby. Take the text ** Processing line: ~ # in this file and paste it into repl.rb and save:~ - Inside source: true *** True Line Result # in this file and paste it into repl.rb and save: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts '* RUBY PRIMER: strings'~ - Inside source: true *** True Line Result puts '* RUBY PRIMER: strings' ** Processing line: ~ message = "Hello World"~ - Inside source: true *** True Line Result message = "Hello World" ** Processing line: ~ puts "The value of message is: " + message~ - Inside source: true *** True Line Result puts "The value of message is: " + message ** Processing line: ~ puts "Any value can be interpolated within a string using \#{}."~ - Inside source: true *** True Line Result puts "Any value can be interpolated within a string using \#{}." ** Processing line: ~ puts "Interpolated message: #{message}."~ - Inside source: true *** True Line Result puts "Interpolated message: #{message}." ** Processing line: ~ puts 'This #{message} is not interpolated because the string uses single quotes.'~ - Inside source: true *** True Line Result puts 'This #{message} is not interpolated because the string uses single quotes.' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - numbers.txt~ - Header detected. *** True Line Result *** True Line Result *** Learn Ruby Optional - Intermediate Ruby Primer - numbers.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/03_numbers.txt~ - Inside source: true *** True Line Result # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/03_numbers.txt ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Numerics~ - Inside source: true *** True Line Result # Numerics ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Here is how you work with numbers in Ruby. Take the text~ - Inside source: true *** True Line Result # Here is how you work with numbers in Ruby. Take the text ** Processing line: ~ # in this file and paste it into repl.rb and save:~ - Inside source: true *** True Line Result # in this file and paste it into repl.rb and save: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts '* RUBY PRIMER: Fixnum and Floats'~ - Inside source: true *** True Line Result puts '* RUBY PRIMER: Fixnum and Floats' ** Processing line: ~ a = 10~ - Inside source: true *** True Line Result a = 10 ** Processing line: ~ puts "The value of a is: #{a}"~ - Inside source: true *** True Line Result puts "The value of a is: #{a}" ** Processing line: ~ puts "a + 1 is: #{a + 1}"~ - Inside source: true *** True Line Result puts "a + 1 is: #{a + 1}" ** Processing line: ~ puts "a / 3 is: #{a / 3}"~ - Inside source: true *** True Line Result puts "a / 3 is: #{a / 3}" ** Processing line: ~ puts ''~ - Inside source: true *** True Line Result puts '' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ b = 10.12~ - Inside source: true *** True Line Result b = 10.12 ** Processing line: ~ puts "The value of b is: #{b}"~ - Inside source: true *** True Line Result puts "The value of b is: #{b}" ** Processing line: ~ puts "b + 1 is: #{b + 1}"~ - Inside source: true *** True Line Result puts "b + 1 is: #{b + 1}" ** Processing line: ~ puts "b as an integer is: #{b.to_i}"~ - Inside source: true *** True Line Result puts "b as an integer is: #{b.to_i}" ** Processing line: ~ puts ''~ - Inside source: true *** True Line Result puts '' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - booleans.txt~ - Header detected. *** True Line Result *** True Line Result *** Learn Ruby Optional - Intermediate Ruby Primer - booleans.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/04_booleans.txt~ - Inside source: true *** True Line Result # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/04_booleans.txt ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Booleans~ - Inside source: true *** True Line Result # Booleans ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Here is how you work with numbers in Ruby. Take the text~ - Inside source: true *** True Line Result # Here is how you work with numbers in Ruby. Take the text ** Processing line: ~ # in this file and paste it into repl.rb and save:~ - Inside source: true *** True Line Result # in this file and paste it into repl.rb and save: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts '* RUBY PRIMER: TrueClass, FalseClass, NilClass (truthy / falsey values)'~ - Inside source: true *** True Line Result puts '* RUBY PRIMER: TrueClass, FalseClass, NilClass (truthy / falsey values)' ** Processing line: ~ puts "Anything that *isn't* false or nil is true."~ - Inside source: true *** True Line Result puts "Anything that *isn't* false or nil is true." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ c = 30~ - Inside source: true *** True Line Result c = 30 ** Processing line: ~ puts "The value of c is #{c}."~ - Inside source: true *** True Line Result puts "The value of c is #{c}." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if c~ - Inside source: true *** True Line Result if c ** Processing line: ~ puts "This if statement ran because c is truthy."~ - Inside source: true *** True Line Result puts "This if statement ran because c is truthy." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ d = false~ - Inside source: true *** True Line Result d = false ** Processing line: ~ puts "The value if d is #{d}. The type for d is #{d.class}."~ - Inside source: true *** True Line Result puts "The value if d is #{d}. The type for d is #{d.class}." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !d~ - Inside source: true *** True Line Result if !d ** Processing line: ~ puts "This if statement ran because d is falsey, using the not operator (!)."~ - Inside source: true *** True Line Result puts "This if statement ran because d is falsey, using the not operator (!)." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ e = nil~ - Inside source: true *** True Line Result e = nil ** Processing line: ~ puts "Nil is also considered falsey. The value of e is: #{e} (a blank string when printed). Which is of type #{e.class}."~ - Inside source: true *** True Line Result puts "Nil is also considered falsey. The value of e is: #{e} (a blank string when printed). Which is of type #{e.class}." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !e~ - Inside source: true *** True Line Result if !e ** Processing line: ~ puts "This if statement ran because e is nil and the if statement applied the NOT operator. !e yields a type of #{(!e).class}."~ - Inside source: true *** True Line Result puts "This if statement ran because e is nil and the if statement applied the NOT operator. !e yields a type of #{(!e).class}." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - conditionals.txt~ - Header detected. *** True Line Result *** True Line Result *** Learn Ruby Optional - Intermediate Ruby Primer - conditionals.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/05_conditionals.txt~ - Inside source: true *** True Line Result # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/05_conditionals.txt ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Conditionals~ - Inside source: true *** True Line Result # Conditionals ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Here is how you create conditionals in Ruby. Take the text~ - Inside source: true *** True Line Result # Here is how you create conditionals in Ruby. Take the text ** Processing line: ~ # in this file and paste it into repl.rb and save:~ - Inside source: true *** True Line Result # in this file and paste it into repl.rb and save: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "* RUBY PRIMER: Conditionals"~ - Inside source: true *** True Line Result puts "* RUBY PRIMER: Conditionals" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # if~ - Inside source: true *** True Line Result # if ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: if statement"~ - Inside source: true *** True Line Result puts "** INFO: if statement" ** Processing line: ~ i_am_one = 1~ - Inside source: true *** True Line Result i_am_one = 1 ** Processing line: ~ if i_am_one~ - Inside source: true *** True Line Result if i_am_one ** Processing line: ~ puts "This was printed because i_am_one is truthy."~ - Inside source: true *** True Line Result puts "This was printed because i_am_one is truthy." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # if/else~ - Inside source: true *** True Line Result # if/else ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: if/else statement"~ - Inside source: true *** True Line Result puts "** INFO: if/else statement" ** Processing line: ~ i_am_false = false~ - Inside source: true *** True Line Result i_am_false = false ** Processing line: ~ if i_am_false~ - Inside source: true *** True Line Result if i_am_false ** Processing line: ~ puts "This will NOT get printed because i_am_false is false."~ - Inside source: true *** True Line Result puts "This will NOT get printed because i_am_false is false." ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ puts "This was printed because i_am_false is false."~ - Inside source: true *** True Line Result puts "This was printed because i_am_false is false." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # if/elsif/else~ - Inside source: true *** True Line Result # if/elsif/else ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: if/elsif/else statement"~ - Inside source: true *** True Line Result puts "** INFO: if/elsif/else statement" ** Processing line: ~ i_am_false = false~ - Inside source: true *** True Line Result i_am_false = false ** Processing line: ~ i_am_true = true~ - Inside source: true *** True Line Result i_am_true = true ** Processing line: ~ if i_am_false~ - Inside source: true *** True Line Result if i_am_false ** Processing line: ~ puts "This will NOT get printed because i_am_false is false."~ - Inside source: true *** True Line Result puts "This will NOT get printed because i_am_false is false." ** Processing line: ~ elsif i_am_true~ - Inside source: true *** True Line Result elsif i_am_true ** Processing line: ~ puts "This was printed because i_am_true is true."~ - Inside source: true *** True Line Result puts "This was printed because i_am_true is true." ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ puts "This will NOT get printed i_am_true was true."~ - Inside source: true *** True Line Result puts "This will NOT get printed i_am_true was true." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # case~ - Inside source: true *** True Line Result # case ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO case statement"~ - Inside source: true *** True Line Result puts "** INFO case statement" ** Processing line: ~ i_am_one = 1 # change this value to see different results~ - Inside source: true *** True Line Result i_am_one = 1 # change this value to see different results ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ case i_am_one~ - Inside source: true *** True Line Result case i_am_one ** Processing line: ~ when 10~ - Inside source: true *** True Line Result when 10 ** Processing line: ~ puts "the value of i_am_one is 10"~ - Inside source: true *** True Line Result puts "the value of i_am_one is 10" ** Processing line: ~ when 9~ - Inside source: true *** True Line Result when 9 ** Processing line: ~ puts "the value of i_am_one is 9"~ - Inside source: true *** True Line Result puts "the value of i_am_one is 9" ** Processing line: ~ when 5~ - Inside source: true *** True Line Result when 5 ** Processing line: ~ puts "the value of i_am_one is 5"~ - Inside source: true *** True Line Result puts "the value of i_am_one is 5" ** Processing line: ~ when 1~ - Inside source: true *** True Line Result when 1 ** Processing line: ~ puts "the value of i_am_one is 1"~ - Inside source: true *** True Line Result puts "the value of i_am_one is 1" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ puts "Value wasn't cased."~ - Inside source: true *** True Line Result puts "Value wasn't cased." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # comparison operators~ - Inside source: true *** True Line Result # comparison operators ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: Different types of comparisons"~ - Inside source: true *** True Line Result puts "** INFO: Different types of comparisons" ** Processing line: ~ if 4 == 4~ - Inside source: true *** True Line Result if 4 == 4 ** Processing line: ~ puts "4 equals 4 (==)"~ - Inside source: true *** True Line Result puts "4 equals 4 (==)" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if 4 != 3~ - Inside source: true *** True Line Result if 4 != 3 ** Processing line: ~ puts "4 does not equal 3 (!=)"~ - Inside source: true *** True Line Result puts "4 does not equal 3 (!=)" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if 3 < 4~ - Inside source: true *** True Line Result if 3 < 4 ** Processing line: ~ puts "3 is less than 4 (<)"~ - Inside source: true *** True Line Result puts "3 is less than 4 (<)" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if 4 > 3~ - Inside source: true *** True Line Result if 4 > 3 ** Processing line: ~ puts "4 is greater than 3 (>)"~ - Inside source: true *** True Line Result puts "4 is greater than 3 (>)" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # and/or conditionals~ - Inside source: true *** True Line Result # and/or conditionals ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: AND, OR operator (&&, ||)"~ - Inside source: true *** True Line Result puts "** INFO: AND, OR operator (&&, ||)" ** Processing line: ~ if (4 > 3) || (3 < 4) || false~ - Inside source: true *** True Line Result if (4 > 3) || (3 < 4) || false ** Processing line: ~ puts "print this if 4 is greater than 3 OR 3 is less than 4 OR false is true (||)"~ - Inside source: true *** True Line Result puts "print this if 4 is greater than 3 OR 3 is less than 4 OR false is true (||)" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (4 > 3) && (3 < 4)~ - Inside source: true *** True Line Result if (4 > 3) && (3 < 4) ** Processing line: ~ puts "print this if 4 is greater than 3 AND 3 is less than 4 (&&)"~ - Inside source: true *** True Line Result puts "print this if 4 is greater than 3 AND 3 is less than 4 (&&)" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - looping.txt~ - Header detected. *** True Line Result *** True Line Result *** Learn Ruby Optional - Intermediate Ruby Primer - looping.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/06_looping.txt~ - Inside source: true *** True Line Result # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/06_looping.txt ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Looping~ - Inside source: true *** True Line Result # Looping ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Looping looks a whole lot different than other languages.~ - Inside source: true *** True Line Result # Looping looks a whole lot different than other languages. ** Processing line: ~ # But it's pretty awesome when you get used to it.~ - Inside source: true *** True Line Result # But it's pretty awesome when you get used to it. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "* RUBY PRIMER: Loops"~ - Inside source: true *** True Line Result puts "* RUBY PRIMER: Loops" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # times~ - Inside source: true *** True Line Result # times ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: ~Numeric#times~ (for loop)"~ - Inside source: true *** True Line Result puts "** INFO: ~Numeric#times~ (for loop)" ** Processing line: ~ 3.times do |i|~ - Inside source: true *** True Line Result 3.times do |i| ** Processing line: ~ puts i~ - Inside source: true *** True Line Result puts i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # foreach~ - Inside source: true *** True Line Result # foreach ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: ~Array#each~ (for each loop)"~ - Inside source: true *** True Line Result puts "** INFO: ~Array#each~ (for each loop)" ** Processing line: ~ array = ["a", "b", "c", "d"]~ - Inside source: true *** True Line Result array = ["a", "b", "c", "d"] ** Processing line: ~ array.each do |char|~ - Inside source: true *** True Line Result array.each do |char| ** Processing line: ~ puts char~ - Inside source: true *** True Line Result puts char ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts "** INFO: ~Array#each_with_index~ (for each loop)"~ - Inside source: true *** True Line Result puts "** INFO: ~Array#each_with_index~ (for each loop)" ** Processing line: ~ array = ["a", "b", "c", "d"]~ - Inside source: true *** True Line Result array = ["a", "b", "c", "d"] ** Processing line: ~ array.each do |char, i|~ - Inside source: true *** True Line Result array.each do |char, i| ** Processing line: ~ puts "index #{i}: #{char}"~ - Inside source: true *** True Line Result puts "index #{i}: #{char}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # ranges~ - Inside source: true *** True Line Result # ranges ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: range block exclusive (three dots)"~ - Inside source: true *** True Line Result puts "** INFO: range block exclusive (three dots)" ** Processing line: ~ (0...3).each do |i|~ - Inside source: true *** True Line Result (0...3).each do |i| ** Processing line: ~ puts i~ - Inside source: true *** True Line Result puts i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts "** INFO: range block inclusive (two dots)"~ - Inside source: true *** True Line Result puts "** INFO: range block inclusive (two dots)" ** Processing line: ~ (0..3).each do |i|~ - Inside source: true *** True Line Result (0..3).each do |i| ** Processing line: ~ puts i~ - Inside source: true *** True Line Result puts i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - functions.txt~ - Header detected. *** True Line Result *** True Line Result *** Learn Ruby Optional - Intermediate Ruby Primer - functions.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/07_functions.txt~ - Inside source: true *** True Line Result # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/07_functions.txt ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Functions~ - Inside source: true *** True Line Result # Functions ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The last statement of a function is implictly returned. Parenthesis for functions~ - Inside source: true *** True Line Result # The last statement of a function is implictly returned. Parenthesis for functions ** Processing line: ~ # are optional as long as the statement can be envaluated disambiguously.~ - Inside source: true *** True Line Result # are optional as long as the statement can be envaluated disambiguously. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "* RUBY PRIMER: Functions"~ - Inside source: true *** True Line Result puts "* RUBY PRIMER: Functions" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Functions single parameter~ - Inside source: true *** True Line Result # Functions single parameter ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "* INFO: Function with one parameter"~ - Inside source: true *** True Line Result puts "* INFO: Function with one parameter" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # function definition~ - Inside source: true *** True Line Result # function definition ** Processing line: ~ def add_one_to n~ - Inside source: true *** True Line Result def add_one_to n ** Processing line: ~ n + 1~ - Inside source: true *** True Line Result n + 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Parenthesis are optional in Ruby as long as the~ - Inside source: true *** True Line Result # Parenthesis are optional in Ruby as long as the ** Processing line: ~ # parsing is disambiguous. Here are a couple of variations.~ - Inside source: true *** True Line Result # parsing is disambiguous. Here are a couple of variations. ** Processing line: ~ # Generally speaking, don't put parenthesis is you don't have to.~ - Inside source: true *** True Line Result # Generally speaking, don't put parenthesis is you don't have to. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Conventional Usage of Parenthesis.~ - Inside source: true *** True Line Result # Conventional Usage of Parenthesis. ** Processing line: ~ puts add_one_to(3)~ - Inside source: true *** True Line Result puts add_one_to(3) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # DragonRuby's recommended use of parenthesis (inner function has parenthesis).~ - Inside source: true *** True Line Result # DragonRuby's recommended use of parenthesis (inner function has parenthesis). ** Processing line: ~ puts (add_one_to 3)~ - Inside source: true *** True Line Result puts (add_one_to 3) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Full parens.~ - Inside source: true *** True Line Result # Full parens. ** Processing line: ~ puts(add_one_to(3))~ - Inside source: true *** True Line Result puts(add_one_to(3)) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outer function has parenthesis~ - Inside source: true *** True Line Result # Outer function has parenthesis ** Processing line: ~ puts(add_one_to 3)~ - Inside source: true *** True Line Result puts(add_one_to 3) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Functions with default parameter values~ - Inside source: true *** True Line Result # Functions with default parameter values ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "* INFO: Function with default value"~ - Inside source: true *** True Line Result puts "* INFO: Function with default value" ** Processing line: ~ def function_with_default_value v = 10~ - Inside source: true *** True Line Result def function_with_default_value v = 10 ** Processing line: ~ v * 10~ - Inside source: true *** True Line Result v * 10 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts "Passing the argument three yields: #{function_with_default_value 3}"~ - Inside source: true *** True Line Result puts "Passing the argument three yields: #{function_with_default_value 3}" ** Processing line: ~ puts "Passing no argument yields: #{function_with_default_value}"~ - Inside source: true *** True Line Result puts "Passing no argument yields: #{function_with_default_value}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Nil default parameter value and ||= operator.~ - Inside source: true *** True Line Result # Nil default parameter value and ||= operator. ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "* INFO: Using the OR EQUAL operator (||=)"~ - Inside source: true *** True Line Result puts "* INFO: Using the OR EQUAL operator (||=)" ** Processing line: ~ def function_with_nil_default_with_local a = nil~ - Inside source: true *** True Line Result def function_with_nil_default_with_local a = nil ** Processing line: ~ result = a~ - Inside source: true *** True Line Result result = a ** Processing line: ~ result ||= "DEFAULT_VALUE_OF_A_IS_NIL_OR_FALSE"~ - Inside source: true *** True Line Result result ||= "DEFAULT_VALUE_OF_A_IS_NIL_OR_FALSE" ** Processing line: ~ "value is #{result}."~ - Inside source: true *** True Line Result "value is #{result}." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts "Passing 'hi' as the argument yields: #{function_with_nil_default_with_local 'hi'}"~ - Inside source: true *** True Line Result puts "Passing 'hi' as the argument yields: #{function_with_nil_default_with_local 'hi'}" ** Processing line: ~ puts "Passing nil: #{function_with_nil_default_with_local}"~ - Inside source: true *** True Line Result puts "Passing nil: #{function_with_nil_default_with_local}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - arrays.txt~ - Header detected. *** True Line Result *** True Line Result *** Learn Ruby Optional - Intermediate Ruby Primer - arrays.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/08_arrays.txt~ - Inside source: true *** True Line Result # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/08_arrays.txt ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Arrays~ - Inside source: true *** True Line Result # Arrays ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Arrays are incredibly powerful in Ruby. Learn to use them well.~ - Inside source: true *** True Line Result # Arrays are incredibly powerful in Ruby. Learn to use them well. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "* RUBY PRIMER: ARRAYS"~ - Inside source: true *** True Line Result puts "* RUBY PRIMER: ARRAYS" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Enumerable ranges and .to_a~ - Inside source: true *** True Line Result # Enumerable ranges and .to_a ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: Create an array with the numbers 1 to 10."~ - Inside source: true *** True Line Result puts "** INFO: Create an array with the numbers 1 to 10." ** Processing line: ~ one_to_ten = (1..10).to_a~ - Inside source: true *** True Line Result one_to_ten = (1..10).to_a ** Processing line: ~ puts one_to_ten~ - Inside source: true *** True Line Result puts one_to_ten ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Finding elements~ - Inside source: true *** True Line Result # Finding elements ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: Finding elements in an array using ~Array#find_all~."~ - Inside source: true *** True Line Result puts "** INFO: Finding elements in an array using ~Array#find_all~." ** Processing line: ~ puts "Create a new array that only contains even numbers from the previous array."~ - Inside source: true *** True Line Result puts "Create a new array that only contains even numbers from the previous array." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ one_to_ten = (1..10).to_a~ - Inside source: true *** True Line Result one_to_ten = (1..10).to_a ** Processing line: ~ evens = one_to_ten.find_all do |number|~ - Inside source: true *** True Line Result evens = one_to_ten.find_all do |number| ** Processing line: ~ number % 2 == 0~ - Inside source: true *** True Line Result number % 2 == 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts evens~ - Inside source: true *** True Line Result puts evens ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Rejecting elements~ - Inside source: true *** True Line Result # Rejecting elements ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: Removing elements in an array using ~Array#reject~."~ - Inside source: true *** True Line Result puts "** INFO: Removing elements in an array using ~Array#reject~." ** Processing line: ~ puts "Create a new array that rejects odd numbers."~ - Inside source: true *** True Line Result puts "Create a new array that rejects odd numbers." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ one_to_ten = (1..10).to_a~ - Inside source: true *** True Line Result one_to_ten = (1..10).to_a ** Processing line: ~ also_even = one_to_ten.reject do |number|~ - Inside source: true *** True Line Result also_even = one_to_ten.reject do |number| ** Processing line: ~ number % 2 != 0~ - Inside source: true *** True Line Result number % 2 != 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts also_even~ - Inside source: true *** True Line Result puts also_even ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Array transform using the map function.~ - Inside source: true *** True Line Result # Array transform using the map function. ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: Creating new derived values from an array using ~Array#map~."~ - Inside source: true *** True Line Result puts "** INFO: Creating new derived values from an array using ~Array#map~." ** Processing line: ~ puts "Create an array that doubles every number."~ - Inside source: true *** True Line Result puts "Create an array that doubles every number." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ one_to_ten = (1..10).to_a~ - Inside source: true *** True Line Result one_to_ten = (1..10).to_a ** Processing line: ~ doubled = one_to_ten.map do |number|~ - Inside source: true *** True Line Result doubled = one_to_ten.map do |number| ** Processing line: ~ number * 2~ - Inside source: true *** True Line Result number * 2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts doubled~ - Inside source: true *** True Line Result puts doubled ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Combining array functions.~ - Inside source: true *** True Line Result # Combining array functions. ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: Combining ~Array#find_all~ along with ~Array#map~."~ - Inside source: true *** True Line Result puts "** INFO: Combining ~Array#find_all~ along with ~Array#map~." ** Processing line: ~ puts "Create an array that selects only odd numbers and then multiply those by 10."~ - Inside source: true *** True Line Result puts "Create an array that selects only odd numbers and then multiply those by 10." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ one_to_ten = (1..10).to_a~ - Inside source: true *** True Line Result one_to_ten = (1..10).to_a ** Processing line: ~ odd_doubled = one_to_ten.find_all do |number|~ - Inside source: true *** True Line Result odd_doubled = one_to_ten.find_all do |number| ** Processing line: ~ number % 2 != 0~ - Inside source: true *** True Line Result number % 2 != 0 ** Processing line: ~ end.map do |odd_number|~ - Inside source: true *** True Line Result end.map do |odd_number| ** Processing line: ~ odd_number * 10~ - Inside source: true *** True Line Result odd_number * 10 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts odd_doubled~ - Inside source: true *** True Line Result puts odd_doubled ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Product function.~ - Inside source: true *** True Line Result # Product function. ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: Create all combinations of array values using ~Array#product~."~ - Inside source: true *** True Line Result puts "** INFO: Create all combinations of array values using ~Array#product~." ** Processing line: ~ puts "All two-item pairs of numbers 1 to 10."~ - Inside source: true *** True Line Result puts "All two-item pairs of numbers 1 to 10." ** Processing line: ~ one_to_ten = (1..10).to_a~ - Inside source: true *** True Line Result one_to_ten = (1..10).to_a ** Processing line: ~ all_combinations = one_to_ten.product(one_to_ten)~ - Inside source: true *** True Line Result all_combinations = one_to_ten.product(one_to_ten) ** Processing line: ~ puts all_combinations~ - Inside source: true *** True Line Result puts all_combinations ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Uniq and sort function.~ - Inside source: true *** True Line Result # Uniq and sort function. ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: Providing uniq values using ~Array#uniq~ and ~Array#sort~."~ - Inside source: true *** True Line Result puts "** INFO: Providing uniq values using ~Array#uniq~ and ~Array#sort~." ** Processing line: ~ puts "All uniq combinations of numbers regardless of order."~ - Inside source: true *** True Line Result puts "All uniq combinations of numbers regardless of order." ** Processing line: ~ puts "For example: [1, 2] is the same as [2, 1]."~ - Inside source: true *** True Line Result puts "For example: [1, 2] is the same as [2, 1]." ** Processing line: ~ one_to_ten = (1..10).to_a~ - Inside source: true *** True Line Result one_to_ten = (1..10).to_a ** Processing line: ~ uniq_combinations =~ - Inside source: true *** True Line Result uniq_combinations = ** Processing line: ~ one_to_ten.product(one_to_ten)~ - Inside source: true *** True Line Result one_to_ten.product(one_to_ten) ** Processing line: ~ .map do |unsorted_number|~ - Inside source: true *** True Line Result .map do |unsorted_number| ** Processing line: ~ unsorted_number.sort~ - Inside source: true *** True Line Result unsorted_number.sort ** Processing line: ~ end.uniq~ - Inside source: true *** True Line Result end.uniq ** Processing line: ~ puts uniq_combinations~ - Inside source: true *** True Line Result puts uniq_combinations ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Example of an advanced array transform.~ - Inside source: true *** True Line Result # Example of an advanced array transform. ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: Advanced chaining. Combining ~Array's ~map~, ~find_all~, ~sort~, and ~sort_by~."~ - Inside source: true *** True Line Result puts "** INFO: Advanced chaining. Combining ~Array's ~map~, ~find_all~, ~sort~, and ~sort_by~." ** Processing line: ~ puts "All unique Pythagorean Triples between 1 and 100 sorted by area of the triangle."~ - Inside source: true *** True Line Result puts "All unique Pythagorean Triples between 1 and 100 sorted by area of the triangle." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ one_to_hundred = (1..100).to_a~ - Inside source: true *** True Line Result one_to_hundred = (1..100).to_a ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ triples =~ - Inside source: true *** True Line Result triples = ** Processing line: ~ one_to_hundred.product(one_to_hundred).map do |width, height|~ - Inside source: true *** True Line Result one_to_hundred.product(one_to_hundred).map do |width, height| ** Processing line: ~ [width, height, Math.sqrt(width ** 2 + height ** 2)]~ - Inside source: true *** True Line Result [width, height, Math.sqrt(width ** 2 + height ** 2)] ** Processing line: ~ end.find_all do |_, _, hypotenuse|~ - Inside source: true *** True Line Result end.find_all do |_, _, hypotenuse| ** Processing line: ~ hypotenuse.to_i == hypotenuse~ - Inside source: true *** True Line Result hypotenuse.to_i == hypotenuse ** Processing line: ~ end.map do |triangle|~ - Inside source: true *** True Line Result end.map do |triangle| ** Processing line: ~ triangle.map(&:to_i)~ - Inside source: true *** True Line Result triangle.map(&:to_i) ** Processing line: ~ end.uniq do |triangle|~ - Inside source: true *** True Line Result end.uniq do |triangle| ** Processing line: ~ triangle.sort~ - Inside source: true *** True Line Result triangle.sort ** Processing line: ~ end.map do |width, height, hypotenuse|~ - Inside source: true *** True Line Result end.map do |width, height, hypotenuse| ** Processing line: ~ [width, height, hypotenuse, (width * height) / 2]~ - Inside source: true *** True Line Result [width, height, hypotenuse, (width * height) / 2] ** Processing line: ~ end.sort_by do |_, _, _, area|~ - Inside source: true *** True Line Result end.sort_by do |_, _, _, area| ** Processing line: ~ area~ - Inside source: true *** True Line Result area ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ triples.each do |width, height, hypotenuse, _|~ - Inside source: true *** True Line Result triples.each do |width, height, hypotenuse, _| ** Processing line: ~ puts "(#{width}, #{height}, #{hypotenuse})"~ - Inside source: true *** True Line Result puts "(#{width}, #{height}, #{hypotenuse})" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Example of an sorting.~ - Inside source: true *** True Line Result # Example of an sorting. ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repl do~ - Inside source: true *** True Line Result repl do ** Processing line: ~ puts "** INFO: Implementing a custom sort function that operates on the ~Hash~ datatype."~ - Inside source: true *** True Line Result puts "** INFO: Implementing a custom sort function that operates on the ~Hash~ datatype." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ things_to_sort = [~ - Inside source: true *** True Line Result things_to_sort = [ ** Processing line: ~ { type: :background, order: 1 },~ - Inside source: true *** True Line Result { type: :background, order: 1 }, ** Processing line: ~ { type: :foreground, order: 1 },~ - Inside source: true *** True Line Result { type: :foreground, order: 1 }, ** Processing line: ~ { type: :foreground, order: 2 }~ - Inside source: true *** True Line Result { type: :foreground, order: 2 } ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ puts "*** Original array."~ - Inside source: true *** True Line Result puts "*** Original array." ** Processing line: ~ puts things_to_sort~ - Inside source: true *** True Line Result puts things_to_sort ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts "*** Simple sort using key."~ - Inside source: true *** True Line Result puts "*** Simple sort using key." ** Processing line: ~ # For a simple sort, you can use sort_by~ - Inside source: true *** True Line Result # For a simple sort, you can use sort_by ** Processing line: ~ results = things_to_sort.sort_by do |hash|~ - Inside source: true *** True Line Result results = things_to_sort.sort_by do |hash| ** Processing line: ~ hash[:order]~ - Inside source: true *** True Line Result hash[:order] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts results~ - Inside source: true *** True Line Result puts results ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts "*** Custom sort."~ - Inside source: true *** True Line Result puts "*** Custom sort." ** Processing line: ~ puts "**** Sorting process."~ - Inside source: true *** True Line Result puts "**** Sorting process." ** Processing line: ~ # for a more complicated sort, you can provide a block that returns~ - Inside source: true *** True Line Result # for a more complicated sort, you can provide a block that returns ** Processing line: ~ # -1, 0, 1 for a left and right operand~ - Inside source: true *** True Line Result # -1, 0, 1 for a left and right operand ** Processing line: ~ results = things_to_sort.sort do |l, r|~ - Inside source: true *** True Line Result results = things_to_sort.sort do |l, r| ** Processing line: ~ sort_result = 0~ - Inside source: true *** True Line Result sort_result = 0 ** Processing line: ~ puts "here is l: #{l}"~ - Inside source: true *** True Line Result puts "here is l: #{l}" ** Processing line: ~ puts "here is r: #{r || "nil"}"~ - Inside source: true *** True Line Result puts "here is r: #{r || "nil"}" ** Processing line: ~ # if either value is nil/false return 0~ - Inside source: true *** True Line Result # if either value is nil/false return 0 ** Processing line: ~ if !l || !r~ - Inside source: true *** True Line Result if !l || !r ** Processing line: ~ sort_result = 0~ - Inside source: true *** True Line Result sort_result = 0 ** Processing line: ~ # if the type of "left" is background and the~ - Inside source: true *** True Line Result # if the type of "left" is background and the ** Processing line: ~ # type of "right" is foreground, then return~ - Inside source: true *** True Line Result # type of "right" is foreground, then return ** Processing line: ~ # -1 (which means "left" is less than "right"~ - Inside source: true *** True Line Result # -1 (which means "left" is less than "right" ** Processing line: ~ elsif l[:type] == :background && r[:type] == :foreground~ - Inside source: true *** True Line Result elsif l[:type] == :background && r[:type] == :foreground ** Processing line: ~ sort_result = -1~ - Inside source: true *** True Line Result sort_result = -1 ** Processing line: ~ # if the type of "left" is foreground and the~ - Inside source: true *** True Line Result # if the type of "left" is foreground and the ** Processing line: ~ # type of "right" is background, then return~ - Inside source: true *** True Line Result # type of "right" is background, then return ** Processing line: ~ # 1 (which means "left" is greater than "right"~ - Inside source: true *** True Line Result # 1 (which means "left" is greater than "right" ** Processing line: ~ elsif l[:type] == :foreground && r[:type] == :background~ - Inside source: true *** True Line Result elsif l[:type] == :foreground && r[:type] == :background ** Processing line: ~ sort_result = 1~ - Inside source: true *** True Line Result sort_result = 1 ** Processing line: ~ # if "left" and "right"'s type are the same, then~ - Inside source: true *** True Line Result # if "left" and "right"'s type are the same, then ** Processing line: ~ # use the order as the tie breaker~ - Inside source: true *** True Line Result # use the order as the tie breaker ** Processing line: ~ elsif l[:order] < r[:order]~ - Inside source: true *** True Line Result elsif l[:order] < r[:order] ** Processing line: ~ sort_result = -1~ - Inside source: true *** True Line Result sort_result = -1 ** Processing line: ~ elsif l[:order] > r[:order]~ - Inside source: true *** True Line Result elsif l[:order] > r[:order] ** Processing line: ~ sort_result = 1~ - Inside source: true *** True Line Result sort_result = 1 ** Processing line: ~ # returning 0 means both values are equal~ - Inside source: true *** True Line Result # returning 0 means both values are equal ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ sort_result = 0~ - Inside source: true *** True Line Result sort_result = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ sort_result~ - Inside source: true *** True Line Result sort_result ** Processing line: ~ end.to_a~ - Inside source: true *** True Line Result end.to_a ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts "**** Sort result."~ - Inside source: true *** True Line Result puts "**** Sort result." ** Processing line: ~ puts results~ - Inside source: true *** True Line Result puts results ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~ # Api documention for Array that is worth commiting to memory because arrays are so~ - Inside source: true *** True Line Result # Api documention for Array that is worth commiting to memory because arrays are so ** Processing line: ~ # awesome in Ruby: https://docs.ruby-lang.org/en/2.0.0/Array.html~ - Inside source: true *** True Line Result # awesome in Ruby: https://docs.ruby-lang.org/en/2.0.0/Array.html ** Processing line: ~ # ====================================================================================~ - Inside source: true *** True Line Result # ==================================================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Learn Ruby Optional - Intermediate Ruby Primer - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/main.rb~ - Inside source: true *** True Line Result # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.labels << [640, 380, "Open repl.rb in the text editor of your choice and follow the document.", 0, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 380, "Open repl.rb in the text editor of your choice and follow the document.", 0, 1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rendering Basics - Labels - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rendering Basics - Labels - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/01_rendering_basics/01_labels/app/main.rb~ - Inside source: true *** True Line Result # ./samples/01_rendering_basics/01_labels/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in a previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in a previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.labels: An array. Values in this array generate labels~ - Inside source: true *** True Line Result - args.outputs.labels: An array. Values in this array generate labels ** Processing line: ~ the screen.~ - Inside source: true *** True Line Result the screen. ** Processing line: ~ - args.grid.(left|right|top|bottom): Pixel value for the boundaries of the virtual~ - Inside source: true *** True Line Result - args.grid.(left|right|top|bottom): Pixel value for the boundaries of the virtual ** Processing line: ~ 720 p screen (Dragon Ruby Game Toolkits's virtual resolution is always 1280x720).~ - Inside source: true *** True Line Result 720 p screen (Dragon Ruby Game Toolkits's virtual resolution is always 1280x720). ** Processing line: ~ - Numeric#shift_(left|right|up|down): Shifts the Numeric in the correct direction~ - Inside source: true *** True Line Result - Numeric#shift_(left|right|up|down): Shifts the Numeric in the correct direction ** Processing line: ~ by adding or subracting.~ - Inside source: true *** True Line Result by adding or subracting. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Labels are used to represent text elements in DragonRuby~ - Inside source: true *** True Line Result # Labels are used to represent text elements in DragonRuby ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # An example of creating a label is:~ - Inside source: true *** True Line Result # An example of creating a label is: ** Processing line: ~ # args.outputs.labels << [320, 640, "Example", 3, 1, 255, 0, 0, 200, manaspace.ttf]~ - Inside source: true *** True Line Result # args.outputs.labels << [320, 640, "Example", 3, 1, 255, 0, 0, 200, manaspace.ttf] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The code above does the following:~ - Inside source: true *** True Line Result # The code above does the following: ** Processing line: ~ # 1. GET the place where labels go: args.outputs.labels~ - Inside source: true *** True Line Result # 1. GET the place where labels go: args.outputs.labels ** Processing line: ~ # 2. Request a new LABEL be ADDED: <<~ - Inside source: true *** True Line Result # 2. Request a new LABEL be ADDED: << ** Processing line: ~ # 3. The DEFINITION of a SOLID is the ARRAY:~ - Inside source: true *** True Line Result # 3. The DEFINITION of a SOLID is the ARRAY: ** Processing line: ~ # [320, 640, "Example", 3, 1, 255, 0, 0, 200, manaspace.ttf]~ - Inside source: true *** True Line Result # [320, 640, "Example", 3, 1, 255, 0, 0, 200, manaspace.ttf] ** Processing line: ~ # [ X , Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result # [ X , Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The tick method is called by DragonRuby every frame~ - Inside source: true *** True Line Result # The tick method is called by DragonRuby every frame ** Processing line: ~ # args contains all the information regarding the game.~ - Inside source: true *** True Line Result # args contains all the information regarding the game. ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ tick_instructions args, "Sample app shows different version of label sizes and alignments. And how to use hashes instead of arrays."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows different version of label sizes and alignments. And how to use hashes instead of arrays." ** Processing line: ~ # Here are some examples of simple labels, with the minimum number of parameters~ - Inside source: true *** True Line Result # Here are some examples of simple labels, with the minimum number of parameters ** Processing line: ~ # Note that the default values for the other parameters are 0, except for Alpha which is 255 and Font Style which is the default font~ - Inside source: true *** True Line Result # Note that the default values for the other parameters are 0, except for Alpha which is 255 and Font Style which is the default font ** Processing line: ~ args.outputs.labels << [400, 620, "Here is a label with just an x, y, and text"]~ - Inside source: true *** True Line Result args.outputs.labels << [400, 620, "Here is a label with just an x, y, and text"] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << [args.grid.left.shift_right(5), args.grid.top.shift_down(5), "This is a label located at the top left."]~ - Inside source: true *** True Line Result args.outputs.labels << [args.grid.left.shift_right(5), args.grid.top.shift_down(5), "This is a label located at the top left."] ** Processing line: ~ args.outputs.labels << [args.grid.left.shift_right(5), args.grid.bottom.shift_up(30), "This is a label located at the bottom left."]~ - Inside source: true *** True Line Result args.outputs.labels << [args.grid.left.shift_right(5), args.grid.bottom.shift_up(30), "This is a label located at the bottom left."] ** Processing line: ~ args.outputs.labels << [args.grid.right.shift_left(420), args.grid.top.shift_down(5), "This is a label located at the top right."]~ - Inside source: true *** True Line Result args.outputs.labels << [args.grid.right.shift_left(420), args.grid.top.shift_down(5), "This is a label located at the top right."] ** Processing line: ~ args.outputs.labels << [args.grid.right.shift_left(440), args.grid.bottom.shift_up(30), "This is a label located at the bottom right."]~ - Inside source: true *** True Line Result args.outputs.labels << [args.grid.right.shift_left(440), args.grid.bottom.shift_up(30), "This is a label located at the bottom right."] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Demonstration of the Size Parameter~ - Inside source: true *** True Line Result # Demonstration of the Size Parameter ** Processing line: ~ args.outputs.labels << [175 + 150, 610 - 50, "Smaller label.", -2]~ - Inside source: true *** True Line Result args.outputs.labels << [175 + 150, 610 - 50, "Smaller label.", -2] ** Processing line: ~ args.outputs.labels << [175 + 150, 580 - 50, "Small label.", -1]~ - Inside source: true *** True Line Result args.outputs.labels << [175 + 150, 580 - 50, "Small label.", -1] ** Processing line: ~ args.outputs.labels << [175 + 150, 550 - 50, "Medium label.", 0]~ - Inside source: true *** True Line Result args.outputs.labels << [175 + 150, 550 - 50, "Medium label.", 0] ** Processing line: ~ args.outputs.labels << [175 + 150, 520 - 50, "Large label.", 1]~ - Inside source: true *** True Line Result args.outputs.labels << [175 + 150, 520 - 50, "Large label.", 1] ** Processing line: ~ args.outputs.labels << [175 + 150, 490 - 50, "Larger label.", 2]~ - Inside source: true *** True Line Result args.outputs.labels << [175 + 150, 490 - 50, "Larger label.", 2] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Demonstration of the Align Parameter~ - Inside source: true *** True Line Result # Demonstration of the Align Parameter ** Processing line: ~ args.outputs.labels << [260 + 150, 345 - 50, "Left aligned.", 0, 2]~ - Inside source: true *** True Line Result args.outputs.labels << [260 + 150, 345 - 50, "Left aligned.", 0, 2] ** Processing line: ~ args.outputs.labels << [260 + 150, 325 - 50, "Center aligned.", 0, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [260 + 150, 325 - 50, "Center aligned.", 0, 1] ** Processing line: ~ args.outputs.labels << [260 + 150, 305 - 50, "Right aligned.", 0, 0]~ - Inside source: true *** True Line Result args.outputs.labels << [260 + 150, 305 - 50, "Right aligned.", 0, 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Demonstration of the RGBA parameters~ - Inside source: true *** True Line Result # Demonstration of the RGBA parameters ** Processing line: ~ args.outputs.labels << [600 + 150, 590 - 50, "Red Label.", 0, 0, 255, 0, 0]~ - Inside source: true *** True Line Result args.outputs.labels << [600 + 150, 590 - 50, "Red Label.", 0, 0, 255, 0, 0] ** Processing line: ~ args.outputs.labels << [600 + 150, 570 - 50, "Green Label.", 0, 0, 0, 255, 0]~ - Inside source: true *** True Line Result args.outputs.labels << [600 + 150, 570 - 50, "Green Label.", 0, 0, 0, 255, 0] ** Processing line: ~ args.outputs.labels << [600 + 150, 550 - 50, "Blue Label.", 0, 0, 0, 0, 255]~ - Inside source: true *** True Line Result args.outputs.labels << [600 + 150, 550 - 50, "Blue Label.", 0, 0, 0, 0, 255] ** Processing line: ~ args.outputs.labels << [600 + 150, 530 - 50, "Faded Label.", 0, 0, 0, 0, 0, 128]~ - Inside source: true *** True Line Result args.outputs.labels << [600 + 150, 530 - 50, "Faded Label.", 0, 0, 0, 0, 0, 128] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Demonstration of the Font parameter~ - Inside source: true *** True Line Result # Demonstration of the Font parameter ** Processing line: ~ # In order to use a font of your choice, add its ttf file to the project folder, where the app folder is~ - Inside source: true *** True Line Result # In order to use a font of your choice, add its ttf file to the project folder, where the app folder is ** Processing line: ~ args.outputs.labels << [690 + 150, 330 - 20, "Custom font (Array)", 0, 1, 125, 0, 200, 255, "manaspc.ttf" ]~ - Inside source: true *** True Line Result args.outputs.labels << [690 + 150, 330 - 20, "Custom font (Array)", 0, 1, 125, 0, 200, 255, "manaspc.ttf" ] ** Processing line: ~ args.outputs.primitives << { x: 690 + 150,~ - Inside source: true *** True Line Result args.outputs.primitives << { x: 690 + 150, ** Processing line: ~ y: 330 - 50,~ - Inside source: true *** True Line Result y: 330 - 50, ** Processing line: ~ text: "Custom font (Hash)",~ - Inside source: true *** True Line Result text: "Custom font (Hash)", ** Processing line: ~ size_enum: 0,~ - Inside source: true *** True Line Result size_enum: 0, ** Processing line: ~ alignment_enum: 1,~ - Inside source: true *** True Line Result alignment_enum: 1, ** Processing line: ~ r: 125,~ - Inside source: true *** True Line Result r: 125, ** Processing line: ~ g: 0,~ - Inside source: true *** True Line Result g: 0, ** Processing line: ~ b: 200,~ - Inside source: true *** True Line Result b: 200, ** Processing line: ~ a: 255,~ - Inside source: true *** True Line Result a: 255, ** Processing line: ~ font: "manaspc.ttf" }.label!~ - Inside source: true *** True Line Result font: "manaspc.ttf" }.label! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Primitives can hold anything, and can be given a label in the following forms~ - Inside source: true *** True Line Result # Primitives can hold anything, and can be given a label in the following forms ** Processing line: ~ args.outputs.primitives << [690 + 150, 330 - 80, "Custom font (.primitives Array)", 0, 1, 125, 0, 200, 255, "manaspc.ttf" ].label~ - Inside source: true *** True Line Result args.outputs.primitives << [690 + 150, 330 - 80, "Custom font (.primitives Array)", 0, 1, 125, 0, 200, 255, "manaspc.ttf" ].label ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.primitives << { x: 690 + 150,~ - Inside source: true *** True Line Result args.outputs.primitives << { x: 690 + 150, ** Processing line: ~ y: 330 - 110,~ - Inside source: true *** True Line Result y: 330 - 110, ** Processing line: ~ text: "Custom font (.primitives Hash)",~ - Inside source: true *** True Line Result text: "Custom font (.primitives Hash)", ** Processing line: ~ size_enum: 0,~ - Inside source: true *** True Line Result size_enum: 0, ** Processing line: ~ alignment_enum: 1,~ - Inside source: true *** True Line Result alignment_enum: 1, ** Processing line: ~ r: 125,~ - Inside source: true *** True Line Result r: 125, ** Processing line: ~ g: 0,~ - Inside source: true *** True Line Result g: 0, ** Processing line: ~ b: 200,~ - Inside source: true *** True Line Result b: 200, ** Processing line: ~ a: 255,~ - Inside source: true *** True Line Result a: 255, ** Processing line: ~ font: "manaspc.ttf" }.label!~ - Inside source: true *** True Line Result font: "manaspc.ttf" }.label! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rendering Basics - Lines - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rendering Basics - Lines - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/01_rendering_basics/02_lines/app/main.rb~ - Inside source: true *** True Line Result # ./samples/01_rendering_basics/02_lines/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in a previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in a previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.lines: An array. Values in this array generate lines on~ - Inside source: true *** True Line Result - args.outputs.lines: An array. Values in this array generate lines on ** Processing line: ~ the screen.~ - Inside source: true *** True Line Result the screen. ** Processing line: ~ - args.state.tick_count: This property contains an integer value that~ - Inside source: true *** True Line Result - args.state.tick_count: This property contains an integer value that ** Processing line: ~ represents the current frame. GTK renders at 60 FPS. A value of 0~ - Inside source: true *** True Line Result represents the current frame. GTK renders at 60 FPS. A value of 0 ** Processing line: ~ for args.state.tick_count represents the initial load of the game.~ - Inside source: true *** True Line Result for args.state.tick_count represents the initial load of the game. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The parameters required for lines are:~ - Inside source: true *** True Line Result # The parameters required for lines are: ** Processing line: ~ # 1. The initial point (x, y)~ - Inside source: true *** True Line Result # 1. The initial point (x, y) ** Processing line: ~ # 2. The end point (x2, y2)~ - Inside source: true *** True Line Result # 2. The end point (x2, y2) ** Processing line: ~ # 3. The rgba values for the color and transparency (r, g, b, a)~ - Inside source: true *** True Line Result # 3. The rgba values for the color and transparency (r, g, b, a) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # An example of creating a line would be:~ - Inside source: true *** True Line Result # An example of creating a line would be: ** Processing line: ~ # args.outputs.lines << [100, 100, 300, 300, 255, 0, 255, 255]~ - Inside source: true *** True Line Result # args.outputs.lines << [100, 100, 300, 300, 255, 0, 255, 255] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This would create a line from (100, 100) to (300, 300)~ - Inside source: true *** True Line Result # This would create a line from (100, 100) to (300, 300) ** Processing line: ~ # The RGB code (255, 0, 255) would determine its color, a purple~ - Inside source: true *** True Line Result # The RGB code (255, 0, 255) would determine its color, a purple ** Processing line: ~ # It would have an Alpha value of 255, making it completely opaque~ - Inside source: true *** True Line Result # It would have an Alpha value of 255, making it completely opaque ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ tick_instructions args, "Sample app shows how to create lines."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows how to create lines." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << [480, 620, "Lines (x, y, x2, y2, r, g, b, a)"]~ - Inside source: true *** True Line Result args.outputs.labels << [480, 620, "Lines (x, y, x2, y2, r, g, b, a)"] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Some simple lines~ - Inside source: true *** True Line Result # Some simple lines ** Processing line: ~ args.outputs.lines << [380, 450, 675, 450]~ - Inside source: true *** True Line Result args.outputs.lines << [380, 450, 675, 450] ** Processing line: ~ args.outputs.lines << [380, 410, 875, 410]~ - Inside source: true *** True Line Result args.outputs.lines << [380, 410, 875, 410] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These examples utilize args.state.tick_count to change the length of the lines over time~ - Inside source: true *** True Line Result # These examples utilize args.state.tick_count to change the length of the lines over time ** Processing line: ~ # args.state.tick_count is the ticks that have occurred in the game~ - Inside source: true *** True Line Result # args.state.tick_count is the ticks that have occurred in the game ** Processing line: ~ # This is accomplished by making either the starting or ending point based on the args.state.tick_count~ - Inside source: true *** True Line Result # This is accomplished by making either the starting or ending point based on the args.state.tick_count ** Processing line: ~ args.outputs.lines << [380, 370, 875, 370, args.state.tick_count % 255, 0, 0, 255]~ - Inside source: true *** True Line Result args.outputs.lines << [380, 370, 875, 370, args.state.tick_count % 255, 0, 0, 255] ** Processing line: ~ args.outputs.lines << [380, 330 - args.state.tick_count % 25, 875, 330, 0, 0, 0, 255]~ - Inside source: true *** True Line Result args.outputs.lines << [380, 330 - args.state.tick_count % 25, 875, 330, 0, 0, 0, 255] ** Processing line: ~ args.outputs.lines << [380 + args.state.tick_count % 400, 290, 875, 290, 0, 0, 0, 255]~ - Inside source: true *** True Line Result args.outputs.lines << [380 + args.state.tick_count % 400, 290, 875, 290, 0, 0, 0, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rendering Basics - Solids Borders - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rendering Basics - Solids Borders - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/01_rendering_basics/03_solids_borders/app/main.rb~ - Inside source: true *** True Line Result # ./samples/01_rendering_basics/03_solids_borders/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in a previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in a previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.solids: An array. Values in this array generate~ - Inside source: true *** True Line Result - args.outputs.solids: An array. Values in this array generate ** Processing line: ~ solid/filled rectangles on the screen.~ - Inside source: true *** True Line Result solid/filled rectangles on the screen. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Rects are outputted in DragonRuby as rectangles~ - Inside source: true *** True Line Result # Rects are outputted in DragonRuby as rectangles ** Processing line: ~ # If filled in, they are solids~ - Inside source: true *** True Line Result # If filled in, they are solids ** Processing line: ~ # If hollow, they are borders~ - Inside source: true *** True Line Result # If hollow, they are borders ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Solids are added to args.outputs.solids~ - Inside source: true *** True Line Result # Solids are added to args.outputs.solids ** Processing line: ~ # Borders are added to args.outputs.borders~ - Inside source: true *** True Line Result # Borders are added to args.outputs.borders ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The parameters required for rects are:~ - Inside source: true *** True Line Result # The parameters required for rects are: ** Processing line: ~ # 1. The upper right corner (x, y)~ - Inside source: true *** True Line Result # 1. The upper right corner (x, y) ** Processing line: ~ # 2. The width (w)~ - Inside source: true *** True Line Result # 2. The width (w) ** Processing line: ~ # 3. The height (h)~ - Inside source: true *** True Line Result # 3. The height (h) ** Processing line: ~ # 4. The rgba values for the color and transparency (r, g, b, a)~ - Inside source: true *** True Line Result # 4. The rgba values for the color and transparency (r, g, b, a) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Here is an example of a rect definition:~ - Inside source: true *** True Line Result # Here is an example of a rect definition: ** Processing line: ~ # [100, 100, 400, 500, 0, 255, 0, 180]~ - Inside source: true *** True Line Result # [100, 100, 400, 500, 0, 255, 0, 180] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The example would create a rect from (100, 100)~ - Inside source: true *** True Line Result # The example would create a rect from (100, 100) ** Processing line: ~ # Extending 400 pixels across the x axis~ - Inside source: true *** True Line Result # Extending 400 pixels across the x axis ** Processing line: ~ # and 500 pixels across the y axis~ - Inside source: true *** True Line Result # and 500 pixels across the y axis ** Processing line: ~ # The rect would be green (0, 255, 0)~ - Inside source: true *** True Line Result # The rect would be green (0, 255, 0) ** Processing line: ~ # and mostly opaque with some transparency (180)~ - Inside source: true *** True Line Result # and mostly opaque with some transparency (180) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Whether the rect would be filled or not depends on if~ - Inside source: true *** True Line Result # Whether the rect would be filled or not depends on if ** Processing line: ~ # it is added to args.outputs.solids or args.outputs.borders~ - Inside source: true *** True Line Result # it is added to args.outputs.solids or args.outputs.borders ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ tick_instructions args, "Sample app shows how to create solid squares."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows how to create solid squares." ** Processing line: ~ args.outputs.labels << [460, 600, "Solids (x, y, w, h, r, g, b, a)"]~ - Inside source: true *** True Line Result args.outputs.labels << [460, 600, "Solids (x, y, w, h, r, g, b, a)"] ** Processing line: ~ args.outputs.solids << [470, 520, 50, 50]~ - Inside source: true *** True Line Result args.outputs.solids << [470, 520, 50, 50] ** Processing line: ~ args.outputs.solids << [530, 520, 50, 50, 0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.solids << [530, 520, 50, 50, 0, 0, 0] ** Processing line: ~ args.outputs.solids << [590, 520, 50, 50, 255, 0, 0]~ - Inside source: true *** True Line Result args.outputs.solids << [590, 520, 50, 50, 255, 0, 0] ** Processing line: ~ args.outputs.solids << [650, 520, 50, 50, 255, 0, 0, 128]~ - Inside source: true *** True Line Result args.outputs.solids << [650, 520, 50, 50, 255, 0, 0, 128] ** Processing line: ~ args.outputs.solids << [710, 520, 50, 50, 0, 0, 0, 128 + args.state.tick_count % 128]~ - Inside source: true *** True Line Result args.outputs.solids << [710, 520, 50, 50, 0, 0, 0, 128 + args.state.tick_count % 128] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << [460, 400, "Borders (x, y, w, h, r, g, b, a)"]~ - Inside source: true *** True Line Result args.outputs.labels << [460, 400, "Borders (x, y, w, h, r, g, b, a)"] ** Processing line: ~ args.outputs.borders << [470, 320, 50, 50]~ - Inside source: true *** True Line Result args.outputs.borders << [470, 320, 50, 50] ** Processing line: ~ args.outputs.borders << [530, 320, 50, 50, 0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.borders << [530, 320, 50, 50, 0, 0, 0] ** Processing line: ~ args.outputs.borders << [590, 320, 50, 50, 255, 0, 0]~ - Inside source: true *** True Line Result args.outputs.borders << [590, 320, 50, 50, 255, 0, 0] ** Processing line: ~ args.outputs.borders << [650, 320, 50, 50, 255, 0, 0, 128]~ - Inside source: true *** True Line Result args.outputs.borders << [650, 320, 50, 50, 255, 0, 0, 128] ** Processing line: ~ args.outputs.borders << [710, 320, 50, 50, 0, 0, 0, 128 + args.state.tick_count % 128]~ - Inside source: true *** True Line Result args.outputs.borders << [710, 320, 50, 50, 0, 0, 0, 128 + args.state.tick_count % 128] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rendering Basics - Sprites - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rendering Basics - Sprites - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/01_rendering_basics/04_sprites/app/main.rb~ - Inside source: true *** True Line Result # ./samples/01_rendering_basics/04_sprites/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in a previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in a previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.sprites: An array. Values in this array generate~ - Inside source: true *** True Line Result - args.outputs.sprites: An array. Values in this array generate ** Processing line: ~ sprites on the screen. The location of the sprite is assumed to~ - Inside source: true *** True Line Result sprites on the screen. The location of the sprite is assumed to ** Processing line: ~ be under the mygame/ directory (the exception being dragonruby.png).~ - Inside source: true *** True Line Result be under the mygame/ directory (the exception being dragonruby.png). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # For all other display outputs, Sprites are your solution~ - Inside source: true *** True Line Result # For all other display outputs, Sprites are your solution ** Processing line: ~ # Sprites import images and display them with a certain rectangular area~ - Inside source: true *** True Line Result # Sprites import images and display them with a certain rectangular area ** Processing line: ~ # The image can be of any usual format and should be located within the folder,~ - Inside source: true *** True Line Result # The image can be of any usual format and should be located within the folder, ** Processing line: ~ # similar to additional fonts.~ - Inside source: true *** True Line Result # similar to additional fonts. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sprites have the following parameters~ - Inside source: true *** True Line Result # Sprites have the following parameters ** Processing line: ~ # Rectangular area (x, y, width, height)~ - Inside source: true *** True Line Result # Rectangular area (x, y, width, height) ** Processing line: ~ # The image (path)~ - Inside source: true *** True Line Result # The image (path) ** Processing line: ~ # Rotation (angle)~ - Inside source: true *** True Line Result # Rotation (angle) ** Processing line: ~ # Alpha (a)~ - Inside source: true *** True Line Result # Alpha (a) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ tick_instructions args, "Sample app shows how to render a sprite. Set its alpha, and rotate it."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows how to render a sprite. Set its alpha, and rotate it." ** Processing line: ~ args.outputs.labels << [460, 600, "Sprites (x, y, w, h, path, angle, a)"]~ - Inside source: true *** True Line Result args.outputs.labels << [460, 600, "Sprites (x, y, w, h, path, angle, a)"] ** Processing line: ~ args.outputs.sprites << [460, 470, 128, 101, 'dragonruby.png']~ - Inside source: true *** True Line Result args.outputs.sprites << [460, 470, 128, 101, 'dragonruby.png'] ** Processing line: ~ args.outputs.sprites << [610, 470, 128, 101, 'dragonruby.png', args.state.tick_count % 360]~ - Inside source: true *** True Line Result args.outputs.sprites << [610, 470, 128, 101, 'dragonruby.png', args.state.tick_count % 360] ** Processing line: ~ args.outputs.sprites << [760, 470, 128, 101, 'dragonruby.png', 0, args.state.tick_count % 255]~ - Inside source: true *** True Line Result args.outputs.sprites << [760, 470, 128, 101, 'dragonruby.png', 0, args.state.tick_count % 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rendering Basics - Sounds - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rendering Basics - Sounds - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/01_rendering_basics/05_sounds/app/main.rb~ - Inside source: true *** True Line Result # ./samples/01_rendering_basics/05_sounds/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs Listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs Listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - sample: Chooses random element from array.~ - Inside source: true *** True Line Result - sample: Chooses random element from array. ** Processing line: ~ In this sample app, the target note is set by taking a sample from the collection~ - Inside source: true *** True Line Result In this sample app, the target note is set by taking a sample from the collection ** Processing line: ~ of available notes.~ - Inside source: true *** True Line Result of available notes. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated~ - Inside source: true *** True Line Result - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ - Inside source: true *** True Line Result as Ruby code, and the placeholder is replaced with its corresponding value or result. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ - Inside source: true *** True Line Result - args.outputs.labels: An array. The values generate a label. ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ - Inside source: true *** True Line Result For more information about labels, go to mygame/documentation/02-labels.md. ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app allows users to test their musical skills by matching the piano sound that plays in each~ - Inside source: true *** True Line Result # This sample app allows users to test their musical skills by matching the piano sound that plays in each ** Processing line: ~ # level to the correct note.~ - Inside source: true *** True Line Result # level to the correct note. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Runs all the methods necessary for the game to function properly.~ - Inside source: true *** True Line Result # Runs all the methods necessary for the game to function properly. ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.labels << [640, 360, "Click anywhere to play a random sound.", 0, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 360, "Click anywhere to play a random sound.", 0, 1] ** Processing line: ~ args.state.notes ||= [:C3, :D3, :E3, :F3, :G3, :A3, :B3, :C4]~ - Inside source: true *** True Line Result args.state.notes ||= [:C3, :D3, :E3, :F3, :G3, :A3, :B3, :C4] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.mouse.click~ - Inside source: true *** True Line Result if args.inputs.mouse.click ** Processing line: ~ # Play a sound by adding a string to args.outputs.sounds~ - Inside source: true *** True Line Result # Play a sound by adding a string to args.outputs.sounds ** Processing line: ~ args.outputs.sounds << "sounds/#{args.state.notes.sample}.wav" # sound of target note is output~ - Inside source: true *** True Line Result args.outputs.sounds << "sounds/#{args.state.notes.sample}.wav" # sound of target note is output ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Input Basics - Keyboard - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Input Basics - Keyboard - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/02_input_basics/01_keyboard/app/main.rb~ - Inside source: true *** True Line Result # ./samples/02_input_basics/01_keyboard/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in a previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in a previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.keyboard.key_up.KEY: The value of the properties will be set~ - Inside source: true *** True Line Result - args.inputs.keyboard.key_up.KEY: The value of the properties will be set ** Processing line: ~ to the frame that the key_up event occurred (the frame correlates~ - Inside source: true *** True Line Result to the frame that the key_up event occurred (the frame correlates ** Processing line: ~ to args.state.tick_count). Otherwise the value will be nil. For a~ - Inside source: true *** True Line Result to args.state.tick_count). Otherwise the value will be nil. For a ** Processing line: ~ full listing of keys, take a look at mygame/documentation/06-keyboard.md.~ - Inside source: true *** True Line Result full listing of keys, take a look at mygame/documentation/06-keyboard.md. ** Processing line: ~ - args.state.PROPERTY: The state property on args is a dynamic~ - Inside source: true *** True Line Result - args.state.PROPERTY: The state property on args is a dynamic ** Processing line: ~ structure. You can define ANY property here with ANY type of~ - Inside source: true *** True Line Result structure. You can define ANY property here with ANY type of ** Processing line: ~ arbitrary nesting. Properties defined on args.state will be retained~ - Inside source: true *** True Line Result arbitrary nesting. Properties defined on args.state will be retained ** Processing line: ~ across frames. If you attempt access a property that doesn't exist~ - Inside source: true *** True Line Result across frames. If you attempt access a property that doesn't exist ** Processing line: ~ on args.state, it will simply return nil (no exception will be thrown).~ - Inside source: true *** True Line Result on args.state, it will simply return nil (no exception will be thrown). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Along with outputs, inputs are also an essential part of video game development~ - Inside source: true *** True Line Result # Along with outputs, inputs are also an essential part of video game development ** Processing line: ~ # DragonRuby can take input from keyboards, mouse, and controllers.~ - Inside source: true *** True Line Result # DragonRuby can take input from keyboards, mouse, and controllers. ** Processing line: ~ # This sample app will cover keyboard input.~ - Inside source: true *** True Line Result # This sample app will cover keyboard input. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # args.inputs.keyboard.key_up.a will check to see if the a key has been pressed~ - Inside source: true *** True Line Result # args.inputs.keyboard.key_up.a will check to see if the a key has been pressed ** Processing line: ~ # This will work with the other keys as well~ - Inside source: true *** True Line Result # This will work with the other keys as well ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ tick_instructions args, "Sample app shows how keyboard events are registered and accessed.", 360~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows how keyboard events are registered and accessed.", 360 ** Processing line: ~ # Notice how small_font accounts for all the remaining parameters~ - Inside source: true *** True Line Result # Notice how small_font accounts for all the remaining parameters ** Processing line: ~ args.outputs.labels << { x: 460, y: row_to_px(args, 0), text: "Current game time: #{args.state.tick_count}", size_enum: -1 }~ - Inside source: true *** True Line Result args.outputs.labels << { x: 460, y: row_to_px(args, 0), text: "Current game time: #{args.state.tick_count}", size_enum: -1 } ** Processing line: ~ args.outputs.labels << { x: 460, y: row_to_px(args, 2), text: "Keyboard input: args.inputs.keyboard.key_up.h", size_enum: -1 }~ - Inside source: true *** True Line Result args.outputs.labels << { x: 460, y: row_to_px(args, 2), text: "Keyboard input: args.inputs.keyboard.key_up.h", size_enum: -1 } ** Processing line: ~ args.outputs.labels << { x: 460, y: row_to_px(args, 3), text: "Press \"h\" on the keyboard.", size_enum: -1 }~ - Inside source: true *** True Line Result args.outputs.labels << { x: 460, y: row_to_px(args, 3), text: "Press \"h\" on the keyboard.", size_enum: -1 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Input on a specifc key can be found through args.inputs.keyboard.key_up followed by the key~ - Inside source: true *** True Line Result # Input on a specifc key can be found through args.inputs.keyboard.key_up followed by the key ** Processing line: ~ if args.inputs.keyboard.key_up.h~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_up.h ** Processing line: ~ args.state.h_pressed_at = args.state.tick_count~ - Inside source: true *** True Line Result args.state.h_pressed_at = args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This code simplifies to if args.state.h_pressed_at has not been initialized, set it to false~ - Inside source: true *** True Line Result # This code simplifies to if args.state.h_pressed_at has not been initialized, set it to false ** Processing line: ~ args.state.h_pressed_at ||= false~ - Inside source: true *** True Line Result args.state.h_pressed_at ||= false ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.h_pressed_at~ - Inside source: true *** True Line Result if args.state.h_pressed_at ** Processing line: ~ args.outputs.labels << { x: 460, y: row_to_px(args, 4), text: "\"h\" was pressed at time: #{args.state.h_pressed_at}", size_enum: -1 }~ - Inside source: true *** True Line Result args.outputs.labels << { x: 460, y: row_to_px(args, 4), text: "\"h\" was pressed at time: #{args.state.h_pressed_at}", size_enum: -1 } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.outputs.labels << { x: 460, y: row_to_px(args, 4), text: "\"h\" has never been pressed.", size_enum: -1 }~ - Inside source: true *** True Line Result args.outputs.labels << { x: 460, y: row_to_px(args, 4), text: "\"h\" has never been pressed.", size_enum: -1 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ tick_help_text args~ - Inside source: true *** True Line Result tick_help_text args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def row_to_px args, row_number, y_offset = 20~ - Inside source: true *** True Line Result def row_to_px args, row_number, y_offset = 20 ** Processing line: ~ # This takes a row_number and converts it to pixels DragonRuby understands.~ - Inside source: true *** True Line Result # This takes a row_number and converts it to pixels DragonRuby understands. ** Processing line: ~ # Row 0 starts 5 units below the top of the grid~ - Inside source: true *** True Line Result # Row 0 starts 5 units below the top of the grid ** Processing line: ~ # Each row afterward is 20 units lower~ - Inside source: true *** True Line Result # Each row afterward is 20 units lower ** Processing line: ~ args.grid.top - 5 - (y_offset * row_number)~ - Inside source: true *** True Line Result args.grid.top - 5 - (y_offset * row_number) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Don't worry about understanding the code within this method just yet.~ - Inside source: true *** True Line Result # Don't worry about understanding the code within this method just yet. ** Processing line: ~ # This method shows you the help text within the game.~ - Inside source: true *** True Line Result # This method shows you the help text within the game. ** Processing line: ~ def tick_help_text args~ - Inside source: true *** True Line Result def tick_help_text args ** Processing line: ~ return unless args.state.h_pressed_at~ - Inside source: true *** True Line Result return unless args.state.h_pressed_at ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.key_value_history ||= {}~ - Inside source: true *** True Line Result args.state.key_value_history ||= {} ** Processing line: ~ args.state.key_down_value_history ||= {}~ - Inside source: true *** True Line Result args.state.key_down_value_history ||= {} ** Processing line: ~ args.state.key_held_value_history ||= {}~ - Inside source: true *** True Line Result args.state.key_held_value_history ||= {} ** Processing line: ~ args.state.key_up_value_history ||= {}~ - Inside source: true *** True Line Result args.state.key_up_value_history ||= {} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (args.inputs.keyboard.key_down.truthy_keys.length > 0 ||~ - Inside source: true *** True Line Result if (args.inputs.keyboard.key_down.truthy_keys.length > 0 || ** Processing line: ~ args.inputs.keyboard.key_held.truthy_keys.length > 0 ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_held.truthy_keys.length > 0 || ** Processing line: ~ args.inputs.keyboard.key_up.truthy_keys.length > 0)~ - Inside source: true *** True Line Result args.inputs.keyboard.key_up.truthy_keys.length > 0) ** Processing line: ~ args.state.help_available = true~ - Inside source: true *** True Line Result args.state.help_available = true ** Processing line: ~ args.state.no_activity_debounce = nil~ - Inside source: true *** True Line Result args.state.no_activity_debounce = nil ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.no_activity_debounce ||= 5.seconds~ - Inside source: true *** True Line Result args.state.no_activity_debounce ||= 5.seconds ** Processing line: ~ args.state.no_activity_debounce -= 1~ - Inside source: true *** True Line Result args.state.no_activity_debounce -= 1 ** Processing line: ~ if args.state.no_activity_debounce <= 0~ - Inside source: true *** True Line Result if args.state.no_activity_debounce <= 0 ** Processing line: ~ args.state.help_available = false~ - Inside source: true *** True Line Result args.state.help_available = false ** Processing line: ~ args.state.key_value_history = {}~ - Inside source: true *** True Line Result args.state.key_value_history = {} ** Processing line: ~ args.state.key_down_value_history = {}~ - Inside source: true *** True Line Result args.state.key_down_value_history = {} ** Processing line: ~ args.state.key_held_value_history = {}~ - Inside source: true *** True Line Result args.state.key_held_value_history = {} ** Processing line: ~ args.state.key_up_value_history = {}~ - Inside source: true *** True Line Result args.state.key_up_value_history = {} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << { x: 10, y: row_to_px(args, 6), text: "This is the api for the keys you've pressed:", size_enum: -1, r: 180 }~ - Inside source: true *** True Line Result args.outputs.labels << { x: 10, y: row_to_px(args, 6), text: "This is the api for the keys you've pressed:", size_enum: -1, r: 180 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !args.state.help_available~ - Inside source: true *** True Line Result if !args.state.help_available ** Processing line: ~ args.outputs.labels << [10, row_to_px(args, 7), "Press a key and I'll show code to access the key and what value will be returned if you used the code.", small_font]~ - Inside source: true *** True Line Result args.outputs.labels << [10, row_to_px(args, 7), "Press a key and I'll show code to access the key and what value will be returned if you used the code.", small_font] ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << { x: 10 , y: row_to_px(args, 7), text: "args.inputs.keyboard", size_enum: -2 }~ - Inside source: true *** True Line Result args.outputs.labels << { x: 10 , y: row_to_px(args, 7), text: "args.inputs.keyboard", size_enum: -2 } ** Processing line: ~ args.outputs.labels << { x: 330, y: row_to_px(args, 7), text: "args.inputs.keyboard.key_down", size_enum: -2 }~ - Inside source: true *** True Line Result args.outputs.labels << { x: 330, y: row_to_px(args, 7), text: "args.inputs.keyboard.key_down", size_enum: -2 } ** Processing line: ~ args.outputs.labels << { x: 650, y: row_to_px(args, 7), text: "args.inputs.keyboard.key_held", size_enum: -2 }~ - Inside source: true *** True Line Result args.outputs.labels << { x: 650, y: row_to_px(args, 7), text: "args.inputs.keyboard.key_held", size_enum: -2 } ** Processing line: ~ args.outputs.labels << { x: 990, y: row_to_px(args, 7), text: "args.inputs.keyboard.key_up", size_enum: -2 }~ - Inside source: true *** True Line Result args.outputs.labels << { x: 990, y: row_to_px(args, 7), text: "args.inputs.keyboard.key_up", size_enum: -2 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ fill_history args, :key_value_history, :down_or_held, nil~ - Inside source: true *** True Line Result fill_history args, :key_value_history, :down_or_held, nil ** Processing line: ~ fill_history args, :key_down_value_history, :down, :key_down~ - Inside source: true *** True Line Result fill_history args, :key_down_value_history, :down, :key_down ** Processing line: ~ fill_history args, :key_held_value_history, :held, :key_held~ - Inside source: true *** True Line Result fill_history args, :key_held_value_history, :held, :key_held ** Processing line: ~ fill_history args, :key_up_value_history, :up, :key_up~ - Inside source: true *** True Line Result fill_history args, :key_up_value_history, :up, :key_up ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_help_labels args, :key_value_history, :down_or_held, nil, 10~ - Inside source: true *** True Line Result render_help_labels args, :key_value_history, :down_or_held, nil, 10 ** Processing line: ~ render_help_labels args, :key_down_value_history, :down, :key_down, 330~ - Inside source: true *** True Line Result render_help_labels args, :key_down_value_history, :down, :key_down, 330 ** Processing line: ~ render_help_labels args, :key_held_value_history, :held, :key_held, 650~ - Inside source: true *** True Line Result render_help_labels args, :key_held_value_history, :held, :key_held, 650 ** Processing line: ~ render_help_labels args, :key_up_value_history, :up, :key_up, 990~ - Inside source: true *** True Line Result render_help_labels args, :key_up_value_history, :up, :key_up, 990 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def fill_history args, history_key, state_key, keyboard_method~ - Inside source: true *** True Line Result def fill_history args, history_key, state_key, keyboard_method ** Processing line: ~ fill_single_history args, history_key, state_key, keyboard_method, :raw_key~ - Inside source: true *** True Line Result fill_single_history args, history_key, state_key, keyboard_method, :raw_key ** Processing line: ~ fill_single_history args, history_key, state_key, keyboard_method, :char~ - Inside source: true *** True Line Result fill_single_history args, history_key, state_key, keyboard_method, :char ** Processing line: ~ args.inputs.keyboard.keys[state_key].each do |key_name|~ - Inside source: true *** True Line Result args.inputs.keyboard.keys[state_key].each do |key_name| ** Processing line: ~ fill_single_history args, history_key, state_key, keyboard_method, key_name~ - Inside source: true *** True Line Result fill_single_history args, history_key, state_key, keyboard_method, key_name ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def fill_single_history args, history_key, state_key, keyboard_method, key_name~ - Inside source: true *** True Line Result def fill_single_history args, history_key, state_key, keyboard_method, key_name ** Processing line: ~ current_value = args.inputs.keyboard.send(key_name)~ - Inside source: true *** True Line Result current_value = args.inputs.keyboard.send(key_name) ** Processing line: ~ if keyboard_method~ - Inside source: true *** True Line Result if keyboard_method ** Processing line: ~ current_value = args.inputs.keyboard.send(keyboard_method).send(key_name)~ - Inside source: true *** True Line Result current_value = args.inputs.keyboard.send(keyboard_method).send(key_name) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.as_hash[history_key][key_name] ||= []~ - Inside source: true *** True Line Result args.state.as_hash[history_key][key_name] ||= [] ** Processing line: ~ args.state.as_hash[history_key][key_name] << current_value~ - Inside source: true *** True Line Result args.state.as_hash[history_key][key_name] << current_value ** Processing line: ~ args.state.as_hash[history_key][key_name] = args.state.as_hash[history_key][key_name].reverse.uniq.take(3).reverse~ - Inside source: true *** True Line Result args.state.as_hash[history_key][key_name] = args.state.as_hash[history_key][key_name].reverse.uniq.take(3).reverse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_help_labels args, history_key, state_key, keyboard_method, x~ - Inside source: true *** True Line Result def render_help_labels args, history_key, state_key, keyboard_method, x ** Processing line: ~ idx = 8~ - Inside source: true *** True Line Result idx = 8 ** Processing line: ~ args.outputs.labels << args.state~ - Inside source: true *** True Line Result args.outputs.labels << args.state ** Processing line: ~ .as_hash[history_key]~ - Inside source: true *** True Line Result .as_hash[history_key] ** Processing line: ~ .keys~ - Inside source: true *** True Line Result .keys ** Processing line: ~ .reverse~ - Inside source: true *** True Line Result .reverse ** Processing line: ~ .map~ - Inside source: true *** True Line Result .map ** Processing line: ~ .with_index do |k, i|~ - Inside source: true *** True Line Result .with_index do |k, i| ** Processing line: ~ v = args.state.as_hash[history_key][k]~ - Inside source: true *** True Line Result v = args.state.as_hash[history_key][k] ** Processing line: ~ current_value = args.inputs.keyboard.send(k)~ - Inside source: true *** True Line Result current_value = args.inputs.keyboard.send(k) ** Processing line: ~ if keyboard_method~ - Inside source: true *** True Line Result if keyboard_method ** Processing line: ~ current_value = args.inputs.keyboard.send(keyboard_method).send(k)~ - Inside source: true *** True Line Result current_value = args.inputs.keyboard.send(keyboard_method).send(k) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ idx += 2~ - Inside source: true *** True Line Result idx += 2 ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ { x: x, y: row_to_px(args, idx + 0, 16), text: " .#{k} is #{current_value || "nil"}", size_enum: -2 },~ - Inside source: true *** True Line Result { x: x, y: row_to_px(args, idx + 0, 16), text: " .#{k} is #{current_value || "nil"}", size_enum: -2 }, ** Processing line: ~ { x: x, y: row_to_px(args, idx + 1, 16), text: " was #{v}", size_enum: -2 }~ - Inside source: true *** True Line Result { x: x, y: row_to_px(args, idx + 1, 16), text: " was #{v}", size_enum: -2 } ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << { x: 0, y: y - 50, w: 1280, h: 60 }.solid!~ - Inside source: true *** True Line Result args.outputs.debug << { x: 0, y: y - 50, w: 1280, h: 60 }.solid! ** Processing line: ~ args.outputs.debug << { x: 640, y: y, text: text,~ - Inside source: true *** True Line Result args.outputs.debug << { x: 640, y: y, text: text, ** Processing line: ~ size_enum: 1, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ - Inside source: true *** True Line Result size_enum: 1, alignment_enum: 1, r: 255, g: 255, b: 255 }.label! ** Processing line: ~ args.outputs.debug << { x: 640, y: y - 25, text: "(click to dismiss instructions)",~ - Inside source: true *** True Line Result args.outputs.debug << { x: 640, y: y - 25, text: "(click to dismiss instructions)", ** Processing line: ~ size_enum: -2, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ - Inside source: true *** True Line Result size_enum: -2, alignment_enum: 1, r: 255, g: 255, b: 255 }.label! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Input Basics - Moving A Sprite - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Input Basics - Moving A Sprite - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/02_input_basics/01_moving_a_sprite/app/main.rb~ - Inside source: true *** True Line Result # ./samples/02_input_basics/01_moving_a_sprite/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # create a player and set default values~ - Inside source: true *** True Line Result # create a player and set default values ** Processing line: ~ # for the player's x, y, w (width), and h (height)~ - Inside source: true *** True Line Result # for the player's x, y, w (width), and h (height) ** Processing line: ~ args.state.player.x ||= 100~ - Inside source: true *** True Line Result args.state.player.x ||= 100 ** Processing line: ~ args.state.player.y ||= 100~ - Inside source: true *** True Line Result args.state.player.y ||= 100 ** Processing line: ~ args.state.player.w ||= 50~ - Inside source: true *** True Line Result args.state.player.w ||= 50 ** Processing line: ~ args.state.player.h ||= 50~ - Inside source: true *** True Line Result args.state.player.h ||= 50 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render the player to the screen~ - Inside source: true *** True Line Result # render the player to the screen ** Processing line: ~ args.outputs.sprites << { x: args.state.player.x,~ - Inside source: true *** True Line Result args.outputs.sprites << { x: args.state.player.x, ** Processing line: ~ y: args.state.player.y,~ - Inside source: true *** True Line Result y: args.state.player.y, ** Processing line: ~ w: args.state.player.w,~ - Inside source: true *** True Line Result w: args.state.player.w, ** Processing line: ~ h: args.state.player.h,~ - Inside source: true *** True Line Result h: args.state.player.h, ** Processing line: ~ path: 'sprites/square/green.png' }~ - Inside source: true *** True Line Result path: 'sprites/square/green.png' } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # move the player around using the keyboard~ - Inside source: true *** True Line Result # move the player around using the keyboard ** Processing line: ~ if args.inputs.up~ - Inside source: true *** True Line Result if args.inputs.up ** Processing line: ~ args.state.player.y += 10~ - Inside source: true *** True Line Result args.state.player.y += 10 ** Processing line: ~ elsif args.inputs.down~ - Inside source: true *** True Line Result elsif args.inputs.down ** Processing line: ~ args.state.player.y -= 10~ - Inside source: true *** True Line Result args.state.player.y -= 10 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.left~ - Inside source: true *** True Line Result if args.inputs.left ** Processing line: ~ args.state.player.x -= 10~ - Inside source: true *** True Line Result args.state.player.x -= 10 ** Processing line: ~ elsif args.inputs.right~ - Inside source: true *** True Line Result elsif args.inputs.right ** Processing line: ~ args.state.player.x += 10~ - Inside source: true *** True Line Result args.state.player.x += 10 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Input Basics - Mouse - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Input Basics - Mouse - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/02_input_basics/02_mouse/app/main.rb~ - Inside source: true *** True Line Result # ./samples/02_input_basics/02_mouse/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs that haven't been encountered in a previous sample apps:~ - Inside source: true *** True Line Result APIs that haven't been encountered in a previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.mouse.click: This property will be set if the mouse was clicked.~ - Inside source: true *** True Line Result - args.inputs.mouse.click: This property will be set if the mouse was clicked. ** Processing line: ~ - args.inputs.mouse.click.point.(x|y): The x and y location of the mouse.~ - Inside source: true *** True Line Result - args.inputs.mouse.click.point.(x|y): The x and y location of the mouse. ** Processing line: ~ - args.inputs.mouse.click.point.created_at: The frame the mouse click occurred in.~ - Inside source: true *** True Line Result - args.inputs.mouse.click.point.created_at: The frame the mouse click occurred in. ** Processing line: ~ - args.inputs.mouse.click.point.created_at_elapsed: How many frames have passed~ - Inside source: true *** True Line Result - args.inputs.mouse.click.point.created_at_elapsed: How many frames have passed ** Processing line: ~ since the click event.~ - Inside source: true *** True Line Result since the click event. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminder:~ - Inside source: true *** True Line Result Reminder: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.state.PROPERTY: The state property on args is a dynamic~ - Inside source: true *** True Line Result - args.state.PROPERTY: The state property on args is a dynamic ** Processing line: ~ structure. You can define ANY property here with ANY type of~ - Inside source: true *** True Line Result structure. You can define ANY property here with ANY type of ** Processing line: ~ arbitrary nesting. Properties defined on args.state will be retained~ - Inside source: true *** True Line Result arbitrary nesting. Properties defined on args.state will be retained ** Processing line: ~ across frames. If you attempt access a property that doesn't exist~ - Inside source: true *** True Line Result across frames. If you attempt access a property that doesn't exist ** Processing line: ~ on args.state, it will simply return nil (no exception will be thrown).~ - Inside source: true *** True Line Result on args.state, it will simply return nil (no exception will be thrown). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This code demonstrates DragonRuby mouse input~ - Inside source: true *** True Line Result # This code demonstrates DragonRuby mouse input ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # To see if the a mouse click occurred~ - Inside source: true *** True Line Result # To see if the a mouse click occurred ** Processing line: ~ # Use args.inputs.mouse.click~ - Inside source: true *** True Line Result # Use args.inputs.mouse.click ** Processing line: ~ # Which returns a boolean~ - Inside source: true *** True Line Result # Which returns a boolean ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # To see where a mouse click occurred~ - Inside source: true *** True Line Result # To see where a mouse click occurred ** Processing line: ~ # Use args.inputs.mouse.click.point.x AND~ - Inside source: true *** True Line Result # Use args.inputs.mouse.click.point.x AND ** Processing line: ~ # args.inputs.mouse.click.point.y~ - Inside source: true *** True Line Result # args.inputs.mouse.click.point.y ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # To see which frame the click occurred~ - Inside source: true *** True Line Result # To see which frame the click occurred ** Processing line: ~ # Use args.inputs.mouse.click.created_at~ - Inside source: true *** True Line Result # Use args.inputs.mouse.click.created_at ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # To see how many frames its been since the click occurred~ - Inside source: true *** True Line Result # To see how many frames its been since the click occurred ** Processing line: ~ # Use args.inputs.mouse.click.created_at_elapsed~ - Inside source: true *** True Line Result # Use args.inputs.mouse.click.created_at_elapsed ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Saving the click in args.state can be quite useful~ - Inside source: true *** True Line Result # Saving the click in args.state can be quite useful ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ tick_instructions args, "Sample app shows how mouse events are registered and how to measure elapsed time."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows how mouse events are registered and how to measure elapsed time." ** Processing line: ~ x = 460~ - Inside source: true *** True Line Result x = 460 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << small_label(args, x, 11, "Mouse input: args.inputs.mouse")~ - Inside source: true *** True Line Result args.outputs.labels << small_label(args, x, 11, "Mouse input: args.inputs.mouse") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.mouse.click~ - Inside source: true *** True Line Result if args.inputs.mouse.click ** Processing line: ~ args.state.last_mouse_click = args.inputs.mouse.click~ - Inside source: true *** True Line Result args.state.last_mouse_click = args.inputs.mouse.click ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.last_mouse_click~ - Inside source: true *** True Line Result if args.state.last_mouse_click ** Processing line: ~ click = args.state.last_mouse_click~ - Inside source: true *** True Line Result click = args.state.last_mouse_click ** Processing line: ~ args.outputs.labels << small_label(args, x, 12, "Mouse click happened at: #{click.created_at}")~ - Inside source: true *** True Line Result args.outputs.labels << small_label(args, x, 12, "Mouse click happened at: #{click.created_at}") ** Processing line: ~ args.outputs.labels << small_label(args, x, 13, "Mouse clicked #{click.created_at_elapsed} ticks ago")~ - Inside source: true *** True Line Result args.outputs.labels << small_label(args, x, 13, "Mouse clicked #{click.created_at_elapsed} ticks ago") ** Processing line: ~ args.outputs.labels << small_label(args, x, 14, "Mouse click location: #{click.point.x}, #{click.point.y}")~ - Inside source: true *** True Line Result args.outputs.labels << small_label(args, x, 14, "Mouse click location: #{click.point.x}, #{click.point.y}") ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.outputs.labels << small_label(args, x, 12, "Mouse click has not occurred yet.")~ - Inside source: true *** True Line Result args.outputs.labels << small_label(args, x, 12, "Mouse click has not occurred yet.") ** Processing line: ~ args.outputs.labels << small_label(args, x, 13, "Please click mouse.")~ - Inside source: true *** True Line Result args.outputs.labels << small_label(args, x, 13, "Please click mouse.") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def small_label args, x, row, message~ - Inside source: true *** True Line Result def small_label args, x, row, message ** Processing line: ~ # This method effectively combines the row_to_px and small_font methods~ - Inside source: true *** True Line Result # This method effectively combines the row_to_px and small_font methods ** Processing line: ~ # It changes the given row value to a DragonRuby pixel value~ - Inside source: true *** True Line Result # It changes the given row value to a DragonRuby pixel value ** Processing line: ~ # and adds the customization parameters~ - Inside source: true *** True Line Result # and adds the customization parameters ** Processing line: ~ { x: x, y: row_to_px(args, row), text: message, alignment_enum: -2 }~ - Inside source: true *** True Line Result { x: x, y: row_to_px(args, row), text: message, alignment_enum: -2 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def row_to_px args, row_number~ - Inside source: true *** True Line Result def row_to_px args, row_number ** Processing line: ~ args.grid.top.shift_down(5).shift_down(20 * row_number)~ - Inside source: true *** True Line Result args.grid.top.shift_down(5).shift_down(20 * row_number) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << { x: 0, y: y - 50, w: 1280, h: 60 }.solid!~ - Inside source: true *** True Line Result args.outputs.debug << { x: 0, y: y - 50, w: 1280, h: 60 }.solid! ** Processing line: ~ args.outputs.debug << { x: 640, y: y, text: text, size_enum: 1, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ - Inside source: true *** True Line Result args.outputs.debug << { x: 640, y: y, text: text, size_enum: 1, alignment_enum: 1, r: 255, g: 255, b: 255 }.label! ** Processing line: ~ args.outputs.debug << { x: 640, y: y - 25, text: "(click to dismiss instructions)", size_enum: -2, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ - Inside source: true *** True Line Result args.outputs.debug << { x: 640, y: y - 25, text: "(click to dismiss instructions)", size_enum: -2, alignment_enum: 1, r: 255, g: 255, b: 255 }.label! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Input Basics - Mouse Point To Rect - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Input Basics - Mouse Point To Rect - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/02_input_basics/03_mouse_point_to_rect/app/main.rb~ - Inside source: true *** True Line Result # ./samples/02_input_basics/03_mouse_point_to_rect/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs that haven't been encountered in a previous sample apps:~ - Inside source: true *** True Line Result APIs that haven't been encountered in a previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputus.borders: An array. Values in this array will be rendered as~ - Inside source: true *** True Line Result - args.outputus.borders: An array. Values in this array will be rendered as ** Processing line: ~ unfilled rectangles on the screen.~ - Inside source: true *** True Line Result unfilled rectangles on the screen. ** Processing line: ~ - ARRAY#inside_rect?: An array with at least two values is considered a point. An array~ - Inside source: true *** True Line Result - ARRAY#inside_rect?: An array with at least two values is considered a point. An array ** Processing line: ~ with at least four values is considered a rect. The inside_rect? function returns true~ - Inside source: true *** True Line Result with at least four values is considered a rect. The inside_rect? function returns true ** Processing line: ~ or false depending on if the point is inside the rect.~ - Inside source: true *** True Line Result or false depending on if the point is inside the rect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ```~ - Inside source: true *** True Line Result ``` ** Processing line: ~ # Point: x: 100, y: 100~ - Inside source: true *** True Line Result # Point: x: 100, y: 100 ** Processing line: ~ # Rect: x: 0, y: 0, w: 500, h: 500~ - Inside source: true *** True Line Result # Rect: x: 0, y: 0, w: 500, h: 500 ** Processing line: ~ # Result: true~ - Inside source: true *** True Line Result # Result: true ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [100, 100].inside_rect? [0, 0, 500, 500]~ - Inside source: true *** True Line Result [100, 100].inside_rect? [0, 0, 500, 500] ** Processing line: ~ ```~ - Inside source: true *** True Line Result ``` ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ```~ - Inside source: true *** True Line Result ``` ** Processing line: ~ # Point: x: 100, y: 100~ - Inside source: true *** True Line Result # Point: x: 100, y: 100 ** Processing line: ~ # Rect: x: 300, y: 300, w: 100, h: 100~ - Inside source: true *** True Line Result # Rect: x: 300, y: 300, w: 100, h: 100 ** Processing line: ~ # Result: false~ - Inside source: true *** True Line Result # Result: false ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [100, 100].inside_rect? [300, 300, 100, 100]~ - Inside source: true *** True Line Result [100, 100].inside_rect? [300, 300, 100, 100] ** Processing line: ~ ```~ - Inside source: true *** True Line Result ``` ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.mouse.click.point.created_at: The frame the mouse click occurred in.~ - Inside source: true *** True Line Result - args.inputs.mouse.click.point.created_at: The frame the mouse click occurred in. ** Processing line: ~ - args.inputs.mouse.click.point.created_at_elapsed: How many frames have passed~ - Inside source: true *** True Line Result - args.inputs.mouse.click.point.created_at_elapsed: How many frames have passed ** Processing line: ~ since the click event.~ - Inside source: true *** True Line Result since the click event. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # To determine whether a point is in a rect~ - Inside source: true *** True Line Result # To determine whether a point is in a rect ** Processing line: ~ # Use point.inside_rect? rect~ - Inside source: true *** True Line Result # Use point.inside_rect? rect ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This is useful to determine if a click occurred in a rect~ - Inside source: true *** True Line Result # This is useful to determine if a click occurred in a rect ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ tick_instructions args, "Sample app shows how to determing if a click happened inside a rectangle."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows how to determing if a click happened inside a rectangle." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ x = 460~ - Inside source: true *** True Line Result x = 460 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << small_label(args, x, 15, "Click inside the blue box maybe ---->")~ - Inside source: true *** True Line Result args.outputs.labels << small_label(args, x, 15, "Click inside the blue box maybe ---->") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ box = { x: 785, y: 370, w: 50, h: 50, r: 0, g: 0, b: 170 }~ - Inside source: true *** True Line Result box = { x: 785, y: 370, w: 50, h: 50, r: 0, g: 0, b: 170 } ** Processing line: ~ args.outputs.borders << box~ - Inside source: true *** True Line Result args.outputs.borders << box ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Saves the most recent click into args.state~ - Inside source: true *** True Line Result # Saves the most recent click into args.state ** Processing line: ~ # Unlike the other components of args,~ - Inside source: true *** True Line Result # Unlike the other components of args, ** Processing line: ~ # args.state does not reset every tick.~ - Inside source: true *** True Line Result # args.state does not reset every tick. ** Processing line: ~ if args.inputs.mouse.click~ - Inside source: true *** True Line Result if args.inputs.mouse.click ** Processing line: ~ args.state.last_mouse_click = args.inputs.mouse.click~ - Inside source: true *** True Line Result args.state.last_mouse_click = args.inputs.mouse.click ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.last_mouse_click~ - Inside source: true *** True Line Result if args.state.last_mouse_click ** Processing line: ~ if args.state.last_mouse_click.point.inside_rect? box~ - Inside source: true *** True Line Result if args.state.last_mouse_click.point.inside_rect? box ** Processing line: ~ args.outputs.labels << small_label(args, x, 16, "Mouse click happened *inside* the box.")~ - Inside source: true *** True Line Result args.outputs.labels << small_label(args, x, 16, "Mouse click happened *inside* the box.") ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.outputs.labels << small_label(args, x, 16, "Mouse click happened *outside* the box.")~ - Inside source: true *** True Line Result args.outputs.labels << small_label(args, x, 16, "Mouse click happened *outside* the box.") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.outputs.labels << small_label(args, x, 16, "Mouse click has not occurred yet.")~ - Inside source: true *** True Line Result args.outputs.labels << small_label(args, x, 16, "Mouse click has not occurred yet.") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def small_label args, x, row, message~ - Inside source: true *** True Line Result def small_label args, x, row, message ** Processing line: ~ { x: x, y: row_to_px(args, row), text: message, size_enum: -2 }~ - Inside source: true *** True Line Result { x: x, y: row_to_px(args, row), text: message, size_enum: -2 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def row_to_px args, row_number~ - Inside source: true *** True Line Result def row_to_px args, row_number ** Processing line: ~ args.grid.top.shift_down(5).shift_down(20 * row_number)~ - Inside source: true *** True Line Result args.grid.top.shift_down(5).shift_down(20 * row_number) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << { x: 0, y: y - 50, w: 1280, h: 60 }.solid!~ - Inside source: true *** True Line Result args.outputs.debug << { x: 0, y: y - 50, w: 1280, h: 60 }.solid! ** Processing line: ~ args.outputs.debug << { x: 640, y: y, text: text, size_enum: 1, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ - Inside source: true *** True Line Result args.outputs.debug << { x: 640, y: y, text: text, size_enum: 1, alignment_enum: 1, r: 255, g: 255, b: 255 }.label! ** Processing line: ~ args.outputs.debug << { x: 640, y: y - 25, text: "(click to dismiss instructions)", size_enum: -2, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ - Inside source: true *** True Line Result args.outputs.debug << { x: 640, y: y - 25, text: "(click to dismiss instructions)", size_enum: -2, alignment_enum: 1, r: 255, g: 255, b: 255 }.label! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Input Basics - Mouse Rect To Rect - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Input Basics - Mouse Rect To Rect - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/02_input_basics/04_mouse_rect_to_rect/app/main.rb~ - Inside source: true *** True Line Result # ./samples/02_input_basics/04_mouse_rect_to_rect/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs that haven't been encountered in a previous sample apps:~ - Inside source: true *** True Line Result APIs that haven't been encountered in a previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.borders: An array. Values in this array will be rendered as~ - Inside source: true *** True Line Result - args.outputs.borders: An array. Values in this array will be rendered as ** Processing line: ~ unfilled rectangles on the screen.~ - Inside source: true *** True Line Result unfilled rectangles on the screen. ** Processing line: ~ - ARRAY#intersect_rect?: An array with at least four values is~ - Inside source: true *** True Line Result - ARRAY#intersect_rect?: An array with at least four values is ** Processing line: ~ considered a rect. The intersect_rect? function returns true~ - Inside source: true *** True Line Result considered a rect. The intersect_rect? function returns true ** Processing line: ~ or false depending on if the two rectangles intersect.~ - Inside source: true *** True Line Result or false depending on if the two rectangles intersect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ```~ - Inside source: true *** True Line Result ``` ** Processing line: ~ # Rect One: x: 100, y: 100, w: 100, h: 100~ - Inside source: true *** True Line Result # Rect One: x: 100, y: 100, w: 100, h: 100 ** Processing line: ~ # Rect Two: x: 0, y: 0, w: 500, h: 500~ - Inside source: true *** True Line Result # Rect Two: x: 0, y: 0, w: 500, h: 500 ** Processing line: ~ # Result: true~ - Inside source: true *** True Line Result # Result: true ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [100, 100, 100, 100].intersect_rect? [0, 0, 500, 500]~ - Inside source: true *** True Line Result [100, 100, 100, 100].intersect_rect? [0, 0, 500, 500] ** Processing line: ~ ```~ - Inside source: true *** True Line Result ``` ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ```~ - Inside source: true *** True Line Result ``` ** Processing line: ~ # Rect One: x: 100, y: 100, w: 10, h: 10~ - Inside source: true *** True Line Result # Rect One: x: 100, y: 100, w: 10, h: 10 ** Processing line: ~ # Rect Two: x: 500, y: 500, w: 10, h: 10~ - Inside source: true *** True Line Result # Rect Two: x: 500, y: 500, w: 10, h: 10 ** Processing line: ~ # Result: false~ - Inside source: true *** True Line Result # Result: false ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [100, 100, 10, 10].intersect_rect? [500, 500, 10, 10]~ - Inside source: true *** True Line Result [100, 100, 10, 10].intersect_rect? [500, 500, 10, 10] ** Processing line: ~ ```~ - Inside source: true *** True Line Result ``` ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Similarly, whether rects intersect can be found through~ - Inside source: true *** True Line Result # Similarly, whether rects intersect can be found through ** Processing line: ~ # rect1.intersect_rect? rect2~ - Inside source: true *** True Line Result # rect1.intersect_rect? rect2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ tick_instructions args, "Sample app shows how to determine if two rectangles intersect."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows how to determine if two rectangles intersect." ** Processing line: ~ x = 460~ - Inside source: true *** True Line Result x = 460 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << small_label(args, x, 3, "Click anywhere on the screen")~ - Inside source: true *** True Line Result args.outputs.labels << small_label(args, x, 3, "Click anywhere on the screen") ** Processing line: ~ # red_box = [460, 250, 355, 90, 170, 0, 0]~ - Inside source: true *** True Line Result # red_box = [460, 250, 355, 90, 170, 0, 0] ** Processing line: ~ # args.outputs.borders << red_box~ - Inside source: true *** True Line Result # args.outputs.borders << red_box ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # args.state.box_collision_one and args.state.box_collision_two~ - Inside source: true *** True Line Result # args.state.box_collision_one and args.state.box_collision_two ** Processing line: ~ # Are given values of a solid when they should be rendered~ - Inside source: true *** True Line Result # Are given values of a solid when they should be rendered ** Processing line: ~ # They are stored in game so that they do not get reset every tick~ - Inside source: true *** True Line Result # They are stored in game so that they do not get reset every tick ** Processing line: ~ if args.inputs.mouse.click~ - Inside source: true *** True Line Result if args.inputs.mouse.click ** Processing line: ~ if !args.state.box_collision_one~ - Inside source: true *** True Line Result if !args.state.box_collision_one ** Processing line: ~ args.state.box_collision_one = { x: args.inputs.mouse.click.point.x - 25,~ - Inside source: true *** True Line Result args.state.box_collision_one = { x: args.inputs.mouse.click.point.x - 25, ** Processing line: ~ y: args.inputs.mouse.click.point.y - 25,~ - Inside source: true *** True Line Result y: args.inputs.mouse.click.point.y - 25, ** Processing line: ~ w: 125, h: 125,~ - Inside source: true *** True Line Result w: 125, h: 125, ** Processing line: ~ r: 180, g: 0, b: 0, a: 180 }~ - Inside source: true *** True Line Result r: 180, g: 0, b: 0, a: 180 } ** Processing line: ~ elsif !args.state.box_collision_two~ - Inside source: true *** True Line Result elsif !args.state.box_collision_two ** Processing line: ~ args.state.box_collision_two = { x: args.inputs.mouse.click.point.x - 25,~ - Inside source: true *** True Line Result args.state.box_collision_two = { x: args.inputs.mouse.click.point.x - 25, ** Processing line: ~ y: args.inputs.mouse.click.point.y - 25,~ - Inside source: true *** True Line Result y: args.inputs.mouse.click.point.y - 25, ** Processing line: ~ w: 125, h: 125,~ - Inside source: true *** True Line Result w: 125, h: 125, ** Processing line: ~ r: 0, g: 0, b: 180, a: 180 }~ - Inside source: true *** True Line Result r: 0, g: 0, b: 180, a: 180 } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.box_collision_one = nil~ - Inside source: true *** True Line Result args.state.box_collision_one = nil ** Processing line: ~ args.state.box_collision_two = nil~ - Inside source: true *** True Line Result args.state.box_collision_two = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.box_collision_one~ - Inside source: true *** True Line Result if args.state.box_collision_one ** Processing line: ~ args.outputs.solids << args.state.box_collision_one~ - Inside source: true *** True Line Result args.outputs.solids << args.state.box_collision_one ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.box_collision_two~ - Inside source: true *** True Line Result if args.state.box_collision_two ** Processing line: ~ args.outputs.solids << args.state.box_collision_two~ - Inside source: true *** True Line Result args.outputs.solids << args.state.box_collision_two ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.box_collision_one && args.state.box_collision_two~ - Inside source: true *** True Line Result if args.state.box_collision_one && args.state.box_collision_two ** Processing line: ~ if args.state.box_collision_one.intersect_rect? args.state.box_collision_two~ - Inside source: true *** True Line Result if args.state.box_collision_one.intersect_rect? args.state.box_collision_two ** Processing line: ~ args.outputs.labels << small_label(args, x, 4, 'The boxes intersect.')~ - Inside source: true *** True Line Result args.outputs.labels << small_label(args, x, 4, 'The boxes intersect.') ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.outputs.labels << small_label(args, x, 4, 'The boxes do not intersect.')~ - Inside source: true *** True Line Result args.outputs.labels << small_label(args, x, 4, 'The boxes do not intersect.') ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.outputs.labels << small_label(args, x, 4, '--')~ - Inside source: true *** True Line Result args.outputs.labels << small_label(args, x, 4, '--') ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def small_label args, x, row, message~ - Inside source: true *** True Line Result def small_label args, x, row, message ** Processing line: ~ { x: x, y: row_to_px(args, row), text: message, size_enum: -2 }~ - Inside source: true *** True Line Result { x: x, y: row_to_px(args, row), text: message, size_enum: -2 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def row_to_px args, row_number~ - Inside source: true *** True Line Result def row_to_px args, row_number ** Processing line: ~ args.grid.top - 5 - (20 * row_number)~ - Inside source: true *** True Line Result args.grid.top - 5 - (20 * row_number) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Input Basics - Controller - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Input Basics - Controller - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/02_input_basics/05_controller/app/main.rb~ - Inside source: true *** True Line Result # ./samples/02_input_basics/05_controller/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.controller_one.key_held.KEY: Will check to see if a specific key~ - Inside source: true *** True Line Result - args.inputs.controller_one.key_held.KEY: Will check to see if a specific key ** Processing line: ~ is being held down on the controller.~ - Inside source: true *** True Line Result is being held down on the controller. ** Processing line: ~ If there is more than one controller being used, they can be differentiated by~ - Inside source: true *** True Line Result If there is more than one controller being used, they can be differentiated by ** Processing line: ~ using names like controller_one and controller_two.~ - Inside source: true *** True Line Result using names like controller_one and controller_two. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ For a full listing of buttons, take a look at mygame/documentation/08-controllers.md.~ - Inside source: true *** True Line Result For a full listing of buttons, take a look at mygame/documentation/08-controllers.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminder:~ - Inside source: true *** True Line Result Reminder: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.state.PROPERTY: The state property on args is a dynamic~ - Inside source: true *** True Line Result - args.state.PROPERTY: The state property on args is a dynamic ** Processing line: ~ structure. You can define ANY property here with ANY type of~ - Inside source: true *** True Line Result structure. You can define ANY property here with ANY type of ** Processing line: ~ arbitrary nesting. Properties defined on args.state will be retained~ - Inside source: true *** True Line Result arbitrary nesting. Properties defined on args.state will be retained ** Processing line: ~ across frames. If you attempt to access a property that doesn't exist~ - Inside source: true *** True Line Result across frames. If you attempt to access a property that doesn't exist ** Processing line: ~ on args.state, it will simply return nil (no exception will be thrown).~ - Inside source: true *** True Line Result on args.state, it will simply return nil (no exception will be thrown). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ In this sample app, args.state.BUTTONS is an array that stores the buttons of the controller.~ - Inside source: true *** True Line Result In this sample app, args.state.BUTTONS is an array that stores the buttons of the controller. ** Processing line: ~ The parameters of a button are:~ - Inside source: true *** True Line Result The parameters of a button are: ** Processing line: ~ 1. the position (x, y)~ - Inside source: true *** True Line Result 1. the position (x, y) ** Processing line: ~ 2. the input key held on the controller~ - Inside source: true *** True Line Result 2. the input key held on the controller ** Processing line: ~ 3. the text or name of the button~ - Inside source: true *** True Line Result 3. the text or name of the button ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app provides a visual demonstration of a standard controller, including~ - Inside source: true *** True Line Result # This sample app provides a visual demonstration of a standard controller, including ** Processing line: ~ # the placement and function of all buttons.~ - Inside source: true *** True Line Result # the placement and function of all buttons. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class ControllerDemo~ - Inside source: true *** True Line Result class ControllerDemo ** Processing line: ~ attr_accessor :inputs, :state, :outputs~ - Inside source: true *** True Line Result attr_accessor :inputs, :state, :outputs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls the methods necessary for the app to run successfully.~ - Inside source: true *** True Line Result # Calls the methods necessary for the app to run successfully. ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ process_inputs~ - Inside source: true *** True Line Result process_inputs ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Starts with an empty collection of buttons.~ - Inside source: true *** True Line Result # Starts with an empty collection of buttons. ** Processing line: ~ # Adds buttons that are on the controller to the collection.~ - Inside source: true *** True Line Result # Adds buttons that are on the controller to the collection. ** Processing line: ~ def process_inputs~ - Inside source: true *** True Line Result def process_inputs ** Processing line: ~ state.buttons = []~ - Inside source: true *** True Line Result state.buttons = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.buttons << { x: 100, y: 500, active: inputs.controller_one.key_held.l1, text: "L1"}~ - Inside source: true *** True Line Result state.buttons << { x: 100, y: 500, active: inputs.controller_one.key_held.l1, text: "L1"} ** Processing line: ~ state.buttons << { x: 100, y: 600, active: inputs.controller_one.key_held.l2, text: "L2"}~ - Inside source: true *** True Line Result state.buttons << { x: 100, y: 600, active: inputs.controller_one.key_held.l2, text: "L2"} ** Processing line: ~ state.buttons << { x: 1100, y: 500, active: inputs.controller_one.key_held.r1, text: "R1"}~ - Inside source: true *** True Line Result state.buttons << { x: 1100, y: 500, active: inputs.controller_one.key_held.r1, text: "R1"} ** Processing line: ~ state.buttons << { x: 1100, y: 600, active: inputs.controller_one.key_held.r2, text: "R2"}~ - Inside source: true *** True Line Result state.buttons << { x: 1100, y: 600, active: inputs.controller_one.key_held.r2, text: "R2"} ** Processing line: ~ state.buttons << { x: 540, y: 450, active: inputs.controller_one.key_held.select, text: "Select"}~ - Inside source: true *** True Line Result state.buttons << { x: 540, y: 450, active: inputs.controller_one.key_held.select, text: "Select"} ** Processing line: ~ state.buttons << { x: 660, y: 450, active: inputs.controller_one.key_held.start, text: "Start"}~ - Inside source: true *** True Line Result state.buttons << { x: 660, y: 450, active: inputs.controller_one.key_held.start, text: "Start"} ** Processing line: ~ state.buttons << { x: 200, y: 300, active: inputs.controller_one.key_held.left, text: "Left"}~ - Inside source: true *** True Line Result state.buttons << { x: 200, y: 300, active: inputs.controller_one.key_held.left, text: "Left"} ** Processing line: ~ state.buttons << { x: 300, y: 400, active: inputs.controller_one.key_held.up, text: "Up"}~ - Inside source: true *** True Line Result state.buttons << { x: 300, y: 400, active: inputs.controller_one.key_held.up, text: "Up"} ** Processing line: ~ state.buttons << { x: 400, y: 300, active: inputs.controller_one.key_held.right, text: "Right"}~ - Inside source: true *** True Line Result state.buttons << { x: 400, y: 300, active: inputs.controller_one.key_held.right, text: "Right"} ** Processing line: ~ state.buttons << { x: 300, y: 200, active: inputs.controller_one.key_held.down, text: "Down"}~ - Inside source: true *** True Line Result state.buttons << { x: 300, y: 200, active: inputs.controller_one.key_held.down, text: "Down"} ** Processing line: ~ state.buttons << { x: 800, y: 300, active: inputs.controller_one.key_held.x, text: "X"}~ - Inside source: true *** True Line Result state.buttons << { x: 800, y: 300, active: inputs.controller_one.key_held.x, text: "X"} ** Processing line: ~ state.buttons << { x: 900, y: 400, active: inputs.controller_one.key_held.y, text: "Y"}~ - Inside source: true *** True Line Result state.buttons << { x: 900, y: 400, active: inputs.controller_one.key_held.y, text: "Y"} ** Processing line: ~ state.buttons << { x: 1000, y: 300, active: inputs.controller_one.key_held.a, text: "A"}~ - Inside source: true *** True Line Result state.buttons << { x: 1000, y: 300, active: inputs.controller_one.key_held.a, text: "A"} ** Processing line: ~ state.buttons << { x: 900, y: 200, active: inputs.controller_one.key_held.b, text: "B"}~ - Inside source: true *** True Line Result state.buttons << { x: 900, y: 200, active: inputs.controller_one.key_held.b, text: "B"} ** Processing line: ~ state.buttons << { x: 450 + inputs.controller_one.left_analog_x_perc * 100,~ - Inside source: true *** True Line Result state.buttons << { x: 450 + inputs.controller_one.left_analog_x_perc * 100, ** Processing line: ~ y: 100 + inputs.controller_one.left_analog_y_perc * 100,~ - Inside source: true *** True Line Result y: 100 + inputs.controller_one.left_analog_y_perc * 100, ** Processing line: ~ active: inputs.controller_one.key_held.l3,~ - Inside source: true *** True Line Result active: inputs.controller_one.key_held.l3, ** Processing line: ~ text: "L3" }~ - Inside source: true *** True Line Result text: "L3" } ** Processing line: ~ state.buttons << { x: 750 + inputs.controller_one.right_analog_x_perc * 100,~ - Inside source: true *** True Line Result state.buttons << { x: 750 + inputs.controller_one.right_analog_x_perc * 100, ** Processing line: ~ y: 100 + inputs.controller_one.right_analog_y_perc * 100,~ - Inside source: true *** True Line Result y: 100 + inputs.controller_one.right_analog_y_perc * 100, ** Processing line: ~ active: inputs.controller_one.key_held.r3,~ - Inside source: true *** True Line Result active: inputs.controller_one.key_held.r3, ** Processing line: ~ text: "R3" }~ - Inside source: true *** True Line Result text: "R3" } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Gives each button a square shape.~ - Inside source: true *** True Line Result # Gives each button a square shape. ** Processing line: ~ # If the button is being pressed or held (which means it is considered active),~ - Inside source: true *** True Line Result # If the button is being pressed or held (which means it is considered active), ** Processing line: ~ # the square is filled in. Otherwise, the button simply has a border.~ - Inside source: true *** True Line Result # the square is filled in. Otherwise, the button simply has a border. ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ state.buttons.each do |b|~ - Inside source: true *** True Line Result state.buttons.each do |b| ** Processing line: ~ rect = { x: b.x, y: b.y, w: 75, h: 75 }~ - Inside source: true *** True Line Result rect = { x: b.x, y: b.y, w: 75, h: 75 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if b.active # if button is pressed~ - Inside source: true *** True Line Result if b.active # if button is pressed ** Processing line: ~ outputs.solids << rect # rect is output as solid (filled in)~ - Inside source: true *** True Line Result outputs.solids << rect # rect is output as solid (filled in) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ outputs.borders << rect # otherwise, output as border~ - Inside source: true *** True Line Result outputs.borders << rect # otherwise, output as border ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs the text of each button using labels.~ - Inside source: true *** True Line Result # Outputs the text of each button using labels. ** Processing line: ~ outputs.labels << { x: b.x, y: b.y + 95, text: b.text } # add 95 to place label above button~ - Inside source: true *** True Line Result outputs.labels << { x: b.x, y: b.y + 95, text: b.text } # add 95 to place label above button ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << { x: 10, y: 60, text: "Left Analog x: #{inputs.controller_one.left_analog_x_raw} (#{inputs.controller_one.left_analog_x_perc * 100}%)" }~ - Inside source: true *** True Line Result outputs.labels << { x: 10, y: 60, text: "Left Analog x: #{inputs.controller_one.left_analog_x_raw} (#{inputs.controller_one.left_analog_x_perc * 100}%)" } ** Processing line: ~ outputs.labels << { x: 10, y: 30, text: "Left Analog y: #{inputs.controller_one.left_analog_y_raw} (#{inputs.controller_one.left_analog_y_perc * 100}%)" }~ - Inside source: true *** True Line Result outputs.labels << { x: 10, y: 30, text: "Left Analog y: #{inputs.controller_one.left_analog_y_raw} (#{inputs.controller_one.left_analog_y_perc * 100}%)" } ** Processing line: ~ outputs.labels << { x: 900, y: 60, text: "Right Analog x: #{inputs.controller_one.right_analog_x_raw} (#{inputs.controller_one.right_analog_x_perc * 100}%)" }~ - Inside source: true *** True Line Result outputs.labels << { x: 900, y: 60, text: "Right Analog x: #{inputs.controller_one.right_analog_x_raw} (#{inputs.controller_one.right_analog_x_perc * 100}%)" } ** Processing line: ~ outputs.labels << { x: 900, y: 30, text: "Right Analog y: #{inputs.controller_one.right_analog_y_raw} (#{inputs.controller_one.right_analog_y_perc * 100}%)" }~ - Inside source: true *** True Line Result outputs.labels << { x: 900, y: 30, text: "Right Analog y: #{inputs.controller_one.right_analog_y_raw} (#{inputs.controller_one.right_analog_y_perc * 100}%)" } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $controller_demo = ControllerDemo.new~ - Inside source: true *** True Line Result $controller_demo = ControllerDemo.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ tick_instructions args, "Sample app shows how controller input is handled. You'll need to connect a USB controller."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows how controller input is handled. You'll need to connect a USB controller." ** Processing line: ~ $controller_demo.inputs = args.inputs~ - Inside source: true *** True Line Result $controller_demo.inputs = args.inputs ** Processing line: ~ $controller_demo.state = args.state~ - Inside source: true *** True Line Result $controller_demo.state = args.state ** Processing line: ~ $controller_demo.outputs = args.outputs~ - Inside source: true *** True Line Result $controller_demo.outputs = args.outputs ** Processing line: ~ $controller_demo.tick~ - Inside source: true *** True Line Result $controller_demo.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Resets the app.~ - Inside source: true *** True Line Result # Resets the app. ** Processing line: ~ def r~ - Inside source: true *** True Line Result def r ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Input Basics - Touch - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Input Basics - Touch - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/02_input_basics/06_touch/app/main.rb~ - Inside source: true *** True Line Result # ./samples/02_input_basics/06_touch/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.background_color = [ 0, 0, 0 ]~ - Inside source: true *** True Line Result args.outputs.background_color = [ 0, 0, 0 ] ** Processing line: ~ args.outputs.primitives << [640, 700, "Touch your screen.", 5, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.primitives << [640, 700, "Touch your screen.", 5, 1, 255, 255, 255].label ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If you don't want to get fancy, you can just look for finger_one~ - Inside source: true *** True Line Result # If you don't want to get fancy, you can just look for finger_one ** Processing line: ~ # (and _two, if you like), which are assigned in the order new touches hit~ - Inside source: true *** True Line Result # (and _two, if you like), which are assigned in the order new touches hit ** Processing line: ~ # the screen. If not nil, they are touching right now, and are just~ - Inside source: true *** True Line Result # the screen. If not nil, they are touching right now, and are just ** Processing line: ~ # references to specific items in the args.input.touch hash.~ - Inside source: true *** True Line Result # references to specific items in the args.input.touch hash. ** Processing line: ~ # If finger_one lifts off, it will become nil, but finger_two, if it was~ - Inside source: true *** True Line Result # If finger_one lifts off, it will become nil, but finger_two, if it was ** Processing line: ~ # touching, remains until it also lifts off. When all fingers lift off, the~ - Inside source: true *** True Line Result # touching, remains until it also lifts off. When all fingers lift off, the ** Processing line: ~ # the next new touch will be finger_one again, but until then, new touches~ - Inside source: true *** True Line Result # the next new touch will be finger_one again, but until then, new touches ** Processing line: ~ # don't fill in earlier slots.~ - Inside source: true *** True Line Result # don't fill in earlier slots. ** Processing line: ~ if !args.inputs.finger_one.nil?~ - Inside source: true *** True Line Result if !args.inputs.finger_one.nil? ** Processing line: ~ args.outputs.primitives << { x: 640, y: 650, text: "Finger #1 is touching at (#{args.inputs.finger_one.x}, #{args.inputs.finger_one.y}).",~ - Inside source: true *** True Line Result args.outputs.primitives << { x: 640, y: 650, text: "Finger #1 is touching at (#{args.inputs.finger_one.x}, #{args.inputs.finger_one.y}).", ** Processing line: ~ size_enum: 5, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ - Inside source: true *** True Line Result size_enum: 5, alignment_enum: 1, r: 255, g: 255, b: 255 }.label! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if !args.inputs.finger_two.nil?~ - Inside source: true *** True Line Result if !args.inputs.finger_two.nil? ** Processing line: ~ args.outputs.primitives << { x: 640, y: 600, text: "Finger #2 is touching at (#{args.inputs.finger_two.x}, #{args.inputs.finger_two.y}).",~ - Inside source: true *** True Line Result args.outputs.primitives << { x: 640, y: 600, text: "Finger #2 is touching at (#{args.inputs.finger_two.x}, #{args.inputs.finger_two.y}).", ** Processing line: ~ size_enum: 5, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ - Inside source: true *** True Line Result size_enum: 5, alignment_enum: 1, r: 255, g: 255, b: 255 }.label! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Here's the more flexible interface: this will report as many simultaneous~ - Inside source: true *** True Line Result # Here's the more flexible interface: this will report as many simultaneous ** Processing line: ~ # touches as the system can handle, but it's a little more effort to track~ - Inside source: true *** True Line Result # touches as the system can handle, but it's a little more effort to track ** Processing line: ~ # them. Each item in the args.input.touch hash has a unique key (an~ - Inside source: true *** True Line Result # them. Each item in the args.input.touch hash has a unique key (an ** Processing line: ~ # incrementing integer) that exists until the finger lifts off. You can~ - Inside source: true *** True Line Result # incrementing integer) that exists until the finger lifts off. You can ** Processing line: ~ # tell which order the touches happened globally by the key value, or~ - Inside source: true *** True Line Result # tell which order the touches happened globally by the key value, or ** Processing line: ~ # by the touch[id].touch_order field, which resets to zero each time all~ - Inside source: true *** True Line Result # by the touch[id].touch_order field, which resets to zero each time all ** Processing line: ~ # touches have lifted.~ - Inside source: true *** True Line Result # touches have lifted. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.colors ||= [~ - Inside source: true *** True Line Result args.state.colors ||= [ ** Processing line: ~ 0xFF0000, 0x00FF00, 0x1010FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFFFFF~ - Inside source: true *** True Line Result 0xFF0000, 0x00FF00, 0x1010FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFFFFF ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ size = 100~ - Inside source: true *** True Line Result size = 100 ** Processing line: ~ args.inputs.touch.each { |k,v|~ - Inside source: true *** True Line Result args.inputs.touch.each { |k,v| ** Processing line: ~ color = args.state.colors[v.touch_order % 7]~ - Inside source: true *** True Line Result color = args.state.colors[v.touch_order % 7] ** Processing line: ~ r = (color & 0xFF0000) >> 16~ - Inside source: true *** True Line Result r = (color & 0xFF0000) >> 16 ** Processing line: ~ g = (color & 0x00FF00) >> 8~ - Inside source: true *** True Line Result g = (color & 0x00FF00) >> 8 ** Processing line: ~ b = (color & 0x0000FF)~ - Inside source: true *** True Line Result b = (color & 0x0000FF) ** Processing line: ~ args.outputs.primitives << { x: v.x - (size / 2), y: v.y + (size / 2), w: size, h: size, r: r, g: g, b: b, a: 255 }.solid!~ - Inside source: true *** True Line Result args.outputs.primitives << { x: v.x - (size / 2), y: v.y + (size / 2), w: size, h: size, r: r, g: g, b: b, a: 255 }.solid! ** Processing line: ~ args.outputs.primitives << { x: v.x, y: v.y + size, text: k.to_s, alignment_enum: 1 }.label!~ - Inside source: true *** True Line Result args.outputs.primitives << { x: v.x, y: v.y + size, text: k.to_s, alignment_enum: 1 }.label! ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rendering Sprites - Animation Using Separate Pngs - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rendering Sprites - Animation Using Separate Pngs - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/03_rendering_sprites/01_animation_using_separate_pngs/app/main.rb~ - Inside source: true *** True Line Result # ./samples/03_rendering_sprites/01_animation_using_separate_pngs/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated~ - Inside source: true *** True Line Result - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ - Inside source: true *** True Line Result as Ruby code, and the placeholder is replaced with its corresponding value or result. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ In this sample app, we're using string interpolation to iterate through images in the~ - Inside source: true *** True Line Result In this sample app, we're using string interpolation to iterate through images in the ** Processing line: ~ sprites folder using their image path names.~ - Inside source: true *** True Line Result sprites folder using their image path names. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.sprites: An array. Values in this array generate sprites on the screen.~ - Inside source: true *** True Line Result - args.outputs.sprites: An array. Values in this array generate sprites on the screen. ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, IMAGE PATH]~ - Inside source: true *** True Line Result The parameters are [X, Y, WIDTH, HEIGHT, IMAGE PATH] ** Processing line: ~ For more information about sprites, go to mygame/documentation/05-sprites.md.~ - Inside source: true *** True Line Result For more information about sprites, go to mygame/documentation/05-sprites.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.labels: An array. Values in the array generate labels on the screen.~ - Inside source: true *** True Line Result - args.outputs.labels: An array. Values in the array generate labels on the screen. ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ - Inside source: true *** True Line Result For more information about labels, go to mygame/documentation/02-labels.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.keyboard.key_down.KEY: Determines if a key is in the down state, or pressed.~ - Inside source: true *** True Line Result - args.inputs.keyboard.key_down.KEY: Determines if a key is in the down state, or pressed. ** Processing line: ~ Stores the frame that key was pressed on.~ - Inside source: true *** True Line Result Stores the frame that key was pressed on. ** Processing line: ~ For more information about the keyboard, go to mygame/documentation/06-keyboard.md.~ - Inside source: true *** True Line Result For more information about the keyboard, go to mygame/documentation/06-keyboard.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app demonstrates how sprite animations work.~ - Inside source: true *** True Line Result # This sample app demonstrates how sprite animations work. ** Processing line: ~ # There are two sprites that animate forever and one sprite~ - Inside source: true *** True Line Result # There are two sprites that animate forever and one sprite ** Processing line: ~ # that *only* animates when you press the "f" key on the keyboard.~ - Inside source: true *** True Line Result # that *only* animates when you press the "f" key on the keyboard. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This is the entry point to your game. The `tick` method~ - Inside source: true *** True Line Result # This is the entry point to your game. The `tick` method ** Processing line: ~ # executes at 60 frames per second. There are two methods~ - Inside source: true *** True Line Result # executes at 60 frames per second. There are two methods ** Processing line: ~ # in this tick "entry point": `looping_animation`, and the~ - Inside source: true *** True Line Result # in this tick "entry point": `looping_animation`, and the ** Processing line: ~ # second method is `one_time_animation`.~ - Inside source: true *** True Line Result # second method is `one_time_animation`. ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # uncomment the line below to see animation play out in slow motion~ - Inside source: true *** True Line Result # uncomment the line below to see animation play out in slow motion ** Processing line: ~ # args.gtk.slowmo! 6~ - Inside source: true *** True Line Result # args.gtk.slowmo! 6 ** Processing line: ~ looping_animation args~ - Inside source: true *** True Line Result looping_animation args ** Processing line: ~ one_time_animation args~ - Inside source: true *** True Line Result one_time_animation args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This function shows how to animate a sprite that loops forever.~ - Inside source: true *** True Line Result # This function shows how to animate a sprite that loops forever. ** Processing line: ~ def looping_animation args~ - Inside source: true *** True Line Result def looping_animation args ** Processing line: ~ # Here we define a few local variables that will be sent~ - Inside source: true *** True Line Result # Here we define a few local variables that will be sent ** Processing line: ~ # into the magic function that gives us the correct sprite image~ - Inside source: true *** True Line Result # into the magic function that gives us the correct sprite image ** Processing line: ~ # over time. There are four things we need in order to figure~ - Inside source: true *** True Line Result # over time. There are four things we need in order to figure ** Processing line: ~ # out which sprite to show.~ - Inside source: true *** True Line Result # out which sprite to show. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # 1. When to start the animation.~ - Inside source: true *** True Line Result # 1. When to start the animation. ** Processing line: ~ start_looping_at = 0~ - Inside source: true *** True Line Result start_looping_at = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # 2. The number of pngs that represent the full animation.~ - Inside source: true *** True Line Result # 2. The number of pngs that represent the full animation. ** Processing line: ~ number_of_sprites = 6~ - Inside source: true *** True Line Result number_of_sprites = 6 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # 3. How long to show each png.~ - Inside source: true *** True Line Result # 3. How long to show each png. ** Processing line: ~ number_of_frames_to_show_each_sprite = 4~ - Inside source: true *** True Line Result number_of_frames_to_show_each_sprite = 4 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # 4. Whether the animation should loop once, or forever.~ - Inside source: true *** True Line Result # 4. Whether the animation should loop once, or forever. ** Processing line: ~ does_sprite_loop = true~ - Inside source: true *** True Line Result does_sprite_loop = true ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # With the variables defined above, we can get a number~ - Inside source: true *** True Line Result # With the variables defined above, we can get a number ** Processing line: ~ # which represents the sprite to show by calling the `frame_index` function.~ - Inside source: true *** True Line Result # which represents the sprite to show by calling the `frame_index` function. ** Processing line: ~ # In this case the number will be between 0, and 5 (you can see the sprites~ - Inside source: true *** True Line Result # In this case the number will be between 0, and 5 (you can see the sprites ** Processing line: ~ # in the ./sprites directory).~ - Inside source: true *** True Line Result # in the ./sprites directory). ** Processing line: ~ sprite_index = start_looping_at.frame_index number_of_sprites,~ - Inside source: true *** True Line Result sprite_index = start_looping_at.frame_index number_of_sprites, ** Processing line: ~ number_of_frames_to_show_each_sprite,~ - Inside source: true *** True Line Result number_of_frames_to_show_each_sprite, ** Processing line: ~ does_sprite_loop~ - Inside source: true *** True Line Result does_sprite_loop ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Now that we have `sprite_index, we can present the correct file.~ - Inside source: true *** True Line Result # Now that we have `sprite_index, we can present the correct file. ** Processing line: ~ args.outputs.sprites << { x: 100, y: 100, w: 100, h: 100, path: "sprites/dragon_fly_#{sprite_index}.png" }~ - Inside source: true *** True Line Result args.outputs.sprites << { x: 100, y: 100, w: 100, h: 100, path: "sprites/dragon_fly_#{sprite_index}.png" } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Try changing the numbers below to see how the animation changes:~ - Inside source: true *** True Line Result # Try changing the numbers below to see how the animation changes: ** Processing line: ~ args.outputs.sprites << { x: 100, y: 200, w: 100, h: 100, path: "sprites/dragon_fly_#{0.frame_index 6, 4, true}.png" }~ - Inside source: true *** True Line Result args.outputs.sprites << { x: 100, y: 200, w: 100, h: 100, path: "sprites/dragon_fly_#{0.frame_index 6, 4, true}.png" } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This function shows how to animate a sprite that executes~ - Inside source: true *** True Line Result # This function shows how to animate a sprite that executes ** Processing line: ~ # only once when the "f" key is pressed.~ - Inside source: true *** True Line Result # only once when the "f" key is pressed. ** Processing line: ~ def one_time_animation args~ - Inside source: true *** True Line Result def one_time_animation args ** Processing line: ~ # This is just a label the shows instructions within the game.~ - Inside source: true *** True Line Result # This is just a label the shows instructions within the game. ** Processing line: ~ args.outputs.labels << { x: 220, y: 350, text: "(press f to animate)" }~ - Inside source: true *** True Line Result args.outputs.labels << { x: 220, y: 350, text: "(press f to animate)" } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If "f" is pressed on the keyboard...~ - Inside source: true *** True Line Result # If "f" is pressed on the keyboard... ** Processing line: ~ if args.inputs.keyboard.key_down.f~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.f ** Processing line: ~ # Print the frame that "f" was pressed on.~ - Inside source: true *** True Line Result # Print the frame that "f" was pressed on. ** Processing line: ~ puts "Hello from main.rb! The \"f\" key was in the down state on frame: #{args.state.tick_count}"~ - Inside source: true *** True Line Result puts "Hello from main.rb! The \"f\" key was in the down state on frame: #{args.state.tick_count}" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # And MOST IMPORTANTLY set the point it time to start the animation,~ - Inside source: true *** True Line Result # And MOST IMPORTANTLY set the point it time to start the animation, ** Processing line: ~ # equal to "now" which is represented as args.state.tick_count.~ - Inside source: true *** True Line Result # equal to "now" which is represented as args.state.tick_count. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Also IMPORTANT, you'll notice that the value of when to start looping~ - Inside source: true *** True Line Result # Also IMPORTANT, you'll notice that the value of when to start looping ** Processing line: ~ # is stored in `args.state`. This construct's values are retained across~ - Inside source: true *** True Line Result # is stored in `args.state`. This construct's values are retained across ** Processing line: ~ # executions of the `tick` method.~ - Inside source: true *** True Line Result # executions of the `tick` method. ** Processing line: ~ args.state.start_looping_at = args.state.tick_count~ - Inside source: true *** True Line Result args.state.start_looping_at = args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These are the same local variables that were defined~ - Inside source: true *** True Line Result # These are the same local variables that were defined ** Processing line: ~ # for the `looping_animation` function.~ - Inside source: true *** True Line Result # for the `looping_animation` function. ** Processing line: ~ number_of_sprites = 6~ - Inside source: true *** True Line Result number_of_sprites = 6 ** Processing line: ~ number_of_frames_to_show_each_sprite = 4~ - Inside source: true *** True Line Result number_of_frames_to_show_each_sprite = 4 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Except this sprite does not loop again. If the animation time has passed,~ - Inside source: true *** True Line Result # Except this sprite does not loop again. If the animation time has passed, ** Processing line: ~ # then the frame_index function returns nil.~ - Inside source: true *** True Line Result # then the frame_index function returns nil. ** Processing line: ~ does_sprite_loop = false~ - Inside source: true *** True Line Result does_sprite_loop = false ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sprite_index = args.state~ - Inside source: true *** True Line Result sprite_index = args.state ** Processing line: ~ .start_looping_at~ - Inside source: true *** True Line Result .start_looping_at ** Processing line: ~ .frame_index number_of_sprites,~ - Inside source: true *** True Line Result .frame_index number_of_sprites, ** Processing line: ~ number_of_frames_to_show_each_sprite,~ - Inside source: true *** True Line Result number_of_frames_to_show_each_sprite, ** Processing line: ~ does_sprite_loop~ - Inside source: true *** True Line Result does_sprite_loop ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This line sets the frame index to zero, if~ - Inside source: true *** True Line Result # This line sets the frame index to zero, if ** Processing line: ~ # the animation duration has passed (frame_index returned nil).~ - Inside source: true *** True Line Result # the animation duration has passed (frame_index returned nil). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Remeber: we are not looping forever here.~ - Inside source: true *** True Line Result # Remeber: we are not looping forever here. ** Processing line: ~ sprite_index ||= 0~ - Inside source: true *** True Line Result sprite_index ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Present the sprite.~ - Inside source: true *** True Line Result # Present the sprite. ** Processing line: ~ args.outputs.sprites << { x: 100, y: 300, w: 100, h: 100, path: "sprites/dragon_fly_#{sprite_index}.png" }~ - Inside source: true *** True Line Result args.outputs.sprites << { x: 100, y: 300, w: 100, h: 100, path: "sprites/dragon_fly_#{sprite_index}.png" } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ tick_instructions args, "Sample app shows how to use Numeric#frame_index and string interpolation to animate a sprite over time."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows how to use Numeric#frame_index and string interpolation to animate a sprite over time." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rendering Sprites - Animation Using Sprite Sheet - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rendering Sprites - Animation Using Sprite Sheet - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/03_rendering_sprites/02_animation_using_sprite_sheet/app/main.rb~ - Inside source: true *** True Line Result # ./samples/03_rendering_sprites/02_animation_using_sprite_sheet/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.player.x ||= 100~ - Inside source: true *** True Line Result args.state.player.x ||= 100 ** Processing line: ~ args.state.player.y ||= 100~ - Inside source: true *** True Line Result args.state.player.y ||= 100 ** Processing line: ~ args.state.player.w ||= 64~ - Inside source: true *** True Line Result args.state.player.w ||= 64 ** Processing line: ~ args.state.player.h ||= 64~ - Inside source: true *** True Line Result args.state.player.h ||= 64 ** Processing line: ~ args.state.player.direction ||= 1~ - Inside source: true *** True Line Result args.state.player.direction ||= 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.player.is_moving = false~ - Inside source: true *** True Line Result args.state.player.is_moving = false ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # get the keyboard input and set player properties~ - Inside source: true *** True Line Result # get the keyboard input and set player properties ** Processing line: ~ if args.inputs.keyboard.right~ - Inside source: true *** True Line Result if args.inputs.keyboard.right ** Processing line: ~ args.state.player.x += 3~ - Inside source: true *** True Line Result args.state.player.x += 3 ** Processing line: ~ args.state.player.direction = 1~ - Inside source: true *** True Line Result args.state.player.direction = 1 ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ - Inside source: true *** True Line Result args.state.player.started_running_at ||= args.state.tick_count ** Processing line: ~ elsif args.inputs.keyboard.left~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.left ** Processing line: ~ args.state.player.x -= 3~ - Inside source: true *** True Line Result args.state.player.x -= 3 ** Processing line: ~ args.state.player.direction = -1~ - Inside source: true *** True Line Result args.state.player.direction = -1 ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ - Inside source: true *** True Line Result args.state.player.started_running_at ||= args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.keyboard.up~ - Inside source: true *** True Line Result if args.inputs.keyboard.up ** Processing line: ~ args.state.player.y += 1~ - Inside source: true *** True Line Result args.state.player.y += 1 ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ - Inside source: true *** True Line Result args.state.player.started_running_at ||= args.state.tick_count ** Processing line: ~ elsif args.inputs.keyboard.down~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.down ** Processing line: ~ args.state.player.y -= 1~ - Inside source: true *** True Line Result args.state.player.y -= 1 ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ - Inside source: true *** True Line Result args.state.player.started_running_at ||= args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if no arrow keys are being pressed, set the player as not moving~ - Inside source: true *** True Line Result # if no arrow keys are being pressed, set the player as not moving ** Processing line: ~ if !args.inputs.keyboard.directional_vector~ - Inside source: true *** True Line Result if !args.inputs.keyboard.directional_vector ** Processing line: ~ args.state.player.started_running_at = nil~ - Inside source: true *** True Line Result args.state.player.started_running_at = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # wrap player around the stage~ - Inside source: true *** True Line Result # wrap player around the stage ** Processing line: ~ if args.state.player.x > 1280~ - Inside source: true *** True Line Result if args.state.player.x > 1280 ** Processing line: ~ args.state.player.x = -64~ - Inside source: true *** True Line Result args.state.player.x = -64 ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ - Inside source: true *** True Line Result args.state.player.started_running_at ||= args.state.tick_count ** Processing line: ~ elsif args.state.player.x < -64~ - Inside source: true *** True Line Result elsif args.state.player.x < -64 ** Processing line: ~ args.state.player.x = 1280~ - Inside source: true *** True Line Result args.state.player.x = 1280 ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ - Inside source: true *** True Line Result args.state.player.started_running_at ||= args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.player.y > 720~ - Inside source: true *** True Line Result if args.state.player.y > 720 ** Processing line: ~ args.state.player.y = -64~ - Inside source: true *** True Line Result args.state.player.y = -64 ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ - Inside source: true *** True Line Result args.state.player.started_running_at ||= args.state.tick_count ** Processing line: ~ elsif args.state.player.y < -64~ - Inside source: true *** True Line Result elsif args.state.player.y < -64 ** Processing line: ~ args.state.player.y = 720~ - Inside source: true *** True Line Result args.state.player.y = 720 ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ - Inside source: true *** True Line Result args.state.player.started_running_at ||= args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render player as standing or running~ - Inside source: true *** True Line Result # render player as standing or running ** Processing line: ~ if args.state.player.started_running_at~ - Inside source: true *** True Line Result if args.state.player.started_running_at ** Processing line: ~ args.outputs.sprites << running_sprite(args)~ - Inside source: true *** True Line Result args.outputs.sprites << running_sprite(args) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.outputs.sprites << standing_sprite(args)~ - Inside source: true *** True Line Result args.outputs.sprites << standing_sprite(args) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.outputs.labels << [30, 700, "Use arrow keys to move around."]~ - Inside source: true *** True Line Result args.outputs.labels << [30, 700, "Use arrow keys to move around."] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def standing_sprite args~ - Inside source: true *** True Line Result def standing_sprite args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: args.state.player.x,~ - Inside source: true *** True Line Result x: args.state.player.x, ** Processing line: ~ y: args.state.player.y,~ - Inside source: true *** True Line Result y: args.state.player.y, ** Processing line: ~ w: args.state.player.w,~ - Inside source: true *** True Line Result w: args.state.player.w, ** Processing line: ~ h: args.state.player.h,~ - Inside source: true *** True Line Result h: args.state.player.h, ** Processing line: ~ path: "sprites/horizontal-stand.png",~ - Inside source: true *** True Line Result path: "sprites/horizontal-stand.png", ** Processing line: ~ flip_horizontally: args.state.player.direction > 0~ - Inside source: true *** True Line Result flip_horizontally: args.state.player.direction > 0 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def running_sprite args~ - Inside source: true *** True Line Result def running_sprite args ** Processing line: ~ if !args.state.player.started_running_at~ - Inside source: true *** True Line Result if !args.state.player.started_running_at ** Processing line: ~ tile_index = 0~ - Inside source: true *** True Line Result tile_index = 0 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ how_many_frames_in_sprite_sheet = 6~ - Inside source: true *** True Line Result how_many_frames_in_sprite_sheet = 6 ** Processing line: ~ how_many_ticks_to_hold_each_frame = 3~ - Inside source: true *** True Line Result how_many_ticks_to_hold_each_frame = 3 ** Processing line: ~ should_the_index_repeat = true~ - Inside source: true *** True Line Result should_the_index_repeat = true ** Processing line: ~ tile_index = args.state~ - Inside source: true *** True Line Result tile_index = args.state ** Processing line: ~ .player~ - Inside source: true *** True Line Result .player ** Processing line: ~ .started_running_at~ - Inside source: true *** True Line Result .started_running_at ** Processing line: ~ .frame_index(how_many_frames_in_sprite_sheet,~ - Inside source: true *** True Line Result .frame_index(how_many_frames_in_sprite_sheet, ** Processing line: ~ how_many_ticks_to_hold_each_frame,~ - Inside source: true *** True Line Result how_many_ticks_to_hold_each_frame, ** Processing line: ~ should_the_index_repeat)~ - Inside source: true *** True Line Result should_the_index_repeat) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: args.state.player.x,~ - Inside source: true *** True Line Result x: args.state.player.x, ** Processing line: ~ y: args.state.player.y,~ - Inside source: true *** True Line Result y: args.state.player.y, ** Processing line: ~ w: args.state.player.w,~ - Inside source: true *** True Line Result w: args.state.player.w, ** Processing line: ~ h: args.state.player.h,~ - Inside source: true *** True Line Result h: args.state.player.h, ** Processing line: ~ path: 'sprites/horizontal-run.png',~ - Inside source: true *** True Line Result path: 'sprites/horizontal-run.png', ** Processing line: ~ tile_x: 0 + (tile_index * args.state.player.w),~ - Inside source: true *** True Line Result tile_x: 0 + (tile_index * args.state.player.w), ** Processing line: ~ tile_y: 0,~ - Inside source: true *** True Line Result tile_y: 0, ** Processing line: ~ tile_w: args.state.player.w,~ - Inside source: true *** True Line Result tile_w: args.state.player.w, ** Processing line: ~ tile_h: args.state.player.h,~ - Inside source: true *** True Line Result tile_h: args.state.player.h, ** Processing line: ~ flip_horizontally: args.state.player.direction > 0,~ - Inside source: true *** True Line Result flip_horizontally: args.state.player.direction > 0, ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rendering Sprites - Animation States - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rendering Sprites - Animation States - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/03_rendering_sprites/03_animation_states/app/main.rb~ - Inside source: true *** True Line Result # ./samples/03_rendering_sprites/03_animation_states/app/main.rb ** Processing line: ~ class Game~ - Inside source: true *** True Line Result class Game ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ state.show_debug_layer = true if state.tick_count == 0~ - Inside source: true *** True Line Result state.show_debug_layer = true if state.tick_count == 0 ** Processing line: ~ player.tile_size = 64~ - Inside source: true *** True Line Result player.tile_size = 64 ** Processing line: ~ player.speed = 3~ - Inside source: true *** True Line Result player.speed = 3 ** Processing line: ~ player.slash_frames = 15~ - Inside source: true *** True Line Result player.slash_frames = 15 ** Processing line: ~ player.x ||= 50~ - Inside source: true *** True Line Result player.x ||= 50 ** Processing line: ~ player.y ||= 400~ - Inside source: true *** True Line Result player.y ||= 400 ** Processing line: ~ player.dir_x ||= 1~ - Inside source: true *** True Line Result player.dir_x ||= 1 ** Processing line: ~ player.dir_y ||= -1~ - Inside source: true *** True Line Result player.dir_y ||= -1 ** Processing line: ~ player.is_moving ||= false~ - Inside source: true *** True Line Result player.is_moving ||= false ** Processing line: ~ state.watch_list ||= {}~ - Inside source: true *** True Line Result state.watch_list ||= {} ** Processing line: ~ state.enemies ||= []~ - Inside source: true *** True Line Result state.enemies ||= [] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def add_enemy~ - Inside source: true *** True Line Result def add_enemy ** Processing line: ~ state.enemies << { x: 1200 * rand, y: 600 * rand, w: 64, h: 64 }~ - Inside source: true *** True Line Result state.enemies << { x: 1200 * rand, y: 600 * rand, w: 64, h: 64 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def sprite_horizontal_run~ - Inside source: true *** True Line Result def sprite_horizontal_run ** Processing line: ~ tile_index = 0.frame_index(6, 3, true)~ - Inside source: true *** True Line Result tile_index = 0.frame_index(6, 3, true) ** Processing line: ~ tile_index = 0 if !player.is_moving~ - Inside source: true *** True Line Result tile_index = 0 if !player.is_moving ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: player.x,~ - Inside source: true *** True Line Result x: player.x, ** Processing line: ~ y: player.y,~ - Inside source: true *** True Line Result y: player.y, ** Processing line: ~ w: player.tile_size,~ - Inside source: true *** True Line Result w: player.tile_size, ** Processing line: ~ h: player.tile_size,~ - Inside source: true *** True Line Result h: player.tile_size, ** Processing line: ~ path: 'sprites/horizontal-run.png',~ - Inside source: true *** True Line Result path: 'sprites/horizontal-run.png', ** Processing line: ~ tile_x: 0 + (tile_index * player.tile_size),~ - Inside source: true *** True Line Result tile_x: 0 + (tile_index * player.tile_size), ** Processing line: ~ tile_y: 0,~ - Inside source: true *** True Line Result tile_y: 0, ** Processing line: ~ tile_w: player.tile_size,~ - Inside source: true *** True Line Result tile_w: player.tile_size, ** Processing line: ~ tile_h: player.tile_size,~ - Inside source: true *** True Line Result tile_h: player.tile_size, ** Processing line: ~ flip_horizontally: player.dir_x > 0,~ - Inside source: true *** True Line Result flip_horizontally: player.dir_x > 0, ** Processing line: ~ # a: 40~ - Inside source: true *** True Line Result # a: 40 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def sprite_horizontal_stand~ - Inside source: true *** True Line Result def sprite_horizontal_stand ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: player.x,~ - Inside source: true *** True Line Result x: player.x, ** Processing line: ~ y: player.y,~ - Inside source: true *** True Line Result y: player.y, ** Processing line: ~ w: player.tile_size,~ - Inside source: true *** True Line Result w: player.tile_size, ** Processing line: ~ h: player.tile_size,~ - Inside source: true *** True Line Result h: player.tile_size, ** Processing line: ~ path: 'sprites/horizontal-stand.png',~ - Inside source: true *** True Line Result path: 'sprites/horizontal-stand.png', ** Processing line: ~ flip_horizontally: player.dir_x > 0,~ - Inside source: true *** True Line Result flip_horizontally: player.dir_x > 0, ** Processing line: ~ # a: 40~ - Inside source: true *** True Line Result # a: 40 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def sprite_horizontal_slash~ - Inside source: true *** True Line Result def sprite_horizontal_slash ** Processing line: ~ tile_index = player.slash_at.frame_index(5, player.slash_frames.idiv(5), false) || 0~ - Inside source: true *** True Line Result tile_index = player.slash_at.frame_index(5, player.slash_frames.idiv(5), false) || 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: player.x - 41.25,~ - Inside source: true *** True Line Result x: player.x - 41.25, ** Processing line: ~ y: player.y - 41.25,~ - Inside source: true *** True Line Result y: player.y - 41.25, ** Processing line: ~ w: 165,~ - Inside source: true *** True Line Result w: 165, ** Processing line: ~ h: 165,~ - Inside source: true *** True Line Result h: 165, ** Processing line: ~ path: 'sprites/horizontal-slash.png',~ - Inside source: true *** True Line Result path: 'sprites/horizontal-slash.png', ** Processing line: ~ tile_x: 0 + (tile_index * 128),~ - Inside source: true *** True Line Result tile_x: 0 + (tile_index * 128), ** Processing line: ~ tile_y: 0,~ - Inside source: true *** True Line Result tile_y: 0, ** Processing line: ~ tile_w: 128,~ - Inside source: true *** True Line Result tile_w: 128, ** Processing line: ~ tile_h: 128,~ - Inside source: true *** True Line Result tile_h: 128, ** Processing line: ~ flip_horizontally: player.dir_x > 0~ - Inside source: true *** True Line Result flip_horizontally: player.dir_x > 0 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_player~ - Inside source: true *** True Line Result def render_player ** Processing line: ~ if player.slash_at~ - Inside source: true *** True Line Result if player.slash_at ** Processing line: ~ outputs.sprites << sprite_horizontal_slash~ - Inside source: true *** True Line Result outputs.sprites << sprite_horizontal_slash ** Processing line: ~ elsif player.is_moving~ - Inside source: true *** True Line Result elsif player.is_moving ** Processing line: ~ outputs.sprites << sprite_horizontal_run~ - Inside source: true *** True Line Result outputs.sprites << sprite_horizontal_run ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ outputs.sprites << sprite_horizontal_stand~ - Inside source: true *** True Line Result outputs.sprites << sprite_horizontal_stand ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_enemies~ - Inside source: true *** True Line Result def render_enemies ** Processing line: ~ outputs.borders << state.enemies~ - Inside source: true *** True Line Result outputs.borders << state.enemies ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_debug_layer~ - Inside source: true *** True Line Result def render_debug_layer ** Processing line: ~ return if !state.show_debug_layer~ - Inside source: true *** True Line Result return if !state.show_debug_layer ** Processing line: ~ outputs.labels << state.watch_list.map.with_index do |(k, v), i|~ - Inside source: true *** True Line Result outputs.labels << state.watch_list.map.with_index do |(k, v), i| ** Processing line: ~ [30, 710 - i * 28, "#{k}: #{v || "(nil)"}"]~ - Inside source: true *** True Line Result [30, 710 - i * 28, "#{k}: #{v || "(nil)"}"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.borders << player.slash_collision_rect~ - Inside source: true *** True Line Result outputs.borders << player.slash_collision_rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def slash_initiate?~ - Inside source: true *** True Line Result def slash_initiate? ** Processing line: ~ # buffalo usb controller has a button and b button swapped lol~ - Inside source: true *** True Line Result # buffalo usb controller has a button and b button swapped lol ** Processing line: ~ inputs.controller_one.key_down.a || inputs.keyboard.key_down.j~ - Inside source: true *** True Line Result inputs.controller_one.key_down.a || inputs.keyboard.key_down.j ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ # player movement~ - Inside source: true *** True Line Result # player movement ** Processing line: ~ if slash_complete? && (vector = inputs.directional_vector)~ - Inside source: true *** True Line Result if slash_complete? && (vector = inputs.directional_vector) ** Processing line: ~ player.x += vector.x * player.speed~ - Inside source: true *** True Line Result player.x += vector.x * player.speed ** Processing line: ~ player.y += vector.y * player.speed~ - Inside source: true *** True Line Result player.y += vector.y * player.speed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ player.slash_at = slash_initiate? if slash_initiate?~ - Inside source: true *** True Line Result player.slash_at = slash_initiate? if slash_initiate? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_movement~ - Inside source: true *** True Line Result def calc_movement ** Processing line: ~ # movement~ - Inside source: true *** True Line Result # movement ** Processing line: ~ if vector = inputs.directional_vector~ - Inside source: true *** True Line Result if vector = inputs.directional_vector ** Processing line: ~ state.debug_label = vector~ - Inside source: true *** True Line Result state.debug_label = vector ** Processing line: ~ player.dir_x = vector.x~ - Inside source: true *** True Line Result player.dir_x = vector.x ** Processing line: ~ player.dir_y = vector.y~ - Inside source: true *** True Line Result player.dir_y = vector.y ** Processing line: ~ player.is_moving = true~ - Inside source: true *** True Line Result player.is_moving = true ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.debug_label = vector~ - Inside source: true *** True Line Result state.debug_label = vector ** Processing line: ~ player.is_moving = false~ - Inside source: true *** True Line Result player.is_moving = false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_slash~ - Inside source: true *** True Line Result def calc_slash ** Processing line: ~ # re-calc the location of the swords collision box~ - Inside source: true *** True Line Result # re-calc the location of the swords collision box ** Processing line: ~ if player.dir_x.positive?~ - Inside source: true *** True Line Result if player.dir_x.positive? ** Processing line: ~ player.slash_collision_rect = [player.x + player.tile_size,~ - Inside source: true *** True Line Result player.slash_collision_rect = [player.x + player.tile_size, ** Processing line: ~ player.y + player.tile_size.half - 10,~ - Inside source: true *** True Line Result player.y + player.tile_size.half - 10, ** Processing line: ~ 40, 20]~ - Inside source: true *** True Line Result 40, 20] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ player.slash_collision_rect = [player.x - 32 - 8,~ - Inside source: true *** True Line Result player.slash_collision_rect = [player.x - 32 - 8, ** Processing line: ~ player.y + player.tile_size.half - 10,~ - Inside source: true *** True Line Result player.y + player.tile_size.half - 10, ** Processing line: ~ 40, 20]~ - Inside source: true *** True Line Result 40, 20] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # recalc sword's slash state~ - Inside source: true *** True Line Result # recalc sword's slash state ** Processing line: ~ player.slash_at = nil if slash_complete?~ - Inside source: true *** True Line Result player.slash_at = nil if slash_complete? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # determine collision if the sword is at it's point of damaging~ - Inside source: true *** True Line Result # determine collision if the sword is at it's point of damaging ** Processing line: ~ return unless slash_can_damage?~ - Inside source: true *** True Line Result return unless slash_can_damage? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.enemies.reject! { |e| e.intersect_rect? player.slash_collision_rect }~ - Inside source: true *** True Line Result state.enemies.reject! { |e| e.intersect_rect? player.slash_collision_rect } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def slash_complete?~ - Inside source: true *** True Line Result def slash_complete? ** Processing line: ~ !player.slash_at || player.slash_at.elapsed?(player.slash_frames)~ - Inside source: true *** True Line Result !player.slash_at || player.slash_at.elapsed?(player.slash_frames) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def slash_can_damage?~ - Inside source: true *** True Line Result def slash_can_damage? ** Processing line: ~ # damage occurs half way into the slash animation~ - Inside source: true *** True Line Result # damage occurs half way into the slash animation ** Processing line: ~ return false if slash_complete?~ - Inside source: true *** True Line Result return false if slash_complete? ** Processing line: ~ return false if (player.slash_at + player.slash_frames.idiv(2)) != state.tick_count~ - Inside source: true *** True Line Result return false if (player.slash_at + player.slash_frames.idiv(2)) != state.tick_count ** Processing line: ~ return true~ - Inside source: true *** True Line Result return true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ # generate an enemy if there aren't any on the screen~ - Inside source: true *** True Line Result # generate an enemy if there aren't any on the screen ** Processing line: ~ add_enemy if state.enemies.length == 0~ - Inside source: true *** True Line Result add_enemy if state.enemies.length == 0 ** Processing line: ~ calc_movement~ - Inside source: true *** True Line Result calc_movement ** Processing line: ~ calc_slash~ - Inside source: true *** True Line Result calc_slash ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # source is at http://github.com/amirrajan/dragonruby-link-to-the-past~ - Inside source: true *** True Line Result # source is at http://github.com/amirrajan/dragonruby-link-to-the-past ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render_enemies~ - Inside source: true *** True Line Result render_enemies ** Processing line: ~ render_player~ - Inside source: true *** True Line Result render_player ** Processing line: ~ outputs.labels << [30, 30, "Gamepad: D-Pad to move. B button to attack."]~ - Inside source: true *** True Line Result outputs.labels << [30, 30, "Gamepad: D-Pad to move. B button to attack."] ** Processing line: ~ outputs.labels << [30, 52, "Keyboard: WASD/Arrow keys to move. J to attack."]~ - Inside source: true *** True Line Result outputs.labels << [30, 52, "Keyboard: WASD/Arrow keys to move. J to attack."] ** Processing line: ~ render_debug_layer~ - Inside source: true *** True Line Result render_debug_layer ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player~ - Inside source: true *** True Line Result def player ** Processing line: ~ state.player~ - Inside source: true *** True Line Result state.player ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $game = Game.new~ - Inside source: true *** True Line Result $game = Game.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $game.args = args~ - Inside source: true *** True Line Result $game.args = args ** Processing line: ~ $game.tick~ - Inside source: true *** True Line Result $game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rendering Sprites - Color And Rotation - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rendering Sprites - Color And Rotation - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/03_rendering_sprites/04_color_and_rotation/app/main.rb~ - Inside source: true *** True Line Result # ./samples/03_rendering_sprites/04_color_and_rotation/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - merge: Returns a hash containing the contents of two original hashes.~ - Inside source: true *** True Line Result - merge: Returns a hash containing the contents of two original hashes. ** Processing line: ~ Merge does not allow duplicate keys, so the value of a repeated key~ - Inside source: true *** True Line Result Merge does not allow duplicate keys, so the value of a repeated key ** Processing line: ~ will be overwritten.~ - Inside source: true *** True Line Result will be overwritten. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ For example, if we had two hashes~ - Inside source: true *** True Line Result For example, if we had two hashes ** Processing line: ~ h1 = { "a" => 1, "b" => 2}~ - Inside source: true *** True Line Result h1 = { "a" => 1, "b" => 2} ** Processing line: ~ h2 = { "b" => 3, "c" => 3}~ - Inside source: true *** True Line Result h2 = { "b" => 3, "c" => 3} ** Processing line: ~ and we called the command~ - Inside source: true *** True Line Result and we called the command ** Processing line: ~ h1.merge(h2)~ - Inside source: true *** True Line Result h1.merge(h2) ** Processing line: ~ the result would the following hash~ - Inside source: true *** True Line Result the result would the following hash ** Processing line: ~ { "a" => 1, "b" => 3, "c" => 3}.~ - Inside source: true *** True Line Result { "a" => 1, "b" => 3, "c" => 3}. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - Hashes: Collection of unique keys and their corresponding values. The value can be found~ - Inside source: true *** True Line Result - Hashes: Collection of unique keys and their corresponding values. The value can be found ** Processing line: ~ using their keys.~ - Inside source: true *** True Line Result using their keys. ** Processing line: ~ In this sample app, we're using a hash to create a sprite.~ - Inside source: true *** True Line Result In this sample app, we're using a hash to create a sprite. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.sprites: An array. The values generate a sprite.~ - Inside source: true *** True Line Result - args.outputs.sprites: An array. The values generate a sprite. ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, PATH, ANGLE, ALPHA, RED, GREEN, BLUE]~ - Inside source: true *** True Line Result The parameters are [X, Y, WIDTH, HEIGHT, PATH, ANGLE, ALPHA, RED, GREEN, BLUE] ** Processing line: ~ Before continuing with this sample app, it is HIGHLY recommended that you look~ - Inside source: true *** True Line Result Before continuing with this sample app, it is HIGHLY recommended that you look ** Processing line: ~ at mygame/documentation/05-sprites.md.~ - Inside source: true *** True Line Result at mygame/documentation/05-sprites.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.keyboard.key_held.KEY: Determines if a key is being pressed.~ - Inside source: true *** True Line Result - args.inputs.keyboard.key_held.KEY: Determines if a key is being pressed. ** Processing line: ~ For more information about the keyboard, go to mygame/documentation/06-keyboard.md.~ - Inside source: true *** True Line Result For more information about the keyboard, go to mygame/documentation/06-keyboard.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.controller_one: Takes input from the controller based on what key is pressed.~ - Inside source: true *** True Line Result - args.inputs.controller_one: Takes input from the controller based on what key is pressed. ** Processing line: ~ For more information about the controller, go to mygame/documentation/08-controllers.md.~ - Inside source: true *** True Line Result For more information about the controller, go to mygame/documentation/08-controllers.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - num1.lesser(num2): Finds the lower value of the given options.~ - Inside source: true *** True Line Result - num1.lesser(num2): Finds the lower value of the given options. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app shows a car moving across the screen. It loops back around if it exceeds the dimensions of the screen,~ - Inside source: true *** True Line Result # This sample app shows a car moving across the screen. It loops back around if it exceeds the dimensions of the screen, ** Processing line: ~ # and also can be moved in different directions through keyboard input from the user.~ - Inside source: true *** True Line Result # and also can be moved in different directions through keyboard input from the user. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls the methods necessary for the game to run successfully.~ - Inside source: true *** True Line Result # Calls the methods necessary for the game to run successfully. ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ default args~ - Inside source: true *** True Line Result default args ** Processing line: ~ render args.grid, args.outputs, args.state~ - Inside source: true *** True Line Result render args.grid, args.outputs, args.state ** Processing line: ~ calc args.state~ - Inside source: true *** True Line Result calc args.state ** Processing line: ~ process_inputs args~ - Inside source: true *** True Line Result process_inputs args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets default values for the car sprite~ - Inside source: true *** True Line Result # Sets default values for the car sprite ** Processing line: ~ # Initialization ||= only happens in the first frame~ - Inside source: true *** True Line Result # Initialization ||= only happens in the first frame ** Processing line: ~ def default args~ - Inside source: true *** True Line Result def default args ** Processing line: ~ args.state.sprite.width = 19~ - Inside source: true *** True Line Result args.state.sprite.width = 19 ** Processing line: ~ args.state.sprite.height = 10~ - Inside source: true *** True Line Result args.state.sprite.height = 10 ** Processing line: ~ args.state.sprite.scale = 4~ - Inside source: true *** True Line Result args.state.sprite.scale = 4 ** Processing line: ~ args.state.max_speed = 5~ - Inside source: true *** True Line Result args.state.max_speed = 5 ** Processing line: ~ args.state.x ||= 100~ - Inside source: true *** True Line Result args.state.x ||= 100 ** Processing line: ~ args.state.y ||= 100~ - Inside source: true *** True Line Result args.state.y ||= 100 ** Processing line: ~ args.state.speed ||= 1~ - Inside source: true *** True Line Result args.state.speed ||= 1 ** Processing line: ~ args.state.angle ||= 0~ - Inside source: true *** True Line Result args.state.angle ||= 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs sprite onto screen~ - Inside source: true *** True Line Result # Outputs sprite onto screen ** Processing line: ~ def render grid, outputs, state~ - Inside source: true *** True Line Result def render grid, outputs, state ** Processing line: ~ outputs.solids << [grid.rect, 70, 70, 70] # outputs gray background~ - Inside source: true *** True Line Result outputs.solids << [grid.rect, 70, 70, 70] # outputs gray background ** Processing line: ~ outputs.sprites << [destination_rect(state), # sets first four parameters of car sprite~ - Inside source: true *** True Line Result outputs.sprites << [destination_rect(state), # sets first four parameters of car sprite ** Processing line: ~ 'sprites/86.png', # image path of car~ - Inside source: true *** True Line Result 'sprites/86.png', # image path of car ** Processing line: ~ state.angle,~ - Inside source: true *** True Line Result state.angle, ** Processing line: ~ opacity, # transparency~ - Inside source: true *** True Line Result opacity, # transparency ** Processing line: ~ saturation,~ - Inside source: true *** True Line Result saturation, ** Processing line: ~ source_rect(state), # sprite sub division/tile (tile x, y, w, h)~ - Inside source: true *** True Line Result source_rect(state), # sprite sub division/tile (tile x, y, w, h) ** Processing line: ~ false, false, # don't flip sprites~ - Inside source: true *** True Line Result false, false, # don't flip sprites ** Processing line: ~ rotation_anchor]~ - Inside source: true *** True Line Result rotation_anchor] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # also look at the create_sprite helper method~ - Inside source: true *** True Line Result # also look at the create_sprite helper method ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # For example:~ - Inside source: true *** True Line Result # For example: ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # dest = destination_rect(state)~ - Inside source: true *** True Line Result # dest = destination_rect(state) ** Processing line: ~ # source = source_rect(state),~ - Inside source: true *** True Line Result # source = source_rect(state), ** Processing line: ~ # outputs.sprites << create_sprite(~ - Inside source: true *** True Line Result # outputs.sprites << create_sprite( ** Processing line: ~ # 'sprites/86.png',~ - Inside source: true *** True Line Result # 'sprites/86.png', ** Processing line: ~ # x: dest.x,~ - Inside source: true *** True Line Result # x: dest.x, ** Processing line: ~ # y: dest.y,~ - Inside source: true *** True Line Result # y: dest.y, ** Processing line: ~ # w: dest.w,~ - Inside source: true *** True Line Result # w: dest.w, ** Processing line: ~ # h: dest.h,~ - Inside source: true *** True Line Result # h: dest.h, ** Processing line: ~ # angle: state.angle,~ - Inside source: true *** True Line Result # angle: state.angle, ** Processing line: ~ # source_x: source.x,~ - Inside source: true *** True Line Result # source_x: source.x, ** Processing line: ~ # source_y: source.y,~ - Inside source: true *** True Line Result # source_y: source.y, ** Processing line: ~ # source_w: source.w,~ - Inside source: true *** True Line Result # source_w: source.w, ** Processing line: ~ # source_h: source.h,~ - Inside source: true *** True Line Result # source_h: source.h, ** Processing line: ~ # flip_h: false,~ - Inside source: true *** True Line Result # flip_h: false, ** Processing line: ~ # flip_v: false,~ - Inside source: true *** True Line Result # flip_v: false, ** Processing line: ~ # rotation_anchor_x: 0.7,~ - Inside source: true *** True Line Result # rotation_anchor_x: 0.7, ** Processing line: ~ # rotation_anchor_y: 0.5~ - Inside source: true *** True Line Result # rotation_anchor_y: 0.5 ** Processing line: ~ # )~ - Inside source: true *** True Line Result # ) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates sprite by setting values inside of a hash~ - Inside source: true *** True Line Result # Creates sprite by setting values inside of a hash ** Processing line: ~ def create_sprite path, options = {}~ - Inside source: true *** True Line Result def create_sprite path, options = {} ** Processing line: ~ options = {~ - Inside source: true *** True Line Result options = { ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # dest x, y, w, h~ - Inside source: true *** True Line Result # dest x, y, w, h ** Processing line: ~ x: 0,~ - Inside source: true *** True Line Result x: 0, ** Processing line: ~ y: 0,~ - Inside source: true *** True Line Result y: 0, ** Processing line: ~ w: 100,~ - Inside source: true *** True Line Result w: 100, ** Processing line: ~ h: 100,~ - Inside source: true *** True Line Result h: 100, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # angle, rotation~ - Inside source: true *** True Line Result # angle, rotation ** Processing line: ~ angle: 0,~ - Inside source: true *** True Line Result angle: 0, ** Processing line: ~ rotation_anchor_x: 0.5,~ - Inside source: true *** True Line Result rotation_anchor_x: 0.5, ** Processing line: ~ rotation_anchor_y: 0.5,~ - Inside source: true *** True Line Result rotation_anchor_y: 0.5, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # color saturation (red, green, blue), transparency~ - Inside source: true *** True Line Result # color saturation (red, green, blue), transparency ** Processing line: ~ r: 255,~ - Inside source: true *** True Line Result r: 255, ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 255,~ - Inside source: true *** True Line Result b: 255, ** Processing line: ~ a: 255,~ - Inside source: true *** True Line Result a: 255, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # source x, y, width, height~ - Inside source: true *** True Line Result # source x, y, width, height ** Processing line: ~ source_x: 0,~ - Inside source: true *** True Line Result source_x: 0, ** Processing line: ~ source_y: 0,~ - Inside source: true *** True Line Result source_y: 0, ** Processing line: ~ source_w: -1,~ - Inside source: true *** True Line Result source_w: -1, ** Processing line: ~ source_h: -1,~ - Inside source: true *** True Line Result source_h: -1, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # flip horiztonally, flip vertically~ - Inside source: true *** True Line Result # flip horiztonally, flip vertically ** Processing line: ~ flip_h: false,~ - Inside source: true *** True Line Result flip_h: false, ** Processing line: ~ flip_v: false,~ - Inside source: true *** True Line Result flip_v: false, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ }.merge options~ - Inside source: true *** True Line Result }.merge options ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ options[:x], options[:y], options[:w], options[:h], # dest rect keys~ - Inside source: true *** True Line Result options[:x], options[:y], options[:w], options[:h], # dest rect keys ** Processing line: ~ path,~ - Inside source: true *** True Line Result path, ** Processing line: ~ options[:angle], options[:a], options[:r], options[:g], options[:b], # angle, color, alpha~ - Inside source: true *** True Line Result options[:angle], options[:a], options[:r], options[:g], options[:b], # angle, color, alpha ** Processing line: ~ options[:source_x], options[:source_y], options[:source_w], options[:source_h], # source rect keys~ - Inside source: true *** True Line Result options[:source_x], options[:source_y], options[:source_w], options[:source_h], # source rect keys ** Processing line: ~ options[:flip_h], options[:flip_v], # flip~ - Inside source: true *** True Line Result options[:flip_h], options[:flip_v], # flip ** Processing line: ~ options[:rotation_anchor_x], options[:rotation_anchor_y], # rotation anchor~ - Inside source: true *** True Line Result options[:rotation_anchor_x], options[:rotation_anchor_y], # rotation anchor ** Processing line: ~ ] # hash keys contain corresponding values~ - Inside source: true *** True Line Result ] # hash keys contain corresponding values ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls the calc_pos and calc_wrap methods.~ - Inside source: true *** True Line Result # Calls the calc_pos and calc_wrap methods. ** Processing line: ~ def calc state~ - Inside source: true *** True Line Result def calc state ** Processing line: ~ calc_pos state~ - Inside source: true *** True Line Result calc_pos state ** Processing line: ~ calc_wrap state~ - Inside source: true *** True Line Result calc_wrap state ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Changes sprite's position on screen~ - Inside source: true *** True Line Result # Changes sprite's position on screen ** Processing line: ~ # Vectors have magnitude and direction, so the incremented x and y values give the car direction~ - Inside source: true *** True Line Result # Vectors have magnitude and direction, so the incremented x and y values give the car direction ** Processing line: ~ def calc_pos state~ - Inside source: true *** True Line Result def calc_pos state ** Processing line: ~ state.x += state.angle.vector_x * state.speed # increments x by product of angle's x vector and speed~ - Inside source: true *** True Line Result state.x += state.angle.vector_x * state.speed # increments x by product of angle's x vector and speed ** Processing line: ~ state.y += state.angle.vector_y * state.speed # increments y by product of angle's y vector and speed~ - Inside source: true *** True Line Result state.y += state.angle.vector_y * state.speed # increments y by product of angle's y vector and speed ** Processing line: ~ state.speed *= 1.1 # scales speed up~ - Inside source: true *** True Line Result state.speed *= 1.1 # scales speed up ** Processing line: ~ state.speed = state.speed.lesser(state.max_speed) # speed is either current speed or max speed, whichever has a lesser value (ensures that the car doesn't go too fast or exceed the max speed)~ - Inside source: true *** True Line Result state.speed = state.speed.lesser(state.max_speed) # speed is either current speed or max speed, whichever has a lesser value (ensures that the car doesn't go too fast or exceed the max speed) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The screen's dimensions are 1280x720. If the car goes out of scope,~ - Inside source: true *** True Line Result # The screen's dimensions are 1280x720. If the car goes out of scope, ** Processing line: ~ # it loops back around on the screen.~ - Inside source: true *** True Line Result # it loops back around on the screen. ** Processing line: ~ def calc_wrap state~ - Inside source: true *** True Line Result def calc_wrap state ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # car returns to left side of screen if it disappears on right side of screen~ - Inside source: true *** True Line Result # car returns to left side of screen if it disappears on right side of screen ** Processing line: ~ # sprite.width refers to tile's size, which is multipled by scale (4) to make it bigger~ - Inside source: true *** True Line Result # sprite.width refers to tile's size, which is multipled by scale (4) to make it bigger ** Processing line: ~ state.x = -state.sprite.width * state.sprite.scale if state.x - 20 > 1280~ - Inside source: true *** True Line Result state.x = -state.sprite.width * state.sprite.scale if state.x - 20 > 1280 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # car wraps around to right side of screen if it disappears on the left side~ - Inside source: true *** True Line Result # car wraps around to right side of screen if it disappears on the left side ** Processing line: ~ state.x = 1280 if state.x + state.sprite.width * state.sprite.scale + 20 < 0~ - Inside source: true *** True Line Result state.x = 1280 if state.x + state.sprite.width * state.sprite.scale + 20 < 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # car wraps around to bottom of screen if it disappears at the top of the screen~ - Inside source: true *** True Line Result # car wraps around to bottom of screen if it disappears at the top of the screen ** Processing line: ~ # if you subtract 520 pixels instead of 20 pixels, the car takes longer to reappear (try it!)~ - Inside source: true *** True Line Result # if you subtract 520 pixels instead of 20 pixels, the car takes longer to reappear (try it!) ** Processing line: ~ state.y = 0 if state.y - 20 > 720 # if 20 pixels less than car's y position is greater than vertical scope~ - Inside source: true *** True Line Result state.y = 0 if state.y - 20 > 720 # if 20 pixels less than car's y position is greater than vertical scope ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # car wraps around to top of screen if it disappears at the bottom of the screen~ - Inside source: true *** True Line Result # car wraps around to top of screen if it disappears at the bottom of the screen ** Processing line: ~ state.y = 720 if state.y + state.sprite.height * state.sprite.scale + 20 < 0~ - Inside source: true *** True Line Result state.y = 720 if state.y + state.sprite.height * state.sprite.scale + 20 < 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Changes angle of sprite based on user input from keyboard or controller~ - Inside source: true *** True Line Result # Changes angle of sprite based on user input from keyboard or controller ** Processing line: ~ def process_inputs args~ - Inside source: true *** True Line Result def process_inputs args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # NOTE: increasing the angle doesn't mean that the car will continue to go~ - Inside source: true *** True Line Result # NOTE: increasing the angle doesn't mean that the car will continue to go ** Processing line: ~ # in a specific direction. The angle is increasing, which means that if the~ - Inside source: true *** True Line Result # in a specific direction. The angle is increasing, which means that if the ** Processing line: ~ # left key was kept in the "down" state, the change in the angle would cause~ - Inside source: true *** True Line Result # left key was kept in the "down" state, the change in the angle would cause ** Processing line: ~ # the car to go in a counter-clockwise direction and form a circle (360 degrees)~ - Inside source: true *** True Line Result # the car to go in a counter-clockwise direction and form a circle (360 degrees) ** Processing line: ~ if args.inputs.keyboard.key_held.left # if left key is pressed~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_held.left # if left key is pressed ** Processing line: ~ args.state.angle += 2 # car's angle is incremented by 2~ - Inside source: true *** True Line Result args.state.angle += 2 # car's angle is incremented by 2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The same applies to decreasing the angle. If the right key was kept in the~ - Inside source: true *** True Line Result # The same applies to decreasing the angle. If the right key was kept in the ** Processing line: ~ # "down" state, the decreasing angle would cause the car to go in a clockwise~ - Inside source: true *** True Line Result # "down" state, the decreasing angle would cause the car to go in a clockwise ** Processing line: ~ # direction and form a circle (360 degrees)~ - Inside source: true *** True Line Result # direction and form a circle (360 degrees) ** Processing line: ~ elsif args.inputs.keyboard.key_held.right # if right key is pressed~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_held.right # if right key is pressed ** Processing line: ~ args.state.angle -= 2 # car's angle is decremented by 2~ - Inside source: true *** True Line Result args.state.angle -= 2 # car's angle is decremented by 2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Input from a controller can also change the angle of the car~ - Inside source: true *** True Line Result # Input from a controller can also change the angle of the car ** Processing line: ~ elsif args.inputs.controller_one.left_analog_x_perc != 0~ - Inside source: true *** True Line Result elsif args.inputs.controller_one.left_analog_x_perc != 0 ** Processing line: ~ args.state.angle += 2 * args.inputs.controller_one.left_analog_x_perc * -1~ - Inside source: true *** True Line Result args.state.angle += 2 * args.inputs.controller_one.left_analog_x_perc * -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # A sprite's center of rotation can be altered~ - Inside source: true *** True Line Result # A sprite's center of rotation can be altered ** Processing line: ~ # Increasing either of these numbers would dramatically increase the~ - Inside source: true *** True Line Result # Increasing either of these numbers would dramatically increase the ** Processing line: ~ # car's drift when it turns!~ - Inside source: true *** True Line Result # car's drift when it turns! ** Processing line: ~ def rotation_anchor~ - Inside source: true *** True Line Result def rotation_anchor ** Processing line: ~ [0.7, 0.5]~ - Inside source: true *** True Line Result [0.7, 0.5] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets opacity value of sprite to 255 so that it is not transparent at all~ - Inside source: true *** True Line Result # Sets opacity value of sprite to 255 so that it is not transparent at all ** Processing line: ~ # Change it to 0 and you won't be able to see the car sprite on the screen~ - Inside source: true *** True Line Result # Change it to 0 and you won't be able to see the car sprite on the screen ** Processing line: ~ def opacity~ - Inside source: true *** True Line Result def opacity ** Processing line: ~ 255~ - Inside source: true *** True Line Result 255 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the color of the sprite to white.~ - Inside source: true *** True Line Result # Sets the color of the sprite to white. ** Processing line: ~ def saturation~ - Inside source: true *** True Line Result def saturation ** Processing line: ~ [255, 255, 255]~ - Inside source: true *** True Line Result [255, 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets definition of destination_rect (used to define the car sprite)~ - Inside source: true *** True Line Result # Sets definition of destination_rect (used to define the car sprite) ** Processing line: ~ def destination_rect state~ - Inside source: true *** True Line Result def destination_rect state ** Processing line: ~ [state.x, state.y,~ - Inside source: true *** True Line Result [state.x, state.y, ** Processing line: ~ state.sprite.width * state.sprite.scale, # multiplies by 4 to set size~ - Inside source: true *** True Line Result state.sprite.width * state.sprite.scale, # multiplies by 4 to set size ** Processing line: ~ state.sprite.height * state.sprite.scale]~ - Inside source: true *** True Line Result state.sprite.height * state.sprite.scale] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Portion of a sprite (a tile)~ - Inside source: true *** True Line Result # Portion of a sprite (a tile) ** Processing line: ~ # Sub division of sprite is denoted as a rectangle directly related to original size of .png~ - Inside source: true *** True Line Result # Sub division of sprite is denoted as a rectangle directly related to original size of .png ** Processing line: ~ # Tile is located at bottom left corner within a 19x10 pixel rectangle (based on sprite.width, sprite.height)~ - Inside source: true *** True Line Result # Tile is located at bottom left corner within a 19x10 pixel rectangle (based on sprite.width, sprite.height) ** Processing line: ~ def source_rect state~ - Inside source: true *** True Line Result def source_rect state ** Processing line: ~ [0, 0, state.sprite.width, state.sprite.height]~ - Inside source: true *** True Line Result [0, 0, state.sprite.width, state.sprite.height] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Simple - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Simple - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/01_simple/app/main.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/01_simple/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~ - ARRAY#intersect_rect?: Returns true or false depending on if the two rectangles intersect.~ - Inside source: true *** True Line Result - ARRAY#intersect_rect?: Returns true or false depending on if the two rectangles intersect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.solids: An array. The values generate a solid.~ - Inside source: true *** True Line Result - args.outputs.solids: An array. The values generate a solid. ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE]~ - Inside source: true *** True Line Result The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app shows collisions between two boxes.~ - Inside source: true *** True Line Result # This sample app shows collisions between two boxes. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Runs methods needed for game to run properly.~ - Inside source: true *** True Line Result # Runs methods needed for game to run properly. ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ tick_instructions args, "Sample app shows how to move a square over time and determine collision."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows how to move a square over time and determine collision." ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets default values.~ - Inside source: true *** True Line Result # Sets default values. ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ # These values represent the moving box.~ - Inside source: true *** True Line Result # These values represent the moving box. ** Processing line: ~ args.state.moving_box_speed = 10~ - Inside source: true *** True Line Result args.state.moving_box_speed = 10 ** Processing line: ~ args.state.moving_box_size = 100~ - Inside source: true *** True Line Result args.state.moving_box_size = 100 ** Processing line: ~ args.state.moving_box_dx ||= 1~ - Inside source: true *** True Line Result args.state.moving_box_dx ||= 1 ** Processing line: ~ args.state.moving_box_dy ||= 1~ - Inside source: true *** True Line Result args.state.moving_box_dy ||= 1 ** Processing line: ~ args.state.moving_box ||= [0, 0, args.state.moving_box_size, args.state.moving_box_size] # moving_box_size is set as the width and height~ - Inside source: true *** True Line Result args.state.moving_box ||= [0, 0, args.state.moving_box_size, args.state.moving_box_size] # moving_box_size is set as the width and height ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These values represent the center box.~ - Inside source: true *** True Line Result # These values represent the center box. ** Processing line: ~ args.state.center_box ||= [540, 260, 200, 200, 180]~ - Inside source: true *** True Line Result args.state.center_box ||= [540, 260, 200, 200, 180] ** Processing line: ~ args.state.center_box_collision ||= false # initially no collision~ - Inside source: true *** True Line Result args.state.center_box_collision ||= false # initially no collision ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ # If the game state denotes that a collision has occured,~ - Inside source: true *** True Line Result # If the game state denotes that a collision has occured, ** Processing line: ~ # render a solid square, otherwise render a border instead.~ - Inside source: true *** True Line Result # render a solid square, otherwise render a border instead. ** Processing line: ~ if args.state.center_box_collision~ - Inside source: true *** True Line Result if args.state.center_box_collision ** Processing line: ~ args.outputs.solids << args.state.center_box~ - Inside source: true *** True Line Result args.outputs.solids << args.state.center_box ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.outputs.borders << args.state.center_box~ - Inside source: true *** True Line Result args.outputs.borders << args.state.center_box ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Then render the moving box.~ - Inside source: true *** True Line Result # Then render the moving box. ** Processing line: ~ args.outputs.solids << args.state.moving_box~ - Inside source: true *** True Line Result args.outputs.solids << args.state.moving_box ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Generally in a pipeline for a game engine, you have rendering,~ - Inside source: true *** True Line Result # Generally in a pipeline for a game engine, you have rendering, ** Processing line: ~ # game simulation (calculation), and input processing.~ - Inside source: true *** True Line Result # game simulation (calculation), and input processing. ** Processing line: ~ # This fuction represents the game simulation.~ - Inside source: true *** True Line Result # This fuction represents the game simulation. ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ position_moving_box args~ - Inside source: true *** True Line Result position_moving_box args ** Processing line: ~ determine_collision_center_box args~ - Inside source: true *** True Line Result determine_collision_center_box args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Changes the position of the moving box on the screen by multiplying the change in x (dx) and change in y (dy) by the speed,~ - Inside source: true *** True Line Result # Changes the position of the moving box on the screen by multiplying the change in x (dx) and change in y (dy) by the speed, ** Processing line: ~ # and adding it to the current position.~ - Inside source: true *** True Line Result # and adding it to the current position. ** Processing line: ~ # dx and dy are positive if the box is moving right and up, respectively~ - Inside source: true *** True Line Result # dx and dy are positive if the box is moving right and up, respectively ** Processing line: ~ # dx and dy are negative if the box is moving left and down, respectively~ - Inside source: true *** True Line Result # dx and dy are negative if the box is moving left and down, respectively ** Processing line: ~ def position_moving_box args~ - Inside source: true *** True Line Result def position_moving_box args ** Processing line: ~ args.state.moving_box.x += args.state.moving_box_dx * args.state.moving_box_speed~ - Inside source: true *** True Line Result args.state.moving_box.x += args.state.moving_box_dx * args.state.moving_box_speed ** Processing line: ~ args.state.moving_box.y += args.state.moving_box_dy * args.state.moving_box_speed~ - Inside source: true *** True Line Result args.state.moving_box.y += args.state.moving_box_dy * args.state.moving_box_speed ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # 1280x720 are the virtual pixels you work with (essentially 720p).~ - Inside source: true *** True Line Result # 1280x720 are the virtual pixels you work with (essentially 720p). ** Processing line: ~ screen_width = 1280~ - Inside source: true *** True Line Result screen_width = 1280 ** Processing line: ~ screen_height = 720~ - Inside source: true *** True Line Result screen_height = 720 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Position of the box is denoted by the bottom left hand corner, in~ - Inside source: true *** True Line Result # Position of the box is denoted by the bottom left hand corner, in ** Processing line: ~ # that case, we have to subtract the width of the box so that it stays~ - Inside source: true *** True Line Result # that case, we have to subtract the width of the box so that it stays ** Processing line: ~ # in the scene (you can try deleting the subtraction to see how it~ - Inside source: true *** True Line Result # in the scene (you can try deleting the subtraction to see how it ** Processing line: ~ # impacts the box's movement).~ - Inside source: true *** True Line Result # impacts the box's movement). ** Processing line: ~ if args.state.moving_box.x > screen_width - args.state.moving_box_size~ - Inside source: true *** True Line Result if args.state.moving_box.x > screen_width - args.state.moving_box_size ** Processing line: ~ args.state.moving_box_dx = -1 # moves left~ - Inside source: true *** True Line Result args.state.moving_box_dx = -1 # moves left ** Processing line: ~ elsif args.state.moving_box.x < 0~ - Inside source: true *** True Line Result elsif args.state.moving_box.x < 0 ** Processing line: ~ args.state.moving_box_dx = 1 # moves right~ - Inside source: true *** True Line Result args.state.moving_box_dx = 1 # moves right ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Here, we're making sure the moving box remains within the vertical scope of the screen~ - Inside source: true *** True Line Result # Here, we're making sure the moving box remains within the vertical scope of the screen ** Processing line: ~ if args.state.moving_box.y > screen_height - args.state.moving_box_size # if the box moves too high~ - Inside source: true *** True Line Result if args.state.moving_box.y > screen_height - args.state.moving_box_size # if the box moves too high ** Processing line: ~ args.state.moving_box_dy = -1 # moves down~ - Inside source: true *** True Line Result args.state.moving_box_dy = -1 # moves down ** Processing line: ~ elsif args.state.moving_box.y < 0 # if the box moves too low~ - Inside source: true *** True Line Result elsif args.state.moving_box.y < 0 # if the box moves too low ** Processing line: ~ args.state.moving_box_dy = 1 # moves up~ - Inside source: true *** True Line Result args.state.moving_box_dy = 1 # moves up ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def determine_collision_center_box args~ - Inside source: true *** True Line Result def determine_collision_center_box args ** Processing line: ~ # Collision is handled by the engine. You simply have to call the~ - Inside source: true *** True Line Result # Collision is handled by the engine. You simply have to call the ** Processing line: ~ # `intersect_rect?` function.~ - Inside source: true *** True Line Result # `intersect_rect?` function. ** Processing line: ~ if args.state.moving_box.intersect_rect? args.state.center_box # if the two boxes intersect~ - Inside source: true *** True Line Result if args.state.moving_box.intersect_rect? args.state.center_box # if the two boxes intersect ** Processing line: ~ args.state.center_box_collision = true # then a collision happened~ - Inside source: true *** True Line Result args.state.center_box_collision = true # then a collision happened ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.center_box_collision = false # otherwise, no collision happened~ - Inside source: true *** True Line Result args.state.center_box_collision = false # otherwise, no collision happened ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Moving Objects - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Moving Objects - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/02_moving_objects/app/main.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/02_moving_objects/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - Hashes: Collection of unique keys and their corresponding values. The value can be found~ - Inside source: true *** True Line Result - Hashes: Collection of unique keys and their corresponding values. The value can be found ** Processing line: ~ using their keys.~ - Inside source: true *** True Line Result using their keys. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ For example, if we have a "numbers" hash that stores numbers in English as the~ - Inside source: true *** True Line Result For example, if we have a "numbers" hash that stores numbers in English as the ** Processing line: ~ key and numbers in Spanish as the value, we'd have a hash that looks like this...~ - Inside source: true *** True Line Result key and numbers in Spanish as the value, we'd have a hash that looks like this... ** Processing line: ~ numbers = { "one" => "uno", "two" => "dos", "three" => "tres" }~ - Inside source: true *** True Line Result numbers = { "one" => "uno", "two" => "dos", "three" => "tres" } ** Processing line: ~ and on it goes.~ - Inside source: true *** True Line Result and on it goes. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Now if we wanted to find the corresponding value of the "one" key, we could say~ - Inside source: true *** True Line Result Now if we wanted to find the corresponding value of the "one" key, we could say ** Processing line: ~ puts numbers["one"]~ - Inside source: true *** True Line Result puts numbers["one"] ** Processing line: ~ which would print "uno" to the console.~ - Inside source: true *** True Line Result which would print "uno" to the console. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - num1.greater(num2): Returns the greater value.~ - Inside source: true *** True Line Result - num1.greater(num2): Returns the greater value. ** Processing line: ~ For example, if we have the command~ - Inside source: true *** True Line Result For example, if we have the command ** Processing line: ~ puts 4.greater(3)~ - Inside source: true *** True Line Result puts 4.greater(3) ** Processing line: ~ the number 4 would be printed to the console since it has a greater value than 3.~ - Inside source: true *** True Line Result the number 4 would be printed to the console since it has a greater value than 3. ** Processing line: ~ Similar to lesser, which returns the lesser value.~ - Inside source: true *** True Line Result Similar to lesser, which returns the lesser value. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - num1.lesser(num2): Finds the lower value of the given options.~ - Inside source: true *** True Line Result - num1.lesser(num2): Finds the lower value of the given options. ** Processing line: ~ For example, in the statement~ - Inside source: true *** True Line Result For example, in the statement ** Processing line: ~ a = 4.lesser(3)~ - Inside source: true *** True Line Result a = 4.lesser(3) ** Processing line: ~ 3 has a lower value than 4, which means that the value of a would be set to 3,~ - Inside source: true *** True Line Result 3 has a lower value than 4, which means that the value of a would be set to 3, ** Processing line: ~ but if the statement had been~ - Inside source: true *** True Line Result but if the statement had been ** Processing line: ~ a = 4.lesser(5)~ - Inside source: true *** True Line Result a = 4.lesser(5) ** Processing line: ~ 4 has a lower value than 5, which means that the value of a would be set to 4.~ - Inside source: true *** True Line Result 4 has a lower value than 5, which means that the value of a would be set to 4. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - reject: Removes elements from a collection if they meet certain requirements.~ - Inside source: true *** True Line Result - reject: Removes elements from a collection if they meet certain requirements. ** Processing line: ~ For example, you can derive an array of odd numbers from an original array of~ - Inside source: true *** True Line Result For example, you can derive an array of odd numbers from an original array of ** Processing line: ~ numbers 1 through 10 by rejecting all elements that are even (or divisible by 2).~ - Inside source: true *** True Line Result numbers 1 through 10 by rejecting all elements that are even (or divisible by 2). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - find_all: Finds all values that satisfy specific requirements.~ - Inside source: true *** True Line Result - find_all: Finds all values that satisfy specific requirements. ** Processing line: ~ For example, you can find all elements of a collection that are divisible by 2~ - Inside source: true *** True Line Result For example, you can find all elements of a collection that are divisible by 2 ** Processing line: ~ or find all objects that have intersected with another object.~ - Inside source: true *** True Line Result or find all objects that have intersected with another object. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - abs: Returns the absolute value.~ - Inside source: true *** True Line Result - abs: Returns the absolute value. ** Processing line: ~ For example, the command~ - Inside source: true *** True Line Result For example, the command ** Processing line: ~ (-30).abs~ - Inside source: true *** True Line Result (-30).abs ** Processing line: ~ would return 30 as a result.~ - Inside source: true *** True Line Result would return 30 as a result. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - map: Ruby method used to transform data; used in arrays, hashes, and collections.~ - Inside source: true *** True Line Result - map: Ruby method used to transform data; used in arrays, hashes, and collections. ** Processing line: ~ Can be used to perform an action on every element of a collection, such as multiplying~ - Inside source: true *** True Line Result Can be used to perform an action on every element of a collection, such as multiplying ** Processing line: ~ each element by 2 or declaring every element as a new entity.~ - Inside source: true *** True Line Result each element by 2 or declaring every element as a new entity. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.keyboard.KEY: Determines if a key has been pressed.~ - Inside source: true *** True Line Result - args.inputs.keyboard.KEY: Determines if a key has been pressed. ** Processing line: ~ For more information about the keyboard, take a look at mygame/documentation/06-keyboard.md.~ - Inside source: true *** True Line Result For more information about the keyboard, take a look at mygame/documentation/06-keyboard.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - ARRAY#intersect_rect?: Returns true or false depending on if the two rectangles intersect.~ - Inside source: true *** True Line Result - ARRAY#intersect_rect?: Returns true or false depending on if the two rectangles intersect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.solids: An array. The values generate a solid.~ - Inside source: true *** True Line Result - args.outputs.solids: An array. The values generate a solid. ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE]~ - Inside source: true *** True Line Result The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE] ** Processing line: ~ For more information about solids, go to mygame/documentation/03-solids-and-borders.md.~ - Inside source: true *** True Line Result For more information about solids, go to mygame/documentation/03-solids-and-borders.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls methods needed for game to run properly~ - Inside source: true *** True Line Result # Calls methods needed for game to run properly ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ tick_instructions args, "Use LEFT and RIGHT arrow keys to move and SPACE to jump."~ - Inside source: true *** True Line Result tick_instructions args, "Use LEFT and RIGHT arrow keys to move and SPACE to jump." ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~ input args~ - Inside source: true *** True Line Result input args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # sets default values and creates empty collections~ - Inside source: true *** True Line Result # sets default values and creates empty collections ** Processing line: ~ # initialization only happens in the first frame~ - Inside source: true *** True Line Result # initialization only happens in the first frame ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ fiddle args~ - Inside source: true *** True Line Result fiddle args ** Processing line: ~ args.state.enemy.hammers ||= []~ - Inside source: true *** True Line Result args.state.enemy.hammers ||= [] ** Processing line: ~ args.state.enemy.hammer_queue ||= []~ - Inside source: true *** True Line Result args.state.enemy.hammer_queue ||= [] ** Processing line: ~ args.state.tick_count = args.state.tick_count~ - Inside source: true *** True Line Result args.state.tick_count = args.state.tick_count ** Processing line: ~ args.state.bridge_top = 128~ - Inside source: true *** True Line Result args.state.bridge_top = 128 ** Processing line: ~ args.state.player.x ||= 0 # initializes player's properties~ - Inside source: true *** True Line Result args.state.player.x ||= 0 # initializes player's properties ** Processing line: ~ args.state.player.y ||= args.state.bridge_top~ - Inside source: true *** True Line Result args.state.player.y ||= args.state.bridge_top ** Processing line: ~ args.state.player.w ||= 64~ - Inside source: true *** True Line Result args.state.player.w ||= 64 ** Processing line: ~ args.state.player.h ||= 64~ - Inside source: true *** True Line Result args.state.player.h ||= 64 ** Processing line: ~ args.state.player.dy ||= 0~ - Inside source: true *** True Line Result args.state.player.dy ||= 0 ** Processing line: ~ args.state.player.dx ||= 0~ - Inside source: true *** True Line Result args.state.player.dx ||= 0 ** Processing line: ~ args.state.enemy.x ||= 800 # initializes enemy's properties~ - Inside source: true *** True Line Result args.state.enemy.x ||= 800 # initializes enemy's properties ** Processing line: ~ args.state.enemy.y ||= 0~ - Inside source: true *** True Line Result args.state.enemy.y ||= 0 ** Processing line: ~ args.state.enemy.w ||= 128~ - Inside source: true *** True Line Result args.state.enemy.w ||= 128 ** Processing line: ~ args.state.enemy.h ||= 128~ - Inside source: true *** True Line Result args.state.enemy.h ||= 128 ** Processing line: ~ args.state.enemy.dy ||= 0~ - Inside source: true *** True Line Result args.state.enemy.dy ||= 0 ** Processing line: ~ args.state.enemy.dx ||= 0~ - Inside source: true *** True Line Result args.state.enemy.dx ||= 0 ** Processing line: ~ args.state.game_over_at ||= 0~ - Inside source: true *** True Line Result args.state.game_over_at ||= 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # sets enemy, player, hammer values~ - Inside source: true *** True Line Result # sets enemy, player, hammer values ** Processing line: ~ def fiddle args~ - Inside source: true *** True Line Result def fiddle args ** Processing line: ~ args.state.gravity = -0.3~ - Inside source: true *** True Line Result args.state.gravity = -0.3 ** Processing line: ~ args.state.enemy_jump_power = 10 # sets enemy values~ - Inside source: true *** True Line Result args.state.enemy_jump_power = 10 # sets enemy values ** Processing line: ~ args.state.enemy_jump_interval = 60~ - Inside source: true *** True Line Result args.state.enemy_jump_interval = 60 ** Processing line: ~ args.state.hammer_throw_interval = 40 # sets hammer values~ - Inside source: true *** True Line Result args.state.hammer_throw_interval = 40 # sets hammer values ** Processing line: ~ args.state.hammer_launch_power_default = 5~ - Inside source: true *** True Line Result args.state.hammer_launch_power_default = 5 ** Processing line: ~ args.state.hammer_launch_power_near = 2~ - Inside source: true *** True Line Result args.state.hammer_launch_power_near = 2 ** Processing line: ~ args.state.hammer_launch_power_far = 7~ - Inside source: true *** True Line Result args.state.hammer_launch_power_far = 7 ** Processing line: ~ args.state.hammer_upward_launch_power = 15~ - Inside source: true *** True Line Result args.state.hammer_upward_launch_power = 15 ** Processing line: ~ args.state.max_hammers_per_volley = 10~ - Inside source: true *** True Line Result args.state.max_hammers_per_volley = 10 ** Processing line: ~ args.state.gap_between_hammers = 10~ - Inside source: true *** True Line Result args.state.gap_between_hammers = 10 ** Processing line: ~ args.state.player_jump_power = 10 # sets player values~ - Inside source: true *** True Line Result args.state.player_jump_power = 10 # sets player values ** Processing line: ~ args.state.player_jump_power_duration = 10~ - Inside source: true *** True Line Result args.state.player_jump_power_duration = 10 ** Processing line: ~ args.state.player_max_run_speed = 10~ - Inside source: true *** True Line Result args.state.player_max_run_speed = 10 ** Processing line: ~ args.state.player_speed_slowdown_rate = 0.9~ - Inside source: true *** True Line Result args.state.player_speed_slowdown_rate = 0.9 ** Processing line: ~ args.state.player_acceleration = 1~ - Inside source: true *** True Line Result args.state.player_acceleration = 1 ** Processing line: ~ args.state.hammer_size = 32~ - Inside source: true *** True Line Result args.state.hammer_size = 32 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # outputs objects onto the screen~ - Inside source: true *** True Line Result # outputs objects onto the screen ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ args.outputs.solids << 20.map_with_index do |i| # uses 20 squares to form bridge~ - Inside source: true *** True Line Result args.outputs.solids << 20.map_with_index do |i| # uses 20 squares to form bridge ** Processing line: ~ # sets x by multiplying 64 to index to find pixel value (places all squares side by side)~ - Inside source: true *** True Line Result # sets x by multiplying 64 to index to find pixel value (places all squares side by side) ** Processing line: ~ # subtracts 64 from bridge_top because position is denoted by bottom left corner~ - Inside source: true *** True Line Result # subtracts 64 from bridge_top because position is denoted by bottom left corner ** Processing line: ~ [i * 64, args.state.bridge_top - 64, 64, 64]~ - Inside source: true *** True Line Result [i * 64, args.state.bridge_top - 64, 64, 64] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.solids << [args.state.x, args.state.y, args.state.w, args.state.h, 255, 0, 0]~ - Inside source: true *** True Line Result args.outputs.solids << [args.state.x, args.state.y, args.state.w, args.state.h, 255, 0, 0] ** Processing line: ~ args.outputs.solids << [args.state.player.x, args.state.player.y, args.state.player.w, args.state.player.h, 255, 0, 0] # outputs player onto screen (red box)~ - Inside source: true *** True Line Result args.outputs.solids << [args.state.player.x, args.state.player.y, args.state.player.w, args.state.player.h, 255, 0, 0] # outputs player onto screen (red box) ** Processing line: ~ args.outputs.solids << [args.state.enemy.x, args.state.enemy.y, args.state.enemy.w, args.state.enemy.h, 0, 255, 0] # outputs enemy onto screen (green box)~ - Inside source: true *** True Line Result args.outputs.solids << [args.state.enemy.x, args.state.enemy.y, args.state.enemy.w, args.state.enemy.h, 0, 255, 0] # outputs enemy onto screen (green box) ** Processing line: ~ args.outputs.solids << args.state.enemy.hammers # outputs enemy's hammers onto screen~ - Inside source: true *** True Line Result args.outputs.solids << args.state.enemy.hammers # outputs enemy's hammers onto screen ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Performs calculations to move objects on the screen~ - Inside source: true *** True Line Result # Performs calculations to move objects on the screen ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Since velocity is the change in position, the change in x increases by dx. Same with y and dy.~ - Inside source: true *** True Line Result # Since velocity is the change in position, the change in x increases by dx. Same with y and dy. ** Processing line: ~ args.state.player.x += args.state.player.dx~ - Inside source: true *** True Line Result args.state.player.x += args.state.player.dx ** Processing line: ~ args.state.player.y += args.state.player.dy~ - Inside source: true *** True Line Result args.state.player.y += args.state.player.dy ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Since acceleration is the change in velocity, the change in y (dy) increases every frame~ - Inside source: true *** True Line Result # Since acceleration is the change in velocity, the change in y (dy) increases every frame ** Processing line: ~ args.state.player.dy += args.state.gravity~ - Inside source: true *** True Line Result args.state.player.dy += args.state.gravity ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # player's y position is either current y position or y position of top of~ - Inside source: true *** True Line Result # player's y position is either current y position or y position of top of ** Processing line: ~ # bridge, whichever has a greater value~ - Inside source: true *** True Line Result # bridge, whichever has a greater value ** Processing line: ~ # ensures that the player never goes below the bridge~ - Inside source: true *** True Line Result # ensures that the player never goes below the bridge ** Processing line: ~ args.state.player.y = args.state.player.y.greater(args.state.bridge_top)~ - Inside source: true *** True Line Result args.state.player.y = args.state.player.y.greater(args.state.bridge_top) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # player's x position is either the current x position or 0, whichever has a greater value~ - Inside source: true *** True Line Result # player's x position is either the current x position or 0, whichever has a greater value ** Processing line: ~ # ensures that the player doesn't go too far left (out of the screen's scope)~ - Inside source: true *** True Line Result # ensures that the player doesn't go too far left (out of the screen's scope) ** Processing line: ~ args.state.player.x = args.state.player.x.greater(0)~ - Inside source: true *** True Line Result args.state.player.x = args.state.player.x.greater(0) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # player is not falling if it is located on the top of the bridge~ - Inside source: true *** True Line Result # player is not falling if it is located on the top of the bridge ** Processing line: ~ args.state.player.falling = false if args.state.player.y == args.state.bridge_top~ - Inside source: true *** True Line Result args.state.player.falling = false if args.state.player.y == args.state.bridge_top ** Processing line: ~ args.state.player.rect = [args.state.player.x, args.state.player.y, args.state.player.h, args.state.player.w] # sets definition for player~ - Inside source: true *** True Line Result args.state.player.rect = [args.state.player.x, args.state.player.y, args.state.player.h, args.state.player.w] # sets definition for player ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.enemy.x += args.state.enemy.dx # velocity; change in x increases by dx~ - Inside source: true *** True Line Result args.state.enemy.x += args.state.enemy.dx # velocity; change in x increases by dx ** Processing line: ~ args.state.enemy.y += args.state.enemy.dy # same with y and dy~ - Inside source: true *** True Line Result args.state.enemy.y += args.state.enemy.dy # same with y and dy ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ensures that the enemy never goes below the bridge~ - Inside source: true *** True Line Result # ensures that the enemy never goes below the bridge ** Processing line: ~ args.state.enemy.y = args.state.enemy.y.greater(args.state.bridge_top)~ - Inside source: true *** True Line Result args.state.enemy.y = args.state.enemy.y.greater(args.state.bridge_top) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ensures that the enemy never goes too far left (outside the screen's scope)~ - Inside source: true *** True Line Result # ensures that the enemy never goes too far left (outside the screen's scope) ** Processing line: ~ args.state.enemy.x = args.state.enemy.x.greater(0)~ - Inside source: true *** True Line Result args.state.enemy.x = args.state.enemy.x.greater(0) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # objects that go up must come down because of gravity~ - Inside source: true *** True Line Result # objects that go up must come down because of gravity ** Processing line: ~ args.state.enemy.dy += args.state.gravity~ - Inside source: true *** True Line Result args.state.enemy.dy += args.state.gravity ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.enemy.y = args.state.enemy.y.greater(args.state.bridge_top)~ - Inside source: true *** True Line Result args.state.enemy.y = args.state.enemy.y.greater(args.state.bridge_top) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #sets definition of enemy~ - Inside source: true *** True Line Result #sets definition of enemy ** Processing line: ~ args.state.enemy.rect = [args.state.enemy.x, args.state.enemy.y, args.state.enemy.h, args.state.enemy.w]~ - Inside source: true *** True Line Result args.state.enemy.rect = [args.state.enemy.x, args.state.enemy.y, args.state.enemy.h, args.state.enemy.w] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.enemy.y == args.state.bridge_top # if enemy is located on the top of the bridge~ - Inside source: true *** True Line Result if args.state.enemy.y == args.state.bridge_top # if enemy is located on the top of the bridge ** Processing line: ~ args.state.enemy.dy = 0 # there is no change in y~ - Inside source: true *** True Line Result args.state.enemy.dy = 0 # there is no change in y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if 60 frames have passed and the enemy is not moving vertically~ - Inside source: true *** True Line Result # if 60 frames have passed and the enemy is not moving vertically ** Processing line: ~ if args.state.tick_count.mod_zero?(args.state.enemy_jump_interval) && args.state.enemy.dy == 0~ - Inside source: true *** True Line Result if args.state.tick_count.mod_zero?(args.state.enemy_jump_interval) && args.state.enemy.dy == 0 ** Processing line: ~ args.state.enemy.dy = args.state.enemy_jump_power # the enemy jumps up~ - Inside source: true *** True Line Result args.state.enemy.dy = args.state.enemy_jump_power # the enemy jumps up ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if 40 frames have passed or 5 frames have passed since the game ended~ - Inside source: true *** True Line Result # if 40 frames have passed or 5 frames have passed since the game ended ** Processing line: ~ if args.state.tick_count.mod_zero?(args.state.hammer_throw_interval) || args.state.game_over_at.elapsed_time == 5~ - Inside source: true *** True Line Result if args.state.tick_count.mod_zero?(args.state.hammer_throw_interval) || args.state.game_over_at.elapsed_time == 5 ** Processing line: ~ # rand will return a number greater than or equal to 0 and less than given variable's value (since max is excluded)~ - Inside source: true *** True Line Result # rand will return a number greater than or equal to 0 and less than given variable's value (since max is excluded) ** Processing line: ~ # that is why we're adding 1, to include the max possibility~ - Inside source: true *** True Line Result # that is why we're adding 1, to include the max possibility ** Processing line: ~ volley_dx = (rand(args.state.hammer_launch_power_default) + 1) * -1 # horizontal movement (follow order of operations)~ - Inside source: true *** True Line Result volley_dx = (rand(args.state.hammer_launch_power_default) + 1) * -1 # horizontal movement (follow order of operations) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the horizontal distance between the player and enemy is less than 128 pixels~ - Inside source: true *** True Line Result # if the horizontal distance between the player and enemy is less than 128 pixels ** Processing line: ~ if (args.state.player.x - args.state.enemy.x).abs < 128~ - Inside source: true *** True Line Result if (args.state.player.x - args.state.enemy.x).abs < 128 ** Processing line: ~ # the change in x won't be that great since the enemy and player are closer to each other~ - Inside source: true *** True Line Result # the change in x won't be that great since the enemy and player are closer to each other ** Processing line: ~ volley_dx = (rand(args.state.hammer_launch_power_near) + 1) * -1~ - Inside source: true *** True Line Result volley_dx = (rand(args.state.hammer_launch_power_near) + 1) * -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the horizontal distance between the player and enemy is greater than 300 pixels~ - Inside source: true *** True Line Result # if the horizontal distance between the player and enemy is greater than 300 pixels ** Processing line: ~ if (args.state.player.x - args.state.enemy.x).abs > 300~ - Inside source: true *** True Line Result if (args.state.player.x - args.state.enemy.x).abs > 300 ** Processing line: ~ # change in x will be more drastic since player and enemy are so far apart~ - Inside source: true *** True Line Result # change in x will be more drastic since player and enemy are so far apart ** Processing line: ~ volley_dx = (rand(args.state.hammer_launch_power_far) + 1) * -1 # more drastic change~ - Inside source: true *** True Line Result volley_dx = (rand(args.state.hammer_launch_power_far) + 1) * -1 # more drastic change ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ (rand(args.state.max_hammers_per_volley) + 1).map_with_index do |i|~ - Inside source: true *** True Line Result (rand(args.state.max_hammers_per_volley) + 1).map_with_index do |i| ** Processing line: ~ args.state.enemy.hammer_queue << { # stores hammer values in a hash~ - Inside source: true *** True Line Result args.state.enemy.hammer_queue << { # stores hammer values in a hash ** Processing line: ~ x: args.state.enemy.x,~ - Inside source: true *** True Line Result x: args.state.enemy.x, ** Processing line: ~ w: args.state.hammer_size,~ - Inside source: true *** True Line Result w: args.state.hammer_size, ** Processing line: ~ h: args.state.hammer_size,~ - Inside source: true *** True Line Result h: args.state.hammer_size, ** Processing line: ~ dx: volley_dx, # change in horizontal position~ - Inside source: true *** True Line Result dx: volley_dx, # change in horizontal position ** Processing line: ~ # multiplication operator takes precedence over addition operator~ - Inside source: true *** True Line Result # multiplication operator takes precedence over addition operator ** Processing line: ~ throw_at: args.state.tick_count + i * args.state.gap_between_hammers~ - Inside source: true *** True Line Result throw_at: args.state.tick_count + i * args.state.gap_between_hammers ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # add elements from hammer_queue collection to the hammers collection by~ - Inside source: true *** True Line Result # add elements from hammer_queue collection to the hammers collection by ** Processing line: ~ # finding all hammers that were thrown before the current frame (have already been thrown)~ - Inside source: true *** True Line Result # finding all hammers that were thrown before the current frame (have already been thrown) ** Processing line: ~ args.state.enemy.hammers += args.state.enemy.hammer_queue.find_all do |h|~ - Inside source: true *** True Line Result args.state.enemy.hammers += args.state.enemy.hammer_queue.find_all do |h| ** Processing line: ~ h[:throw_at] < args.state.tick_count~ - Inside source: true *** True Line Result h[:throw_at] < args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.enemy.hammers.each do |h| # sets values for all hammers in collection~ - Inside source: true *** True Line Result args.state.enemy.hammers.each do |h| # sets values for all hammers in collection ** Processing line: ~ h[:y] ||= args.state.enemy.y + 130~ - Inside source: true *** True Line Result h[:y] ||= args.state.enemy.y + 130 ** Processing line: ~ h[:dy] ||= args.state.hammer_upward_launch_power~ - Inside source: true *** True Line Result h[:dy] ||= args.state.hammer_upward_launch_power ** Processing line: ~ h[:dy] += args.state.gravity # acceleration is change in gravity~ - Inside source: true *** True Line Result h[:dy] += args.state.gravity # acceleration is change in gravity ** Processing line: ~ h[:x] += h[:dx] # incremented by change in position~ - Inside source: true *** True Line Result h[:x] += h[:dx] # incremented by change in position ** Processing line: ~ h[:y] += h[:dy]~ - Inside source: true *** True Line Result h[:y] += h[:dy] ** Processing line: ~ h[:rect] = [h[:x], h[:y], h[:w], h[:h]] # sets definition of hammer's rect~ - Inside source: true *** True Line Result h[:rect] = [h[:x], h[:y], h[:w], h[:h]] # sets definition of hammer's rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # reject hammers that have been thrown before current frame (have already been thrown)~ - Inside source: true *** True Line Result # reject hammers that have been thrown before current frame (have already been thrown) ** Processing line: ~ args.state.enemy.hammer_queue = args.state.enemy.hammer_queue.reject do |h|~ - Inside source: true *** True Line Result args.state.enemy.hammer_queue = args.state.enemy.hammer_queue.reject do |h| ** Processing line: ~ h[:throw_at] < args.state.tick_count~ - Inside source: true *** True Line Result h[:throw_at] < args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # any hammers with a y position less than 0 are rejected from the hammers collection~ - Inside source: true *** True Line Result # any hammers with a y position less than 0 are rejected from the hammers collection ** Processing line: ~ # since they have gone too far down (outside the scope's screen)~ - Inside source: true *** True Line Result # since they have gone too far down (outside the scope's screen) ** Processing line: ~ args.state.enemy.hammers = args.state.enemy.hammers.reject { |h| h[:y] < 0 }~ - Inside source: true *** True Line Result args.state.enemy.hammers = args.state.enemy.hammers.reject { |h| h[:y] < 0 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if there are any hammers that intersect with (or hit) the player,~ - Inside source: true *** True Line Result # if there are any hammers that intersect with (or hit) the player, ** Processing line: ~ # the reset_player method is called (so the game can start over)~ - Inside source: true *** True Line Result # the reset_player method is called (so the game can start over) ** Processing line: ~ if args.state.enemy.hammers.any? { |h| h[:rect].intersect_rect?(args.state.player.rect) }~ - Inside source: true *** True Line Result if args.state.enemy.hammers.any? { |h| h[:rect].intersect_rect?(args.state.player.rect) } ** Processing line: ~ reset_player args~ - Inside source: true *** True Line Result reset_player args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the enemy's rect intersects with (or hits) the player,~ - Inside source: true *** True Line Result # if the enemy's rect intersects with (or hits) the player, ** Processing line: ~ # the reset_player method is called (so the game can start over)~ - Inside source: true *** True Line Result # the reset_player method is called (so the game can start over) ** Processing line: ~ if args.state.enemy.rect.intersect_rect? args.state.player.rect~ - Inside source: true *** True Line Result if args.state.enemy.rect.intersect_rect? args.state.player.rect ** Processing line: ~ reset_player args~ - Inside source: true *** True Line Result reset_player args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Resets the player by changing its properties back to the values they had at initialization~ - Inside source: true *** True Line Result # Resets the player by changing its properties back to the values they had at initialization ** Processing line: ~ def reset_player args~ - Inside source: true *** True Line Result def reset_player args ** Processing line: ~ args.state.player.x = 0~ - Inside source: true *** True Line Result args.state.player.x = 0 ** Processing line: ~ args.state.player.y = args.state.bridge_top~ - Inside source: true *** True Line Result args.state.player.y = args.state.bridge_top ** Processing line: ~ args.state.player.dy = 0~ - Inside source: true *** True Line Result args.state.player.dy = 0 ** Processing line: ~ args.state.player.dx = 0~ - Inside source: true *** True Line Result args.state.player.dx = 0 ** Processing line: ~ args.state.enemy.hammers.clear # empties hammer collection~ - Inside source: true *** True Line Result args.state.enemy.hammers.clear # empties hammer collection ** Processing line: ~ args.state.enemy.hammer_queue.clear # empties hammer_queue~ - Inside source: true *** True Line Result args.state.enemy.hammer_queue.clear # empties hammer_queue ** Processing line: ~ args.state.game_over_at = args.state.tick_count # game_over_at set to current frame (or passage of time)~ - Inside source: true *** True Line Result args.state.game_over_at = args.state.tick_count # game_over_at set to current frame (or passage of time) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Processes input from the user to move the player~ - Inside source: true *** True Line Result # Processes input from the user to move the player ** Processing line: ~ def input args~ - Inside source: true *** True Line Result def input args ** Processing line: ~ if args.inputs.keyboard.space # if the user presses the space bar~ - Inside source: true *** True Line Result if args.inputs.keyboard.space # if the user presses the space bar ** Processing line: ~ args.state.player.jumped_at ||= args.state.tick_count # jumped_at is set to current frame~ - Inside source: true *** True Line Result args.state.player.jumped_at ||= args.state.tick_count # jumped_at is set to current frame ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the time that has passed since the jump is less than the player's jump duration and~ - Inside source: true *** True Line Result # if the time that has passed since the jump is less than the player's jump duration and ** Processing line: ~ # the player is not falling~ - Inside source: true *** True Line Result # the player is not falling ** Processing line: ~ if args.state.player.jumped_at.elapsed_time < args.state.player_jump_power_duration && !args.state.player.falling~ - Inside source: true *** True Line Result if args.state.player.jumped_at.elapsed_time < args.state.player_jump_power_duration && !args.state.player.falling ** Processing line: ~ args.state.player.dy = args.state.player_jump_power # change in y is set to power of player's jump~ - Inside source: true *** True Line Result args.state.player.dy = args.state.player_jump_power # change in y is set to power of player's jump ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the space bar is in the "up" state (or not being pressed down)~ - Inside source: true *** True Line Result # if the space bar is in the "up" state (or not being pressed down) ** Processing line: ~ if args.inputs.keyboard.key_up.space~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_up.space ** Processing line: ~ args.state.player.jumped_at = nil # jumped_at is empty~ - Inside source: true *** True Line Result args.state.player.jumped_at = nil # jumped_at is empty ** Processing line: ~ args.state.player.falling = true # the player is falling~ - Inside source: true *** True Line Result args.state.player.falling = true # the player is falling ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.keyboard.left # if left key is pressed~ - Inside source: true *** True Line Result if args.inputs.keyboard.left # if left key is pressed ** Processing line: ~ args.state.player.dx -= args.state.player_acceleration # dx decreases by acceleration (player goes left)~ - Inside source: true *** True Line Result args.state.player.dx -= args.state.player_acceleration # dx decreases by acceleration (player goes left) ** Processing line: ~ # dx is either set to current dx or the negative max run speed (which would be -10),~ - Inside source: true *** True Line Result # dx is either set to current dx or the negative max run speed (which would be -10), ** Processing line: ~ # whichever has a greater value~ - Inside source: true *** True Line Result # whichever has a greater value ** Processing line: ~ args.state.player.dx = args.state.player.dx.greater(-args.state.player_max_run_speed)~ - Inside source: true *** True Line Result args.state.player.dx = args.state.player.dx.greater(-args.state.player_max_run_speed) ** Processing line: ~ elsif args.inputs.keyboard.right # if right key is pressed~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.right # if right key is pressed ** Processing line: ~ args.state.player.dx += args.state.player_acceleration # dx increases by acceleration (player goes right)~ - Inside source: true *** True Line Result args.state.player.dx += args.state.player_acceleration # dx increases by acceleration (player goes right) ** Processing line: ~ # dx is either set to current dx or max run speed (which would be 10),~ - Inside source: true *** True Line Result # dx is either set to current dx or max run speed (which would be 10), ** Processing line: ~ # whichever has a lesser value~ - Inside source: true *** True Line Result # whichever has a lesser value ** Processing line: ~ args.state.player.dx = args.state.player.dx.lesser(args.state.player_max_run_speed)~ - Inside source: true *** True Line Result args.state.player.dx = args.state.player.dx.lesser(args.state.player_max_run_speed) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.player.dx *= args.state.player_speed_slowdown_rate # dx is scaled down~ - Inside source: true *** True Line Result args.state.player.dx *= args.state.player_speed_slowdown_rate # dx is scaled down ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.space ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.space || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Entities - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Entities - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/03_entities/app/main.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/03_entities/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - map: Ruby method used to transform data; used in arrays, hashes, and collections.~ - Inside source: true *** True Line Result - map: Ruby method used to transform data; used in arrays, hashes, and collections. ** Processing line: ~ Can be used to perform an action on every element of a collection, such as multiplying~ - Inside source: true *** True Line Result Can be used to perform an action on every element of a collection, such as multiplying ** Processing line: ~ each element by 2 or declaring every element as a new entity.~ - Inside source: true *** True Line Result each element by 2 or declaring every element as a new entity. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - reject: Removes elements from a collection if they meet certain requirements.~ - Inside source: true *** True Line Result - reject: Removes elements from a collection if they meet certain requirements. ** Processing line: ~ For example, you can derive an array of odd numbers from an original array of~ - Inside source: true *** True Line Result For example, you can derive an array of odd numbers from an original array of ** Processing line: ~ numbers 1 through 10 by rejecting all elements that are even (or divisible by 2).~ - Inside source: true *** True Line Result numbers 1 through 10 by rejecting all elements that are even (or divisible by 2). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.state.new_entity: Used when we want to create a new object, like a sprite or button.~ - Inside source: true *** True Line Result - args.state.new_entity: Used when we want to create a new object, like a sprite or button. ** Processing line: ~ In this sample app, new_entity is used to define the properties of enemies and bullets.~ - Inside source: true *** True Line Result In this sample app, new_entity is used to define the properties of enemies and bullets. ** Processing line: ~ (Remember, you can use state to define ANY property and it will be retained across frames.)~ - Inside source: true *** True Line Result (Remember, you can use state to define ANY property and it will be retained across frames.) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.labels: An array. The values generate a label on the screen.~ - Inside source: true *** True Line Result - args.outputs.labels: An array. The values generate a label on the screen. ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result The parameters are [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - ARRAY#intersect_rect?: Returns true or false depending on if the two rectangles intersect.~ - Inside source: true *** True Line Result - ARRAY#intersect_rect?: Returns true or false depending on if the two rectangles intersect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.mouse.click.point.(x|y): The x and y location of the mouse.~ - Inside source: true *** True Line Result - args.inputs.mouse.click.point.(x|y): The x and y location of the mouse. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app shows enemies that contain an id value and the time they were created.~ - Inside source: true *** True Line Result # This sample app shows enemies that contain an id value and the time they were created. ** Processing line: ~ # These enemies can be removed by shooting at them with bullets.~ - Inside source: true *** True Line Result # These enemies can be removed by shooting at them with bullets. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls all methods necessary for the game to function properly.~ - Inside source: true *** True Line Result # Calls all methods necessary for the game to function properly. ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ tick_instructions args, "Sample app shows how to use args.state.new_entity along with collisions. CLICK to shoot a bullet."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows how to use args.state.new_entity along with collisions. CLICK to shoot a bullet." ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~ process_inputs args~ - Inside source: true *** True Line Result process_inputs args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets default values~ - Inside source: true *** True Line Result # Sets default values ** Processing line: ~ # Enemies and bullets start off as empty collections~ - Inside source: true *** True Line Result # Enemies and bullets start off as empty collections ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ args.state.enemies ||= []~ - Inside source: true *** True Line Result args.state.enemies ||= [] ** Processing line: ~ args.state.bullets ||= []~ - Inside source: true *** True Line Result args.state.bullets ||= [] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Provides each enemy in enemies collection with rectangular border,~ - Inside source: true *** True Line Result # Provides each enemy in enemies collection with rectangular border, ** Processing line: ~ # as well as a label showing id and when they were created~ - Inside source: true *** True Line Result # as well as a label showing id and when they were created ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ # When you're calling a method that takes no arguments, you can use this & syntax on map.~ - Inside source: true *** True Line Result # When you're calling a method that takes no arguments, you can use this & syntax on map. ** Processing line: ~ # Numbers are being added to x and y in order to keep the text within the enemy's borders.~ - Inside source: true *** True Line Result # Numbers are being added to x and y in order to keep the text within the enemy's borders. ** Processing line: ~ args.outputs.borders << args.state.enemies.map(&:rect)~ - Inside source: true *** True Line Result args.outputs.borders << args.state.enemies.map(&:rect) ** Processing line: ~ args.outputs.labels << args.state.enemies.flat_map do |enemy|~ - Inside source: true *** True Line Result args.outputs.labels << args.state.enemies.flat_map do |enemy| ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [enemy.x + 4, enemy.y + 29, "id: #{enemy.entity_id}", -3, 0],~ - Inside source: true *** True Line Result [enemy.x + 4, enemy.y + 29, "id: #{enemy.entity_id}", -3, 0], ** Processing line: ~ [enemy.x + 4, enemy.y + 17, "created_at: #{enemy.created_at}", -3, 0] # frame enemy was created~ - Inside source: true *** True Line Result [enemy.x + 4, enemy.y + 17, "created_at: #{enemy.created_at}", -3, 0] # frame enemy was created ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs bullets in bullets collection as rectangular solids~ - Inside source: true *** True Line Result # Outputs bullets in bullets collection as rectangular solids ** Processing line: ~ args.outputs.solids << args.state.bullets.map(&:rect)~ - Inside source: true *** True Line Result args.outputs.solids << args.state.bullets.map(&:rect) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls all methods necessary for performing calculations~ - Inside source: true *** True Line Result # Calls all methods necessary for performing calculations ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ add_new_enemies_if_needed args~ - Inside source: true *** True Line Result add_new_enemies_if_needed args ** Processing line: ~ move_bullets args~ - Inside source: true *** True Line Result move_bullets args ** Processing line: ~ calculate_collisions args~ - Inside source: true *** True Line Result calculate_collisions args ** Processing line: ~ remove_bullets_of_screen args~ - Inside source: true *** True Line Result remove_bullets_of_screen args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds enemies to the enemies collection and sets their values~ - Inside source: true *** True Line Result # Adds enemies to the enemies collection and sets their values ** Processing line: ~ def add_new_enemies_if_needed args~ - Inside source: true *** True Line Result def add_new_enemies_if_needed args ** Processing line: ~ return if args.state.enemies.length >= 10 # if 10 or more enemies, enemies are not added~ - Inside source: true *** True Line Result return if args.state.enemies.length >= 10 # if 10 or more enemies, enemies are not added ** Processing line: ~ return unless args.state.bullets.length == 0 # if user has not yet shot bullet, no enemies are added~ - Inside source: true *** True Line Result return unless args.state.bullets.length == 0 # if user has not yet shot bullet, no enemies are added ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.enemies += (10 - args.state.enemies.length).map do # adds enemies so there are 10 total~ - Inside source: true *** True Line Result args.state.enemies += (10 - args.state.enemies.length).map do # adds enemies so there are 10 total ** Processing line: ~ args.state.new_entity(:enemy) do |e| # each enemy is declared as a new entity~ - Inside source: true *** True Line Result args.state.new_entity(:enemy) do |e| # each enemy is declared as a new entity ** Processing line: ~ e.x = 640 + 500 * rand # each enemy is given random position on screen~ - Inside source: true *** True Line Result e.x = 640 + 500 * rand # each enemy is given random position on screen ** Processing line: ~ e.y = 600 * rand + 50~ - Inside source: true *** True Line Result e.y = 600 * rand + 50 ** Processing line: ~ e.rect = [e.x, e.y, 130, 30] # sets definition for enemy's rect~ - Inside source: true *** True Line Result e.rect = [e.x, e.y, 130, 30] # sets definition for enemy's rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves bullets across screen~ - Inside source: true *** True Line Result # Moves bullets across screen ** Processing line: ~ # Sets definition of the bullets~ - Inside source: true *** True Line Result # Sets definition of the bullets ** Processing line: ~ def move_bullets args~ - Inside source: true *** True Line Result def move_bullets args ** Processing line: ~ args.state.bullets.each do |bullet| # perform action on each bullet in collection~ - Inside source: true *** True Line Result args.state.bullets.each do |bullet| # perform action on each bullet in collection ** Processing line: ~ bullet.x += bullet.speed # increment x by speed (bullets fly horizontally across screen)~ - Inside source: true *** True Line Result bullet.x += bullet.speed # increment x by speed (bullets fly horizontally across screen) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # By randomizing the value that increments bullet.y, the bullet does not fly straight up and out~ - Inside source: true *** True Line Result # By randomizing the value that increments bullet.y, the bullet does not fly straight up and out ** Processing line: ~ # of the scope of the screen. Try removing what follows bullet.speed, or changing 0.25 to 1.25 to~ - Inside source: true *** True Line Result # of the scope of the screen. Try removing what follows bullet.speed, or changing 0.25 to 1.25 to ** Processing line: ~ # see what happens to the bullet's movement.~ - Inside source: true *** True Line Result # see what happens to the bullet's movement. ** Processing line: ~ bullet.y += bullet.speed.*(0.25).randomize(:ratio, :sign)~ - Inside source: true *** True Line Result bullet.y += bullet.speed.*(0.25).randomize(:ratio, :sign) ** Processing line: ~ bullet.rect = [bullet.x, bullet.y, bullet.size, bullet.size] # sets definition of bullet's rect~ - Inside source: true *** True Line Result bullet.rect = [bullet.x, bullet.y, bullet.size, bullet.size] # sets definition of bullet's rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Determines if a bullet hits an enemy~ - Inside source: true *** True Line Result # Determines if a bullet hits an enemy ** Processing line: ~ def calculate_collisions args~ - Inside source: true *** True Line Result def calculate_collisions args ** Processing line: ~ args.state.bullets.each do |bullet| # perform action on every bullet and enemy in collections~ - Inside source: true *** True Line Result args.state.bullets.each do |bullet| # perform action on every bullet and enemy in collections ** Processing line: ~ args.state.enemies.each do |enemy|~ - Inside source: true *** True Line Result args.state.enemies.each do |enemy| ** Processing line: ~ # if bullet has not exploded yet and the bullet hits an enemy~ - Inside source: true *** True Line Result # if bullet has not exploded yet and the bullet hits an enemy ** Processing line: ~ if !bullet.exploded && bullet.rect.intersect_rect?(enemy.rect)~ - Inside source: true *** True Line Result if !bullet.exploded && bullet.rect.intersect_rect?(enemy.rect) ** Processing line: ~ bullet.exploded = true # bullet explodes~ - Inside source: true *** True Line Result bullet.exploded = true # bullet explodes ** Processing line: ~ enemy.dead = true # enemy is killed~ - Inside source: true *** True Line Result enemy.dead = true # enemy is killed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # All exploded bullets are rejected or removed from the bullets collection~ - Inside source: true *** True Line Result # All exploded bullets are rejected or removed from the bullets collection ** Processing line: ~ # and any dead enemy is rejected from the enemies collection.~ - Inside source: true *** True Line Result # and any dead enemy is rejected from the enemies collection. ** Processing line: ~ args.state.bullets = args.state.bullets.reject(&:exploded)~ - Inside source: true *** True Line Result args.state.bullets = args.state.bullets.reject(&:exploded) ** Processing line: ~ args.state.enemies = args.state.enemies.reject(&:dead)~ - Inside source: true *** True Line Result args.state.enemies = args.state.enemies.reject(&:dead) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Bullets are rejected from bullets collection once their position exceeds the width of screen~ - Inside source: true *** True Line Result # Bullets are rejected from bullets collection once their position exceeds the width of screen ** Processing line: ~ def remove_bullets_of_screen args~ - Inside source: true *** True Line Result def remove_bullets_of_screen args ** Processing line: ~ args.state.bullets = args.state.bullets.reject { |bullet| bullet.x > 1280 } # screen width is 1280~ - Inside source: true *** True Line Result args.state.bullets = args.state.bullets.reject { |bullet| bullet.x > 1280 } # screen width is 1280 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls fire_bullet method~ - Inside source: true *** True Line Result # Calls fire_bullet method ** Processing line: ~ def process_inputs args~ - Inside source: true *** True Line Result def process_inputs args ** Processing line: ~ fire_bullet args~ - Inside source: true *** True Line Result fire_bullet args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Once mouse is clicked by the user to fire a bullet, a new bullet is added to bullets collection~ - Inside source: true *** True Line Result # Once mouse is clicked by the user to fire a bullet, a new bullet is added to bullets collection ** Processing line: ~ def fire_bullet args~ - Inside source: true *** True Line Result def fire_bullet args ** Processing line: ~ return unless args.inputs.mouse.click # return unless mouse is clicked~ - Inside source: true *** True Line Result return unless args.inputs.mouse.click # return unless mouse is clicked ** Processing line: ~ args.state.bullets << args.state.new_entity(:bullet) do |bullet| # new bullet is declared a new entity~ - Inside source: true *** True Line Result args.state.bullets << args.state.new_entity(:bullet) do |bullet| # new bullet is declared a new entity ** Processing line: ~ bullet.y = args.inputs.mouse.click.point.y # set to the y value of where the mouse was clicked~ - Inside source: true *** True Line Result bullet.y = args.inputs.mouse.click.point.y # set to the y value of where the mouse was clicked ** Processing line: ~ bullet.x = 0 # starts on the left side of the screen~ - Inside source: true *** True Line Result bullet.x = 0 # starts on the left side of the screen ** Processing line: ~ bullet.size = 10~ - Inside source: true *** True Line Result bullet.size = 10 ** Processing line: ~ bullet.speed = 10 * rand + 2 # speed of a bullet is randomized~ - Inside source: true *** True Line Result bullet.speed = 10 * rand + 2 # speed of a bullet is randomized ** Processing line: ~ bullet.rect = [bullet.x, bullet.y, bullet.size, bullet.size] # definition is set~ - Inside source: true *** True Line Result bullet.rect = [bullet.x, bullet.y, bullet.size, bullet.size] # definition is set ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.space ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.space || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Box Collision - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Box Collision - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/04_box_collision/app/main.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/04_box_collision/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - first: Returns the first element of the array.~ - Inside source: true *** True Line Result - first: Returns the first element of the array. ** Processing line: ~ For example, if we have an array~ - Inside source: true *** True Line Result For example, if we have an array ** Processing line: ~ numbers = [1, 2, 3, 4, 5]~ - Inside source: true *** True Line Result numbers = [1, 2, 3, 4, 5] ** Processing line: ~ and we call first by saying~ - Inside source: true *** True Line Result and we call first by saying ** Processing line: ~ numbers.first~ - Inside source: true *** True Line Result numbers.first ** Processing line: ~ the number 1 will be returned because it is the first element of the numbers array.~ - Inside source: true *** True Line Result the number 1 will be returned because it is the first element of the numbers array. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - num1.idiv(num2): Divides two numbers and returns an integer.~ - Inside source: true *** True Line Result - num1.idiv(num2): Divides two numbers and returns an integer. ** Processing line: ~ For example,~ - Inside source: true *** True Line Result For example, ** Processing line: ~ 16.idiv(3) = 5, because 16 / 3 is 5.33333 returned as an integer.~ - Inside source: true *** True Line Result 16.idiv(3) = 5, because 16 / 3 is 5.33333 returned as an integer. ** Processing line: ~ 16.idiv(4) = 4, because 16 / 4 is 4 and already has no decimal.~ - Inside source: true *** True Line Result 16.idiv(4) = 4, because 16 / 4 is 4 and already has no decimal. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - find_all: Finds all values that satisfy specific requirements.~ - Inside source: true *** True Line Result - find_all: Finds all values that satisfy specific requirements. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - ARRAY#intersect_rect?: An array with at least four values is~ - Inside source: true *** True Line Result - ARRAY#intersect_rect?: An array with at least four values is ** Processing line: ~ considered a rect. The intersect_rect? function returns true~ - Inside source: true *** True Line Result considered a rect. The intersect_rect? function returns true ** Processing line: ~ or false depending on if the two rectangles intersect.~ - Inside source: true *** True Line Result or false depending on if the two rectangles intersect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - reject: Removes elements from a collection if they meet certain requirements.~ - Inside source: true *** True Line Result - reject: Removes elements from a collection if they meet certain requirements. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app allows users to create tiles and place them anywhere on the screen as obstacles.~ - Inside source: true *** True Line Result # This sample app allows users to create tiles and place them anywhere on the screen as obstacles. ** Processing line: ~ # The player can then move and maneuver around them.~ - Inside source: true *** True Line Result # The player can then move and maneuver around them. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class PoorManPlatformerPhysics~ - Inside source: true *** True Line Result class PoorManPlatformerPhysics ** Processing line: ~ attr_accessor :grid, :inputs, :state, :outputs~ - Inside source: true *** True Line Result attr_accessor :grid, :inputs, :state, :outputs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls all methods necessary for the app to run successfully.~ - Inside source: true *** True Line Result # Calls all methods necessary for the app to run successfully. ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ process_inputs~ - Inside source: true *** True Line Result process_inputs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets default values for variables.~ - Inside source: true *** True Line Result # Sets default values for variables. ** Processing line: ~ # The ||= sign means that the variable will only be set to the value following the = sign if the value has~ - Inside source: true *** True Line Result # The ||= sign means that the variable will only be set to the value following the = sign if the value has ** Processing line: ~ # not already been set before. Intialization happens only in the first frame.~ - Inside source: true *** True Line Result # not already been set before. Intialization happens only in the first frame. ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ state.tile_size = 64~ - Inside source: true *** True Line Result state.tile_size = 64 ** Processing line: ~ state.gravity = -0.2~ - Inside source: true *** True Line Result state.gravity = -0.2 ** Processing line: ~ state.previous_tile_size ||= state.tile_size~ - Inside source: true *** True Line Result state.previous_tile_size ||= state.tile_size ** Processing line: ~ state.x ||= 0~ - Inside source: true *** True Line Result state.x ||= 0 ** Processing line: ~ state.y ||= 800~ - Inside source: true *** True Line Result state.y ||= 800 ** Processing line: ~ state.dy ||= 0~ - Inside source: true *** True Line Result state.dy ||= 0 ** Processing line: ~ state.dx ||= 0~ - Inside source: true *** True Line Result state.dx ||= 0 ** Processing line: ~ state.world ||= []~ - Inside source: true *** True Line Result state.world ||= [] ** Processing line: ~ state.world_lookup ||= {}~ - Inside source: true *** True Line Result state.world_lookup ||= {} ** Processing line: ~ state.world_collision_rects ||= []~ - Inside source: true *** True Line Result state.world_collision_rects ||= [] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs solids and borders of different colors for the world and collision_rects collections.~ - Inside source: true *** True Line Result # Outputs solids and borders of different colors for the world and collision_rects collections. ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets a black background on the screen (Comment this line out and the background will become white.)~ - Inside source: true *** True Line Result # Sets a black background on the screen (Comment this line out and the background will become white.) ** Processing line: ~ # Also note that black is the default color for when no color is assigned.~ - Inside source: true *** True Line Result # Also note that black is the default color for when no color is assigned. ** Processing line: ~ outputs.solids << grid.rect~ - Inside source: true *** True Line Result outputs.solids << grid.rect ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The position, size, and color (white) are set for borders given to the world collection.~ - Inside source: true *** True Line Result # The position, size, and color (white) are set for borders given to the world collection. ** Processing line: ~ # Try changing the color by assigning different numbers (between 0 and 255) to the last three parameters.~ - Inside source: true *** True Line Result # Try changing the color by assigning different numbers (between 0 and 255) to the last three parameters. ** Processing line: ~ outputs.borders << state.world.map do |x, y|~ - Inside source: true *** True Line Result outputs.borders << state.world.map do |x, y| ** Processing line: ~ [x * state.tile_size,~ - Inside source: true *** True Line Result [x * state.tile_size, ** Processing line: ~ y * state.tile_size,~ - Inside source: true *** True Line Result y * state.tile_size, ** Processing line: ~ state.tile_size,~ - Inside source: true *** True Line Result state.tile_size, ** Processing line: ~ state.tile_size, 255, 255, 255]~ - Inside source: true *** True Line Result state.tile_size, 255, 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The top, bottom, and sides of the borders for collision_rects are different colors.~ - Inside source: true *** True Line Result # The top, bottom, and sides of the borders for collision_rects are different colors. ** Processing line: ~ outputs.borders << state.world_collision_rects.map do |e|~ - Inside source: true *** True Line Result outputs.borders << state.world_collision_rects.map do |e| ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [e[:top], 0, 170, 0], # top is a shade of green~ - Inside source: true *** True Line Result [e[:top], 0, 170, 0], # top is a shade of green ** Processing line: ~ [e[:bottom], 0, 100, 170], # bottom is a shade of greenish-blue~ - Inside source: true *** True Line Result [e[:bottom], 0, 100, 170], # bottom is a shade of greenish-blue ** Processing line: ~ [e[:left_right], 170, 0, 0], # left and right are a shade of red~ - Inside source: true *** True Line Result [e[:left_right], 170, 0, 0], # left and right are a shade of red ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the position, size, and color (a shade of green) of the borders of only the player's~ - Inside source: true *** True Line Result # Sets the position, size, and color (a shade of green) of the borders of only the player's ** Processing line: ~ # box and outputs it. If you change the 180 to 0, the player's box will be black and you~ - Inside source: true *** True Line Result # box and outputs it. If you change the 180 to 0, the player's box will be black and you ** Processing line: ~ # won't be able to see it (because it will match the black background).~ - Inside source: true *** True Line Result # won't be able to see it (because it will match the black background). ** Processing line: ~ outputs.borders << [state.x,~ - Inside source: true *** True Line Result outputs.borders << [state.x, ** Processing line: ~ state.y,~ - Inside source: true *** True Line Result state.y, ** Processing line: ~ state.tile_size,~ - Inside source: true *** True Line Result state.tile_size, ** Processing line: ~ state.tile_size, 0, 180, 0]~ - Inside source: true *** True Line Result state.tile_size, 0, 180, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls methods needed to perform calculations.~ - Inside source: true *** True Line Result # Calls methods needed to perform calculations. ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ calc_world_lookup~ - Inside source: true *** True Line Result calc_world_lookup ** Processing line: ~ calc_player~ - Inside source: true *** True Line Result calc_player ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Performs calculations on world_lookup and sets values.~ - Inside source: true *** True Line Result # Performs calculations on world_lookup and sets values. ** Processing line: ~ def calc_world_lookup~ - Inside source: true *** True Line Result def calc_world_lookup ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the tile size isn't equal to the previous tile size,~ - Inside source: true *** True Line Result # If the tile size isn't equal to the previous tile size, ** Processing line: ~ # the previous tile size is set to the tile size,~ - Inside source: true *** True Line Result # the previous tile size is set to the tile size, ** Processing line: ~ # and world_lookup hash is set to empty.~ - Inside source: true *** True Line Result # and world_lookup hash is set to empty. ** Processing line: ~ if state.tile_size != state.previous_tile_size~ - Inside source: true *** True Line Result if state.tile_size != state.previous_tile_size ** Processing line: ~ state.previous_tile_size = state.tile_size~ - Inside source: true *** True Line Result state.previous_tile_size = state.tile_size ** Processing line: ~ state.world_lookup = {} # empty hash~ - Inside source: true *** True Line Result state.world_lookup = {} # empty hash ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # return if the world_lookup hash has keys (or, in other words, is not empty)~ - Inside source: true *** True Line Result # return if the world_lookup hash has keys (or, in other words, is not empty) ** Processing line: ~ # return unless the world collection has values inside of it (or is not empty)~ - Inside source: true *** True Line Result # return unless the world collection has values inside of it (or is not empty) ** Processing line: ~ return if state.world_lookup.keys.length > 0~ - Inside source: true *** True Line Result return if state.world_lookup.keys.length > 0 ** Processing line: ~ return unless state.world.length > 0~ - Inside source: true *** True Line Result return unless state.world.length > 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Starts with an empty hash for world_lookup.~ - Inside source: true *** True Line Result # Starts with an empty hash for world_lookup. ** Processing line: ~ # Searches through the world and finds the coordinates that exist.~ - Inside source: true *** True Line Result # Searches through the world and finds the coordinates that exist. ** Processing line: ~ state.world_lookup = {}~ - Inside source: true *** True Line Result state.world_lookup = {} ** Processing line: ~ state.world.each { |x, y| state.world_lookup[[x, y]] = true }~ - Inside source: true *** True Line Result state.world.each { |x, y| state.world_lookup[[x, y]] = true } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Assigns world_collision_rects for every sprite drawn.~ - Inside source: true *** True Line Result # Assigns world_collision_rects for every sprite drawn. ** Processing line: ~ state.world_collision_rects =~ - Inside source: true *** True Line Result state.world_collision_rects = ** Processing line: ~ state.world_lookup~ - Inside source: true *** True Line Result state.world_lookup ** Processing line: ~ .keys~ - Inside source: true *** True Line Result .keys ** Processing line: ~ .map do |coord_x, coord_y|~ - Inside source: true *** True Line Result .map do |coord_x, coord_y| ** Processing line: ~ s = state.tile_size~ - Inside source: true *** True Line Result s = state.tile_size ** Processing line: ~ # multiply by tile size so the grid coordinates; sets pixel value~ - Inside source: true *** True Line Result # multiply by tile size so the grid coordinates; sets pixel value ** Processing line: ~ # don't forget that position is denoted by bottom left corner~ - Inside source: true *** True Line Result # don't forget that position is denoted by bottom left corner ** Processing line: ~ # set x = coord_x or y = coord_y and see what happens!~ - Inside source: true *** True Line Result # set x = coord_x or y = coord_y and see what happens! ** Processing line: ~ x = s * coord_x~ - Inside source: true *** True Line Result x = s * coord_x ** Processing line: ~ y = s * coord_y~ - Inside source: true *** True Line Result y = s * coord_y ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ # The values added to x, y, and s position the world_collision_rects so they all appear~ - Inside source: true *** True Line Result # The values added to x, y, and s position the world_collision_rects so they all appear ** Processing line: ~ # stacked (on top of world rects) but don't directly overlap.~ - Inside source: true *** True Line Result # stacked (on top of world rects) but don't directly overlap. ** Processing line: ~ # Remove these added values and mess around with the rect placement!~ - Inside source: true *** True Line Result # Remove these added values and mess around with the rect placement! ** Processing line: ~ args: [coord_x, coord_y],~ - Inside source: true *** True Line Result args: [coord_x, coord_y], ** Processing line: ~ left_right: [x, y + 4, s, s - 6], # hash keys and values~ - Inside source: true *** True Line Result left_right: [x, y + 4, s, s - 6], # hash keys and values ** Processing line: ~ top: [x + 4, y + 6, s - 8, s - 6],~ - Inside source: true *** True Line Result top: [x + 4, y + 6, s - 8, s - 6], ** Processing line: ~ bottom: [x + 1, y - 1, s - 2, s - 8],~ - Inside source: true *** True Line Result bottom: [x + 1, y - 1, s - 2, s - 8], ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Performs calculations to change the x and y values of the player's box.~ - Inside source: true *** True Line Result # Performs calculations to change the x and y values of the player's box. ** Processing line: ~ def calc_player~ - Inside source: true *** True Line Result def calc_player ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Since acceleration is the change in velocity, the change in y (dy) increases every frame.~ - Inside source: true *** True Line Result # Since acceleration is the change in velocity, the change in y (dy) increases every frame. ** Processing line: ~ # What goes up must come down because of gravity.~ - Inside source: true *** True Line Result # What goes up must come down because of gravity. ** Processing line: ~ state.dy += state.gravity~ - Inside source: true *** True Line Result state.dy += state.gravity ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls the calc_box_collision and calc_edge_collision methods.~ - Inside source: true *** True Line Result # Calls the calc_box_collision and calc_edge_collision methods. ** Processing line: ~ calc_box_collision~ - Inside source: true *** True Line Result calc_box_collision ** Processing line: ~ calc_edge_collision~ - Inside source: true *** True Line Result calc_edge_collision ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Since velocity is the change in position, the change in y increases by dy. Same with x and dx.~ - Inside source: true *** True Line Result # Since velocity is the change in position, the change in y increases by dy. Same with x and dx. ** Processing line: ~ state.y += state.dy~ - Inside source: true *** True Line Result state.y += state.dy ** Processing line: ~ state.x += state.dx~ - Inside source: true *** True Line Result state.x += state.dx ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Scales dx down.~ - Inside source: true *** True Line Result # Scales dx down. ** Processing line: ~ state.dx *= 0.8~ - Inside source: true *** True Line Result state.dx *= 0.8 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls methods needed to determine collisions between player and world_collision rects.~ - Inside source: true *** True Line Result # Calls methods needed to determine collisions between player and world_collision rects. ** Processing line: ~ def calc_box_collision~ - Inside source: true *** True Line Result def calc_box_collision ** Processing line: ~ return unless state.world_lookup.keys.length > 0 # return unless hash has atleast 1 key~ - Inside source: true *** True Line Result return unless state.world_lookup.keys.length > 0 # return unless hash has atleast 1 key ** Processing line: ~ collision_floor!~ - Inside source: true *** True Line Result collision_floor! ** Processing line: ~ collision_left!~ - Inside source: true *** True Line Result collision_left! ** Processing line: ~ collision_right!~ - Inside source: true *** True Line Result collision_right! ** Processing line: ~ collision_ceiling!~ - Inside source: true *** True Line Result collision_ceiling! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds collisions between the bottom of the player's rect and the top of a world_collision_rect.~ - Inside source: true *** True Line Result # Finds collisions between the bottom of the player's rect and the top of a world_collision_rect. ** Processing line: ~ def collision_floor!~ - Inside source: true *** True Line Result def collision_floor! ** Processing line: ~ return unless state.dy <= 0 # return unless player is going down or is as far down as possible~ - Inside source: true *** True Line Result return unless state.dy <= 0 # return unless player is going down or is as far down as possible ** Processing line: ~ player_rect = [state.x, state.y - 0.1, state.tile_size, state.tile_size] # definition of player~ - Inside source: true *** True Line Result player_rect = [state.x, state.y - 0.1, state.tile_size, state.tile_size] # definition of player ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Goes through world_collision_rects to find all intersections between the bottom of player's rect and~ - Inside source: true *** True Line Result # Goes through world_collision_rects to find all intersections between the bottom of player's rect and ** Processing line: ~ # the top of a world_collision_rect (hence the "-0.1" above)~ - Inside source: true *** True Line Result # the top of a world_collision_rect (hence the "-0.1" above) ** Processing line: ~ floor_collisions = state.world_collision_rects~ - Inside source: true *** True Line Result floor_collisions = state.world_collision_rects ** Processing line: ~ .find_all { |r| r[:top].intersect_rect?(player_rect, collision_tollerance) }~ - Inside source: true *** True Line Result .find_all { |r| r[:top].intersect_rect?(player_rect, collision_tollerance) } ** Processing line: ~ .first~ - Inside source: true *** True Line Result .first ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless floor_collisions # return unless collision occurred~ - Inside source: true *** True Line Result return unless floor_collisions # return unless collision occurred ** Processing line: ~ state.y = floor_collisions[:top].top # player's y is set to the y of the top of the collided rect~ - Inside source: true *** True Line Result state.y = floor_collisions[:top].top # player's y is set to the y of the top of the collided rect ** Processing line: ~ state.dy = 0 # if a collision occurred, the player's rect isn't moving because its path is blocked~ - Inside source: true *** True Line Result state.dy = 0 # if a collision occurred, the player's rect isn't moving because its path is blocked ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds collisions between the player's left side and the right side of a world_collision_rect.~ - Inside source: true *** True Line Result # Finds collisions between the player's left side and the right side of a world_collision_rect. ** Processing line: ~ def collision_left!~ - Inside source: true *** True Line Result def collision_left! ** Processing line: ~ return unless state.dx < 0 # return unless player is moving left~ - Inside source: true *** True Line Result return unless state.dx < 0 # return unless player is moving left ** Processing line: ~ player_rect = [state.x - 0.1, state.y, state.tile_size, state.tile_size]~ - Inside source: true *** True Line Result player_rect = [state.x - 0.1, state.y, state.tile_size, state.tile_size] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Goes through world_collision_rects to find all intersections beween the player's left side and the~ - Inside source: true *** True Line Result # Goes through world_collision_rects to find all intersections beween the player's left side and the ** Processing line: ~ # right side of a world_collision_rect.~ - Inside source: true *** True Line Result # right side of a world_collision_rect. ** Processing line: ~ left_side_collisions = state.world_collision_rects~ - Inside source: true *** True Line Result left_side_collisions = state.world_collision_rects ** Processing line: ~ .find_all { |r| r[:left_right].intersect_rect?(player_rect, collision_tollerance) }~ - Inside source: true *** True Line Result .find_all { |r| r[:left_right].intersect_rect?(player_rect, collision_tollerance) } ** Processing line: ~ .first~ - Inside source: true *** True Line Result .first ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless left_side_collisions # return unless collision occurred~ - Inside source: true *** True Line Result return unless left_side_collisions # return unless collision occurred ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # player's x is set to the value of the x of the collided rect's right side~ - Inside source: true *** True Line Result # player's x is set to the value of the x of the collided rect's right side ** Processing line: ~ state.x = left_side_collisions[:left_right].right~ - Inside source: true *** True Line Result state.x = left_side_collisions[:left_right].right ** Processing line: ~ state.dx = 0 # player isn't moving left because its path is blocked~ - Inside source: true *** True Line Result state.dx = 0 # player isn't moving left because its path is blocked ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds collisions between the right side of the player and the left side of a world_collision_rect.~ - Inside source: true *** True Line Result # Finds collisions between the right side of the player and the left side of a world_collision_rect. ** Processing line: ~ def collision_right!~ - Inside source: true *** True Line Result def collision_right! ** Processing line: ~ return unless state.dx > 0 # return unless player is moving right~ - Inside source: true *** True Line Result return unless state.dx > 0 # return unless player is moving right ** Processing line: ~ player_rect = [state.x + 0.1, state.y, state.tile_size, state.tile_size]~ - Inside source: true *** True Line Result player_rect = [state.x + 0.1, state.y, state.tile_size, state.tile_size] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Goes through world_collision_rects to find all intersections between the player's right side~ - Inside source: true *** True Line Result # Goes through world_collision_rects to find all intersections between the player's right side ** Processing line: ~ # and the left side of a world_collision_rect (hence the "+0.1" above)~ - Inside source: true *** True Line Result # and the left side of a world_collision_rect (hence the "+0.1" above) ** Processing line: ~ right_side_collisions = state.world_collision_rects~ - Inside source: true *** True Line Result right_side_collisions = state.world_collision_rects ** Processing line: ~ .find_all { |r| r[:left_right].intersect_rect?(player_rect, collision_tollerance) }~ - Inside source: true *** True Line Result .find_all { |r| r[:left_right].intersect_rect?(player_rect, collision_tollerance) } ** Processing line: ~ .first~ - Inside source: true *** True Line Result .first ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless right_side_collisions # return unless collision occurred~ - Inside source: true *** True Line Result return unless right_side_collisions # return unless collision occurred ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # player's x is set to the value of the collided rect's left, minus the size of a rect~ - Inside source: true *** True Line Result # player's x is set to the value of the collided rect's left, minus the size of a rect ** Processing line: ~ # tile size is subtracted because player's position is denoted by bottom left corner~ - Inside source: true *** True Line Result # tile size is subtracted because player's position is denoted by bottom left corner ** Processing line: ~ state.x = right_side_collisions[:left_right].left - state.tile_size~ - Inside source: true *** True Line Result state.x = right_side_collisions[:left_right].left - state.tile_size ** Processing line: ~ state.dx = 0 # player isn't moving right because its path is blocked~ - Inside source: true *** True Line Result state.dx = 0 # player isn't moving right because its path is blocked ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds collisions between the top of the player's rect and the bottom of a world_collision_rect.~ - Inside source: true *** True Line Result # Finds collisions between the top of the player's rect and the bottom of a world_collision_rect. ** Processing line: ~ def collision_ceiling!~ - Inside source: true *** True Line Result def collision_ceiling! ** Processing line: ~ return unless state.dy > 0 # return unless player is moving up~ - Inside source: true *** True Line Result return unless state.dy > 0 # return unless player is moving up ** Processing line: ~ player_rect = [state.x, state.y + 0.1, state.tile_size, state.tile_size]~ - Inside source: true *** True Line Result player_rect = [state.x, state.y + 0.1, state.tile_size, state.tile_size] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Goes through world_collision_rects to find intersections between the bottom of a~ - Inside source: true *** True Line Result # Goes through world_collision_rects to find intersections between the bottom of a ** Processing line: ~ # world_collision_rect and the top of the player's rect (hence the "+0.1" above)~ - Inside source: true *** True Line Result # world_collision_rect and the top of the player's rect (hence the "+0.1" above) ** Processing line: ~ ceil_collisions = state.world_collision_rects~ - Inside source: true *** True Line Result ceil_collisions = state.world_collision_rects ** Processing line: ~ .find_all { |r| r[:bottom].intersect_rect?(player_rect, collision_tollerance) }~ - Inside source: true *** True Line Result .find_all { |r| r[:bottom].intersect_rect?(player_rect, collision_tollerance) } ** Processing line: ~ .first~ - Inside source: true *** True Line Result .first ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless ceil_collisions # return unless collision occurred~ - Inside source: true *** True Line Result return unless ceil_collisions # return unless collision occurred ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # player's y is set to the bottom y of the rect it collided with, minus the size of a rect~ - Inside source: true *** True Line Result # player's y is set to the bottom y of the rect it collided with, minus the size of a rect ** Processing line: ~ state.y = ceil_collisions[:bottom].y - state.tile_size~ - Inside source: true *** True Line Result state.y = ceil_collisions[:bottom].y - state.tile_size ** Processing line: ~ state.dy = 0 # if a collision occurred, the player isn't moving up because its path is blocked~ - Inside source: true *** True Line Result state.dy = 0 # if a collision occurred, the player isn't moving up because its path is blocked ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Makes sure the player remains within the screen's dimensions.~ - Inside source: true *** True Line Result # Makes sure the player remains within the screen's dimensions. ** Processing line: ~ def calc_edge_collision~ - Inside source: true *** True Line Result def calc_edge_collision ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Ensures that the player doesn't fall below the map.~ - Inside source: true *** True Line Result #Ensures that the player doesn't fall below the map. ** Processing line: ~ if state.y < 0~ - Inside source: true *** True Line Result if state.y < 0 ** Processing line: ~ state.y = 0~ - Inside source: true *** True Line Result state.y = 0 ** Processing line: ~ state.dy = 0~ - Inside source: true *** True Line Result state.dy = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Ensures that the player doesn't go too high.~ - Inside source: true *** True Line Result #Ensures that the player doesn't go too high. ** Processing line: ~ # Position of player is denoted by bottom left hand corner, which is why we have to subtract the~ - Inside source: true *** True Line Result # Position of player is denoted by bottom left hand corner, which is why we have to subtract the ** Processing line: ~ # size of the player's box (so it remains visible on the screen)~ - Inside source: true *** True Line Result # size of the player's box (so it remains visible on the screen) ** Processing line: ~ elsif state.y > 720 - state.tile_size # if the player's y position exceeds the height of screen~ - Inside source: true *** True Line Result elsif state.y > 720 - state.tile_size # if the player's y position exceeds the height of screen ** Processing line: ~ state.y = 720 - state.tile_size # the player will remain as high as possible while staying on screen~ - Inside source: true *** True Line Result state.y = 720 - state.tile_size # the player will remain as high as possible while staying on screen ** Processing line: ~ state.dy = 0~ - Inside source: true *** True Line Result state.dy = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Ensures that the player remains in the horizontal range that it is supposed to.~ - Inside source: true *** True Line Result # Ensures that the player remains in the horizontal range that it is supposed to. ** Processing line: ~ if state.x >= 1280 - state.tile_size && state.dx > 0 # if player moves too far right~ - Inside source: true *** True Line Result if state.x >= 1280 - state.tile_size && state.dx > 0 # if player moves too far right ** Processing line: ~ state.x = 1280 - state.tile_size # player will remain as right as possible while staying on screen~ - Inside source: true *** True Line Result state.x = 1280 - state.tile_size # player will remain as right as possible while staying on screen ** Processing line: ~ state.dx = 0~ - Inside source: true *** True Line Result state.dx = 0 ** Processing line: ~ elsif state.x <= 0 && state.dx < 0 # if player moves too far left~ - Inside source: true *** True Line Result elsif state.x <= 0 && state.dx < 0 # if player moves too far left ** Processing line: ~ state.x = 0 # player will remain as left as possible while remaining on screen~ - Inside source: true *** True Line Result state.x = 0 # player will remain as left as possible while remaining on screen ** Processing line: ~ state.dx = 0~ - Inside source: true *** True Line Result state.dx = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Processes input from the user on the keyboard.~ - Inside source: true *** True Line Result # Processes input from the user on the keyboard. ** Processing line: ~ def process_inputs~ - Inside source: true *** True Line Result def process_inputs ** Processing line: ~ if inputs.mouse.down~ - Inside source: true *** True Line Result if inputs.mouse.down ** Processing line: ~ state.world_lookup = {}~ - Inside source: true *** True Line Result state.world_lookup = {} ** Processing line: ~ x, y = to_coord inputs.mouse.down.point # gets x, y coordinates for the grid~ - Inside source: true *** True Line Result x, y = to_coord inputs.mouse.down.point # gets x, y coordinates for the grid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.world.any? { |loc| loc == [x, y] } # checks if coordinates duplicate~ - Inside source: true *** True Line Result if state.world.any? { |loc| loc == [x, y] } # checks if coordinates duplicate ** Processing line: ~ state.world = state.world.reject { |loc| loc == [x, y] } # erases tile space~ - Inside source: true *** True Line Result state.world = state.world.reject { |loc| loc == [x, y] } # erases tile space ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.world << [x, y] # If no duplicates, adds to world collection~ - Inside source: true *** True Line Result state.world << [x, y] # If no duplicates, adds to world collection ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets dx to 0 if the player lets go of arrow keys.~ - Inside source: true *** True Line Result # Sets dx to 0 if the player lets go of arrow keys. ** Processing line: ~ if inputs.keyboard.key_up.right~ - Inside source: true *** True Line Result if inputs.keyboard.key_up.right ** Processing line: ~ state.dx = 0~ - Inside source: true *** True Line Result state.dx = 0 ** Processing line: ~ elsif inputs.keyboard.key_up.left~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_up.left ** Processing line: ~ state.dx = 0~ - Inside source: true *** True Line Result state.dx = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets dx to 3 in whatever direction the player chooses.~ - Inside source: true *** True Line Result # Sets dx to 3 in whatever direction the player chooses. ** Processing line: ~ if inputs.keyboard.key_held.right # if right key is pressed~ - Inside source: true *** True Line Result if inputs.keyboard.key_held.right # if right key is pressed ** Processing line: ~ state.dx = 3~ - Inside source: true *** True Line Result state.dx = 3 ** Processing line: ~ elsif inputs.keyboard.key_held.left # if left key is pressed~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_held.left # if left key is pressed ** Processing line: ~ state.dx = -3~ - Inside source: true *** True Line Result state.dx = -3 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Sets dy to 5 to make the player ~fly~ when they press the space bar~ - Inside source: true *** True Line Result #Sets dy to 5 to make the player ~fly~ when they press the space bar ** Processing line: ~ if inputs.keyboard.key_held.space~ - Inside source: true *** True Line Result if inputs.keyboard.key_held.space ** Processing line: ~ state.dy = 5~ - Inside source: true *** True Line Result state.dy = 5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_coord point~ - Inside source: true *** True Line Result def to_coord point ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Integer divides (idiv) point.x to turn into grid~ - Inside source: true *** True Line Result # Integer divides (idiv) point.x to turn into grid ** Processing line: ~ # Then, you can just multiply each integer by state.tile_size later so the grid coordinates.~ - Inside source: true *** True Line Result # Then, you can just multiply each integer by state.tile_size later so the grid coordinates. ** Processing line: ~ [point.x.idiv(state.tile_size), point.y.idiv(state.tile_size)]~ - Inside source: true *** True Line Result [point.x.idiv(state.tile_size), point.y.idiv(state.tile_size)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Represents the tolerance for a collision between the player's rect and another rect.~ - Inside source: true *** True Line Result # Represents the tolerance for a collision between the player's rect and another rect. ** Processing line: ~ def collision_tollerance~ - Inside source: true *** True Line Result def collision_tollerance ** Processing line: ~ 0.0~ - Inside source: true *** True Line Result 0.0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $platformer_physics = PoorManPlatformerPhysics.new~ - Inside source: true *** True Line Result $platformer_physics = PoorManPlatformerPhysics.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $platformer_physics.grid = args.grid~ - Inside source: true *** True Line Result $platformer_physics.grid = args.grid ** Processing line: ~ $platformer_physics.inputs = args.inputs~ - Inside source: true *** True Line Result $platformer_physics.inputs = args.inputs ** Processing line: ~ $platformer_physics.state = args.state~ - Inside source: true *** True Line Result $platformer_physics.state = args.state ** Processing line: ~ $platformer_physics.outputs = args.outputs~ - Inside source: true *** True Line Result $platformer_physics.outputs = args.outputs ** Processing line: ~ $platformer_physics.tick~ - Inside source: true *** True Line Result $platformer_physics.tick ** Processing line: ~ tick_instructions args, "Sample app shows platformer collisions. CLICK to place box. ARROW keys to move around. SPACE to jump."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows platformer collisions. CLICK to place box. ARROW keys to move around. SPACE to jump." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Box Collision 2 - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Box Collision 2 - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/05_box_collision_2/app/main.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/05_box_collision_2/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - times: Performs an action a specific number of times.~ - Inside source: true *** True Line Result - times: Performs an action a specific number of times. ** Processing line: ~ For example, if we said~ - Inside source: true *** True Line Result For example, if we said ** Processing line: ~ 5.times puts "Hello DragonRuby",~ - Inside source: true *** True Line Result 5.times puts "Hello DragonRuby", ** Processing line: ~ then we'd see the words "Hello DragonRuby" printed on the console 5 times.~ - Inside source: true *** True Line Result then we'd see the words "Hello DragonRuby" printed on the console 5 times. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - split: Divides a string into substrings based on a delimiter.~ - Inside source: true *** True Line Result - split: Divides a string into substrings based on a delimiter. ** Processing line: ~ For example, if we had a command~ - Inside source: true *** True Line Result For example, if we had a command ** Processing line: ~ "DragonRuby is awesome".split(" ")~ - Inside source: true *** True Line Result "DragonRuby is awesome".split(" ") ** Processing line: ~ then the result would be~ - Inside source: true *** True Line Result then the result would be ** Processing line: ~ ["DragonRuby", "is", "awesome"] because the words are separated by a space delimiter.~ - Inside source: true *** True Line Result ["DragonRuby", "is", "awesome"] because the words are separated by a space delimiter. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - join: Opposite of split; converts each element of array to a string separated by delimiter.~ - Inside source: true *** True Line Result - join: Opposite of split; converts each element of array to a string separated by delimiter. ** Processing line: ~ For example, if we had a command~ - Inside source: true *** True Line Result For example, if we had a command ** Processing line: ~ ["DragonRuby","is","awesome"].join(" ")~ - Inside source: true *** True Line Result ["DragonRuby","is","awesome"].join(" ") ** Processing line: ~ then the result would be~ - Inside source: true *** True Line Result then the result would be ** Processing line: ~ "DragonRuby is awesome".~ - Inside source: true *** True Line Result "DragonRuby is awesome". ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - to_s: Returns a string representation of an object.~ - Inside source: true *** True Line Result - to_s: Returns a string representation of an object. ** Processing line: ~ For example, if we had~ - Inside source: true *** True Line Result For example, if we had ** Processing line: ~ 500.to_s~ - Inside source: true *** True Line Result 500.to_s ** Processing line: ~ the string "500" would be returned.~ - Inside source: true *** True Line Result the string "500" would be returned. ** Processing line: ~ Similar to to_i, which returns an integer representation of an object.~ - Inside source: true *** True Line Result Similar to to_i, which returns an integer representation of an object. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - elapsed_time: How many frames have passed since the click event.~ - Inside source: true *** True Line Result - elapsed_time: How many frames have passed since the click event. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.labels: An array. Values in the array generate labels on the screen.~ - Inside source: true *** True Line Result - args.outputs.labels: An array. Values in the array generate labels on the screen. ** Processing line: ~ The parameters are: [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result The parameters are: [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ - Inside source: true *** True Line Result For more information about labels, go to mygame/documentation/02-labels.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - inputs.mouse.down: Determines whether or not the mouse is being pressed down.~ - Inside source: true *** True Line Result - inputs.mouse.down: Determines whether or not the mouse is being pressed down. ** Processing line: ~ The position of the mouse when it is pressed down can be found using inputs.mouse.down.point.(x|y).~ - Inside source: true *** True Line Result The position of the mouse when it is pressed down can be found using inputs.mouse.down.point.(x|y). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - first: Returns the first element of the array.~ - Inside source: true *** True Line Result - first: Returns the first element of the array. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - num1.idiv(num2): Divides two numbers and returns an integer.~ - Inside source: true *** True Line Result - num1.idiv(num2): Divides two numbers and returns an integer. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - find_all: Finds all values that satisfy specific requirements.~ - Inside source: true *** True Line Result - find_all: Finds all values that satisfy specific requirements. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - ARRAY#intersect_rect?: Returns true or false depending on if two rectangles intersect.~ - Inside source: true *** True Line Result - ARRAY#intersect_rect?: Returns true or false depending on if two rectangles intersect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - reject: Removes elements from a collection if they meet certain requirements.~ - Inside source: true *** True Line Result - reject: Removes elements from a collection if they meet certain requirements. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated~ - Inside source: true *** True Line Result - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ - Inside source: true *** True Line Result as Ruby code, and the placeholder is replaced with its corresponding value or result. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ MAP_FILE_PATH = 'app/map.txt' # the map.txt file in the app folder contains exported map~ - Inside source: true *** True Line Result MAP_FILE_PATH = 'app/map.txt' # the map.txt file in the app folder contains exported map ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class MetroidvaniaStarter~ - Inside source: true *** True Line Result class MetroidvaniaStarter ** Processing line: ~ attr_accessor :grid, :inputs, :state, :outputs, :gtk~ - Inside source: true *** True Line Result attr_accessor :grid, :inputs, :state, :outputs, :gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls methods needed to run the game properly.~ - Inside source: true *** True Line Result # Calls methods needed to run the game properly. ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ process_inputs~ - Inside source: true *** True Line Result process_inputs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets all the default variables.~ - Inside source: true *** True Line Result # Sets all the default variables. ** Processing line: ~ # '||' states that initialization occurs only in the first frame.~ - Inside source: true *** True Line Result # '||' states that initialization occurs only in the first frame. ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ state.tile_size = 64~ - Inside source: true *** True Line Result state.tile_size = 64 ** Processing line: ~ state.gravity = -0.2~ - Inside source: true *** True Line Result state.gravity = -0.2 ** Processing line: ~ state.player_width = 60~ - Inside source: true *** True Line Result state.player_width = 60 ** Processing line: ~ state.player_height = 64~ - Inside source: true *** True Line Result state.player_height = 64 ** Processing line: ~ state.collision_tolerance = 0.0~ - Inside source: true *** True Line Result state.collision_tolerance = 0.0 ** Processing line: ~ state.previous_tile_size ||= state.tile_size~ - Inside source: true *** True Line Result state.previous_tile_size ||= state.tile_size ** Processing line: ~ state.x ||= 0~ - Inside source: true *** True Line Result state.x ||= 0 ** Processing line: ~ state.y ||= 800~ - Inside source: true *** True Line Result state.y ||= 800 ** Processing line: ~ state.dy ||= 0~ - Inside source: true *** True Line Result state.dy ||= 0 ** Processing line: ~ state.dx ||= 0~ - Inside source: true *** True Line Result state.dx ||= 0 ** Processing line: ~ attempt_load_world_from_file~ - Inside source: true *** True Line Result attempt_load_world_from_file ** Processing line: ~ state.world_lookup ||= { }~ - Inside source: true *** True Line Result state.world_lookup ||= { } ** Processing line: ~ state.world_collision_rects ||= []~ - Inside source: true *** True Line Result state.world_collision_rects ||= [] ** Processing line: ~ state.mode ||= :creating # alternates between :creating and :selecting for sprite selection~ - Inside source: true *** True Line Result state.mode ||= :creating # alternates between :creating and :selecting for sprite selection ** Processing line: ~ state.select_menu ||= [0, 720, 1280, 720]~ - Inside source: true *** True Line Result state.select_menu ||= [0, 720, 1280, 720] ** Processing line: ~ #=======================================IMPORTANT=======================================#~ - Inside source: true *** True Line Result #=======================================IMPORTANT=======================================# ** Processing line: ~ # When adding sprites, please label them "image1.png", "image2.png", image3".png", etc.~ - Inside source: true *** True Line Result # When adding sprites, please label them "image1.png", "image2.png", image3".png", etc. ** Processing line: ~ # Once you have done that, adjust "state.sprite_quantity" to how many sprites you have.~ - Inside source: true *** True Line Result # Once you have done that, adjust "state.sprite_quantity" to how many sprites you have. ** Processing line: ~ #=======================================================================================#~ - Inside source: true *** True Line Result #=======================================================================================# ** Processing line: ~ state.sprite_quantity ||= 20 # IMPORTANT TO ALTER IF SPRITES ADDED IF YOU ADD MORE SPRITES~ - Inside source: true *** True Line Result state.sprite_quantity ||= 20 # IMPORTANT TO ALTER IF SPRITES ADDED IF YOU ADD MORE SPRITES ** Processing line: ~ state.sprite_coords ||= []~ - Inside source: true *** True Line Result state.sprite_coords ||= [] ** Processing line: ~ state.banner_coords ||= [640, 680 + 720]~ - Inside source: true *** True Line Result state.banner_coords ||= [640, 680 + 720] ** Processing line: ~ state.sprite_selected ||= 1~ - Inside source: true *** True Line Result state.sprite_selected ||= 1 ** Processing line: ~ state.map_saved_at ||= 0~ - Inside source: true *** True Line Result state.map_saved_at ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets all the cordinate values for the sprite selection screen into a grid~ - Inside source: true *** True Line Result # Sets all the cordinate values for the sprite selection screen into a grid ** Processing line: ~ # Displayed when 's' is pressed by player to access sprites~ - Inside source: true *** True Line Result # Displayed when 's' is pressed by player to access sprites ** Processing line: ~ if state.sprite_coords == [] # if sprite_coords is an empty array~ - Inside source: true *** True Line Result if state.sprite_coords == [] # if sprite_coords is an empty array ** Processing line: ~ count = 1~ - Inside source: true *** True Line Result count = 1 ** Processing line: ~ temp_x = 165 # sets a starting x and y position for display~ - Inside source: true *** True Line Result temp_x = 165 # sets a starting x and y position for display ** Processing line: ~ temp_y = 500 + 720~ - Inside source: true *** True Line Result temp_y = 500 + 720 ** Processing line: ~ state.sprite_quantity.times do # for the number of sprites you have~ - Inside source: true *** True Line Result state.sprite_quantity.times do # for the number of sprites you have ** Processing line: ~ state.sprite_coords += [[temp_x, temp_y, count]] # add element to sprite_coords array~ - Inside source: true *** True Line Result state.sprite_coords += [[temp_x, temp_y, count]] # add element to sprite_coords array ** Processing line: ~ temp_x += 100 # increment temp_x~ - Inside source: true *** True Line Result temp_x += 100 # increment temp_x ** Processing line: ~ count += 1 # increment count~ - Inside source: true *** True Line Result count += 1 # increment count ** Processing line: ~ if temp_x > 1280 - (165 + 50) # if exceeding specific horizontal width on screen~ - Inside source: true *** True Line Result if temp_x > 1280 - (165 + 50) # if exceeding specific horizontal width on screen ** Processing line: ~ temp_x = 165 # a new row of sprites starts~ - Inside source: true *** True Line Result temp_x = 165 # a new row of sprites starts ** Processing line: ~ temp_y -= 75 # new row of sprites starts 75 units lower than the previous row~ - Inside source: true *** True Line Result temp_y -= 75 # new row of sprites starts 75 units lower than the previous row ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Places sprites~ - Inside source: true *** True Line Result # Places sprites ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the x, y, width, height, and image path for each sprite in the world collection.~ - Inside source: true *** True Line Result # Sets the x, y, width, height, and image path for each sprite in the world collection. ** Processing line: ~ outputs.sprites << state.world.map do |x, y, sprite|~ - Inside source: true *** True Line Result outputs.sprites << state.world.map do |x, y, sprite| ** Processing line: ~ [x * state.tile_size, # multiply by size so grid coordinates; pixel value of location~ - Inside source: true *** True Line Result [x * state.tile_size, # multiply by size so grid coordinates; pixel value of location ** Processing line: ~ y * state.tile_size,~ - Inside source: true *** True Line Result y * state.tile_size, ** Processing line: ~ state.tile_size,~ - Inside source: true *** True Line Result state.tile_size, ** Processing line: ~ state.tile_size,~ - Inside source: true *** True Line Result state.tile_size, ** Processing line: ~ 'sprites/image' + sprite.to_s + '.png'] # uses concatenation to create unique image path~ - Inside source: true *** True Line Result 'sprites/image' + sprite.to_s + '.png'] # uses concatenation to create unique image path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs sprite for the player by setting x, y, width, height, and image path~ - Inside source: true *** True Line Result # Outputs sprite for the player by setting x, y, width, height, and image path ** Processing line: ~ outputs.sprites << [state.x,~ - Inside source: true *** True Line Result outputs.sprites << [state.x, ** Processing line: ~ state.y,~ - Inside source: true *** True Line Result state.y, ** Processing line: ~ state.player_width,~ - Inside source: true *** True Line Result state.player_width, ** Processing line: ~ state.player_height,'sprites/player.png']~ - Inside source: true *** True Line Result state.player_height,'sprites/player.png'] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs labels as primitives in top right of the screen~ - Inside source: true *** True Line Result # Outputs labels as primitives in top right of the screen ** Processing line: ~ outputs.primitives << [920, 700, 'Press \'s\' to access sprites.', 1, 0].label~ - Inside source: true *** True Line Result outputs.primitives << [920, 700, 'Press \'s\' to access sprites.', 1, 0].label ** Processing line: ~ outputs.primitives << [920, 675, 'Click existing sprite to delete.', 1, 0].label~ - Inside source: true *** True Line Result outputs.primitives << [920, 675, 'Click existing sprite to delete.', 1, 0].label ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.primitives << [920, 640, '<- and -> to move.', 1, 0].label~ - Inside source: true *** True Line Result outputs.primitives << [920, 640, '<- and -> to move.', 1, 0].label ** Processing line: ~ outputs.primitives << [920, 615, 'Press and hold space to jump.', 1, 0].label~ - Inside source: true *** True Line Result outputs.primitives << [920, 615, 'Press and hold space to jump.', 1, 0].label ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.primitives << [920, 580, 'Press \'e\' to export current map.', 1, 0].label~ - Inside source: true *** True Line Result outputs.primitives << [920, 580, 'Press \'e\' to export current map.', 1, 0].label ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the map is saved and less than 120 frames have passed, the label is displayed~ - Inside source: true *** True Line Result # if the map is saved and less than 120 frames have passed, the label is displayed ** Processing line: ~ if state.map_saved_at > 0 && state.map_saved_at.elapsed_time < 120~ - Inside source: true *** True Line Result if state.map_saved_at > 0 && state.map_saved_at.elapsed_time < 120 ** Processing line: ~ outputs.primitives << [920, 555, 'Map has been exported!', 1, 0, 50, 100, 50].label~ - Inside source: true *** True Line Result outputs.primitives << [920, 555, 'Map has been exported!', 1, 0, 50, 100, 50].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If player hits 's', following appears~ - Inside source: true *** True Line Result # If player hits 's', following appears ** Processing line: ~ if state.mode == :selecting~ - Inside source: true *** True Line Result if state.mode == :selecting ** Processing line: ~ # White background for sprite selection~ - Inside source: true *** True Line Result # White background for sprite selection ** Processing line: ~ outputs.primitives << [state.select_menu, 255, 255, 255].solid~ - Inside source: true *** True Line Result outputs.primitives << [state.select_menu, 255, 255, 255].solid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Select tile label at the top of the screen~ - Inside source: true *** True Line Result # Select tile label at the top of the screen ** Processing line: ~ outputs.primitives << [state.banner_coords.x, state.banner_coords.y, "Select Sprite (sprites located in \"sprites\" folder)", 10, 1, 0, 0, 0, 255].label~ - Inside source: true *** True Line Result outputs.primitives << [state.banner_coords.x, state.banner_coords.y, "Select Sprite (sprites located in \"sprites\" folder)", 10, 1, 0, 0, 0, 255].label ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Places sprites in locations calculated in the defaults function~ - Inside source: true *** True Line Result # Places sprites in locations calculated in the defaults function ** Processing line: ~ outputs.primitives << state.sprite_coords.map do |x, y, order|~ - Inside source: true *** True Line Result outputs.primitives << state.sprite_coords.map do |x, y, order| ** Processing line: ~ [x, y, 50, 50, 'sprites/image' + order.to_s + ".png"].sprite~ - Inside source: true *** True Line Result [x, y, 50, 50, 'sprites/image' + order.to_s + ".png"].sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates sprite following mouse to help indicate which sprite you have selected~ - Inside source: true *** True Line Result # Creates sprite following mouse to help indicate which sprite you have selected ** Processing line: ~ # 10 is subtracted from the mouse's x position so that the sprite is not covered by the mouse icon~ - Inside source: true *** True Line Result # 10 is subtracted from the mouse's x position so that the sprite is not covered by the mouse icon ** Processing line: ~ outputs.primitives << [inputs.mouse.position.x - 10, inputs.mouse.position.y,~ - Inside source: true *** True Line Result outputs.primitives << [inputs.mouse.position.x - 10, inputs.mouse.position.y, ** Processing line: ~ 10, 10, 'sprites/image' + state.sprite_selected.to_s + ".png"].sprite~ - Inside source: true *** True Line Result 10, 10, 'sprites/image' + state.sprite_selected.to_s + ".png"].sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls methods that perform calculations~ - Inside source: true *** True Line Result # Calls methods that perform calculations ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ calc_in_game~ - Inside source: true *** True Line Result calc_in_game ** Processing line: ~ calc_sprite_selection~ - Inside source: true *** True Line Result calc_sprite_selection ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls methods that perform calculations (if in creating mode)~ - Inside source: true *** True Line Result # Calls methods that perform calculations (if in creating mode) ** Processing line: ~ def calc_in_game~ - Inside source: true *** True Line Result def calc_in_game ** Processing line: ~ return unless state.mode == :creating~ - Inside source: true *** True Line Result return unless state.mode == :creating ** Processing line: ~ calc_world_lookup~ - Inside source: true *** True Line Result calc_world_lookup ** Processing line: ~ calc_player~ - Inside source: true *** True Line Result calc_player ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_world_lookup~ - Inside source: true *** True Line Result def calc_world_lookup ** Processing line: ~ # If the tile size isn't equal to the previous tile size,~ - Inside source: true *** True Line Result # If the tile size isn't equal to the previous tile size, ** Processing line: ~ # the previous tile size is set to the tile size,~ - Inside source: true *** True Line Result # the previous tile size is set to the tile size, ** Processing line: ~ # and world_lookup hash is set to empty.~ - Inside source: true *** True Line Result # and world_lookup hash is set to empty. ** Processing line: ~ if state.tile_size != state.previous_tile_size~ - Inside source: true *** True Line Result if state.tile_size != state.previous_tile_size ** Processing line: ~ state.previous_tile_size = state.tile_size~ - Inside source: true *** True Line Result state.previous_tile_size = state.tile_size ** Processing line: ~ state.world_lookup = {}~ - Inside source: true *** True Line Result state.world_lookup = {} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # return if world_lookup is not empty or if world is empty~ - Inside source: true *** True Line Result # return if world_lookup is not empty or if world is empty ** Processing line: ~ return if state.world_lookup.keys.length > 0~ - Inside source: true *** True Line Result return if state.world_lookup.keys.length > 0 ** Processing line: ~ return unless state.world.length > 0~ - Inside source: true *** True Line Result return unless state.world.length > 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Searches through the world and finds the coordinates that exist~ - Inside source: true *** True Line Result # Searches through the world and finds the coordinates that exist ** Processing line: ~ state.world_lookup = {}~ - Inside source: true *** True Line Result state.world_lookup = {} ** Processing line: ~ state.world.each { |x, y| state.world_lookup[[x, y]] = true }~ - Inside source: true *** True Line Result state.world.each { |x, y| state.world_lookup[[x, y]] = true } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Assigns collision rects for every sprite drawn~ - Inside source: true *** True Line Result # Assigns collision rects for every sprite drawn ** Processing line: ~ state.world_collision_rects =~ - Inside source: true *** True Line Result state.world_collision_rects = ** Processing line: ~ state.world_lookup~ - Inside source: true *** True Line Result state.world_lookup ** Processing line: ~ .keys~ - Inside source: true *** True Line Result .keys ** Processing line: ~ .map do |coord_x, coord_y|~ - Inside source: true *** True Line Result .map do |coord_x, coord_y| ** Processing line: ~ s = state.tile_size~ - Inside source: true *** True Line Result s = state.tile_size ** Processing line: ~ # Multiplying by s (the size of a tile) ensures that the rect is~ - Inside source: true *** True Line Result # Multiplying by s (the size of a tile) ensures that the rect is ** Processing line: ~ # placed exactly where you want it to be placed (causes grid to coordinate)~ - Inside source: true *** True Line Result # placed exactly where you want it to be placed (causes grid to coordinate) ** Processing line: ~ # How many pixels horizontally across and vertically up and down~ - Inside source: true *** True Line Result # How many pixels horizontally across and vertically up and down ** Processing line: ~ x = s * coord_x~ - Inside source: true *** True Line Result x = s * coord_x ** Processing line: ~ y = s * coord_y~ - Inside source: true *** True Line Result y = s * coord_y ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ args: [coord_x, coord_y],~ - Inside source: true *** True Line Result args: [coord_x, coord_y], ** Processing line: ~ left_right: [x, y + 4, s, s - 6], # hash keys and values~ - Inside source: true *** True Line Result left_right: [x, y + 4, s, s - 6], # hash keys and values ** Processing line: ~ top: [x + 4, y + 6, s - 8, s - 6],~ - Inside source: true *** True Line Result top: [x + 4, y + 6, s - 8, s - 6], ** Processing line: ~ bottom: [x + 1, y - 1, s - 2, s - 8],~ - Inside source: true *** True Line Result bottom: [x + 1, y - 1, s - 2, s - 8], ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates movement of player and calls methods that perform collision calculations~ - Inside source: true *** True Line Result # Calculates movement of player and calls methods that perform collision calculations ** Processing line: ~ def calc_player~ - Inside source: true *** True Line Result def calc_player ** Processing line: ~ state.dy += state.gravity # what goes up must come down because of gravity~ - Inside source: true *** True Line Result state.dy += state.gravity # what goes up must come down because of gravity ** Processing line: ~ calc_box_collision~ - Inside source: true *** True Line Result calc_box_collision ** Processing line: ~ calc_edge_collision~ - Inside source: true *** True Line Result calc_edge_collision ** Processing line: ~ state.y += state.dy # Since velocity is the change in position, the change in y increases by dy~ - Inside source: true *** True Line Result state.y += state.dy # Since velocity is the change in position, the change in y increases by dy ** Processing line: ~ state.x += state.dx # Ditto line above but dx and x~ - Inside source: true *** True Line Result state.x += state.dx # Ditto line above but dx and x ** Processing line: ~ state.dx *= 0.8 # Scales dx down~ - Inside source: true *** True Line Result state.dx *= 0.8 # Scales dx down ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls methods that determine whether the player collides with any world_collision_rects.~ - Inside source: true *** True Line Result # Calls methods that determine whether the player collides with any world_collision_rects. ** Processing line: ~ def calc_box_collision~ - Inside source: true *** True Line Result def calc_box_collision ** Processing line: ~ return unless state.world_lookup.keys.length > 0 # return unless hash has atleast 1 key~ - Inside source: true *** True Line Result return unless state.world_lookup.keys.length > 0 # return unless hash has atleast 1 key ** Processing line: ~ collision_floor~ - Inside source: true *** True Line Result collision_floor ** Processing line: ~ collision_left~ - Inside source: true *** True Line Result collision_left ** Processing line: ~ collision_right~ - Inside source: true *** True Line Result collision_right ** Processing line: ~ collision_ceiling~ - Inside source: true *** True Line Result collision_ceiling ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds collisions between the bottom of the player's rect and the top of a world_collision_rect.~ - Inside source: true *** True Line Result # Finds collisions between the bottom of the player's rect and the top of a world_collision_rect. ** Processing line: ~ def collision_floor~ - Inside source: true *** True Line Result def collision_floor ** Processing line: ~ return unless state.dy <= 0 # return unless player is going down or is as far down as possible~ - Inside source: true *** True Line Result return unless state.dy <= 0 # return unless player is going down or is as far down as possible ** Processing line: ~ player_rect = [state.x, next_y, state.tile_size, state.tile_size] # definition of player~ - Inside source: true *** True Line Result player_rect = [state.x, next_y, state.tile_size, state.tile_size] # definition of player ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Runs through all the sprites on the field and finds all intersections between player's~ - Inside source: true *** True Line Result # Runs through all the sprites on the field and finds all intersections between player's ** Processing line: ~ # bottom and the top of a rect.~ - Inside source: true *** True Line Result # bottom and the top of a rect. ** Processing line: ~ floor_collisions = state.world_collision_rects~ - Inside source: true *** True Line Result floor_collisions = state.world_collision_rects ** Processing line: ~ .find_all { |r| r[:top].intersect_rect?(player_rect, state.collision_tolerance) }~ - Inside source: true *** True Line Result .find_all { |r| r[:top].intersect_rect?(player_rect, state.collision_tolerance) } ** Processing line: ~ .first~ - Inside source: true *** True Line Result .first ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless floor_collisions # performs following changes if a collision has occurred~ - Inside source: true *** True Line Result return unless floor_collisions # performs following changes if a collision has occurred ** Processing line: ~ state.y = floor_collisions[:top].top # y of player is set to the y of the colliding rect's top~ - Inside source: true *** True Line Result state.y = floor_collisions[:top].top # y of player is set to the y of the colliding rect's top ** Processing line: ~ state.dy = 0 # no change in y because the player's path is blocked~ - Inside source: true *** True Line Result state.dy = 0 # no change in y because the player's path is blocked ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds collisions between the player's left side and the right side of a world_collision_rect.~ - Inside source: true *** True Line Result # Finds collisions between the player's left side and the right side of a world_collision_rect. ** Processing line: ~ def collision_left~ - Inside source: true *** True Line Result def collision_left ** Processing line: ~ return unless state.dx < 0 # return unless player is moving left~ - Inside source: true *** True Line Result return unless state.dx < 0 # return unless player is moving left ** Processing line: ~ player_rect = [next_x, state.y, state.tile_size, state.tile_size]~ - Inside source: true *** True Line Result player_rect = [next_x, state.y, state.tile_size, state.tile_size] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Runs through all the sprites on the field and finds all intersections between the player's left side~ - Inside source: true *** True Line Result # Runs through all the sprites on the field and finds all intersections between the player's left side ** Processing line: ~ # and the right side of a rect.~ - Inside source: true *** True Line Result # and the right side of a rect. ** Processing line: ~ left_side_collisions = state.world_collision_rects~ - Inside source: true *** True Line Result left_side_collisions = state.world_collision_rects ** Processing line: ~ .find_all { |r| r[:left_right].intersect_rect?(player_rect, state.collision_tolerance) }~ - Inside source: true *** True Line Result .find_all { |r| r[:left_right].intersect_rect?(player_rect, state.collision_tolerance) } ** Processing line: ~ .first~ - Inside source: true *** True Line Result .first ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless left_side_collisions # return unless collision occurred~ - Inside source: true *** True Line Result return unless left_side_collisions # return unless collision occurred ** Processing line: ~ state.x = left_side_collisions[:left_right].right # sets player's x to the x of the colliding rect's right side~ - Inside source: true *** True Line Result state.x = left_side_collisions[:left_right].right # sets player's x to the x of the colliding rect's right side ** Processing line: ~ state.dx = 0 # no change in x because the player's path is blocked~ - Inside source: true *** True Line Result state.dx = 0 # no change in x because the player's path is blocked ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds collisions between the right side of the player and the left side of a world_collision_rect.~ - Inside source: true *** True Line Result # Finds collisions between the right side of the player and the left side of a world_collision_rect. ** Processing line: ~ def collision_right~ - Inside source: true *** True Line Result def collision_right ** Processing line: ~ return unless state.dx > 0 # return unless player is moving right~ - Inside source: true *** True Line Result return unless state.dx > 0 # return unless player is moving right ** Processing line: ~ player_rect = [next_x, state.y, state.tile_size, state.tile_size]~ - Inside source: true *** True Line Result player_rect = [next_x, state.y, state.tile_size, state.tile_size] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Runs through all the sprites on the field and finds all intersections between the player's~ - Inside source: true *** True Line Result # Runs through all the sprites on the field and finds all intersections between the player's ** Processing line: ~ # right side and the left side of a rect.~ - Inside source: true *** True Line Result # right side and the left side of a rect. ** Processing line: ~ right_side_collisions = state.world_collision_rects~ - Inside source: true *** True Line Result right_side_collisions = state.world_collision_rects ** Processing line: ~ .find_all { |r| r[:left_right].intersect_rect?(player_rect, state.collision_tolerance) }~ - Inside source: true *** True Line Result .find_all { |r| r[:left_right].intersect_rect?(player_rect, state.collision_tolerance) } ** Processing line: ~ .first~ - Inside source: true *** True Line Result .first ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless right_side_collisions # return unless collision occurred~ - Inside source: true *** True Line Result return unless right_side_collisions # return unless collision occurred ** Processing line: ~ state.x = right_side_collisions[:left_right].left - state.tile_size # player's x is set to the x of colliding rect's left side (minus tile size since x is the player's bottom left corner)~ - Inside source: true *** True Line Result state.x = right_side_collisions[:left_right].left - state.tile_size # player's x is set to the x of colliding rect's left side (minus tile size since x is the player's bottom left corner) ** Processing line: ~ state.dx = 0 # no change in x because the player's path is blocked~ - Inside source: true *** True Line Result state.dx = 0 # no change in x because the player's path is blocked ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds collisions between the top of the player's rect and the bottom of a world_collision_rect.~ - Inside source: true *** True Line Result # Finds collisions between the top of the player's rect and the bottom of a world_collision_rect. ** Processing line: ~ def collision_ceiling~ - Inside source: true *** True Line Result def collision_ceiling ** Processing line: ~ return unless state.dy > 0 # return unless player is moving up~ - Inside source: true *** True Line Result return unless state.dy > 0 # return unless player is moving up ** Processing line: ~ player_rect = [state.x, next_y, state.player_width, state.player_height]~ - Inside source: true *** True Line Result player_rect = [state.x, next_y, state.player_width, state.player_height] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Runs through all the sprites on the field and finds all intersections between the player's top~ - Inside source: true *** True Line Result # Runs through all the sprites on the field and finds all intersections between the player's top ** Processing line: ~ # and the bottom of a rect.~ - Inside source: true *** True Line Result # and the bottom of a rect. ** Processing line: ~ ceil_collisions = state.world_collision_rects~ - Inside source: true *** True Line Result ceil_collisions = state.world_collision_rects ** Processing line: ~ .find_all { |r| r[:bottom].intersect_rect?(player_rect, state.collision_tolerance) }~ - Inside source: true *** True Line Result .find_all { |r| r[:bottom].intersect_rect?(player_rect, state.collision_tolerance) } ** Processing line: ~ .first~ - Inside source: true *** True Line Result .first ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless ceil_collisions # return unless collision occurred~ - Inside source: true *** True Line Result return unless ceil_collisions # return unless collision occurred ** Processing line: ~ state.y = ceil_collisions[:bottom].y - state.tile_size # player's y is set to the y of the colliding rect's bottom (minus tile size)~ - Inside source: true *** True Line Result state.y = ceil_collisions[:bottom].y - state.tile_size # player's y is set to the y of the colliding rect's bottom (minus tile size) ** Processing line: ~ state.dy = 0 # no change in y because the player's path is blocked~ - Inside source: true *** True Line Result state.dy = 0 # no change in y because the player's path is blocked ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Makes sure the player remains within the screen's dimensions.~ - Inside source: true *** True Line Result # Makes sure the player remains within the screen's dimensions. ** Processing line: ~ def calc_edge_collision~ - Inside source: true *** True Line Result def calc_edge_collision ** Processing line: ~ # Ensures that player doesn't fall below the map~ - Inside source: true *** True Line Result # Ensures that player doesn't fall below the map ** Processing line: ~ if next_y < 0 && state.dy < 0 # if player is moving down and is about to fall (next_y) below the map's scope~ - Inside source: true *** True Line Result if next_y < 0 && state.dy < 0 # if player is moving down and is about to fall (next_y) below the map's scope ** Processing line: ~ state.y = 0 # 0 is the lowest the player can be while staying on the screen~ - Inside source: true *** True Line Result state.y = 0 # 0 is the lowest the player can be while staying on the screen ** Processing line: ~ state.dy = 0~ - Inside source: true *** True Line Result state.dy = 0 ** Processing line: ~ # Ensures player doesn't go insanely high~ - Inside source: true *** True Line Result # Ensures player doesn't go insanely high ** Processing line: ~ elsif next_y > 720 - state.tile_size && state.dy > 0 # if player is moving up, about to exceed map's scope~ - Inside source: true *** True Line Result elsif next_y > 720 - state.tile_size && state.dy > 0 # if player is moving up, about to exceed map's scope ** Processing line: ~ state.y = 720 - state.tile_size # if we don't subtract tile_size, we won't be able to see the player on the screen~ - Inside source: true *** True Line Result state.y = 720 - state.tile_size # if we don't subtract tile_size, we won't be able to see the player on the screen ** Processing line: ~ state.dy = 0~ - Inside source: true *** True Line Result state.dy = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Ensures that player remains in the horizontal range its supposed to~ - Inside source: true *** True Line Result # Ensures that player remains in the horizontal range its supposed to ** Processing line: ~ if state.x >= 1280 - state.tile_size && state.dx > 0 # if the player is moving too far right~ - Inside source: true *** True Line Result if state.x >= 1280 - state.tile_size && state.dx > 0 # if the player is moving too far right ** Processing line: ~ state.x = 1280 - state.tile_size # farthest right the player can be while remaining in the screen's scope~ - Inside source: true *** True Line Result state.x = 1280 - state.tile_size # farthest right the player can be while remaining in the screen's scope ** Processing line: ~ state.dx = 0~ - Inside source: true *** True Line Result state.dx = 0 ** Processing line: ~ elsif state.x <= 0 && state.dx < 0 # if the player is moving too far left~ - Inside source: true *** True Line Result elsif state.x <= 0 && state.dx < 0 # if the player is moving too far left ** Processing line: ~ state.x = 0 # farthest left the player can be while remaining in the screen's scope~ - Inside source: true *** True Line Result state.x = 0 # farthest left the player can be while remaining in the screen's scope ** Processing line: ~ state.dx = 0~ - Inside source: true *** True Line Result state.dx = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_sprite_selection~ - Inside source: true *** True Line Result def calc_sprite_selection ** Processing line: ~ # Does the transition to bring down the select sprite screen~ - Inside source: true *** True Line Result # Does the transition to bring down the select sprite screen ** Processing line: ~ if state.mode == :selecting && state.select_menu.y != 0~ - Inside source: true *** True Line Result if state.mode == :selecting && state.select_menu.y != 0 ** Processing line: ~ state.select_menu.y = 0 # sets y position of select menu (shown when 's' is pressed)~ - Inside source: true *** True Line Result state.select_menu.y = 0 # sets y position of select menu (shown when 's' is pressed) ** Processing line: ~ state.banner_coords.y = 680 # sets y position of Select Sprite banner~ - Inside source: true *** True Line Result state.banner_coords.y = 680 # sets y position of Select Sprite banner ** Processing line: ~ state.sprite_coords = state.sprite_coords.map do |x, y, w, h|~ - Inside source: true *** True Line Result state.sprite_coords = state.sprite_coords.map do |x, y, w, h| ** Processing line: ~ [x, y - 720, w, h] # sets definition of sprites (change '-' to '+' and the sprites can't be seen)~ - Inside source: true *** True Line Result [x, y - 720, w, h] # sets definition of sprites (change '-' to '+' and the sprites can't be seen) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Does the transition to leave the select sprite screen~ - Inside source: true *** True Line Result # Does the transition to leave the select sprite screen ** Processing line: ~ if state.mode == :creating && state.select_menu.y != 720~ - Inside source: true *** True Line Result if state.mode == :creating && state.select_menu.y != 720 ** Processing line: ~ state.select_menu.y = 720 # sets y position of select menu (menu is retreated back up)~ - Inside source: true *** True Line Result state.select_menu.y = 720 # sets y position of select menu (menu is retreated back up) ** Processing line: ~ state.banner_coords.y = 1000 # sets y position of Select Sprite banner~ - Inside source: true *** True Line Result state.banner_coords.y = 1000 # sets y position of Select Sprite banner ** Processing line: ~ state.sprite_coords = state.sprite_coords.map do |x, y, w, h|~ - Inside source: true *** True Line Result state.sprite_coords = state.sprite_coords.map do |x, y, w, h| ** Processing line: ~ [x, y + 720, w, h] # sets definition of all elements in collection~ - Inside source: true *** True Line Result [x, y + 720, w, h] # sets definition of all elements in collection ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_inputs~ - Inside source: true *** True Line Result def process_inputs ** Processing line: ~ # If the state.mode is back and if the menu has retreated back up~ - Inside source: true *** True Line Result # If the state.mode is back and if the menu has retreated back up ** Processing line: ~ # call methods that process user inputs~ - Inside source: true *** True Line Result # call methods that process user inputs ** Processing line: ~ if state.mode == :creating~ - Inside source: true *** True Line Result if state.mode == :creating ** Processing line: ~ process_inputs_player_movement~ - Inside source: true *** True Line Result process_inputs_player_movement ** Processing line: ~ process_inputs_place_tile~ - Inside source: true *** True Line Result process_inputs_place_tile ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # For each sprite_coordinate added, check what sprite was selected~ - Inside source: true *** True Line Result # For each sprite_coordinate added, check what sprite was selected ** Processing line: ~ if state.mode == :selecting~ - Inside source: true *** True Line Result if state.mode == :selecting ** Processing line: ~ state.sprite_coords.map do |x, y, order| # goes through all sprites in collection~ - Inside source: true *** True Line Result state.sprite_coords.map do |x, y, order| # goes through all sprites in collection ** Processing line: ~ # checks that a specific sprite was pressed based on x, y position~ - Inside source: true *** True Line Result # checks that a specific sprite was pressed based on x, y position ** Processing line: ~ if inputs.mouse.down && # the && (and) sign means ALL statements must be true for the evaluation to be true~ - Inside source: true *** True Line Result if inputs.mouse.down && # the && (and) sign means ALL statements must be true for the evaluation to be true ** Processing line: ~ inputs.mouse.down.point.x >= x && # x is greater than or equal to sprite's x and~ - Inside source: true *** True Line Result inputs.mouse.down.point.x >= x && # x is greater than or equal to sprite's x and ** Processing line: ~ inputs.mouse.down.point.x <= x + 50 && # x is less than or equal to 50 pixels to the right~ - Inside source: true *** True Line Result inputs.mouse.down.point.x <= x + 50 && # x is less than or equal to 50 pixels to the right ** Processing line: ~ inputs.mouse.down.point.y >= y && # y is greater than or equal to sprite's y~ - Inside source: true *** True Line Result inputs.mouse.down.point.y >= y && # y is greater than or equal to sprite's y ** Processing line: ~ inputs.mouse.down.point.y <= y + 50 # y is less than or equal to 50 pixels up~ - Inside source: true *** True Line Result inputs.mouse.down.point.y <= y + 50 # y is less than or equal to 50 pixels up ** Processing line: ~ state.sprite_selected = order # sprite is chosen~ - Inside source: true *** True Line Result state.sprite_selected = order # sprite is chosen ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ inputs_export_stage~ - Inside source: true *** True Line Result inputs_export_stage ** Processing line: ~ process_inputs_show_available_sprites~ - Inside source: true *** True Line Result process_inputs_show_available_sprites ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the player based on the keys they press on their keyboard~ - Inside source: true *** True Line Result # Moves the player based on the keys they press on their keyboard ** Processing line: ~ def process_inputs_player_movement~ - Inside source: true *** True Line Result def process_inputs_player_movement ** Processing line: ~ # Sets dx to 0 if the player lets go of arrow keys (player won't move left or right)~ - Inside source: true *** True Line Result # Sets dx to 0 if the player lets go of arrow keys (player won't move left or right) ** Processing line: ~ if inputs.keyboard.key_up.right~ - Inside source: true *** True Line Result if inputs.keyboard.key_up.right ** Processing line: ~ state.dx = 0~ - Inside source: true *** True Line Result state.dx = 0 ** Processing line: ~ elsif inputs.keyboard.key_up.left~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_up.left ** Processing line: ~ state.dx = 0~ - Inside source: true *** True Line Result state.dx = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets dx to 3 in whatever direction the player chooses when they hold down (or press) the left or right keys~ - Inside source: true *** True Line Result # Sets dx to 3 in whatever direction the player chooses when they hold down (or press) the left or right keys ** Processing line: ~ if inputs.keyboard.key_held.right~ - Inside source: true *** True Line Result if inputs.keyboard.key_held.right ** Processing line: ~ state.dx = 3~ - Inside source: true *** True Line Result state.dx = 3 ** Processing line: ~ elsif inputs.keyboard.key_held.left~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_held.left ** Processing line: ~ state.dx = -3~ - Inside source: true *** True Line Result state.dx = -3 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets dy to 5 to make the player ~fly~ when they press the space bar on their keyboard~ - Inside source: true *** True Line Result # Sets dy to 5 to make the player ~fly~ when they press the space bar on their keyboard ** Processing line: ~ if inputs.keyboard.key_held.space~ - Inside source: true *** True Line Result if inputs.keyboard.key_held.space ** Processing line: ~ state.dy = 5~ - Inside source: true *** True Line Result state.dy = 5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds tile in the place the user holds down the mouse~ - Inside source: true *** True Line Result # Adds tile in the place the user holds down the mouse ** Processing line: ~ def process_inputs_place_tile~ - Inside source: true *** True Line Result def process_inputs_place_tile ** Processing line: ~ if inputs.mouse.down # if mouse is pressed~ - Inside source: true *** True Line Result if inputs.mouse.down # if mouse is pressed ** Processing line: ~ state.world_lookup = {}~ - Inside source: true *** True Line Result state.world_lookup = {} ** Processing line: ~ x, y = to_coord inputs.mouse.down.point # gets x, y coordinates for the grid~ - Inside source: true *** True Line Result x, y = to_coord inputs.mouse.down.point # gets x, y coordinates for the grid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks if any coordinates duplicate (already exist in world)~ - Inside source: true *** True Line Result # Checks if any coordinates duplicate (already exist in world) ** Processing line: ~ if state.world.any? { |existing_x, existing_y, n| existing_x == x && existing_y == y }~ - Inside source: true *** True Line Result if state.world.any? { |existing_x, existing_y, n| existing_x == x && existing_y == y } ** Processing line: ~ #erases existing tile space by rejecting them from world~ - Inside source: true *** True Line Result #erases existing tile space by rejecting them from world ** Processing line: ~ state.world = state.world.reject do |existing_x, existing_y, n|~ - Inside source: true *** True Line Result state.world = state.world.reject do |existing_x, existing_y, n| ** Processing line: ~ existing_x == x && existing_y == y~ - Inside source: true *** True Line Result existing_x == x && existing_y == y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.world << [x, y, state.sprite_selected] # If no duplicates, add the sprite~ - Inside source: true *** True Line Result state.world << [x, y, state.sprite_selected] # If no duplicates, add the sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Stores/exports world collection's info (coordinates, sprite number) into a file~ - Inside source: true *** True Line Result # Stores/exports world collection's info (coordinates, sprite number) into a file ** Processing line: ~ def inputs_export_stage~ - Inside source: true *** True Line Result def inputs_export_stage ** Processing line: ~ if inputs.keyboard.key_down.e # if "e" is pressed~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.e # if "e" is pressed ** Processing line: ~ export_string = state.world.map do |x, y, sprite_number| # stores world info in a string~ - Inside source: true *** True Line Result export_string = state.world.map do |x, y, sprite_number| # stores world info in a string ** Processing line: ~ "#{x},#{y},#{sprite_number}" # using string interpolation~ - Inside source: true *** True Line Result "#{x},#{y},#{sprite_number}" # using string interpolation ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ gtk.write_file(MAP_FILE_PATH, export_string.join("\n")) # writes string into a file~ - Inside source: true *** True Line Result gtk.write_file(MAP_FILE_PATH, export_string.join("\n")) # writes string into a file ** Processing line: ~ state.map_saved_at = state.tick_count # frame number (passage of time) when the map was saved~ - Inside source: true *** True Line Result state.map_saved_at = state.tick_count # frame number (passage of time) when the map was saved ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_inputs_show_available_sprites~ - Inside source: true *** True Line Result def process_inputs_show_available_sprites ** Processing line: ~ # Based on keyboard input, the entity (:creating and :selecting) switch~ - Inside source: true *** True Line Result # Based on keyboard input, the entity (:creating and :selecting) switch ** Processing line: ~ if inputs.keyboard.key_held.s && state.mode == :creating # if "s" is pressed and currently creating~ - Inside source: true *** True Line Result if inputs.keyboard.key_held.s && state.mode == :creating # if "s" is pressed and currently creating ** Processing line: ~ state.mode = :selecting # will change to selecting~ - Inside source: true *** True Line Result state.mode = :selecting # will change to selecting ** Processing line: ~ inputs.keyboard.clear # VERY IMPORTANT! If not present, it'll flicker between on and off~ - Inside source: true *** True Line Result inputs.keyboard.clear # VERY IMPORTANT! If not present, it'll flicker between on and off ** Processing line: ~ elsif inputs.keyboard.key_held.s && state.mode == :selecting # if "s" is pressed and currently selecting~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_held.s && state.mode == :selecting # if "s" is pressed and currently selecting ** Processing line: ~ state.mode = :creating # will change to creating~ - Inside source: true *** True Line Result state.mode = :creating # will change to creating ** Processing line: ~ inputs.keyboard.clear # VERY IMPORTANT! If not present, it'll flicker between on and off~ - Inside source: true *** True Line Result inputs.keyboard.clear # VERY IMPORTANT! If not present, it'll flicker between on and off ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Loads the world collection by reading from the map.txt file in the app folder~ - Inside source: true *** True Line Result # Loads the world collection by reading from the map.txt file in the app folder ** Processing line: ~ def attempt_load_world_from_file~ - Inside source: true *** True Line Result def attempt_load_world_from_file ** Processing line: ~ return if state.world # return if the world collection is already populated~ - Inside source: true *** True Line Result return if state.world # return if the world collection is already populated ** Processing line: ~ state.world ||= [] # initialized as an empty collection~ - Inside source: true *** True Line Result state.world ||= [] # initialized as an empty collection ** Processing line: ~ exported_world = gtk.read_file(MAP_FILE_PATH) # reads the file using the path mentioned at top of code~ - Inside source: true *** True Line Result exported_world = gtk.read_file(MAP_FILE_PATH) # reads the file using the path mentioned at top of code ** Processing line: ~ return unless exported_world # return unless the file read was successful~ - Inside source: true *** True Line Result return unless exported_world # return unless the file read was successful ** Processing line: ~ state.world = exported_world.each_line.map do |l| # perform action on each line of exported_world~ - Inside source: true *** True Line Result state.world = exported_world.each_line.map do |l| # perform action on each line of exported_world ** Processing line: ~ l.split(',').map(&:to_i) # calls split using ',' as a delimiter, and invokes .map on the collection,~ - Inside source: true *** True Line Result l.split(',').map(&:to_i) # calls split using ',' as a delimiter, and invokes .map on the collection, ** Processing line: ~ # calling to_i (converts to integers) on each element~ - Inside source: true *** True Line Result # calling to_i (converts to integers) on each element ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds the change in y to y to determine the next y position of the player.~ - Inside source: true *** True Line Result # Adds the change in y to y to determine the next y position of the player. ** Processing line: ~ def next_y~ - Inside source: true *** True Line Result def next_y ** Processing line: ~ state.y + state.dy~ - Inside source: true *** True Line Result state.y + state.dy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Determines next x position of player~ - Inside source: true *** True Line Result # Determines next x position of player ** Processing line: ~ def next_x~ - Inside source: true *** True Line Result def next_x ** Processing line: ~ if state.dx < 0 # if the player moves left~ - Inside source: true *** True Line Result if state.dx < 0 # if the player moves left ** Processing line: ~ return state.x - (state.tile_size - state.player_width) # subtracts since the change in x is negative (player is moving left)~ - Inside source: true *** True Line Result return state.x - (state.tile_size - state.player_width) # subtracts since the change in x is negative (player is moving left) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return state.x + (state.tile_size - state.player_width) # adds since the change in x is positive (player is moving right)~ - Inside source: true *** True Line Result return state.x + (state.tile_size - state.player_width) # adds since the change in x is positive (player is moving right) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_coord point~ - Inside source: true *** True Line Result def to_coord point ** Processing line: ~ # Integer divides (idiv) point.x to turn into grid~ - Inside source: true *** True Line Result # Integer divides (idiv) point.x to turn into grid ** Processing line: ~ # Then, you can just multiply each integer by state.tile_size~ - Inside source: true *** True Line Result # Then, you can just multiply each integer by state.tile_size ** Processing line: ~ # later and huzzah. Grid coordinates~ - Inside source: true *** True Line Result # later and huzzah. Grid coordinates ** Processing line: ~ [point.x.idiv(state.tile_size), point.y.idiv(state.tile_size)]~ - Inside source: true *** True Line Result [point.x.idiv(state.tile_size), point.y.idiv(state.tile_size)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $metroidvania_starter = MetroidvaniaStarter.new~ - Inside source: true *** True Line Result $metroidvania_starter = MetroidvaniaStarter.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $metroidvania_starter.grid = args.grid~ - Inside source: true *** True Line Result $metroidvania_starter.grid = args.grid ** Processing line: ~ $metroidvania_starter.inputs = args.inputs~ - Inside source: true *** True Line Result $metroidvania_starter.inputs = args.inputs ** Processing line: ~ $metroidvania_starter.state = args.state~ - Inside source: true *** True Line Result $metroidvania_starter.state = args.state ** Processing line: ~ $metroidvania_starter.outputs = args.outputs~ - Inside source: true *** True Line Result $metroidvania_starter.outputs = args.outputs ** Processing line: ~ $metroidvania_starter.gtk = args.gtk~ - Inside source: true *** True Line Result $metroidvania_starter.gtk = args.gtk ** Processing line: ~ $metroidvania_starter.tick~ - Inside source: true *** True Line Result $metroidvania_starter.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Box Collision 3 - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Box Collision 3 - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/06_box_collision_3/app/main.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/06_box_collision_3/app/main.rb ** Processing line: ~ class Game~ - Inside source: true *** True Line Result class Game ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input_edit_map~ - Inside source: true *** True Line Result input_edit_map ** Processing line: ~ input_player~ - Inside source: true *** True Line Result input_player ** Processing line: ~ calc_player~ - Inside source: true *** True Line Result calc_player ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ state.gravity = -0.4~ - Inside source: true *** True Line Result state.gravity = -0.4 ** Processing line: ~ state.drag = 0.15~ - Inside source: true *** True Line Result state.drag = 0.15 ** Processing line: ~ state.tile_size = 32~ - Inside source: true *** True Line Result state.tile_size = 32 ** Processing line: ~ state.player.size = 16~ - Inside source: true *** True Line Result state.player.size = 16 ** Processing line: ~ state.player.jump_power = 12~ - Inside source: true *** True Line Result state.player.jump_power = 12 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.tiles ||= []~ - Inside source: true *** True Line Result state.tiles ||= [] ** Processing line: ~ state.player.y ||= 800~ - Inside source: true *** True Line Result state.player.y ||= 800 ** Processing line: ~ state.player.x ||= 100~ - Inside source: true *** True Line Result state.player.x ||= 100 ** Processing line: ~ state.player.dy ||= 0~ - Inside source: true *** True Line Result state.player.dy ||= 0 ** Processing line: ~ state.player.dx ||= 0~ - Inside source: true *** True Line Result state.player.dx ||= 0 ** Processing line: ~ state.player.jumped_down_at ||= 0~ - Inside source: true *** True Line Result state.player.jumped_down_at ||= 0 ** Processing line: ~ state.player.jumped_at ||= 0~ - Inside source: true *** True Line Result state.player.jumped_at ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ calc_player_rect if !state.player.rect~ - Inside source: true *** True Line Result calc_player_rect if !state.player.rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ outputs.labels << [10, 10.from_top, "tile: click to add a tile, hold X key and click to delete a tile."]~ - Inside source: true *** True Line Result outputs.labels << [10, 10.from_top, "tile: click to add a tile, hold X key and click to delete a tile."] ** Processing line: ~ outputs.labels << [10, 35.from_top, "move: use left and right to move, space to jump, down and space to jump down."]~ - Inside source: true *** True Line Result outputs.labels << [10, 35.from_top, "move: use left and right to move, space to jump, down and space to jump down."] ** Processing line: ~ outputs.labels << [10, 55.from_top, " You can jump through or jump down through tiles with a height of 1."]~ - Inside source: true *** True Line Result outputs.labels << [10, 55.from_top, " You can jump through or jump down through tiles with a height of 1."] ** Processing line: ~ outputs.background_color = [80, 80, 80]~ - Inside source: true *** True Line Result outputs.background_color = [80, 80, 80] ** Processing line: ~ outputs.sprites << tiles.map(&:sprite)~ - Inside source: true *** True Line Result outputs.sprites << tiles.map(&:sprite) ** Processing line: ~ outputs.sprites << (player.rect.merge path: 'sprites/square/green.png')~ - Inside source: true *** True Line Result outputs.sprites << (player.rect.merge path: 'sprites/square/green.png') ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ mouse_overlay = {~ - Inside source: true *** True Line Result mouse_overlay = { ** Processing line: ~ x: (inputs.mouse.x.ifloor state.tile_size),~ - Inside source: true *** True Line Result x: (inputs.mouse.x.ifloor state.tile_size), ** Processing line: ~ y: (inputs.mouse.y.ifloor state.tile_size),~ - Inside source: true *** True Line Result y: (inputs.mouse.y.ifloor state.tile_size), ** Processing line: ~ w: state.tile_size,~ - Inside source: true *** True Line Result w: state.tile_size, ** Processing line: ~ h: state.tile_size,~ - Inside source: true *** True Line Result h: state.tile_size, ** Processing line: ~ a: 100~ - Inside source: true *** True Line Result a: 100 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ mouse_overlay = mouse_overlay.merge r: 255 if state.delete_mode~ - Inside source: true *** True Line Result mouse_overlay = mouse_overlay.merge r: 255 if state.delete_mode ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.mouse_held~ - Inside source: true *** True Line Result if state.mouse_held ** Processing line: ~ outputs.primitives << mouse_overlay.border!~ - Inside source: true *** True Line Result outputs.primitives << mouse_overlay.border! ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ outputs.primitives << mouse_overlay.solid!~ - Inside source: true *** True Line Result outputs.primitives << mouse_overlay.solid! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_edit_map~ - Inside source: true *** True Line Result def input_edit_map ** Processing line: ~ state.mouse_held = true if inputs.mouse.down~ - Inside source: true *** True Line Result state.mouse_held = true if inputs.mouse.down ** Processing line: ~ state.mouse_held = false if inputs.mouse.up~ - Inside source: true *** True Line Result state.mouse_held = false if inputs.mouse.up ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.x~ - Inside source: true *** True Line Result if inputs.keyboard.x ** Processing line: ~ state.delete_mode = true~ - Inside source: true *** True Line Result state.delete_mode = true ** Processing line: ~ elsif inputs.keyboard.key_up.x~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_up.x ** Processing line: ~ state.delete_mode = false~ - Inside source: true *** True Line Result state.delete_mode = false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless state.mouse_held~ - Inside source: true *** True Line Result return unless state.mouse_held ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ordinal = { x: (inputs.mouse.x.idiv state.tile_size),~ - Inside source: true *** True Line Result ordinal = { x: (inputs.mouse.x.idiv state.tile_size), ** Processing line: ~ y: (inputs.mouse.y.idiv state.tile_size) }~ - Inside source: true *** True Line Result y: (inputs.mouse.y.idiv state.tile_size) } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ found = find_tile ordinal~ - Inside source: true *** True Line Result found = find_tile ordinal ** Processing line: ~ if !found && !state.delete_mode~ - Inside source: true *** True Line Result if !found && !state.delete_mode ** Processing line: ~ tiles << (state.new_entity :tile, ordinal)~ - Inside source: true *** True Line Result tiles << (state.new_entity :tile, ordinal) ** Processing line: ~ recompute_tiles~ - Inside source: true *** True Line Result recompute_tiles ** Processing line: ~ elsif found && state.delete_mode~ - Inside source: true *** True Line Result elsif found && state.delete_mode ** Processing line: ~ tiles.delete found~ - Inside source: true *** True Line Result tiles.delete found ** Processing line: ~ recompute_tiles~ - Inside source: true *** True Line Result recompute_tiles ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_player~ - Inside source: true *** True Line Result def input_player ** Processing line: ~ player.dx += inputs.left_right~ - Inside source: true *** True Line Result player.dx += inputs.left_right ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.key_down.space && inputs.keyboard.down~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.space && inputs.keyboard.down ** Processing line: ~ player.dy = player.jump_power * -1~ - Inside source: true *** True Line Result player.dy = player.jump_power * -1 ** Processing line: ~ player.jumped_at = 0~ - Inside source: true *** True Line Result player.jumped_at = 0 ** Processing line: ~ player.jumped_down_at = state.tick_count~ - Inside source: true *** True Line Result player.jumped_down_at = state.tick_count ** Processing line: ~ elsif inputs.keyboard.key_down.space~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_down.space ** Processing line: ~ player.dy = player.jump_power~ - Inside source: true *** True Line Result player.dy = player.jump_power ** Processing line: ~ player.jumped_at = state.tick_count~ - Inside source: true *** True Line Result player.jumped_at = state.tick_count ** Processing line: ~ player.jumped_down_at = 0~ - Inside source: true *** True Line Result player.jumped_down_at = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_player~ - Inside source: true *** True Line Result def calc_player ** Processing line: ~ calc_player_rect~ - Inside source: true *** True Line Result calc_player_rect ** Processing line: ~ calc_below~ - Inside source: true *** True Line Result calc_below ** Processing line: ~ calc_left~ - Inside source: true *** True Line Result calc_left ** Processing line: ~ calc_right~ - Inside source: true *** True Line Result calc_right ** Processing line: ~ calc_above~ - Inside source: true *** True Line Result calc_above ** Processing line: ~ calc_player_dy~ - Inside source: true *** True Line Result calc_player_dy ** Processing line: ~ calc_player_dx~ - Inside source: true *** True Line Result calc_player_dx ** Processing line: ~ reset_player if player_off_stage?~ - Inside source: true *** True Line Result reset_player if player_off_stage? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_player_rect~ - Inside source: true *** True Line Result def calc_player_rect ** Processing line: ~ player.rect = current_player_rect~ - Inside source: true *** True Line Result player.rect = current_player_rect ** Processing line: ~ player.next_rect = player.rect.merge x: player.x + player.dx,~ - Inside source: true *** True Line Result player.next_rect = player.rect.merge x: player.x + player.dx, ** Processing line: ~ y: player.y + player.dy~ - Inside source: true *** True Line Result y: player.y + player.dy ** Processing line: ~ player.prev_rect = player.rect.merge x: player.x - player.dx,~ - Inside source: true *** True Line Result player.prev_rect = player.rect.merge x: player.x - player.dx, ** Processing line: ~ y: player.y - player.dy~ - Inside source: true *** True Line Result y: player.y - player.dy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_below~ - Inside source: true *** True Line Result def calc_below ** Processing line: ~ return unless player.dy <= 0~ - Inside source: true *** True Line Result return unless player.dy <= 0 ** Processing line: ~ tiles_below = find_tiles { |t| t.rect.top <= player.prev_rect.y }~ - Inside source: true *** True Line Result tiles_below = find_tiles { |t| t.rect.top <= player.prev_rect.y } ** Processing line: ~ collision = find_colliding_tile tiles_below, (player.rect.merge y: player.next_rect.y)~ - Inside source: true *** True Line Result collision = find_colliding_tile tiles_below, (player.rect.merge y: player.next_rect.y) ** Processing line: ~ return unless collision~ - Inside source: true *** True Line Result return unless collision ** Processing line: ~ if collision.neighbors.b == :none && player.jumped_down_at.elapsed_time < 10~ - Inside source: true *** True Line Result if collision.neighbors.b == :none && player.jumped_down_at.elapsed_time < 10 ** Processing line: ~ player.dy = -1~ - Inside source: true *** True Line Result player.dy = -1 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ player.y = collision.rect.y + state.tile_size~ - Inside source: true *** True Line Result player.y = collision.rect.y + state.tile_size ** Processing line: ~ player.dy = 0~ - Inside source: true *** True Line Result player.dy = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_left~ - Inside source: true *** True Line Result def calc_left ** Processing line: ~ return unless player.dx < 0~ - Inside source: true *** True Line Result return unless player.dx < 0 ** Processing line: ~ tiles_left = find_tiles { |t| t.rect.right <= player.prev_rect.left }~ - Inside source: true *** True Line Result tiles_left = find_tiles { |t| t.rect.right <= player.prev_rect.left } ** Processing line: ~ collision = find_colliding_tile tiles_left, (player.rect.merge x: player.next_rect.x)~ - Inside source: true *** True Line Result collision = find_colliding_tile tiles_left, (player.rect.merge x: player.next_rect.x) ** Processing line: ~ return unless collision~ - Inside source: true *** True Line Result return unless collision ** Processing line: ~ player.x = collision.rect.right~ - Inside source: true *** True Line Result player.x = collision.rect.right ** Processing line: ~ player.dx = 0~ - Inside source: true *** True Line Result player.dx = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_right~ - Inside source: true *** True Line Result def calc_right ** Processing line: ~ return unless player.dx > 0~ - Inside source: true *** True Line Result return unless player.dx > 0 ** Processing line: ~ tiles_right = find_tiles { |t| t.rect.left >= player.prev_rect.right }~ - Inside source: true *** True Line Result tiles_right = find_tiles { |t| t.rect.left >= player.prev_rect.right } ** Processing line: ~ collision = find_colliding_tile tiles_right, (player.rect.merge x: player.next_rect.x)~ - Inside source: true *** True Line Result collision = find_colliding_tile tiles_right, (player.rect.merge x: player.next_rect.x) ** Processing line: ~ return unless collision~ - Inside source: true *** True Line Result return unless collision ** Processing line: ~ player.x = collision.rect.left - player.rect.w~ - Inside source: true *** True Line Result player.x = collision.rect.left - player.rect.w ** Processing line: ~ player.dx = 0~ - Inside source: true *** True Line Result player.dx = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_above~ - Inside source: true *** True Line Result def calc_above ** Processing line: ~ return unless player.dy > 0~ - Inside source: true *** True Line Result return unless player.dy > 0 ** Processing line: ~ tiles_above = find_tiles { |t| t.rect.y >= player.prev_rect.y }~ - Inside source: true *** True Line Result tiles_above = find_tiles { |t| t.rect.y >= player.prev_rect.y } ** Processing line: ~ collision = find_colliding_tile tiles_above, (player.rect.merge y: player.next_rect.y)~ - Inside source: true *** True Line Result collision = find_colliding_tile tiles_above, (player.rect.merge y: player.next_rect.y) ** Processing line: ~ return unless collision~ - Inside source: true *** True Line Result return unless collision ** Processing line: ~ return if collision.neighbors.t == :none~ - Inside source: true *** True Line Result return if collision.neighbors.t == :none ** Processing line: ~ player.dy = 0~ - Inside source: true *** True Line Result player.dy = 0 ** Processing line: ~ player.y = collision.rect.bottom - player.rect.h~ - Inside source: true *** True Line Result player.y = collision.rect.bottom - player.rect.h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_player_dx~ - Inside source: true *** True Line Result def calc_player_dx ** Processing line: ~ player.dx = player.dx.clamp(-5, 5)~ - Inside source: true *** True Line Result player.dx = player.dx.clamp(-5, 5) ** Processing line: ~ player.dx *= 0.9~ - Inside source: true *** True Line Result player.dx *= 0.9 ** Processing line: ~ player.x += player.dx~ - Inside source: true *** True Line Result player.x += player.dx ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_player_dy~ - Inside source: true *** True Line Result def calc_player_dy ** Processing line: ~ player.y += player.dy~ - Inside source: true *** True Line Result player.y += player.dy ** Processing line: ~ player.dy += state.gravity~ - Inside source: true *** True Line Result player.dy += state.gravity ** Processing line: ~ player.dy += player.dy * state.drag ** 2 * -1~ - Inside source: true *** True Line Result player.dy += player.dy * state.drag ** 2 * -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset_player~ - Inside source: true *** True Line Result def reset_player ** Processing line: ~ player.x = 100~ - Inside source: true *** True Line Result player.x = 100 ** Processing line: ~ player.y = 720~ - Inside source: true *** True Line Result player.y = 720 ** Processing line: ~ player.dy = 0~ - Inside source: true *** True Line Result player.dy = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def recompute_tiles~ - Inside source: true *** True Line Result def recompute_tiles ** Processing line: ~ tiles.each do |t|~ - Inside source: true *** True Line Result tiles.each do |t| ** Processing line: ~ t.w = state.tile_size~ - Inside source: true *** True Line Result t.w = state.tile_size ** Processing line: ~ t.h = state.tile_size~ - Inside source: true *** True Line Result t.h = state.tile_size ** Processing line: ~ t.neighbors = tile_neighbors t, tiles~ - Inside source: true *** True Line Result t.neighbors = tile_neighbors t, tiles ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ t.rect = [t.x * state.tile_size,~ - Inside source: true *** True Line Result t.rect = [t.x * state.tile_size, ** Processing line: ~ t.y * state.tile_size,~ - Inside source: true *** True Line Result t.y * state.tile_size, ** Processing line: ~ state.tile_size,~ - Inside source: true *** True Line Result state.tile_size, ** Processing line: ~ state.tile_size].rect.to_hash~ - Inside source: true *** True Line Result state.tile_size].rect.to_hash ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sprite_sub_path = t.neighbors.mask.map { |m| flip_bit m }.join("")~ - Inside source: true *** True Line Result sprite_sub_path = t.neighbors.mask.map { |m| flip_bit m }.join("") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ t.sprite = {~ - Inside source: true *** True Line Result t.sprite = { ** Processing line: ~ x: t.x * state.tile_size,~ - Inside source: true *** True Line Result x: t.x * state.tile_size, ** Processing line: ~ y: t.y * state.tile_size,~ - Inside source: true *** True Line Result y: t.y * state.tile_size, ** Processing line: ~ w: state.tile_size,~ - Inside source: true *** True Line Result w: state.tile_size, ** Processing line: ~ h: state.tile_size,~ - Inside source: true *** True Line Result h: state.tile_size, ** Processing line: ~ path: "sprites/tile/wall-#{sprite_sub_path}.png"~ - Inside source: true *** True Line Result path: "sprites/tile/wall-#{sprite_sub_path}.png" ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def flip_bit bit~ - Inside source: true *** True Line Result def flip_bit bit ** Processing line: ~ return 0 if bit == 1~ - Inside source: true *** True Line Result return 0 if bit == 1 ** Processing line: ~ return 1~ - Inside source: true *** True Line Result return 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player~ - Inside source: true *** True Line Result def player ** Processing line: ~ state.player~ - Inside source: true *** True Line Result state.player ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_off_stage?~ - Inside source: true *** True Line Result def player_off_stage? ** Processing line: ~ player.rect.top < grid.bottom ||~ - Inside source: true *** True Line Result player.rect.top < grid.bottom || ** Processing line: ~ player.rect.right < grid.left ||~ - Inside source: true *** True Line Result player.rect.right < grid.left || ** Processing line: ~ player.rect.left > grid.right~ - Inside source: true *** True Line Result player.rect.left > grid.right ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def current_player_rect~ - Inside source: true *** True Line Result def current_player_rect ** Processing line: ~ { x: player.x, y: player.y, w: player.size, h: player.size }~ - Inside source: true *** True Line Result { x: player.x, y: player.y, w: player.size, h: player.size } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tiles~ - Inside source: true *** True Line Result def tiles ** Processing line: ~ state.tiles~ - Inside source: true *** True Line Result state.tiles ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def find_tile ordinal~ - Inside source: true *** True Line Result def find_tile ordinal ** Processing line: ~ tiles.find { |t| t.x == ordinal.x && t.y == ordinal.y }~ - Inside source: true *** True Line Result tiles.find { |t| t.x == ordinal.x && t.y == ordinal.y } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def find_tiles &block~ - Inside source: true *** True Line Result def find_tiles &block ** Processing line: ~ tiles.find_all(&block)~ - Inside source: true *** True Line Result tiles.find_all(&block) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def find_colliding_tile tiles, target~ - Inside source: true *** True Line Result def find_colliding_tile tiles, target ** Processing line: ~ tiles.find { |t| t.rect.intersect_rect? target }~ - Inside source: true *** True Line Result tiles.find { |t| t.rect.intersect_rect? target } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tile_neighbors tile, other_points~ - Inside source: true *** True Line Result def tile_neighbors tile, other_points ** Processing line: ~ t = find_tile x: tile.x + 0, y: tile.y + 1~ - Inside source: true *** True Line Result t = find_tile x: tile.x + 0, y: tile.y + 1 ** Processing line: ~ r = find_tile x: tile.x + 1, y: tile.y + 0~ - Inside source: true *** True Line Result r = find_tile x: tile.x + 1, y: tile.y + 0 ** Processing line: ~ b = find_tile x: tile.x + 0, y: tile.y - 1~ - Inside source: true *** True Line Result b = find_tile x: tile.x + 0, y: tile.y - 1 ** Processing line: ~ l = find_tile x: tile.x - 1, y: tile.y + 0~ - Inside source: true *** True Line Result l = find_tile x: tile.x - 1, y: tile.y + 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ tile_t, tile_r, tile_b, tile_l = 0~ - Inside source: true *** True Line Result tile_t, tile_r, tile_b, tile_l = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ tile_t = 1 if t~ - Inside source: true *** True Line Result tile_t = 1 if t ** Processing line: ~ tile_r = 1 if r~ - Inside source: true *** True Line Result tile_r = 1 if r ** Processing line: ~ tile_b = 1 if b~ - Inside source: true *** True Line Result tile_b = 1 if b ** Processing line: ~ tile_l = 1 if l~ - Inside source: true *** True Line Result tile_l = 1 if l ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.new_entity :neighbors, mask: [tile_t, tile_r, tile_b, tile_l],~ - Inside source: true *** True Line Result state.new_entity :neighbors, mask: [tile_t, tile_r, tile_b, tile_l], ** Processing line: ~ t: t ? :some : :none,~ - Inside source: true *** True Line Result t: t ? :some : :none, ** Processing line: ~ b: b ? :some : :none,~ - Inside source: true *** True Line Result b: b ? :some : :none, ** Processing line: ~ l: l ? :some : :none,~ - Inside source: true *** True Line Result l: l ? :some : :none, ** Processing line: ~ r: r ? :some : :none~ - Inside source: true *** True Line Result r: r ? :some : :none ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $game ||= Game.new~ - Inside source: true *** True Line Result $game ||= Game.new ** Processing line: ~ $game.args = args~ - Inside source: true *** True Line Result $game.args = args ** Processing line: ~ $game.tick~ - Inside source: true *** True Line Result $game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Jump Physics - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Jump Physics - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/07_jump_physics/app/main.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/07_jump_physics/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.state.new_entity: Used when we want to create a new object, like a sprite or button.~ - Inside source: true *** True Line Result - args.state.new_entity: Used when we want to create a new object, like a sprite or button. ** Processing line: ~ For example, if we want to create a new button, we would declare it as a new entity and~ - Inside source: true *** True Line Result For example, if we want to create a new button, we would declare it as a new entity and ** Processing line: ~ then define its properties. (Remember, you can use state to define ANY property and it will~ - Inside source: true *** True Line Result then define its properties. (Remember, you can use state to define ANY property and it will ** Processing line: ~ be retained across frames.)~ - Inside source: true *** True Line Result be retained across frames.) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.solids: An array. The values generate a solid.~ - Inside source: true *** True Line Result - args.outputs.solids: An array. The values generate a solid. ** Processing line: ~ The parameters for a solid are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE]~ - Inside source: true *** True Line Result The parameters for a solid are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE] ** Processing line: ~ For more information about solids, go to mygame/documentation/03-solids-and-borders.md.~ - Inside source: true *** True Line Result For more information about solids, go to mygame/documentation/03-solids-and-borders.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - num1.greater(num2): Returns the greater value.~ - Inside source: true *** True Line Result - num1.greater(num2): Returns the greater value. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - Hashes: Collection of unique keys and their corresponding values. The value can be found~ - Inside source: true *** True Line Result - Hashes: Collection of unique keys and their corresponding values. The value can be found ** Processing line: ~ using their keys.~ - Inside source: true *** True Line Result using their keys. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - ARRAY#inside_rect?: Returns true or false depending on if the point is inside the rect.~ - Inside source: true *** True Line Result - ARRAY#inside_rect?: Returns true or false depending on if the point is inside the rect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app is a game that requires the user to jump from one platform to the next.~ - Inside source: true *** True Line Result # This sample app is a game that requires the user to jump from one platform to the next. ** Processing line: ~ # As the player successfully clears platforms, they become smaller and move faster.~ - Inside source: true *** True Line Result # As the player successfully clears platforms, they become smaller and move faster. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class VerticalPlatformer~ - Inside source: true *** True Line Result class VerticalPlatformer ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # declares vertical platformer as new entity~ - Inside source: true *** True Line Result # declares vertical platformer as new entity ** Processing line: ~ def s~ - Inside source: true *** True Line Result def s ** Processing line: ~ state.vertical_platformer ||= state.new_entity(:vertical_platformer)~ - Inside source: true *** True Line Result state.vertical_platformer ||= state.new_entity(:vertical_platformer) ** Processing line: ~ state.vertical_platformer~ - Inside source: true *** True Line Result state.vertical_platformer ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # creates a new platform using a hash~ - Inside source: true *** True Line Result # creates a new platform using a hash ** Processing line: ~ def new_platform hash~ - Inside source: true *** True Line Result def new_platform hash ** Processing line: ~ s.new_entity_strict(:platform, hash) # platform key~ - Inside source: true *** True Line Result s.new_entity_strict(:platform, hash) # platform key ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # calls methods needed for game to run properly~ - Inside source: true *** True Line Result # calls methods needed for game to run properly ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def init_game~ - Inside source: true *** True Line Result def init_game ** Processing line: ~ s.platforms ||= [ # initializes platforms collection with two platforms using hashes~ - Inside source: true *** True Line Result s.platforms ||= [ # initializes platforms collection with two platforms using hashes ** Processing line: ~ new_platform(x: 0, y: 0, w: 700, h: 32, dx: 1, speed: 0, rect: nil),~ - Inside source: true *** True Line Result new_platform(x: 0, y: 0, w: 700, h: 32, dx: 1, speed: 0, rect: nil), ** Processing line: ~ new_platform(x: 0, y: 300, w: 700, h: 32, dx: 1, speed: 0, rect: nil), # 300 pixels higher~ - Inside source: true *** True Line Result new_platform(x: 0, y: 300, w: 700, h: 32, dx: 1, speed: 0, rect: nil), # 300 pixels higher ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ s.tick_count = args.state.tick_count~ - Inside source: true *** True Line Result s.tick_count = args.state.tick_count ** Processing line: ~ s.gravity = -0.3 # what goes up must come down because of gravity~ - Inside source: true *** True Line Result s.gravity = -0.3 # what goes up must come down because of gravity ** Processing line: ~ s.player.platforms_cleared ||= 0 # counts how many platforms the player has successfully cleared~ - Inside source: true *** True Line Result s.player.platforms_cleared ||= 0 # counts how many platforms the player has successfully cleared ** Processing line: ~ s.player.x ||= 0 # sets player values~ - Inside source: true *** True Line Result s.player.x ||= 0 # sets player values ** Processing line: ~ s.player.y ||= 100~ - Inside source: true *** True Line Result s.player.y ||= 100 ** Processing line: ~ s.player.w ||= 64~ - Inside source: true *** True Line Result s.player.w ||= 64 ** Processing line: ~ s.player.h ||= 64~ - Inside source: true *** True Line Result s.player.h ||= 64 ** Processing line: ~ s.player.dy ||= 0 # change in position~ - Inside source: true *** True Line Result s.player.dy ||= 0 # change in position ** Processing line: ~ s.player.dx ||= 0~ - Inside source: true *** True Line Result s.player.dx ||= 0 ** Processing line: ~ s.player_jump_power = 15~ - Inside source: true *** True Line Result s.player_jump_power = 15 ** Processing line: ~ s.player_jump_power_duration = 10~ - Inside source: true *** True Line Result s.player_jump_power_duration = 10 ** Processing line: ~ s.player_max_run_speed = 5~ - Inside source: true *** True Line Result s.player_max_run_speed = 5 ** Processing line: ~ s.player_speed_slowdown_rate = 0.9~ - Inside source: true *** True Line Result s.player_speed_slowdown_rate = 0.9 ** Processing line: ~ s.player_acceleration = 1~ - Inside source: true *** True Line Result s.player_acceleration = 1 ** Processing line: ~ s.camera ||= { y: -100 } # shows view on screen (as the player moves upward, the camera does too)~ - Inside source: true *** True Line Result s.camera ||= { y: -100 } # shows view on screen (as the player moves upward, the camera does too) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets default values~ - Inside source: true *** True Line Result # Sets default values ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ init_game~ - Inside source: true *** True Line Result init_game ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs objects onto the screen~ - Inside source: true *** True Line Result # Outputs objects onto the screen ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ outputs.solids << s.platforms.map do |p| # outputs platforms onto screen~ - Inside source: true *** True Line Result outputs.solids << s.platforms.map do |p| # outputs platforms onto screen ** Processing line: ~ [p.x + 300, p.y - s.camera[:y], p.w, p.h] # add 300 to place platform in horizontal center~ - Inside source: true *** True Line Result [p.x + 300, p.y - s.camera[:y], p.w, p.h] # add 300 to place platform in horizontal center ** Processing line: ~ # don't forget, position of platform is denoted by bottom left hand corner~ - Inside source: true *** True Line Result # don't forget, position of platform is denoted by bottom left hand corner ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # outputs player using hash~ - Inside source: true *** True Line Result # outputs player using hash ** Processing line: ~ outputs.solids << {~ - Inside source: true *** True Line Result outputs.solids << { ** Processing line: ~ x: s.player.x + 300, # player positioned on top of platform~ - Inside source: true *** True Line Result x: s.player.x + 300, # player positioned on top of platform ** Processing line: ~ y: s.player.y - s.camera[:y],~ - Inside source: true *** True Line Result y: s.player.y - s.camera[:y], ** Processing line: ~ w: s.player.w,~ - Inside source: true *** True Line Result w: s.player.w, ** Processing line: ~ h: s.player.h,~ - Inside source: true *** True Line Result h: s.player.h, ** Processing line: ~ r: 100, # color saturation~ - Inside source: true *** True Line Result r: 100, # color saturation ** Processing line: ~ g: 100,~ - Inside source: true *** True Line Result g: 100, ** Processing line: ~ b: 200~ - Inside source: true *** True Line Result b: 200 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Performs calculations~ - Inside source: true *** True Line Result # Performs calculations ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ s.platforms.each do |p| # for each platform in the collection~ - Inside source: true *** True Line Result s.platforms.each do |p| # for each platform in the collection ** Processing line: ~ p.rect = [p.x, p.y, p.w, p.h] # set the definition~ - Inside source: true *** True Line Result p.rect = [p.x, p.y, p.w, p.h] # set the definition ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # sets player point by adding half the player's width to the player's x~ - Inside source: true *** True Line Result # sets player point by adding half the player's width to the player's x ** Processing line: ~ s.player.point = [s.player.x + s.player.w.half, s.player.y] # change + to - and see what happens!~ - Inside source: true *** True Line Result s.player.point = [s.player.x + s.player.w.half, s.player.y] # change + to - and see what happens! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # search the platforms collection to find if the player's point is inside the rect of a platform~ - Inside source: true *** True Line Result # search the platforms collection to find if the player's point is inside the rect of a platform ** Processing line: ~ collision = s.platforms.find { |p| s.player.point.inside_rect? p.rect }~ - Inside source: true *** True Line Result collision = s.platforms.find { |p| s.player.point.inside_rect? p.rect } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if collision occurred and player is moving down (or not moving vertically at all)~ - Inside source: true *** True Line Result # if collision occurred and player is moving down (or not moving vertically at all) ** Processing line: ~ if collision && s.player.dy <= 0~ - Inside source: true *** True Line Result if collision && s.player.dy <= 0 ** Processing line: ~ s.player.y = collision.rect.y + collision.rect.h - 2 # player positioned on top of platform~ - Inside source: true *** True Line Result s.player.y = collision.rect.y + collision.rect.h - 2 # player positioned on top of platform ** Processing line: ~ s.player.dy = 0 if s.player.dy < 0 # player stops moving vertically~ - Inside source: true *** True Line Result s.player.dy = 0 if s.player.dy < 0 # player stops moving vertically ** Processing line: ~ if !s.player.platform~ - Inside source: true *** True Line Result if !s.player.platform ** Processing line: ~ s.player.dx = 0 # no horizontal movement~ - Inside source: true *** True Line Result s.player.dx = 0 # no horizontal movement ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ # changes horizontal position of player by multiplying collision change in x (dx) by speed and adding it to current x~ - Inside source: true *** True Line Result # changes horizontal position of player by multiplying collision change in x (dx) by speed and adding it to current x ** Processing line: ~ s.player.x += collision.dx * collision.speed~ - Inside source: true *** True Line Result s.player.x += collision.dx * collision.speed ** Processing line: ~ s.player.platform = collision # player is on the platform that it collided with (or landed on)~ - Inside source: true *** True Line Result s.player.platform = collision # player is on the platform that it collided with (or landed on) ** Processing line: ~ if s.player.falling # if player is falling~ - Inside source: true *** True Line Result if s.player.falling # if player is falling ** Processing line: ~ s.player.dx = 0 # no horizontal movement~ - Inside source: true *** True Line Result s.player.dx = 0 # no horizontal movement ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ s.player.falling = false~ - Inside source: true *** True Line Result s.player.falling = false ** Processing line: ~ s.player.jumped_at = nil~ - Inside source: true *** True Line Result s.player.jumped_at = nil ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ s.player.platform = nil # player is not on a platform~ - Inside source: true *** True Line Result s.player.platform = nil # player is not on a platform ** Processing line: ~ s.player.y += s.player.dy # velocity is the change in position~ - Inside source: true *** True Line Result s.player.y += s.player.dy # velocity is the change in position ** Processing line: ~ s.player.dy += s.gravity # acceleration is the change in velocity; what goes up must come down~ - Inside source: true *** True Line Result s.player.dy += s.gravity # acceleration is the change in velocity; what goes up must come down ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ s.platforms.each do |p| # for each platform in the collection~ - Inside source: true *** True Line Result s.platforms.each do |p| # for each platform in the collection ** Processing line: ~ p.x += p.dx * p.speed # x is incremented by product of dx and speed (causes platform to move horizontally)~ - Inside source: true *** True Line Result p.x += p.dx * p.speed # x is incremented by product of dx and speed (causes platform to move horizontally) ** Processing line: ~ # changes platform's x so it moves left and right across the screen (between -300 and 300 pixels)~ - Inside source: true *** True Line Result # changes platform's x so it moves left and right across the screen (between -300 and 300 pixels) ** Processing line: ~ if p.x < -300 # if platform goes too far left~ - Inside source: true *** True Line Result if p.x < -300 # if platform goes too far left ** Processing line: ~ p.dx *= -1 # dx is scaled down~ - Inside source: true *** True Line Result p.dx *= -1 # dx is scaled down ** Processing line: ~ p.x = -300 # as far left as possible within scope~ - Inside source: true *** True Line Result p.x = -300 # as far left as possible within scope ** Processing line: ~ elsif p.x > (1000 - p.w) # if platform's x is greater than 300~ - Inside source: true *** True Line Result elsif p.x > (1000 - p.w) # if platform's x is greater than 300 ** Processing line: ~ p.dx *= -1~ - Inside source: true *** True Line Result p.dx *= -1 ** Processing line: ~ p.x = (1000 - p.w) # set to 300 (as far right as possible within scope)~ - Inside source: true *** True Line Result p.x = (1000 - p.w) # set to 300 (as far right as possible within scope) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ delta = (s.player.y - s.camera[:y] - 100) # used to position camera view~ - Inside source: true *** True Line Result delta = (s.player.y - s.camera[:y] - 100) # used to position camera view ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if delta > -200~ - Inside source: true *** True Line Result if delta > -200 ** Processing line: ~ s.camera[:y] += delta * 0.01 # allows player to see view as they move upwards~ - Inside source: true *** True Line Result s.camera[:y] += delta * 0.01 # allows player to see view as they move upwards ** Processing line: ~ s.player.x += s.player.dx # velocity is change in position; change in x increases by dx~ - Inside source: true *** True Line Result s.player.x += s.player.dx # velocity is change in position; change in x increases by dx ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # searches platform collection to find platforms located more than 300 pixels above the player~ - Inside source: true *** True Line Result # searches platform collection to find platforms located more than 300 pixels above the player ** Processing line: ~ has_platforms = s.platforms.find { |p| p.y > (s.player.y + 300) }~ - Inside source: true *** True Line Result has_platforms = s.platforms.find { |p| p.y > (s.player.y + 300) } ** Processing line: ~ if !has_platforms # if there are no platforms 300 pixels above the player~ - Inside source: true *** True Line Result if !has_platforms # if there are no platforms 300 pixels above the player ** Processing line: ~ width = 700 - (700 * (0.1 * s.player.platforms_cleared)) # the next platform is smaller than previous~ - Inside source: true *** True Line Result width = 700 - (700 * (0.1 * s.player.platforms_cleared)) # the next platform is smaller than previous ** Processing line: ~ s.player.platforms_cleared += 1 # player successfully cleared another platform~ - Inside source: true *** True Line Result s.player.platforms_cleared += 1 # player successfully cleared another platform ** Processing line: ~ last_platform = s.platforms[-1] # platform just cleared becomes last platform~ - Inside source: true *** True Line Result last_platform = s.platforms[-1] # platform just cleared becomes last platform ** Processing line: ~ # another platform is created 300 pixels above the last platform, and this~ - Inside source: true *** True Line Result # another platform is created 300 pixels above the last platform, and this ** Processing line: ~ # new platform has a smaller width and moves faster than all previous platforms~ - Inside source: true *** True Line Result # new platform has a smaller width and moves faster than all previous platforms ** Processing line: ~ s.platforms << new_platform(x: (700 - width) * rand, # random x position~ - Inside source: true *** True Line Result s.platforms << new_platform(x: (700 - width) * rand, # random x position ** Processing line: ~ y: last_platform.y + 300,~ - Inside source: true *** True Line Result y: last_platform.y + 300, ** Processing line: ~ w: width,~ - Inside source: true *** True Line Result w: width, ** Processing line: ~ h: 32,~ - Inside source: true *** True Line Result h: 32, ** Processing line: ~ dx: 1.randomize(:sign), # random change in x~ - Inside source: true *** True Line Result dx: 1.randomize(:sign), # random change in x ** Processing line: ~ speed: 2 * s.player.platforms_cleared,~ - Inside source: true *** True Line Result speed: 2 * s.player.platforms_cleared, ** Processing line: ~ rect: nil)~ - Inside source: true *** True Line Result rect: nil) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ # game over~ - Inside source: true *** True Line Result # game over ** Processing line: ~ s.as_hash.clear # otherwise clear the hash (no new platform is necessary)~ - Inside source: true *** True Line Result s.as_hash.clear # otherwise clear the hash (no new platform is necessary) ** Processing line: ~ init_game~ - Inside source: true *** True Line Result init_game ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Takes input from the user to move the player~ - Inside source: true *** True Line Result # Takes input from the user to move the player ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ if inputs.keyboard.space # if the space bar is pressed~ - Inside source: true *** True Line Result if inputs.keyboard.space # if the space bar is pressed ** Processing line: ~ s.player.jumped_at ||= s.tick_count # set to current frame~ - Inside source: true *** True Line Result s.player.jumped_at ||= s.tick_count # set to current frame ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the time that has passed since the jump is less than the duration of a jump (10 frames)~ - Inside source: true *** True Line Result # if the time that has passed since the jump is less than the duration of a jump (10 frames) ** Processing line: ~ # and the player is not falling~ - Inside source: true *** True Line Result # and the player is not falling ** Processing line: ~ if s.player.jumped_at.elapsed_time < s.player_jump_power_duration && !s.player.falling~ - Inside source: true *** True Line Result if s.player.jumped_at.elapsed_time < s.player_jump_power_duration && !s.player.falling ** Processing line: ~ s.player.dy = s.player_jump_power # player jumps up~ - Inside source: true *** True Line Result s.player.dy = s.player_jump_power # player jumps up ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.key_up.space # if space bar is in "up" state~ - Inside source: true *** True Line Result if inputs.keyboard.key_up.space # if space bar is in "up" state ** Processing line: ~ s.player.falling = true # player is falling~ - Inside source: true *** True Line Result s.player.falling = true # player is falling ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.left # if left key is pressed~ - Inside source: true *** True Line Result if inputs.keyboard.left # if left key is pressed ** Processing line: ~ s.player.dx -= s.player_acceleration # player's position changes, decremented by acceleration~ - Inside source: true *** True Line Result s.player.dx -= s.player_acceleration # player's position changes, decremented by acceleration ** Processing line: ~ s.player.dx = s.player.dx.greater(-s.player_max_run_speed) # dx is either current dx or -5, whichever is greater~ - Inside source: true *** True Line Result s.player.dx = s.player.dx.greater(-s.player_max_run_speed) # dx is either current dx or -5, whichever is greater ** Processing line: ~ elsif inputs.keyboard.right # if right key is pressed~ - Inside source: true *** True Line Result elsif inputs.keyboard.right # if right key is pressed ** Processing line: ~ s.player.dx += s.player_acceleration # player's position changes, incremented by acceleration~ - Inside source: true *** True Line Result s.player.dx += s.player_acceleration # player's position changes, incremented by acceleration ** Processing line: ~ s.player.dx = s.player.dx.lesser(s.player_max_run_speed) # dx is either current dx or 5, whichever is lesser~ - Inside source: true *** True Line Result s.player.dx = s.player.dx.lesser(s.player_max_run_speed) # dx is either current dx or 5, whichever is lesser ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ s.player.dx *= s.player_speed_slowdown_rate # scales dx down~ - Inside source: true *** True Line Result s.player.dx *= s.player_speed_slowdown_rate # scales dx down ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $game = VerticalPlatformer.new~ - Inside source: true *** True Line Result $game = VerticalPlatformer.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $game.args = args~ - Inside source: true *** True Line Result $game.args = args ** Processing line: ~ $game.tick~ - Inside source: true *** True Line Result $game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Bouncing On Collision - ball.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Bouncing On Collision - ball.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/ball.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/ball.rb ** Processing line: ~ GRAVITY = -0.08~ - Inside source: true *** True Line Result GRAVITY = -0.08 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Ball~ - Inside source: true *** True Line Result class Ball ** Processing line: ~ attr_accessor :velocity, :center, :radius, :collision_enabled~ - Inside source: true *** True Line Result attr_accessor :velocity, :center, :radius, :collision_enabled ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize args~ - Inside source: true *** True Line Result def initialize args ** Processing line: ~ #Start the ball in the top center~ - Inside source: true *** True Line Result #Start the ball in the top center ** Processing line: ~ #@x = args.grid.w / 2~ - Inside source: true *** True Line Result #@x = args.grid.w / 2 ** Processing line: ~ #@y = args.grid.h - 20~ - Inside source: true *** True Line Result #@y = args.grid.h - 20 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @velocity = {x: 0, y: 0}~ - Inside source: true *** True Line Result @velocity = {x: 0, y: 0} ** Processing line: ~ #@width = 20~ - Inside source: true *** True Line Result #@width = 20 ** Processing line: ~ #@height = @width~ - Inside source: true *** True Line Result #@height = @width ** Processing line: ~ @radius = 20.0 / 2.0~ - Inside source: true *** True Line Result @radius = 20.0 / 2.0 ** Processing line: ~ @center = {x: (args.grid.w / 2), y: (args.grid.h)}~ - Inside source: true *** True Line Result @center = {x: (args.grid.w / 2), y: (args.grid.h)} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #@left_wall = (args.state.board_width + args.grid.w / 8)~ - Inside source: true *** True Line Result #@left_wall = (args.state.board_width + args.grid.w / 8) ** Processing line: ~ #@right_wall = @left_wall + args.state.board_width~ - Inside source: true *** True Line Result #@right_wall = @left_wall + args.state.board_width ** Processing line: ~ @left_wall = 0~ - Inside source: true *** True Line Result @left_wall = 0 ** Processing line: ~ @right_wall = $args.grid.right~ - Inside source: true *** True Line Result @right_wall = $args.grid.right ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @max_velocity = 7~ - Inside source: true *** True Line Result @max_velocity = 7 ** Processing line: ~ @collision_enabled = true~ - Inside source: true *** True Line Result @collision_enabled = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Move the ball according to its velocity~ - Inside source: true *** True Line Result #Move the ball according to its velocity ** Processing line: ~ def update args~ - Inside source: true *** True Line Result def update args ** Processing line: ~ @center.x += @velocity.x~ - Inside source: true *** True Line Result @center.x += @velocity.x ** Processing line: ~ @center.y += @velocity.y~ - Inside source: true *** True Line Result @center.y += @velocity.y ** Processing line: ~ @velocity.y += GRAVITY~ - Inside source: true *** True Line Result @velocity.y += GRAVITY ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ alpha = 0.2~ - Inside source: true *** True Line Result alpha = 0.2 ** Processing line: ~ if @center.y-@radius <= 0~ - Inside source: true *** True Line Result if @center.y-@radius <= 0 ** Processing line: ~ @velocity.y = (@velocity.y.abs*0.7).abs~ - Inside source: true *** True Line Result @velocity.y = (@velocity.y.abs*0.7).abs ** Processing line: ~ @velocity.x = (@velocity.x.abs*0.9).abs * ((@velocity.x < 0) ? -1 : 1)~ - Inside source: true *** True Line Result @velocity.x = (@velocity.x.abs*0.9).abs * ((@velocity.x < 0) ? -1 : 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @velocity.y.abs() < alpha~ - Inside source: true *** True Line Result if @velocity.y.abs() < alpha ** Processing line: ~ @velocity.y=0~ - Inside source: true *** True Line Result @velocity.y=0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if @velocity.x.abs() < alpha~ - Inside source: true *** True Line Result if @velocity.x.abs() < alpha ** Processing line: ~ @velocity.x=0~ - Inside source: true *** True Line Result @velocity.x=0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @center.x > args.grid.right+@radius*2~ - Inside source: true *** True Line Result if @center.x > args.grid.right+@radius*2 ** Processing line: ~ @center.x = 0-@radius~ - Inside source: true *** True Line Result @center.x = 0-@radius ** Processing line: ~ elsif @center.x< 0-@radius*2~ - Inside source: true *** True Line Result elsif @center.x< 0-@radius*2 ** Processing line: ~ @center.x = args.grid.right + @radius~ - Inside source: true *** True Line Result @center.x = args.grid.right + @radius ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def wallBounds args~ - Inside source: true *** True Line Result def wallBounds args ** Processing line: ~ #if @x < @left_wall || @x + @width > @right_wall~ - Inside source: true *** True Line Result #if @x < @left_wall || @x + @width > @right_wall ** Processing line: ~ #@velocity.x *= -1.1~ - Inside source: true *** True Line Result #@velocity.x *= -1.1 ** Processing line: ~ #if @velocity.x > @max_velocity~ - Inside source: true *** True Line Result #if @velocity.x > @max_velocity ** Processing line: ~ #@velocity.x = @max_velocity~ - Inside source: true *** True Line Result #@velocity.x = @max_velocity ** Processing line: ~ #elsif @velocity.x < @max_velocity * -1~ - Inside source: true *** True Line Result #elsif @velocity.x < @max_velocity * -1 ** Processing line: ~ #@velocity.x = @max_velocity * -1~ - Inside source: true *** True Line Result #@velocity.x = @max_velocity * -1 ** Processing line: ~ #end~ - Inside source: true *** True Line Result #end ** Processing line: ~ #end~ - Inside source: true *** True Line Result #end ** Processing line: ~ #if @y < 0 || @y + @height > args.grid.h~ - Inside source: true *** True Line Result #if @y < 0 || @y + @height > args.grid.h ** Processing line: ~ #@velocity.y *= -1.1~ - Inside source: true *** True Line Result #@velocity.y *= -1.1 ** Processing line: ~ #if @velocity.y > @max_velocity~ - Inside source: true *** True Line Result #if @velocity.y > @max_velocity ** Processing line: ~ #@velocity.y = @max_velocity~ - Inside source: true *** True Line Result #@velocity.y = @max_velocity ** Processing line: ~ #elsif @velocity.y < @max_velocity * -1~ - Inside source: true *** True Line Result #elsif @velocity.y < @max_velocity * -1 ** Processing line: ~ #@velocity.y = @max_velocity * -1~ - Inside source: true *** True Line Result #@velocity.y = @max_velocity * -1 ** Processing line: ~ #end~ - Inside source: true *** True Line Result #end ** Processing line: ~ #end~ - Inside source: true *** True Line Result #end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #render the ball to the screen~ - Inside source: true *** True Line Result #render the ball to the screen ** Processing line: ~ def draw args~ - Inside source: true *** True Line Result def draw args ** Processing line: ~ #args.outputs.solids << [@x, @y, @width, @height, 255, 255, 0];~ - Inside source: true *** True Line Result #args.outputs.solids << [@x, @y, @width, @height, 255, 255, 0]; ** Processing line: ~ args.outputs.sprites << [~ - Inside source: true *** True Line Result args.outputs.sprites << [ ** Processing line: ~ @center.x-@radius,~ - Inside source: true *** True Line Result @center.x-@radius, ** Processing line: ~ @center.y-@radius,~ - Inside source: true *** True Line Result @center.y-@radius, ** Processing line: ~ @radius*2,~ - Inside source: true *** True Line Result @radius*2, ** Processing line: ~ @radius*2,~ - Inside source: true *** True Line Result @radius*2, ** Processing line: ~ "sprites/circle-white.png",~ - Inside source: true *** True Line Result "sprites/circle-white.png", ** Processing line: ~ 0,~ - Inside source: true *** True Line Result 0, ** Processing line: ~ 255,~ - Inside source: true *** True Line Result 255, ** Processing line: ~ 255, #r~ - Inside source: true *** True Line Result 255, #r ** Processing line: ~ 0, #g~ - Inside source: true *** True Line Result 0, #g ** Processing line: ~ 255 #b~ - Inside source: true *** True Line Result 255 #b ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Bouncing On Collision - block.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Bouncing On Collision - block.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/block.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/block.rb ** Processing line: ~ DEGREES_TO_RADIANS = Math::PI / 180~ - Inside source: true *** True Line Result DEGREES_TO_RADIANS = Math::PI / 180 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Block~ - Inside source: true *** True Line Result class Block ** Processing line: ~ def initialize(x, y, block_size, rotation)~ - Inside source: true *** True Line Result def initialize(x, y, block_size, rotation) ** Processing line: ~ @x = x~ - Inside source: true *** True Line Result @x = x ** Processing line: ~ @y = y~ - Inside source: true *** True Line Result @y = y ** Processing line: ~ @block_size = block_size~ - Inside source: true *** True Line Result @block_size = block_size ** Processing line: ~ @rotation = rotation~ - Inside source: true *** True Line Result @rotation = rotation ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #The repel velocity?~ - Inside source: true *** True Line Result #The repel velocity? ** Processing line: ~ @velocity = {x: 2, y: 0}~ - Inside source: true *** True Line Result @velocity = {x: 2, y: 0} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ horizontal_offset = (3 * block_size) * Math.cos(rotation * DEGREES_TO_RADIANS)~ - Inside source: true *** True Line Result horizontal_offset = (3 * block_size) * Math.cos(rotation * DEGREES_TO_RADIANS) ** Processing line: ~ vertical_offset = block_size * Math.sin(rotation * DEGREES_TO_RADIANS)~ - Inside source: true *** True Line Result vertical_offset = block_size * Math.sin(rotation * DEGREES_TO_RADIANS) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if rotation >= 0~ - Inside source: true *** True Line Result if rotation >= 0 ** Processing line: ~ theta = 90 - rotation~ - Inside source: true *** True Line Result theta = 90 - rotation ** Processing line: ~ #The line doesn't visually line up exactly with the edge of the sprite, so artificially move it a bit~ - Inside source: true *** True Line Result #The line doesn't visually line up exactly with the edge of the sprite, so artificially move it a bit ** Processing line: ~ modifier = 5~ - Inside source: true *** True Line Result modifier = 5 ** Processing line: ~ x_offset = modifier * Math.cos(theta * DEGREES_TO_RADIANS)~ - Inside source: true *** True Line Result x_offset = modifier * Math.cos(theta * DEGREES_TO_RADIANS) ** Processing line: ~ y_offset = modifier * Math.sin(theta * DEGREES_TO_RADIANS)~ - Inside source: true *** True Line Result y_offset = modifier * Math.sin(theta * DEGREES_TO_RADIANS) ** Processing line: ~ @x1 = @x - x_offset~ - Inside source: true *** True Line Result @x1 = @x - x_offset ** Processing line: ~ @y1 = @y + y_offset~ - Inside source: true *** True Line Result @y1 = @y + y_offset ** Processing line: ~ @x2 = @x1 + horizontal_offset~ - Inside source: true *** True Line Result @x2 = @x1 + horizontal_offset ** Processing line: ~ @y2 = @y1 + (vertical_offset * 3)~ - Inside source: true *** True Line Result @y2 = @y1 + (vertical_offset * 3) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @imaginary_line = [ @x1, @y1, @x2, @y2 ]~ - Inside source: true *** True Line Result @imaginary_line = [ @x1, @y1, @x2, @y2 ] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ theta = 90 + rotation~ - Inside source: true *** True Line Result theta = 90 + rotation ** Processing line: ~ x_offset = @block_size * Math.cos(theta * DEGREES_TO_RADIANS)~ - Inside source: true *** True Line Result x_offset = @block_size * Math.cos(theta * DEGREES_TO_RADIANS) ** Processing line: ~ y_offset = @block_size * Math.sin(theta * DEGREES_TO_RADIANS)~ - Inside source: true *** True Line Result y_offset = @block_size * Math.sin(theta * DEGREES_TO_RADIANS) ** Processing line: ~ @x1 = @x + x_offset~ - Inside source: true *** True Line Result @x1 = @x + x_offset ** Processing line: ~ @y1 = @y + y_offset + 19~ - Inside source: true *** True Line Result @y1 = @y + y_offset + 19 ** Processing line: ~ @x2 = @x1 + horizontal_offset~ - Inside source: true *** True Line Result @x2 = @x1 + horizontal_offset ** Processing line: ~ @y2 = @y1 + (vertical_offset * 3)~ - Inside source: true *** True Line Result @y2 = @y1 + (vertical_offset * 3) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @imaginary_line = [ @x1, @y1, @x2, @y2 ]~ - Inside source: true *** True Line Result @imaginary_line = [ @x1, @y1, @x2, @y2 ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw args~ - Inside source: true *** True Line Result def draw args ** Processing line: ~ args.outputs.sprites << [~ - Inside source: true *** True Line Result args.outputs.sprites << [ ** Processing line: ~ @x,~ - Inside source: true *** True Line Result @x, ** Processing line: ~ @y,~ - Inside source: true *** True Line Result @y, ** Processing line: ~ @block_size*3,~ - Inside source: true *** True Line Result @block_size*3, ** Processing line: ~ @block_size,~ - Inside source: true *** True Line Result @block_size, ** Processing line: ~ "sprites/square-green.png",~ - Inside source: true *** True Line Result "sprites/square-green.png", ** Processing line: ~ @rotation~ - Inside source: true *** True Line Result @rotation ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.lines << @imaginary_line~ - Inside source: true *** True Line Result args.outputs.lines << @imaginary_line ** Processing line: ~ args.outputs.solids << @debug_shape~ - Inside source: true *** True Line Result args.outputs.solids << @debug_shape ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def multiply_matricies~ - Inside source: true *** True Line Result def multiply_matricies ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ if collision? args~ - Inside source: true *** True Line Result if collision? args ** Processing line: ~ collide args~ - Inside source: true *** True Line Result collide args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Determine if the ball and block are touching~ - Inside source: true *** True Line Result #Determine if the ball and block are touching ** Processing line: ~ def collision? args~ - Inside source: true *** True Line Result def collision? args ** Processing line: ~ #The minimum area enclosed by the center of the ball and the 2 corners of the block~ - Inside source: true *** True Line Result #The minimum area enclosed by the center of the ball and the 2 corners of the block ** Processing line: ~ #If the area ever drops below this value, we know there is a collision~ - Inside source: true *** True Line Result #If the area ever drops below this value, we know there is a collision ** Processing line: ~ min_area = ((@block_size * 3) * args.state.ball.radius) / 2~ - Inside source: true *** True Line Result min_area = ((@block_size * 3) * args.state.ball.radius) / 2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #https://www.mathopenref.com/coordtrianglearea.html~ - Inside source: true *** True Line Result #https://www.mathopenref.com/coordtrianglearea.html ** Processing line: ~ ax = @x1~ - Inside source: true *** True Line Result ax = @x1 ** Processing line: ~ ay = @y1~ - Inside source: true *** True Line Result ay = @y1 ** Processing line: ~ bx = @x2~ - Inside source: true *** True Line Result bx = @x2 ** Processing line: ~ by = @y2~ - Inside source: true *** True Line Result by = @y2 ** Processing line: ~ cx = args.state.ball.center.x~ - Inside source: true *** True Line Result cx = args.state.ball.center.x ** Processing line: ~ cy = args.state.ball.center.y~ - Inside source: true *** True Line Result cy = args.state.ball.center.y ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ current_area = (ax*(by-cy)+bx*(cy-ay)+cx*(ay-by))/2~ - Inside source: true *** True Line Result current_area = (ax*(by-cy)+bx*(cy-ay)+cx*(ay-by))/2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ collision = false~ - Inside source: true *** True Line Result collision = false ** Processing line: ~ if @rotation >= 0~ - Inside source: true *** True Line Result if @rotation >= 0 ** Processing line: ~ if (current_area < min_area &&~ - Inside source: true *** True Line Result if (current_area < min_area && ** Processing line: ~ current_area > 0 &&~ - Inside source: true *** True Line Result current_area > 0 && ** Processing line: ~ args.state.ball.center.y > @y1 &&~ - Inside source: true *** True Line Result args.state.ball.center.y > @y1 && ** Processing line: ~ args.state.ball.center.x < @x2)~ - Inside source: true *** True Line Result args.state.ball.center.x < @x2) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ collision = true~ - Inside source: true *** True Line Result collision = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ if (current_area < min_area &&~ - Inside source: true *** True Line Result if (current_area < min_area && ** Processing line: ~ current_area > 0 &&~ - Inside source: true *** True Line Result current_area > 0 && ** Processing line: ~ args.state.ball.center.y > @y2 &&~ - Inside source: true *** True Line Result args.state.ball.center.y > @y2 && ** Processing line: ~ args.state.ball.center.x > @x1)~ - Inside source: true *** True Line Result args.state.ball.center.x > @x1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ collision = true~ - Inside source: true *** True Line Result collision = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return collision~ - Inside source: true *** True Line Result return collision ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def collide args~ - Inside source: true *** True Line Result def collide args ** Processing line: ~ #Slope of the block~ - Inside source: true *** True Line Result #Slope of the block ** Processing line: ~ slope = (@y2 - @y1) / (@x2 - @x1)~ - Inside source: true *** True Line Result slope = (@y2 - @y1) / (@x2 - @x1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Create a unit vector and tilt it (@rotation) number of degrees~ - Inside source: true *** True Line Result #Create a unit vector and tilt it (@rotation) number of degrees ** Processing line: ~ x = -Math.cos(@rotation * DEGREES_TO_RADIANS)~ - Inside source: true *** True Line Result x = -Math.cos(@rotation * DEGREES_TO_RADIANS) ** Processing line: ~ y = Math.sin(@rotation * DEGREES_TO_RADIANS)~ - Inside source: true *** True Line Result y = Math.sin(@rotation * DEGREES_TO_RADIANS) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Find the vector that is perpendicular to the slope~ - Inside source: true *** True Line Result #Find the vector that is perpendicular to the slope ** Processing line: ~ perpVect = { x: x, y: y }~ - Inside source: true *** True Line Result perpVect = { x: x, y: y } ** Processing line: ~ mag = (perpVect.x**2 + perpVect.y**2)**0.5 # find the magniude of the perpVect~ - Inside source: true *** True Line Result mag = (perpVect.x**2 + perpVect.y**2)**0.5 # find the magniude of the perpVect ** Processing line: ~ perpVect = {x: perpVect.x/(mag), y: perpVect.y/(mag)} # divide the perpVect by the magniude to make it a unit vector~ - Inside source: true *** True Line Result perpVect = {x: perpVect.x/(mag), y: perpVect.y/(mag)} # divide the perpVect by the magniude to make it a unit vector ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ previousPosition = { # calculate an ESTIMATE of the previousPosition of the ball~ - Inside source: true *** True Line Result previousPosition = { # calculate an ESTIMATE of the previousPosition of the ball ** Processing line: ~ x:args.state.ball.center.x-args.state.ball.velocity.x,~ - Inside source: true *** True Line Result x:args.state.ball.center.x-args.state.ball.velocity.x, ** Processing line: ~ y:args.state.ball.center.y-args.state.ball.velocity.y~ - Inside source: true *** True Line Result y:args.state.ball.center.y-args.state.ball.velocity.y ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ velocityMag = (args.state.ball.velocity.x**2 + args.state.ball.velocity.y**2)**0.5 # the current velocity magnitude of the ball~ - Inside source: true *** True Line Result velocityMag = (args.state.ball.velocity.x**2 + args.state.ball.velocity.y**2)**0.5 # the current velocity magnitude of the ball ** Processing line: ~ theta_ball = Math.atan2(args.state.ball.velocity.y, args.state.ball.velocity.x) #the angle of the ball's velocity~ - Inside source: true *** True Line Result theta_ball = Math.atan2(args.state.ball.velocity.y, args.state.ball.velocity.x) #the angle of the ball's velocity ** Processing line: ~ theta_repel = (180 * DEGREES_TO_RADIANS) - theta_ball + (@rotation * DEGREES_TO_RADIANS)~ - Inside source: true *** True Line Result theta_repel = (180 * DEGREES_TO_RADIANS) - theta_ball + (@rotation * DEGREES_TO_RADIANS) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ fbx = velocityMag * Math.cos(theta_ball) #the x component of the ball's velocity~ - Inside source: true *** True Line Result fbx = velocityMag * Math.cos(theta_ball) #the x component of the ball's velocity ** Processing line: ~ fby = velocityMag * Math.sin(theta_ball) #the y component of the ball's velocity~ - Inside source: true *** True Line Result fby = velocityMag * Math.sin(theta_ball) #the y component of the ball's velocity ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ frx = velocityMag * Math.cos(theta_repel) #the x component of the repel's velocity | magnitude is set to twice of fbx~ - Inside source: true *** True Line Result frx = velocityMag * Math.cos(theta_repel) #the x component of the repel's velocity | magnitude is set to twice of fbx ** Processing line: ~ fry = velocityMag * Math.sin(theta_repel) #the y component of the repel's velocity | magnitude is set to twice of fby~ - Inside source: true *** True Line Result fry = velocityMag * Math.sin(theta_repel) #the y component of the repel's velocity | magnitude is set to twice of fby ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.display_value = velocityMag~ - Inside source: true *** True Line Result args.state.display_value = velocityMag ** Processing line: ~ fsumx = fbx+frx #sum of x forces~ - Inside source: true *** True Line Result fsumx = fbx+frx #sum of x forces ** Processing line: ~ fsumy = fby+fry #sum of y forces~ - Inside source: true *** True Line Result fsumy = fby+fry #sum of y forces ** Processing line: ~ fr = velocityMag #fr is the resulting magnitude~ - Inside source: true *** True Line Result fr = velocityMag #fr is the resulting magnitude ** Processing line: ~ thetaNew = Math.atan2(fsumy, fsumx) #thetaNew is the resulting angle~ - Inside source: true *** True Line Result thetaNew = Math.atan2(fsumy, fsumx) #thetaNew is the resulting angle ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ xnew = fr*Math.cos(thetaNew) #resulting x velocity~ - Inside source: true *** True Line Result xnew = fr*Math.cos(thetaNew) #resulting x velocity ** Processing line: ~ ynew = fr*Math.sin(thetaNew) #resulting y velocity~ - Inside source: true *** True Line Result ynew = fr*Math.sin(thetaNew) #resulting y velocity ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ dampener = 0.3~ - Inside source: true *** True Line Result dampener = 0.3 ** Processing line: ~ ynew *= dampener * 0.5~ - Inside source: true *** True Line Result ynew *= dampener * 0.5 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #If the bounce is very low, that means the ball is rolling and we don't want to dampenen the X velocity~ - Inside source: true *** True Line Result #If the bounce is very low, that means the ball is rolling and we don't want to dampenen the X velocity ** Processing line: ~ if ynew > -0.1~ - Inside source: true *** True Line Result if ynew > -0.1 ** Processing line: ~ xnew *= dampener~ - Inside source: true *** True Line Result xnew *= dampener ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Add the sine component of gravity back in (X component)~ - Inside source: true *** True Line Result #Add the sine component of gravity back in (X component) ** Processing line: ~ gravity_x = 4 * Math.sin(@rotation * DEGREES_TO_RADIANS)~ - Inside source: true *** True Line Result gravity_x = 4 * Math.sin(@rotation * DEGREES_TO_RADIANS) ** Processing line: ~ xnew += gravity_x~ - Inside source: true *** True Line Result xnew += gravity_x ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.ball.velocity.x = -xnew~ - Inside source: true *** True Line Result args.state.ball.velocity.x = -xnew ** Processing line: ~ args.state.ball.velocity.y = -ynew~ - Inside source: true *** True Line Result args.state.ball.velocity.y = -ynew ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Set the position of the ball to the previous position so it doesn't warp throught the block~ - Inside source: true *** True Line Result #Set the position of the ball to the previous position so it doesn't warp throught the block ** Processing line: ~ args.state.ball.center.x = previousPosition.x~ - Inside source: true *** True Line Result args.state.ball.center.x = previousPosition.x ** Processing line: ~ args.state.ball.center.y = previousPosition.y~ - Inside source: true *** True Line Result args.state.ball.center.y = previousPosition.y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Bouncing On Collision - cannon.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Bouncing On Collision - cannon.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/cannon.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/cannon.rb ** Processing line: ~ class Cannon~ - Inside source: true *** True Line Result class Cannon ** Processing line: ~ def initialize args~ - Inside source: true *** True Line Result def initialize args ** Processing line: ~ @pointA = {x: args.grid.right/2,y: args.grid.top}~ - Inside source: true *** True Line Result @pointA = {x: args.grid.right/2,y: args.grid.top} ** Processing line: ~ @pointB = {x: args.inputs.mouse.x, y: args.inputs.mouse.y}~ - Inside source: true *** True Line Result @pointB = {x: args.inputs.mouse.x, y: args.inputs.mouse.y} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ def update args~ - Inside source: true *** True Line Result def update args ** Processing line: ~ activeBall = args.state.ball~ - Inside source: true *** True Line Result activeBall = args.state.ball ** Processing line: ~ @pointB = {x: args.inputs.mouse.x, y: args.inputs.mouse.y}~ - Inside source: true *** True Line Result @pointB = {x: args.inputs.mouse.x, y: args.inputs.mouse.y} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.mouse.click~ - Inside source: true *** True Line Result if args.inputs.mouse.click ** Processing line: ~ alpha = 0.01~ - Inside source: true *** True Line Result alpha = 0.01 ** Processing line: ~ activeBall.velocity.y = (@pointB.y - @pointA.y) * alpha~ - Inside source: true *** True Line Result activeBall.velocity.y = (@pointB.y - @pointA.y) * alpha ** Processing line: ~ activeBall.velocity.x = (@pointB.x - @pointA.x) * alpha~ - Inside source: true *** True Line Result activeBall.velocity.x = (@pointB.x - @pointA.x) * alpha ** Processing line: ~ activeBall.center = {x: (args.grid.w / 2), y: (args.grid.h)}~ - Inside source: true *** True Line Result activeBall.center = {x: (args.grid.w / 2), y: (args.grid.h)} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ args.outputs.lines << [@pointA.x, @pointA.y, @pointB.x, @pointB.y]~ - Inside source: true *** True Line Result args.outputs.lines << [@pointA.x, @pointA.y, @pointB.x, @pointB.y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Bouncing On Collision - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Bouncing On Collision - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/main.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/main.rb ** Processing line: ~ INFINITY= 10**10~ - Inside source: true *** True Line Result INFINITY= 10**10 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ require 'app/vector2d.rb'~ - Inside source: true *** True Line Result require 'app/vector2d.rb' ** Processing line: ~ require 'app/peg.rb'~ - Inside source: true *** True Line Result require 'app/peg.rb' ** Processing line: ~ require 'app/block.rb'~ - Inside source: true *** True Line Result require 'app/block.rb' ** Processing line: ~ require 'app/ball.rb'~ - Inside source: true *** True Line Result require 'app/ball.rb' ** Processing line: ~ require 'app/cannon.rb'~ - Inside source: true *** True Line Result require 'app/cannon.rb' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Method to init default values~ - Inside source: true *** True Line Result #Method to init default values ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ args.state.pegs ||= []~ - Inside source: true *** True Line Result args.state.pegs ||= [] ** Processing line: ~ args.state.blocks ||= []~ - Inside source: true *** True Line Result args.state.blocks ||= [] ** Processing line: ~ args.state.cannon ||= Cannon.new args~ - Inside source: true *** True Line Result args.state.cannon ||= Cannon.new args ** Processing line: ~ args.state.ball ||= Ball.new args~ - Inside source: true *** True Line Result args.state.ball ||= Ball.new args ** Processing line: ~ args.state.horizontal_offset ||= 0~ - Inside source: true *** True Line Result args.state.horizontal_offset ||= 0 ** Processing line: ~ init_pegs args~ - Inside source: true *** True Line Result init_pegs args ** Processing line: ~ init_blocks args~ - Inside source: true *** True Line Result init_blocks args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.display_value ||= "test"~ - Inside source: true *** True Line Result args.state.display_value ||= "test" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :default_methods~ - Inside source: true *** True Line Result begin :default_methods ** Processing line: ~ def init_pegs args~ - Inside source: true *** True Line Result def init_pegs args ** Processing line: ~ num_horizontal_pegs = 14~ - Inside source: true *** True Line Result num_horizontal_pegs = 14 ** Processing line: ~ num_rows = 5~ - Inside source: true *** True Line Result num_rows = 5 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless args.state.pegs.count < num_rows * num_horizontal_pegs~ - Inside source: true *** True Line Result return unless args.state.pegs.count < num_rows * num_horizontal_pegs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ block_size = 32~ - Inside source: true *** True Line Result block_size = 32 ** Processing line: ~ block_spacing = 50~ - Inside source: true *** True Line Result block_spacing = 50 ** Processing line: ~ total_width = num_horizontal_pegs * (block_size + block_spacing)~ - Inside source: true *** True Line Result total_width = num_horizontal_pegs * (block_size + block_spacing) ** Processing line: ~ starting_offset = (args.grid.w - total_width) / 2 + block_size~ - Inside source: true *** True Line Result starting_offset = (args.grid.w - total_width) / 2 + block_size ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ for i in (0...num_rows)~ - Inside source: true *** True Line Result for i in (0...num_rows) ** Processing line: ~ for j in (0...num_horizontal_pegs)~ - Inside source: true *** True Line Result for j in (0...num_horizontal_pegs) ** Processing line: ~ row_offset = 0~ - Inside source: true *** True Line Result row_offset = 0 ** Processing line: ~ if i % 2 == 0~ - Inside source: true *** True Line Result if i % 2 == 0 ** Processing line: ~ row_offset = 20~ - Inside source: true *** True Line Result row_offset = 20 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ row_offset = -20~ - Inside source: true *** True Line Result row_offset = -20 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.pegs.append(Peg.new(j * (block_size+block_spacing) + starting_offset + row_offset, (args.grid.h - block_size * 2) - (i * block_size * 2)-90, block_size))~ - Inside source: true *** True Line Result args.state.pegs.append(Peg.new(j * (block_size+block_spacing) + starting_offset + row_offset, (args.grid.h - block_size * 2) - (i * block_size * 2)-90, block_size)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def init_blocks args~ - Inside source: true *** True Line Result def init_blocks args ** Processing line: ~ return unless args.state.blocks.count < 10~ - Inside source: true *** True Line Result return unless args.state.blocks.count < 10 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Sprites are rotated in degrees, but the Ruby math functions work on radians~ - Inside source: true *** True Line Result #Sprites are rotated in degrees, but the Ruby math functions work on radians ** Processing line: ~ radians_to_degrees = Math::PI / 180~ - Inside source: true *** True Line Result radians_to_degrees = Math::PI / 180 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ block_size = 25~ - Inside source: true *** True Line Result block_size = 25 ** Processing line: ~ #Rotation angle (in degrees) of the blocks~ - Inside source: true *** True Line Result #Rotation angle (in degrees) of the blocks ** Processing line: ~ rotation = 30~ - Inside source: true *** True Line Result rotation = 30 ** Processing line: ~ vertical_offset = block_size * Math.sin(rotation * radians_to_degrees)~ - Inside source: true *** True Line Result vertical_offset = block_size * Math.sin(rotation * radians_to_degrees) ** Processing line: ~ horizontal_offset = (3 * block_size) * Math.cos(rotation * radians_to_degrees)~ - Inside source: true *** True Line Result horizontal_offset = (3 * block_size) * Math.cos(rotation * radians_to_degrees) ** Processing line: ~ center = args.grid.w / 2~ - Inside source: true *** True Line Result center = args.grid.w / 2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ for i in (0...5)~ - Inside source: true *** True Line Result for i in (0...5) ** Processing line: ~ #Create a ramp of blocks. Not going to be perfect because of the float to integer conversion and anisotropic to isotropic coversion~ - Inside source: true *** True Line Result #Create a ramp of blocks. Not going to be perfect because of the float to integer conversion and anisotropic to isotropic coversion ** Processing line: ~ args.state.blocks.append(Block.new((center + 100 + (i * horizontal_offset)).to_i, 100 + (vertical_offset * i) + (i * block_size), block_size, rotation))~ - Inside source: true *** True Line Result args.state.blocks.append(Block.new((center + 100 + (i * horizontal_offset)).to_i, 100 + (vertical_offset * i) + (i * block_size), block_size, rotation)) ** Processing line: ~ args.state.blocks.append(Block.new((center - 100 - (i * horizontal_offset)).to_i, 100 + (vertical_offset * i) + (i * block_size), block_size, -rotation))~ - Inside source: true *** True Line Result args.state.blocks.append(Block.new((center - 100 - (i * horizontal_offset)).to_i, 100 + (vertical_offset * i) + (i * block_size), block_size, -rotation)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Render loop~ - Inside source: true *** True Line Result #Render loop ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ args.outputs.borders << args.state.game_area~ - Inside source: true *** True Line Result args.outputs.borders << args.state.game_area ** Processing line: ~ render_pegs args~ - Inside source: true *** True Line Result render_pegs args ** Processing line: ~ render_blocks args~ - Inside source: true *** True Line Result render_blocks args ** Processing line: ~ args.state.cannon.render args~ - Inside source: true *** True Line Result args.state.cannon.render args ** Processing line: ~ args.state.ball.draw args~ - Inside source: true *** True Line Result args.state.ball.draw args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :render_methods~ - Inside source: true *** True Line Result begin :render_methods ** Processing line: ~ #Draw the pegs in a grid pattern~ - Inside source: true *** True Line Result #Draw the pegs in a grid pattern ** Processing line: ~ def render_pegs args~ - Inside source: true *** True Line Result def render_pegs args ** Processing line: ~ args.state.pegs.each do |peg|~ - Inside source: true *** True Line Result args.state.pegs.each do |peg| ** Processing line: ~ peg.draw args~ - Inside source: true *** True Line Result peg.draw args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_blocks args~ - Inside source: true *** True Line Result def render_blocks args ** Processing line: ~ args.state.blocks.each do |block|~ - Inside source: true *** True Line Result args.state.blocks.each do |block| ** Processing line: ~ block.draw args~ - Inside source: true *** True Line Result block.draw args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Calls all methods necessary for performing calculations~ - Inside source: true *** True Line Result #Calls all methods necessary for performing calculations ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ args.state.pegs.each do |peg|~ - Inside source: true *** True Line Result args.state.pegs.each do |peg| ** Processing line: ~ peg.calc args~ - Inside source: true *** True Line Result peg.calc args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.blocks.each do |block|~ - Inside source: true *** True Line Result args.state.blocks.each do |block| ** Processing line: ~ block.calc args~ - Inside source: true *** True Line Result block.calc args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.ball.update args~ - Inside source: true *** True Line Result args.state.ball.update args ** Processing line: ~ args.state.cannon.update args~ - Inside source: true *** True Line Result args.state.cannon.update args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :calc_methods~ - Inside source: true *** True Line Result begin :calc_methods ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Bouncing On Collision - peg.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Bouncing On Collision - peg.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/peg.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/peg.rb ** Processing line: ~ class Peg~ - Inside source: true *** True Line Result class Peg ** Processing line: ~ def initialize(x, y, block_size)~ - Inside source: true *** True Line Result def initialize(x, y, block_size) ** Processing line: ~ @x = x # x cordinate of the LEFT side of the peg~ - Inside source: true *** True Line Result @x = x # x cordinate of the LEFT side of the peg ** Processing line: ~ @y = y # y cordinate of the RIGHT side of the peg~ - Inside source: true *** True Line Result @y = y # y cordinate of the RIGHT side of the peg ** Processing line: ~ @block_size = block_size # diameter of the peg~ - Inside source: true *** True Line Result @block_size = block_size # diameter of the peg ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @radius = @block_size/2.0 # radius of the peg~ - Inside source: true *** True Line Result @radius = @block_size/2.0 # radius of the peg ** Processing line: ~ @center = { # cordinatees of the CENTER of the peg~ - Inside source: true *** True Line Result @center = { # cordinatees of the CENTER of the peg ** Processing line: ~ x: @x+@block_size/2.0,~ - Inside source: true *** True Line Result x: @x+@block_size/2.0, ** Processing line: ~ y: @y+@block_size/2.0~ - Inside source: true *** True Line Result y: @y+@block_size/2.0 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @r = 255 # color of the peg~ - Inside source: true *** True Line Result @r = 255 # color of the peg ** Processing line: ~ @g = 0~ - Inside source: true *** True Line Result @g = 0 ** Processing line: ~ @b = 0~ - Inside source: true *** True Line Result @b = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @velocity = {x: 2, y: 0}~ - Inside source: true *** True Line Result @velocity = {x: 2, y: 0} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw args~ - Inside source: true *** True Line Result def draw args ** Processing line: ~ args.outputs.sprites << [ # draw the peg according to the @x, @y, @radius, and the RGB~ - Inside source: true *** True Line Result args.outputs.sprites << [ # draw the peg according to the @x, @y, @radius, and the RGB ** Processing line: ~ @x,~ - Inside source: true *** True Line Result @x, ** Processing line: ~ @y,~ - Inside source: true *** True Line Result @y, ** Processing line: ~ @radius*2.0,~ - Inside source: true *** True Line Result @radius*2.0, ** Processing line: ~ @radius*2.0,~ - Inside source: true *** True Line Result @radius*2.0, ** Processing line: ~ "sprites/circle-white.png",~ - Inside source: true *** True Line Result "sprites/circle-white.png", ** Processing line: ~ 0,~ - Inside source: true *** True Line Result 0, ** Processing line: ~ 255,~ - Inside source: true *** True Line Result 255, ** Processing line: ~ @r, #r~ - Inside source: true *** True Line Result @r, #r ** Processing line: ~ @g, #g~ - Inside source: true *** True Line Result @g, #g ** Processing line: ~ @b #b~ - Inside source: true *** True Line Result @b #b ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ if collisionWithBounce? args # if the is a collision with the bouncing ball~ - Inside source: true *** True Line Result if collisionWithBounce? args # if the is a collision with the bouncing ball ** Processing line: ~ collide args~ - Inside source: true *** True Line Result collide args ** Processing line: ~ @r = 0~ - Inside source: true *** True Line Result @r = 0 ** Processing line: ~ @b = 0~ - Inside source: true *** True Line Result @b = 0 ** Processing line: ~ @g = 255~ - Inside source: true *** True Line Result @g = 255 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # do two circles (the ball and this peg) intersect~ - Inside source: true *** True Line Result # do two circles (the ball and this peg) intersect ** Processing line: ~ def collisionWithBounce? args~ - Inside source: true *** True Line Result def collisionWithBounce? args ** Processing line: ~ squareDistance = ( # the squared distance between the ball's center and this peg's center~ - Inside source: true *** True Line Result squareDistance = ( # the squared distance between the ball's center and this peg's center ** Processing line: ~ (args.state.ball.center.x - @center.x) ** 2.0 +~ - Inside source: true *** True Line Result (args.state.ball.center.x - @center.x) ** 2.0 + ** Processing line: ~ (args.state.ball.center.y - @center.y) ** 2.0~ - Inside source: true *** True Line Result (args.state.ball.center.y - @center.y) ** 2.0 ** Processing line: ~ )~ - Inside source: true *** True Line Result ) ** Processing line: ~ radiusSum = ( # the sum of the radius squared of the this peg and the ball~ - Inside source: true *** True Line Result radiusSum = ( # the sum of the radius squared of the this peg and the ball ** Processing line: ~ (args.state.ball.radius + @radius) ** 2.0~ - Inside source: true *** True Line Result (args.state.ball.radius + @radius) ** 2.0 ** Processing line: ~ )~ - Inside source: true *** True Line Result ) ** Processing line: ~ # if the squareDistance is less or equal to radiusSum, then there is a radial intersection between the ball and this peg~ - Inside source: true *** True Line Result # if the squareDistance is less or equal to radiusSum, then there is a radial intersection between the ball and this peg ** Processing line: ~ return (squareDistance <= radiusSum)~ - Inside source: true *** True Line Result return (squareDistance <= radiusSum) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ! The following links explain the getRepelMagnitude function !~ - Inside source: true *** True Line Result # ! The following links explain the getRepelMagnitude function ! ** Processing line: ~ # https://raw.githubusercontent.com/DragonRuby/dragonruby-game-toolkit-physics/master/docs/docImages/LinearCollider_4.png~ - Inside source: true *** True Line Result # https://raw.githubusercontent.com/DragonRuby/dragonruby-game-toolkit-physics/master/docs/docImages/LinearCollider_4.png ** Processing line: ~ # https://raw.githubusercontent.com/DragonRuby/dragonruby-game-toolkit-physics/master/docs/docImages/LinearCollider_5.png~ - Inside source: true *** True Line Result # https://raw.githubusercontent.com/DragonRuby/dragonruby-game-toolkit-physics/master/docs/docImages/LinearCollider_5.png ** Processing line: ~ # https://github.com/DragonRuby/dragonruby-game-toolkit-physics/blob/master/docs/LinearCollider.md~ - Inside source: true *** True Line Result # https://github.com/DragonRuby/dragonruby-game-toolkit-physics/blob/master/docs/LinearCollider.md ** Processing line: ~ def getRepelMagnitude (args, fbx, fby, vrx, vry, ballMag)~ - Inside source: true *** True Line Result def getRepelMagnitude (args, fbx, fby, vrx, vry, ballMag) ** Processing line: ~ a = fbx ; b = vrx ; c = fby~ - Inside source: true *** True Line Result a = fbx ; b = vrx ; c = fby ** Processing line: ~ d = vry ; e = ballMag~ - Inside source: true *** True Line Result d = vry ; e = ballMag ** Processing line: ~ if b**2 + d**2 == 0~ - Inside source: true *** True Line Result if b**2 + d**2 == 0 ** Processing line: ~ #unexpected~ - Inside source: true *** True Line Result #unexpected ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ x1 = (-a*b+-c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 + d**2 - a**2 * d**2)**0.5)/(b**2 + d**2)~ - Inside source: true *** True Line Result x1 = (-a*b+-c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 + d**2 - a**2 * d**2)**0.5)/(b**2 + d**2) ** Processing line: ~ x2 = -((a*b + c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 * d**2 - a**2 * d**2)**0.5)/(b**2 + d**2))~ - Inside source: true *** True Line Result x2 = -((a*b + c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 * d**2 - a**2 * d**2)**0.5)/(b**2 + d**2)) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ err = 0.00001~ - Inside source: true *** True Line Result err = 0.00001 ** Processing line: ~ o = ((fbx + x1*vrx)**2 + (fby + x1*vry)**2 ) ** 0.5~ - Inside source: true *** True Line Result o = ((fbx + x1*vrx)**2 + (fby + x1*vry)**2 ) ** 0.5 ** Processing line: ~ p = ((fbx + x2*vrx)**2 + (fby + x2*vry)**2 ) ** 0.5~ - Inside source: true *** True Line Result p = ((fbx + x2*vrx)**2 + (fby + x2*vry)**2 ) ** 0.5 ** Processing line: ~ r = 0~ - Inside source: true *** True Line Result r = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (ballMag >= o-err and ballMag <= o+err)~ - Inside source: true *** True Line Result if (ballMag >= o-err and ballMag <= o+err) ** Processing line: ~ r = x1~ - Inside source: true *** True Line Result r = x1 ** Processing line: ~ elsif (ballMag >= p-err and ballMag <= p+err)~ - Inside source: true *** True Line Result elsif (ballMag >= p-err and ballMag <= p+err) ** Processing line: ~ r = x2~ - Inside source: true *** True Line Result r = x2 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ #unexpected~ - Inside source: true *** True Line Result #unexpected ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (args.state.ball.center.x > @center.x)~ - Inside source: true *** True Line Result if (args.state.ball.center.x > @center.x) ** Processing line: ~ return x2*-1~ - Inside source: true *** True Line Result return x2*-1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return x2~ - Inside source: true *** True Line Result return x2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #return r~ - Inside source: true *** True Line Result #return r ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #this sets the new velocity of the ball once it has collided with this peg~ - Inside source: true *** True Line Result #this sets the new velocity of the ball once it has collided with this peg ** Processing line: ~ def collide args~ - Inside source: true *** True Line Result def collide args ** Processing line: ~ normalOfRCCollision = [ #this is the normal of the collision in COMPONENT FORM~ - Inside source: true *** True Line Result normalOfRCCollision = [ #this is the normal of the collision in COMPONENT FORM ** Processing line: ~ {x: @center.x, y: @center.y}, #see https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.mathscard.co.uk%2Fonline%2Fcircle-coordinate-geometry%2F&psig=AOvVaw2GcD-e2-nJR_IUKpw3hO98&ust=1605731315521000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCMjBo7e1iu0CFQAAAAAdAAAAABAD~ - Inside source: true *** True Line Result {x: @center.x, y: @center.y}, #see https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.mathscard.co.uk%2Fonline%2Fcircle-coordinate-geometry%2F&psig=AOvVaw2GcD-e2-nJR_IUKpw3hO98&ust=1605731315521000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCMjBo7e1iu0CFQAAAAAdAAAAABAD ** Processing line: ~ {x: args.state.ball.center.x, y: args.state.ball.center.y},~ - Inside source: true *** True Line Result {x: args.state.ball.center.x, y: args.state.ball.center.y}, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ normalSlope = ( #normalSlope is the slope of normalOfRCCollision~ - Inside source: true *** True Line Result normalSlope = ( #normalSlope is the slope of normalOfRCCollision ** Processing line: ~ (normalOfRCCollision[1].y - normalOfRCCollision[0].y) /~ - Inside source: true *** True Line Result (normalOfRCCollision[1].y - normalOfRCCollision[0].y) / ** Processing line: ~ (normalOfRCCollision[1].x - normalOfRCCollision[0].x)~ - Inside source: true *** True Line Result (normalOfRCCollision[1].x - normalOfRCCollision[0].x) ** Processing line: ~ )~ - Inside source: true *** True Line Result ) ** Processing line: ~ slope = normalSlope**-1.0 * -1 # slope is the slope of the tangent~ - Inside source: true *** True Line Result slope = normalSlope**-1.0 * -1 # slope is the slope of the tangent ** Processing line: ~ # args.state.display_value = slope~ - Inside source: true *** True Line Result # args.state.display_value = slope ** Processing line: ~ pointA = { # pointA and pointB are using the var slope to tangent in COMPONENT FORM~ - Inside source: true *** True Line Result pointA = { # pointA and pointB are using the var slope to tangent in COMPONENT FORM ** Processing line: ~ x: args.state.ball.center.x-1,~ - Inside source: true *** True Line Result x: args.state.ball.center.x-1, ** Processing line: ~ y: -(slope-args.state.ball.center.y)~ - Inside source: true *** True Line Result y: -(slope-args.state.ball.center.y) ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ pointB = {~ - Inside source: true *** True Line Result pointB = { ** Processing line: ~ x: args.state.ball.center.x+1,~ - Inside source: true *** True Line Result x: args.state.ball.center.x+1, ** Processing line: ~ y: slope+args.state.ball.center.y~ - Inside source: true *** True Line Result y: slope+args.state.ball.center.y ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ perpVect = {x: pointB.x - pointA.x, y:pointB.y - pointA.y} # perpVect is to be VECTOR of the perpendicular tangent~ - Inside source: true *** True Line Result perpVect = {x: pointB.x - pointA.x, y:pointB.y - pointA.y} # perpVect is to be VECTOR of the perpendicular tangent ** Processing line: ~ mag = (perpVect.x**2 + perpVect.y**2)**0.5 # find the magniude of the perpVect~ - Inside source: true *** True Line Result mag = (perpVect.x**2 + perpVect.y**2)**0.5 # find the magniude of the perpVect ** Processing line: ~ perpVect = {x: perpVect.x/(mag), y: perpVect.y/(mag)} # divide the perpVect by the magniude to make it a unit vector~ - Inside source: true *** True Line Result perpVect = {x: perpVect.x/(mag), y: perpVect.y/(mag)} # divide the perpVect by the magniude to make it a unit vector ** Processing line: ~ perpVect = {x: -perpVect.y, y: perpVect.x} # swap the x and y and multiply by -1 to make the vector perpendicular~ - Inside source: true *** True Line Result perpVect = {x: -perpVect.y, y: perpVect.x} # swap the x and y and multiply by -1 to make the vector perpendicular ** Processing line: ~ args.state.display_value = perpVect~ - Inside source: true *** True Line Result args.state.display_value = perpVect ** Processing line: ~ if perpVect.y > 0 #ensure perpVect points upward~ - Inside source: true *** True Line Result if perpVect.y > 0 #ensure perpVect points upward ** Processing line: ~ perpVect = {x: perpVect.x*-1, y: perpVect.y*-1}~ - Inside source: true *** True Line Result perpVect = {x: perpVect.x*-1, y: perpVect.y*-1} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ previousPosition = { # calculate an ESTIMATE of the previousPosition of the ball~ - Inside source: true *** True Line Result previousPosition = { # calculate an ESTIMATE of the previousPosition of the ball ** Processing line: ~ x:args.state.ball.center.x-args.state.ball.velocity.x,~ - Inside source: true *** True Line Result x:args.state.ball.center.x-args.state.ball.velocity.x, ** Processing line: ~ y:args.state.ball.center.y-args.state.ball.velocity.y~ - Inside source: true *** True Line Result y:args.state.ball.center.y-args.state.ball.velocity.y ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ yInterc = pointA.y + -slope*pointA.x~ - Inside source: true *** True Line Result yInterc = pointA.y + -slope*pointA.x ** Processing line: ~ if slope == INFINITY # the perpVect presently either points in the correct dirrection or it is 180 degrees off we need to correct this~ - Inside source: true *** True Line Result if slope == INFINITY # the perpVect presently either points in the correct dirrection or it is 180 degrees off we need to correct this ** Processing line: ~ if previousPosition.x < pointA.x~ - Inside source: true *** True Line Result if previousPosition.x < pointA.x ** Processing line: ~ perpVect = {x: perpVect.x*-1, y: perpVect.y*-1}~ - Inside source: true *** True Line Result perpVect = {x: perpVect.x*-1, y: perpVect.y*-1} ** Processing line: ~ yInterc = -INFINITY~ - Inside source: true *** True Line Result yInterc = -INFINITY ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif previousPosition.y < slope*previousPosition.x + yInterc # check if ball is bellow or above the collider to determine if perpVect is - or +~ - Inside source: true *** True Line Result elsif previousPosition.y < slope*previousPosition.x + yInterc # check if ball is bellow or above the collider to determine if perpVect is - or + ** Processing line: ~ perpVect = {x: perpVect.x*-1, y: perpVect.y*-1}~ - Inside source: true *** True Line Result perpVect = {x: perpVect.x*-1, y: perpVect.y*-1} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ velocityMag = # the current velocity magnitude of the ball~ - Inside source: true *** True Line Result velocityMag = # the current velocity magnitude of the ball ** Processing line: ~ (args.state.ball.velocity.x**2 + args.state.ball.velocity.y**2)**0.5~ - Inside source: true *** True Line Result (args.state.ball.velocity.x**2 + args.state.ball.velocity.y**2)**0.5 ** Processing line: ~ theta_ball=~ - Inside source: true *** True Line Result theta_ball= ** Processing line: ~ Math.atan2(args.state.ball.velocity.y,args.state.ball.velocity.x) #the angle of the ball's velocity~ - Inside source: true *** True Line Result Math.atan2(args.state.ball.velocity.y,args.state.ball.velocity.x) #the angle of the ball's velocity ** Processing line: ~ theta_repel=~ - Inside source: true *** True Line Result theta_repel= ** Processing line: ~ Math.atan2(args.state.ball.center.y,args.state.ball.center.x) #the angle of the repelling force(perpVect)~ - Inside source: true *** True Line Result Math.atan2(args.state.ball.center.y,args.state.ball.center.x) #the angle of the repelling force(perpVect) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ fbx = velocityMag * Math.cos(theta_ball) #the x component of the ball's velocity~ - Inside source: true *** True Line Result fbx = velocityMag * Math.cos(theta_ball) #the x component of the ball's velocity ** Processing line: ~ fby = velocityMag * Math.sin(theta_ball) #the y component of the ball's velocity~ - Inside source: true *** True Line Result fby = velocityMag * Math.sin(theta_ball) #the y component of the ball's velocity ** Processing line: ~ repelMag = getRepelMagnitude( # the magniude of the collision vector~ - Inside source: true *** True Line Result repelMag = getRepelMagnitude( # the magniude of the collision vector ** Processing line: ~ args,~ - Inside source: true *** True Line Result args, ** Processing line: ~ fbx,~ - Inside source: true *** True Line Result fbx, ** Processing line: ~ fby,~ - Inside source: true *** True Line Result fby, ** Processing line: ~ perpVect.x,~ - Inside source: true *** True Line Result perpVect.x, ** Processing line: ~ perpVect.y,~ - Inside source: true *** True Line Result perpVect.y, ** Processing line: ~ (args.state.ball.velocity.x**2 + args.state.ball.velocity.y**2)**0.5~ - Inside source: true *** True Line Result (args.state.ball.velocity.x**2 + args.state.ball.velocity.y**2)**0.5 ** Processing line: ~ )~ - Inside source: true *** True Line Result ) ** Processing line: ~ frx = repelMag* Math.cos(theta_repel) #the x component of the repel's velocity | magnitude is set to twice of fbx~ - Inside source: true *** True Line Result frx = repelMag* Math.cos(theta_repel) #the x component of the repel's velocity | magnitude is set to twice of fbx ** Processing line: ~ fry = repelMag* Math.sin(theta_repel) #the y component of the repel's velocity | magnitude is set to twice of fby~ - Inside source: true *** True Line Result fry = repelMag* Math.sin(theta_repel) #the y component of the repel's velocity | magnitude is set to twice of fby ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ fsumx = fbx+frx # sum of x forces~ - Inside source: true *** True Line Result fsumx = fbx+frx # sum of x forces ** Processing line: ~ fsumy = fby+fry # sum of y forces~ - Inside source: true *** True Line Result fsumy = fby+fry # sum of y forces ** Processing line: ~ fr = velocityMag # fr is the resulting magnitude~ - Inside source: true *** True Line Result fr = velocityMag # fr is the resulting magnitude ** Processing line: ~ thetaNew = Math.atan2(fsumy, fsumx) # thetaNew is the resulting angle~ - Inside source: true *** True Line Result thetaNew = Math.atan2(fsumy, fsumx) # thetaNew is the resulting angle ** Processing line: ~ xnew = fr*Math.cos(thetaNew) # resulting x velocity~ - Inside source: true *** True Line Result xnew = fr*Math.cos(thetaNew) # resulting x velocity ** Processing line: ~ ynew = fr*Math.sin(thetaNew) # resulting y velocity~ - Inside source: true *** True Line Result ynew = fr*Math.sin(thetaNew) # resulting y velocity ** Processing line: ~ if (args.state.ball.center.x >= @center.x) # this is necessary for the ball colliding on the right side of the peg~ - Inside source: true *** True Line Result if (args.state.ball.center.x >= @center.x) # this is necessary for the ball colliding on the right side of the peg ** Processing line: ~ xnew=xnew.abs~ - Inside source: true *** True Line Result xnew=xnew.abs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.ball.velocity.x = xnew # set the x-velocity to the new velocity~ - Inside source: true *** True Line Result args.state.ball.velocity.x = xnew # set the x-velocity to the new velocity ** Processing line: ~ if args.state.ball.center.y > @center.y # if the ball is above the middle of the peg we need to temporarily ignore some of the gravity~ - Inside source: true *** True Line Result if args.state.ball.center.y > @center.y # if the ball is above the middle of the peg we need to temporarily ignore some of the gravity ** Processing line: ~ args.state.ball.velocity.y = ynew + GRAVITY * 0.01~ - Inside source: true *** True Line Result args.state.ball.velocity.y = ynew + GRAVITY * 0.01 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.ball.velocity.y = ynew - GRAVITY * 0.01 # if the ball is bellow the middle of the peg we need to temporarily increase the power of the gravity~ - Inside source: true *** True Line Result args.state.ball.velocity.y = ynew - GRAVITY * 0.01 # if the ball is bellow the middle of the peg we need to temporarily increase the power of the gravity ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.ball.center.x+= args.state.ball.velocity.x # update the position of the ball so it never looks like the ball is intersecting the circle~ - Inside source: true *** True Line Result args.state.ball.center.x+= args.state.ball.velocity.x # update the position of the ball so it never looks like the ball is intersecting the circle ** Processing line: ~ args.state.ball.center.y+= args.state.ball.velocity.y~ - Inside source: true *** True Line Result args.state.ball.center.y+= args.state.ball.velocity.y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Bouncing On Collision - vector2d.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Bouncing On Collision - vector2d.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/vector2d.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/vector2d.rb ** Processing line: ~ class Vector2d~ - Inside source: true *** True Line Result class Vector2d ** Processing line: ~ attr_accessor :x, :y~ - Inside source: true *** True Line Result attr_accessor :x, :y ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize x=0, y=0~ - Inside source: true *** True Line Result def initialize x=0, y=0 ** Processing line: ~ @x=x~ - Inside source: true *** True Line Result @x=x ** Processing line: ~ @y=y~ - Inside source: true *** True Line Result @y=y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #returns a vector multiplied by scalar x~ - Inside source: true *** True Line Result #returns a vector multiplied by scalar x ** Processing line: ~ #x [float] scalar~ - Inside source: true *** True Line Result #x [float] scalar ** Processing line: ~ def mult x~ - Inside source: true *** True Line Result def mult x ** Processing line: ~ r = Vector2d.new(0,0)~ - Inside source: true *** True Line Result r = Vector2d.new(0,0) ** Processing line: ~ r.x=@x*x~ - Inside source: true *** True Line Result r.x=@x*x ** Processing line: ~ r.y=@y*x~ - Inside source: true *** True Line Result r.y=@y*x ** Processing line: ~ r~ - Inside source: true *** True Line Result r ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # vect [Vector2d] vector to copy~ - Inside source: true *** True Line Result # vect [Vector2d] vector to copy ** Processing line: ~ def copy vect~ - Inside source: true *** True Line Result def copy vect ** Processing line: ~ Vector2d.new(@x, @y)~ - Inside source: true *** True Line Result Vector2d.new(@x, @y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #returns a new vector equivalent to this+vect~ - Inside source: true *** True Line Result #returns a new vector equivalent to this+vect ** Processing line: ~ #vect [Vector2d] vector to add to self~ - Inside source: true *** True Line Result #vect [Vector2d] vector to add to self ** Processing line: ~ def add vect~ - Inside source: true *** True Line Result def add vect ** Processing line: ~ Vector2d.new(@x+vect.x,@y+vect.y)~ - Inside source: true *** True Line Result Vector2d.new(@x+vect.x,@y+vect.y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #returns a new vector equivalent to this-vect~ - Inside source: true *** True Line Result #returns a new vector equivalent to this-vect ** Processing line: ~ #vect [Vector2d] vector to subtract to self~ - Inside source: true *** True Line Result #vect [Vector2d] vector to subtract to self ** Processing line: ~ def sub vect~ - Inside source: true *** True Line Result def sub vect ** Processing line: ~ Vector2d.new(@x-vect.c, @y-vect.y)~ - Inside source: true *** True Line Result Vector2d.new(@x-vect.c, @y-vect.y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #return the magnitude of the vector~ - Inside source: true *** True Line Result #return the magnitude of the vector ** Processing line: ~ def mag~ - Inside source: true *** True Line Result def mag ** Processing line: ~ ((@x**2)+(@y**2))**0.5~ - Inside source: true *** True Line Result ((@x**2)+(@y**2))**0.5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #returns a new normalize version of the vector~ - Inside source: true *** True Line Result #returns a new normalize version of the vector ** Processing line: ~ def normalize~ - Inside source: true *** True Line Result def normalize ** Processing line: ~ Vector2d.new(@x/mag, @y/mag)~ - Inside source: true *** True Line Result Vector2d.new(@x/mag, @y/mag) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #TODO delet?~ - Inside source: true *** True Line Result #TODO delet? ** Processing line: ~ def distABS vect~ - Inside source: true *** True Line Result def distABS vect ** Processing line: ~ (((vect.x-@x)**2+(vect.y-@y)**2)**0.5).abs()~ - Inside source: true *** True Line Result (((vect.x-@x)**2+(vect.y-@y)**2)**0.5).abs() ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Arbitrary Collision - ball.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Arbitrary Collision - ball.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/ball.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/ball.rb ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Ball~ - Inside source: true *** True Line Result class Ball ** Processing line: ~ attr_accessor :velocity, :child, :parent, :number, :leastChain~ - Inside source: true *** True Line Result attr_accessor :velocity, :child, :parent, :number, :leastChain ** Processing line: ~ attr_reader :x, :y, :hypotenuse, :width, :height~ - Inside source: true *** True Line Result attr_reader :x, :y, :hypotenuse, :width, :height ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize args, number, leastChain, parent, child~ - Inside source: true *** True Line Result def initialize args, number, leastChain, parent, child ** Processing line: ~ #Start the ball in the top center~ - Inside source: true *** True Line Result #Start the ball in the top center ** Processing line: ~ @number = number~ - Inside source: true *** True Line Result @number = number ** Processing line: ~ @leastChain = leastChain~ - Inside source: true *** True Line Result @leastChain = leastChain ** Processing line: ~ @x = args.grid.w / 2~ - Inside source: true *** True Line Result @x = args.grid.w / 2 ** Processing line: ~ @y = args.grid.h - 20~ - Inside source: true *** True Line Result @y = args.grid.h - 20 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @velocity = Vector2d.new(2, -2)~ - Inside source: true *** True Line Result @velocity = Vector2d.new(2, -2) ** Processing line: ~ @width = 10~ - Inside source: true *** True Line Result @width = 10 ** Processing line: ~ @height = 10~ - Inside source: true *** True Line Result @height = 10 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @left_wall = (args.state.board_width + args.grid.w / 8)~ - Inside source: true *** True Line Result @left_wall = (args.state.board_width + args.grid.w / 8) ** Processing line: ~ @right_wall = @left_wall + args.state.board_width~ - Inside source: true *** True Line Result @right_wall = @left_wall + args.state.board_width ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @max_velocity = MAX_VELOCITY~ - Inside source: true *** True Line Result @max_velocity = MAX_VELOCITY ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @child = child~ - Inside source: true *** True Line Result @child = child ** Processing line: ~ @parent = parent~ - Inside source: true *** True Line Result @parent = parent ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @past = [{x: @x, y: @y}]~ - Inside source: true *** True Line Result @past = [{x: @x, y: @y}] ** Processing line: ~ @next = nil~ - Inside source: true *** True Line Result @next = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reassignLeastChain (lc=nil)~ - Inside source: true *** True Line Result def reassignLeastChain (lc=nil) ** Processing line: ~ if (lc == nil)~ - Inside source: true *** True Line Result if (lc == nil) ** Processing line: ~ lc = @number~ - Inside source: true *** True Line Result lc = @number ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ @leastChain = lc~ - Inside source: true *** True Line Result @leastChain = lc ** Processing line: ~ if (parent != nil)~ - Inside source: true *** True Line Result if (parent != nil) ** Processing line: ~ @parent.reassignLeastChain(lc)~ - Inside source: true *** True Line Result @parent.reassignLeastChain(lc) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def makeLeader args~ - Inside source: true *** True Line Result def makeLeader args ** Processing line: ~ if isLeader~ - Inside source: true *** True Line Result if isLeader ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ @parent.reassignLeastChain~ - Inside source: true *** True Line Result @parent.reassignLeastChain ** Processing line: ~ args.state.ballParents.push(self)~ - Inside source: true *** True Line Result args.state.ballParents.push(self) ** Processing line: ~ @parent = nil~ - Inside source: true *** True Line Result @parent = nil ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def isLeader~ - Inside source: true *** True Line Result def isLeader ** Processing line: ~ return (parent == nil)~ - Inside source: true *** True Line Result return (parent == nil) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def receiveNext (p)~ - Inside source: true *** True Line Result def receiveNext (p) ** Processing line: ~ #trace!~ - Inside source: true *** True Line Result #trace! ** Processing line: ~ if parent != nil~ - Inside source: true *** True Line Result if parent != nil ** Processing line: ~ @x = p[:x]~ - Inside source: true *** True Line Result @x = p[:x] ** Processing line: ~ @y = p[:y]~ - Inside source: true *** True Line Result @y = p[:y] ** Processing line: ~ @velocity = p[:velocity]~ - Inside source: true *** True Line Result @velocity = p[:velocity] ** Processing line: ~ #puts @x.to_s + "|" + @y.to_s + "|"+@velocity.to_s~ - Inside source: true *** True Line Result #puts @x.to_s + "|" + @y.to_s + "|"+@velocity.to_s ** Processing line: ~ @past.append(p)~ - Inside source: true *** True Line Result @past.append(p) ** Processing line: ~ if (@past.length >= BALL_DISTANCE)~ - Inside source: true *** True Line Result if (@past.length >= BALL_DISTANCE) ** Processing line: ~ if (@child != nil)~ - Inside source: true *** True Line Result if (@child != nil) ** Processing line: ~ @child.receiveNext(@past[0])~ - Inside source: true *** True Line Result @child.receiveNext(@past[0]) ** Processing line: ~ @past.shift~ - Inside source: true *** True Line Result @past.shift ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Move the ball according to its velocity~ - Inside source: true *** True Line Result #Move the ball according to its velocity ** Processing line: ~ def update args~ - Inside source: true *** True Line Result def update args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if isLeader~ - Inside source: true *** True Line Result if isLeader ** Processing line: ~ wallBounds args~ - Inside source: true *** True Line Result wallBounds args ** Processing line: ~ @x += @velocity.x~ - Inside source: true *** True Line Result @x += @velocity.x ** Processing line: ~ @y += @velocity.y~ - Inside source: true *** True Line Result @y += @velocity.y ** Processing line: ~ @past.append({x: @x, y: @y, velocity: @velocity})~ - Inside source: true *** True Line Result @past.append({x: @x, y: @y, velocity: @velocity}) ** Processing line: ~ #puts @past~ - Inside source: true *** True Line Result #puts @past ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (@past.length >= BALL_DISTANCE)~ - Inside source: true *** True Line Result if (@past.length >= BALL_DISTANCE) ** Processing line: ~ if (@child != nil)~ - Inside source: true *** True Line Result if (@child != nil) ** Processing line: ~ @child.receiveNext(@past[0])~ - Inside source: true *** True Line Result @child.receiveNext(@past[0]) ** Processing line: ~ @past.shift~ - Inside source: true *** True Line Result @past.shift ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ puts "unexpected"~ - Inside source: true *** True Line Result puts "unexpected" ** Processing line: ~ raise "unexpected"~ - Inside source: true *** True Line Result raise "unexpected" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def wallBounds args~ - Inside source: true *** True Line Result def wallBounds args ** Processing line: ~ b= false~ - Inside source: true *** True Line Result b= false ** Processing line: ~ if @x < @left_wall~ - Inside source: true *** True Line Result if @x < @left_wall ** Processing line: ~ @velocity.x = @velocity.x.abs() * 1~ - Inside source: true *** True Line Result @velocity.x = @velocity.x.abs() * 1 ** Processing line: ~ b=true~ - Inside source: true *** True Line Result b=true ** Processing line: ~ elsif @x + @width > @right_wall~ - Inside source: true *** True Line Result elsif @x + @width > @right_wall ** Processing line: ~ @velocity.x = @velocity.x.abs() * -1~ - Inside source: true *** True Line Result @velocity.x = @velocity.x.abs() * -1 ** Processing line: ~ b=true~ - Inside source: true *** True Line Result b=true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if @y < 0~ - Inside source: true *** True Line Result if @y < 0 ** Processing line: ~ @velocity.y = @velocity.y.abs() * 1~ - Inside source: true *** True Line Result @velocity.y = @velocity.y.abs() * 1 ** Processing line: ~ b=true~ - Inside source: true *** True Line Result b=true ** Processing line: ~ elsif @y + @height > args.grid.h~ - Inside source: true *** True Line Result elsif @y + @height > args.grid.h ** Processing line: ~ @velocity.y = @velocity.y.abs() * -1~ - Inside source: true *** True Line Result @velocity.y = @velocity.y.abs() * -1 ** Processing line: ~ b=true~ - Inside source: true *** True Line Result b=true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ mag = (@velocity.x**2.0 + @velocity.y**2.0)**0.5~ - Inside source: true *** True Line Result mag = (@velocity.x**2.0 + @velocity.y**2.0)**0.5 ** Processing line: ~ if (b == true && mag < MAX_VELOCITY)~ - Inside source: true *** True Line Result if (b == true && mag < MAX_VELOCITY) ** Processing line: ~ @velocity.x*=1.1;~ - Inside source: true *** True Line Result @velocity.x*=1.1; ** Processing line: ~ @velocity.y*=1.1;~ - Inside source: true *** True Line Result @velocity.y*=1.1; ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #render the ball to the screen~ - Inside source: true *** True Line Result #render the ball to the screen ** Processing line: ~ def draw args~ - Inside source: true *** True Line Result def draw args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #update args~ - Inside source: true *** True Line Result #update args ** Processing line: ~ #args.outputs.solids << [@x, @y, @width, @height, 255, 255, 0];~ - Inside source: true *** True Line Result #args.outputs.solids << [@x, @y, @width, @height, 255, 255, 0]; ** Processing line: ~ #args.outputs.sprits << {~ - Inside source: true *** True Line Result #args.outputs.sprits << { ** Processing line: ~ #x: @x,~ - Inside source: true *** True Line Result #x: @x, ** Processing line: ~ #y: @y,~ - Inside source: true *** True Line Result #y: @y, ** Processing line: ~ #w: @width,~ - Inside source: true *** True Line Result #w: @width, ** Processing line: ~ #h: @height,~ - Inside source: true *** True Line Result #h: @height, ** Processing line: ~ #path: "sprites/ball10.png"~ - Inside source: true *** True Line Result #path: "sprites/ball10.png" ** Processing line: ~ #}~ - Inside source: true *** True Line Result #} ** Processing line: ~ #args.outputs.sprites <<[@x, @y, @width, @height, "sprites/ball10.png"]~ - Inside source: true *** True Line Result #args.outputs.sprites <<[@x, @y, @width, @height, "sprites/ball10.png"] ** Processing line: ~ args.outputs.sprites << {x: @x, y: @y, w: @width, h: @height, path:"sprites/ball10.png" }~ - Inside source: true *** True Line Result args.outputs.sprites << {x: @x, y: @y, w: @width, h: @height, path:"sprites/ball10.png" } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def getDraw args~ - Inside source: true *** True Line Result def getDraw args ** Processing line: ~ #wallBounds args~ - Inside source: true *** True Line Result #wallBounds args ** Processing line: ~ #update args~ - Inside source: true *** True Line Result #update args ** Processing line: ~ #args.outputs.labels << [@x, @y, @number.to_s + "|" + @leastChain.to_s]~ - Inside source: true *** True Line Result #args.outputs.labels << [@x, @y, @number.to_s + "|" + @leastChain.to_s] ** Processing line: ~ return [@x, @y, @width, @height, "sprites/ball10.png"]~ - Inside source: true *** True Line Result return [@x, @y, @width, @height, "sprites/ball10.png"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def getPoints args~ - Inside source: true *** True Line Result def getPoints args ** Processing line: ~ points = [~ - Inside source: true *** True Line Result points = [ ** Processing line: ~ {x:@x+@width/2, y: @y},~ - Inside source: true *** True Line Result {x:@x+@width/2, y: @y}, ** Processing line: ~ {x:@x+@width, y:@y+@height/2},~ - Inside source: true *** True Line Result {x:@x+@width, y:@y+@height/2}, ** Processing line: ~ {x:@x+@width/2,y:@y+@height},~ - Inside source: true *** True Line Result {x:@x+@width/2,y:@y+@height}, ** Processing line: ~ {x:@x,y:@y+@height/2}~ - Inside source: true *** True Line Result {x:@x,y:@y+@height/2} ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ #psize = 5.0~ - Inside source: true *** True Line Result #psize = 5.0 ** Processing line: ~ #for p in points~ - Inside source: true *** True Line Result #for p in points ** Processing line: ~ #args.outputs.solids << [p.x-psize/2.0, p.y-psize/2.0, psize, psize, 0, 0, 0];~ - Inside source: true *** True Line Result #args.outputs.solids << [p.x-psize/2.0, p.y-psize/2.0, psize, psize, 0, 0, 0]; ** Processing line: ~ #end~ - Inside source: true *** True Line Result #end ** Processing line: ~ return points~ - Inside source: true *** True Line Result return points ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {x: @x, y:@y}~ - Inside source: true *** True Line Result {x: @x, y:@y} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inspect~ - Inside source: true *** True Line Result def inspect ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Arbitrary Collision - blocks.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Arbitrary Collision - blocks.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/blocks.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/blocks.rb ** Processing line: ~ MAX_COUNT=100~ - Inside source: true *** True Line Result MAX_COUNT=100 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def universalUpdateOne args, shape~ - Inside source: true *** True Line Result def universalUpdateOne args, shape ** Processing line: ~ didHit = false~ - Inside source: true *** True Line Result didHit = false ** Processing line: ~ hitters = []~ - Inside source: true *** True Line Result hitters = [] ** Processing line: ~ #puts shape.to_s~ - Inside source: true *** True Line Result #puts shape.to_s ** Processing line: ~ toCollide = nil~ - Inside source: true *** True Line Result toCollide = nil ** Processing line: ~ for b in args.state.balls~ - Inside source: true *** True Line Result for b in args.state.balls ** Processing line: ~ if [b.x, b.y, b.width, b.height].intersect_rect?(shape.bold)~ - Inside source: true *** True Line Result if [b.x, b.y, b.width, b.height].intersect_rect?(shape.bold) ** Processing line: ~ didSquare = false~ - Inside source: true *** True Line Result didSquare = false ** Processing line: ~ for s in shape.squareColliders~ - Inside source: true *** True Line Result for s in shape.squareColliders ** Processing line: ~ if (s.collision?(args, b))~ - Inside source: true *** True Line Result if (s.collision?(args, b)) ** Processing line: ~ didSquare = true~ - Inside source: true *** True Line Result didSquare = true ** Processing line: ~ didHit = true~ - Inside source: true *** True Line Result didHit = true ** Processing line: ~ #s.collide(args, b)~ - Inside source: true *** True Line Result #s.collide(args, b) ** Processing line: ~ toCollide = s~ - Inside source: true *** True Line Result toCollide = s ** Processing line: ~ #hitter = b~ - Inside source: true *** True Line Result #hitter = b ** Processing line: ~ hitters.append(b)~ - Inside source: true *** True Line Result hitters.append(b) ** Processing line: ~ end #end if~ - Inside source: true *** True Line Result end #end if ** Processing line: ~ end #end for~ - Inside source: true *** True Line Result end #end for ** Processing line: ~ if (didSquare == false)~ - Inside source: true *** True Line Result if (didSquare == false) ** Processing line: ~ for c in shape.colliders~ - Inside source: true *** True Line Result for c in shape.colliders ** Processing line: ~ #puts args.state.ball.velocity~ - Inside source: true *** True Line Result #puts args.state.ball.velocity ** Processing line: ~ if c.collision?(args, b.getPoints(args),b)~ - Inside source: true *** True Line Result if c.collision?(args, b.getPoints(args),b) ** Processing line: ~ #c.collide args, b~ - Inside source: true *** True Line Result #c.collide args, b ** Processing line: ~ toCollide = c~ - Inside source: true *** True Line Result toCollide = c ** Processing line: ~ didHit = true~ - Inside source: true *** True Line Result didHit = true ** Processing line: ~ hitters.append(b)~ - Inside source: true *** True Line Result hitters.append(b) ** Processing line: ~ end #end if~ - Inside source: true *** True Line Result end #end if ** Processing line: ~ end #end for~ - Inside source: true *** True Line Result end #end for ** Processing line: ~ end #end if~ - Inside source: true *** True Line Result end #end if ** Processing line: ~ end#end if~ - Inside source: true *** True Line Result end#end if ** Processing line: ~ end#end for~ - Inside source: true *** True Line Result end#end for ** Processing line: ~ if (didHit)~ - Inside source: true *** True Line Result if (didHit) ** Processing line: ~ shape.count=0~ - Inside source: true *** True Line Result shape.count=0 ** Processing line: ~ hitters = hitters.uniq~ - Inside source: true *** True Line Result hitters = hitters.uniq ** Processing line: ~ for hitter in hitters~ - Inside source: true *** True Line Result for hitter in hitters ** Processing line: ~ hitter.makeLeader args~ - Inside source: true *** True Line Result hitter.makeLeader args ** Processing line: ~ #toCollide.collide(args, hitter)~ - Inside source: true *** True Line Result #toCollide.collide(args, hitter) ** Processing line: ~ if shape.home == "squares"~ - Inside source: true *** True Line Result if shape.home == "squares" ** Processing line: ~ args.state.squares.delete(shape)~ - Inside source: true *** True Line Result args.state.squares.delete(shape) ** Processing line: ~ elsif shape.home == "tshapes"~ - Inside source: true *** True Line Result elsif shape.home == "tshapes" ** Processing line: ~ args.state.tshapes.delete(shape)~ - Inside source: true *** True Line Result args.state.tshapes.delete(shape) ** Processing line: ~ else shape.home == "lines"~ - Inside source: true *** True Line Result else shape.home == "lines" ** Processing line: ~ args.state.lines.delete(shape)~ - Inside source: true *** True Line Result args.state.lines.delete(shape) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #puts "HIT!" + hitter.number~ - Inside source: true *** True Line Result #puts "HIT!" + hitter.number ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def universalUpdate args, shape~ - Inside source: true *** True Line Result def universalUpdate args, shape ** Processing line: ~ #puts shape.home~ - Inside source: true *** True Line Result #puts shape.home ** Processing line: ~ if (shape.count <= 1)~ - Inside source: true *** True Line Result if (shape.count <= 1) ** Processing line: ~ universalUpdateOne args, shape~ - Inside source: true *** True Line Result universalUpdateOne args, shape ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ didHit = false~ - Inside source: true *** True Line Result didHit = false ** Processing line: ~ hitter = nil~ - Inside source: true *** True Line Result hitter = nil ** Processing line: ~ for b in args.state.ballParents~ - Inside source: true *** True Line Result for b in args.state.ballParents ** Processing line: ~ if [b.x, b.y, b.width, b.height].intersect_rect?(shape.bold)~ - Inside source: true *** True Line Result if [b.x, b.y, b.width, b.height].intersect_rect?(shape.bold) ** Processing line: ~ didSquare = false~ - Inside source: true *** True Line Result didSquare = false ** Processing line: ~ for s in shape.squareColliders~ - Inside source: true *** True Line Result for s in shape.squareColliders ** Processing line: ~ if (s.collision?(args, b))~ - Inside source: true *** True Line Result if (s.collision?(args, b)) ** Processing line: ~ didSquare = true~ - Inside source: true *** True Line Result didSquare = true ** Processing line: ~ didHit = true~ - Inside source: true *** True Line Result didHit = true ** Processing line: ~ s.collide(args, b)~ - Inside source: true *** True Line Result s.collide(args, b) ** Processing line: ~ hitter = b~ - Inside source: true *** True Line Result hitter = b ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if (didSquare == false)~ - Inside source: true *** True Line Result if (didSquare == false) ** Processing line: ~ for c in shape.colliders~ - Inside source: true *** True Line Result for c in shape.colliders ** Processing line: ~ #puts args.state.ball.velocity~ - Inside source: true *** True Line Result #puts args.state.ball.velocity ** Processing line: ~ if c.collision?(args, b.getPoints(args),b)~ - Inside source: true *** True Line Result if c.collision?(args, b.getPoints(args),b) ** Processing line: ~ c.collide args, b~ - Inside source: true *** True Line Result c.collide args, b ** Processing line: ~ didHit = true~ - Inside source: true *** True Line Result didHit = true ** Processing line: ~ hitter = b~ - Inside source: true *** True Line Result hitter = b ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if (didHit)~ - Inside source: true *** True Line Result if (didHit) ** Processing line: ~ shape.count=shape.count-1~ - Inside source: true *** True Line Result shape.count=shape.count-1 ** Processing line: ~ shape.damageCount.append([(hitter.leastChain+1 - hitter.number)-1, args.state.tick_count])~ - Inside source: true *** True Line Result shape.damageCount.append([(hitter.leastChain+1 - hitter.number)-1, args.state.tick_count]) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ i=0~ - Inside source: true *** True Line Result i=0 ** Processing line: ~ while i < shape.damageCount.length~ - Inside source: true *** True Line Result while i < shape.damageCount.length ** Processing line: ~ if shape.damageCount[i][0] <= 0~ - Inside source: true *** True Line Result if shape.damageCount[i][0] <= 0 ** Processing line: ~ shape.damageCount.delete_at(i)~ - Inside source: true *** True Line Result shape.damageCount.delete_at(i) ** Processing line: ~ i-=1~ - Inside source: true *** True Line Result i-=1 ** Processing line: ~ elsif shape.damageCount[i][1].elapsed_time > BALL_DISTANCE and shape.damageCount[i][0] > 1~ - Inside source: true *** True Line Result elsif shape.damageCount[i][1].elapsed_time > BALL_DISTANCE and shape.damageCount[i][0] > 1 ** Processing line: ~ shape.count-=1~ - Inside source: true *** True Line Result shape.count-=1 ** Processing line: ~ shape.damageCount[i][0]-=1~ - Inside source: true *** True Line Result shape.damageCount[i][0]-=1 ** Processing line: ~ shape.damageCount[i][1] = args.state.tick_count~ - Inside source: true *** True Line Result shape.damageCount[i][1] = args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ i+=1~ - Inside source: true *** True Line Result i+=1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Square~ - Inside source: true *** True Line Result class Square ** Processing line: ~ attr_accessor :count, :x, :y, :home, :bold, :squareColliders, :colliders, :damageCount~ - Inside source: true *** True Line Result attr_accessor :count, :x, :y, :home, :bold, :squareColliders, :colliders, :damageCount ** Processing line: ~ def initialize(args, x, y, block_size, orientation, block_offset)~ - Inside source: true *** True Line Result def initialize(args, x, y, block_size, orientation, block_offset) ** Processing line: ~ @x = x * block_size~ - Inside source: true *** True Line Result @x = x * block_size ** Processing line: ~ @y = y * block_size~ - Inside source: true *** True Line Result @y = y * block_size ** Processing line: ~ @block_size = block_size~ - Inside source: true *** True Line Result @block_size = block_size ** Processing line: ~ @block_offset = block_offset~ - Inside source: true *** True Line Result @block_offset = block_offset ** Processing line: ~ @orientation = orientation~ - Inside source: true *** True Line Result @orientation = orientation ** Processing line: ~ @damageCount = []~ - Inside source: true *** True Line Result @damageCount = [] ** Processing line: ~ @home = 'squares'~ - Inside source: true *** True Line Result @home = 'squares' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Kernel.srand()~ - Inside source: true *** True Line Result Kernel.srand() ** Processing line: ~ @r = rand(255)~ - Inside source: true *** True Line Result @r = rand(255) ** Processing line: ~ @g = rand(255)~ - Inside source: true *** True Line Result @g = rand(255) ** Processing line: ~ @b = rand(255)~ - Inside source: true *** True Line Result @b = rand(255) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @count = rand(MAX_COUNT)+1~ - Inside source: true *** True Line Result @count = rand(MAX_COUNT)+1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ x_offset = (args.state.board_width + args.grid.w / 8) + @block_offset / 2~ - Inside source: true *** True Line Result x_offset = (args.state.board_width + args.grid.w / 8) + @block_offset / 2 ** Processing line: ~ @x_adjusted = @x + x_offset~ - Inside source: true *** True Line Result @x_adjusted = @x + x_offset ** Processing line: ~ @y_adjusted = @y~ - Inside source: true *** True Line Result @y_adjusted = @y ** Processing line: ~ @size_adjusted = @block_size * 2 - @block_offset~ - Inside source: true *** True Line Result @size_adjusted = @block_size * 2 - @block_offset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ hypotenuse=args.state.ball_hypotenuse~ - Inside source: true *** True Line Result hypotenuse=args.state.ball_hypotenuse ** Processing line: ~ @bold = [(@x_adjusted-hypotenuse/2)-1, (@y_adjusted-hypotenuse/2)-1, @size_adjusted + hypotenuse + 2, @size_adjusted + hypotenuse + 2]~ - Inside source: true *** True Line Result @bold = [(@x_adjusted-hypotenuse/2)-1, (@y_adjusted-hypotenuse/2)-1, @size_adjusted + hypotenuse + 2, @size_adjusted + hypotenuse + 2] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @points = [~ - Inside source: true *** True Line Result @points = [ ** Processing line: ~ {x:@x_adjusted, y:@y_adjusted},~ - Inside source: true *** True Line Result {x:@x_adjusted, y:@y_adjusted}, ** Processing line: ~ {x:@x_adjusted+@size_adjusted, y:@y_adjusted},~ - Inside source: true *** True Line Result {x:@x_adjusted+@size_adjusted, y:@y_adjusted}, ** Processing line: ~ {x:@x_adjusted+@size_adjusted, y:@y_adjusted+@size_adjusted},~ - Inside source: true *** True Line Result {x:@x_adjusted+@size_adjusted, y:@y_adjusted+@size_adjusted}, ** Processing line: ~ {x:@x_adjusted, y:@y_adjusted+@size_adjusted}~ - Inside source: true *** True Line Result {x:@x_adjusted, y:@y_adjusted+@size_adjusted} ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ @squareColliders = [~ - Inside source: true *** True Line Result @squareColliders = [ ** Processing line: ~ SquareCollider.new(@points[0].x,@points[0].y,{x:-1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(@points[0].x,@points[0].y,{x:-1,y:-1}), ** Processing line: ~ SquareCollider.new(@points[1].x-COLLISIONWIDTH,@points[1].y,{x:1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(@points[1].x-COLLISIONWIDTH,@points[1].y,{x:1,y:-1}), ** Processing line: ~ SquareCollider.new(@points[2].x-COLLISIONWIDTH,@points[2].y-COLLISIONWIDTH,{x:1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(@points[2].x-COLLISIONWIDTH,@points[2].y-COLLISIONWIDTH,{x:1,y:1}), ** Processing line: ~ SquareCollider.new(@points[3].x,@points[3].y-COLLISIONWIDTH,{x:-1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(@points[3].x,@points[3].y-COLLISIONWIDTH,{x:-1,y:1}), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ @colliders = [~ - Inside source: true *** True Line Result @colliders = [ ** Processing line: ~ LinearCollider.new(@points[0],@points[1], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(@points[0],@points[1], :neg), ** Processing line: ~ LinearCollider.new(@points[1],@points[2], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(@points[1],@points[2], :neg), ** Processing line: ~ LinearCollider.new(@points[2],@points[3], :pos),~ - Inside source: true *** True Line Result LinearCollider.new(@points[2],@points[3], :pos), ** Processing line: ~ LinearCollider.new(@points[0],@points[3], :pos)~ - Inside source: true *** True Line Result LinearCollider.new(@points[0],@points[3], :pos) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw(args)~ - Inside source: true *** True Line Result def draw(args) ** Processing line: ~ #Offset the coordinates to the edge of the game area~ - Inside source: true *** True Line Result #Offset the coordinates to the edge of the game area ** Processing line: ~ x_offset = (args.state.board_width + args.grid.w / 8) + @block_offset / 2~ - Inside source: true *** True Line Result x_offset = (args.state.board_width + args.grid.w / 8) + @block_offset / 2 ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size * 2 - @block_offset, @block_size * 2 - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y, @block_size * 2 - @block_offset, @block_size * 2 - @block_offset, @r, @g, @b] ** Processing line: ~ args.outputs.solids <<{x: (@x + x_offset), y: (@y), w: (@block_size * 2 - @block_offset), h: (@block_size * 2 - @block_offset), r: @r , g: @g , b: @b }~ - Inside source: true *** True Line Result args.outputs.solids <<{x: (@x + x_offset), y: (@y), w: (@block_size * 2 - @block_offset), h: (@block_size * 2 - @block_offset), r: @r , g: @g , b: @b } ** Processing line: ~ #args.outputs.solids << @bold.append([255,0,0])~ - Inside source: true *** True Line Result #args.outputs.solids << @bold.append([255,0,0]) ** Processing line: ~ args.outputs.labels << [@x + x_offset + (@block_size * 2 - @block_offset)/2, (@y) + (@block_size * 2 - @block_offset)/2, @count.to_s]~ - Inside source: true *** True Line Result args.outputs.labels << [@x + x_offset + (@block_size * 2 - @block_offset)/2, (@y) + (@block_size * 2 - @block_offset)/2, @count.to_s] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def update args~ - Inside source: true *** True Line Result def update args ** Processing line: ~ universalUpdate args, self~ - Inside source: true *** True Line Result universalUpdate args, self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class TShape~ - Inside source: true *** True Line Result class TShape ** Processing line: ~ attr_accessor :count, :x, :y, :home, :bold, :squareColliders, :colliders, :damageCount~ - Inside source: true *** True Line Result attr_accessor :count, :x, :y, :home, :bold, :squareColliders, :colliders, :damageCount ** Processing line: ~ def initialize(args, x, y, block_size, orientation, block_offset)~ - Inside source: true *** True Line Result def initialize(args, x, y, block_size, orientation, block_offset) ** Processing line: ~ @x = x * block_size~ - Inside source: true *** True Line Result @x = x * block_size ** Processing line: ~ @y = y * block_size~ - Inside source: true *** True Line Result @y = y * block_size ** Processing line: ~ @block_size = block_size~ - Inside source: true *** True Line Result @block_size = block_size ** Processing line: ~ @block_offset = block_offset~ - Inside source: true *** True Line Result @block_offset = block_offset ** Processing line: ~ @orientation = orientation~ - Inside source: true *** True Line Result @orientation = orientation ** Processing line: ~ @damageCount = []~ - Inside source: true *** True Line Result @damageCount = [] ** Processing line: ~ @home = "tshapes"~ - Inside source: true *** True Line Result @home = "tshapes" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Kernel.srand()~ - Inside source: true *** True Line Result Kernel.srand() ** Processing line: ~ @r = rand(255)~ - Inside source: true *** True Line Result @r = rand(255) ** Processing line: ~ @g = rand(255)~ - Inside source: true *** True Line Result @g = rand(255) ** Processing line: ~ @b = rand(255)~ - Inside source: true *** True Line Result @b = rand(255) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @count = rand(MAX_COUNT)+1~ - Inside source: true *** True Line Result @count = rand(MAX_COUNT)+1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @shapePoints = getShapePoints(args)~ - Inside source: true *** True Line Result @shapePoints = getShapePoints(args) ** Processing line: ~ minX={x:INFINITY, y:0}~ - Inside source: true *** True Line Result minX={x:INFINITY, y:0} ** Processing line: ~ minY={x:0, y:INFINITY}~ - Inside source: true *** True Line Result minY={x:0, y:INFINITY} ** Processing line: ~ maxX={x:-INFINITY, y:0}~ - Inside source: true *** True Line Result maxX={x:-INFINITY, y:0} ** Processing line: ~ maxY={x:0, y:-INFINITY}~ - Inside source: true *** True Line Result maxY={x:0, y:-INFINITY} ** Processing line: ~ for p in @shapePoints~ - Inside source: true *** True Line Result for p in @shapePoints ** Processing line: ~ if p.x < minX.x~ - Inside source: true *** True Line Result if p.x < minX.x ** Processing line: ~ minX = p~ - Inside source: true *** True Line Result minX = p ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if p.x > maxX.x~ - Inside source: true *** True Line Result if p.x > maxX.x ** Processing line: ~ maxX = p~ - Inside source: true *** True Line Result maxX = p ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if p.y < minY.y~ - Inside source: true *** True Line Result if p.y < minY.y ** Processing line: ~ minY = p~ - Inside source: true *** True Line Result minY = p ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if p.y > maxY.y~ - Inside source: true *** True Line Result if p.y > maxY.y ** Processing line: ~ maxY = p~ - Inside source: true *** True Line Result maxY = p ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ hypotenuse=args.state.ball_hypotenuse~ - Inside source: true *** True Line Result hypotenuse=args.state.ball_hypotenuse ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @bold = [(minX.x-hypotenuse/2)-1, (minY.y-hypotenuse/2)-1, -((minX.x-hypotenuse/2)-1)+(maxX.x + hypotenuse + 2), -((minY.y-hypotenuse/2)-1)+(maxY.y + hypotenuse + 2)]~ - Inside source: true *** True Line Result @bold = [(minX.x-hypotenuse/2)-1, (minY.y-hypotenuse/2)-1, -((minX.x-hypotenuse/2)-1)+(maxX.x + hypotenuse + 2), -((minY.y-hypotenuse/2)-1)+(maxY.y + hypotenuse + 2)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ def getShapePoints(args)~ - Inside source: true *** True Line Result def getShapePoints(args) ** Processing line: ~ points=[]~ - Inside source: true *** True Line Result points=[] ** Processing line: ~ x_offset = (args.state.board_width + args.grid.w / 8) + (@block_offset / 2)~ - Inside source: true *** True Line Result x_offset = (args.state.board_width + args.grid.w / 8) + (@block_offset / 2) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @orientation == :right~ - Inside source: true *** True Line Result if @orientation == :right ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b] ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 2, @block_size, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 2, @block_size, @r, @g, @b] ** Processing line: ~ points = [~ - Inside source: true *** True Line Result points = [ ** Processing line: ~ {x:@x + x_offset, y:@y},~ - Inside source: true *** True Line Result {x:@x + x_offset, y:@y}, ** Processing line: ~ {x:(@x + x_offset)+(@block_size - @block_offset), y:@y},~ - Inside source: true *** True Line Result {x:(@x + x_offset)+(@block_size - @block_offset), y:@y}, ** Processing line: ~ {x:(@x + x_offset)+(@block_size - @block_offset),y:@y + @block_size},~ - Inside source: true *** True Line Result {x:(@x + x_offset)+(@block_size - @block_offset),y:@y + @block_size}, ** Processing line: ~ {x:(@x + x_offset)+ @block_size * 2,y:@y + @block_size},~ - Inside source: true *** True Line Result {x:(@x + x_offset)+ @block_size * 2,y:@y + @block_size}, ** Processing line: ~ {x:(@x + x_offset)+ @block_size * 2,y:@y + @block_size+@block_size},~ - Inside source: true *** True Line Result {x:(@x + x_offset)+ @block_size * 2,y:@y + @block_size+@block_size}, ** Processing line: ~ {x:(@x + x_offset)+(@block_size - @block_offset),y:@y + @block_size+@block_size},~ - Inside source: true *** True Line Result {x:(@x + x_offset)+(@block_size - @block_offset),y:@y + @block_size+@block_size}, ** Processing line: ~ {x:(@x + x_offset)+(@block_size - @block_offset), y:@y+ @block_size * 3 - @block_offset},~ - Inside source: true *** True Line Result {x:(@x + x_offset)+(@block_size - @block_offset), y:@y+ @block_size * 3 - @block_offset}, ** Processing line: ~ {x:@x + x_offset , y:@y+ @block_size * 3 - @block_offset}~ - Inside source: true *** True Line Result {x:@x + x_offset , y:@y+ @block_size * 3 - @block_offset} ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ @squareColliders = [~ - Inside source: true *** True Line Result @squareColliders = [ ** Processing line: ~ SquareCollider.new(points[0].x,points[0].y,{x:-1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[0].x,points[0].y,{x:-1,y:-1}), ** Processing line: ~ SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y,{x:1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y,{x:1,y:-1}), ** Processing line: ~ SquareCollider.new(points[2].x,points[2].y-COLLISIONWIDTH,{x:1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[2].x,points[2].y-COLLISIONWIDTH,{x:1,y:-1}), ** Processing line: ~ SquareCollider.new(points[3].x-COLLISIONWIDTH,points[3].y,{x:1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[3].x-COLLISIONWIDTH,points[3].y,{x:1,y:-1}), ** Processing line: ~ SquareCollider.new(points[4].x-COLLISIONWIDTH,points[4].y-COLLISIONWIDTH,{x:1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[4].x-COLLISIONWIDTH,points[4].y-COLLISIONWIDTH,{x:1,y:1}), ** Processing line: ~ SquareCollider.new(points[5].x,points[5].y,{x:1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[5].x,points[5].y,{x:1,y:1}), ** Processing line: ~ SquareCollider.new(points[6].x-COLLISIONWIDTH,points[6].y-COLLISIONWIDTH,{x:1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[6].x-COLLISIONWIDTH,points[6].y-COLLISIONWIDTH,{x:1,y:1}), ** Processing line: ~ SquareCollider.new(points[7].x,points[7].y-COLLISIONWIDTH,{x:-1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[7].x,points[7].y-COLLISIONWIDTH,{x:-1,y:1}), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ @colliders = [~ - Inside source: true *** True Line Result @colliders = [ ** Processing line: ~ LinearCollider.new(points[0],points[1], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[0],points[1], :neg), ** Processing line: ~ LinearCollider.new(points[1],points[2], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[1],points[2], :neg), ** Processing line: ~ LinearCollider.new(points[2],points[3], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[2],points[3], :neg), ** Processing line: ~ LinearCollider.new(points[3],points[4], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[3],points[4], :neg), ** Processing line: ~ LinearCollider.new(points[4],points[5], :pos),~ - Inside source: true *** True Line Result LinearCollider.new(points[4],points[5], :pos), ** Processing line: ~ LinearCollider.new(points[5],points[6], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[5],points[6], :neg), ** Processing line: ~ LinearCollider.new(points[6],points[7], :pos),~ - Inside source: true *** True Line Result LinearCollider.new(points[6],points[7], :pos), ** Processing line: ~ LinearCollider.new(points[0],points[7], :pos)~ - Inside source: true *** True Line Result LinearCollider.new(points[0],points[7], :pos) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ elsif @orientation == :up~ - Inside source: true *** True Line Result elsif @orientation == :up ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b] ** Processing line: ~ #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size, @block_size * 2, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size, @block_size * 2, @r, @g, @b] ** Processing line: ~ points = [~ - Inside source: true *** True Line Result points = [ ** Processing line: ~ {x:@x + x_offset, y:@y},~ - Inside source: true *** True Line Result {x:@x + x_offset, y:@y}, ** Processing line: ~ {x:(@x + x_offset)+(@block_size * 3 - @block_offset), y:@y},~ - Inside source: true *** True Line Result {x:(@x + x_offset)+(@block_size * 3 - @block_offset), y:@y}, ** Processing line: ~ {x:(@x + x_offset)+(@block_size * 3 - @block_offset), y:@y+(@block_size - @block_offset)},~ - Inside source: true *** True Line Result {x:(@x + x_offset)+(@block_size * 3 - @block_offset), y:@y+(@block_size - @block_offset)}, ** Processing line: ~ {x:@x + x_offset + @block_size + @block_size, y:@y+(@block_size - @block_offset)},~ - Inside source: true *** True Line Result {x:@x + x_offset + @block_size + @block_size, y:@y+(@block_size - @block_offset)}, ** Processing line: ~ {x:@x + x_offset + @block_size + @block_size, y:@y+@block_size*2},~ - Inside source: true *** True Line Result {x:@x + x_offset + @block_size + @block_size, y:@y+@block_size*2}, ** Processing line: ~ {x:@x + x_offset + @block_size, y:@y+@block_size*2},~ - Inside source: true *** True Line Result {x:@x + x_offset + @block_size, y:@y+@block_size*2}, ** Processing line: ~ {x:@x + x_offset + @block_size, y:@y+(@block_size - @block_offset)},~ - Inside source: true *** True Line Result {x:@x + x_offset + @block_size, y:@y+(@block_size - @block_offset)}, ** Processing line: ~ {x:@x + x_offset, y:@y+(@block_size - @block_offset)}~ - Inside source: true *** True Line Result {x:@x + x_offset, y:@y+(@block_size - @block_offset)} ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ @squareColliders = [~ - Inside source: true *** True Line Result @squareColliders = [ ** Processing line: ~ SquareCollider.new(points[0].x,points[0].y,{x:-1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[0].x,points[0].y,{x:-1,y:-1}), ** Processing line: ~ SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y,{x:1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y,{x:1,y:-1}), ** Processing line: ~ SquareCollider.new(points[2].x-COLLISIONWIDTH,points[2].y-COLLISIONWIDTH,{x:1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[2].x-COLLISIONWIDTH,points[2].y-COLLISIONWIDTH,{x:1,y:1}), ** Processing line: ~ SquareCollider.new(points[3].x,points[3].y,{x:1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[3].x,points[3].y,{x:1,y:1}), ** Processing line: ~ SquareCollider.new(points[4].x-COLLISIONWIDTH,points[4].y-COLLISIONWIDTH,{x:1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[4].x-COLLISIONWIDTH,points[4].y-COLLISIONWIDTH,{x:1,y:1}), ** Processing line: ~ SquareCollider.new(points[5].x,points[5].y-COLLISIONWIDTH,{x:-1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[5].x,points[5].y-COLLISIONWIDTH,{x:-1,y:1}), ** Processing line: ~ SquareCollider.new(points[6].x-COLLISIONWIDTH,points[6].y,{x:-1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[6].x-COLLISIONWIDTH,points[6].y,{x:-1,y:1}), ** Processing line: ~ SquareCollider.new(points[7].x,points[7].y-COLLISIONWIDTH,{x:-1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[7].x,points[7].y-COLLISIONWIDTH,{x:-1,y:1}), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ @colliders = [~ - Inside source: true *** True Line Result @colliders = [ ** Processing line: ~ LinearCollider.new(points[0],points[1], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[0],points[1], :neg), ** Processing line: ~ LinearCollider.new(points[1],points[2], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[1],points[2], :neg), ** Processing line: ~ LinearCollider.new(points[2],points[3], :pos),~ - Inside source: true *** True Line Result LinearCollider.new(points[2],points[3], :pos), ** Processing line: ~ LinearCollider.new(points[3],points[4], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[3],points[4], :neg), ** Processing line: ~ LinearCollider.new(points[4],points[5], :pos),~ - Inside source: true *** True Line Result LinearCollider.new(points[4],points[5], :pos), ** Processing line: ~ LinearCollider.new(points[5],points[6], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[5],points[6], :neg), ** Processing line: ~ LinearCollider.new(points[6],points[7], :pos),~ - Inside source: true *** True Line Result LinearCollider.new(points[6],points[7], :pos), ** Processing line: ~ LinearCollider.new(points[0],points[7], :pos)~ - Inside source: true *** True Line Result LinearCollider.new(points[0],points[7], :pos) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ elsif @orientation == :left~ - Inside source: true *** True Line Result elsif @orientation == :left ** Processing line: ~ #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b] ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 2 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 2 - @block_offset, @block_size - @block_offset, @r, @g, @b] ** Processing line: ~ xh = @x + x_offset~ - Inside source: true *** True Line Result xh = @x + x_offset ** Processing line: ~ #points = [~ - Inside source: true *** True Line Result #points = [ ** Processing line: ~ #{x:@x + x_offset, y:@y},~ - Inside source: true *** True Line Result #{x:@x + x_offset, y:@y}, ** Processing line: ~ #{x:(@x + x_offset)+(@block_size - @block_offset), y:@y},~ - Inside source: true *** True Line Result #{x:(@x + x_offset)+(@block_size - @block_offset), y:@y}, ** Processing line: ~ #{x:(@x + x_offset)+(@block_size - @block_offset),y:@y + @block_size},~ - Inside source: true *** True Line Result #{x:(@x + x_offset)+(@block_size - @block_offset),y:@y + @block_size}, ** Processing line: ~ #{x:(@x + x_offset)+ @block_size * 2,y:@y + @block_size},~ - Inside source: true *** True Line Result #{x:(@x + x_offset)+ @block_size * 2,y:@y + @block_size}, ** Processing line: ~ #{x:(@x + x_offset)+ @block_size * 2,y:@y + @block_size+@block_size},~ - Inside source: true *** True Line Result #{x:(@x + x_offset)+ @block_size * 2,y:@y + @block_size+@block_size}, ** Processing line: ~ #{x:(@x + x_offset)+(@block_size - @block_offset),y:@y + @block_size+@block_size},~ - Inside source: true *** True Line Result #{x:(@x + x_offset)+(@block_size - @block_offset),y:@y + @block_size+@block_size}, ** Processing line: ~ #{x:(@x + x_offset)+(@block_size - @block_offset), y:@y+ @block_size * 3 - @block_offset},~ - Inside source: true *** True Line Result #{x:(@x + x_offset)+(@block_size - @block_offset), y:@y+ @block_size * 3 - @block_offset}, ** Processing line: ~ #{x:@x + x_offset , y:@y+ @block_size * 3 - @block_offset}~ - Inside source: true *** True Line Result #{x:@x + x_offset , y:@y+ @block_size * 3 - @block_offset} ** Processing line: ~ #]~ - Inside source: true *** True Line Result #] ** Processing line: ~ points = [~ - Inside source: true *** True Line Result points = [ ** Processing line: ~ {x:@x + x_offset + @block_size, y:@y},~ - Inside source: true *** True Line Result {x:@x + x_offset + @block_size, y:@y}, ** Processing line: ~ {x:@x + x_offset + @block_size + (@block_size - @block_offset), y:@y},~ - Inside source: true *** True Line Result {x:@x + x_offset + @block_size + (@block_size - @block_offset), y:@y}, ** Processing line: ~ {x:@x + x_offset + @block_size + (@block_size - @block_offset),y:@y+@block_size*3- @block_offset},~ - Inside source: true *** True Line Result {x:@x + x_offset + @block_size + (@block_size - @block_offset),y:@y+@block_size*3- @block_offset}, ** Processing line: ~ {x:@x + x_offset + @block_size, y:@y+@block_size*3- @block_offset},~ - Inside source: true *** True Line Result {x:@x + x_offset + @block_size, y:@y+@block_size*3- @block_offset}, ** Processing line: ~ {x:@x + x_offset+@block_size, y:@y+@block_size*2- @block_offset},~ - Inside source: true *** True Line Result {x:@x + x_offset+@block_size, y:@y+@block_size*2- @block_offset}, ** Processing line: ~ {x:@x + x_offset, y:@y+@block_size*2- @block_offset},~ - Inside source: true *** True Line Result {x:@x + x_offset, y:@y+@block_size*2- @block_offset}, ** Processing line: ~ {x:@x + x_offset, y:@y+@block_size},~ - Inside source: true *** True Line Result {x:@x + x_offset, y:@y+@block_size}, ** Processing line: ~ {x:@x + x_offset+@block_size, y:@y+@block_size}~ - Inside source: true *** True Line Result {x:@x + x_offset+@block_size, y:@y+@block_size} ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ @squareColliders = [~ - Inside source: true *** True Line Result @squareColliders = [ ** Processing line: ~ SquareCollider.new(points[0].x,points[0].y,{x:-1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[0].x,points[0].y,{x:-1,y:-1}), ** Processing line: ~ SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y,{x:1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y,{x:1,y:-1}), ** Processing line: ~ SquareCollider.new(points[2].x-COLLISIONWIDTH,points[2].y-COLLISIONWIDTH,{x:1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[2].x-COLLISIONWIDTH,points[2].y-COLLISIONWIDTH,{x:1,y:1}), ** Processing line: ~ SquareCollider.new(points[3].x,points[3].y-COLLISIONWIDTH,{x:-1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[3].x,points[3].y-COLLISIONWIDTH,{x:-1,y:1}), ** Processing line: ~ SquareCollider.new(points[4].x-COLLISIONWIDTH,points[4].y,{x:-1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[4].x-COLLISIONWIDTH,points[4].y,{x:-1,y:1}), ** Processing line: ~ SquareCollider.new(points[5].x,points[5].y-COLLISIONWIDTH,{x:-1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[5].x,points[5].y-COLLISIONWIDTH,{x:-1,y:1}), ** Processing line: ~ SquareCollider.new(points[6].x,points[6].y,{x:-1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[6].x,points[6].y,{x:-1,y:-1}), ** Processing line: ~ SquareCollider.new(points[7].x-COLLISIONWIDTH,points[7].y-COLLISIONWIDTH,{x:-1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[7].x-COLLISIONWIDTH,points[7].y-COLLISIONWIDTH,{x:-1,y:-1}), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ @colliders = [~ - Inside source: true *** True Line Result @colliders = [ ** Processing line: ~ LinearCollider.new(points[0],points[1], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[0],points[1], :neg), ** Processing line: ~ LinearCollider.new(points[1],points[2], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[1],points[2], :neg), ** Processing line: ~ LinearCollider.new(points[2],points[3], :pos),~ - Inside source: true *** True Line Result LinearCollider.new(points[2],points[3], :pos), ** Processing line: ~ LinearCollider.new(points[3],points[4], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[3],points[4], :neg), ** Processing line: ~ LinearCollider.new(points[4],points[5], :pos),~ - Inside source: true *** True Line Result LinearCollider.new(points[4],points[5], :pos), ** Processing line: ~ LinearCollider.new(points[5],points[6], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[5],points[6], :neg), ** Processing line: ~ LinearCollider.new(points[6],points[7], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[6],points[7], :neg), ** Processing line: ~ LinearCollider.new(points[0],points[7], :pos)~ - Inside source: true *** True Line Result LinearCollider.new(points[0],points[7], :pos) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ elsif @orientation == :down~ - Inside source: true *** True Line Result elsif @orientation == :down ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b] ** Processing line: ~ #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size - @block_offset, @block_size * 2 - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size - @block_offset, @block_size * 2 - @block_offset, @r, @g, @b] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ points = [~ - Inside source: true *** True Line Result points = [ ** Processing line: ~ {x:@x + x_offset, y:@y+(@block_size*2)-@block_offset},~ - Inside source: true *** True Line Result {x:@x + x_offset, y:@y+(@block_size*2)-@block_offset}, ** Processing line: ~ {x:@x + x_offset+ @block_size*3-@block_offset, y:@y+(@block_size*2)-@block_offset},~ - Inside source: true *** True Line Result {x:@x + x_offset+ @block_size*3-@block_offset, y:@y+(@block_size*2)-@block_offset}, ** Processing line: ~ {x:@x + x_offset+ @block_size*3-@block_offset, y:@y+(@block_size)},~ - Inside source: true *** True Line Result {x:@x + x_offset+ @block_size*3-@block_offset, y:@y+(@block_size)}, ** Processing line: ~ {x:@x + x_offset+ @block_size*2-@block_offset, y:@y+(@block_size)},~ - Inside source: true *** True Line Result {x:@x + x_offset+ @block_size*2-@block_offset, y:@y+(@block_size)}, ** Processing line: ~ {x:@x + x_offset+ @block_size*2-@block_offset, y:@y},#~ - Inside source: true *** True Line Result {x:@x + x_offset+ @block_size*2-@block_offset, y:@y},# ** Processing line: ~ {x:@x + x_offset+ @block_size, y:@y},#~ - Inside source: true *** True Line Result {x:@x + x_offset+ @block_size, y:@y},# ** Processing line: ~ {x:@x + x_offset + @block_size, y:@y+(@block_size)},~ - Inside source: true *** True Line Result {x:@x + x_offset + @block_size, y:@y+(@block_size)}, ** Processing line: ~ {x:@x + x_offset, y:@y+(@block_size)}~ - Inside source: true *** True Line Result {x:@x + x_offset, y:@y+(@block_size)} ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ @squareColliders = [~ - Inside source: true *** True Line Result @squareColliders = [ ** Processing line: ~ SquareCollider.new(points[0].x,points[0].y-COLLISIONWIDTH,{x:-1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[0].x,points[0].y-COLLISIONWIDTH,{x:-1,y:1}), ** Processing line: ~ SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y-COLLISIONWIDTH,{x:1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y-COLLISIONWIDTH,{x:1,y:1}), ** Processing line: ~ SquareCollider.new(points[2].x-COLLISIONWIDTH,points[2].y,{x:1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[2].x-COLLISIONWIDTH,points[2].y,{x:1,y:-1}), ** Processing line: ~ SquareCollider.new(points[3].x,points[3].y-COLLISIONWIDTH,{x:1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[3].x,points[3].y-COLLISIONWIDTH,{x:1,y:-1}), ** Processing line: ~ SquareCollider.new(points[4].x-COLLISIONWIDTH,points[4].y,{x:1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[4].x-COLLISIONWIDTH,points[4].y,{x:1,y:-1}), ** Processing line: ~ SquareCollider.new(points[5].x,points[5].y,{x:-1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[5].x,points[5].y,{x:-1,y:-1}), ** Processing line: ~ SquareCollider.new(points[6].x-COLLISIONWIDTH,points[6].y-COLLISIONWIDTH,{x:-1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[6].x-COLLISIONWIDTH,points[6].y-COLLISIONWIDTH,{x:-1,y:-1}), ** Processing line: ~ SquareCollider.new(points[7].x,points[7].y,{x:-1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[7].x,points[7].y,{x:-1,y:-1}), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ @colliders = [~ - Inside source: true *** True Line Result @colliders = [ ** Processing line: ~ LinearCollider.new(points[0],points[1], :pos),~ - Inside source: true *** True Line Result LinearCollider.new(points[0],points[1], :pos), ** Processing line: ~ LinearCollider.new(points[1],points[2], :pos),~ - Inside source: true *** True Line Result LinearCollider.new(points[1],points[2], :pos), ** Processing line: ~ LinearCollider.new(points[2],points[3], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[2],points[3], :neg), ** Processing line: ~ LinearCollider.new(points[3],points[4], :pos),~ - Inside source: true *** True Line Result LinearCollider.new(points[3],points[4], :pos), ** Processing line: ~ LinearCollider.new(points[4],points[5], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[4],points[5], :neg), ** Processing line: ~ LinearCollider.new(points[5],points[6], :pos),~ - Inside source: true *** True Line Result LinearCollider.new(points[5],points[6], :pos), ** Processing line: ~ LinearCollider.new(points[6],points[7], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[6],points[7], :neg), ** Processing line: ~ LinearCollider.new(points[0],points[7], :neg)~ - Inside source: true *** True Line Result LinearCollider.new(points[0],points[7], :neg) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ return points~ - Inside source: true *** True Line Result return points ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw(args)~ - Inside source: true *** True Line Result def draw(args) ** Processing line: ~ #Offset the coordinates to the edge of the game area~ - Inside source: true *** True Line Result #Offset the coordinates to the edge of the game area ** Processing line: ~ x_offset = (args.state.board_width + args.grid.w / 8) + (@block_offset / 2)~ - Inside source: true *** True Line Result x_offset = (args.state.board_width + args.grid.w / 8) + (@block_offset / 2) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @orientation == :right~ - Inside source: true *** True Line Result if @orientation == :right ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b] ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset), y: @y, w: @block_size - @block_offset, h: (@block_size * 3 - @block_offset), r: @r , g: @g, b: @b}~ - Inside source: true *** True Line Result args.outputs.solids << {x: (@x + x_offset), y: @y, w: @block_size - @block_offset, h: (@block_size * 3 - @block_offset), r: @r , g: @g, b: @b} ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 2, @block_size, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 2, @block_size, @r, @g, @b] ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset), y: (@y + @block_size), w: (@block_size * 2), h: (@block_size), r: @r , g: @g, b: @b }~ - Inside source: true *** True Line Result args.outputs.solids << {x: (@x + x_offset), y: (@y + @block_size), w: (@block_size * 2), h: (@block_size), r: @r , g: @g, b: @b } ** Processing line: ~ elsif @orientation == :up~ - Inside source: true *** True Line Result elsif @orientation == :up ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b] ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset), y: (@y), w: (@block_size * 3 - @block_offset), h: (@block_size - @block_offset), r: @r , g: @g, b: @b}~ - Inside source: true *** True Line Result args.outputs.solids << {x: (@x + x_offset), y: (@y), w: (@block_size * 3 - @block_offset), h: (@block_size - @block_offset), r: @r , g: @g, b: @b} ** Processing line: ~ #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size, @block_size * 2, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size, @block_size * 2, @r, @g, @b] ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset + @block_size), y: (@y), w: (@block_size), h: (@block_size * 2), r: @r , g: @g, b: @b}~ - Inside source: true *** True Line Result args.outputs.solids << {x: (@x + x_offset + @block_size), y: (@y), w: (@block_size), h: (@block_size * 2), r: @r , g: @g, b: @b} ** Processing line: ~ elsif @orientation == :left~ - Inside source: true *** True Line Result elsif @orientation == :left ** Processing line: ~ #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b] ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset + @block_size), y: (@y), w: (@block_size - @block_offset), h: (@block_size * 3 - @block_offset), r: @r , g: @g, b: @b}~ - Inside source: true *** True Line Result args.outputs.solids << {x: (@x + x_offset + @block_size), y: (@y), w: (@block_size - @block_offset), h: (@block_size * 3 - @block_offset), r: @r , g: @g, b: @b} ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 2 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 2 - @block_offset, @block_size - @block_offset, @r, @g, @b] ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset), y: (@y + @block_size), w: (@block_size * 2 - @block_offset), h: (@block_size - @block_offset), r: @r , g: @g, b: @b}~ - Inside source: true *** True Line Result args.outputs.solids << {x: (@x + x_offset), y: (@y + @block_size), w: (@block_size * 2 - @block_offset), h: (@block_size - @block_offset), r: @r , g: @g, b: @b} ** Processing line: ~ elsif @orientation == :down~ - Inside source: true *** True Line Result elsif @orientation == :down ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b] ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset), y: (@y + @block_size), w: (@block_size * 3 - @block_offset), h: (@block_size - @block_offset), r: @r , g: @g, b: @b}~ - Inside source: true *** True Line Result args.outputs.solids << {x: (@x + x_offset), y: (@y + @block_size), w: (@block_size * 3 - @block_offset), h: (@block_size - @block_offset), r: @r , g: @g, b: @b} ** Processing line: ~ #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size - @block_offset, @block_size * 2 - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size - @block_offset, @block_size * 2 - @block_offset, @r, @g, @b] ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset + @block_size), y: (@y), w: (@block_size - @block_offset), h: ( @block_size * 2 - @block_offset), r: @r , g: @g, b: @b}~ - Inside source: true *** True Line Result args.outputs.solids << {x: (@x + x_offset + @block_size), y: (@y), w: (@block_size - @block_offset), h: ( @block_size * 2 - @block_offset), r: @r , g: @g, b: @b} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #psize = 5.0~ - Inside source: true *** True Line Result #psize = 5.0 ** Processing line: ~ #for p in @shapePoints~ - Inside source: true *** True Line Result #for p in @shapePoints ** Processing line: ~ #args.outputs.solids << [p.x-psize/2, p.y-psize/2, psize, psize, 0, 0, 0]~ - Inside source: true *** True Line Result #args.outputs.solids << [p.x-psize/2, p.y-psize/2, psize, psize, 0, 0, 0] ** Processing line: ~ #end~ - Inside source: true *** True Line Result #end ** Processing line: ~ args.outputs.labels << [@x + x_offset + (@block_size * 2 - @block_offset)/2, (@y) + (@block_size * 2 - @block_offset)/2, @count.to_s]~ - Inside source: true *** True Line Result args.outputs.labels << [@x + x_offset + (@block_size * 2 - @block_offset)/2, (@y) + (@block_size * 2 - @block_offset)/2, @count.to_s] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def updateOne_old args~ - Inside source: true *** True Line Result def updateOne_old args ** Processing line: ~ didHit = false~ - Inside source: true *** True Line Result didHit = false ** Processing line: ~ hitter = nil~ - Inside source: true *** True Line Result hitter = nil ** Processing line: ~ toCollide = nil~ - Inside source: true *** True Line Result toCollide = nil ** Processing line: ~ for b in args.state.balls~ - Inside source: true *** True Line Result for b in args.state.balls ** Processing line: ~ if [b.x, b.y, b.width, b.height].intersect_rect?(@bold)~ - Inside source: true *** True Line Result if [b.x, b.y, b.width, b.height].intersect_rect?(@bold) ** Processing line: ~ didSquare = false~ - Inside source: true *** True Line Result didSquare = false ** Processing line: ~ for s in @squareColliders~ - Inside source: true *** True Line Result for s in @squareColliders ** Processing line: ~ if (s.collision?(args, b))~ - Inside source: true *** True Line Result if (s.collision?(args, b)) ** Processing line: ~ didSquare = true~ - Inside source: true *** True Line Result didSquare = true ** Processing line: ~ didHit = true~ - Inside source: true *** True Line Result didHit = true ** Processing line: ~ #s.collide(args, b)~ - Inside source: true *** True Line Result #s.collide(args, b) ** Processing line: ~ toCollide = s~ - Inside source: true *** True Line Result toCollide = s ** Processing line: ~ hitter = b~ - Inside source: true *** True Line Result hitter = b ** Processing line: ~ break~ - Inside source: true *** True Line Result break ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if (didSquare == false)~ - Inside source: true *** True Line Result if (didSquare == false) ** Processing line: ~ for c in @colliders~ - Inside source: true *** True Line Result for c in @colliders ** Processing line: ~ #puts args.state.ball.velocity~ - Inside source: true *** True Line Result #puts args.state.ball.velocity ** Processing line: ~ if c.collision?(args, b.getPoints(args),b)~ - Inside source: true *** True Line Result if c.collision?(args, b.getPoints(args),b) ** Processing line: ~ #c.collide args, b~ - Inside source: true *** True Line Result #c.collide args, b ** Processing line: ~ toCollide = c~ - Inside source: true *** True Line Result toCollide = c ** Processing line: ~ didHit = true~ - Inside source: true *** True Line Result didHit = true ** Processing line: ~ hitter = b~ - Inside source: true *** True Line Result hitter = b ** Processing line: ~ break~ - Inside source: true *** True Line Result break ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if didHit~ - Inside source: true *** True Line Result if didHit ** Processing line: ~ break~ - Inside source: true *** True Line Result break ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if (didHit)~ - Inside source: true *** True Line Result if (didHit) ** Processing line: ~ @count=0~ - Inside source: true *** True Line Result @count=0 ** Processing line: ~ hitter.makeLeader args~ - Inside source: true *** True Line Result hitter.makeLeader args ** Processing line: ~ #toCollide.collide(args, hitter)~ - Inside source: true *** True Line Result #toCollide.collide(args, hitter) ** Processing line: ~ args.state.tshapes.delete(self)~ - Inside source: true *** True Line Result args.state.tshapes.delete(self) ** Processing line: ~ #puts "HIT!" + hitter.number~ - Inside source: true *** True Line Result #puts "HIT!" + hitter.number ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def update_old args~ - Inside source: true *** True Line Result def update_old args ** Processing line: ~ if (@count == 1)~ - Inside source: true *** True Line Result if (@count == 1) ** Processing line: ~ updateOne args~ - Inside source: true *** True Line Result updateOne args ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ didHit = false~ - Inside source: true *** True Line Result didHit = false ** Processing line: ~ hitter = nil~ - Inside source: true *** True Line Result hitter = nil ** Processing line: ~ for b in args.state.ballParents~ - Inside source: true *** True Line Result for b in args.state.ballParents ** Processing line: ~ if [b.x, b.y, b.width, b.height].intersect_rect?(@bold)~ - Inside source: true *** True Line Result if [b.x, b.y, b.width, b.height].intersect_rect?(@bold) ** Processing line: ~ didSquare = false~ - Inside source: true *** True Line Result didSquare = false ** Processing line: ~ for s in @squareColliders~ - Inside source: true *** True Line Result for s in @squareColliders ** Processing line: ~ if (s.collision?(args, b))~ - Inside source: true *** True Line Result if (s.collision?(args, b)) ** Processing line: ~ didSquare = true~ - Inside source: true *** True Line Result didSquare = true ** Processing line: ~ didHit=true~ - Inside source: true *** True Line Result didHit=true ** Processing line: ~ s.collide(args, b)~ - Inside source: true *** True Line Result s.collide(args, b) ** Processing line: ~ hitter = b~ - Inside source: true *** True Line Result hitter = b ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if (didSquare == false)~ - Inside source: true *** True Line Result if (didSquare == false) ** Processing line: ~ for c in @colliders~ - Inside source: true *** True Line Result for c in @colliders ** Processing line: ~ #puts args.state.ball.velocity~ - Inside source: true *** True Line Result #puts args.state.ball.velocity ** Processing line: ~ if c.collision?(args, b.getPoints(args), b)~ - Inside source: true *** True Line Result if c.collision?(args, b.getPoints(args), b) ** Processing line: ~ c.collide args, b~ - Inside source: true *** True Line Result c.collide args, b ** Processing line: ~ didHit=true~ - Inside source: true *** True Line Result didHit=true ** Processing line: ~ hitter = b~ - Inside source: true *** True Line Result hitter = b ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if (didHit)~ - Inside source: true *** True Line Result if (didHit) ** Processing line: ~ @count=@count-1~ - Inside source: true *** True Line Result @count=@count-1 ** Processing line: ~ @damageCount.append([(hitter.leastChain+1 - hitter.number)-1, args.state.tick_count])~ - Inside source: true *** True Line Result @damageCount.append([(hitter.leastChain+1 - hitter.number)-1, args.state.tick_count]) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (@count == 0)~ - Inside source: true *** True Line Result if (@count == 0) ** Processing line: ~ args.state.tshapes.delete(self)~ - Inside source: true *** True Line Result args.state.tshapes.delete(self) ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ i=0~ - Inside source: true *** True Line Result i=0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ while i < @damageCount.length~ - Inside source: true *** True Line Result while i < @damageCount.length ** Processing line: ~ if @damageCount[i][0] <= 0~ - Inside source: true *** True Line Result if @damageCount[i][0] <= 0 ** Processing line: ~ @damageCount.delete_at(i)~ - Inside source: true *** True Line Result @damageCount.delete_at(i) ** Processing line: ~ i-=1~ - Inside source: true *** True Line Result i-=1 ** Processing line: ~ elsif @damageCount[i][1].elapsed_time > BALL_DISTANCE~ - Inside source: true *** True Line Result elsif @damageCount[i][1].elapsed_time > BALL_DISTANCE ** Processing line: ~ @count-=1~ - Inside source: true *** True Line Result @count-=1 ** Processing line: ~ @damageCount[i][0]-=1~ - Inside source: true *** True Line Result @damageCount[i][0]-=1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if (@count == 0)~ - Inside source: true *** True Line Result if (@count == 0) ** Processing line: ~ args.state.tshapes.delete(self)~ - Inside source: true *** True Line Result args.state.tshapes.delete(self) ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ i+=1~ - Inside source: true *** True Line Result i+=1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end #end update~ - Inside source: true *** True Line Result end #end update ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def update args~ - Inside source: true *** True Line Result def update args ** Processing line: ~ universalUpdate args, self~ - Inside source: true *** True Line Result universalUpdate args, self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Line~ - Inside source: true *** True Line Result class Line ** Processing line: ~ attr_accessor :count, :x, :y, :home, :bold, :squareColliders, :colliders, :damageCount~ - Inside source: true *** True Line Result attr_accessor :count, :x, :y, :home, :bold, :squareColliders, :colliders, :damageCount ** Processing line: ~ def initialize(args, x, y, block_size, orientation, block_offset)~ - Inside source: true *** True Line Result def initialize(args, x, y, block_size, orientation, block_offset) ** Processing line: ~ @x = x * block_size~ - Inside source: true *** True Line Result @x = x * block_size ** Processing line: ~ @y = y * block_size~ - Inside source: true *** True Line Result @y = y * block_size ** Processing line: ~ @block_size = block_size~ - Inside source: true *** True Line Result @block_size = block_size ** Processing line: ~ @block_offset = block_offset~ - Inside source: true *** True Line Result @block_offset = block_offset ** Processing line: ~ @orientation = orientation~ - Inside source: true *** True Line Result @orientation = orientation ** Processing line: ~ @damageCount = []~ - Inside source: true *** True Line Result @damageCount = [] ** Processing line: ~ @home = "lines"~ - Inside source: true *** True Line Result @home = "lines" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Kernel.srand()~ - Inside source: true *** True Line Result Kernel.srand() ** Processing line: ~ @r = rand(255)~ - Inside source: true *** True Line Result @r = rand(255) ** Processing line: ~ @g = rand(255)~ - Inside source: true *** True Line Result @g = rand(255) ** Processing line: ~ @b = rand(255)~ - Inside source: true *** True Line Result @b = rand(255) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @count = rand(MAX_COUNT)+1~ - Inside source: true *** True Line Result @count = rand(MAX_COUNT)+1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @shapePoints = getShapePoints(args)~ - Inside source: true *** True Line Result @shapePoints = getShapePoints(args) ** Processing line: ~ minX={x:INFINITY, y:0}~ - Inside source: true *** True Line Result minX={x:INFINITY, y:0} ** Processing line: ~ minY={x:0, y:INFINITY}~ - Inside source: true *** True Line Result minY={x:0, y:INFINITY} ** Processing line: ~ maxX={x:-INFINITY, y:0}~ - Inside source: true *** True Line Result maxX={x:-INFINITY, y:0} ** Processing line: ~ maxY={x:0, y:-INFINITY}~ - Inside source: true *** True Line Result maxY={x:0, y:-INFINITY} ** Processing line: ~ for p in @shapePoints~ - Inside source: true *** True Line Result for p in @shapePoints ** Processing line: ~ if p.x < minX.x~ - Inside source: true *** True Line Result if p.x < minX.x ** Processing line: ~ minX = p~ - Inside source: true *** True Line Result minX = p ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if p.x > maxX.x~ - Inside source: true *** True Line Result if p.x > maxX.x ** Processing line: ~ maxX = p~ - Inside source: true *** True Line Result maxX = p ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if p.y < minY.y~ - Inside source: true *** True Line Result if p.y < minY.y ** Processing line: ~ minY = p~ - Inside source: true *** True Line Result minY = p ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if p.y > maxY.y~ - Inside source: true *** True Line Result if p.y > maxY.y ** Processing line: ~ maxY = p~ - Inside source: true *** True Line Result maxY = p ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ hypotenuse=args.state.ball_hypotenuse~ - Inside source: true *** True Line Result hypotenuse=args.state.ball_hypotenuse ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @bold = [(minX.x-hypotenuse/2)-1, (minY.y-hypotenuse/2)-1, -((minX.x-hypotenuse/2)-1)+(maxX.x + hypotenuse + 2), -((minY.y-hypotenuse/2)-1)+(maxY.y + hypotenuse + 2)]~ - Inside source: true *** True Line Result @bold = [(minX.x-hypotenuse/2)-1, (minY.y-hypotenuse/2)-1, -((minX.x-hypotenuse/2)-1)+(maxX.x + hypotenuse + 2), -((minY.y-hypotenuse/2)-1)+(maxY.y + hypotenuse + 2)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def getShapePoints(args)~ - Inside source: true *** True Line Result def getShapePoints(args) ** Processing line: ~ points=[]~ - Inside source: true *** True Line Result points=[] ** Processing line: ~ x_offset = (args.state.board_width + args.grid.w / 8) + (@block_offset / 2)~ - Inside source: true *** True Line Result x_offset = (args.state.board_width + args.grid.w / 8) + (@block_offset / 2) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @orientation == :right~ - Inside source: true *** True Line Result if @orientation == :right ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b] ** Processing line: ~ xa =@x + x_offset~ - Inside source: true *** True Line Result xa =@x + x_offset ** Processing line: ~ ya =@y~ - Inside source: true *** True Line Result ya =@y ** Processing line: ~ wa =@block_size * 3 - @block_offset~ - Inside source: true *** True Line Result wa =@block_size * 3 - @block_offset ** Processing line: ~ ha =(@block_size - @block_offset)~ - Inside source: true *** True Line Result ha =(@block_size - @block_offset) ** Processing line: ~ elsif @orientation == :up~ - Inside source: true *** True Line Result elsif @orientation == :up ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b] ** Processing line: ~ xa =@x + x_offset~ - Inside source: true *** True Line Result xa =@x + x_offset ** Processing line: ~ ya =@y~ - Inside source: true *** True Line Result ya =@y ** Processing line: ~ wa =@block_size - @block_offset~ - Inside source: true *** True Line Result wa =@block_size - @block_offset ** Processing line: ~ ha =@block_size * 3 - @block_offset~ - Inside source: true *** True Line Result ha =@block_size * 3 - @block_offset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ elsif @orientation == :left~ - Inside source: true *** True Line Result elsif @orientation == :left ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b] ** Processing line: ~ xa =@x + x_offset~ - Inside source: true *** True Line Result xa =@x + x_offset ** Processing line: ~ ya =@y~ - Inside source: true *** True Line Result ya =@y ** Processing line: ~ wa =@block_size * 3 - @block_offset~ - Inside source: true *** True Line Result wa =@block_size * 3 - @block_offset ** Processing line: ~ ha =@block_size - @block_offset~ - Inside source: true *** True Line Result ha =@block_size - @block_offset ** Processing line: ~ elsif @orientation == :down~ - Inside source: true *** True Line Result elsif @orientation == :down ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result #args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b] ** Processing line: ~ xa =@x + x_offset~ - Inside source: true *** True Line Result xa =@x + x_offset ** Processing line: ~ ya =@y~ - Inside source: true *** True Line Result ya =@y ** Processing line: ~ wa =@block_size - @block_offset~ - Inside source: true *** True Line Result wa =@block_size - @block_offset ** Processing line: ~ ha =@block_size * 3 - @block_offset~ - Inside source: true *** True Line Result ha =@block_size * 3 - @block_offset ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ points = [~ - Inside source: true *** True Line Result points = [ ** Processing line: ~ {x: xa, y:ya},~ - Inside source: true *** True Line Result {x: xa, y:ya}, ** Processing line: ~ {x: xa + wa,y:ya},~ - Inside source: true *** True Line Result {x: xa + wa,y:ya}, ** Processing line: ~ {x: xa + wa,y:ya+ha},~ - Inside source: true *** True Line Result {x: xa + wa,y:ya+ha}, ** Processing line: ~ {x: xa, y:ya+ha},~ - Inside source: true *** True Line Result {x: xa, y:ya+ha}, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ @squareColliders = [~ - Inside source: true *** True Line Result @squareColliders = [ ** Processing line: ~ SquareCollider.new(points[0].x,points[0].y,{x:-1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[0].x,points[0].y,{x:-1,y:-1}), ** Processing line: ~ SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y,{x:1,y:-1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y,{x:1,y:-1}), ** Processing line: ~ SquareCollider.new(points[2].x-COLLISIONWIDTH,points[2].y-COLLISIONWIDTH,{x:1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[2].x-COLLISIONWIDTH,points[2].y-COLLISIONWIDTH,{x:1,y:1}), ** Processing line: ~ SquareCollider.new(points[3].x,points[3].y-COLLISIONWIDTH,{x:-1,y:1}),~ - Inside source: true *** True Line Result SquareCollider.new(points[3].x,points[3].y-COLLISIONWIDTH,{x:-1,y:1}), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ @colliders = [~ - Inside source: true *** True Line Result @colliders = [ ** Processing line: ~ LinearCollider.new(points[0],points[1], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[0],points[1], :neg), ** Processing line: ~ LinearCollider.new(points[1],points[2], :neg),~ - Inside source: true *** True Line Result LinearCollider.new(points[1],points[2], :neg), ** Processing line: ~ LinearCollider.new(points[2],points[3], :pos),~ - Inside source: true *** True Line Result LinearCollider.new(points[2],points[3], :pos), ** Processing line: ~ LinearCollider.new(points[0],points[3], :pos),~ - Inside source: true *** True Line Result LinearCollider.new(points[0],points[3], :pos), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ return points~ - Inside source: true *** True Line Result return points ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def update args~ - Inside source: true *** True Line Result def update args ** Processing line: ~ universalUpdate args, self~ - Inside source: true *** True Line Result universalUpdate args, self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw(args)~ - Inside source: true *** True Line Result def draw(args) ** Processing line: ~ x_offset = (args.state.board_width + args.grid.w / 8) + @block_offset / 2~ - Inside source: true *** True Line Result x_offset = (args.state.board_width + args.grid.w / 8) + @block_offset / 2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @orientation == :right~ - Inside source: true *** True Line Result if @orientation == :right ** Processing line: ~ args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b] ** Processing line: ~ elsif @orientation == :up~ - Inside source: true *** True Line Result elsif @orientation == :up ** Processing line: ~ args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b] ** Processing line: ~ elsif @orientation == :left~ - Inside source: true *** True Line Result elsif @orientation == :left ** Processing line: ~ args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b] ** Processing line: ~ elsif @orientation == :down~ - Inside source: true *** True Line Result elsif @orientation == :down ** Processing line: ~ args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ - Inside source: true *** True Line Result args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << [@x + x_offset + (@block_size * 2 - @block_offset)/2, (@y) + (@block_size * 2 - @block_offset)/2, @count.to_s]~ - Inside source: true *** True Line Result args.outputs.labels << [@x + x_offset + (@block_size * 2 - @block_offset)/2, (@y) + (@block_size * 2 - @block_offset)/2, @count.to_s] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Arbitrary Collision - linear_collider.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Arbitrary Collision - linear_collider.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/linear_collider.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/linear_collider.rb ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ COLLISIONWIDTH=8~ - Inside source: true *** True Line Result COLLISIONWIDTH=8 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class LinearCollider~ - Inside source: true *** True Line Result class LinearCollider ** Processing line: ~ attr_reader :pointA, :pointB~ - Inside source: true *** True Line Result attr_reader :pointA, :pointB ** Processing line: ~ def initialize (pointA, pointB, mode,collisionWidth=COLLISIONWIDTH)~ - Inside source: true *** True Line Result def initialize (pointA, pointB, mode,collisionWidth=COLLISIONWIDTH) ** Processing line: ~ @pointA = pointA~ - Inside source: true *** True Line Result @pointA = pointA ** Processing line: ~ @pointB = pointB~ - Inside source: true *** True Line Result @pointB = pointB ** Processing line: ~ @mode = mode~ - Inside source: true *** True Line Result @mode = mode ** Processing line: ~ @collisionWidth = collisionWidth~ - Inside source: true *** True Line Result @collisionWidth = collisionWidth ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (@pointA.x > @pointB.x)~ - Inside source: true *** True Line Result if (@pointA.x > @pointB.x) ** Processing line: ~ @pointA, @pointB = @pointB, @pointA~ - Inside source: true *** True Line Result @pointA, @pointB = @pointB, @pointA ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @linearCollider_collision_once = false~ - Inside source: true *** True Line Result @linearCollider_collision_once = false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def collisionSlope args~ - Inside source: true *** True Line Result def collisionSlope args ** Processing line: ~ if (@pointB.x-@pointA.x == 0)~ - Inside source: true *** True Line Result if (@pointB.x-@pointA.x == 0) ** Processing line: ~ return INFINITY~ - Inside source: true *** True Line Result return INFINITY ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ return (@pointB.y - @pointA.y) / (@pointB.x - @pointA.x)~ - Inside source: true *** True Line Result return (@pointB.y - @pointA.y) / (@pointB.x - @pointA.x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def collision? (args, points, ball=nil)~ - Inside source: true *** True Line Result def collision? (args, points, ball=nil) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ slope = collisionSlope args~ - Inside source: true *** True Line Result slope = collisionSlope args ** Processing line: ~ result = false~ - Inside source: true *** True Line Result result = false ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # calculate a vector with a magnitude of (1/2)collisionWidth and a direction perpendicular to the collision line~ - Inside source: true *** True Line Result # calculate a vector with a magnitude of (1/2)collisionWidth and a direction perpendicular to the collision line ** Processing line: ~ vect=nil;mag=nil;vect=nil;~ - Inside source: true *** True Line Result vect=nil;mag=nil;vect=nil; ** Processing line: ~ if @mode == :both~ - Inside source: true *** True Line Result if @mode == :both ** Processing line: ~ vect = {x: @pointB.x - @pointA.x, y:@pointB.y - @pointA.y}~ - Inside source: true *** True Line Result vect = {x: @pointB.x - @pointA.x, y:@pointB.y - @pointA.y} ** Processing line: ~ mag = (vect.x**2 + vect.y**2)**0.5~ - Inside source: true *** True Line Result mag = (vect.x**2 + vect.y**2)**0.5 ** Processing line: ~ vect = {y: -1*(vect.x/(mag))*@collisionWidth*0.5, x: (vect.y/(mag))*@collisionWidth*0.5}~ - Inside source: true *** True Line Result vect = {y: -1*(vect.x/(mag))*@collisionWidth*0.5, x: (vect.y/(mag))*@collisionWidth*0.5} ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ vect = {x: @pointB.x - @pointA.x, y:@pointB.y - @pointA.y}~ - Inside source: true *** True Line Result vect = {x: @pointB.x - @pointA.x, y:@pointB.y - @pointA.y} ** Processing line: ~ mag = (vect.x**2 + vect.y**2)**0.5~ - Inside source: true *** True Line Result mag = (vect.x**2 + vect.y**2)**0.5 ** Processing line: ~ vect = {y: -1*(vect.x/(mag))*@collisionWidth, x: (vect.y/(mag))*@collisionWidth}~ - Inside source: true *** True Line Result vect = {y: -1*(vect.x/(mag))*@collisionWidth, x: (vect.y/(mag))*@collisionWidth} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ rpointA=nil;rpointB=nil;rpointC=nil;rpointD=nil;~ - Inside source: true *** True Line Result rpointA=nil;rpointB=nil;rpointC=nil;rpointD=nil; ** Processing line: ~ if @mode == :pos~ - Inside source: true *** True Line Result if @mode == :pos ** Processing line: ~ rpointA = {x:@pointA.x + vect.x, y:@pointA.y + vect.y}~ - Inside source: true *** True Line Result rpointA = {x:@pointA.x + vect.x, y:@pointA.y + vect.y} ** Processing line: ~ rpointB = {x:@pointB.x + vect.x, y:@pointB.y + vect.y}~ - Inside source: true *** True Line Result rpointB = {x:@pointB.x + vect.x, y:@pointB.y + vect.y} ** Processing line: ~ rpointC = {x:@pointB.x, y:@pointB.y}~ - Inside source: true *** True Line Result rpointC = {x:@pointB.x, y:@pointB.y} ** Processing line: ~ rpointD = {x:@pointA.x, y:@pointA.y}~ - Inside source: true *** True Line Result rpointD = {x:@pointA.x, y:@pointA.y} ** Processing line: ~ elsif @mode == :neg~ - Inside source: true *** True Line Result elsif @mode == :neg ** Processing line: ~ rpointA = {x:@pointA.x, y:@pointA.y}~ - Inside source: true *** True Line Result rpointA = {x:@pointA.x, y:@pointA.y} ** Processing line: ~ rpointB = {x:@pointB.x, y:@pointB.y}~ - Inside source: true *** True Line Result rpointB = {x:@pointB.x, y:@pointB.y} ** Processing line: ~ rpointC = {x:@pointB.x - vect.x, y:@pointB.y - vect.y}~ - Inside source: true *** True Line Result rpointC = {x:@pointB.x - vect.x, y:@pointB.y - vect.y} ** Processing line: ~ rpointD = {x:@pointA.x - vect.x, y:@pointA.y - vect.y}~ - Inside source: true *** True Line Result rpointD = {x:@pointA.x - vect.x, y:@pointA.y - vect.y} ** Processing line: ~ elsif @mode == :both~ - Inside source: true *** True Line Result elsif @mode == :both ** Processing line: ~ rpointA = {x:@pointA.x + vect.x, y:@pointA.y + vect.y}~ - Inside source: true *** True Line Result rpointA = {x:@pointA.x + vect.x, y:@pointA.y + vect.y} ** Processing line: ~ rpointB = {x:@pointB.x + vect.x, y:@pointB.y + vect.y}~ - Inside source: true *** True Line Result rpointB = {x:@pointB.x + vect.x, y:@pointB.y + vect.y} ** Processing line: ~ rpointC = {x:@pointB.x - vect.x, y:@pointB.y - vect.y}~ - Inside source: true *** True Line Result rpointC = {x:@pointB.x - vect.x, y:@pointB.y - vect.y} ** Processing line: ~ rpointD = {x:@pointA.x - vect.x, y:@pointA.y - vect.y}~ - Inside source: true *** True Line Result rpointD = {x:@pointA.x - vect.x, y:@pointA.y - vect.y} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ #four point rectangle~ - Inside source: true *** True Line Result #four point rectangle ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if ball != nil~ - Inside source: true *** True Line Result if ball != nil ** Processing line: ~ xs = [rpointA.x,rpointB.x,rpointC.x,rpointD.x]~ - Inside source: true *** True Line Result xs = [rpointA.x,rpointB.x,rpointC.x,rpointD.x] ** Processing line: ~ ys = [rpointA.y,rpointB.y,rpointC.y,rpointD.y]~ - Inside source: true *** True Line Result ys = [rpointA.y,rpointB.y,rpointC.y,rpointD.y] ** Processing line: ~ correct = 1~ - Inside source: true *** True Line Result correct = 1 ** Processing line: ~ rect1 = [ball.x, ball.y, ball.width, ball.height]~ - Inside source: true *** True Line Result rect1 = [ball.x, ball.y, ball.width, ball.height] ** Processing line: ~ #$r1 = rect1~ - Inside source: true *** True Line Result #$r1 = rect1 ** Processing line: ~ rect2 = [xs.min-correct,ys.min-correct,(xs.max-xs.min)+correct*2,(ys.max-ys.min)+correct*2]~ - Inside source: true *** True Line Result rect2 = [xs.min-correct,ys.min-correct,(xs.max-xs.min)+correct*2,(ys.max-ys.min)+correct*2] ** Processing line: ~ #$r2 = rect2~ - Inside source: true *** True Line Result #$r2 = rect2 ** Processing line: ~ if rect1.intersect_rect?(rect2) == false~ - Inside source: true *** True Line Result if rect1.intersect_rect?(rect2) == false ** Processing line: ~ return false~ - Inside source: true *** True Line Result return false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #area of a triangle~ - Inside source: true *** True Line Result #area of a triangle ** Processing line: ~ triArea = -> (a,b,c) { ((a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y))/2.0).abs }~ - Inside source: true *** True Line Result triArea = -> (a,b,c) { ((a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y))/2.0).abs } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #if at least on point is in the rectangle then collision? is true - otherwise false~ - Inside source: true *** True Line Result #if at least on point is in the rectangle then collision? is true - otherwise false ** Processing line: ~ for point in points~ - Inside source: true *** True Line Result for point in points ** Processing line: ~ #Check whether a given point lies inside a rectangle or not:~ - Inside source: true *** True Line Result #Check whether a given point lies inside a rectangle or not: ** Processing line: ~ #if the sum of the area of traingls, PAB, PBC, PCD, PAD equal the area of the rec, then an intersection has occured~ - Inside source: true *** True Line Result #if the sum of the area of traingls, PAB, PBC, PCD, PAD equal the area of the rec, then an intersection has occured ** Processing line: ~ areaRec = triArea.call(rpointA, rpointB, rpointC)+triArea.call(rpointA, rpointC, rpointD)~ - Inside source: true *** True Line Result areaRec = triArea.call(rpointA, rpointB, rpointC)+triArea.call(rpointA, rpointC, rpointD) ** Processing line: ~ areaSum = [~ - Inside source: true *** True Line Result areaSum = [ ** Processing line: ~ triArea.call(point, rpointA, rpointB),triArea.call(point, rpointB, rpointC),~ - Inside source: true *** True Line Result triArea.call(point, rpointA, rpointB),triArea.call(point, rpointB, rpointC), ** Processing line: ~ triArea.call(point, rpointC, rpointD),triArea.call(point, rpointA, rpointD)~ - Inside source: true *** True Line Result triArea.call(point, rpointC, rpointD),triArea.call(point, rpointA, rpointD) ** Processing line: ~ ].inject(0){|sum,x| sum + x }~ - Inside source: true *** True Line Result ].inject(0){|sum,x| sum + x } ** Processing line: ~ e = 0.0001 #allow for minor error~ - Inside source: true *** True Line Result e = 0.0001 #allow for minor error ** Processing line: ~ if areaRec>= areaSum-e and areaRec<= areaSum+e~ - Inside source: true *** True Line Result if areaRec>= areaSum-e and areaRec<= areaSum+e ** Processing line: ~ result = true~ - Inside source: true *** True Line Result result = true ** Processing line: ~ #return true~ - Inside source: true *** True Line Result #return true ** Processing line: ~ break~ - Inside source: true *** True Line Result break ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #args.outputs.lines << [@pointA.x, @pointA.y, @pointB.x, @pointB.y, 000, 000, 000]~ - Inside source: true *** True Line Result #args.outputs.lines << [@pointA.x, @pointA.y, @pointB.x, @pointB.y, 000, 000, 000] ** Processing line: ~ #args.outputs.lines << [rpointA.x, rpointA.y, rpointB.x, rpointB.y, 255, 000, 000]~ - Inside source: true *** True Line Result #args.outputs.lines << [rpointA.x, rpointA.y, rpointB.x, rpointB.y, 255, 000, 000] ** Processing line: ~ #args.outputs.lines << [rpointC.x, rpointC.y, rpointD.x, rpointD.y, 000, 000, 255]~ - Inside source: true *** True Line Result #args.outputs.lines << [rpointC.x, rpointC.y, rpointD.x, rpointD.y, 000, 000, 255] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #puts (rpointA.x.to_s + " " + rpointA.y.to_s + " " + rpointB.x.to_s + " "+ rpointB.y.to_s)~ - Inside source: true *** True Line Result #puts (rpointA.x.to_s + " " + rpointA.y.to_s + " " + rpointB.x.to_s + " "+ rpointB.y.to_s) ** Processing line: ~ return result~ - Inside source: true *** True Line Result return result ** Processing line: ~ end #end collision?~ - Inside source: true *** True Line Result end #end collision? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def getRepelMagnitude (fbx, fby, vrx, vry, ballMag)~ - Inside source: true *** True Line Result def getRepelMagnitude (fbx, fby, vrx, vry, ballMag) ** Processing line: ~ a = fbx ; b = vrx ; c = fby~ - Inside source: true *** True Line Result a = fbx ; b = vrx ; c = fby ** Processing line: ~ d = vry ; e = ballMag~ - Inside source: true *** True Line Result d = vry ; e = ballMag ** Processing line: ~ if b**2 + d**2 == 0~ - Inside source: true *** True Line Result if b**2 + d**2 == 0 ** Processing line: ~ #unexpected~ - Inside source: true *** True Line Result #unexpected ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ x1 = (-a*b+-c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 + d**2 - a**2 * d**2)**0.5)/(b**2 + d**2)~ - Inside source: true *** True Line Result x1 = (-a*b+-c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 + d**2 - a**2 * d**2)**0.5)/(b**2 + d**2) ** Processing line: ~ x2 = -((a*b + c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 * d**2 - a**2 * d**2)**0.5)/(b**2 + d**2))~ - Inside source: true *** True Line Result x2 = -((a*b + c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 * d**2 - a**2 * d**2)**0.5)/(b**2 + d**2)) ** Processing line: ~ err = 0.00001~ - Inside source: true *** True Line Result err = 0.00001 ** Processing line: ~ o = ((fbx + x1*vrx)**2 + (fby + x1*vry)**2 ) ** 0.5~ - Inside source: true *** True Line Result o = ((fbx + x1*vrx)**2 + (fby + x1*vry)**2 ) ** 0.5 ** Processing line: ~ p = ((fbx + x2*vrx)**2 + (fby + x2*vry)**2 ) ** 0.5~ - Inside source: true *** True Line Result p = ((fbx + x2*vrx)**2 + (fby + x2*vry)**2 ) ** 0.5 ** Processing line: ~ r = 0~ - Inside source: true *** True Line Result r = 0 ** Processing line: ~ if (ballMag >= o-err and ballMag <= o+err)~ - Inside source: true *** True Line Result if (ballMag >= o-err and ballMag <= o+err) ** Processing line: ~ r = x1~ - Inside source: true *** True Line Result r = x1 ** Processing line: ~ elsif (ballMag >= p-err and ballMag <= p+err)~ - Inside source: true *** True Line Result elsif (ballMag >= p-err and ballMag <= p+err) ** Processing line: ~ r = x2~ - Inside source: true *** True Line Result r = x2 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ #unexpected~ - Inside source: true *** True Line Result #unexpected ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ return r~ - Inside source: true *** True Line Result return r ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def collide args, ball~ - Inside source: true *** True Line Result def collide args, ball ** Processing line: ~ slope = collisionSlope args~ - Inside source: true *** True Line Result slope = collisionSlope args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # perpVect: normal vector perpendicular to collision~ - Inside source: true *** True Line Result # perpVect: normal vector perpendicular to collision ** Processing line: ~ perpVect = {x: @pointB.x - @pointA.x, y:@pointB.y - @pointA.y}~ - Inside source: true *** True Line Result perpVect = {x: @pointB.x - @pointA.x, y:@pointB.y - @pointA.y} ** Processing line: ~ mag = (perpVect.x**2 + perpVect.y**2)**0.5~ - Inside source: true *** True Line Result mag = (perpVect.x**2 + perpVect.y**2)**0.5 ** Processing line: ~ perpVect = {x: perpVect.x/(mag), y: perpVect.y/(mag)}~ - Inside source: true *** True Line Result perpVect = {x: perpVect.x/(mag), y: perpVect.y/(mag)} ** Processing line: ~ perpVect = {x: -perpVect.y, y: perpVect.x}~ - Inside source: true *** True Line Result perpVect = {x: -perpVect.y, y: perpVect.x} ** Processing line: ~ if perpVect.y > 0 #ensure perpVect points upward~ - Inside source: true *** True Line Result if perpVect.y > 0 #ensure perpVect points upward ** Processing line: ~ perpVect = {x: perpVect.x*-1, y: perpVect.y*-1}~ - Inside source: true *** True Line Result perpVect = {x: perpVect.x*-1, y: perpVect.y*-1} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ previousPosition = {~ - Inside source: true *** True Line Result previousPosition = { ** Processing line: ~ x:ball.x-ball.velocity.x,~ - Inside source: true *** True Line Result x:ball.x-ball.velocity.x, ** Processing line: ~ y:ball.y-ball.velocity.y~ - Inside source: true *** True Line Result y:ball.y-ball.velocity.y ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ yInterc = @pointA.y + -slope*@pointA.x~ - Inside source: true *** True Line Result yInterc = @pointA.y + -slope*@pointA.x ** Processing line: ~ if slope == INFINITY~ - Inside source: true *** True Line Result if slope == INFINITY ** Processing line: ~ if previousPosition.x < @pointA.x~ - Inside source: true *** True Line Result if previousPosition.x < @pointA.x ** Processing line: ~ perpVect = {x: perpVect.x*-1, y: perpVect.y*-1}~ - Inside source: true *** True Line Result perpVect = {x: perpVect.x*-1, y: perpVect.y*-1} ** Processing line: ~ yInterc = -INFINITY~ - Inside source: true *** True Line Result yInterc = -INFINITY ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif previousPosition.y < slope*previousPosition.x + yInterc #check if ball is bellow or above the collider to determine if perpVect is - or +~ - Inside source: true *** True Line Result elsif previousPosition.y < slope*previousPosition.x + yInterc #check if ball is bellow or above the collider to determine if perpVect is - or + ** Processing line: ~ perpVect = {x: perpVect.x*-1, y: perpVect.y*-1}~ - Inside source: true *** True Line Result perpVect = {x: perpVect.x*-1, y: perpVect.y*-1} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ velocityMag = (ball.velocity.x**2 + ball.velocity.y**2)**0.5~ - Inside source: true *** True Line Result velocityMag = (ball.velocity.x**2 + ball.velocity.y**2)**0.5 ** Processing line: ~ theta_ball=Math.atan2(ball.velocity.y,ball.velocity.x) #the angle of the ball's velocity~ - Inside source: true *** True Line Result theta_ball=Math.atan2(ball.velocity.y,ball.velocity.x) #the angle of the ball's velocity ** Processing line: ~ theta_repel=Math.atan2(perpVect.y,perpVect.x) #the angle of the repelling force(perpVect)~ - Inside source: true *** True Line Result theta_repel=Math.atan2(perpVect.y,perpVect.x) #the angle of the repelling force(perpVect) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ fbx = velocityMag * Math.cos(theta_ball) #the x component of the ball's velocity~ - Inside source: true *** True Line Result fbx = velocityMag * Math.cos(theta_ball) #the x component of the ball's velocity ** Processing line: ~ fby = velocityMag * Math.sin(theta_ball) #the y component of the ball's velocity~ - Inside source: true *** True Line Result fby = velocityMag * Math.sin(theta_ball) #the y component of the ball's velocity ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #the magnitude of the repelling force~ - Inside source: true *** True Line Result #the magnitude of the repelling force ** Processing line: ~ repelMag = getRepelMagnitude(fbx, fby, perpVect.x, perpVect.y, (ball.velocity.x**2 + ball.velocity.y**2)**0.5)~ - Inside source: true *** True Line Result repelMag = getRepelMagnitude(fbx, fby, perpVect.x, perpVect.y, (ball.velocity.x**2 + ball.velocity.y**2)**0.5) ** Processing line: ~ frx = repelMag* Math.cos(theta_repel) #the x component of the repel's velocity | magnitude is set to twice of fbx~ - Inside source: true *** True Line Result frx = repelMag* Math.cos(theta_repel) #the x component of the repel's velocity | magnitude is set to twice of fbx ** Processing line: ~ fry = repelMag* Math.sin(theta_repel) #the y component of the repel's velocity | magnitude is set to twice of fby~ - Inside source: true *** True Line Result fry = repelMag* Math.sin(theta_repel) #the y component of the repel's velocity | magnitude is set to twice of fby ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ fsumx = fbx+frx #sum of x forces~ - Inside source: true *** True Line Result fsumx = fbx+frx #sum of x forces ** Processing line: ~ fsumy = fby+fry #sum of y forces~ - Inside source: true *** True Line Result fsumy = fby+fry #sum of y forces ** Processing line: ~ fr = velocityMag#fr is the resulting magnitude~ - Inside source: true *** True Line Result fr = velocityMag#fr is the resulting magnitude ** Processing line: ~ thetaNew = Math.atan2(fsumy, fsumx) #thetaNew is the resulting angle~ - Inside source: true *** True Line Result thetaNew = Math.atan2(fsumy, fsumx) #thetaNew is the resulting angle ** Processing line: ~ xnew = fr*Math.cos(thetaNew)#resulting x velocity~ - Inside source: true *** True Line Result xnew = fr*Math.cos(thetaNew)#resulting x velocity ** Processing line: ~ ynew = fr*Math.sin(thetaNew)#resulting y velocity~ - Inside source: true *** True Line Result ynew = fr*Math.sin(thetaNew)#resulting y velocity ** Processing line: ~ if (velocityMag < MAX_VELOCITY)~ - Inside source: true *** True Line Result if (velocityMag < MAX_VELOCITY) ** Processing line: ~ ball.velocity = Vector2d.new(xnew*1.1, ynew*1.1)~ - Inside source: true *** True Line Result ball.velocity = Vector2d.new(xnew*1.1, ynew*1.1) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ ball.velocity = Vector2d.new(xnew, ynew)~ - Inside source: true *** True Line Result ball.velocity = Vector2d.new(xnew, ynew) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Arbitrary Collision - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Arbitrary Collision - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/main.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/main.rb ** Processing line: ~ INFINITY= 10**10~ - Inside source: true *** True Line Result INFINITY= 10**10 ** Processing line: ~ MAX_VELOCITY = 8.0~ - Inside source: true *** True Line Result MAX_VELOCITY = 8.0 ** Processing line: ~ BALL_COUNT = 90~ - Inside source: true *** True Line Result BALL_COUNT = 90 ** Processing line: ~ BALL_DISTANCE = 20~ - Inside source: true *** True Line Result BALL_DISTANCE = 20 ** Processing line: ~ require 'app/vector2d.rb'~ - Inside source: true *** True Line Result require 'app/vector2d.rb' ** Processing line: ~ require 'app/blocks.rb'~ - Inside source: true *** True Line Result require 'app/blocks.rb' ** Processing line: ~ require 'app/ball.rb'~ - Inside source: true *** True Line Result require 'app/ball.rb' ** Processing line: ~ require 'app/rectangle.rb'~ - Inside source: true *** True Line Result require 'app/rectangle.rb' ** Processing line: ~ require 'app/linear_collider.rb'~ - Inside source: true *** True Line Result require 'app/linear_collider.rb' ** Processing line: ~ require 'app/square_collider.rb'~ - Inside source: true *** True Line Result require 'app/square_collider.rb' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Method to init default values~ - Inside source: true *** True Line Result #Method to init default values ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ args.state.board_width ||= args.grid.w / 4~ - Inside source: true *** True Line Result args.state.board_width ||= args.grid.w / 4 ** Processing line: ~ args.state.board_height ||= args.grid.h~ - Inside source: true *** True Line Result args.state.board_height ||= args.grid.h ** Processing line: ~ args.state.game_area ||= [(args.state.board_width + args.grid.w / 8), 0, args.state.board_width, args.grid.h]~ - Inside source: true *** True Line Result args.state.game_area ||= [(args.state.board_width + args.grid.w / 8), 0, args.state.board_width, args.grid.h] ** Processing line: ~ args.state.balls ||= []~ - Inside source: true *** True Line Result args.state.balls ||= [] ** Processing line: ~ args.state.num_balls ||= 0~ - Inside source: true *** True Line Result args.state.num_balls ||= 0 ** Processing line: ~ args.state.ball_created_at ||= args.state.tick_count~ - Inside source: true *** True Line Result args.state.ball_created_at ||= args.state.tick_count ** Processing line: ~ args.state.ball_hypotenuse = (10**2 + 10**2)**0.5~ - Inside source: true *** True Line Result args.state.ball_hypotenuse = (10**2 + 10**2)**0.5 ** Processing line: ~ args.state.ballParents ||=nil~ - Inside source: true *** True Line Result args.state.ballParents ||=nil ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ init_blocks args~ - Inside source: true *** True Line Result init_blocks args ** Processing line: ~ init_balls args~ - Inside source: true *** True Line Result init_balls args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :default_methods~ - Inside source: true *** True Line Result begin :default_methods ** Processing line: ~ def init_blocks args~ - Inside source: true *** True Line Result def init_blocks args ** Processing line: ~ block_size = args.state.board_width / 8~ - Inside source: true *** True Line Result block_size = args.state.board_width / 8 ** Processing line: ~ #Space inbetween each block~ - Inside source: true *** True Line Result #Space inbetween each block ** Processing line: ~ block_offset = 4~ - Inside source: true *** True Line Result block_offset = 4 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.squares ||=[~ - Inside source: true *** True Line Result args.state.squares ||=[ ** Processing line: ~ Square.new(args, 2, 0, block_size, :right, block_offset),~ - Inside source: true *** True Line Result Square.new(args, 2, 0, block_size, :right, block_offset), ** Processing line: ~ Square.new(args, 5, 0, block_size, :right, block_offset),~ - Inside source: true *** True Line Result Square.new(args, 5, 0, block_size, :right, block_offset), ** Processing line: ~ Square.new(args, 6, 7, block_size, :right, block_offset)~ - Inside source: true *** True Line Result Square.new(args, 6, 7, block_size, :right, block_offset) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Possible orientations are :right, :left, :up, :down~ - Inside source: true *** True Line Result #Possible orientations are :right, :left, :up, :down ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.tshapes ||= [~ - Inside source: true *** True Line Result args.state.tshapes ||= [ ** Processing line: ~ TShape.new(args, 0, 6, block_size, :left, block_offset),~ - Inside source: true *** True Line Result TShape.new(args, 0, 6, block_size, :left, block_offset), ** Processing line: ~ TShape.new(args, 3, 3, block_size, :down, block_offset),~ - Inside source: true *** True Line Result TShape.new(args, 3, 3, block_size, :down, block_offset), ** Processing line: ~ TShape.new(args, 0, 3, block_size, :right, block_offset),~ - Inside source: true *** True Line Result TShape.new(args, 0, 3, block_size, :right, block_offset), ** Processing line: ~ TShape.new(args, 0, 11, block_size, :up, block_offset)~ - Inside source: true *** True Line Result TShape.new(args, 0, 11, block_size, :up, block_offset) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.lines ||= [~ - Inside source: true *** True Line Result args.state.lines ||= [ ** Processing line: ~ Line.new(args,3, 8, block_size, :down, block_offset),~ - Inside source: true *** True Line Result Line.new(args,3, 8, block_size, :down, block_offset), ** Processing line: ~ Line.new(args, 7, 3, block_size, :up, block_offset),~ - Inside source: true *** True Line Result Line.new(args, 7, 3, block_size, :up, block_offset), ** Processing line: ~ Line.new(args, 3, 7, block_size, :right, block_offset)~ - Inside source: true *** True Line Result Line.new(args, 3, 7, block_size, :right, block_offset) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #exit()~ - Inside source: true *** True Line Result #exit() ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def init_balls args~ - Inside source: true *** True Line Result def init_balls args ** Processing line: ~ return unless args.state.num_balls < BALL_COUNT~ - Inside source: true *** True Line Result return unless args.state.num_balls < BALL_COUNT ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #only create a new ball every 10 ticks~ - Inside source: true *** True Line Result #only create a new ball every 10 ticks ** Processing line: ~ return unless args.state.ball_created_at.elapsed_time > 10~ - Inside source: true *** True Line Result return unless args.state.ball_created_at.elapsed_time > 10 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (args.state.num_balls == 0)~ - Inside source: true *** True Line Result if (args.state.num_balls == 0) ** Processing line: ~ args.state.balls.append(Ball.new(args,args.state.num_balls,BALL_COUNT-1, nil, nil))~ - Inside source: true *** True Line Result args.state.balls.append(Ball.new(args,args.state.num_balls,BALL_COUNT-1, nil, nil)) ** Processing line: ~ args.state.ballParents = [args.state.balls[0]]~ - Inside source: true *** True Line Result args.state.ballParents = [args.state.balls[0]] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.balls.append(Ball.new(args,args.state.num_balls,BALL_COUNT-1, args.state.balls.last, nil) )~ - Inside source: true *** True Line Result args.state.balls.append(Ball.new(args,args.state.num_balls,BALL_COUNT-1, args.state.balls.last, nil) ) ** Processing line: ~ args.state.balls[-2].child = args.state.balls[-1]~ - Inside source: true *** True Line Result args.state.balls[-2].child = args.state.balls[-1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.ball_created_at = args.state.tick_count~ - Inside source: true *** True Line Result args.state.ball_created_at = args.state.tick_count ** Processing line: ~ args.state.num_balls += 1~ - Inside source: true *** True Line Result args.state.num_balls += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Render loop~ - Inside source: true *** True Line Result #Render loop ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ bgClr = {r:10, g:10, b:200}~ - Inside source: true *** True Line Result bgClr = {r:10, g:10, b:200} ** Processing line: ~ bgClr = {r:255-30, g:255-30, b:255-30}~ - Inside source: true *** True Line Result bgClr = {r:255-30, g:255-30, b:255-30} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.solids << [0, 0, $args.grid.right, $args.grid.top, bgClr[:r], bgClr[:g], bgClr[:b]];~ - Inside source: true *** True Line Result args.outputs.solids << [0, 0, $args.grid.right, $args.grid.top, bgClr[:r], bgClr[:g], bgClr[:b]]; ** Processing line: ~ args.outputs.borders << args.state.game_area~ - Inside source: true *** True Line Result args.outputs.borders << args.state.game_area ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_instructions args~ - Inside source: true *** True Line Result render_instructions args ** Processing line: ~ render_shapes args~ - Inside source: true *** True Line Result render_shapes args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_balls args~ - Inside source: true *** True Line Result render_balls args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #args.state.rectangle.draw args~ - Inside source: true *** True Line Result #args.state.rectangle.draw args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.sprites << [$args.grid.right-(args.state.board_width + args.grid.w / 8), 0, $args.grid.right, $args.grid.top, "sprites/square-white-2.png", 0, 255, bgClr[:r], bgClr[:g], bgClr[:b]]~ - Inside source: true *** True Line Result args.outputs.sprites << [$args.grid.right-(args.state.board_width + args.grid.w / 8), 0, $args.grid.right, $args.grid.top, "sprites/square-white-2.png", 0, 255, bgClr[:r], bgClr[:g], bgClr[:b]] ** Processing line: ~ args.outputs.sprites << [0, 0, (args.state.board_width + args.grid.w / 8), $args.grid.top, "sprites/square-white-2.png", 0, 255, bgClr[:r], bgClr[:g], bgClr[:b]]~ - Inside source: true *** True Line Result args.outputs.sprites << [0, 0, (args.state.board_width + args.grid.w / 8), $args.grid.top, "sprites/square-white-2.png", 0, 255, bgClr[:r], bgClr[:g], bgClr[:b]] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :render_methods~ - Inside source: true *** True Line Result begin :render_methods ** Processing line: ~ def render_instructions args~ - Inside source: true *** True Line Result def render_instructions args ** Processing line: ~ #gtk.current_framerate~ - Inside source: true *** True Line Result #gtk.current_framerate ** Processing line: ~ args.outputs.labels << [20, $args.grid.top-20, "FPS: " + $gtk.current_framerate.to_s]~ - Inside source: true *** True Line Result args.outputs.labels << [20, $args.grid.top-20, "FPS: " + $gtk.current_framerate.to_s] ** Processing line: ~ if (args.state.balls != nil && args.state.balls[0] != nil)~ - Inside source: true *** True Line Result if (args.state.balls != nil && args.state.balls[0] != nil) ** Processing line: ~ bx = args.state.balls[0].velocity.x~ - Inside source: true *** True Line Result bx = args.state.balls[0].velocity.x ** Processing line: ~ by = args.state.balls[0].velocity.y~ - Inside source: true *** True Line Result by = args.state.balls[0].velocity.y ** Processing line: ~ bmg = (bx**2.0 + by**2.0)**0.5~ - Inside source: true *** True Line Result bmg = (bx**2.0 + by**2.0)**0.5 ** Processing line: ~ args.outputs.labels << [20, $args.grid.top-20-20, "V: " + bmg.to_s ]~ - Inside source: true *** True Line Result args.outputs.labels << [20, $args.grid.top-20-20, "V: " + bmg.to_s ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_shapes args~ - Inside source: true *** True Line Result def render_shapes args ** Processing line: ~ for s in args.state.squares~ - Inside source: true *** True Line Result for s in args.state.squares ** Processing line: ~ s.draw args~ - Inside source: true *** True Line Result s.draw args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ for l in args.state.lines~ - Inside source: true *** True Line Result for l in args.state.lines ** Processing line: ~ l.draw args~ - Inside source: true *** True Line Result l.draw args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ for t in args.state.tshapes~ - Inside source: true *** True Line Result for t in args.state.tshapes ** Processing line: ~ t.draw args~ - Inside source: true *** True Line Result t.draw args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_balls args~ - Inside source: true *** True Line Result def render_balls args ** Processing line: ~ #args.state.balls.each do |ball|~ - Inside source: true *** True Line Result #args.state.balls.each do |ball| ** Processing line: ~ #ball.draw args~ - Inside source: true *** True Line Result #ball.draw args ** Processing line: ~ #end~ - Inside source: true *** True Line Result #end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.sprites << args.state.balls.map do |ball|~ - Inside source: true *** True Line Result args.outputs.sprites << args.state.balls.map do |ball| ** Processing line: ~ ball.getDraw args~ - Inside source: true *** True Line Result ball.getDraw args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Calls all methods necessary for performing calculations~ - Inside source: true *** True Line Result #Calls all methods necessary for performing calculations ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ for b in args.state.ballParents~ - Inside source: true *** True Line Result for b in args.state.ballParents ** Processing line: ~ b.update args~ - Inside source: true *** True Line Result b.update args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ for s in args.state.squares~ - Inside source: true *** True Line Result for s in args.state.squares ** Processing line: ~ s.update args~ - Inside source: true *** True Line Result s.update args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ for l in args.state.lines~ - Inside source: true *** True Line Result for l in args.state.lines ** Processing line: ~ l.update args~ - Inside source: true *** True Line Result l.update args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ for t in args.state.tshapes~ - Inside source: true *** True Line Result for t in args.state.tshapes ** Processing line: ~ t.update args~ - Inside source: true *** True Line Result t.update args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :calc_methods~ - Inside source: true *** True Line Result begin :calc_methods ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Arbitrary Collision - paddle.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Arbitrary Collision - paddle.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/paddle.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/paddle.rb ** Processing line: ~ class Paddle~ - Inside source: true *** True Line Result class Paddle ** Processing line: ~ attr_accessor :enabled~ - Inside source: true *** True Line Result attr_accessor :enabled ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize ()~ - Inside source: true *** True Line Result def initialize () ** Processing line: ~ @x=WIDTH/2~ - Inside source: true *** True Line Result @x=WIDTH/2 ** Processing line: ~ @y=100~ - Inside source: true *** True Line Result @y=100 ** Processing line: ~ @width=100~ - Inside source: true *** True Line Result @width=100 ** Processing line: ~ @height=20~ - Inside source: true *** True Line Result @height=20 ** Processing line: ~ @speed=10~ - Inside source: true *** True Line Result @speed=10 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @xyCollision = LinearCollider.new({x: @x,y: @y+@height+5}, {x: @x+@width, y: @y+@height+5})~ - Inside source: true *** True Line Result @xyCollision = LinearCollider.new({x: @x,y: @y+@height+5}, {x: @x+@width, y: @y+@height+5}) ** Processing line: ~ @xyCollision2 = LinearCollider.new({x: @x,y: @y}, {x: @x+@width, y: @y}, :pos)~ - Inside source: true *** True Line Result @xyCollision2 = LinearCollider.new({x: @x,y: @y}, {x: @x+@width, y: @y}, :pos) ** Processing line: ~ @xyCollision3 = LinearCollider.new({x: @x,y: @y}, {x: @x, y: @y+@height+5})~ - Inside source: true *** True Line Result @xyCollision3 = LinearCollider.new({x: @x,y: @y}, {x: @x, y: @y+@height+5}) ** Processing line: ~ @xyCollision4 = LinearCollider.new({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height+5}, :pos)~ - Inside source: true *** True Line Result @xyCollision4 = LinearCollider.new({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height+5}, :pos) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @enabled = true~ - Inside source: true *** True Line Result @enabled = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def update args~ - Inside source: true *** True Line Result def update args ** Processing line: ~ @xyCollision.resetPoints({x: @x,y: @y+@height+5}, {x: @x+@width, y: @y+@height+5})~ - Inside source: true *** True Line Result @xyCollision.resetPoints({x: @x,y: @y+@height+5}, {x: @x+@width, y: @y+@height+5}) ** Processing line: ~ @xyCollision2.resetPoints({x: @x,y: @y}, {x: @x+@width, y: @y})~ - Inside source: true *** True Line Result @xyCollision2.resetPoints({x: @x,y: @y}, {x: @x+@width, y: @y}) ** Processing line: ~ @xyCollision3.resetPoints({x: @x,y: @y}, {x: @x, y: @y+@height+5})~ - Inside source: true *** True Line Result @xyCollision3.resetPoints({x: @x,y: @y}, {x: @x, y: @y+@height+5}) ** Processing line: ~ @xyCollision4.resetPoints({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height+5})~ - Inside source: true *** True Line Result @xyCollision4.resetPoints({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height+5}) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @xyCollision.update args~ - Inside source: true *** True Line Result @xyCollision.update args ** Processing line: ~ @xyCollision2.update args~ - Inside source: true *** True Line Result @xyCollision2.update args ** Processing line: ~ @xyCollision3.update args~ - Inside source: true *** True Line Result @xyCollision3.update args ** Processing line: ~ @xyCollision4.update args~ - Inside source: true *** True Line Result @xyCollision4.update args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.inputs.keyboard.key_held.left ||= false~ - Inside source: true *** True Line Result args.inputs.keyboard.key_held.left ||= false ** Processing line: ~ args.inputs.keyboard.key_held.right ||= false~ - Inside source: true *** True Line Result args.inputs.keyboard.key_held.right ||= false ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if not (args.inputs.keyboard.key_held.left == args.inputs.keyboard.key_held.right)~ - Inside source: true *** True Line Result if not (args.inputs.keyboard.key_held.left == args.inputs.keyboard.key_held.right) ** Processing line: ~ if args.inputs.keyboard.key_held.left && @enabled~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_held.left && @enabled ** Processing line: ~ @x-=@speed~ - Inside source: true *** True Line Result @x-=@speed ** Processing line: ~ elsif args.inputs.keyboard.key_held.right && @enabled~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_held.right && @enabled ** Processing line: ~ @x+=@speed~ - Inside source: true *** True Line Result @x+=@speed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ xmin =WIDTH/4~ - Inside source: true *** True Line Result xmin =WIDTH/4 ** Processing line: ~ xmax = 3*(WIDTH/4)~ - Inside source: true *** True Line Result xmax = 3*(WIDTH/4) ** Processing line: ~ @x = (@x+@width > xmax) ? xmax-@width : (@x xmax) ? xmax-@width : (@x= [@pointA.x,@pointB.x].min+(@extension == :pos ? -@thickness : 0) &&~ - Inside source: true *** True Line Result point.x >= [@pointA.x,@pointB.x].min+(@extension == :pos ? -@thickness : 0) && ** Processing line: ~ point.x <= [@pointA.x,@pointB.x].max+(@extension == :neg ? @thickness : 0) &&~ - Inside source: true *** True Line Result point.x <= [@pointA.x,@pointB.x].max+(@extension == :neg ? @thickness : 0) && ** Processing line: ~ point.y >= [@pointA.y,@pointB.y].min && point.y <= [@pointA.y,@pointB.y].max~ - Inside source: true *** True Line Result point.y >= [@pointA.y,@pointB.y].min && point.y <= [@pointA.y,@pointB.y].max ** Processing line: ~ return true~ - Inside source: true *** True Line Result return true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ isNegInLine = @extension == :neg &&~ - Inside source: true *** True Line Result isNegInLine = @extension == :neg && ** Processing line: ~ point.y <= slope(@pointA, @pointB)*point.x+intercept(@pointA,@pointB) &&~ - Inside source: true *** True Line Result point.y <= slope(@pointA, @pointB)*point.x+intercept(@pointA,@pointB) && ** Processing line: ~ point.y >= point.x*slope(@pointAExtended, @pointBExtended)+intercept(@pointAExtended,@pointBExtended)~ - Inside source: true *** True Line Result point.y >= point.x*slope(@pointAExtended, @pointBExtended)+intercept(@pointAExtended,@pointBExtended) ** Processing line: ~ isPosInLine = @extension == :pos &&~ - Inside source: true *** True Line Result isPosInLine = @extension == :pos && ** Processing line: ~ point.y >= slope(@pointA, @pointB)*point.x+intercept(@pointA,@pointB) &&~ - Inside source: true *** True Line Result point.y >= slope(@pointA, @pointB)*point.x+intercept(@pointA,@pointB) && ** Processing line: ~ point.y <= point.x*slope(@pointAExtended, @pointBExtended)+intercept(@pointAExtended,@pointBExtended)~ - Inside source: true *** True Line Result point.y <= point.x*slope(@pointAExtended, @pointBExtended)+intercept(@pointAExtended,@pointBExtended) ** Processing line: ~ isInBoxBounds = point.x >= [@pointA.x,@pointB.x].min &&~ - Inside source: true *** True Line Result isInBoxBounds = point.x >= [@pointA.x,@pointB.x].min && ** Processing line: ~ point.x <= [@pointA.x,@pointB.x].max &&~ - Inside source: true *** True Line Result point.x <= [@pointA.x,@pointB.x].max && ** Processing line: ~ point.y >= [@pointA.y,@pointB.y].min+(@extension == :neg ? -@thickness : 0) &&~ - Inside source: true *** True Line Result point.y >= [@pointA.y,@pointB.y].min+(@extension == :neg ? -@thickness : 0) && ** Processing line: ~ point.y <= [@pointA.y,@pointB.y].max+(@extension == :pos ? @thickness : 0)~ - Inside source: true *** True Line Result point.y <= [@pointA.y,@pointB.y].max+(@extension == :pos ? @thickness : 0) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return isInBoxBounds && (isNegInLine || isPosInLine)~ - Inside source: true *** True Line Result return isInBoxBounds && (isNegInLine || isPosInLine) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def getRepelMagnitude (fbx, fby, vrx, vry, args)~ - Inside source: true *** True Line Result def getRepelMagnitude (fbx, fby, vrx, vry, args) ** Processing line: ~ a = fbx ; b = vrx ; c = fby~ - Inside source: true *** True Line Result a = fbx ; b = vrx ; c = fby ** Processing line: ~ d = vry ; e = args.state.ball.velocity.mag~ - Inside source: true *** True Line Result d = vry ; e = args.state.ball.velocity.mag ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if b**2 + d**2 == 0~ - Inside source: true *** True Line Result if b**2 + d**2 == 0 ** Processing line: ~ puts "magnitude error"~ - Inside source: true *** True Line Result puts "magnitude error" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ x1 = (-a*b+-c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 + d**2 - a**2 * d**2)**0.5)/(b**2 + d**2)~ - Inside source: true *** True Line Result x1 = (-a*b+-c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 + d**2 - a**2 * d**2)**0.5)/(b**2 + d**2) ** Processing line: ~ x2 = -((a*b + c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 * d**2 - a**2 * d**2)**0.5)/(b**2 + d**2))~ - Inside source: true *** True Line Result x2 = -((a*b + c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 * d**2 - a**2 * d**2)**0.5)/(b**2 + d**2)) ** Processing line: ~ return ((a+x1*b)**2 + (c+x1*d)**2 == e**2) ? x1 : x2~ - Inside source: true *** True Line Result return ((a+x1*b)**2 + (c+x1*d)**2 == e**2) ? x1 : x2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def update args~ - Inside source: true *** True Line Result def update args ** Processing line: ~ #each of the four points on the square ball - NOTE simple to extend to a circle~ - Inside source: true *** True Line Result #each of the four points on the square ball - NOTE simple to extend to a circle ** Processing line: ~ points= [ {x: args.state.ball.xy.x, y: args.state.ball.xy.y},~ - Inside source: true *** True Line Result points= [ {x: args.state.ball.xy.x, y: args.state.ball.xy.y}, ** Processing line: ~ {x: args.state.ball.xy.x+args.state.ball.width, y: args.state.ball.xy.y},~ - Inside source: true *** True Line Result {x: args.state.ball.xy.x+args.state.ball.width, y: args.state.ball.xy.y}, ** Processing line: ~ {x: args.state.ball.xy.x, y: args.state.ball.xy.y+args.state.ball.height},~ - Inside source: true *** True Line Result {x: args.state.ball.xy.x, y: args.state.ball.xy.y+args.state.ball.height}, ** Processing line: ~ {x: args.state.ball.xy.x+args.state.ball.width, y: args.state.ball.xy.y + args.state.ball.height}~ - Inside source: true *** True Line Result {x: args.state.ball.xy.x+args.state.ball.width, y: args.state.ball.xy.y + args.state.ball.height} ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #for each point p in points~ - Inside source: true *** True Line Result #for each point p in points ** Processing line: ~ for point in points~ - Inside source: true *** True Line Result for point in points ** Processing line: ~ #isCollision.md has more information on this section~ - Inside source: true *** True Line Result #isCollision.md has more information on this section ** Processing line: ~ #TODO: section can certainly be simplifyed~ - Inside source: true *** True Line Result #TODO: section can certainly be simplifyed ** Processing line: ~ if isCollision?(point)~ - Inside source: true *** True Line Result if isCollision?(point) ** Processing line: ~ u = Vector2d.new(1.0,((slope(@pointA, @pointB)==0) ? INFINITY : -1/slope(@pointA, @pointB))*1.0).normalize #normal perpendicular (to line segment) vector~ - Inside source: true *** True Line Result u = Vector2d.new(1.0,((slope(@pointA, @pointB)==0) ? INFINITY : -1/slope(@pointA, @pointB))*1.0).normalize #normal perpendicular (to line segment) vector ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #the vector with the repeling force can be u or -u depending of where the ball was coming from in relation to the line segment~ - Inside source: true *** True Line Result #the vector with the repeling force can be u or -u depending of where the ball was coming from in relation to the line segment ** Processing line: ~ previousBallPosition=Vector2d.new(point.x-args.state.ball.velocity.x,point.y-args.state.ball.velocity.y)~ - Inside source: true *** True Line Result previousBallPosition=Vector2d.new(point.x-args.state.ball.velocity.x,point.y-args.state.ball.velocity.y) ** Processing line: ~ choiceA = (u.mult(1))~ - Inside source: true *** True Line Result choiceA = (u.mult(1)) ** Processing line: ~ choiceB = (u.mult(-1))~ - Inside source: true *** True Line Result choiceB = (u.mult(-1)) ** Processing line: ~ vectorRepel = nil~ - Inside source: true *** True Line Result vectorRepel = nil ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (slope(@pointA, @pointB))!=INFINITY && u.y < 0~ - Inside source: true *** True Line Result if (slope(@pointA, @pointB))!=INFINITY && u.y < 0 ** Processing line: ~ choiceA, choiceB = choiceB, choiceA~ - Inside source: true *** True Line Result choiceA, choiceB = choiceB, choiceA ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ vectorRepel = (previousBallPosition.y > calcY(@pointA, @pointB, previousBallPosition.x)) ? choiceA : choiceB~ - Inside source: true *** True Line Result vectorRepel = (previousBallPosition.y > calcY(@pointA, @pointB, previousBallPosition.x)) ? choiceA : choiceB ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #vectorRepel = (previousBallPosition.y > slope(@pointA, @pointB)*previousBallPosition.x+intercept(@pointA,@pointB)) ? choiceA : choiceB)~ - Inside source: true *** True Line Result #vectorRepel = (previousBallPosition.y > slope(@pointA, @pointB)*previousBallPosition.x+intercept(@pointA,@pointB)) ? choiceA : choiceB) ** Processing line: ~ if (slope(@pointA, @pointB) == INFINITY) #slope INFINITY breaks down in the above test, ergo it requires a custom test~ - Inside source: true *** True Line Result if (slope(@pointA, @pointB) == INFINITY) #slope INFINITY breaks down in the above test, ergo it requires a custom test ** Processing line: ~ vectorRepel = (previousBallPosition.x > @pointA.x) ? (u.mult(1)) : (u.mult(-1))~ - Inside source: true *** True Line Result vectorRepel = (previousBallPosition.x > @pointA.x) ? (u.mult(1)) : (u.mult(-1)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ #puts (" " + $t[0].to_s + "," + $t[1].to_s + " " + $t[2].to_s + "," + $t[3].to_s + " " + " " + u.x.to_s + "," + u.y.to_s)~ - Inside source: true *** True Line Result #puts (" " + $t[0].to_s + "," + $t[1].to_s + " " + $t[2].to_s + "," + $t[3].to_s + " " + " " + u.x.to_s + "," + u.y.to_s) ** Processing line: ~ #vectorRepel now has the repeling force~ - Inside source: true *** True Line Result #vectorRepel now has the repeling force ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ mag = args.state.ball.velocity.mag~ - Inside source: true *** True Line Result mag = args.state.ball.velocity.mag ** Processing line: ~ theta_ball=Math.atan2(args.state.ball.velocity.y,args.state.ball.velocity.x) #the angle of the ball's velocity~ - Inside source: true *** True Line Result theta_ball=Math.atan2(args.state.ball.velocity.y,args.state.ball.velocity.x) #the angle of the ball's velocity ** Processing line: ~ theta_repel=Math.atan2(vectorRepel.y,vectorRepel.x) #the angle of the repeling force~ - Inside source: true *** True Line Result theta_repel=Math.atan2(vectorRepel.y,vectorRepel.x) #the angle of the repeling force ** Processing line: ~ #puts ("theta:" + theta_ball.to_s + " " + theta_repel.to_s) #theta okay~ - Inside source: true *** True Line Result #puts ("theta:" + theta_ball.to_s + " " + theta_repel.to_s) #theta okay ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ fbx = mag * Math.cos(theta_ball) #the x component of the ball's velocity~ - Inside source: true *** True Line Result fbx = mag * Math.cos(theta_ball) #the x component of the ball's velocity ** Processing line: ~ fby = mag * Math.sin(theta_ball) #the y component of the ball's velocity~ - Inside source: true *** True Line Result fby = mag * Math.sin(theta_ball) #the y component of the ball's velocity ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ repelMag = getRepelMagnitude(fbx, fby, vectorRepel.x, vectorRepel.y, args)~ - Inside source: true *** True Line Result repelMag = getRepelMagnitude(fbx, fby, vectorRepel.x, vectorRepel.y, args) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ frx = repelMag* Math.cos(theta_repel) #the x component of the repel's velocity | magnitude is set to twice of fbx~ - Inside source: true *** True Line Result frx = repelMag* Math.cos(theta_repel) #the x component of the repel's velocity | magnitude is set to twice of fbx ** Processing line: ~ fry = repelMag* Math.sin(theta_repel) #the y component of the repel's velocity | magnitude is set to twice of fby~ - Inside source: true *** True Line Result fry = repelMag* Math.sin(theta_repel) #the y component of the repel's velocity | magnitude is set to twice of fby ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ fsumx = fbx+frx #sum of x forces~ - Inside source: true *** True Line Result fsumx = fbx+frx #sum of x forces ** Processing line: ~ fsumy = fby+fry #sum of y forces~ - Inside source: true *** True Line Result fsumy = fby+fry #sum of y forces ** Processing line: ~ fr = mag#fr is the resulting magnitude~ - Inside source: true *** True Line Result fr = mag#fr is the resulting magnitude ** Processing line: ~ thetaNew = Math.atan2(fsumy, fsumx) #thetaNew is the resulting angle~ - Inside source: true *** True Line Result thetaNew = Math.atan2(fsumy, fsumx) #thetaNew is the resulting angle ** Processing line: ~ xnew = fr*Math.cos(thetaNew) #resulting x velocity~ - Inside source: true *** True Line Result xnew = fr*Math.cos(thetaNew) #resulting x velocity ** Processing line: ~ ynew = fr*Math.sin(thetaNew) #resulting y velocity~ - Inside source: true *** True Line Result ynew = fr*Math.sin(thetaNew) #resulting y velocity ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.ball.velocity = Vector2d.new(xnew,ynew)~ - Inside source: true *** True Line Result args.state.ball.velocity = Vector2d.new(xnew,ynew) ** Processing line: ~ #args.state.ball.xy.add(args.state.ball.velocity)~ - Inside source: true *** True Line Result #args.state.ball.xy.add(args.state.ball.velocity) ** Processing line: ~ break #no need to check the other points ?~ - Inside source: true *** True Line Result break #no need to check the other points ? ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end #end update~ - Inside source: true *** True Line Result end #end update ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Collision With Object Removal - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Collision With Object Removal - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/10_collision_with_object_removal/app/main.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/10_collision_with_object_removal/app/main.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ INFINITY= 10**10~ - Inside source: true *** True Line Result INFINITY= 10**10 ** Processing line: ~ WIDTH=1280~ - Inside source: true *** True Line Result WIDTH=1280 ** Processing line: ~ HEIGHT=720~ - Inside source: true *** True Line Result HEIGHT=720 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ require 'app/vector2d.rb'~ - Inside source: true *** True Line Result require 'app/vector2d.rb' ** Processing line: ~ require 'app/paddle.rb'~ - Inside source: true *** True Line Result require 'app/paddle.rb' ** Processing line: ~ require 'app/ball.rb'~ - Inside source: true *** True Line Result require 'app/ball.rb' ** Processing line: ~ require 'app/linear_collider.rb'~ - Inside source: true *** True Line Result require 'app/linear_collider.rb' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Method to init default values~ - Inside source: true *** True Line Result #Method to init default values ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ args.state.game_board ||= [(args.grid.w / 2 - args.grid.w / 4), 0, (args.grid.w / 2), args.grid.h]~ - Inside source: true *** True Line Result args.state.game_board ||= [(args.grid.w / 2 - args.grid.w / 4), 0, (args.grid.w / 2), args.grid.h] ** Processing line: ~ args.state.bricks ||= []~ - Inside source: true *** True Line Result args.state.bricks ||= [] ** Processing line: ~ args.state.num_bricks ||= 0~ - Inside source: true *** True Line Result args.state.num_bricks ||= 0 ** Processing line: ~ args.state.game_over_at ||= 0~ - Inside source: true *** True Line Result args.state.game_over_at ||= 0 ** Processing line: ~ args.state.paddle ||= Paddle.new~ - Inside source: true *** True Line Result args.state.paddle ||= Paddle.new ** Processing line: ~ args.state.ball ||= Ball.new~ - Inside source: true *** True Line Result args.state.ball ||= Ball.new ** Processing line: ~ args.state.westWall ||= LinearCollider.new({x: args.grid.w/4, y: 0}, {x: args.grid.w/4, y: args.grid.h}, :pos)~ - Inside source: true *** True Line Result args.state.westWall ||= LinearCollider.new({x: args.grid.w/4, y: 0}, {x: args.grid.w/4, y: args.grid.h}, :pos) ** Processing line: ~ args.state.eastWall ||= LinearCollider.new({x: 3*args.grid.w*0.25, y: 0}, {x: 3*args.grid.w*0.25, y: args.grid.h})~ - Inside source: true *** True Line Result args.state.eastWall ||= LinearCollider.new({x: 3*args.grid.w*0.25, y: 0}, {x: 3*args.grid.w*0.25, y: args.grid.h}) ** Processing line: ~ args.state.southWall ||= LinearCollider.new({x: 0, y: 0}, {x: args.grid.w, y: 0})~ - Inside source: true *** True Line Result args.state.southWall ||= LinearCollider.new({x: 0, y: 0}, {x: args.grid.w, y: 0}) ** Processing line: ~ args.state.northWall ||= LinearCollider.new({x: 0, y:args.grid.h}, {x: args.grid.w, y: args.grid.h}, :pos)~ - Inside source: true *** True Line Result args.state.northWall ||= LinearCollider.new({x: 0, y:args.grid.h}, {x: args.grid.w, y: args.grid.h}, :pos) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #args.state.testWall ||= LinearCollider.new({x:0 , y:0},{x:args.grid.w, y:args.grid.h})~ - Inside source: true *** True Line Result #args.state.testWall ||= LinearCollider.new({x:0 , y:0},{x:args.grid.w, y:args.grid.h}) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Render loop~ - Inside source: true *** True Line Result #Render loop ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ render_instructions args~ - Inside source: true *** True Line Result render_instructions args ** Processing line: ~ render_board args~ - Inside source: true *** True Line Result render_board args ** Processing line: ~ render_bricks args~ - Inside source: true *** True Line Result render_bricks args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :render_methods~ - Inside source: true *** True Line Result begin :render_methods ** Processing line: ~ #Method to display the instructions of the game~ - Inside source: true *** True Line Result #Method to display the instructions of the game ** Processing line: ~ def render_instructions args~ - Inside source: true *** True Line Result def render_instructions args ** Processing line: ~ args.outputs.labels << [225, args.grid.h - 30, "← and → to move the paddle left and right", 0, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [225, args.grid.h - 30, "← and → to move the paddle left and right", 0, 1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_board args~ - Inside source: true *** True Line Result def render_board args ** Processing line: ~ args.outputs.borders << args.state.game_board~ - Inside source: true *** True Line Result args.outputs.borders << args.state.game_board ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_bricks args~ - Inside source: true *** True Line Result def render_bricks args ** Processing line: ~ args.outputs.solids << args.state.bricks.map(&:rect)~ - Inside source: true *** True Line Result args.outputs.solids << args.state.bricks.map(&:rect) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Calls all methods necessary for performing calculations~ - Inside source: true *** True Line Result #Calls all methods necessary for performing calculations ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ add_new_bricks args~ - Inside source: true *** True Line Result add_new_bricks args ** Processing line: ~ reset_game args~ - Inside source: true *** True Line Result reset_game args ** Processing line: ~ calc_collision args~ - Inside source: true *** True Line Result calc_collision args ** Processing line: ~ win_game args~ - Inside source: true *** True Line Result win_game args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.westWall.update args~ - Inside source: true *** True Line Result args.state.westWall.update args ** Processing line: ~ args.state.eastWall.update args~ - Inside source: true *** True Line Result args.state.eastWall.update args ** Processing line: ~ args.state.southWall.update args~ - Inside source: true *** True Line Result args.state.southWall.update args ** Processing line: ~ args.state.northWall.update args~ - Inside source: true *** True Line Result args.state.northWall.update args ** Processing line: ~ args.state.paddle.update args~ - Inside source: true *** True Line Result args.state.paddle.update args ** Processing line: ~ args.state.ball.update args~ - Inside source: true *** True Line Result args.state.ball.update args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #args.state.testWall.update args~ - Inside source: true *** True Line Result #args.state.testWall.update args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.paddle.render args~ - Inside source: true *** True Line Result args.state.paddle.render args ** Processing line: ~ args.state.ball.render args~ - Inside source: true *** True Line Result args.state.ball.render args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :calc_methods~ - Inside source: true *** True Line Result begin :calc_methods ** Processing line: ~ def add_new_bricks args~ - Inside source: true *** True Line Result def add_new_bricks args ** Processing line: ~ return if args.state.num_bricks > 40~ - Inside source: true *** True Line Result return if args.state.num_bricks > 40 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Width of the game board is 640px~ - Inside source: true *** True Line Result #Width of the game board is 640px ** Processing line: ~ brick_width = (args.grid.w / 2) / 10~ - Inside source: true *** True Line Result brick_width = (args.grid.w / 2) / 10 ** Processing line: ~ brick_height = brick_width / 2~ - Inside source: true *** True Line Result brick_height = brick_width / 2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ (4).map_with_index do |y|~ - Inside source: true *** True Line Result (4).map_with_index do |y| ** Processing line: ~ #Make a box that is 10 bricks wide and 4 bricks tall~ - Inside source: true *** True Line Result #Make a box that is 10 bricks wide and 4 bricks tall ** Processing line: ~ args.state.bricks += (10).map_with_index do |x|~ - Inside source: true *** True Line Result args.state.bricks += (10).map_with_index do |x| ** Processing line: ~ args.state.new_entity(:brick) do |b|~ - Inside source: true *** True Line Result args.state.new_entity(:brick) do |b| ** Processing line: ~ b.x = x * brick_width + (args.grid.w / 2 - args.grid.w / 4)~ - Inside source: true *** True Line Result b.x = x * brick_width + (args.grid.w / 2 - args.grid.w / 4) ** Processing line: ~ b.y = args.grid.h - ((y + 1) * brick_height)~ - Inside source: true *** True Line Result b.y = args.grid.h - ((y + 1) * brick_height) ** Processing line: ~ b.rect = [b.x + 1, b.y - 1, brick_width - 2, brick_height - 2, 235, 50 * y, 52]~ - Inside source: true *** True Line Result b.rect = [b.x + 1, b.y - 1, brick_width - 2, brick_height - 2, 235, 50 * y, 52] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Add linear colliders to the brick~ - Inside source: true *** True Line Result #Add linear colliders to the brick ** Processing line: ~ b.collider_bottom = LinearCollider.new([(b.x-2), (b.y-5)], [(b.x+brick_width+1), (b.y-5)], :pos, brick_height)~ - Inside source: true *** True Line Result b.collider_bottom = LinearCollider.new([(b.x-2), (b.y-5)], [(b.x+brick_width+1), (b.y-5)], :pos, brick_height) ** Processing line: ~ b.collider_right = LinearCollider.new([(b.x+brick_width+1), (b.y-5)], [(b.x+brick_width+1), (b.y+brick_height+1)], :pos)~ - Inside source: true *** True Line Result b.collider_right = LinearCollider.new([(b.x+brick_width+1), (b.y-5)], [(b.x+brick_width+1), (b.y+brick_height+1)], :pos) ** Processing line: ~ b.collider_left = LinearCollider.new([(b.x-2), (b.y-5)], [(b.x-2), (b.y+brick_height+1)], :neg)~ - Inside source: true *** True Line Result b.collider_left = LinearCollider.new([(b.x-2), (b.y-5)], [(b.x-2), (b.y+brick_height+1)], :neg) ** Processing line: ~ b.collider_top = LinearCollider.new([(b.x-2), (b.y+brick_height+1)], [(b.x+brick_width+1), (b.y+brick_height+1)], :neg)~ - Inside source: true *** True Line Result b.collider_top = LinearCollider.new([(b.x-2), (b.y+brick_height+1)], [(b.x+brick_width+1), (b.y+brick_height+1)], :neg) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @xyCollision = LinearCollider.new({x: @x,y: @y+@height}, {x: @x+@width, y: @y+@height})~ - Inside source: true *** True Line Result # @xyCollision = LinearCollider.new({x: @x,y: @y+@height}, {x: @x+@width, y: @y+@height}) ** Processing line: ~ # @xyCollision2 = LinearCollider.new({x: @x,y: @y}, {x: @x+@width, y: @y}, :pos)~ - Inside source: true *** True Line Result # @xyCollision2 = LinearCollider.new({x: @x,y: @y}, {x: @x+@width, y: @y}, :pos) ** Processing line: ~ # @xyCollision3 = LinearCollider.new({x: @x,y: @y}, {x: @x, y: @y+@height})~ - Inside source: true *** True Line Result # @xyCollision3 = LinearCollider.new({x: @x,y: @y}, {x: @x, y: @y+@height}) ** Processing line: ~ # @xyCollision4 = LinearCollider.new({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height}, :pos)~ - Inside source: true *** True Line Result # @xyCollision4 = LinearCollider.new({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height}, :pos) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ b.broken = false~ - Inside source: true *** True Line Result b.broken = false ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.num_bricks += 1~ - Inside source: true *** True Line Result args.state.num_bricks += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset_game args~ - Inside source: true *** True Line Result def reset_game args ** Processing line: ~ if args.state.ball.xy.y < 20 && args.state.game_over_at.elapsed_time > 60~ - Inside source: true *** True Line Result if args.state.ball.xy.y < 20 && args.state.game_over_at.elapsed_time > 60 ** Processing line: ~ #Freeze the ball~ - Inside source: true *** True Line Result #Freeze the ball ** Processing line: ~ args.state.ball.velocity.x = 0~ - Inside source: true *** True Line Result args.state.ball.velocity.x = 0 ** Processing line: ~ args.state.ball.velocity.y = 0~ - Inside source: true *** True Line Result args.state.ball.velocity.y = 0 ** Processing line: ~ #Freeze the paddle~ - Inside source: true *** True Line Result #Freeze the paddle ** Processing line: ~ args.state.paddle.enabled = false~ - Inside source: true *** True Line Result args.state.paddle.enabled = false ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.game_over_at = args.state.tick_count~ - Inside source: true *** True Line Result args.state.game_over_at = args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.game_over_at.elapsed_time < 60 && args.state.tick_count > 60 && args.state.bricks.count != 0~ - Inside source: true *** True Line Result if args.state.game_over_at.elapsed_time < 60 && args.state.tick_count > 60 && args.state.bricks.count != 0 ** Processing line: ~ #Display a "Game over" message~ - Inside source: true *** True Line Result #Display a "Game over" message ** Processing line: ~ args.outputs.labels << [100, 100, "GAME OVER", 10]~ - Inside source: true *** True Line Result args.outputs.labels << [100, 100, "GAME OVER", 10] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #If 60 frames have passed since the game ended, restart the game~ - Inside source: true *** True Line Result #If 60 frames have passed since the game ended, restart the game ** Processing line: ~ if args.state.game_over_at != 0 && args.state.game_over_at.elapsed_time == 60~ - Inside source: true *** True Line Result if args.state.game_over_at != 0 && args.state.game_over_at.elapsed_time == 60 ** Processing line: ~ # FIXME: only put value types in state~ - Inside source: true *** True Line Result # FIXME: only put value types in state ** Processing line: ~ args.state.ball = Ball.new~ - Inside source: true *** True Line Result args.state.ball = Ball.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # FIXME: only put value types in state~ - Inside source: true *** True Line Result # FIXME: only put value types in state ** Processing line: ~ args.state.paddle = Paddle.new~ - Inside source: true *** True Line Result args.state.paddle = Paddle.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.bricks = []~ - Inside source: true *** True Line Result args.state.bricks = [] ** Processing line: ~ args.state.num_bricks = 0~ - Inside source: true *** True Line Result args.state.num_bricks = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_collision args~ - Inside source: true *** True Line Result def calc_collision args ** Processing line: ~ #Remove the brick if it is hit with the ball~ - Inside source: true *** True Line Result #Remove the brick if it is hit with the ball ** Processing line: ~ ball = args.state.ball~ - Inside source: true *** True Line Result ball = args.state.ball ** Processing line: ~ ball_rect = [ball.xy.x, ball.xy.y, 20, 20]~ - Inside source: true *** True Line Result ball_rect = [ball.xy.x, ball.xy.y, 20, 20] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Loop through each brick to see if the ball is colliding with it~ - Inside source: true *** True Line Result #Loop through each brick to see if the ball is colliding with it ** Processing line: ~ args.state.bricks.each do |b|~ - Inside source: true *** True Line Result args.state.bricks.each do |b| ** Processing line: ~ if b.rect.intersect_rect?(ball_rect)~ - Inside source: true *** True Line Result if b.rect.intersect_rect?(ball_rect) ** Processing line: ~ #Run the linear collider for the brick if there is a collision~ - Inside source: true *** True Line Result #Run the linear collider for the brick if there is a collision ** Processing line: ~ b[:collider_bottom].update args~ - Inside source: true *** True Line Result b[:collider_bottom].update args ** Processing line: ~ b[:collider_right].update args~ - Inside source: true *** True Line Result b[:collider_right].update args ** Processing line: ~ b[:collider_left].update args~ - Inside source: true *** True Line Result b[:collider_left].update args ** Processing line: ~ b[:collider_top].update args~ - Inside source: true *** True Line Result b[:collider_top].update args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ b.broken = true~ - Inside source: true *** True Line Result b.broken = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.bricks = args.state.bricks.reject(&:broken)~ - Inside source: true *** True Line Result args.state.bricks = args.state.bricks.reject(&:broken) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def win_game args~ - Inside source: true *** True Line Result def win_game args ** Processing line: ~ if args.state.bricks.count == 0 && args.state.game_over_at.elapsed_time > 60~ - Inside source: true *** True Line Result if args.state.bricks.count == 0 && args.state.game_over_at.elapsed_time > 60 ** Processing line: ~ #Freeze the ball~ - Inside source: true *** True Line Result #Freeze the ball ** Processing line: ~ args.state.ball.velocity.x = 0~ - Inside source: true *** True Line Result args.state.ball.velocity.x = 0 ** Processing line: ~ args.state.ball.velocity.y = 0~ - Inside source: true *** True Line Result args.state.ball.velocity.y = 0 ** Processing line: ~ #Freeze the paddle~ - Inside source: true *** True Line Result #Freeze the paddle ** Processing line: ~ args.state.paddle.enabled = false~ - Inside source: true *** True Line Result args.state.paddle.enabled = false ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.game_over_at = args.state.tick_count~ - Inside source: true *** True Line Result args.state.game_over_at = args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.game_over_at.elapsed_time < 60 && args.state.tick_count > 60 && args.state.bricks.count == 0~ - Inside source: true *** True Line Result if args.state.game_over_at.elapsed_time < 60 && args.state.tick_count > 60 && args.state.bricks.count == 0 ** Processing line: ~ #Display a "Game over" message~ - Inside source: true *** True Line Result #Display a "Game over" message ** Processing line: ~ args.outputs.labels << [100, 100, "CONGRATULATIONS!", 10]~ - Inside source: true *** True Line Result args.outputs.labels << [100, 100, "CONGRATULATIONS!", 10] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #args.outputs.lines << [0, 0, args.grid.w, args.grid.h]~ - Inside source: true *** True Line Result #args.outputs.lines << [0, 0, args.grid.w, args.grid.h] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #$tc+=1~ - Inside source: true *** True Line Result #$tc+=1 ** Processing line: ~ #if $tc == 5~ - Inside source: true *** True Line Result #if $tc == 5 ** Processing line: ~ #$train << [args.state.ball.xy.x, args.state.ball.xy.y]~ - Inside source: true *** True Line Result #$train << [args.state.ball.xy.x, args.state.ball.xy.y] ** Processing line: ~ #$tc = 0~ - Inside source: true *** True Line Result #$tc = 0 ** Processing line: ~ #end~ - Inside source: true *** True Line Result #end ** Processing line: ~ #for t in $train~ - Inside source: true *** True Line Result #for t in $train ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #args.outputs.solids << [t[0],t[1],5,5,255,0,0];~ - Inside source: true *** True Line Result #args.outputs.solids << [t[0],t[1],5,5,255,0,0]; ** Processing line: ~ #end~ - Inside source: true *** True Line Result #end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Physics And Collisions - Collision With Object Removal - paddle.rb~ - Header detected. *** True Line Result *** True Line Result *** Physics And Collisions - Collision With Object Removal - paddle.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/04_physics_and_collisions/10_collision_with_object_removal/app/paddle.rb~ - Inside source: true *** True Line Result # ./samples/04_physics_and_collisions/10_collision_with_object_removal/app/paddle.rb ** Processing line: ~ class Paddle~ - Inside source: true *** True Line Result class Paddle ** Processing line: ~ attr_accessor :enabled~ - Inside source: true *** True Line Result attr_accessor :enabled ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize ()~ - Inside source: true *** True Line Result def initialize () ** Processing line: ~ @x=WIDTH/2~ - Inside source: true *** True Line Result @x=WIDTH/2 ** Processing line: ~ @y=100~ - Inside source: true *** True Line Result @y=100 ** Processing line: ~ @width=100~ - Inside source: true *** True Line Result @width=100 ** Processing line: ~ @height=20~ - Inside source: true *** True Line Result @height=20 ** Processing line: ~ @speed=10~ - Inside source: true *** True Line Result @speed=10 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @xyCollision = LinearCollider.new({x: @x,y: @y+@height+5}, {x: @x+@width, y: @y+@height+5})~ - Inside source: true *** True Line Result @xyCollision = LinearCollider.new({x: @x,y: @y+@height+5}, {x: @x+@width, y: @y+@height+5}) ** Processing line: ~ @xyCollision2 = LinearCollider.new({x: @x,y: @y}, {x: @x+@width, y: @y}, :pos)~ - Inside source: true *** True Line Result @xyCollision2 = LinearCollider.new({x: @x,y: @y}, {x: @x+@width, y: @y}, :pos) ** Processing line: ~ @xyCollision3 = LinearCollider.new({x: @x,y: @y}, {x: @x, y: @y+@height+5})~ - Inside source: true *** True Line Result @xyCollision3 = LinearCollider.new({x: @x,y: @y}, {x: @x, y: @y+@height+5}) ** Processing line: ~ @xyCollision4 = LinearCollider.new({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height+5}, :pos)~ - Inside source: true *** True Line Result @xyCollision4 = LinearCollider.new({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height+5}, :pos) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @enabled = true~ - Inside source: true *** True Line Result @enabled = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def update args~ - Inside source: true *** True Line Result def update args ** Processing line: ~ @xyCollision.resetPoints({x: @x,y: @y+@height+5}, {x: @x+@width, y: @y+@height+5})~ - Inside source: true *** True Line Result @xyCollision.resetPoints({x: @x,y: @y+@height+5}, {x: @x+@width, y: @y+@height+5}) ** Processing line: ~ @xyCollision2.resetPoints({x: @x,y: @y}, {x: @x+@width, y: @y})~ - Inside source: true *** True Line Result @xyCollision2.resetPoints({x: @x,y: @y}, {x: @x+@width, y: @y}) ** Processing line: ~ @xyCollision3.resetPoints({x: @x,y: @y}, {x: @x, y: @y+@height+5})~ - Inside source: true *** True Line Result @xyCollision3.resetPoints({x: @x,y: @y}, {x: @x, y: @y+@height+5}) ** Processing line: ~ @xyCollision4.resetPoints({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height+5})~ - Inside source: true *** True Line Result @xyCollision4.resetPoints({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height+5}) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @xyCollision.update args~ - Inside source: true *** True Line Result @xyCollision.update args ** Processing line: ~ @xyCollision2.update args~ - Inside source: true *** True Line Result @xyCollision2.update args ** Processing line: ~ @xyCollision3.update args~ - Inside source: true *** True Line Result @xyCollision3.update args ** Processing line: ~ @xyCollision4.update args~ - Inside source: true *** True Line Result @xyCollision4.update args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.inputs.keyboard.key_held.left ||= false~ - Inside source: true *** True Line Result args.inputs.keyboard.key_held.left ||= false ** Processing line: ~ args.inputs.keyboard.key_held.right ||= false~ - Inside source: true *** True Line Result args.inputs.keyboard.key_held.right ||= false ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if not (args.inputs.keyboard.key_held.left == args.inputs.keyboard.key_held.right)~ - Inside source: true *** True Line Result if not (args.inputs.keyboard.key_held.left == args.inputs.keyboard.key_held.right) ** Processing line: ~ if args.inputs.keyboard.key_held.left && @enabled~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_held.left && @enabled ** Processing line: ~ @x-=@speed~ - Inside source: true *** True Line Result @x-=@speed ** Processing line: ~ elsif args.inputs.keyboard.key_held.right && @enabled~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_held.right && @enabled ** Processing line: ~ @x+=@speed~ - Inside source: true *** True Line Result @x+=@speed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ xmin =WIDTH/4~ - Inside source: true *** True Line Result xmin =WIDTH/4 ** Processing line: ~ xmax = 3*(WIDTH/4)~ - Inside source: true *** True Line Result xmax = 3*(WIDTH/4) ** Processing line: ~ @x = (@x+@width > xmax) ? xmax-@width : (@x xmax) ? xmax-@width : (@x 10 # return if more than 10 frames have passed since flash.~ - Inside source: true *** True Line Result return if state.flash_at.elapsed_time > 10 # return if more than 10 frames have passed since flash. ** Processing line: ~ # Transparency gradually changes (or eases) during the 10 frames of flash.~ - Inside source: true *** True Line Result # Transparency gradually changes (or eases) during the 10 frames of flash. ** Processing line: ~ outputs.primitives << [grid.rect, 255, 255, 255, 255 * state.flash_at.ease(10, :flip)].solid~ - Inside source: true *** True Line Result outputs.primitives << [grid.rect, 255, 255, 255, 255 * state.flash_at.ease(10, :flip)].solid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls all methods necessary for performing calculations.~ - Inside source: true *** True Line Result # Calls all methods necessary for performing calculations. ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ calc_spawn_zombie~ - Inside source: true *** True Line Result calc_spawn_zombie ** Processing line: ~ calc_move_zombies~ - Inside source: true *** True Line Result calc_move_zombies ** Processing line: ~ calc_player~ - Inside source: true *** True Line Result calc_player ** Processing line: ~ calc_kill_zombie~ - Inside source: true *** True Line Result calc_kill_zombie ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Decreases the zombie spawn countdown by 1 if it has a value greater than 0.~ - Inside source: true *** True Line Result # Decreases the zombie spawn countdown by 1 if it has a value greater than 0. ** Processing line: ~ def calc_spawn_zombie~ - Inside source: true *** True Line Result def calc_spawn_zombie ** Processing line: ~ if state.zombie_spawn_countdown > 0~ - Inside source: true *** True Line Result if state.zombie_spawn_countdown > 0 ** Processing line: ~ state.zombie_spawn_countdown -= 1~ - Inside source: true *** True Line Result state.zombie_spawn_countdown -= 1 ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # New zombies are created, positioned on the screen, and added to the zombies collection.~ - Inside source: true *** True Line Result # New zombies are created, positioned on the screen, and added to the zombies collection. ** Processing line: ~ state.zombies << state.new_entity(:zombie) do |z| # each zombie is declared a new entity~ - Inside source: true *** True Line Result state.zombies << state.new_entity(:zombie) do |z| # each zombie is declared a new entity ** Processing line: ~ if rand > 0.5~ - Inside source: true *** True Line Result if rand > 0.5 ** Processing line: ~ z.x = grid.rect.w.randomize(:ratio) # random x position on screen (within grid scope)~ - Inside source: true *** True Line Result z.x = grid.rect.w.randomize(:ratio) # random x position on screen (within grid scope) ** Processing line: ~ z.y = [-10, 730].sample # y position is set to either -10 or 730 (randomly chosen)~ - Inside source: true *** True Line Result z.y = [-10, 730].sample # y position is set to either -10 or 730 (randomly chosen) ** Processing line: ~ # the possible values exceed the screen's scope so zombies appear to be coming from far away~ - Inside source: true *** True Line Result # the possible values exceed the screen's scope so zombies appear to be coming from far away ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ z.x = [-10, 1290].sample # x position is set to either -10 or 1290 (randomly chosen)~ - Inside source: true *** True Line Result z.x = [-10, 1290].sample # x position is set to either -10 or 1290 (randomly chosen) ** Processing line: ~ z.y = grid.rect.w.randomize(:ratio) # random y position on screen~ - Inside source: true *** True Line Result z.y = grid.rect.w.randomize(:ratio) # random y position on screen ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls random_spawn_countdown method (determines how fast new zombies appear)~ - Inside source: true *** True Line Result # Calls random_spawn_countdown method (determines how fast new zombies appear) ** Processing line: ~ state.zombie_spawn_countdown = random_spawn_countdown state.zombie_min_spawn_rate~ - Inside source: true *** True Line Result state.zombie_spawn_countdown = random_spawn_countdown state.zombie_min_spawn_rate ** Processing line: ~ state.zombie_min_spawn_rate -= 1~ - Inside source: true *** True Line Result state.zombie_min_spawn_rate -= 1 ** Processing line: ~ # set to either the current zombie_min_spawn_rate or 0, depending on which value is greater~ - Inside source: true *** True Line Result # set to either the current zombie_min_spawn_rate or 0, depending on which value is greater ** Processing line: ~ state.zombie_min_spawn_rate = state.zombie_min_spawn_rate.greater(0)~ - Inside source: true *** True Line Result state.zombie_min_spawn_rate = state.zombie_min_spawn_rate.greater(0) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves all zombies towards the center of the screen.~ - Inside source: true *** True Line Result # Moves all zombies towards the center of the screen. ** Processing line: ~ # All zombies that reach the center (640, 360) are rejected from the zombies collection and disappear.~ - Inside source: true *** True Line Result # All zombies that reach the center (640, 360) are rejected from the zombies collection and disappear. ** Processing line: ~ def calc_move_zombies~ - Inside source: true *** True Line Result def calc_move_zombies ** Processing line: ~ state.zombies.each do |z| # for each zombie in the collection~ - Inside source: true *** True Line Result state.zombies.each do |z| # for each zombie in the collection ** Processing line: ~ z.y = z.y.towards(360, 0.1) # move the zombie towards the center (640, 360) at a rate of 0.1~ - Inside source: true *** True Line Result z.y = z.y.towards(360, 0.1) # move the zombie towards the center (640, 360) at a rate of 0.1 ** Processing line: ~ z.x = z.x.towards(640, 0.1) # change 0.1 to 1.1 and see how much faster the zombies move to the center~ - Inside source: true *** True Line Result z.x = z.x.towards(640, 0.1) # change 0.1 to 1.1 and see how much faster the zombies move to the center ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ state.zombies = state.zombies.reject { |z| z.y == 360 && z.x == 640 } # remove zombies that are in center~ - Inside source: true *** True Line Result state.zombies = state.zombies.reject { |z| z.y == 360 && z.x == 640 } # remove zombies that are in center ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the position and movement of the player on the screen.~ - Inside source: true *** True Line Result # Calculates the position and movement of the player on the screen. ** Processing line: ~ def calc_player~ - Inside source: true *** True Line Result def calc_player ** Processing line: ~ state.player.x += state.player.dx # changes x based on dx (change in x)~ - Inside source: true *** True Line Result state.player.x += state.player.dx # changes x based on dx (change in x) ** Processing line: ~ state.player.y += state.player.dy # changes y based on dy (change in y)~ - Inside source: true *** True Line Result state.player.y += state.player.dy # changes y based on dy (change in y) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.player.dx *= 0.9 # scales dx down~ - Inside source: true *** True Line Result state.player.dx *= 0.9 # scales dx down ** Processing line: ~ state.player.dy *= 0.9 # scales dy down~ - Inside source: true *** True Line Result state.player.dy *= 0.9 # scales dy down ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Compares player's x to 1280 to find lesser value, then compares result to 0 to find greater value.~ - Inside source: true *** True Line Result # Compares player's x to 1280 to find lesser value, then compares result to 0 to find greater value. ** Processing line: ~ # This ensures that the player remains within the screen's scope.~ - Inside source: true *** True Line Result # This ensures that the player remains within the screen's scope. ** Processing line: ~ state.player.x = state.player.x.lesser(1280).greater(0)~ - Inside source: true *** True Line Result state.player.x = state.player.x.lesser(1280).greater(0) ** Processing line: ~ state.player.y = state.player.y.lesser(720).greater(0) # same with player's y~ - Inside source: true *** True Line Result state.player.y = state.player.y.lesser(720).greater(0) # same with player's y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds all zombies that intersect with the player's sprite. These zombies are removed from the zombies collection~ - Inside source: true *** True Line Result # Finds all zombies that intersect with the player's sprite. These zombies are removed from the zombies collection ** Processing line: ~ # and added to the killed_zombies collection since any zombie that intersects with the player is killed.~ - Inside source: true *** True Line Result # and added to the killed_zombies collection since any zombie that intersects with the player is killed. ** Processing line: ~ def calc_kill_zombie~ - Inside source: true *** True Line Result def calc_kill_zombie ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Find all zombies that intersect with the player. They are considered killed.~ - Inside source: true *** True Line Result # Find all zombies that intersect with the player. They are considered killed. ** Processing line: ~ killed_this_frame = state.zombies.find_all { |z| z.sprite && (z.sprite.intersect_rect? state.player_sprite) }~ - Inside source: true *** True Line Result killed_this_frame = state.zombies.find_all { |z| z.sprite && (z.sprite.intersect_rect? state.player_sprite) } ** Processing line: ~ state.zombies = state.zombies - killed_this_frame # remove newly killed zombies from zombies collection~ - Inside source: true *** True Line Result state.zombies = state.zombies - killed_this_frame # remove newly killed zombies from zombies collection ** Processing line: ~ state.killed_zombies += killed_this_frame # add newly killed zombies to killed zombies~ - Inside source: true *** True Line Result state.killed_zombies += killed_this_frame # add newly killed zombies to killed zombies ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if killed_this_frame.length > 0 # if atleast one zombie was killed in the frame~ - Inside source: true *** True Line Result if killed_this_frame.length > 0 # if atleast one zombie was killed in the frame ** Processing line: ~ state.flash_at = state.tick_count # flash_at set to the frame when the zombie was killed~ - Inside source: true *** True Line Result state.flash_at = state.tick_count # flash_at set to the frame when the zombie was killed ** Processing line: ~ # Don't forget, the rendered flash lasts for 10 frames after the zombie is killed (look at render_flash method)~ - Inside source: true *** True Line Result # Don't forget, the rendered flash lasts for 10 frames after the zombie is killed (look at render_flash method) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the tick_count (passage of time) as the value of the death_at variable for each killed zombie.~ - Inside source: true *** True Line Result # Sets the tick_count (passage of time) as the value of the death_at variable for each killed zombie. ** Processing line: ~ # Death_at stores the frame a zombie was killed.~ - Inside source: true *** True Line Result # Death_at stores the frame a zombie was killed. ** Processing line: ~ killed_this_frame.each do |z|~ - Inside source: true *** True Line Result killed_this_frame.each do |z| ** Processing line: ~ z.death_at = state.tick_count~ - Inside source: true *** True Line Result z.death_at = state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Zombies are rejected from the killed_zombies collection depending on when they were killed.~ - Inside source: true *** True Line Result # Zombies are rejected from the killed_zombies collection depending on when they were killed. ** Processing line: ~ # They are rejected if more than 30 frames have passed since their death.~ - Inside source: true *** True Line Result # They are rejected if more than 30 frames have passed since their death. ** Processing line: ~ state.killed_zombies = state.killed_zombies.reject { |z| state.tick_count - z.death_at > 30 }~ - Inside source: true *** True Line Result state.killed_zombies = state.killed_zombies.reject { |z| state.tick_count - z.death_at > 30 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Uses input from the user to move the player around the screen.~ - Inside source: true *** True Line Result # Uses input from the user to move the player around the screen. ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the "a" key or left key is pressed, the x position of the player decreases.~ - Inside source: true *** True Line Result # If the "a" key or left key is pressed, the x position of the player decreases. ** Processing line: ~ # Otherwise, if the "d" key or right key is pressed, the x position of the player increases.~ - Inside source: true *** True Line Result # Otherwise, if the "d" key or right key is pressed, the x position of the player increases. ** Processing line: ~ if inputs.keyboard.key_held.a || inputs.keyboard.key_held.left~ - Inside source: true *** True Line Result if inputs.keyboard.key_held.a || inputs.keyboard.key_held.left ** Processing line: ~ state.player.x -= 5~ - Inside source: true *** True Line Result state.player.x -= 5 ** Processing line: ~ elsif inputs.keyboard.key_held.d || inputs.keyboard.key_held.right~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_held.d || inputs.keyboard.key_held.right ** Processing line: ~ state.player.x += 5~ - Inside source: true *** True Line Result state.player.x += 5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the "w" or up key is pressed, the y position of the player increases.~ - Inside source: true *** True Line Result # If the "w" or up key is pressed, the y position of the player increases. ** Processing line: ~ # Otherwise, if the "s" or down key is pressed, the y position of the player decreases.~ - Inside source: true *** True Line Result # Otherwise, if the "s" or down key is pressed, the y position of the player decreases. ** Processing line: ~ if inputs.keyboard.key_held.w || inputs.keyboard.key_held.up~ - Inside source: true *** True Line Result if inputs.keyboard.key_held.w || inputs.keyboard.key_held.up ** Processing line: ~ state.player.y += 5~ - Inside source: true *** True Line Result state.player.y += 5 ** Processing line: ~ elsif inputs.keyboard.key_held.s || inputs.keyboard.key_held.down~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_held.s || inputs.keyboard.key_held.down ** Processing line: ~ state.player.y -= 5~ - Inside source: true *** True Line Result state.player.y -= 5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the attack angle so the player can move and attack in the precise direction it wants to go.~ - Inside source: true *** True Line Result # Sets the attack angle so the player can move and attack in the precise direction it wants to go. ** Processing line: ~ # If the mouse is moved, the attack angle is changed (based on the player's position and mouse position).~ - Inside source: true *** True Line Result # If the mouse is moved, the attack angle is changed (based on the player's position and mouse position). ** Processing line: ~ # Attack angle also contributes to the position of red square.~ - Inside source: true *** True Line Result # Attack angle also contributes to the position of red square. ** Processing line: ~ if inputs.mouse.moved~ - Inside source: true *** True Line Result if inputs.mouse.moved ** Processing line: ~ state.player.attack_angle = inputs.mouse.position.angle_from [state.player.x, state.player.y]~ - Inside source: true *** True Line Result state.player.attack_angle = inputs.mouse.position.angle_from [state.player.x, state.player.y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.mouse.click && state.player.dx < 0.5 && state.player.dy < 0.5~ - Inside source: true *** True Line Result if inputs.mouse.click && state.player.dx < 0.5 && state.player.dy < 0.5 ** Processing line: ~ state.player.attack_angle_on_click = inputs.mouse.position.angle_from [state.player.x, state.player.y]~ - Inside source: true *** True Line Result state.player.attack_angle_on_click = inputs.mouse.position.angle_from [state.player.x, state.player.y] ** Processing line: ~ state.player.attack_angle = state.player.attack_angle_on_click # player's attack angle is set~ - Inside source: true *** True Line Result state.player.attack_angle = state.player.attack_angle_on_click # player's attack angle is set ** Processing line: ~ state.player.dx = state.player.attack_angle.vector_x(25) # change in player's position~ - Inside source: true *** True Line Result state.player.dx = state.player.attack_angle.vector_x(25) # change in player's position ** Processing line: ~ state.player.dy = state.player.attack_angle.vector_y(25)~ - Inside source: true *** True Line Result state.player.dy = state.player.attack_angle.vector_y(25) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the zombie spawn's countdown to a random number.~ - Inside source: true *** True Line Result # Sets the zombie spawn's countdown to a random number. ** Processing line: ~ # How fast zombies appear (change the 60 to 6 and too many zombies will appear at once!)~ - Inside source: true *** True Line Result # How fast zombies appear (change the 60 to 6 and too many zombies will appear at once!) ** Processing line: ~ def random_spawn_countdown minimum~ - Inside source: true *** True Line Result def random_spawn_countdown minimum ** Processing line: ~ 10.randomize(:ratio, :sign).to_i + 60~ - Inside source: true *** True Line Result 10.randomize(:ratio, :sign).to_i + 60 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Helps to iterate through the images in the sprites folder by setting the animation index.~ - Inside source: true *** True Line Result # Helps to iterate through the images in the sprites folder by setting the animation index. ** Processing line: ~ # 3 frames is how long to show an image, and 6 is how many images to flip through.~ - Inside source: true *** True Line Result # 3 frames is how long to show an image, and 6 is how many images to flip through. ** Processing line: ~ def animation_index at~ - Inside source: true *** True Line Result def animation_index at ** Processing line: ~ at.idiv(3).mod(6)~ - Inside source: true *** True Line Result at.idiv(3).mod(6) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Animates the zombies by using the animation index to go through the images in the sprites folder.~ - Inside source: true *** True Line Result # Animates the zombies by using the animation index to go through the images in the sprites folder. ** Processing line: ~ def animation_sprite zombie, at = nil~ - Inside source: true *** True Line Result def animation_sprite zombie, at = nil ** Processing line: ~ at ||= zombie.created_at_elapsed # how long it is has been since a zombie was created~ - Inside source: true *** True Line Result at ||= zombie.created_at_elapsed # how long it is has been since a zombie was created ** Processing line: ~ index = animation_index at~ - Inside source: true *** True Line Result index = animation_index at ** Processing line: ~ "sprites/zombie-#{index}.png" # string interpolation to iterate through images~ - Inside source: true *** True Line Result "sprites/zombie-#{index}.png" # string interpolation to iterate through images ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $protect_the_puppies_from_the_zombies = ProtectThePuppiesFromTheZombies.new~ - Inside source: true *** True Line Result $protect_the_puppies_from_the_zombies = ProtectThePuppiesFromTheZombies.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $protect_the_puppies_from_the_zombies.grid = args.grid~ - Inside source: true *** True Line Result $protect_the_puppies_from_the_zombies.grid = args.grid ** Processing line: ~ $protect_the_puppies_from_the_zombies.inputs = args.inputs~ - Inside source: true *** True Line Result $protect_the_puppies_from_the_zombies.inputs = args.inputs ** Processing line: ~ $protect_the_puppies_from_the_zombies.state = args.state~ - Inside source: true *** True Line Result $protect_the_puppies_from_the_zombies.state = args.state ** Processing line: ~ $protect_the_puppies_from_the_zombies.outputs = args.outputs~ - Inside source: true *** True Line Result $protect_the_puppies_from_the_zombies.outputs = args.outputs ** Processing line: ~ $protect_the_puppies_from_the_zombies.tick~ - Inside source: true *** True Line Result $protect_the_puppies_from_the_zombies.tick ** Processing line: ~ tick_instructions args, "How to get the mouse position and translate it to an x, y position using .vector_x and .vector_y. CLICK to play."~ - Inside source: true *** True Line Result tick_instructions args, "How to get the mouse position and translate it to an x, y position using .vector_x and .vector_y. CLICK to play." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Mouse - Mouse Move Paint App - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Mouse - Mouse Move Paint App - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/05_mouse/03_mouse_move_paint_app/app/main.rb~ - Inside source: true *** True Line Result # ./samples/05_mouse/03_mouse_move_paint_app/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - Floor: Method that returns an integer number smaller than or equal to the original with no decimal.~ - Inside source: true *** True Line Result - Floor: Method that returns an integer number smaller than or equal to the original with no decimal. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ For example, if we have a variable, a = 13.7, and we called floor on it, it would look like this...~ - Inside source: true *** True Line Result For example, if we have a variable, a = 13.7, and we called floor on it, it would look like this... ** Processing line: ~ puts a.floor()~ - Inside source: true *** True Line Result puts a.floor() ** Processing line: ~ which would print out 13.~ - Inside source: true *** True Line Result which would print out 13. ** Processing line: ~ (There is also a ceil method, which returns an integer number greater than or equal to the original~ - Inside source: true *** True Line Result (There is also a ceil method, which returns an integer number greater than or equal to the original ** Processing line: ~ with no decimal. If we had called ceil on the variable a, the result would have been 14.)~ - Inside source: true *** True Line Result with no decimal. If we had called ceil on the variable a, the result would have been 14.) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - Hashes: Collection of unique keys and their corresponding values. The value can be found~ - Inside source: true *** True Line Result - Hashes: Collection of unique keys and their corresponding values. The value can be found ** Processing line: ~ using their keys.~ - Inside source: true *** True Line Result using their keys. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ For example, if we have a "numbers" hash that stores numbers in English as the~ - Inside source: true *** True Line Result For example, if we have a "numbers" hash that stores numbers in English as the ** Processing line: ~ key and numbers in Spanish as the value, we'd have a hash that looks like this...~ - Inside source: true *** True Line Result key and numbers in Spanish as the value, we'd have a hash that looks like this... ** Processing line: ~ numbers = { "one" => "uno", "two" => "dos", "three" => "tres" }~ - Inside source: true *** True Line Result numbers = { "one" => "uno", "two" => "dos", "three" => "tres" } ** Processing line: ~ and on it goes.~ - Inside source: true *** True Line Result and on it goes. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Now if we wanted to find the corresponding value of the "one" key, we could say~ - Inside source: true *** True Line Result Now if we wanted to find the corresponding value of the "one" key, we could say ** Processing line: ~ puts numbers["one"]~ - Inside source: true *** True Line Result puts numbers["one"] ** Processing line: ~ which would print "uno" to the console.~ - Inside source: true *** True Line Result which would print "uno" to the console. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.state.new_entity: Used when we want to create a new object, like a sprite or button.~ - Inside source: true *** True Line Result - args.state.new_entity: Used when we want to create a new object, like a sprite or button. ** Processing line: ~ In this sample app, new_entity is used to create a new button that clears the grid.~ - Inside source: true *** True Line Result In this sample app, new_entity is used to create a new button that clears the grid. ** Processing line: ~ (Remember, you can use state to define ANY property and it will be retained across frames.)~ - Inside source: true *** True Line Result (Remember, you can use state to define ANY property and it will be retained across frames.) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.mouse.click.point.(x|y): The x and y location of the mouse.~ - Inside source: true *** True Line Result - args.inputs.mouse.click.point.(x|y): The x and y location of the mouse. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.mouse.click.point.created_at: The frame the mouse click occurred in.~ - Inside source: true *** True Line Result - args.inputs.mouse.click.point.created_at: The frame the mouse click occurred in. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.labels: An array. The values in the array generate a label.~ - Inside source: true *** True Line Result - args.outputs.labels: An array. The values in the array generate a label. ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result The parameters are [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ - Inside source: true *** True Line Result For more information about labels, go to mygame/documentation/02-labels.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - ARRAY#inside_rect?: Returns true or false depending on if the point is inside the rect.~ - Inside source: true *** True Line Result - ARRAY#inside_rect?: Returns true or false depending on if the point is inside the rect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app shows an empty grid that the user can paint on.~ - Inside source: true *** True Line Result # This sample app shows an empty grid that the user can paint on. ** Processing line: ~ # To paint, the user must keep their mouse presssed and drag it around the grid.~ - Inside source: true *** True Line Result # To paint, the user must keep their mouse presssed and drag it around the grid. ** Processing line: ~ # The "clear" button allows users to clear the grid so they can start over.~ - Inside source: true *** True Line Result # The "clear" button allows users to clear the grid so they can start over. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class PaintApp~ - Inside source: true *** True Line Result class PaintApp ** Processing line: ~ attr_accessor :inputs, :state, :outputs, :grid, :args~ - Inside source: true *** True Line Result attr_accessor :inputs, :state, :outputs, :grid, :args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Runs methods necessary for the game to function properly.~ - Inside source: true *** True Line Result # Runs methods necessary for the game to function properly. ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ print_title~ - Inside source: true *** True Line Result print_title ** Processing line: ~ add_grid~ - Inside source: true *** True Line Result add_grid ** Processing line: ~ check_click~ - Inside source: true *** True Line Result check_click ** Processing line: ~ draw_buttons~ - Inside source: true *** True Line Result draw_buttons ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Prints the title onto the screen by using a label.~ - Inside source: true *** True Line Result # Prints the title onto the screen by using a label. ** Processing line: ~ # Also separates the title from the grid with a line as a horizontal separator.~ - Inside source: true *** True Line Result # Also separates the title from the grid with a line as a horizontal separator. ** Processing line: ~ def print_title~ - Inside source: true *** True Line Result def print_title ** Processing line: ~ args.outputs.labels << [ 640, 700, 'Paint!', 0, 1 ]~ - Inside source: true *** True Line Result args.outputs.labels << [ 640, 700, 'Paint!', 0, 1 ] ** Processing line: ~ outputs.lines << horizontal_separator(660, 0, 1280)~ - Inside source: true *** True Line Result outputs.lines << horizontal_separator(660, 0, 1280) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the starting position, ending position, and color for the horizontal separator.~ - Inside source: true *** True Line Result # Sets the starting position, ending position, and color for the horizontal separator. ** Processing line: ~ # The starting and ending positions have the same y values.~ - Inside source: true *** True Line Result # The starting and ending positions have the same y values. ** Processing line: ~ def horizontal_separator y, x, x2~ - Inside source: true *** True Line Result def horizontal_separator y, x, x2 ** Processing line: ~ [x, y, x2, y, 150, 150, 150]~ - Inside source: true *** True Line Result [x, y, x2, y, 150, 150, 150] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the starting position, ending position, and color for the vertical separator.~ - Inside source: true *** True Line Result # Sets the starting position, ending position, and color for the vertical separator. ** Processing line: ~ # The starting and ending positions have the same x values.~ - Inside source: true *** True Line Result # The starting and ending positions have the same x values. ** Processing line: ~ def vertical_separator x, y, y2~ - Inside source: true *** True Line Result def vertical_separator x, y, y2 ** Processing line: ~ [x, y, x, y2, 150, 150, 150]~ - Inside source: true *** True Line Result [x, y, x, y2, 150, 150, 150] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs a border and a grid containing empty squares onto the screen.~ - Inside source: true *** True Line Result # Outputs a border and a grid containing empty squares onto the screen. ** Processing line: ~ def add_grid~ - Inside source: true *** True Line Result def add_grid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the x, y, height, and width of the grid.~ - Inside source: true *** True Line Result # Sets the x, y, height, and width of the grid. ** Processing line: ~ # There are 31 horizontal lines and 31 vertical lines in the grid.~ - Inside source: true *** True Line Result # There are 31 horizontal lines and 31 vertical lines in the grid. ** Processing line: ~ # Feel free to count them yourself before continuing!~ - Inside source: true *** True Line Result # Feel free to count them yourself before continuing! ** Processing line: ~ x, y, h, w = 640 - 500/2, 640 - 500, 500, 500 # calculations done so the grid appears in screen's center~ - Inside source: true *** True Line Result x, y, h, w = 640 - 500/2, 640 - 500, 500, 500 # calculations done so the grid appears in screen's center ** Processing line: ~ lines_h = 31~ - Inside source: true *** True Line Result lines_h = 31 ** Processing line: ~ lines_v = 31~ - Inside source: true *** True Line Result lines_v = 31 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets values for the grid's border, grid lines, and filled squares.~ - Inside source: true *** True Line Result # Sets values for the grid's border, grid lines, and filled squares. ** Processing line: ~ # The filled_squares variable is initially set to an empty array.~ - Inside source: true *** True Line Result # The filled_squares variable is initially set to an empty array. ** Processing line: ~ state.grid_border ||= [ x, y, h, w ] # definition of grid's outer border~ - Inside source: true *** True Line Result state.grid_border ||= [ x, y, h, w ] # definition of grid's outer border ** Processing line: ~ state.grid_lines ||= draw_grid(x, y, h, w, lines_h, lines_v) # calls draw_grid method~ - Inside source: true *** True Line Result state.grid_lines ||= draw_grid(x, y, h, w, lines_h, lines_v) # calls draw_grid method ** Processing line: ~ state.filled_squares ||= [] # there are no filled squares until the user fills them in~ - Inside source: true *** True Line Result state.filled_squares ||= [] # there are no filled squares until the user fills them in ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs the grid lines, border, and filled squares onto the screen.~ - Inside source: true *** True Line Result # Outputs the grid lines, border, and filled squares onto the screen. ** Processing line: ~ outputs.lines.concat state.grid_lines~ - Inside source: true *** True Line Result outputs.lines.concat state.grid_lines ** Processing line: ~ outputs.borders << state.grid_border~ - Inside source: true *** True Line Result outputs.borders << state.grid_border ** Processing line: ~ outputs.solids << state.filled_squares~ - Inside source: true *** True Line Result outputs.solids << state.filled_squares ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws the grid by adding in vertical and horizontal separators.~ - Inside source: true *** True Line Result # Draws the grid by adding in vertical and horizontal separators. ** Processing line: ~ def draw_grid x, y, h, w, lines_h, lines_v~ - Inside source: true *** True Line Result def draw_grid x, y, h, w, lines_h, lines_v ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The grid starts off empty.~ - Inside source: true *** True Line Result # The grid starts off empty. ** Processing line: ~ grid = []~ - Inside source: true *** True Line Result grid = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the placement and adds horizontal lines or separators into the grid.~ - Inside source: true *** True Line Result # Calculates the placement and adds horizontal lines or separators into the grid. ** Processing line: ~ curr_y = y # start at the bottom of the box~ - Inside source: true *** True Line Result curr_y = y # start at the bottom of the box ** Processing line: ~ dist_y = h / (lines_h + 1) # finds distance to place horizontal lines evenly throughout 500 height of grid~ - Inside source: true *** True Line Result dist_y = h / (lines_h + 1) # finds distance to place horizontal lines evenly throughout 500 height of grid ** Processing line: ~ lines_h.times do~ - Inside source: true *** True Line Result lines_h.times do ** Processing line: ~ curr_y += dist_y # increment curr_y by the distance between the horizontal lines~ - Inside source: true *** True Line Result curr_y += dist_y # increment curr_y by the distance between the horizontal lines ** Processing line: ~ grid << horizontal_separator(curr_y, x, x + w - 1) # add a separator into the grid~ - Inside source: true *** True Line Result grid << horizontal_separator(curr_y, x, x + w - 1) # add a separator into the grid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the placement and adds vertical lines or separators into the grid.~ - Inside source: true *** True Line Result # Calculates the placement and adds vertical lines or separators into the grid. ** Processing line: ~ curr_x = x # now start at the left of the box~ - Inside source: true *** True Line Result curr_x = x # now start at the left of the box ** Processing line: ~ dist_x = w / (lines_v + 1) # finds distance to place vertical lines evenly throughout 500 width of grid~ - Inside source: true *** True Line Result dist_x = w / (lines_v + 1) # finds distance to place vertical lines evenly throughout 500 width of grid ** Processing line: ~ lines_v.times do~ - Inside source: true *** True Line Result lines_v.times do ** Processing line: ~ curr_x += dist_x # increment curr_x by the distance between the vertical lines~ - Inside source: true *** True Line Result curr_x += dist_x # increment curr_x by the distance between the vertical lines ** Processing line: ~ grid << vertical_separator(curr_x, y + 1, y + h) # add separator~ - Inside source: true *** True Line Result grid << vertical_separator(curr_x, y + 1, y + h) # add separator ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # paint_grid uses a hash to assign values to keys.~ - Inside source: true *** True Line Result # paint_grid uses a hash to assign values to keys. ** Processing line: ~ state.paint_grid ||= {"x" => x, "y" => y, "h" => h, "w" => w, "lines_h" => lines_h,~ - Inside source: true *** True Line Result state.paint_grid ||= {"x" => x, "y" => y, "h" => h, "w" => w, "lines_h" => lines_h, ** Processing line: ~ "lines_v" => lines_v, "dist_x" => dist_x,~ - Inside source: true *** True Line Result "lines_v" => lines_v, "dist_x" => dist_x, ** Processing line: ~ "dist_y" => dist_y }~ - Inside source: true *** True Line Result "dist_y" => dist_y } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return grid~ - Inside source: true *** True Line Result return grid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks if the user is keeping the mouse pressed down and sets the mouse_hold variable accordingly using boolean values.~ - Inside source: true *** True Line Result # Checks if the user is keeping the mouse pressed down and sets the mouse_hold variable accordingly using boolean values. ** Processing line: ~ # If the mouse is up, the user cannot drag the mouse.~ - Inside source: true *** True Line Result # If the mouse is up, the user cannot drag the mouse. ** Processing line: ~ def check_click~ - Inside source: true *** True Line Result def check_click ** Processing line: ~ if inputs.mouse.down #is mouse up or down?~ - Inside source: true *** True Line Result if inputs.mouse.down #is mouse up or down? ** Processing line: ~ state.mouse_held = true # mouse is being held down~ - Inside source: true *** True Line Result state.mouse_held = true # mouse is being held down ** Processing line: ~ elsif inputs.mouse.up # if mouse is up~ - Inside source: true *** True Line Result elsif inputs.mouse.up # if mouse is up ** Processing line: ~ state.mouse_held = false # mouse is not being held down or dragged~ - Inside source: true *** True Line Result state.mouse_held = false # mouse is not being held down or dragged ** Processing line: ~ state.mouse_dragging = false~ - Inside source: true *** True Line Result state.mouse_dragging = false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.mouse_held && # mouse needs to be down~ - Inside source: true *** True Line Result if state.mouse_held && # mouse needs to be down ** Processing line: ~ !inputs.mouse.click && # must not be first click~ - Inside source: true *** True Line Result !inputs.mouse.click && # must not be first click ** Processing line: ~ ((inputs.mouse.previous_click.point.x - inputs.mouse.position.x).abs > 15) # Need to move 15 pixels before "drag"~ - Inside source: true *** True Line Result ((inputs.mouse.previous_click.point.x - inputs.mouse.position.x).abs > 15) # Need to move 15 pixels before "drag" ** Processing line: ~ state.mouse_dragging = true~ - Inside source: true *** True Line Result state.mouse_dragging = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the user clicks their mouse inside the grid, the search_lines method is called with a click input type.~ - Inside source: true *** True Line Result # If the user clicks their mouse inside the grid, the search_lines method is called with a click input type. ** Processing line: ~ if ((inputs.mouse.click) && (inputs.mouse.click.point.inside_rect? state.grid_border))~ - Inside source: true *** True Line Result if ((inputs.mouse.click) && (inputs.mouse.click.point.inside_rect? state.grid_border)) ** Processing line: ~ search_lines(inputs.mouse.click.point, :click)~ - Inside source: true *** True Line Result search_lines(inputs.mouse.click.point, :click) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the user drags their mouse inside the grid, the search_lines method is called with a drag input type.~ - Inside source: true *** True Line Result # If the user drags their mouse inside the grid, the search_lines method is called with a drag input type. ** Processing line: ~ elsif ((state.mouse_dragging) && (inputs.mouse.position.inside_rect? state.grid_border))~ - Inside source: true *** True Line Result elsif ((state.mouse_dragging) && (inputs.mouse.position.inside_rect? state.grid_border)) ** Processing line: ~ search_lines(inputs.mouse.position, :drag)~ - Inside source: true *** True Line Result search_lines(inputs.mouse.position, :drag) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the definition of a grid box and handles user input to fill in or clear grid boxes.~ - Inside source: true *** True Line Result # Sets the definition of a grid box and handles user input to fill in or clear grid boxes. ** Processing line: ~ def search_lines (point, input_type)~ - Inside source: true *** True Line Result def search_lines (point, input_type) ** Processing line: ~ point.x -= state.paint_grid["x"] # subtracts the value assigned to the "x" key in the paint_grid hash~ - Inside source: true *** True Line Result point.x -= state.paint_grid["x"] # subtracts the value assigned to the "x" key in the paint_grid hash ** Processing line: ~ point.y -= state.paint_grid["y"] # subtracts the value assigned to the "y" key in the paint_grid hash~ - Inside source: true *** True Line Result point.y -= state.paint_grid["y"] # subtracts the value assigned to the "y" key in the paint_grid hash ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Remove code following the .floor and see what happens when you try to fill in grid squares~ - Inside source: true *** True Line Result # Remove code following the .floor and see what happens when you try to fill in grid squares ** Processing line: ~ point.x = (point.x / state.paint_grid["dist_x"]).floor * state.paint_grid["dist_x"]~ - Inside source: true *** True Line Result point.x = (point.x / state.paint_grid["dist_x"]).floor * state.paint_grid["dist_x"] ** Processing line: ~ point.y = (point.y / state.paint_grid["dist_y"]).floor * state.paint_grid["dist_y"]~ - Inside source: true *** True Line Result point.y = (point.y / state.paint_grid["dist_y"]).floor * state.paint_grid["dist_y"] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ point.x += state.paint_grid["x"]~ - Inside source: true *** True Line Result point.x += state.paint_grid["x"] ** Processing line: ~ point.y += state.paint_grid["y"]~ - Inside source: true *** True Line Result point.y += state.paint_grid["y"] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets definition of a grid box, meaning its x, y, width, and height.~ - Inside source: true *** True Line Result # Sets definition of a grid box, meaning its x, y, width, and height. ** Processing line: ~ # Floor is called on the point.x and point.y variables.~ - Inside source: true *** True Line Result # Floor is called on the point.x and point.y variables. ** Processing line: ~ # Ceil method is called on values of the distance hash keys, setting the width and height of a box.~ - Inside source: true *** True Line Result # Ceil method is called on values of the distance hash keys, setting the width and height of a box. ** Processing line: ~ grid_box = [ point.x.floor, point.y.floor, state.paint_grid["dist_x"].ceil, state.paint_grid["dist_y"].ceil ]~ - Inside source: true *** True Line Result grid_box = [ point.x.floor, point.y.floor, state.paint_grid["dist_x"].ceil, state.paint_grid["dist_y"].ceil ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if input_type == :click # if user clicks their mouse~ - Inside source: true *** True Line Result if input_type == :click # if user clicks their mouse ** Processing line: ~ if state.filled_squares.include? grid_box # if grid box is already filled in~ - Inside source: true *** True Line Result if state.filled_squares.include? grid_box # if grid box is already filled in ** Processing line: ~ state.filled_squares.delete grid_box # box is cleared and removed from filled_squares~ - Inside source: true *** True Line Result state.filled_squares.delete grid_box # box is cleared and removed from filled_squares ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.filled_squares << grid_box # otherwise, box is filled in and added to filled_squares~ - Inside source: true *** True Line Result state.filled_squares << grid_box # otherwise, box is filled in and added to filled_squares ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif input_type == :drag # if user drags mouse~ - Inside source: true *** True Line Result elsif input_type == :drag # if user drags mouse ** Processing line: ~ unless state.filled_squares.include? grid_box # unless the grid box dragged over is already filled in~ - Inside source: true *** True Line Result unless state.filled_squares.include? grid_box # unless the grid box dragged over is already filled in ** Processing line: ~ state.filled_squares << grid_box # the box is filled in and added to filled_squares~ - Inside source: true *** True Line Result state.filled_squares << grid_box # the box is filled in and added to filled_squares ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates and outputs a "Clear" button on the screen using a label and a border.~ - Inside source: true *** True Line Result # Creates and outputs a "Clear" button on the screen using a label and a border. ** Processing line: ~ # If the button is clicked, the filled squares are cleared, making the filled_squares collection empty.~ - Inside source: true *** True Line Result # If the button is clicked, the filled squares are cleared, making the filled_squares collection empty. ** Processing line: ~ def draw_buttons~ - Inside source: true *** True Line Result def draw_buttons ** Processing line: ~ x, y, w, h = 390, 50, 240, 50~ - Inside source: true *** True Line Result x, y, w, h = 390, 50, 240, 50 ** Processing line: ~ state.clear_button ||= state.new_entity(:button_with_fade)~ - Inside source: true *** True Line Result state.clear_button ||= state.new_entity(:button_with_fade) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The x and y positions are set to display the label in the center of the button.~ - Inside source: true *** True Line Result # The x and y positions are set to display the label in the center of the button. ** Processing line: ~ # Try changing the first two parameters to simply x, y and see what happens to the text placement!~ - Inside source: true *** True Line Result # Try changing the first two parameters to simply x, y and see what happens to the text placement! ** Processing line: ~ state.clear_button.label ||= [x + w.half, y + h.half + 10, "Clear", 0, 1] # placed in center of border~ - Inside source: true *** True Line Result state.clear_button.label ||= [x + w.half, y + h.half + 10, "Clear", 0, 1] # placed in center of border ** Processing line: ~ state.clear_button.border ||= [x, y, w, h]~ - Inside source: true *** True Line Result state.clear_button.border ||= [x, y, w, h] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the mouse is clicked inside the borders of the clear button,~ - Inside source: true *** True Line Result # If the mouse is clicked inside the borders of the clear button, ** Processing line: ~ # the filled_squares collection is emptied and the squares are cleared.~ - Inside source: true *** True Line Result # the filled_squares collection is emptied and the squares are cleared. ** Processing line: ~ if inputs.mouse.click && inputs.mouse.click.point.inside_rect?(state.clear_button.border)~ - Inside source: true *** True Line Result if inputs.mouse.click && inputs.mouse.click.point.inside_rect?(state.clear_button.border) ** Processing line: ~ state.clear_button.clicked_at = inputs.mouse.click.created_at # time (frame) the click occurred~ - Inside source: true *** True Line Result state.clear_button.clicked_at = inputs.mouse.click.created_at # time (frame) the click occurred ** Processing line: ~ state.filled_squares.clear~ - Inside source: true *** True Line Result state.filled_squares.clear ** Processing line: ~ inputs.mouse.previous_click = nil~ - Inside source: true *** True Line Result inputs.mouse.previous_click = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << state.clear_button.label~ - Inside source: true *** True Line Result outputs.labels << state.clear_button.label ** Processing line: ~ outputs.borders << state.clear_button.border~ - Inside source: true *** True Line Result outputs.borders << state.clear_button.border ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the clear button is clicked, the color of the button changes~ - Inside source: true *** True Line Result # When the clear button is clicked, the color of the button changes ** Processing line: ~ # and the transparency changes, as well. If you change the time from~ - Inside source: true *** True Line Result # and the transparency changes, as well. If you change the time from ** Processing line: ~ # 0.25.seconds to 1.25.seconds or more, the change will last longer.~ - Inside source: true *** True Line Result # 0.25.seconds to 1.25.seconds or more, the change will last longer. ** Processing line: ~ if state.clear_button.clicked_at~ - Inside source: true *** True Line Result if state.clear_button.clicked_at ** Processing line: ~ outputs.solids << [x, y, w, h, 0, 180, 80, 255 * state.clear_button.clicked_at.ease(0.25.seconds, :flip)]~ - Inside source: true *** True Line Result outputs.solids << [x, y, w, h, 0, 180, 80, 255 * state.clear_button.clicked_at.ease(0.25.seconds, :flip)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $paint_app = PaintApp.new~ - Inside source: true *** True Line Result $paint_app = PaintApp.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $paint_app.inputs = args.inputs~ - Inside source: true *** True Line Result $paint_app.inputs = args.inputs ** Processing line: ~ $paint_app.state = args.state~ - Inside source: true *** True Line Result $paint_app.state = args.state ** Processing line: ~ $paint_app.grid = args.grid~ - Inside source: true *** True Line Result $paint_app.grid = args.grid ** Processing line: ~ $paint_app.args = args~ - Inside source: true *** True Line Result $paint_app.args = args ** Processing line: ~ $paint_app.outputs = args.outputs~ - Inside source: true *** True Line Result $paint_app.outputs = args.outputs ** Processing line: ~ $paint_app.tick~ - Inside source: true *** True Line Result $paint_app.tick ** Processing line: ~ tick_instructions args, "How to create a simple paint app. CLICK and HOLD to draw."~ - Inside source: true *** True Line Result tick_instructions args, "How to create a simple paint app. CLICK and HOLD to draw." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Mouse - Coordinate Systems - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Mouse - Coordinate Systems - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/05_mouse/04_coordinate_systems/app/main.rb~ - Inside source: true *** True Line Result # ./samples/05_mouse/04_coordinate_systems/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.mouse.click.position: Coordinates of the mouse's position on the screen.~ - Inside source: true *** True Line Result - args.inputs.mouse.click.position: Coordinates of the mouse's position on the screen. ** Processing line: ~ Unlike args.inputs.mouse.click.point, the mouse does not need to be pressed down for~ - Inside source: true *** True Line Result Unlike args.inputs.mouse.click.point, the mouse does not need to be pressed down for ** Processing line: ~ position to know the mouse's coordinates.~ - Inside source: true *** True Line Result position to know the mouse's coordinates. ** Processing line: ~ For more information about the mouse, go to mygame/documentation/07-mouse.md.~ - Inside source: true *** True Line Result For more information about the mouse, go to mygame/documentation/07-mouse.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.mouse.click: This property will be set if the mouse was clicked.~ - Inside source: true *** True Line Result - args.inputs.mouse.click: This property will be set if the mouse was clicked. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.mouse.click.point.(x|y): The x and y location of the mouse.~ - Inside source: true *** True Line Result - args.inputs.mouse.click.point.(x|y): The x and y location of the mouse. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated~ - Inside source: true *** True Line Result - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ - Inside source: true *** True Line Result as Ruby code, and the placeholder is replaced with its corresponding value or result. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ In this sample app, string interpolation is used to show the current position of the mouse~ - Inside source: true *** True Line Result In this sample app, string interpolation is used to show the current position of the mouse ** Processing line: ~ in a label.~ - Inside source: true *** True Line Result in a label. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.labels: An array that generates a label.~ - Inside source: true *** True Line Result - args.outputs.labels: An array that generates a label. ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result The parameters are [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ - Inside source: true *** True Line Result For more information about labels, go to mygame/documentation/02-labels.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.solids: An array that generates a solid.~ - Inside source: true *** True Line Result - args.outputs.solids: An array that generates a solid. ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE, ALPHA]~ - Inside source: true *** True Line Result The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE, ALPHA] ** Processing line: ~ For more information about solids, go to mygame/documentation/03-solids-and-borders.md.~ - Inside source: true *** True Line Result For more information about solids, go to mygame/documentation/03-solids-and-borders.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.lines: An array that generates a line.~ - Inside source: true *** True Line Result - args.outputs.lines: An array that generates a line. ** Processing line: ~ The parameters are [X, Y, X2, Y2, RED, GREEN, BLUE, ALPHA]~ - Inside source: true *** True Line Result The parameters are [X, Y, X2, Y2, RED, GREEN, BLUE, ALPHA] ** Processing line: ~ For more information about lines, go to mygame/documentation/04-lines.md.~ - Inside source: true *** True Line Result For more information about lines, go to mygame/documentation/04-lines.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app shows a coordinate system or grid. The user can move their mouse around the screen and the~ - Inside source: true *** True Line Result # This sample app shows a coordinate system or grid. The user can move their mouse around the screen and the ** Processing line: ~ # coordinates of their position on the screen will be displayed. Users can choose to view one quadrant or~ - Inside source: true *** True Line Result # coordinates of their position on the screen will be displayed. Users can choose to view one quadrant or ** Processing line: ~ # four quadrants by pressing the button.~ - Inside source: true *** True Line Result # four quadrants by pressing the button. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The addition and subtraction in the first two parameters of the label and solid~ - Inside source: true *** True Line Result # The addition and subtraction in the first two parameters of the label and solid ** Processing line: ~ # ensure that the outputs don't overlap each other. Try removing them and see what happens.~ - Inside source: true *** True Line Result # ensure that the outputs don't overlap each other. Try removing them and see what happens. ** Processing line: ~ pos = args.inputs.mouse.position # stores coordinates of mouse's position~ - Inside source: true *** True Line Result pos = args.inputs.mouse.position # stores coordinates of mouse's position ** Processing line: ~ args.outputs.labels << [pos.x + 10, pos.y + 10, "#{pos}"] # outputs label of coordinates~ - Inside source: true *** True Line Result args.outputs.labels << [pos.x + 10, pos.y + 10, "#{pos}"] # outputs label of coordinates ** Processing line: ~ args.outputs.solids << [pos.x - 2, pos.y - 2, 5, 5] # outputs small blackk box placed where mouse is hovering~ - Inside source: true *** True Line Result args.outputs.solids << [pos.x - 2, pos.y - 2, 5, 5] # outputs small blackk box placed where mouse is hovering ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ button = [0, 0, 370, 50] # sets definition of toggle button~ - Inside source: true *** True Line Result button = [0, 0, 370, 50] # sets definition of toggle button ** Processing line: ~ args.outputs.borders << button # outputs button as border (not filled in)~ - Inside source: true *** True Line Result args.outputs.borders << button # outputs button as border (not filled in) ** Processing line: ~ args.outputs.labels << [10, 35, "click here toggle coordinate system"] # label of button~ - Inside source: true *** True Line Result args.outputs.labels << [10, 35, "click here toggle coordinate system"] # label of button ** Processing line: ~ args.outputs.lines << [ 0, -720, 0, 720] # vertical line dividing quadrants~ - Inside source: true *** True Line Result args.outputs.lines << [ 0, -720, 0, 720] # vertical line dividing quadrants ** Processing line: ~ args.outputs.lines << [-1280, 0, 1280, 0] # horizontal line dividing quadrants~ - Inside source: true *** True Line Result args.outputs.lines << [-1280, 0, 1280, 0] # horizontal line dividing quadrants ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.mouse.click # if the user clicks the mouse~ - Inside source: true *** True Line Result if args.inputs.mouse.click # if the user clicks the mouse ** Processing line: ~ pos = args.inputs.mouse.click.point # pos's value is point where user clicked (coordinates)~ - Inside source: true *** True Line Result pos = args.inputs.mouse.click.point # pos's value is point where user clicked (coordinates) ** Processing line: ~ if pos.inside_rect? button # if the click occurred inside the button~ - Inside source: true *** True Line Result if pos.inside_rect? button # if the click occurred inside the button ** Processing line: ~ if args.grid.name == :bottom_left # if the grid shows bottom left as origin~ - Inside source: true *** True Line Result if args.grid.name == :bottom_left # if the grid shows bottom left as origin ** Processing line: ~ args.grid.origin_center! # origin will be shown in center~ - Inside source: true *** True Line Result args.grid.origin_center! # origin will be shown in center ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.grid.origin_bottom_left! # otherwise, the view will change to show bottom left as origin~ - Inside source: true *** True Line Result args.grid.origin_bottom_left! # otherwise, the view will change to show bottom left as origin ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ tick_instructions args, "Sample app shows the two supported coordinate systems in Game Toolkit."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows the two supported coordinate systems in Game Toolkit." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Save Load - Save Load Game - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Save Load - Save Load Game - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/06_save_load/01_save_load_game/app/main.rb~ - Inside source: true *** True Line Result # ./samples/06_save_load/01_save_load_game/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - Symbol (:): Ruby object with a name and an internal ID. Symbols are useful~ - Inside source: true *** True Line Result - Symbol (:): Ruby object with a name and an internal ID. Symbols are useful ** Processing line: ~ because with a given symbol name, you can refer to the same object throughout~ - Inside source: true *** True Line Result because with a given symbol name, you can refer to the same object throughout ** Processing line: ~ a Ruby program.~ - Inside source: true *** True Line Result a Ruby program. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ In this sample app, we're using symbols for our buttons. We have buttons that~ - Inside source: true *** True Line Result In this sample app, we're using symbols for our buttons. We have buttons that ** Processing line: ~ light fires, save, load, etc. Each of these buttons has a distinct symbol like~ - Inside source: true *** True Line Result light fires, save, load, etc. Each of these buttons has a distinct symbol like ** Processing line: ~ :light_fire, :save_game, :load_game, etc.~ - Inside source: true *** True Line Result :light_fire, :save_game, :load_game, etc. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - to_sym: Returns the symbol corresponding to the given string; creates the symbol~ - Inside source: true *** True Line Result - to_sym: Returns the symbol corresponding to the given string; creates the symbol ** Processing line: ~ if it does not already exist.~ - Inside source: true *** True Line Result if it does not already exist. ** Processing line: ~ For example,~ - Inside source: true *** True Line Result For example, ** Processing line: ~ 'car'.to_sym~ - Inside source: true *** True Line Result 'car'.to_sym ** Processing line: ~ would return the symbol :car.~ - Inside source: true *** True Line Result would return the symbol :car. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - last: Returns the last element of an array.~ - Inside source: true *** True Line Result - last: Returns the last element of an array. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - num1.lesser(num2): finds the lower value of the given options.~ - Inside source: true *** True Line Result - num1.lesser(num2): finds the lower value of the given options. ** Processing line: ~ For example, in the statement~ - Inside source: true *** True Line Result For example, in the statement ** Processing line: ~ a = 4.lesser(3)~ - Inside source: true *** True Line Result a = 4.lesser(3) ** Processing line: ~ 3 has a lower value than 4, which means that the value of a would be set to 3,~ - Inside source: true *** True Line Result 3 has a lower value than 4, which means that the value of a would be set to 3, ** Processing line: ~ but if the statement had been~ - Inside source: true *** True Line Result but if the statement had been ** Processing line: ~ a = 4.lesser(5)~ - Inside source: true *** True Line Result a = 4.lesser(5) ** Processing line: ~ 4 has a lower value than 5, which means that the value of a would be set to 4.~ - Inside source: true *** True Line Result 4 has a lower value than 5, which means that the value of a would be set to 4. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - num1.fdiv(num2): returns the float division (will have a decimal) of the two given numbers.~ - Inside source: true *** True Line Result - num1.fdiv(num2): returns the float division (will have a decimal) of the two given numbers. ** Processing line: ~ For example, 5.fdiv(2) = 2.5 and 5.fdiv(5) = 1.0~ - Inside source: true *** True Line Result For example, 5.fdiv(2) = 2.5 and 5.fdiv(5) = 1.0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - String interpolation: uses #{} syntax; everything between the #{ and the } is evaluated~ - Inside source: true *** True Line Result - String interpolation: uses #{} syntax; everything between the #{ and the } is evaluated ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ - Inside source: true *** True Line Result as Ruby code, and the placeholder is replaced with its corresponding value or result. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.labels: An array. Values generate a label.~ - Inside source: true *** True Line Result - args.outputs.labels: An array. Values generate a label. ** Processing line: ~ Parameters are [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result Parameters are [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~ For more information, go to mygame/documentation/02-labels.md.~ - Inside source: true *** True Line Result For more information, go to mygame/documentation/02-labels.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - ARRAY#inside_rect?: An array with at least two values is considered a point. An array~ - Inside source: true *** True Line Result - ARRAY#inside_rect?: An array with at least two values is considered a point. An array ** Processing line: ~ with at least four values is considered a rect. The inside_rect? function returns true~ - Inside source: true *** True Line Result with at least four values is considered a rect. The inside_rect? function returns true ** Processing line: ~ or false depending on if the point is inside the rect.~ - Inside source: true *** True Line Result or false depending on if the point is inside the rect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This code allows users to perform different tasks, such as saving and loading the game.~ - Inside source: true *** True Line Result # This code allows users to perform different tasks, such as saving and loading the game. ** Processing line: ~ # Users also have options to reset the game and light a fire.~ - Inside source: true *** True Line Result # Users also have options to reset the game and light a fire. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class TextedBasedGame~ - Inside source: true *** True Line Result class TextedBasedGame ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Contains methods needed for game to run properly.~ - Inside source: true *** True Line Result # Contains methods needed for game to run properly. ** Processing line: ~ # Increments tick count by 1 each time it runs (60 times in a single second)~ - Inside source: true *** True Line Result # Increments tick count by 1 each time it runs (60 times in a single second) ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ default~ - Inside source: true *** True Line Result default ** Processing line: ~ show_intro~ - Inside source: true *** True Line Result show_intro ** Processing line: ~ state.engine_tick_count += 1~ - Inside source: true *** True Line Result state.engine_tick_count += 1 ** Processing line: ~ tick_fire~ - Inside source: true *** True Line Result tick_fire ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets default values.~ - Inside source: true *** True Line Result # Sets default values. ** Processing line: ~ # The ||= ensures that a variable's value is only set to the value following the = sign~ - Inside source: true *** True Line Result # The ||= ensures that a variable's value is only set to the value following the = sign ** Processing line: ~ # if the value has not already been set before. Intialization happens only in the first frame.~ - Inside source: true *** True Line Result # if the value has not already been set before. Intialization happens only in the first frame. ** Processing line: ~ def default~ - Inside source: true *** True Line Result def default ** Processing line: ~ state.engine_tick_count ||= 0~ - Inside source: true *** True Line Result state.engine_tick_count ||= 0 ** Processing line: ~ state.active_module ||= :room~ - Inside source: true *** True Line Result state.active_module ||= :room ** Processing line: ~ state.fire_progress ||= 0~ - Inside source: true *** True Line Result state.fire_progress ||= 0 ** Processing line: ~ state.fire_ready_in ||= 10~ - Inside source: true *** True Line Result state.fire_ready_in ||= 10 ** Processing line: ~ state.previous_fire ||= :dead~ - Inside source: true *** True Line Result state.previous_fire ||= :dead ** Processing line: ~ state.fire ||= :dead~ - Inside source: true *** True Line Result state.fire ||= :dead ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def show_intro~ - Inside source: true *** True Line Result def show_intro ** Processing line: ~ return unless state.engine_tick_count == 0 # return unless the game just started~ - Inside source: true *** True Line Result return unless state.engine_tick_count == 0 # return unless the game just started ** Processing line: ~ set_story_line "awake." # calls set_story_line method, sets to "awake"~ - Inside source: true *** True Line Result set_story_line "awake." # calls set_story_line method, sets to "awake" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets story line.~ - Inside source: true *** True Line Result # Sets story line. ** Processing line: ~ def set_story_line story_line~ - Inside source: true *** True Line Result def set_story_line story_line ** Processing line: ~ state.story_line = story_line # story line set to value of parameter~ - Inside source: true *** True Line Result state.story_line = story_line # story line set to value of parameter ** Processing line: ~ state.active_module = :alert # active module set to alert~ - Inside source: true *** True Line Result state.active_module = :alert # active module set to alert ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Clears story line.~ - Inside source: true *** True Line Result # Clears story line. ** Processing line: ~ def clear_storyline~ - Inside source: true *** True Line Result def clear_storyline ** Processing line: ~ state.active_module = :none # active module set to none~ - Inside source: true *** True Line Result state.active_module = :none # active module set to none ** Processing line: ~ state.story_line = nil # story line is cleared, set to nil (or empty)~ - Inside source: true *** True Line Result state.story_line = nil # story line is cleared, set to nil (or empty) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Determines fire progress (how close the fire is to being ready to light).~ - Inside source: true *** True Line Result # Determines fire progress (how close the fire is to being ready to light). ** Processing line: ~ def tick_fire~ - Inside source: true *** True Line Result def tick_fire ** Processing line: ~ return if state.active_module == :alert # return if active module is alert~ - Inside source: true *** True Line Result return if state.active_module == :alert # return if active module is alert ** Processing line: ~ state.fire_progress += 1 # increment fire progress~ - Inside source: true *** True Line Result state.fire_progress += 1 # increment fire progress ** Processing line: ~ # fire_ready_in is 10. The fire_progress is either the current value or 10, whichever has a lower value.~ - Inside source: true *** True Line Result # fire_ready_in is 10. The fire_progress is either the current value or 10, whichever has a lower value. ** Processing line: ~ state.fire_progress = state.fire_progress.lesser(state.fire_ready_in)~ - Inside source: true *** True Line Result state.fire_progress = state.fire_progress.lesser(state.fire_ready_in) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the value of fire (whether it is dead or roaring), and the story line~ - Inside source: true *** True Line Result # Sets the value of fire (whether it is dead or roaring), and the story line ** Processing line: ~ def light_fire~ - Inside source: true *** True Line Result def light_fire ** Processing line: ~ return unless fire_ready? # returns unless the fire is ready to be lit~ - Inside source: true *** True Line Result return unless fire_ready? # returns unless the fire is ready to be lit ** Processing line: ~ state.fire = :roaring # fire is lit, set to roaring~ - Inside source: true *** True Line Result state.fire = :roaring # fire is lit, set to roaring ** Processing line: ~ state.fire_progress = 0 # the fire progress returns to 0, since the fire has been lit~ - Inside source: true *** True Line Result state.fire_progress = 0 # the fire progress returns to 0, since the fire has been lit ** Processing line: ~ if state.fire != state.previous_fire~ - Inside source: true *** True Line Result if state.fire != state.previous_fire ** Processing line: ~ set_story_line "the fire is #{state.fire}." # the story line is set using string interpolation~ - Inside source: true *** True Line Result set_story_line "the fire is #{state.fire}." # the story line is set using string interpolation ** Processing line: ~ state.previous_fire = state.fire~ - Inside source: true *** True Line Result state.previous_fire = state.fire ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks if the fire is ready to be lit. Returns a boolean value.~ - Inside source: true *** True Line Result # Checks if the fire is ready to be lit. Returns a boolean value. ** Processing line: ~ def fire_ready?~ - Inside source: true *** True Line Result def fire_ready? ** Processing line: ~ # If fire_progress (value between 0 and 10) is equal to fire_ready_in (value of 10),~ - Inside source: true *** True Line Result # If fire_progress (value between 0 and 10) is equal to fire_ready_in (value of 10), ** Processing line: ~ # the fire is ready to be lit.~ - Inside source: true *** True Line Result # the fire is ready to be lit. ** Processing line: ~ state.fire_progress == state.fire_ready_in~ - Inside source: true *** True Line Result state.fire_progress == state.fire_ready_in ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Divides the value of the fire_progress variable by 10 to determine how close the user is to~ - Inside source: true *** True Line Result # Divides the value of the fire_progress variable by 10 to determine how close the user is to ** Processing line: ~ # being able to light a fire.~ - Inside source: true *** True Line Result # being able to light a fire. ** Processing line: ~ def light_fire_progress~ - Inside source: true *** True Line Result def light_fire_progress ** Processing line: ~ state.fire_progress.fdiv(10) # float division~ - Inside source: true *** True Line Result state.fire_progress.fdiv(10) # float division ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Defines fire as the state.fire variable.~ - Inside source: true *** True Line Result # Defines fire as the state.fire variable. ** Processing line: ~ def fire~ - Inside source: true *** True Line Result def fire ** Processing line: ~ state.fire~ - Inside source: true *** True Line Result state.fire ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the title of the room.~ - Inside source: true *** True Line Result # Sets the title of the room. ** Processing line: ~ def room_title~ - Inside source: true *** True Line Result def room_title ** Processing line: ~ return "a room that is dark" if state.fire == :dead # room is dark if the fire is dead~ - Inside source: true *** True Line Result return "a room that is dark" if state.fire == :dead # room is dark if the fire is dead ** Processing line: ~ return "a room that is lit" # room is lit if the fire is not dead~ - Inside source: true *** True Line Result return "a room that is lit" # room is lit if the fire is not dead ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the active_module to room.~ - Inside source: true *** True Line Result # Sets the active_module to room. ** Processing line: ~ def go_to_room~ - Inside source: true *** True Line Result def go_to_room ** Processing line: ~ state.active_module = :room~ - Inside source: true *** True Line Result state.active_module = :room ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Defines active_module as the state.active_module variable.~ - Inside source: true *** True Line Result # Defines active_module as the state.active_module variable. ** Processing line: ~ def active_module~ - Inside source: true *** True Line Result def active_module ** Processing line: ~ state.active_module~ - Inside source: true *** True Line Result state.active_module ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Defines story_line as the state.story_line variable.~ - Inside source: true *** True Line Result # Defines story_line as the state.story_line variable. ** Processing line: ~ def story_line~ - Inside source: true *** True Line Result def story_line ** Processing line: ~ state.story_line~ - Inside source: true *** True Line Result state.story_line ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Update every 60 frames (or every second)~ - Inside source: true *** True Line Result # Update every 60 frames (or every second) ** Processing line: ~ def should_tick?~ - Inside source: true *** True Line Result def should_tick? ** Processing line: ~ state.tick_count.mod_zero?(60)~ - Inside source: true *** True Line Result state.tick_count.mod_zero?(60) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the value of the game state provider.~ - Inside source: true *** True Line Result # Sets the value of the game state provider. ** Processing line: ~ def initialize game_state_provider~ - Inside source: true *** True Line Result def initialize game_state_provider ** Processing line: ~ @game_state_provider = game_state_provider~ - Inside source: true *** True Line Result @game_state_provider = game_state_provider ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Defines the game state.~ - Inside source: true *** True Line Result # Defines the game state. ** Processing line: ~ # Any variable prefixed with an @ symbol is an instance variable.~ - Inside source: true *** True Line Result # Any variable prefixed with an @ symbol is an instance variable. ** Processing line: ~ def state~ - Inside source: true *** True Line Result def state ** Processing line: ~ @game_state_provider.state~ - Inside source: true *** True Line Result @game_state_provider.state ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Saves the state of the game in a text file called game_state.txt.~ - Inside source: true *** True Line Result # Saves the state of the game in a text file called game_state.txt. ** Processing line: ~ def save~ - Inside source: true *** True Line Result def save ** Processing line: ~ $gtk.serialize_state('game_state.txt', state)~ - Inside source: true *** True Line Result $gtk.serialize_state('game_state.txt', state) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Loads the game state from the game_state.txt text file.~ - Inside source: true *** True Line Result # Loads the game state from the game_state.txt text file. ** Processing line: ~ # If the load is unsuccessful, the user is informed since the story line indicates the failure.~ - Inside source: true *** True Line Result # If the load is unsuccessful, the user is informed since the story line indicates the failure. ** Processing line: ~ def load~ - Inside source: true *** True Line Result def load ** Processing line: ~ parsed_state = $gtk.deserialize_state('game_state.txt')~ - Inside source: true *** True Line Result parsed_state = $gtk.deserialize_state('game_state.txt') ** Processing line: ~ if !parsed_state~ - Inside source: true *** True Line Result if !parsed_state ** Processing line: ~ set_story_line "no game to load. press save first."~ - Inside source: true *** True Line Result set_story_line "no game to load. press save first." ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ $gtk.args.state = parsed_state~ - Inside source: true *** True Line Result $gtk.args.state = parsed_state ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Resets the game.~ - Inside source: true *** True Line Result # Resets the game. ** Processing line: ~ def reset~ - Inside source: true *** True Line Result def reset ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class TextedBasedGamePresenter~ - Inside source: true *** True Line Result class TextedBasedGamePresenter ** Processing line: ~ attr_accessor :state, :outputs, :inputs~ - Inside source: true *** True Line Result attr_accessor :state, :outputs, :inputs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates empty collection called highlights.~ - Inside source: true *** True Line Result # Creates empty collection called highlights. ** Processing line: ~ # Calls methods necessary to run the game.~ - Inside source: true *** True Line Result # Calls methods necessary to run the game. ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ state.layout.highlights ||= []~ - Inside source: true *** True Line Result state.layout.highlights ||= [] ** Processing line: ~ game.tick if game.should_tick?~ - Inside source: true *** True Line Result game.tick if game.should_tick? ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ process_input~ - Inside source: true *** True Line Result process_input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs a label of the tick count (passage of time) and calls all render methods.~ - Inside source: true *** True Line Result # Outputs a label of the tick count (passage of time) and calls all render methods. ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ outputs.labels << [10, 30, state.tick_count]~ - Inside source: true *** True Line Result outputs.labels << [10, 30, state.tick_count] ** Processing line: ~ render_alert~ - Inside source: true *** True Line Result render_alert ** Processing line: ~ render_room~ - Inside source: true *** True Line Result render_room ** Processing line: ~ render_highlights~ - Inside source: true *** True Line Result render_highlights ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs a label onto the screen that shows the story line, and also outputs a "close" button.~ - Inside source: true *** True Line Result # Outputs a label onto the screen that shows the story line, and also outputs a "close" button. ** Processing line: ~ def render_alert~ - Inside source: true *** True Line Result def render_alert ** Processing line: ~ return unless game.active_module == :alert~ - Inside source: true *** True Line Result return unless game.active_module == :alert ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [640, 480, game.story_line, 5, 1] # outputs story line label~ - Inside source: true *** True Line Result outputs.labels << [640, 480, game.story_line, 5, 1] # outputs story line label ** Processing line: ~ outputs.primitives << button(:alert_dismiss, 490, 380, "close") # positions "close" button under story line~ - Inside source: true *** True Line Result outputs.primitives << button(:alert_dismiss, 490, 380, "close") # positions "close" button under story line ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_room~ - Inside source: true *** True Line Result def render_room ** Processing line: ~ return unless game.active_module == :room~ - Inside source: true *** True Line Result return unless game.active_module == :room ** Processing line: ~ outputs.labels << [640, 700, game.room_title, 4, 1] # outputs room title label at top of screen~ - Inside source: true *** True Line Result outputs.labels << [640, 700, game.room_title, 4, 1] # outputs room title label at top of screen ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The parameters for these outputs are (symbol, x, y, text, value/percentage) and each has a y value~ - Inside source: true *** True Line Result # The parameters for these outputs are (symbol, x, y, text, value/percentage) and each has a y value ** Processing line: ~ # that positions it 60 pixels lower than the previous output.~ - Inside source: true *** True Line Result # that positions it 60 pixels lower than the previous output. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # outputs the light_fire_progress bar, uses light_fire_progress for its percentage (which changes bar's appearance)~ - Inside source: true *** True Line Result # outputs the light_fire_progress bar, uses light_fire_progress for its percentage (which changes bar's appearance) ** Processing line: ~ outputs.primitives << progress_bar(:light_fire, 490, 600, "light fire", game.light_fire_progress)~ - Inside source: true *** True Line Result outputs.primitives << progress_bar(:light_fire, 490, 600, "light fire", game.light_fire_progress) ** Processing line: ~ outputs.primitives << button( :save_game, 490, 540, "save") # outputs save button~ - Inside source: true *** True Line Result outputs.primitives << button( :save_game, 490, 540, "save") # outputs save button ** Processing line: ~ outputs.primitives << button( :load_game, 490, 480, "load") # outputs load button~ - Inside source: true *** True Line Result outputs.primitives << button( :load_game, 490, 480, "load") # outputs load button ** Processing line: ~ outputs.primitives << button( :reset_game, 490, 420, "reset") # outputs reset button~ - Inside source: true *** True Line Result outputs.primitives << button( :reset_game, 490, 420, "reset") # outputs reset button ** Processing line: ~ outputs.labels << [640, 30, "the fire is #{game.fire}", 0, 1] # outputs fire label at bottom of screen~ - Inside source: true *** True Line Result outputs.labels << [640, 30, "the fire is #{game.fire}", 0, 1] # outputs fire label at bottom of screen ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs a collection of highlights using an array to set their values, and also rejects certain values from the collection.~ - Inside source: true *** True Line Result # Outputs a collection of highlights using an array to set their values, and also rejects certain values from the collection. ** Processing line: ~ def render_highlights~ - Inside source: true *** True Line Result def render_highlights ** Processing line: ~ state.layout.highlights.each do |h| # for each highlight in the collection~ - Inside source: true *** True Line Result state.layout.highlights.each do |h| # for each highlight in the collection ** Processing line: ~ h.lifetime -= 1 # decrease the value of its lifetime~ - Inside source: true *** True Line Result h.lifetime -= 1 # decrease the value of its lifetime ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.solids << state.layout.highlights.map do |h| # outputs highlights collection~ - Inside source: true *** True Line Result outputs.solids << state.layout.highlights.map do |h| # outputs highlights collection ** Processing line: ~ [h.x, h.y, h.w, h.h, h.color, 255 * h.lifetime / h.max_lifetime] # sets definition for each highlight~ - Inside source: true *** True Line Result [h.x, h.y, h.w, h.h, h.color, 255 * h.lifetime / h.max_lifetime] # sets definition for each highlight ** Processing line: ~ # transparency changes; divide lifetime by max_lifetime, multiply result by 255~ - Inside source: true *** True Line Result # transparency changes; divide lifetime by max_lifetime, multiply result by 255 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # reject highlights from collection that have no remaining lifetime~ - Inside source: true *** True Line Result # reject highlights from collection that have no remaining lifetime ** Processing line: ~ state.layout.highlights = state.layout.highlights.reject { |h| h.lifetime <= 0 }~ - Inside source: true *** True Line Result state.layout.highlights = state.layout.highlights.reject { |h| h.lifetime <= 0 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks whether or not a button was clicked.~ - Inside source: true *** True Line Result # Checks whether or not a button was clicked. ** Processing line: ~ # Returns a boolean value.~ - Inside source: true *** True Line Result # Returns a boolean value. ** Processing line: ~ def process_input~ - Inside source: true *** True Line Result def process_input ** Processing line: ~ button = button_clicked? # calls button_clicked? method~ - Inside source: true *** True Line Result button = button_clicked? # calls button_clicked? method ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a boolean value.~ - Inside source: true *** True Line Result # Returns a boolean value. ** Processing line: ~ # Finds the button that was clicked from the button list and determines what method to call.~ - Inside source: true *** True Line Result # Finds the button that was clicked from the button list and determines what method to call. ** Processing line: ~ # Adds a highlight to the highlights collection.~ - Inside source: true *** True Line Result # Adds a highlight to the highlights collection. ** Processing line: ~ def button_clicked?~ - Inside source: true *** True Line Result def button_clicked? ** Processing line: ~ return nil unless click_pos # return nil unless click_pos holds coordinates of mouse click~ - Inside source: true *** True Line Result return nil unless click_pos # return nil unless click_pos holds coordinates of mouse click ** Processing line: ~ button = @button_list.find do |k, v| # goes through button_list to find button clicked~ - Inside source: true *** True Line Result button = @button_list.find do |k, v| # goes through button_list to find button clicked ** Processing line: ~ click_pos.inside_rect? v[:primitives].last.rect # was the mouse clicked inside the rect of button?~ - Inside source: true *** True Line Result click_pos.inside_rect? v[:primitives].last.rect # was the mouse clicked inside the rect of button? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ return unless button # return unless a button was clicked~ - Inside source: true *** True Line Result return unless button # return unless a button was clicked ** Processing line: ~ method_to_call = "#{button[0]}_clicked".to_sym # sets method_to_call to symbol (like :save_game or :load_game)~ - Inside source: true *** True Line Result method_to_call = "#{button[0]}_clicked".to_sym # sets method_to_call to symbol (like :save_game or :load_game) ** Processing line: ~ if self.respond_to? method_to_call # returns true if self responds to the given method (method actually exists)~ - Inside source: true *** True Line Result if self.respond_to? method_to_call # returns true if self responds to the given method (method actually exists) ** Processing line: ~ border = button[1][:primitives].last # sets border definition using value of last key in button list hash~ - Inside source: true *** True Line Result border = button[1][:primitives].last # sets border definition using value of last key in button list hash ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # declares each highlight as a new entity, sets properties~ - Inside source: true *** True Line Result # declares each highlight as a new entity, sets properties ** Processing line: ~ state.layout.highlights << state.new_entity(:highlight) do |h|~ - Inside source: true *** True Line Result state.layout.highlights << state.new_entity(:highlight) do |h| ** Processing line: ~ h.x = border.x~ - Inside source: true *** True Line Result h.x = border.x ** Processing line: ~ h.y = border.y~ - Inside source: true *** True Line Result h.y = border.y ** Processing line: ~ h.w = border.w~ - Inside source: true *** True Line Result h.w = border.w ** Processing line: ~ h.h = border.h~ - Inside source: true *** True Line Result h.h = border.h ** Processing line: ~ h.max_lifetime = 10~ - Inside source: true *** True Line Result h.max_lifetime = 10 ** Processing line: ~ h.lifetime = h.max_lifetime~ - Inside source: true *** True Line Result h.lifetime = h.max_lifetime ** Processing line: ~ h.color = [120, 120, 180] # sets color to shade of purple~ - Inside source: true *** True Line Result h.color = [120, 120, 180] # sets color to shade of purple ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ self.send method_to_call # invoke method identified by symbol~ - Inside source: true *** True Line Result self.send method_to_call # invoke method identified by symbol ** Processing line: ~ else # otherwise, if self doesn't respond to given method~ - Inside source: true *** True Line Result else # otherwise, if self doesn't respond to given method ** Processing line: ~ border = button[1][:primitives].last # sets border definition using value of last key in hash~ - Inside source: true *** True Line Result border = button[1][:primitives].last # sets border definition using value of last key in hash ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # declares each highlight as a new entity, sets properties~ - Inside source: true *** True Line Result # declares each highlight as a new entity, sets properties ** Processing line: ~ state.layout.highlights << state.new_entity(:highlight) do |h|~ - Inside source: true *** True Line Result state.layout.highlights << state.new_entity(:highlight) do |h| ** Processing line: ~ h.x = border.x~ - Inside source: true *** True Line Result h.x = border.x ** Processing line: ~ h.y = border.y~ - Inside source: true *** True Line Result h.y = border.y ** Processing line: ~ h.w = border.w~ - Inside source: true *** True Line Result h.w = border.w ** Processing line: ~ h.h = border.h~ - Inside source: true *** True Line Result h.h = border.h ** Processing line: ~ h.max_lifetime = 4 # different max_lifetime than the one set if respond_to? had been true~ - Inside source: true *** True Line Result h.max_lifetime = 4 # different max_lifetime than the one set if respond_to? had been true ** Processing line: ~ h.lifetime = h.max_lifetime~ - Inside source: true *** True Line Result h.lifetime = h.max_lifetime ** Processing line: ~ h.color = [120, 80, 80] # sets color to dark color~ - Inside source: true *** True Line Result h.color = [120, 80, 80] # sets color to dark color ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # instructions for users on how to add the missing method_to_call to the code~ - Inside source: true *** True Line Result # instructions for users on how to add the missing method_to_call to the code ** Processing line: ~ puts "It looks like #{method_to_call} doesn't exists on TextedBasedGamePresenter. Please add this method:"~ - Inside source: true *** True Line Result puts "It looks like #{method_to_call} doesn't exists on TextedBasedGamePresenter. Please add this method:" ** Processing line: ~ puts "Just copy the code below and put it in the #{TextedBasedGamePresenter} class definition."~ - Inside source: true *** True Line Result puts "Just copy the code below and put it in the #{TextedBasedGamePresenter} class definition." ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts "```"~ - Inside source: true *** True Line Result puts "```" ** Processing line: ~ puts "class TextedBasedGamePresenter <--- find this class and put the method below in it"~ - Inside source: true *** True Line Result puts "class TextedBasedGamePresenter <--- find this class and put the method below in it" ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts " def #{method_to_call}"~ - Inside source: true *** True Line Result puts " def #{method_to_call}" ** Processing line: ~ puts " puts 'Yay that worked!'"~ - Inside source: true *** True Line Result puts " puts 'Yay that worked!'" ** Processing line: ~ puts " end"~ - Inside source: true *** True Line Result puts " end" ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts "end <-- make sure to put the #{method_to_call} method in between the `class` word and the final `end` statement."~ - Inside source: true *** True Line Result puts "end <-- make sure to put the #{method_to_call} method in between the `class` word and the final `end` statement." ** Processing line: ~ puts "```"~ - Inside source: true *** True Line Result puts "```" ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the position of the mouse when it is clicked.~ - Inside source: true *** True Line Result # Returns the position of the mouse when it is clicked. ** Processing line: ~ def click_pos~ - Inside source: true *** True Line Result def click_pos ** Processing line: ~ return nil unless inputs.mouse.click # returns nil unless the mouse was clicked~ - Inside source: true *** True Line Result return nil unless inputs.mouse.click # returns nil unless the mouse was clicked ** Processing line: ~ return inputs.mouse.click.point # returns location of mouse click (coordinates)~ - Inside source: true *** True Line Result return inputs.mouse.click.point # returns location of mouse click (coordinates) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates buttons for the button_list and sets their values using a hash (uses symbols as keys)~ - Inside source: true *** True Line Result # Creates buttons for the button_list and sets their values using a hash (uses symbols as keys) ** Processing line: ~ def button id, x, y, text~ - Inside source: true *** True Line Result def button id, x, y, text ** Processing line: ~ @button_list[id] ||= { # assigns values to hash keys~ - Inside source: true *** True Line Result @button_list[id] ||= { # assigns values to hash keys ** Processing line: ~ id: id,~ - Inside source: true *** True Line Result id: id, ** Processing line: ~ text: text,~ - Inside source: true *** True Line Result text: text, ** Processing line: ~ primitives: [~ - Inside source: true *** True Line Result primitives: [ ** Processing line: ~ [x + 10, y + 30, text, 2, 0].label, # positions label inside border~ - Inside source: true *** True Line Result [x + 10, y + 30, text, 2, 0].label, # positions label inside border ** Processing line: ~ [x, y, 300, 50].border, # sets definition of border~ - Inside source: true *** True Line Result [x, y, 300, 50].border, # sets definition of border ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @button_list[id][:primitives] # returns label and border for buttons~ - Inside source: true *** True Line Result @button_list[id][:primitives] # returns label and border for buttons ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates a progress bar (used for lighting the fire) and sets its values.~ - Inside source: true *** True Line Result # Creates a progress bar (used for lighting the fire) and sets its values. ** Processing line: ~ def progress_bar id, x, y, text, percentage~ - Inside source: true *** True Line Result def progress_bar id, x, y, text, percentage ** Processing line: ~ @button_list[id] = { # assigns values to hash keys~ - Inside source: true *** True Line Result @button_list[id] = { # assigns values to hash keys ** Processing line: ~ id: id,~ - Inside source: true *** True Line Result id: id, ** Processing line: ~ text: text,~ - Inside source: true *** True Line Result text: text, ** Processing line: ~ primitives: [~ - Inside source: true *** True Line Result primitives: [ ** Processing line: ~ [x, y, 300, 50, 100, 100, 100].solid, # sets definition for solid (which fills the bar with gray)~ - Inside source: true *** True Line Result [x, y, 300, 50, 100, 100, 100].solid, # sets definition for solid (which fills the bar with gray) ** Processing line: ~ [x + 10, y + 30, text, 2, 0].label, # sets definition for label, positions inside border~ - Inside source: true *** True Line Result [x + 10, y + 30, text, 2, 0].label, # sets definition for label, positions inside border ** Processing line: ~ [x, y, 300, 50].border, # sets definition of border~ - Inside source: true *** True Line Result [x, y, 300, 50].border, # sets definition of border ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Fills progress bar based on percentage. If the fire was ready to be lit (100%) and we multiplied by~ - Inside source: true *** True Line Result # Fills progress bar based on percentage. If the fire was ready to be lit (100%) and we multiplied by ** Processing line: ~ # 100, only 1/3 of the bar would only be filled in. 200 would cause only 2/3 to be filled in.~ - Inside source: true *** True Line Result # 100, only 1/3 of the bar would only be filled in. 200 would cause only 2/3 to be filled in. ** Processing line: ~ @button_list[id][:primitives][0][2] = 300 * percentage~ - Inside source: true *** True Line Result @button_list[id][:primitives][0][2] = 300 * percentage ** Processing line: ~ @button_list[id][:primitives]~ - Inside source: true *** True Line Result @button_list[id][:primitives] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Defines the game.~ - Inside source: true *** True Line Result # Defines the game. ** Processing line: ~ def game~ - Inside source: true *** True Line Result def game ** Processing line: ~ @game~ - Inside source: true *** True Line Result @game ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Initalizes the game and creates an empty list of buttons.~ - Inside source: true *** True Line Result # Initalizes the game and creates an empty list of buttons. ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @game = TextedBasedGame.new self~ - Inside source: true *** True Line Result @game = TextedBasedGame.new self ** Processing line: ~ @button_list ||= {}~ - Inside source: true *** True Line Result @button_list ||= {} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Clears the storyline and takes the user to the room.~ - Inside source: true *** True Line Result # Clears the storyline and takes the user to the room. ** Processing line: ~ def alert_dismiss_clicked~ - Inside source: true *** True Line Result def alert_dismiss_clicked ** Processing line: ~ game.clear_storyline~ - Inside source: true *** True Line Result game.clear_storyline ** Processing line: ~ game.go_to_room~ - Inside source: true *** True Line Result game.go_to_room ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Lights the fire when the user clicks the "light fire" option.~ - Inside source: true *** True Line Result # Lights the fire when the user clicks the "light fire" option. ** Processing line: ~ def light_fire_clicked~ - Inside source: true *** True Line Result def light_fire_clicked ** Processing line: ~ game.light_fire~ - Inside source: true *** True Line Result game.light_fire ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Saves the game when the user clicks the "save" option.~ - Inside source: true *** True Line Result # Saves the game when the user clicks the "save" option. ** Processing line: ~ def save_game_clicked~ - Inside source: true *** True Line Result def save_game_clicked ** Processing line: ~ game.save~ - Inside source: true *** True Line Result game.save ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Resets the game when the user clicks the "reset" option.~ - Inside source: true *** True Line Result # Resets the game when the user clicks the "reset" option. ** Processing line: ~ def reset_game_clicked~ - Inside source: true *** True Line Result def reset_game_clicked ** Processing line: ~ game.reset~ - Inside source: true *** True Line Result game.reset ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Loads the game when the user clicks the "load" option.~ - Inside source: true *** True Line Result # Loads the game when the user clicks the "load" option. ** Processing line: ~ def load_game_clicked~ - Inside source: true *** True Line Result def load_game_clicked ** Processing line: ~ game.load~ - Inside source: true *** True Line Result game.load ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $text_based_rpg = TextedBasedGamePresenter.new~ - Inside source: true *** True Line Result $text_based_rpg = TextedBasedGamePresenter.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $text_based_rpg.state = args.state~ - Inside source: true *** True Line Result $text_based_rpg.state = args.state ** Processing line: ~ $text_based_rpg.outputs = args.outputs~ - Inside source: true *** True Line Result $text_based_rpg.outputs = args.outputs ** Processing line: ~ $text_based_rpg.inputs = args.inputs~ - Inside source: true *** True Line Result $text_based_rpg.inputs = args.inputs ** Processing line: ~ $text_based_rpg.tick~ - Inside source: true *** True Line Result $text_based_rpg.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Audio - Audio Mixer - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Audio - Audio Mixer - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_audio/01_audio_mixer/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_audio/01_audio_mixer/app/main.rb ** Processing line: ~ # these are the properties that you can sent on args.audio~ - Inside source: true *** True Line Result # these are the properties that you can sent on args.audio ** Processing line: ~ def spawn_new_sound args, name, path~ - Inside source: true *** True Line Result def spawn_new_sound args, name, path ** Processing line: ~ # Spawn randomly in an area that won't be covered by UI.~ - Inside source: true *** True Line Result # Spawn randomly in an area that won't be covered by UI. ** Processing line: ~ screenx = (rand * 600.0) + 200.0~ - Inside source: true *** True Line Result screenx = (rand * 600.0) + 200.0 ** Processing line: ~ screeny = (rand * 400.0) + 100.0~ - Inside source: true *** True Line Result screeny = (rand * 400.0) + 100.0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ id = new_sound_id! args~ - Inside source: true *** True Line Result id = new_sound_id! args ** Processing line: ~ # you can hang anything on the audio hashes you want, so we store the~ - Inside source: true *** True Line Result # you can hang anything on the audio hashes you want, so we store the ** Processing line: ~ # actual screen position in here for convenience.~ - Inside source: true *** True Line Result # actual screen position in here for convenience. ** Processing line: ~ args.audio[id] = {~ - Inside source: true *** True Line Result args.audio[id] = { ** Processing line: ~ name: name,~ - Inside source: true *** True Line Result name: name, ** Processing line: ~ input: path,~ - Inside source: true *** True Line Result input: path, ** Processing line: ~ screenx: screenx,~ - Inside source: true *** True Line Result screenx: screenx, ** Processing line: ~ screeny: screeny,~ - Inside source: true *** True Line Result screeny: screeny, ** Processing line: ~ x: ((screenx / 1279.0) * 2.0) - 1.0, # scale to -1.0 - 1.0 range~ - Inside source: true *** True Line Result x: ((screenx / 1279.0) * 2.0) - 1.0, # scale to -1.0 - 1.0 range ** Processing line: ~ y: ((screeny / 719.0) * 2.0) - 1.0, # scale to -1.0 - 1.0 range~ - Inside source: true *** True Line Result y: ((screeny / 719.0) * 2.0) - 1.0, # scale to -1.0 - 1.0 range ** Processing line: ~ z: 0.0,~ - Inside source: true *** True Line Result z: 0.0, ** Processing line: ~ gain: 1.0,~ - Inside source: true *** True Line Result gain: 1.0, ** Processing line: ~ pitch: 1.0,~ - Inside source: true *** True Line Result pitch: 1.0, ** Processing line: ~ looping: true,~ - Inside source: true *** True Line Result looping: true, ** Processing line: ~ paused: false~ - Inside source: true *** True Line Result paused: false ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.selected = id~ - Inside source: true *** True Line Result args.state.selected = id ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # these are values you can change on the ~args.audio~ data structure~ - Inside source: true *** True Line Result # these are values you can change on the ~args.audio~ data structure ** Processing line: ~ def input_panel args~ - Inside source: true *** True Line Result def input_panel args ** Processing line: ~ return unless args.state.panel~ - Inside source: true *** True Line Result return unless args.state.panel ** Processing line: ~ return if args.state.dragging~ - Inside source: true *** True Line Result return if args.state.dragging ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ audio_entry = args.audio[args.state.selected]~ - Inside source: true *** True Line Result audio_entry = args.audio[args.state.selected] ** Processing line: ~ results = args.state.panel~ - Inside source: true *** True Line Result results = args.state.panel ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.mouse_state == :held && args.inputs.mouse.position.inside_rect?(results.pitch_slider_rect.rect)~ - Inside source: true *** True Line Result if args.state.mouse_state == :held && args.inputs.mouse.position.inside_rect?(results.pitch_slider_rect.rect) ** Processing line: ~ audio_entry.pitch = 2.0 * ((args.inputs.mouse.x - results.pitch_slider_rect.x).to_f / (results.pitch_slider_rect.w - 1.0))~ - Inside source: true *** True Line Result audio_entry.pitch = 2.0 * ((args.inputs.mouse.x - results.pitch_slider_rect.x).to_f / (results.pitch_slider_rect.w - 1.0)) ** Processing line: ~ elsif args.state.mouse_state == :held && args.inputs.mouse.position.inside_rect?(results.playtime_slider_rect.rect)~ - Inside source: true *** True Line Result elsif args.state.mouse_state == :held && args.inputs.mouse.position.inside_rect?(results.playtime_slider_rect.rect) ** Processing line: ~ audio_entry.playtime = audio_entry.length_ * ((args.inputs.mouse.x - results.playtime_slider_rect.x).to_f / (results.playtime_slider_rect.w - 1.0))~ - Inside source: true *** True Line Result audio_entry.playtime = audio_entry.length_ * ((args.inputs.mouse.x - results.playtime_slider_rect.x).to_f / (results.playtime_slider_rect.w - 1.0)) ** Processing line: ~ elsif args.state.mouse_state == :held && args.inputs.mouse.position.inside_rect?(results.gain_slider_rect.rect)~ - Inside source: true *** True Line Result elsif args.state.mouse_state == :held && args.inputs.mouse.position.inside_rect?(results.gain_slider_rect.rect) ** Processing line: ~ audio_entry.gain = (args.inputs.mouse.x - results.gain_slider_rect.x).to_f / (results.gain_slider_rect.w - 1.0)~ - Inside source: true *** True Line Result audio_entry.gain = (args.inputs.mouse.x - results.gain_slider_rect.x).to_f / (results.gain_slider_rect.w - 1.0) ** Processing line: ~ elsif args.inputs.mouse.click && args.inputs.mouse.position.inside_rect?(results.looping_checkbox_rect.rect)~ - Inside source: true *** True Line Result elsif args.inputs.mouse.click && args.inputs.mouse.position.inside_rect?(results.looping_checkbox_rect.rect) ** Processing line: ~ audio_entry.looping = !audio_entry.looping~ - Inside source: true *** True Line Result audio_entry.looping = !audio_entry.looping ** Processing line: ~ elsif args.inputs.mouse.click && args.inputs.mouse.position.inside_rect?(results.paused_checkbox_rect.rect)~ - Inside source: true *** True Line Result elsif args.inputs.mouse.click && args.inputs.mouse.position.inside_rect?(results.paused_checkbox_rect.rect) ** Processing line: ~ audio_entry.paused = !audio_entry.paused~ - Inside source: true *** True Line Result audio_entry.paused = !audio_entry.paused ** Processing line: ~ elsif args.inputs.mouse.click && args.inputs.mouse.position.inside_rect?(results.delete_button_rect.rect)~ - Inside source: true *** True Line Result elsif args.inputs.mouse.click && args.inputs.mouse.position.inside_rect?(results.delete_button_rect.rect) ** Processing line: ~ args.audio.delete args.state.selected~ - Inside source: true *** True Line Result args.audio.delete args.state.selected ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_sources args~ - Inside source: true *** True Line Result def render_sources args ** Processing line: ~ args.outputs.primitives << args.audio.keys.map do |k|~ - Inside source: true *** True Line Result args.outputs.primitives << args.audio.keys.map do |k| ** Processing line: ~ s = args.audio[k]~ - Inside source: true *** True Line Result s = args.audio[k] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ isselected = (k == args.state.selected)~ - Inside source: true *** True Line Result isselected = (k == args.state.selected) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ color = isselected ? [ 0, 255, 0, 255 ] : [ 0, 0, 255, 255 ]~ - Inside source: true *** True Line Result color = isselected ? [ 0, 255, 0, 255 ] : [ 0, 0, 255, 255 ] ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [s.screenx, s.screeny, args.state.boxsize, args.state.boxsize, *color].solid,~ - Inside source: true *** True Line Result [s.screenx, s.screeny, args.state.boxsize, args.state.boxsize, *color].solid, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: s.screenx + args.state.boxsize.half,~ - Inside source: true *** True Line Result x: s.screenx + args.state.boxsize.half, ** Processing line: ~ y: s.screeny,~ - Inside source: true *** True Line Result y: s.screeny, ** Processing line: ~ text: s.name,~ - Inside source: true *** True Line Result text: s.name, ** Processing line: ~ r: 255,~ - Inside source: true *** True Line Result r: 255, ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 255,~ - Inside source: true *** True Line Result b: 255, ** Processing line: ~ alignment_enum: 1~ - Inside source: true *** True Line Result alignment_enum: 1 ** Processing line: ~ }.label!~ - Inside source: true *** True Line Result }.label! ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def playtime_str t~ - Inside source: true *** True Line Result def playtime_str t ** Processing line: ~ return "" unless t~ - Inside source: true *** True Line Result return "" unless t ** Processing line: ~ minutes = (t / 60.0).floor~ - Inside source: true *** True Line Result minutes = (t / 60.0).floor ** Processing line: ~ seconds = t - (minutes * 60.0).to_f~ - Inside source: true *** True Line Result seconds = t - (minutes * 60.0).to_f ** Processing line: ~ return minutes.to_s + ':' + seconds.floor.to_s + ((seconds - seconds.floor).to_s + "000")[1..3]~ - Inside source: true *** True Line Result return minutes.to_s + ':' + seconds.floor.to_s + ((seconds - seconds.floor).to_s + "000")[1..3] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def label_with_drop_shadow x, y, text~ - Inside source: true *** True Line Result def label_with_drop_shadow x, y, text ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ { x: x + 1, y: y + 1, text: text, vertical_alignment_enum: 1, alignment_enum: 1, r: 0, g: 0, b: 0 }.label!,~ - Inside source: true *** True Line Result { x: x + 1, y: y + 1, text: text, vertical_alignment_enum: 1, alignment_enum: 1, r: 0, g: 0, b: 0 }.label!, ** Processing line: ~ { x: x + 2, y: y + 0, text: text, vertical_alignment_enum: 1, alignment_enum: 1, r: 0, g: 0, b: 0 }.label!,~ - Inside source: true *** True Line Result { x: x + 2, y: y + 0, text: text, vertical_alignment_enum: 1, alignment_enum: 1, r: 0, g: 0, b: 0 }.label!, ** Processing line: ~ { x: x + 0, y: y + 1, text: text, vertical_alignment_enum: 1, alignment_enum: 1, r: 200, g: 200, b: 200 }.label!~ - Inside source: true *** True Line Result { x: x + 0, y: y + 1, text: text, vertical_alignment_enum: 1, alignment_enum: 1, r: 200, g: 200, b: 200 }.label! ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def check_box opts = {}~ - Inside source: true *** True Line Result def check_box opts = {} ** Processing line: ~ checkbox_template = opts.args.layout.rect(w: 0.5, h: 0.5, col: 2)~ - Inside source: true *** True Line Result checkbox_template = opts.args.layout.rect(w: 0.5, h: 0.5, col: 2) ** Processing line: ~ final_rect = checkbox_template.center_inside_rect_y(opts.args.layout.rect(row: opts.row, col: opts.col))~ - Inside source: true *** True Line Result final_rect = checkbox_template.center_inside_rect_y(opts.args.layout.rect(row: opts.row, col: opts.col)) ** Processing line: ~ color = { r: 0, g: 0, b: 0 }~ - Inside source: true *** True Line Result color = { r: 0, g: 0, b: 0 } ** Processing line: ~ color = { r: 255, g: 255, b: 255 } if opts.checked~ - Inside source: true *** True Line Result color = { r: 255, g: 255, b: 255 } if opts.checked ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ rect: final_rect,~ - Inside source: true *** True Line Result rect: final_rect, ** Processing line: ~ primitives: [~ - Inside source: true *** True Line Result primitives: [ ** Processing line: ~ (final_rect.to_solid color)~ - Inside source: true *** True Line Result (final_rect.to_solid color) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def progress_bar opts = {}~ - Inside source: true *** True Line Result def progress_bar opts = {} ** Processing line: ~ outer_rect = opts.args.layout.rect(row: opts.row, col: opts.col, w: 5, h: 1)~ - Inside source: true *** True Line Result outer_rect = opts.args.layout.rect(row: opts.row, col: opts.col, w: 5, h: 1) ** Processing line: ~ color = opts.percentage * 255~ - Inside source: true *** True Line Result color = opts.percentage * 255 ** Processing line: ~ baseline_progress_bar = opts.args~ - Inside source: true *** True Line Result baseline_progress_bar = opts.args ** Processing line: ~ .layout~ - Inside source: true *** True Line Result .layout ** Processing line: ~ .rect(w: 5, h: 0.5)~ - Inside source: true *** True Line Result .rect(w: 5, h: 0.5) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ final_rect = baseline_progress_bar.center_inside_rect(outer_rect)~ - Inside source: true *** True Line Result final_rect = baseline_progress_bar.center_inside_rect(outer_rect) ** Processing line: ~ center = final_rect.rect_center_point~ - Inside source: true *** True Line Result center = final_rect.rect_center_point ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ rect: final_rect,~ - Inside source: true *** True Line Result rect: final_rect, ** Processing line: ~ primitives: [~ - Inside source: true *** True Line Result primitives: [ ** Processing line: ~ final_rect.merge(r: color, g: color, b: color, a: 128).solid!,~ - Inside source: true *** True Line Result final_rect.merge(r: color, g: color, b: color, a: 128).solid!, ** Processing line: ~ label_with_drop_shadow(center.x, center.y, opts.text)~ - Inside source: true *** True Line Result label_with_drop_shadow(center.x, center.y, opts.text) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def panel_primitives args, audio_entry~ - Inside source: true *** True Line Result def panel_primitives args, audio_entry ** Processing line: ~ results = { primitives: [] }~ - Inside source: true *** True Line Result results = { primitives: [] } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return results unless audio_entry~ - Inside source: true *** True Line Result return results unless audio_entry ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # this uses DRGTK's layout apis to layout the controls~ - Inside source: true *** True Line Result # this uses DRGTK's layout apis to layout the controls ** Processing line: ~ # imagine the screen is split into equal cells (24 cells across, 12 cells up and down)~ - Inside source: true *** True Line Result # imagine the screen is split into equal cells (24 cells across, 12 cells up and down) ** Processing line: ~ # args.layout.rect returns a hash which we merge values with to create primitives~ - Inside source: true *** True Line Result # args.layout.rect returns a hash which we merge values with to create primitives ** Processing line: ~ # using args.layout.rect removes the need for pixel pushing~ - Inside source: true *** True Line Result # using args.layout.rect removes the need for pixel pushing ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # args.outputs.debug << args.layout.debug_primitives(r: 255, g: 255, b: 255)~ - Inside source: true *** True Line Result # args.outputs.debug << args.layout.debug_primitives(r: 255, g: 255, b: 255) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ white_color = { r: 255, g: 255, b: 255 }~ - Inside source: true *** True Line Result white_color = { r: 255, g: 255, b: 255 } ** Processing line: ~ label_style = white_color.merge(vertical_alignment_enum: 1)~ - Inside source: true *** True Line Result label_style = white_color.merge(vertical_alignment_enum: 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # panel background~ - Inside source: true *** True Line Result # panel background ** Processing line: ~ results.primitives << args.layout.rect(row: 0, col: 0, w: 7, h: 6, include_col_gutter: true, include_row_gutter: true)~ - Inside source: true *** True Line Result results.primitives << args.layout.rect(row: 0, col: 0, w: 7, h: 6, include_col_gutter: true, include_row_gutter: true) ** Processing line: ~ .border!(r: 255, g: 255, b: 255)~ - Inside source: true *** True Line Result .border!(r: 255, g: 255, b: 255) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # title~ - Inside source: true *** True Line Result # title ** Processing line: ~ results.primitives << args.layout.point(row: 0, col: 3.5, row_anchor: 0.5)~ - Inside source: true *** True Line Result results.primitives << args.layout.point(row: 0, col: 3.5, row_anchor: 0.5) ** Processing line: ~ .merge(label_style)~ - Inside source: true *** True Line Result .merge(label_style) ** Processing line: ~ .merge(text: "Source #{args.state.selected} (#{args.audio[args.state.selected].name})",~ - Inside source: true *** True Line Result .merge(text: "Source #{args.state.selected} (#{args.audio[args.state.selected].name})", ** Processing line: ~ size_enum: 3,~ - Inside source: true *** True Line Result size_enum: 3, ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # seperator line~ - Inside source: true *** True Line Result # seperator line ** Processing line: ~ results.primitives << args.layout.rect(row: 1, col: 0, w: 7, h: 0)~ - Inside source: true *** True Line Result results.primitives << args.layout.rect(row: 1, col: 0, w: 7, h: 0) ** Processing line: ~ .line!(white_color)~ - Inside source: true *** True Line Result .line!(white_color) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # screen location~ - Inside source: true *** True Line Result # screen location ** Processing line: ~ results.primitives << args.layout.point(row: 1.0, col: 0, row_anchor: 0.5)~ - Inside source: true *** True Line Result results.primitives << args.layout.point(row: 1.0, col: 0, row_anchor: 0.5) ** Processing line: ~ .merge(label_style)~ - Inside source: true *** True Line Result .merge(label_style) ** Processing line: ~ .merge(text: "screen:")~ - Inside source: true *** True Line Result .merge(text: "screen:") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.primitives << args.layout.point(row: 1.0, col: 2, row_anchor: 0.5)~ - Inside source: true *** True Line Result results.primitives << args.layout.point(row: 1.0, col: 2, row_anchor: 0.5) ** Processing line: ~ .merge(label_style)~ - Inside source: true *** True Line Result .merge(label_style) ** Processing line: ~ .merge(text: "(#{audio_entry.screenx.to_i}, #{audio_entry.screeny.to_i})")~ - Inside source: true *** True Line Result .merge(text: "(#{audio_entry.screenx.to_i}, #{audio_entry.screeny.to_i})") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # position~ - Inside source: true *** True Line Result # position ** Processing line: ~ results.primitives << args.layout.point(row: 1.5, col: 0, row_anchor: 0.5)~ - Inside source: true *** True Line Result results.primitives << args.layout.point(row: 1.5, col: 0, row_anchor: 0.5) ** Processing line: ~ .merge(label_style)~ - Inside source: true *** True Line Result .merge(label_style) ** Processing line: ~ .merge(text: "position:")~ - Inside source: true *** True Line Result .merge(text: "position:") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.primitives << args.layout.point(row: 1.5, col: 2, row_anchor: 0.5)~ - Inside source: true *** True Line Result results.primitives << args.layout.point(row: 1.5, col: 2, row_anchor: 0.5) ** Processing line: ~ .merge(label_style)~ - Inside source: true *** True Line Result .merge(label_style) ** Processing line: ~ .merge(text: "(#{audio_entry[:x].round(5).to_s[0..6]}, #{audio_entry[:y].round(5).to_s[0..6]})")~ - Inside source: true *** True Line Result .merge(text: "(#{audio_entry[:x].round(5).to_s[0..6]}, #{audio_entry[:y].round(5).to_s[0..6]})") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.primitives << args.layout.point(row: 2.0, col: 0, row_anchor: 0.5)~ - Inside source: true *** True Line Result results.primitives << args.layout.point(row: 2.0, col: 0, row_anchor: 0.5) ** Processing line: ~ .merge(label_style)~ - Inside source: true *** True Line Result .merge(label_style) ** Processing line: ~ .merge(text: "pitch:")~ - Inside source: true *** True Line Result .merge(text: "pitch:") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.pitch_slider_rect = progress_bar(row: 2.0, col: 2,~ - Inside source: true *** True Line Result results.pitch_slider_rect = progress_bar(row: 2.0, col: 2, ** Processing line: ~ percentage: audio_entry.pitch / 2.0,~ - Inside source: true *** True Line Result percentage: audio_entry.pitch / 2.0, ** Processing line: ~ text: "#{audio_entry.pitch.to_sf}",~ - Inside source: true *** True Line Result text: "#{audio_entry.pitch.to_sf}", ** Processing line: ~ args: args)~ - Inside source: true *** True Line Result args: args) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.primitives << results.pitch_slider_rect.primitives~ - Inside source: true *** True Line Result results.primitives << results.pitch_slider_rect.primitives ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.primitives << args.layout.point(row: 2.5, col: 0, row_anchor: 0.5)~ - Inside source: true *** True Line Result results.primitives << args.layout.point(row: 2.5, col: 0, row_anchor: 0.5) ** Processing line: ~ .merge(label_style)~ - Inside source: true *** True Line Result .merge(label_style) ** Processing line: ~ .merge(text: "playtime:")~ - Inside source: true *** True Line Result .merge(text: "playtime:") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.playtime_slider_rect = progress_bar(args: args,~ - Inside source: true *** True Line Result results.playtime_slider_rect = progress_bar(args: args, ** Processing line: ~ row: 2.5,~ - Inside source: true *** True Line Result row: 2.5, ** Processing line: ~ col: 2,~ - Inside source: true *** True Line Result col: 2, ** Processing line: ~ percentage: (audio_entry.playtime || 1) / (audio_entry.length_ || 1),~ - Inside source: true *** True Line Result percentage: (audio_entry.playtime || 1) / (audio_entry.length_ || 1), ** Processing line: ~ text: "#{playtime_str(audio_entry.playtime)} / #{playtime_str(audio_entry.length_)}")~ - Inside source: true *** True Line Result text: "#{playtime_str(audio_entry.playtime)} / #{playtime_str(audio_entry.length_)}") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.primitives << results.playtime_slider_rect.primitives~ - Inside source: true *** True Line Result results.primitives << results.playtime_slider_rect.primitives ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.primitives << args.layout.point(row: 3.0, col: 0, row_anchor: 0.5)~ - Inside source: true *** True Line Result results.primitives << args.layout.point(row: 3.0, col: 0, row_anchor: 0.5) ** Processing line: ~ .merge(label_style)~ - Inside source: true *** True Line Result .merge(label_style) ** Processing line: ~ .merge(text: "gain:")~ - Inside source: true *** True Line Result .merge(text: "gain:") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.gain_slider_rect = progress_bar(args: args,~ - Inside source: true *** True Line Result results.gain_slider_rect = progress_bar(args: args, ** Processing line: ~ row: 3.0,~ - Inside source: true *** True Line Result row: 3.0, ** Processing line: ~ col: 2,~ - Inside source: true *** True Line Result col: 2, ** Processing line: ~ percentage: audio_entry.gain,~ - Inside source: true *** True Line Result percentage: audio_entry.gain, ** Processing line: ~ text: "#{audio_entry.gain.to_sf}")~ - Inside source: true *** True Line Result text: "#{audio_entry.gain.to_sf}") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.primitives << results.gain_slider_rect.primitives~ - Inside source: true *** True Line Result results.primitives << results.gain_slider_rect.primitives ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.primitives << args.layout.point(row: 3.5, col: 0, row_anchor: 0.5)~ - Inside source: true *** True Line Result results.primitives << args.layout.point(row: 3.5, col: 0, row_anchor: 0.5) ** Processing line: ~ .merge(label_style)~ - Inside source: true *** True Line Result .merge(label_style) ** Processing line: ~ .merge(text: "looping:")~ - Inside source: true *** True Line Result .merge(text: "looping:") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ checkbox_template = args.layout.rect(w: 0.5, h: 0.5, col: 2)~ - Inside source: true *** True Line Result checkbox_template = args.layout.rect(w: 0.5, h: 0.5, col: 2) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.looping_checkbox_rect = check_box(args: args, row: 3.5, col: 2, checked: audio_entry.looping)~ - Inside source: true *** True Line Result results.looping_checkbox_rect = check_box(args: args, row: 3.5, col: 2, checked: audio_entry.looping) ** Processing line: ~ results.primitives << results.looping_checkbox_rect.primitives~ - Inside source: true *** True Line Result results.primitives << results.looping_checkbox_rect.primitives ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.primitives << args.layout.point(row: 4.0, col: 0, row_anchor: 0.5)~ - Inside source: true *** True Line Result results.primitives << args.layout.point(row: 4.0, col: 0, row_anchor: 0.5) ** Processing line: ~ .merge(label_style)~ - Inside source: true *** True Line Result .merge(label_style) ** Processing line: ~ .merge(text: "paused:")~ - Inside source: true *** True Line Result .merge(text: "paused:") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ checkbox_template = args.layout.rect(w: 0.5, h: 0.5, col: 2)~ - Inside source: true *** True Line Result checkbox_template = args.layout.rect(w: 0.5, h: 0.5, col: 2) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.paused_checkbox_rect = check_box(args: args, row: 4.0, col: 2, checked: !audio_entry.paused)~ - Inside source: true *** True Line Result results.paused_checkbox_rect = check_box(args: args, row: 4.0, col: 2, checked: !audio_entry.paused) ** Processing line: ~ results.primitives << results.paused_checkbox_rect.primitives~ - Inside source: true *** True Line Result results.primitives << results.paused_checkbox_rect.primitives ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.delete_button_rect = { rect: args.layout.rect(row: 5, col: 0, w: 7, h: 1) }~ - Inside source: true *** True Line Result results.delete_button_rect = { rect: args.layout.rect(row: 5, col: 0, w: 7, h: 1) } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.primitives << results.delete_button_rect.to_solid(r: 180)~ - Inside source: true *** True Line Result results.primitives << results.delete_button_rect.to_solid(r: 180) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results.primitives << args.layout.point(row: 5, col: 3.5, row_anchor: 0.5)~ - Inside source: true *** True Line Result results.primitives << args.layout.point(row: 5, col: 3.5, row_anchor: 0.5) ** Processing line: ~ .merge(label_style)~ - Inside source: true *** True Line Result .merge(label_style) ** Processing line: ~ .merge(text: "DELETE", alignment_enum: 1)~ - Inside source: true *** True Line Result .merge(text: "DELETE", alignment_enum: 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return results~ - Inside source: true *** True Line Result return results ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_panel args~ - Inside source: true *** True Line Result def render_panel args ** Processing line: ~ args.state.panel = nil~ - Inside source: true *** True Line Result args.state.panel = nil ** Processing line: ~ audio_entry = args.audio[args.state.selected]~ - Inside source: true *** True Line Result audio_entry = args.audio[args.state.selected] ** Processing line: ~ return unless audio_entry~ - Inside source: true *** True Line Result return unless audio_entry ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ mouse_down = (args.state.mouse_held >= 0)~ - Inside source: true *** True Line Result mouse_down = (args.state.mouse_held >= 0) ** Processing line: ~ args.state.panel = panel_primitives args, audio_entry~ - Inside source: true *** True Line Result args.state.panel = panel_primitives args, audio_entry ** Processing line: ~ args.outputs.primitives << args.state.panel.primitives~ - Inside source: true *** True Line Result args.outputs.primitives << args.state.panel.primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_sound_id! args~ - Inside source: true *** True Line Result def new_sound_id! args ** Processing line: ~ args.state.sound_id ||= 0~ - Inside source: true *** True Line Result args.state.sound_id ||= 0 ** Processing line: ~ args.state.sound_id += 1~ - Inside source: true *** True Line Result args.state.sound_id += 1 ** Processing line: ~ args.state.sound_id~ - Inside source: true *** True Line Result args.state.sound_id ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_launcher args~ - Inside source: true *** True Line Result def render_launcher args ** Processing line: ~ args.outputs.primitives << args.state.spawn_sound_buttons.map(&:primitives)~ - Inside source: true *** True Line Result args.outputs.primitives << args.state.spawn_sound_buttons.map(&:primitives) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_ui args~ - Inside source: true *** True Line Result def render_ui args ** Processing line: ~ render_launcher args~ - Inside source: true *** True Line Result render_launcher args ** Processing line: ~ render_panel args~ - Inside source: true *** True Line Result render_panel args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ input args~ - Inside source: true *** True Line Result input args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input args~ - Inside source: true *** True Line Result def input args ** Processing line: ~ if !args.audio[args.state.selected]~ - Inside source: true *** True Line Result if !args.audio[args.state.selected] ** Processing line: ~ args.state.selected = nil~ - Inside source: true *** True Line Result args.state.selected = nil ** Processing line: ~ args.state.dragging = nil~ - Inside source: true *** True Line Result args.state.dragging = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # spawn button and node interaction~ - Inside source: true *** True Line Result # spawn button and node interaction ** Processing line: ~ if args.inputs.mouse.click~ - Inside source: true *** True Line Result if args.inputs.mouse.click ** Processing line: ~ spawn_sound_button = args.state.spawn_sound_buttons.find { |b| args.inputs.mouse.inside_rect? b.rect }~ - Inside source: true *** True Line Result spawn_sound_button = args.state.spawn_sound_buttons.find { |b| args.inputs.mouse.inside_rect? b.rect } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ audio_click_key, audio_click_value = args.audio.find do |k, v|~ - Inside source: true *** True Line Result audio_click_key, audio_click_value = args.audio.find do |k, v| ** Processing line: ~ args.inputs.mouse.inside_rect? [v.screenx, v.screeny, args.state.boxsize, args.state.boxsize]~ - Inside source: true *** True Line Result args.inputs.mouse.inside_rect? [v.screenx, v.screeny, args.state.boxsize, args.state.boxsize] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if spawn_sound_button~ - Inside source: true *** True Line Result if spawn_sound_button ** Processing line: ~ args.state.selected = nil~ - Inside source: true *** True Line Result args.state.selected = nil ** Processing line: ~ spawn_new_sound args, spawn_sound_button.name, spawn_sound_button.path~ - Inside source: true *** True Line Result spawn_new_sound args, spawn_sound_button.name, spawn_sound_button.path ** Processing line: ~ elsif audio_click_key~ - Inside source: true *** True Line Result elsif audio_click_key ** Processing line: ~ args.state.selected = audio_click_key~ - Inside source: true *** True Line Result args.state.selected = audio_click_key ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.mouse_state == :held && args.state.selected~ - Inside source: true *** True Line Result if args.state.mouse_state == :held && args.state.selected ** Processing line: ~ v = args.audio[args.state.selected]~ - Inside source: true *** True Line Result v = args.audio[args.state.selected] ** Processing line: ~ if args.inputs.mouse.inside_rect? [v.screenx, v.screeny, args.state.boxsize, args.state.boxsize]~ - Inside source: true *** True Line Result if args.inputs.mouse.inside_rect? [v.screenx, v.screeny, args.state.boxsize, args.state.boxsize] ** Processing line: ~ args.state.dragging = args.state.selected~ - Inside source: true *** True Line Result args.state.dragging = args.state.selected ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.dragging~ - Inside source: true *** True Line Result if args.state.dragging ** Processing line: ~ s = args.audio[args.state.selected]~ - Inside source: true *** True Line Result s = args.audio[args.state.selected] ** Processing line: ~ # you can hang anything on the audio hashes you want, so we store the~ - Inside source: true *** True Line Result # you can hang anything on the audio hashes you want, so we store the ** Processing line: ~ # actual screen position so it doesn't scale weirdly vs your mouse.~ - Inside source: true *** True Line Result # actual screen position so it doesn't scale weirdly vs your mouse. ** Processing line: ~ s.screenx = args.inputs.mouse.x - (args.state.boxsize / 2)~ - Inside source: true *** True Line Result s.screenx = args.inputs.mouse.x - (args.state.boxsize / 2) ** Processing line: ~ s.screeny = args.inputs.mouse.y - (args.state.boxsize / 2)~ - Inside source: true *** True Line Result s.screeny = args.inputs.mouse.y - (args.state.boxsize / 2) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ s.screeny = 50 if s.screeny < 50~ - Inside source: true *** True Line Result s.screeny = 50 if s.screeny < 50 ** Processing line: ~ s.screeny = (719 - args.state.boxsize) if s.screeny > (719 - args.state.boxsize)~ - Inside source: true *** True Line Result s.screeny = (719 - args.state.boxsize) if s.screeny > (719 - args.state.boxsize) ** Processing line: ~ s.screenx = 0 if s.screenx < 0~ - Inside source: true *** True Line Result s.screenx = 0 if s.screenx < 0 ** Processing line: ~ s.screenx = (1279 - args.state.boxsize) if s.screenx > (1279 - args.state.boxsize)~ - Inside source: true *** True Line Result s.screenx = (1279 - args.state.boxsize) if s.screenx > (1279 - args.state.boxsize) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ s.x = ((s.screenx / 1279.0) * 2.0) - 1.0 # scale to -1.0 - 1.0 range~ - Inside source: true *** True Line Result s.x = ((s.screenx / 1279.0) * 2.0) - 1.0 # scale to -1.0 - 1.0 range ** Processing line: ~ s.y = ((s.screeny / 719.0) * 2.0) - 1.0 # scale to -1.0 - 1.0 range~ - Inside source: true *** True Line Result s.y = ((s.screeny / 719.0) * 2.0) - 1.0 # scale to -1.0 - 1.0 range ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif args.state.mouse_state == :released~ - Inside source: true *** True Line Result elsif args.state.mouse_state == :released ** Processing line: ~ args.state.dragging = nil~ - Inside source: true *** True Line Result args.state.dragging = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ input_panel args~ - Inside source: true *** True Line Result input_panel args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ args.state.mouse_state ||= :released~ - Inside source: true *** True Line Result args.state.mouse_state ||= :released ** Processing line: ~ args.state.dragging_source ||= false~ - Inside source: true *** True Line Result args.state.dragging_source ||= false ** Processing line: ~ args.state.selected ||= 0~ - Inside source: true *** True Line Result args.state.selected ||= 0 ** Processing line: ~ args.state.next_sound_index ||= 0~ - Inside source: true *** True Line Result args.state.next_sound_index ||= 0 ** Processing line: ~ args.state.boxsize ||= 30~ - Inside source: true *** True Line Result args.state.boxsize ||= 30 ** Processing line: ~ args.state.sound_files ||= [~ - Inside source: true *** True Line Result args.state.sound_files ||= [ ** Processing line: ~ { name: :tada, path: "sounds/tada.wav" },~ - Inside source: true *** True Line Result { name: :tada, path: "sounds/tada.wav" }, ** Processing line: ~ { name: :splash, path: "sounds/splash.wav" },~ - Inside source: true *** True Line Result { name: :splash, path: "sounds/splash.wav" }, ** Processing line: ~ { name: :drum, path: "sounds/drum.mp3" },~ - Inside source: true *** True Line Result { name: :drum, path: "sounds/drum.mp3" }, ** Processing line: ~ { name: :spring, path: "sounds/spring.wav" },~ - Inside source: true *** True Line Result { name: :spring, path: "sounds/spring.wav" }, ** Processing line: ~ { name: :music, path: "sounds/music.ogg" }~ - Inside source: true *** True Line Result { name: :music, path: "sounds/music.ogg" } ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # generate buttons based off the sound collection above~ - Inside source: true *** True Line Result # generate buttons based off the sound collection above ** Processing line: ~ args.state.spawn_sound_buttons ||= begin~ - Inside source: true *** True Line Result args.state.spawn_sound_buttons ||= begin ** Processing line: ~ # create a group of buttons~ - Inside source: true *** True Line Result # create a group of buttons ** Processing line: ~ # column centered (using col_offset to calculate the column offset)~ - Inside source: true *** True Line Result # column centered (using col_offset to calculate the column offset) ** Processing line: ~ # where each item is 2 columns apart~ - Inside source: true *** True Line Result # where each item is 2 columns apart ** Processing line: ~ rects = args.layout.rect_group row: 11,~ - Inside source: true *** True Line Result rects = args.layout.rect_group row: 11, ** Processing line: ~ col_offset: {~ - Inside source: true *** True Line Result col_offset: { ** Processing line: ~ count: args.state.sound_files.length,~ - Inside source: true *** True Line Result count: args.state.sound_files.length, ** Processing line: ~ w: 2~ - Inside source: true *** True Line Result w: 2 ** Processing line: ~ },~ - Inside source: true *** True Line Result }, ** Processing line: ~ dcol: 2,~ - Inside source: true *** True Line Result dcol: 2, ** Processing line: ~ w: 2,~ - Inside source: true *** True Line Result w: 2, ** Processing line: ~ h: 1,~ - Inside source: true *** True Line Result h: 1, ** Processing line: ~ group: args.state.sound_files~ - Inside source: true *** True Line Result group: args.state.sound_files ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # now that you have the rects~ - Inside source: true *** True Line Result # now that you have the rects ** Processing line: ~ # construct the metadata for the buttons~ - Inside source: true *** True Line Result # construct the metadata for the buttons ** Processing line: ~ rects.map do |rect|~ - Inside source: true *** True Line Result rects.map do |rect| ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ rect: rect,~ - Inside source: true *** True Line Result rect: rect, ** Processing line: ~ name: rect.name,~ - Inside source: true *** True Line Result name: rect.name, ** Processing line: ~ path: rect.path,~ - Inside source: true *** True Line Result path: rect.path, ** Processing line: ~ primitives: [~ - Inside source: true *** True Line Result primitives: [ ** Processing line: ~ rect.to_border(r: 255, g: 255, b: 255),~ - Inside source: true *** True Line Result rect.to_border(r: 255, g: 255, b: 255), ** Processing line: ~ rect.to_label(x: rect.center_x,~ - Inside source: true *** True Line Result rect.to_label(x: rect.center_x, ** Processing line: ~ y: rect.center_y,~ - Inside source: true *** True Line Result y: rect.center_y, ** Processing line: ~ text: "#{rect.name}",~ - Inside source: true *** True Line Result text: "#{rect.name}", ** Processing line: ~ alignment_enum: 1,~ - Inside source: true *** True Line Result alignment_enum: 1, ** Processing line: ~ vertical_alignment_enum: 1,~ - Inside source: true *** True Line Result vertical_alignment_enum: 1, ** Processing line: ~ r: 255, g: 255, b: 255)~ - Inside source: true *** True Line Result r: 255, g: 255, b: 255) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.mouse.up~ - Inside source: true *** True Line Result if args.inputs.mouse.up ** Processing line: ~ args.state.mouse_state = :released~ - Inside source: true *** True Line Result args.state.mouse_state = :released ** Processing line: ~ args.state.dragging_source = false~ - Inside source: true *** True Line Result args.state.dragging_source = false ** Processing line: ~ elsif args.inputs.mouse.down~ - Inside source: true *** True Line Result elsif args.inputs.mouse.down ** Processing line: ~ args.state.mouse_state = :held~ - Inside source: true *** True Line Result args.state.mouse_state = :held ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.background_color = [ 0, 0, 0, 255 ]~ - Inside source: true *** True Line Result args.outputs.background_color = [ 0, 0, 0, 255 ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ render_ui args~ - Inside source: true *** True Line Result render_ui args ** Processing line: ~ render_sources args~ - Inside source: true *** True Line Result render_sources args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Audio - Audio Mixer - server_ip_address.txt~ - Header detected. *** True Line Result *** True Line Result *** Advanced Audio - Audio Mixer - server_ip_address.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_audio/01_audio_mixer/app/server_ip_address.txt~ - Inside source: true *** True Line Result # ./samples/07_advanced_audio/01_audio_mixer/app/server_ip_address.txt ** Processing line: ~ 192.168.1.65~ - Inside source: true *** True Line Result 192.168.1.65 ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Audio - Sound Synthesis - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Audio - Sound Synthesis - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_audio/02_sound_synthesis/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_audio/02_sound_synthesis/app/main.rb ** Processing line: ~ begin # region: top level tick methods~ - Inside source: true *** True Line Result begin # region: top level tick methods ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ input args~ - Inside source: true *** True Line Result input args ** Processing line: ~ process_audio_queue args~ - Inside source: true *** True Line Result process_audio_queue args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ args.state.sine_waves ||= {}~ - Inside source: true *** True Line Result args.state.sine_waves ||= {} ** Processing line: ~ args.state.square_waves ||= {}~ - Inside source: true *** True Line Result args.state.square_waves ||= {} ** Processing line: ~ args.state.saw_tooth_waves ||= {}~ - Inside source: true *** True Line Result args.state.saw_tooth_waves ||= {} ** Processing line: ~ args.state.triangle_waves ||= {}~ - Inside source: true *** True Line Result args.state.triangle_waves ||= {} ** Processing line: ~ args.state.audio_queue ||= []~ - Inside source: true *** True Line Result args.state.audio_queue ||= [] ** Processing line: ~ args.state.buttons ||= [~ - Inside source: true *** True Line Result args.state.buttons ||= [ ** Processing line: ~ (frequency_buttons args),~ - Inside source: true *** True Line Result (frequency_buttons args), ** Processing line: ~ (sine_wave_note_buttons args),~ - Inside source: true *** True Line Result (sine_wave_note_buttons args), ** Processing line: ~ (bell_buttons args),~ - Inside source: true *** True Line Result (bell_buttons args), ** Processing line: ~ (square_wave_note_buttons args),~ - Inside source: true *** True Line Result (square_wave_note_buttons args), ** Processing line: ~ (saw_tooth_wave_note_buttons args),~ - Inside source: true *** True Line Result (saw_tooth_wave_note_buttons args), ** Processing line: ~ (triangle_wave_note_buttons args),~ - Inside source: true *** True Line Result (triangle_wave_note_buttons args), ** Processing line: ~ ].flatten~ - Inside source: true *** True Line Result ].flatten ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ args.outputs.borders << args.state.buttons.map { |b| b[:border] }~ - Inside source: true *** True Line Result args.outputs.borders << args.state.buttons.map { |b| b[:border] } ** Processing line: ~ args.outputs.labels << args.state.buttons.map { |b| b[:label] }~ - Inside source: true *** True Line Result args.outputs.labels << args.state.buttons.map { |b| b[:label] } ** Processing line: ~ args.outputs.labels << args.layout~ - Inside source: true *** True Line Result args.outputs.labels << args.layout ** Processing line: ~ .rect(row: 0, col: 11.5)~ - Inside source: true *** True Line Result .rect(row: 0, col: 11.5) ** Processing line: ~ .yield_self { |r| r.merge y: r.y + r.h }~ - Inside source: true *** True Line Result .yield_self { |r| r.merge y: r.y + r.h } ** Processing line: ~ .merge(text: "This is a Pro only feature. Click here to watch the YouTube video if you are on the Standard License.",~ - Inside source: true *** True Line Result .merge(text: "This is a Pro only feature. Click here to watch the YouTube video if you are on the Standard License.", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input args~ - Inside source: true *** True Line Result def input args ** Processing line: ~ args.state.buttons.each do |b|~ - Inside source: true *** True Line Result args.state.buttons.each do |b| ** Processing line: ~ if args.inputs.mouse.click && (args.inputs.mouse.click.inside_rect? b[:rect])~ - Inside source: true *** True Line Result if args.inputs.mouse.click && (args.inputs.mouse.click.inside_rect? b[:rect]) ** Processing line: ~ parameter_string = (b.slice :frequency, :note, :octave).map { |k, v| "#{k}: #{v}" }.join ", "~ - Inside source: true *** True Line Result parameter_string = (b.slice :frequency, :note, :octave).map { |k, v| "#{k}: #{v}" }.join ", " ** Processing line: ~ args.gtk.notify! "#{b[:method_to_call]} #{parameter_string}"~ - Inside source: true *** True Line Result args.gtk.notify! "#{b[:method_to_call]} #{parameter_string}" ** Processing line: ~ send b[:method_to_call], args, b~ - Inside source: true *** True Line Result send b[:method_to_call], args, b ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.mouse.click && (args.inputs.mouse.click.inside_rect? (args.layout.rect(row: 0).yield_self { |r| r.merge y: r.y + r.h.half, h: r.h.half }))~ - Inside source: true *** True Line Result if args.inputs.mouse.click && (args.inputs.mouse.click.inside_rect? (args.layout.rect(row: 0).yield_self { |r| r.merge y: r.y + r.h.half, h: r.h.half })) ** Processing line: ~ args.gtk.openurl 'https://www.youtube.com/watch?v=zEzovM5jT-k&ab_channel=AmirRajan'~ - Inside source: true *** True Line Result args.gtk.openurl 'https://www.youtube.com/watch?v=zEzovM5jT-k&ab_channel=AmirRajan' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_audio_queue args~ - Inside source: true *** True Line Result def process_audio_queue args ** Processing line: ~ to_queue = args.state.audio_queue.find_all { |v| v[:queue_at] <= args.tick_count }~ - Inside source: true *** True Line Result to_queue = args.state.audio_queue.find_all { |v| v[:queue_at] <= args.tick_count } ** Processing line: ~ args.state.audio_queue -= to_queue~ - Inside source: true *** True Line Result args.state.audio_queue -= to_queue ** Processing line: ~ to_queue.each { |a| args.audio[a[:id]] = a }~ - Inside source: true *** True Line Result to_queue.each { |a| args.audio[a[:id]] = a } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.audio.find_all { |k, v| v[:decay_rate] }~ - Inside source: true *** True Line Result args.audio.find_all { |k, v| v[:decay_rate] } ** Processing line: ~ .each { |k, v| v[:gain] -= v[:decay_rate] }~ - Inside source: true *** True Line Result .each { |k, v| v[:gain] -= v[:decay_rate] } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sounds_to_stop = args.audio~ - Inside source: true *** True Line Result sounds_to_stop = args.audio ** Processing line: ~ .find_all { |k, v| v[:stop_at] && args.state.tick_count >= v[:stop_at] }~ - Inside source: true *** True Line Result .find_all { |k, v| v[:stop_at] && args.state.tick_count >= v[:stop_at] } ** Processing line: ~ .map { |k, v| k }~ - Inside source: true *** True Line Result .map { |k, v| k } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sounds_to_stop.each { |k| args.audio.delete k }~ - Inside source: true *** True Line Result sounds_to_stop.each { |k| args.audio.delete k } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin # region: button definitions, ui layout, callback functions~ - Inside source: true *** True Line Result begin # region: button definitions, ui layout, callback functions ** Processing line: ~ def button args, opts~ - Inside source: true *** True Line Result def button args, opts ** Processing line: ~ button_def = opts.merge rect: (args.layout.rect (opts.merge w: 2, h: 1))~ - Inside source: true *** True Line Result button_def = opts.merge rect: (args.layout.rect (opts.merge w: 2, h: 1)) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ button_def[:border] = button_def[:rect].merge r: 0, g: 0, b: 0~ - Inside source: true *** True Line Result button_def[:border] = button_def[:rect].merge r: 0, g: 0, b: 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ label_offset_x = 5~ - Inside source: true *** True Line Result label_offset_x = 5 ** Processing line: ~ label_offset_y = 30~ - Inside source: true *** True Line Result label_offset_y = 30 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ button_def[:label] = button_def[:rect].merge text: opts[:text],~ - Inside source: true *** True Line Result button_def[:label] = button_def[:rect].merge text: opts[:text], ** Processing line: ~ size_enum: -2.5,~ - Inside source: true *** True Line Result size_enum: -2.5, ** Processing line: ~ x: button_def[:rect].x + label_offset_x,~ - Inside source: true *** True Line Result x: button_def[:rect].x + label_offset_x, ** Processing line: ~ y: button_def[:rect].y + label_offset_y~ - Inside source: true *** True Line Result y: button_def[:rect].y + label_offset_y ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ button_def~ - Inside source: true *** True Line Result button_def ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def play_sine_wave args, sender~ - Inside source: true *** True Line Result def play_sine_wave args, sender ** Processing line: ~ queue_sine_wave args,~ - Inside source: true *** True Line Result queue_sine_wave args, ** Processing line: ~ frequency: sender[:frequency],~ - Inside source: true *** True Line Result frequency: sender[:frequency], ** Processing line: ~ duration: 1.seconds,~ - Inside source: true *** True Line Result duration: 1.seconds, ** Processing line: ~ fade_out: true~ - Inside source: true *** True Line Result fade_out: true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def play_note args, sender~ - Inside source: true *** True Line Result def play_note args, sender ** Processing line: ~ method_to_call = :queue_sine_wave~ - Inside source: true *** True Line Result method_to_call = :queue_sine_wave ** Processing line: ~ method_to_call = :queue_square_wave if sender[:type] == :square~ - Inside source: true *** True Line Result method_to_call = :queue_square_wave if sender[:type] == :square ** Processing line: ~ method_to_call = :queue_saw_tooth_wave if sender[:type] == :saw_tooth~ - Inside source: true *** True Line Result method_to_call = :queue_saw_tooth_wave if sender[:type] == :saw_tooth ** Processing line: ~ method_to_call = :queue_triangle_wave if sender[:type] == :triangle~ - Inside source: true *** True Line Result method_to_call = :queue_triangle_wave if sender[:type] == :triangle ** Processing line: ~ method_to_call = :queue_bell if sender[:type] == :bell~ - Inside source: true *** True Line Result method_to_call = :queue_bell if sender[:type] == :bell ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ send method_to_call, args,~ - Inside source: true *** True Line Result send method_to_call, args, ** Processing line: ~ frequency: (frequency_for note: sender[:note], octave: sender[:octave]),~ - Inside source: true *** True Line Result frequency: (frequency_for note: sender[:note], octave: sender[:octave]), ** Processing line: ~ duration: 1.seconds,~ - Inside source: true *** True Line Result duration: 1.seconds, ** Processing line: ~ fade_out: true~ - Inside source: true *** True Line Result fade_out: true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def frequency_buttons args~ - Inside source: true *** True Line Result def frequency_buttons args ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 4.0, col: 0, text: "300hz",~ - Inside source: true *** True Line Result row: 4.0, col: 0, text: "300hz", ** Processing line: ~ frequency: 300,~ - Inside source: true *** True Line Result frequency: 300, ** Processing line: ~ method_to_call: :play_sine_wave),~ - Inside source: true *** True Line Result method_to_call: :play_sine_wave), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 5.0, col: 0, text: "400hz",~ - Inside source: true *** True Line Result row: 5.0, col: 0, text: "400hz", ** Processing line: ~ frequency: 400,~ - Inside source: true *** True Line Result frequency: 400, ** Processing line: ~ method_to_call: :play_sine_wave),~ - Inside source: true *** True Line Result method_to_call: :play_sine_wave), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 6.0, col: 0, text: "500hz",~ - Inside source: true *** True Line Result row: 6.0, col: 0, text: "500hz", ** Processing line: ~ frequency: 500,~ - Inside source: true *** True Line Result frequency: 500, ** Processing line: ~ method_to_call: :play_sine_wave),~ - Inside source: true *** True Line Result method_to_call: :play_sine_wave), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def sine_wave_note_buttons args~ - Inside source: true *** True Line Result def sine_wave_note_buttons args ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 1.5, col: 2, text: "Sine C4",~ - Inside source: true *** True Line Result row: 1.5, col: 2, text: "Sine C4", ** Processing line: ~ note: :c, octave: 4, type: :sine, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :c, octave: 4, type: :sine, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 2.5, col: 2, text: "Sine D4",~ - Inside source: true *** True Line Result row: 2.5, col: 2, text: "Sine D4", ** Processing line: ~ note: :d, octave: 4, type: :sine, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :d, octave: 4, type: :sine, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 3.5, col: 2, text: "Sine E4",~ - Inside source: true *** True Line Result row: 3.5, col: 2, text: "Sine E4", ** Processing line: ~ note: :e, octave: 4, type: :sine, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :e, octave: 4, type: :sine, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 4.5, col: 2, text: "Sine F4",~ - Inside source: true *** True Line Result row: 4.5, col: 2, text: "Sine F4", ** Processing line: ~ note: :f, octave: 4, type: :sine, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :f, octave: 4, type: :sine, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 5.5, col: 2, text: "Sine G4",~ - Inside source: true *** True Line Result row: 5.5, col: 2, text: "Sine G4", ** Processing line: ~ note: :g, octave: 4, type: :sine, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :g, octave: 4, type: :sine, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 6.5, col: 2, text: "Sine A5",~ - Inside source: true *** True Line Result row: 6.5, col: 2, text: "Sine A5", ** Processing line: ~ note: :a, octave: 5, type: :sine, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :a, octave: 5, type: :sine, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 7.5, col: 2, text: "Sine B5",~ - Inside source: true *** True Line Result row: 7.5, col: 2, text: "Sine B5", ** Processing line: ~ note: :b, octave: 5, type: :sine, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :b, octave: 5, type: :sine, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 8.5, col: 2, text: "Sine C5",~ - Inside source: true *** True Line Result row: 8.5, col: 2, text: "Sine C5", ** Processing line: ~ note: :c, octave: 5, type: :sine, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :c, octave: 5, type: :sine, method_to_call: :play_note), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def square_wave_note_buttons args~ - Inside source: true *** True Line Result def square_wave_note_buttons args ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 1.5, col: 6, text: "Square C4",~ - Inside source: true *** True Line Result row: 1.5, col: 6, text: "Square C4", ** Processing line: ~ note: :c, octave: 4, type: :square, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :c, octave: 4, type: :square, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 2.5, col: 6, text: "Square D4",~ - Inside source: true *** True Line Result row: 2.5, col: 6, text: "Square D4", ** Processing line: ~ note: :d, octave: 4, type: :square, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :d, octave: 4, type: :square, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 3.5, col: 6, text: "Square E4",~ - Inside source: true *** True Line Result row: 3.5, col: 6, text: "Square E4", ** Processing line: ~ note: :e, octave: 4, type: :square, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :e, octave: 4, type: :square, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 4.5, col: 6, text: "Square F4",~ - Inside source: true *** True Line Result row: 4.5, col: 6, text: "Square F4", ** Processing line: ~ note: :f, octave: 4, type: :square, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :f, octave: 4, type: :square, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 5.5, col: 6, text: "Square G4",~ - Inside source: true *** True Line Result row: 5.5, col: 6, text: "Square G4", ** Processing line: ~ note: :g, octave: 4, type: :square, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :g, octave: 4, type: :square, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 6.5, col: 6, text: "Square A5",~ - Inside source: true *** True Line Result row: 6.5, col: 6, text: "Square A5", ** Processing line: ~ note: :a, octave: 5, type: :square, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :a, octave: 5, type: :square, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 7.5, col: 6, text: "Square B5",~ - Inside source: true *** True Line Result row: 7.5, col: 6, text: "Square B5", ** Processing line: ~ note: :b, octave: 5, type: :square, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :b, octave: 5, type: :square, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 8.5, col: 6, text: "Square C5",~ - Inside source: true *** True Line Result row: 8.5, col: 6, text: "Square C5", ** Processing line: ~ note: :c, octave: 5, type: :square, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :c, octave: 5, type: :square, method_to_call: :play_note), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ def saw_tooth_wave_note_buttons args~ - Inside source: true *** True Line Result def saw_tooth_wave_note_buttons args ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 1.5, col: 8, text: "Saw C4",~ - Inside source: true *** True Line Result row: 1.5, col: 8, text: "Saw C4", ** Processing line: ~ note: :c, octave: 4, type: :saw_tooth, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :c, octave: 4, type: :saw_tooth, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 2.5, col: 8, text: "Saw D4",~ - Inside source: true *** True Line Result row: 2.5, col: 8, text: "Saw D4", ** Processing line: ~ note: :d, octave: 4, type: :saw_tooth, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :d, octave: 4, type: :saw_tooth, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 3.5, col: 8, text: "Saw E4",~ - Inside source: true *** True Line Result row: 3.5, col: 8, text: "Saw E4", ** Processing line: ~ note: :e, octave: 4, type: :saw_tooth, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :e, octave: 4, type: :saw_tooth, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 4.5, col: 8, text: "Saw F4",~ - Inside source: true *** True Line Result row: 4.5, col: 8, text: "Saw F4", ** Processing line: ~ note: :f, octave: 4, type: :saw_tooth, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :f, octave: 4, type: :saw_tooth, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 5.5, col: 8, text: "Saw G4",~ - Inside source: true *** True Line Result row: 5.5, col: 8, text: "Saw G4", ** Processing line: ~ note: :g, octave: 4, type: :saw_tooth, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :g, octave: 4, type: :saw_tooth, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 6.5, col: 8, text: "Saw A5",~ - Inside source: true *** True Line Result row: 6.5, col: 8, text: "Saw A5", ** Processing line: ~ note: :a, octave: 5, type: :saw_tooth, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :a, octave: 5, type: :saw_tooth, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 7.5, col: 8, text: "Saw B5",~ - Inside source: true *** True Line Result row: 7.5, col: 8, text: "Saw B5", ** Processing line: ~ note: :b, octave: 5, type: :saw_tooth, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :b, octave: 5, type: :saw_tooth, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 8.5, col: 8, text: "Saw C5",~ - Inside source: true *** True Line Result row: 8.5, col: 8, text: "Saw C5", ** Processing line: ~ note: :c, octave: 5, type: :saw_tooth, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :c, octave: 5, type: :saw_tooth, method_to_call: :play_note), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def triangle_wave_note_buttons args~ - Inside source: true *** True Line Result def triangle_wave_note_buttons args ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 1.5, col: 10, text: "Triangle C4",~ - Inside source: true *** True Line Result row: 1.5, col: 10, text: "Triangle C4", ** Processing line: ~ note: :c, octave: 4, type: :triangle, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :c, octave: 4, type: :triangle, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 2.5, col: 10, text: "Triangle D4",~ - Inside source: true *** True Line Result row: 2.5, col: 10, text: "Triangle D4", ** Processing line: ~ note: :d, octave: 4, type: :triangle, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :d, octave: 4, type: :triangle, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 3.5, col: 10, text: "Triangle E4",~ - Inside source: true *** True Line Result row: 3.5, col: 10, text: "Triangle E4", ** Processing line: ~ note: :e, octave: 4, type: :triangle, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :e, octave: 4, type: :triangle, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 4.5, col: 10, text: "Triangle F4",~ - Inside source: true *** True Line Result row: 4.5, col: 10, text: "Triangle F4", ** Processing line: ~ note: :f, octave: 4, type: :triangle, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :f, octave: 4, type: :triangle, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 5.5, col: 10, text: "Triangle G4",~ - Inside source: true *** True Line Result row: 5.5, col: 10, text: "Triangle G4", ** Processing line: ~ note: :g, octave: 4, type: :triangle, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :g, octave: 4, type: :triangle, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 6.5, col: 10, text: "Triangle A5",~ - Inside source: true *** True Line Result row: 6.5, col: 10, text: "Triangle A5", ** Processing line: ~ note: :a, octave: 5, type: :triangle, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :a, octave: 5, type: :triangle, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 7.5, col: 10, text: "Triangle B5",~ - Inside source: true *** True Line Result row: 7.5, col: 10, text: "Triangle B5", ** Processing line: ~ note: :b, octave: 5, type: :triangle, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :b, octave: 5, type: :triangle, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 8.5, col: 10, text: "Triangle C5",~ - Inside source: true *** True Line Result row: 8.5, col: 10, text: "Triangle C5", ** Processing line: ~ note: :c, octave: 5, type: :triangle, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :c, octave: 5, type: :triangle, method_to_call: :play_note), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bell_buttons args~ - Inside source: true *** True Line Result def bell_buttons args ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 1.5, col: 4, text: "Bell C4",~ - Inside source: true *** True Line Result row: 1.5, col: 4, text: "Bell C4", ** Processing line: ~ note: :c, octave: 4, type: :bell, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :c, octave: 4, type: :bell, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 2.5, col: 4, text: "Bell D4",~ - Inside source: true *** True Line Result row: 2.5, col: 4, text: "Bell D4", ** Processing line: ~ note: :d, octave: 4, type: :bell, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :d, octave: 4, type: :bell, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 3.5, col: 4, text: "Bell E4",~ - Inside source: true *** True Line Result row: 3.5, col: 4, text: "Bell E4", ** Processing line: ~ note: :e, octave: 4, type: :bell, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :e, octave: 4, type: :bell, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 4.5, col: 4, text: "Bell F4",~ - Inside source: true *** True Line Result row: 4.5, col: 4, text: "Bell F4", ** Processing line: ~ note: :f, octave: 4, type: :bell, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :f, octave: 4, type: :bell, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 5.5, col: 4, text: "Bell G4",~ - Inside source: true *** True Line Result row: 5.5, col: 4, text: "Bell G4", ** Processing line: ~ note: :g, octave: 4, type: :bell, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :g, octave: 4, type: :bell, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 6.5, col: 4, text: "Bell A5",~ - Inside source: true *** True Line Result row: 6.5, col: 4, text: "Bell A5", ** Processing line: ~ note: :a, octave: 5, type: :bell, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :a, octave: 5, type: :bell, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 7.5, col: 4, text: "Bell B5",~ - Inside source: true *** True Line Result row: 7.5, col: 4, text: "Bell B5", ** Processing line: ~ note: :b, octave: 5, type: :bell, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :b, octave: 5, type: :bell, method_to_call: :play_note), ** Processing line: ~ (button args,~ - Inside source: true *** True Line Result (button args, ** Processing line: ~ row: 8.5, col: 4, text: "Bell C5",~ - Inside source: true *** True Line Result row: 8.5, col: 4, text: "Bell C5", ** Processing line: ~ note: :c, octave: 5, type: :bell, method_to_call: :play_note),~ - Inside source: true *** True Line Result note: :c, octave: 5, type: :bell, method_to_call: :play_note), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin # region: wave generation~ - Inside source: true *** True Line Result begin # region: wave generation ** Processing line: ~ begin # sine wave~ - Inside source: true *** True Line Result begin # sine wave ** Processing line: ~ def defaults_sine_wave_for~ - Inside source: true *** True Line Result def defaults_sine_wave_for ** Processing line: ~ { frequency: 440, sample_rate: 48000 }~ - Inside source: true *** True Line Result { frequency: 440, sample_rate: 48000 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def sine_wave_for opts = {}~ - Inside source: true *** True Line Result def sine_wave_for opts = {} ** Processing line: ~ opts = defaults_sine_wave_for.merge opts~ - Inside source: true *** True Line Result opts = defaults_sine_wave_for.merge opts ** Processing line: ~ frequency = opts[:frequency]~ - Inside source: true *** True Line Result frequency = opts[:frequency] ** Processing line: ~ sample_rate = opts[:sample_rate]~ - Inside source: true *** True Line Result sample_rate = opts[:sample_rate] ** Processing line: ~ period_size = (sample_rate.fdiv frequency).ceil~ - Inside source: true *** True Line Result period_size = (sample_rate.fdiv frequency).ceil ** Processing line: ~ period_size.map_with_index do |i|~ - Inside source: true *** True Line Result period_size.map_with_index do |i| ** Processing line: ~ Math::sin((2.0 * Math::PI) / (sample_rate.to_f / frequency.to_f) * i)~ - Inside source: true *** True Line Result Math::sin((2.0 * Math::PI) / (sample_rate.to_f / frequency.to_f) * i) ** Processing line: ~ end.to_a~ - Inside source: true *** True Line Result end.to_a ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults_queue_sine_wave~ - Inside source: true *** True Line Result def defaults_queue_sine_wave ** Processing line: ~ { frequency: 440, duration: 60, gain: 1.0, fade_out: false, queue_in: 0 }~ - Inside source: true *** True Line Result { frequency: 440, duration: 60, gain: 1.0, fade_out: false, queue_in: 0 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def queue_sine_wave args, opts = {}~ - Inside source: true *** True Line Result def queue_sine_wave args, opts = {} ** Processing line: ~ opts = defaults_queue_sine_wave.merge opts~ - Inside source: true *** True Line Result opts = defaults_queue_sine_wave.merge opts ** Processing line: ~ frequency = opts[:frequency]~ - Inside source: true *** True Line Result frequency = opts[:frequency] ** Processing line: ~ sample_rate = 48000~ - Inside source: true *** True Line Result sample_rate = 48000 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sine_wave = sine_wave_for frequency: frequency, sample_rate: sample_rate~ - Inside source: true *** True Line Result sine_wave = sine_wave_for frequency: frequency, sample_rate: sample_rate ** Processing line: ~ args.state.sine_waves[frequency] ||= sine_wave_for frequency: frequency, sample_rate: sample_rate~ - Inside source: true *** True Line Result args.state.sine_waves[frequency] ||= sine_wave_for frequency: frequency, sample_rate: sample_rate ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ proc = lambda do~ - Inside source: true *** True Line Result proc = lambda do ** Processing line: ~ generate_audio_data args.state.sine_waves[frequency], sample_rate~ - Inside source: true *** True Line Result generate_audio_data args.state.sine_waves[frequency], sample_rate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ audio_state = new_audio_state args, opts~ - Inside source: true *** True Line Result audio_state = new_audio_state args, opts ** Processing line: ~ audio_state[:input] = [1, sample_rate, proc]~ - Inside source: true *** True Line Result audio_state[:input] = [1, sample_rate, proc] ** Processing line: ~ queue_audio args, audio_state: audio_state, wave: sine_wave~ - Inside source: true *** True Line Result queue_audio args, audio_state: audio_state, wave: sine_wave ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin # region: square wave~ - Inside source: true *** True Line Result begin # region: square wave ** Processing line: ~ def defaults_square_wave_for~ - Inside source: true *** True Line Result def defaults_square_wave_for ** Processing line: ~ { frequency: 440, sample_rate: 48000 }~ - Inside source: true *** True Line Result { frequency: 440, sample_rate: 48000 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def square_wave_for opts = {}~ - Inside source: true *** True Line Result def square_wave_for opts = {} ** Processing line: ~ opts = defaults_square_wave_for.merge opts~ - Inside source: true *** True Line Result opts = defaults_square_wave_for.merge opts ** Processing line: ~ sine_wave = sine_wave_for opts~ - Inside source: true *** True Line Result sine_wave = sine_wave_for opts ** Processing line: ~ sine_wave.map do |v|~ - Inside source: true *** True Line Result sine_wave.map do |v| ** Processing line: ~ if v >= 0~ - Inside source: true *** True Line Result if v >= 0 ** Processing line: ~ 1.0~ - Inside source: true *** True Line Result 1.0 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ -1.0~ - Inside source: true *** True Line Result -1.0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end.to_a~ - Inside source: true *** True Line Result end.to_a ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults_queue_square_wave~ - Inside source: true *** True Line Result def defaults_queue_square_wave ** Processing line: ~ { frequency: 440, duration: 60, gain: 0.3, fade_out: false, queue_in: 0 }~ - Inside source: true *** True Line Result { frequency: 440, duration: 60, gain: 0.3, fade_out: false, queue_in: 0 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def queue_square_wave args, opts = {}~ - Inside source: true *** True Line Result def queue_square_wave args, opts = {} ** Processing line: ~ opts = defaults_queue_square_wave.merge opts~ - Inside source: true *** True Line Result opts = defaults_queue_square_wave.merge opts ** Processing line: ~ frequency = opts[:frequency]~ - Inside source: true *** True Line Result frequency = opts[:frequency] ** Processing line: ~ sample_rate = 48000~ - Inside source: true *** True Line Result sample_rate = 48000 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ square_wave = square_wave_for frequency: frequency, sample_rate: sample_rate~ - Inside source: true *** True Line Result square_wave = square_wave_for frequency: frequency, sample_rate: sample_rate ** Processing line: ~ args.state.square_waves[frequency] ||= square_wave_for frequency: frequency, sample_rate: sample_rate~ - Inside source: true *** True Line Result args.state.square_waves[frequency] ||= square_wave_for frequency: frequency, sample_rate: sample_rate ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ proc = lambda do~ - Inside source: true *** True Line Result proc = lambda do ** Processing line: ~ generate_audio_data args.state.square_waves[frequency], sample_rate~ - Inside source: true *** True Line Result generate_audio_data args.state.square_waves[frequency], sample_rate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ audio_state = new_audio_state args, opts~ - Inside source: true *** True Line Result audio_state = new_audio_state args, opts ** Processing line: ~ audio_state[:input] = [1, sample_rate, proc]~ - Inside source: true *** True Line Result audio_state[:input] = [1, sample_rate, proc] ** Processing line: ~ queue_audio args, audio_state: audio_state, wave: square_wave~ - Inside source: true *** True Line Result queue_audio args, audio_state: audio_state, wave: square_wave ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin # region: saw tooth wave~ - Inside source: true *** True Line Result begin # region: saw tooth wave ** Processing line: ~ def defaults_saw_tooth_wave_for~ - Inside source: true *** True Line Result def defaults_saw_tooth_wave_for ** Processing line: ~ { frequency: 440, sample_rate: 48000 }~ - Inside source: true *** True Line Result { frequency: 440, sample_rate: 48000 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def saw_tooth_wave_for opts = {}~ - Inside source: true *** True Line Result def saw_tooth_wave_for opts = {} ** Processing line: ~ opts = defaults_saw_tooth_wave_for.merge opts~ - Inside source: true *** True Line Result opts = defaults_saw_tooth_wave_for.merge opts ** Processing line: ~ sine_wave = sine_wave_for opts~ - Inside source: true *** True Line Result sine_wave = sine_wave_for opts ** Processing line: ~ period_size = sine_wave.length~ - Inside source: true *** True Line Result period_size = sine_wave.length ** Processing line: ~ sine_wave.map_with_index do |v, i|~ - Inside source: true *** True Line Result sine_wave.map_with_index do |v, i| ** Processing line: ~ (((i % period_size).fdiv period_size) * 2) - 1~ - Inside source: true *** True Line Result (((i % period_size).fdiv period_size) * 2) - 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults_queue_saw_tooth_wave~ - Inside source: true *** True Line Result def defaults_queue_saw_tooth_wave ** Processing line: ~ { frequency: 440, duration: 60, gain: 0.3, fade_out: false, queue_in: 0 }~ - Inside source: true *** True Line Result { frequency: 440, duration: 60, gain: 0.3, fade_out: false, queue_in: 0 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def queue_saw_tooth_wave args, opts = {}~ - Inside source: true *** True Line Result def queue_saw_tooth_wave args, opts = {} ** Processing line: ~ opts = defaults_queue_saw_tooth_wave.merge opts~ - Inside source: true *** True Line Result opts = defaults_queue_saw_tooth_wave.merge opts ** Processing line: ~ frequency = opts[:frequency]~ - Inside source: true *** True Line Result frequency = opts[:frequency] ** Processing line: ~ sample_rate = 48000~ - Inside source: true *** True Line Result sample_rate = 48000 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ saw_tooth_wave = saw_tooth_wave_for frequency: frequency, sample_rate: sample_rate~ - Inside source: true *** True Line Result saw_tooth_wave = saw_tooth_wave_for frequency: frequency, sample_rate: sample_rate ** Processing line: ~ args.state.saw_tooth_waves[frequency] ||= saw_tooth_wave_for frequency: frequency, sample_rate: sample_rate~ - Inside source: true *** True Line Result args.state.saw_tooth_waves[frequency] ||= saw_tooth_wave_for frequency: frequency, sample_rate: sample_rate ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ proc = lambda do~ - Inside source: true *** True Line Result proc = lambda do ** Processing line: ~ generate_audio_data args.state.saw_tooth_waves[frequency], sample_rate~ - Inside source: true *** True Line Result generate_audio_data args.state.saw_tooth_waves[frequency], sample_rate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ audio_state = new_audio_state args, opts~ - Inside source: true *** True Line Result audio_state = new_audio_state args, opts ** Processing line: ~ audio_state[:input] = [1, sample_rate, proc]~ - Inside source: true *** True Line Result audio_state[:input] = [1, sample_rate, proc] ** Processing line: ~ queue_audio args, audio_state: audio_state, wave: saw_tooth_wave~ - Inside source: true *** True Line Result queue_audio args, audio_state: audio_state, wave: saw_tooth_wave ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin # region: triangle wave~ - Inside source: true *** True Line Result begin # region: triangle wave ** Processing line: ~ def defaults_triangle_wave_for~ - Inside source: true *** True Line Result def defaults_triangle_wave_for ** Processing line: ~ { frequency: 440, sample_rate: 48000 }~ - Inside source: true *** True Line Result { frequency: 440, sample_rate: 48000 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def triangle_wave_for opts = {}~ - Inside source: true *** True Line Result def triangle_wave_for opts = {} ** Processing line: ~ opts = defaults_saw_tooth_wave_for.merge opts~ - Inside source: true *** True Line Result opts = defaults_saw_tooth_wave_for.merge opts ** Processing line: ~ sine_wave = sine_wave_for opts~ - Inside source: true *** True Line Result sine_wave = sine_wave_for opts ** Processing line: ~ period_size = sine_wave.length~ - Inside source: true *** True Line Result period_size = sine_wave.length ** Processing line: ~ sine_wave.map_with_index do |v, i|~ - Inside source: true *** True Line Result sine_wave.map_with_index do |v, i| ** Processing line: ~ ratio = (i.fdiv period_size)~ - Inside source: true *** True Line Result ratio = (i.fdiv period_size) ** Processing line: ~ if ratio <= 0.5~ - Inside source: true *** True Line Result if ratio <= 0.5 ** Processing line: ~ (ratio * 4) - 1~ - Inside source: true *** True Line Result (ratio * 4) - 1 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ ratio -= 0.5~ - Inside source: true *** True Line Result ratio -= 0.5 ** Processing line: ~ 1 - (ratio * 4)~ - Inside source: true *** True Line Result 1 - (ratio * 4) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults_queue_triangle_wave~ - Inside source: true *** True Line Result def defaults_queue_triangle_wave ** Processing line: ~ { frequency: 440, duration: 60, gain: 1.0, fade_out: false, queue_in: 0 }~ - Inside source: true *** True Line Result { frequency: 440, duration: 60, gain: 1.0, fade_out: false, queue_in: 0 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def queue_triangle_wave args, opts = {}~ - Inside source: true *** True Line Result def queue_triangle_wave args, opts = {} ** Processing line: ~ opts = defaults_queue_triangle_wave.merge opts~ - Inside source: true *** True Line Result opts = defaults_queue_triangle_wave.merge opts ** Processing line: ~ frequency = opts[:frequency]~ - Inside source: true *** True Line Result frequency = opts[:frequency] ** Processing line: ~ sample_rate = 48000~ - Inside source: true *** True Line Result sample_rate = 48000 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ triangle_wave = triangle_wave_for frequency: frequency, sample_rate: sample_rate~ - Inside source: true *** True Line Result triangle_wave = triangle_wave_for frequency: frequency, sample_rate: sample_rate ** Processing line: ~ args.state.triangle_waves[frequency] ||= triangle_wave_for frequency: frequency, sample_rate: sample_rate~ - Inside source: true *** True Line Result args.state.triangle_waves[frequency] ||= triangle_wave_for frequency: frequency, sample_rate: sample_rate ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ proc = lambda do~ - Inside source: true *** True Line Result proc = lambda do ** Processing line: ~ generate_audio_data args.state.triangle_waves[frequency], sample_rate~ - Inside source: true *** True Line Result generate_audio_data args.state.triangle_waves[frequency], sample_rate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ audio_state = new_audio_state args, opts~ - Inside source: true *** True Line Result audio_state = new_audio_state args, opts ** Processing line: ~ audio_state[:input] = [1, sample_rate, proc]~ - Inside source: true *** True Line Result audio_state[:input] = [1, sample_rate, proc] ** Processing line: ~ queue_audio args, audio_state: audio_state, wave: triangle_wave~ - Inside source: true *** True Line Result queue_audio args, audio_state: audio_state, wave: triangle_wave ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin # region: bell~ - Inside source: true *** True Line Result begin # region: bell ** Processing line: ~ def defaults_queue_bell~ - Inside source: true *** True Line Result def defaults_queue_bell ** Processing line: ~ { frequency: 440, duration: 1.seconds, queue_in: 0 }~ - Inside source: true *** True Line Result { frequency: 440, duration: 1.seconds, queue_in: 0 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def queue_bell args, opts = {}~ - Inside source: true *** True Line Result def queue_bell args, opts = {} ** Processing line: ~ (bell_to_sine_waves (defaults_queue_bell.merge opts)).each { |b| queue_sine_wave args, b }~ - Inside source: true *** True Line Result (bell_to_sine_waves (defaults_queue_bell.merge opts)).each { |b| queue_sine_wave args, b } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bell_harmonics~ - Inside source: true *** True Line Result def bell_harmonics ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ { frequency_ratio: 0.5, duration_ratio: 1.00 },~ - Inside source: true *** True Line Result { frequency_ratio: 0.5, duration_ratio: 1.00 }, ** Processing line: ~ { frequency_ratio: 1.0, duration_ratio: 0.80 },~ - Inside source: true *** True Line Result { frequency_ratio: 1.0, duration_ratio: 0.80 }, ** Processing line: ~ { frequency_ratio: 2.0, duration_ratio: 0.60 },~ - Inside source: true *** True Line Result { frequency_ratio: 2.0, duration_ratio: 0.60 }, ** Processing line: ~ { frequency_ratio: 3.0, duration_ratio: 0.40 },~ - Inside source: true *** True Line Result { frequency_ratio: 3.0, duration_ratio: 0.40 }, ** Processing line: ~ { frequency_ratio: 4.2, duration_ratio: 0.25 },~ - Inside source: true *** True Line Result { frequency_ratio: 4.2, duration_ratio: 0.25 }, ** Processing line: ~ { frequency_ratio: 5.4, duration_ratio: 0.20 },~ - Inside source: true *** True Line Result { frequency_ratio: 5.4, duration_ratio: 0.20 }, ** Processing line: ~ { frequency_ratio: 6.8, duration_ratio: 0.15 }~ - Inside source: true *** True Line Result { frequency_ratio: 6.8, duration_ratio: 0.15 } ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults_bell_to_sine_waves~ - Inside source: true *** True Line Result def defaults_bell_to_sine_waves ** Processing line: ~ { frequency: 440, duration: 1.seconds, queue_in: 0 }~ - Inside source: true *** True Line Result { frequency: 440, duration: 1.seconds, queue_in: 0 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bell_to_sine_waves opts = {}~ - Inside source: true *** True Line Result def bell_to_sine_waves opts = {} ** Processing line: ~ opts = defaults_bell_to_sine_waves.merge opts~ - Inside source: true *** True Line Result opts = defaults_bell_to_sine_waves.merge opts ** Processing line: ~ bell_harmonics.map do |b|~ - Inside source: true *** True Line Result bell_harmonics.map do |b| ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ frequency: opts[:frequency] * b[:frequency_ratio],~ - Inside source: true *** True Line Result frequency: opts[:frequency] * b[:frequency_ratio], ** Processing line: ~ duration: opts[:duration] * b[:duration_ratio],~ - Inside source: true *** True Line Result duration: opts[:duration] * b[:duration_ratio], ** Processing line: ~ queue_in: opts[:queue_in],~ - Inside source: true *** True Line Result queue_in: opts[:queue_in], ** Processing line: ~ gain: (1.fdiv bell_harmonics.length),~ - Inside source: true *** True Line Result gain: (1.fdiv bell_harmonics.length), ** Processing line: ~ fade_out: true~ - Inside source: true *** True Line Result fade_out: true ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin # audio entity construction~ - Inside source: true *** True Line Result begin # audio entity construction ** Processing line: ~ def generate_audio_data sine_wave, sample_rate~ - Inside source: true *** True Line Result def generate_audio_data sine_wave, sample_rate ** Processing line: ~ sample_size = (sample_rate.fdiv (1000.fdiv 60)).ceil~ - Inside source: true *** True Line Result sample_size = (sample_rate.fdiv (1000.fdiv 60)).ceil ** Processing line: ~ copy_count = (sample_size.fdiv sine_wave.length).ceil~ - Inside source: true *** True Line Result copy_count = (sample_size.fdiv sine_wave.length).ceil ** Processing line: ~ sine_wave * copy_count~ - Inside source: true *** True Line Result sine_wave * copy_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults_new_audio_state~ - Inside source: true *** True Line Result def defaults_new_audio_state ** Processing line: ~ { frequency: 440, duration: 60, gain: 1.0, fade_out: false, queue_in: 0 }~ - Inside source: true *** True Line Result { frequency: 440, duration: 60, gain: 1.0, fade_out: false, queue_in: 0 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_audio_state args, opts = {}~ - Inside source: true *** True Line Result def new_audio_state args, opts = {} ** Processing line: ~ opts = defaults_new_audio_state.merge opts~ - Inside source: true *** True Line Result opts = defaults_new_audio_state.merge opts ** Processing line: ~ decay_rate = 0~ - Inside source: true *** True Line Result decay_rate = 0 ** Processing line: ~ decay_rate = 1.fdiv(opts[:duration]) * opts[:gain] if opts[:fade_out]~ - Inside source: true *** True Line Result decay_rate = 1.fdiv(opts[:duration]) * opts[:gain] if opts[:fade_out] ** Processing line: ~ frequency = opts[:frequency]~ - Inside source: true *** True Line Result frequency = opts[:frequency] ** Processing line: ~ sample_rate = 48000~ - Inside source: true *** True Line Result sample_rate = 48000 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ id: (new_id! args),~ - Inside source: true *** True Line Result id: (new_id! args), ** Processing line: ~ frequency: frequency,~ - Inside source: true *** True Line Result frequency: frequency, ** Processing line: ~ sample_rate: 48000,~ - Inside source: true *** True Line Result sample_rate: 48000, ** Processing line: ~ stop_at: args.tick_count + opts[:queue_in] + opts[:duration],~ - Inside source: true *** True Line Result stop_at: args.tick_count + opts[:queue_in] + opts[:duration], ** Processing line: ~ gain: opts[:gain].to_f,~ - Inside source: true *** True Line Result gain: opts[:gain].to_f, ** Processing line: ~ queue_at: args.state.tick_count + opts[:queue_in],~ - Inside source: true *** True Line Result queue_at: args.state.tick_count + opts[:queue_in], ** Processing line: ~ decay_rate: decay_rate,~ - Inside source: true *** True Line Result decay_rate: decay_rate, ** Processing line: ~ pitch: 1.0,~ - Inside source: true *** True Line Result pitch: 1.0, ** Processing line: ~ looping: true,~ - Inside source: true *** True Line Result looping: true, ** Processing line: ~ paused: false~ - Inside source: true *** True Line Result paused: false ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def queue_audio args, opts = {}~ - Inside source: true *** True Line Result def queue_audio args, opts = {} ** Processing line: ~ graph_wave args, opts[:wave], opts[:audio_state][:frequency]~ - Inside source: true *** True Line Result graph_wave args, opts[:wave], opts[:audio_state][:frequency] ** Processing line: ~ args.state.audio_queue << opts[:audio_state]~ - Inside source: true *** True Line Result args.state.audio_queue << opts[:audio_state] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_id! args~ - Inside source: true *** True Line Result def new_id! args ** Processing line: ~ args.state.audio_id ||= 0~ - Inside source: true *** True Line Result args.state.audio_id ||= 0 ** Processing line: ~ args.state.audio_id += 1~ - Inside source: true *** True Line Result args.state.audio_id += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def graph_wave args, wave, frequency~ - Inside source: true *** True Line Result def graph_wave args, wave, frequency ** Processing line: ~ if args.state.tick_count != args.state.graphed_at~ - Inside source: true *** True Line Result if args.state.tick_count != args.state.graphed_at ** Processing line: ~ args.outputs.static_lines.clear~ - Inside source: true *** True Line Result args.outputs.static_lines.clear ** Processing line: ~ args.outputs.static_sprites.clear~ - Inside source: true *** True Line Result args.outputs.static_sprites.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ wave = wave~ - Inside source: true *** True Line Result wave = wave ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ r, g, b = frequency.to_i % 85,~ - Inside source: true *** True Line Result r, g, b = frequency.to_i % 85, ** Processing line: ~ frequency.to_i % 170,~ - Inside source: true *** True Line Result frequency.to_i % 170, ** Processing line: ~ frequency.to_i % 255~ - Inside source: true *** True Line Result frequency.to_i % 255 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ starting_rect = args.layout.rect(row: 5, col: 13)~ - Inside source: true *** True Line Result starting_rect = args.layout.rect(row: 5, col: 13) ** Processing line: ~ x_scale = 10~ - Inside source: true *** True Line Result x_scale = 10 ** Processing line: ~ y_scale = 100~ - Inside source: true *** True Line Result y_scale = 100 ** Processing line: ~ max_points = 25~ - Inside source: true *** True Line Result max_points = 25 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ points = wave~ - Inside source: true *** True Line Result points = wave ** Processing line: ~ if wave.length > max_points~ - Inside source: true *** True Line Result if wave.length > max_points ** Processing line: ~ resolution = wave.length.idiv max_points~ - Inside source: true *** True Line Result resolution = wave.length.idiv max_points ** Processing line: ~ points = wave.find_all.with_index { |y, i| (i % resolution == 0) }~ - Inside source: true *** True Line Result points = wave.find_all.with_index { |y, i| (i % resolution == 0) } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.static_lines << points.map_with_index do |y, x|~ - Inside source: true *** True Line Result args.outputs.static_lines << points.map_with_index do |y, x| ** Processing line: ~ next_y = points[x + 1]~ - Inside source: true *** True Line Result next_y = points[x + 1] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if next_y~ - Inside source: true *** True Line Result if next_y ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: starting_rect.x + (x * x_scale),~ - Inside source: true *** True Line Result x: starting_rect.x + (x * x_scale), ** Processing line: ~ y: starting_rect.y + starting_rect.h.half + y_scale * y,~ - Inside source: true *** True Line Result y: starting_rect.y + starting_rect.h.half + y_scale * y, ** Processing line: ~ x2: starting_rect.x + ((x + 1) * x_scale),~ - Inside source: true *** True Line Result x2: starting_rect.x + ((x + 1) * x_scale), ** Processing line: ~ y2: starting_rect.y + starting_rect.h.half + y_scale * next_y,~ - Inside source: true *** True Line Result y2: starting_rect.y + starting_rect.h.half + y_scale * next_y, ** Processing line: ~ r: r,~ - Inside source: true *** True Line Result r: r, ** Processing line: ~ g: g,~ - Inside source: true *** True Line Result g: g, ** Processing line: ~ b: b~ - Inside source: true *** True Line Result b: b ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.static_sprites << points.map_with_index do |y, x|~ - Inside source: true *** True Line Result args.outputs.static_sprites << points.map_with_index do |y, x| ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: (starting_rect.x + (x * x_scale)) - 2,~ - Inside source: true *** True Line Result x: (starting_rect.x + (x * x_scale)) - 2, ** Processing line: ~ y: (starting_rect.y + starting_rect.h.half + y_scale * y) - 2,~ - Inside source: true *** True Line Result y: (starting_rect.y + starting_rect.h.half + y_scale * y) - 2, ** Processing line: ~ w: 4,~ - Inside source: true *** True Line Result w: 4, ** Processing line: ~ h: 4,~ - Inside source: true *** True Line Result h: 4, ** Processing line: ~ path: 'sprites/square-white.png',~ - Inside source: true *** True Line Result path: 'sprites/square-white.png', ** Processing line: ~ r: r,~ - Inside source: true *** True Line Result r: r, ** Processing line: ~ g: g,~ - Inside source: true *** True Line Result g: g, ** Processing line: ~ b: b~ - Inside source: true *** True Line Result b: b ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.graphed_at = args.state.tick_count~ - Inside source: true *** True Line Result args.state.graphed_at = args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin # region: musical note mapping~ - Inside source: true *** True Line Result begin # region: musical note mapping ** Processing line: ~ def defaults_frequency_for~ - Inside source: true *** True Line Result def defaults_frequency_for ** Processing line: ~ { note: :a, octave: 5, sharp: false, flat: false }~ - Inside source: true *** True Line Result { note: :a, octave: 5, sharp: false, flat: false } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def frequency_for opts = {}~ - Inside source: true *** True Line Result def frequency_for opts = {} ** Processing line: ~ opts = defaults_frequency_for.merge opts~ - Inside source: true *** True Line Result opts = defaults_frequency_for.merge opts ** Processing line: ~ octave_offset_multiplier = opts[:octave] - 5~ - Inside source: true *** True Line Result octave_offset_multiplier = opts[:octave] - 5 ** Processing line: ~ note = note_frequencies_octave_5[opts[:note]]~ - Inside source: true *** True Line Result note = note_frequencies_octave_5[opts[:note]] ** Processing line: ~ if octave_offset_multiplier < 0~ - Inside source: true *** True Line Result if octave_offset_multiplier < 0 ** Processing line: ~ note = note * 1 / (octave_offset_multiplier.abs + 1)~ - Inside source: true *** True Line Result note = note * 1 / (octave_offset_multiplier.abs + 1) ** Processing line: ~ elsif octave_offset_multiplier > 0~ - Inside source: true *** True Line Result elsif octave_offset_multiplier > 0 ** Processing line: ~ note = note * (octave_offset_multiplier.abs + 1) / 1~ - Inside source: true *** True Line Result note = note * (octave_offset_multiplier.abs + 1) / 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ note~ - Inside source: true *** True Line Result note ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def note_frequencies_octave_5~ - Inside source: true *** True Line Result def note_frequencies_octave_5 ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ a: 440.0,~ - Inside source: true *** True Line Result a: 440.0, ** Processing line: ~ a_sharp: 466.16, b_flat: 466.16,~ - Inside source: true *** True Line Result a_sharp: 466.16, b_flat: 466.16, ** Processing line: ~ b: 493.88,~ - Inside source: true *** True Line Result b: 493.88, ** Processing line: ~ c: 523.25,~ - Inside source: true *** True Line Result c: 523.25, ** Processing line: ~ c_sharp: 554.37, d_flat: 587.33,~ - Inside source: true *** True Line Result c_sharp: 554.37, d_flat: 587.33, ** Processing line: ~ d: 587.33,~ - Inside source: true *** True Line Result d: 587.33, ** Processing line: ~ d_sharp: 622.25, e_flat: 659.25,~ - Inside source: true *** True Line Result d_sharp: 622.25, e_flat: 659.25, ** Processing line: ~ e: 659.25,~ - Inside source: true *** True Line Result e: 659.25, ** Processing line: ~ f: 698.25,~ - Inside source: true *** True Line Result f: 698.25, ** Processing line: ~ f_sharp: 739.99, g_flat: 739.99,~ - Inside source: true *** True Line Result f_sharp: 739.99, g_flat: 739.99, ** Processing line: ~ g: 783.99,~ - Inside source: true *** True Line Result g: 783.99, ** Processing line: ~ g_sharp: 830.61, a_flat: 830.61~ - Inside source: true *** True Line Result g_sharp: 830.61, a_flat: 830.61 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Rendering - Labels With Wrapped Text - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Rendering - Labels With Wrapped Text - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_rendering/00_labels_with_wrapped_text/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_rendering/00_labels_with_wrapped_text/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # defaults~ - Inside source: true *** True Line Result # defaults ** Processing line: ~ args.state.scroll_location ||= 0~ - Inside source: true *** True Line Result args.state.scroll_location ||= 0 ** Processing line: ~ args.state.textbox.messages ||= []~ - Inside source: true *** True Line Result args.state.textbox.messages ||= [] ** Processing line: ~ args.state.textbox.scroll ||= 0~ - Inside source: true *** True Line Result args.state.textbox.scroll ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render~ - Inside source: true *** True Line Result # render ** Processing line: ~ args.outputs.background_color = [0, 0, 0, 255]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0, 255] ** Processing line: ~ render_messages args~ - Inside source: true *** True Line Result render_messages args ** Processing line: ~ render_instructions args~ - Inside source: true *** True Line Result render_instructions args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # inputs~ - Inside source: true *** True Line Result # inputs ** Processing line: ~ if args.inputs.keyboard.key_down.one~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.one ** Processing line: ~ queue_message args, "Hello there neighbour! my name is mark, how is your day today?"~ - Inside source: true *** True Line Result queue_message args, "Hello there neighbour! my name is mark, how is your day today?" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.keyboard.key_down.two~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.two ** Processing line: ~ queue_message args, "I'm doing great sir, actually I'm having a picnic today"~ - Inside source: true *** True Line Result queue_message args, "I'm doing great sir, actually I'm having a picnic today" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.keyboard.key_down.three~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.three ** Processing line: ~ queue_message args, "Well that sounds wonderful!"~ - Inside source: true *** True Line Result queue_message args, "Well that sounds wonderful!" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.keyboard.key_down.home~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.home ** Processing line: ~ args.state.scroll_location = 1~ - Inside source: true *** True Line Result args.state.scroll_location = 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.keyboard.key_down.delete~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.delete ** Processing line: ~ clear_message_queue args~ - Inside source: true *** True Line Result clear_message_queue args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def queue_message args, msg~ - Inside source: true *** True Line Result def queue_message args, msg ** Processing line: ~ args.state.textbox.messages.concat msg.wrapped_lines 50~ - Inside source: true *** True Line Result args.state.textbox.messages.concat msg.wrapped_lines 50 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def clear_message_queue args~ - Inside source: true *** True Line Result def clear_message_queue args ** Processing line: ~ args.state.textbox.messages = nil~ - Inside source: true *** True Line Result args.state.textbox.messages = nil ** Processing line: ~ args.state.textbox.scroll = 0~ - Inside source: true *** True Line Result args.state.textbox.scroll = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_messages args~ - Inside source: true *** True Line Result def render_messages args ** Processing line: ~ args.outputs[:textbox].w = 400~ - Inside source: true *** True Line Result args.outputs[:textbox].w = 400 ** Processing line: ~ args.outputs[:textbox].h = 720~ - Inside source: true *** True Line Result args.outputs[:textbox].h = 720 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.primitives << args.state.textbox.messages.each_with_index.map do |s, idx|~ - Inside source: true *** True Line Result args.outputs.primitives << args.state.textbox.messages.each_with_index.map do |s, idx| ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: 0,~ - Inside source: true *** True Line Result x: 0, ** Processing line: ~ y: 20 * (args.state.textbox.messages.size - idx) + args.state.textbox.scroll * 20,~ - Inside source: true *** True Line Result y: 20 * (args.state.textbox.messages.size - idx) + args.state.textbox.scroll * 20, ** Processing line: ~ text: s,~ - Inside source: true *** True Line Result text: s, ** Processing line: ~ size_enum: -3,~ - Inside source: true *** True Line Result size_enum: -3, ** Processing line: ~ alignment_enum: 0,~ - Inside source: true *** True Line Result alignment_enum: 0, ** Processing line: ~ r: 255, g:255, b: 255, a: 255~ - Inside source: true *** True Line Result r: 255, g:255, b: 255, a: 255 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs[:textbox].labels << args.state.textbox.messages.each_with_index.map do |s, idx|~ - Inside source: true *** True Line Result args.outputs[:textbox].labels << args.state.textbox.messages.each_with_index.map do |s, idx| ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: 0,~ - Inside source: true *** True Line Result x: 0, ** Processing line: ~ y: 20 * (args.state.textbox.messages.size - idx) + args.state.textbox.scroll * 20,~ - Inside source: true *** True Line Result y: 20 * (args.state.textbox.messages.size - idx) + args.state.textbox.scroll * 20, ** Processing line: ~ text: s,~ - Inside source: true *** True Line Result text: s, ** Processing line: ~ size_enum: -3,~ - Inside source: true *** True Line Result size_enum: -3, ** Processing line: ~ alignment_enum: 0,~ - Inside source: true *** True Line Result alignment_enum: 0, ** Processing line: ~ r: 255, g:255, b: 255, a: 255~ - Inside source: true *** True Line Result r: 255, g:255, b: 255, a: 255 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs[:textbox].borders << [0, 0, args.outputs[:textbox].w, 720]~ - Inside source: true *** True Line Result args.outputs[:textbox].borders << [0, 0, args.outputs[:textbox].w, 720] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.textbox.scroll += args.inputs.mouse.wheel.y unless args.inputs.mouse.wheel.nil?~ - Inside source: true *** True Line Result args.state.textbox.scroll += args.inputs.mouse.wheel.y unless args.inputs.mouse.wheel.nil? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.scroll_location > 0~ - Inside source: true *** True Line Result if args.state.scroll_location > 0 ** Processing line: ~ args.state.textbox.scroll = 0~ - Inside source: true *** True Line Result args.state.textbox.scroll = 0 ** Processing line: ~ args.state.scroll_location = 0~ - Inside source: true *** True Line Result args.state.scroll_location = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.sprites << [900, 0, args.outputs[:textbox].w, 720, :textbox]~ - Inside source: true *** True Line Result args.outputs.sprites << [900, 0, args.outputs[:textbox].w, 720, :textbox] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_instructions args~ - Inside source: true *** True Line Result def render_instructions args ** Processing line: ~ args.outputs.labels << [30,~ - Inside source: true *** True Line Result args.outputs.labels << [30, ** Processing line: ~ 30.from_top,~ - Inside source: true *** True Line Result 30.from_top, ** Processing line: ~ "press 1, 2, 3 to display messages, MOUSE WHEEL to scroll, HOME to go to top, BACKSPACE to delete.",~ - Inside source: true *** True Line Result "press 1, 2, 3 to display messages, MOUSE WHEEL to scroll, HOME to go to top, BACKSPACE to delete.", ** Processing line: ~ 0, 255, 255]~ - Inside source: true *** True Line Result 0, 255, 255] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.primitives << [0, 55.from_top, 1280, 30, :pixel, 0, 255, 0, 0, 0].sprite~ - Inside source: true *** True Line Result args.outputs.primitives << [0, 55.from_top, 1280, 30, :pixel, 0, 255, 0, 0, 0].sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Rendering - Rotating Label - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Rendering - Rotating Label - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_rendering/00_rotating_label/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_rendering/00_rotating_label/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # set the render target width and height to match the label~ - Inside source: true *** True Line Result # set the render target width and height to match the label ** Processing line: ~ args.outputs[:scene].w = 220~ - Inside source: true *** True Line Result args.outputs[:scene].w = 220 ** Processing line: ~ args.outputs[:scene].h = 30~ - Inside source: true *** True Line Result args.outputs[:scene].h = 30 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # make the background transparent~ - Inside source: true *** True Line Result # make the background transparent ** Processing line: ~ args.outputs[:scene].background_color = [255, 255, 255, 0]~ - Inside source: true *** True Line Result args.outputs[:scene].background_color = [255, 255, 255, 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # set the blendmode of the label to 0 (no blending)~ - Inside source: true *** True Line Result # set the blendmode of the label to 0 (no blending) ** Processing line: ~ # center it inside of the scene~ - Inside source: true *** True Line Result # center it inside of the scene ** Processing line: ~ # set the vertical_alignment_enum to 1 (center)~ - Inside source: true *** True Line Result # set the vertical_alignment_enum to 1 (center) ** Processing line: ~ args.outputs[:scene].labels << { x: 0,~ - Inside source: true *** True Line Result args.outputs[:scene].labels << { x: 0, ** Processing line: ~ y: 15,~ - Inside source: true *** True Line Result y: 15, ** Processing line: ~ text: "label in render target",~ - Inside source: true *** True Line Result text: "label in render target", ** Processing line: ~ blendmode_enum: 0,~ - Inside source: true *** True Line Result blendmode_enum: 0, ** Processing line: ~ vertical_alignment_enum: 1 }~ - Inside source: true *** True Line Result vertical_alignment_enum: 1 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # add a border to the render target~ - Inside source: true *** True Line Result # add a border to the render target ** Processing line: ~ args.outputs[:scene].borders << { x: 0,~ - Inside source: true *** True Line Result args.outputs[:scene].borders << { x: 0, ** Processing line: ~ y: 0,~ - Inside source: true *** True Line Result y: 0, ** Processing line: ~ w: args.outputs[:scene].w,~ - Inside source: true *** True Line Result w: args.outputs[:scene].w, ** Processing line: ~ h: args.outputs[:scene].h }~ - Inside source: true *** True Line Result h: args.outputs[:scene].h } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # add the rendertarget to the main output as a sprite~ - Inside source: true *** True Line Result # add the rendertarget to the main output as a sprite ** Processing line: ~ args.outputs.sprites << { x: 640 - args.outputs[:scene].w.half,~ - Inside source: true *** True Line Result args.outputs.sprites << { x: 640 - args.outputs[:scene].w.half, ** Processing line: ~ y: 360 - args.outputs[:scene].h.half,~ - Inside source: true *** True Line Result y: 360 - args.outputs[:scene].h.half, ** Processing line: ~ w: args.outputs[:scene].w,~ - Inside source: true *** True Line Result w: args.outputs[:scene].w, ** Processing line: ~ h: args.outputs[:scene].h,~ - Inside source: true *** True Line Result h: args.outputs[:scene].h, ** Processing line: ~ angle: args.state.tick_count,~ - Inside source: true *** True Line Result angle: args.state.tick_count, ** Processing line: ~ path: :scene }~ - Inside source: true *** True Line Result path: :scene } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Rendering - Simple Render Targets - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Rendering - Simple Render Targets - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_rendering/01_simple_render_targets/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_rendering/01_simple_render_targets/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # args.outputs.render_targets are really really powerful.~ - Inside source: true *** True Line Result # args.outputs.render_targets are really really powerful. ** Processing line: ~ # They essentially allow you to create a sprite programmatically and cache the result.~ - Inside source: true *** True Line Result # They essentially allow you to create a sprite programmatically and cache the result. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Create a render_target of a :block and a :gradient on tick zero.~ - Inside source: true *** True Line Result # Create a render_target of a :block and a :gradient on tick zero. ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.render_target(:block).solids << [0, 0, 1280, 100]~ - Inside source: true *** True Line Result args.render_target(:block).solids << [0, 0, 1280, 100] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The gradient is actually just a collection of black solids with increasing~ - Inside source: true *** True Line Result # The gradient is actually just a collection of black solids with increasing ** Processing line: ~ # opacities.~ - Inside source: true *** True Line Result # opacities. ** Processing line: ~ args.render_target(:gradient).solids << 90.map_with_index do |x|~ - Inside source: true *** True Line Result args.render_target(:gradient).solids << 90.map_with_index do |x| ** Processing line: ~ 50.map_with_index do |y|~ - Inside source: true *** True Line Result 50.map_with_index do |y| ** Processing line: ~ [x * 15, y * 15, 15, 15, 0, 0, 0, (x * 3).fdiv(255) * 255]~ - Inside source: true *** True Line Result [x * 15, y * 15, 15, 15, 0, 0, 0, (x * 3).fdiv(255) * 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Take the :block render_target and present it horizontally centered.~ - Inside source: true *** True Line Result # Take the :block render_target and present it horizontally centered. ** Processing line: ~ # Use a subsection of the render_targetd specified by source_x,~ - Inside source: true *** True Line Result # Use a subsection of the render_targetd specified by source_x, ** Processing line: ~ # source_y, source_w, source_h.~ - Inside source: true *** True Line Result # source_y, source_w, source_h. ** Processing line: ~ args.outputs.sprites << { x: 0,~ - Inside source: true *** True Line Result args.outputs.sprites << { x: 0, ** Processing line: ~ y: 310,~ - Inside source: true *** True Line Result y: 310, ** Processing line: ~ w: 1280,~ - Inside source: true *** True Line Result w: 1280, ** Processing line: ~ h: 100,~ - Inside source: true *** True Line Result h: 100, ** Processing line: ~ path: :block,~ - Inside source: true *** True Line Result path: :block, ** Processing line: ~ source_x: 0,~ - Inside source: true *** True Line Result source_x: 0, ** Processing line: ~ source_y: 0,~ - Inside source: true *** True Line Result source_y: 0, ** Processing line: ~ source_w: 1280,~ - Inside source: true *** True Line Result source_w: 1280, ** Processing line: ~ source_h: 100 }~ - Inside source: true *** True Line Result source_h: 100 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # After rendering :block, render gradient on top of :block.~ - Inside source: true *** True Line Result # After rendering :block, render gradient on top of :block. ** Processing line: ~ args.outputs.sprites << [0, 0, 1280, 720, :gradient]~ - Inside source: true *** True Line Result args.outputs.sprites << [0, 0, 1280, 720, :gradient] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << [1270, 710, args.gtk.current_framerate, 0, 2, 255, 255, 255]~ - Inside source: true *** True Line Result args.outputs.labels << [1270, 710, args.gtk.current_framerate, 0, 2, 255, 255, 255] ** Processing line: ~ tick_instructions args, "Sample app shows how to use render_targets (programmatically create cached sprites)."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows how to use render_targets (programmatically create cached sprites)." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Rendering - Render Targets With Tile Manipulation - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Rendering - Render Targets With Tile Manipulation - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_rendering/02_render_targets_with_tile_manipulation/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_rendering/02_render_targets_with_tile_manipulation/app/main.rb ** Processing line: ~ # This sample is meant to show you how to do that dripping transition thing~ - Inside source: true *** True Line Result # This sample is meant to show you how to do that dripping transition thing ** Processing line: ~ # at the start of the original Doom. Most of this file is here to animate~ - Inside source: true *** True Line Result # at the start of the original Doom. Most of this file is here to animate ** Processing line: ~ # a scene to wipe away; the actual wipe effect is in the last 20 lines or~ - Inside source: true *** True Line Result # a scene to wipe away; the actual wipe effect is in the last 20 lines or ** Processing line: ~ # so.~ - Inside source: true *** True Line Result # so. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset # reset all game state if reloaded.~ - Inside source: true *** True Line Result $gtk.reset # reset all game state if reloaded. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def circle_of_blocks pass, xoffset, yoffset, angleoffset, blocksize, distance~ - Inside source: true *** True Line Result def circle_of_blocks pass, xoffset, yoffset, angleoffset, blocksize, distance ** Processing line: ~ numblocks = 10~ - Inside source: true *** True Line Result numblocks = 10 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ for i in 1..numblocks do~ - Inside source: true *** True Line Result for i in 1..numblocks do ** Processing line: ~ angle = ((360 / numblocks) * i) + angleoffset~ - Inside source: true *** True Line Result angle = ((360 / numblocks) * i) + angleoffset ** Processing line: ~ radians = angle * (Math::PI / 180)~ - Inside source: true *** True Line Result radians = angle * (Math::PI / 180) ** Processing line: ~ x = (xoffset + (distance * Math.cos(radians))).round~ - Inside source: true *** True Line Result x = (xoffset + (distance * Math.cos(radians))).round ** Processing line: ~ y = (yoffset + (distance * Math.sin(radians))).round~ - Inside source: true *** True Line Result y = (yoffset + (distance * Math.sin(radians))).round ** Processing line: ~ pass.solids << [ x, y, blocksize, blocksize, 255, 255, 0 ]~ - Inside source: true *** True Line Result pass.solids << [ x, y, blocksize, blocksize, 255, 255, 0 ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw_scene args, pass~ - Inside source: true *** True Line Result def draw_scene args, pass ** Processing line: ~ pass.solids << [0, 360, 1280, 360, 0, 0, 200]~ - Inside source: true *** True Line Result pass.solids << [0, 360, 1280, 360, 0, 0, 200] ** Processing line: ~ pass.solids << [0, 0, 1280, 360, 0, 127, 0]~ - Inside source: true *** True Line Result pass.solids << [0, 0, 1280, 360, 0, 127, 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ blocksize = 100~ - Inside source: true *** True Line Result blocksize = 100 ** Processing line: ~ angleoffset = args.state.tick_count * 2.5~ - Inside source: true *** True Line Result angleoffset = args.state.tick_count * 2.5 ** Processing line: ~ centerx = (1280 - blocksize) / 2~ - Inside source: true *** True Line Result centerx = (1280 - blocksize) / 2 ** Processing line: ~ centery = (720 - blocksize) / 2~ - Inside source: true *** True Line Result centery = (720 - blocksize) / 2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ circle_of_blocks pass, centerx, centery, angleoffset, blocksize * 2, 500~ - Inside source: true *** True Line Result circle_of_blocks pass, centerx, centery, angleoffset, blocksize * 2, 500 ** Processing line: ~ circle_of_blocks pass, centerx, centery, angleoffset, blocksize, 325~ - Inside source: true *** True Line Result circle_of_blocks pass, centerx, centery, angleoffset, blocksize, 325 ** Processing line: ~ circle_of_blocks pass, centerx, centery, angleoffset, blocksize / 2, 200~ - Inside source: true *** True Line Result circle_of_blocks pass, centerx, centery, angleoffset, blocksize / 2, 200 ** Processing line: ~ circle_of_blocks pass, centerx, centery, angleoffset, blocksize / 4, 100~ - Inside source: true *** True Line Result circle_of_blocks pass, centerx, centery, angleoffset, blocksize / 4, 100 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ segments = 160~ - Inside source: true *** True Line Result segments = 160 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # On the first tick, initialize some stuff.~ - Inside source: true *** True Line Result # On the first tick, initialize some stuff. ** Processing line: ~ if !args.state.yoffsets~ - Inside source: true *** True Line Result if !args.state.yoffsets ** Processing line: ~ args.state.baseyoff = 0~ - Inside source: true *** True Line Result args.state.baseyoff = 0 ** Processing line: ~ args.state.yoffsets = []~ - Inside source: true *** True Line Result args.state.yoffsets = [] ** Processing line: ~ for i in 0..segments do~ - Inside source: true *** True Line Result for i in 0..segments do ** Processing line: ~ args.state.yoffsets << rand * 100~ - Inside source: true *** True Line Result args.state.yoffsets << rand * 100 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Just draw some random stuff for a few seconds.~ - Inside source: true *** True Line Result # Just draw some random stuff for a few seconds. ** Processing line: ~ args.state.static_debounce ||= 60 * 2.5~ - Inside source: true *** True Line Result args.state.static_debounce ||= 60 * 2.5 ** Processing line: ~ if args.state.static_debounce > 0~ - Inside source: true *** True Line Result if args.state.static_debounce > 0 ** Processing line: ~ last_frame = args.state.static_debounce == 1~ - Inside source: true *** True Line Result last_frame = args.state.static_debounce == 1 ** Processing line: ~ target = last_frame ? args.render_target(:last_frame) : args.outputs~ - Inside source: true *** True Line Result target = last_frame ? args.render_target(:last_frame) : args.outputs ** Processing line: ~ draw_scene args, target~ - Inside source: true *** True Line Result draw_scene args, target ** Processing line: ~ args.state.static_debounce -= 1~ - Inside source: true *** True Line Result args.state.static_debounce -= 1 ** Processing line: ~ return unless last_frame~ - Inside source: true *** True Line Result return unless last_frame ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # build up the wipe...~ - Inside source: true *** True Line Result # build up the wipe... ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # this is the thing we're wiping to.~ - Inside source: true *** True Line Result # this is the thing we're wiping to. ** Processing line: ~ args.outputs.sprites << [ 0, 0, 1280, 720, 'dragonruby.png' ]~ - Inside source: true *** True Line Result args.outputs.sprites << [ 0, 0, 1280, 720, 'dragonruby.png' ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return if (args.state.baseyoff > (1280 + 100)) # stop when done sliding~ - Inside source: true *** True Line Result return if (args.state.baseyoff > (1280 + 100)) # stop when done sliding ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ segmentw = 1280 / segments~ - Inside source: true *** True Line Result segmentw = 1280 / segments ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ x = 0~ - Inside source: true *** True Line Result x = 0 ** Processing line: ~ for i in 0..segments do~ - Inside source: true *** True Line Result for i in 0..segments do ** Processing line: ~ yoffset = 0~ - Inside source: true *** True Line Result yoffset = 0 ** Processing line: ~ if args.state.yoffsets[i] < args.state.baseyoff~ - Inside source: true *** True Line Result if args.state.yoffsets[i] < args.state.baseyoff ** Processing line: ~ yoffset = args.state.baseyoff - args.state.yoffsets[i]~ - Inside source: true *** True Line Result yoffset = args.state.baseyoff - args.state.yoffsets[i] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # (720 - yoffset) flips the coordinate system, (- 720) adjusts for the height of the segment.~ - Inside source: true *** True Line Result # (720 - yoffset) flips the coordinate system, (- 720) adjusts for the height of the segment. ** Processing line: ~ args.outputs.sprites << [ x, (720 - yoffset) - 720, segmentw, 720, 'last_frame', 0, 255, 255, 255, 255, x, 0, segmentw, 720 ]~ - Inside source: true *** True Line Result args.outputs.sprites << [ x, (720 - yoffset) - 720, segmentw, 720, 'last_frame', 0, 255, 255, 255, 255, x, 0, segmentw, 720 ] ** Processing line: ~ x += segmentw~ - Inside source: true *** True Line Result x += segmentw ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.baseyoff += 4~ - Inside source: true *** True Line Result args.state.baseyoff += 4 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ tick_instructions args, "Sample app shows an advanced usage of render_target."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows an advanced usage of render_target." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Rendering - Render Target Viewports - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Rendering - Render Target Viewports - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_rendering/03_render_target_viewports/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_rendering/03_render_target_viewports/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.state.new_entity: Used when we want to create a new object, like a sprite or button.~ - Inside source: true *** True Line Result - args.state.new_entity: Used when we want to create a new object, like a sprite or button. ** Processing line: ~ For example, if we want to create a new button, we would declare it as a new entity and~ - Inside source: true *** True Line Result For example, if we want to create a new button, we would declare it as a new entity and ** Processing line: ~ then define its properties. (Remember, you can use state to define ANY property and it will~ - Inside source: true *** True Line Result then define its properties. (Remember, you can use state to define ANY property and it will ** Processing line: ~ be retained across frames.)~ - Inside source: true *** True Line Result be retained across frames.) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ If you have a solar system and you're creating args.state.sun and setting its image path to an~ - Inside source: true *** True Line Result If you have a solar system and you're creating args.state.sun and setting its image path to an ** Processing line: ~ image in the sprites folder, you would do the following:~ - Inside source: true *** True Line Result image in the sprites folder, you would do the following: ** Processing line: ~ (See samples/99_sample_nddnug_workshop for more details.)~ - Inside source: true *** True Line Result (See samples/99_sample_nddnug_workshop for more details.) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.sun ||= args.state.new_entity(:sun) do |s|~ - Inside source: true *** True Line Result args.state.sun ||= args.state.new_entity(:sun) do |s| ** Processing line: ~ s.path = 'sprites/sun.png'~ - Inside source: true *** True Line Result s.path = 'sprites/sun.png' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated~ - Inside source: true *** True Line Result - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ - Inside source: true *** True Line Result as Ruby code, and the placeholder is replaced with its corresponding value or result. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ For example, if we have a variable~ - Inside source: true *** True Line Result For example, if we have a variable ** Processing line: ~ name = "Ruby"~ - Inside source: true *** True Line Result name = "Ruby" ** Processing line: ~ then the line~ - Inside source: true *** True Line Result then the line ** Processing line: ~ puts "How are you, #{name}?"~ - Inside source: true *** True Line Result puts "How are you, #{name}?" ** Processing line: ~ would print "How are you, Ruby?" to the console.~ - Inside source: true *** True Line Result would print "How are you, Ruby?" to the console. ** Processing line: ~ (Remember, string interpolation only works with double quotes!)~ - Inside source: true *** True Line Result (Remember, string interpolation only works with double quotes!) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - Ternary operator (?): Similar to if statement; first evalulates whether a statement is~ - Inside source: true *** True Line Result - Ternary operator (?): Similar to if statement; first evalulates whether a statement is ** Processing line: ~ true or false, and then executes a command depending on that result.~ - Inside source: true *** True Line Result true or false, and then executes a command depending on that result. ** Processing line: ~ For example, if we had a variable~ - Inside source: true *** True Line Result For example, if we had a variable ** Processing line: ~ grade = 75~ - Inside source: true *** True Line Result grade = 75 ** Processing line: ~ and used the ternary operator in the command~ - Inside source: true *** True Line Result and used the ternary operator in the command ** Processing line: ~ pass_or_fail = grade > 65 ? "pass" : "fail"~ - Inside source: true *** True Line Result pass_or_fail = grade > 65 ? "pass" : "fail" ** Processing line: ~ then the value of pass_or_fail would be "pass" since grade's value was greater than 65.~ - Inside source: true *** True Line Result then the value of pass_or_fail would be "pass" since grade's value was greater than 65. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.grid.(left|right|top|bottom): Pixel value for the boundaries of the virtual~ - Inside source: true *** True Line Result - args.grid.(left|right|top|bottom): Pixel value for the boundaries of the virtual ** Processing line: ~ 720 p screen (Dragon Ruby Game Toolkits's virtual resolution is always 1280x720).~ - Inside source: true *** True Line Result 720 p screen (Dragon Ruby Game Toolkits's virtual resolution is always 1280x720). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - Numeric#shift_(left|right|up|down): Shifts the Numeric in the correct direction~ - Inside source: true *** True Line Result - Numeric#shift_(left|right|up|down): Shifts the Numeric in the correct direction ** Processing line: ~ by adding or subracting.~ - Inside source: true *** True Line Result by adding or subracting. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - ARRAY#inside_rect?: An array with at least two values is considered a point. An array~ - Inside source: true *** True Line Result - ARRAY#inside_rect?: An array with at least two values is considered a point. An array ** Processing line: ~ with at least four values is considered a rect. The inside_rect? function returns true~ - Inside source: true *** True Line Result with at least four values is considered a rect. The inside_rect? function returns true ** Processing line: ~ or false depending on if the point is inside the rect.~ - Inside source: true *** True Line Result or false depending on if the point is inside the rect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - ARRAY#intersect_rect?: Returns true or false depending on if the two rectangles intersect.~ - Inside source: true *** True Line Result - ARRAY#intersect_rect?: Returns true or false depending on if the two rectangles intersect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.mouse.click: This property will be set if the mouse was clicked.~ - Inside source: true *** True Line Result - args.inputs.mouse.click: This property will be set if the mouse was clicked. ** Processing line: ~ For more information about the mouse, go to mygame/documentation/07-mouse.md.~ - Inside source: true *** True Line Result For more information about the mouse, go to mygame/documentation/07-mouse.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.inputs.keyboard.key_up.KEY: The value of the properties will be set~ - Inside source: true *** True Line Result - args.inputs.keyboard.key_up.KEY: The value of the properties will be set ** Processing line: ~ to the frame that the key_up event occurred (the frame correlates~ - Inside source: true *** True Line Result to the frame that the key_up event occurred (the frame correlates ** Processing line: ~ to args.state.tick_count).~ - Inside source: true *** True Line Result to args.state.tick_count). ** Processing line: ~ For more information about the keyboard, go to mygame/documentation/06-keyboard.md.~ - Inside source: true *** True Line Result For more information about the keyboard, go to mygame/documentation/06-keyboard.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.state.labels:~ - Inside source: true *** True Line Result - args.state.labels: ** Processing line: ~ The parameters for a label are~ - Inside source: true *** True Line Result The parameters for a label are ** Processing line: ~ 1. the position (x, y)~ - Inside source: true *** True Line Result 1. the position (x, y) ** Processing line: ~ 2. the text~ - Inside source: true *** True Line Result 2. the text ** Processing line: ~ 3. the size~ - Inside source: true *** True Line Result 3. the size ** Processing line: ~ 4. the alignment~ - Inside source: true *** True Line Result 4. the alignment ** Processing line: ~ 5. the color (red, green, and blue saturations)~ - Inside source: true *** True Line Result 5. the color (red, green, and blue saturations) ** Processing line: ~ 6. the alpha (or transparency)~ - Inside source: true *** True Line Result 6. the alpha (or transparency) ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ - Inside source: true *** True Line Result For more information about labels, go to mygame/documentation/02-labels.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.state.lines:~ - Inside source: true *** True Line Result - args.state.lines: ** Processing line: ~ The parameters for a line are~ - Inside source: true *** True Line Result The parameters for a line are ** Processing line: ~ 1. the starting position (x, y)~ - Inside source: true *** True Line Result 1. the starting position (x, y) ** Processing line: ~ 2. the ending position (x2, y2)~ - Inside source: true *** True Line Result 2. the ending position (x2, y2) ** Processing line: ~ 3. the color (red, green, and blue saturations)~ - Inside source: true *** True Line Result 3. the color (red, green, and blue saturations) ** Processing line: ~ 4. the alpha (or transparency)~ - Inside source: true *** True Line Result 4. the alpha (or transparency) ** Processing line: ~ For more information about lines, go to mygame/documentation/04-lines.md.~ - Inside source: true *** True Line Result For more information about lines, go to mygame/documentation/04-lines.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.state.solids (and args.state.borders):~ - Inside source: true *** True Line Result - args.state.solids (and args.state.borders): ** Processing line: ~ The parameters for a solid (or border) are~ - Inside source: true *** True Line Result The parameters for a solid (or border) are ** Processing line: ~ 1. the position (x, y)~ - Inside source: true *** True Line Result 1. the position (x, y) ** Processing line: ~ 2. the width (w)~ - Inside source: true *** True Line Result 2. the width (w) ** Processing line: ~ 3. the height (h)~ - Inside source: true *** True Line Result 3. the height (h) ** Processing line: ~ 4. the color (r, g, b)~ - Inside source: true *** True Line Result 4. the color (r, g, b) ** Processing line: ~ 5. the alpha (or transparency)~ - Inside source: true *** True Line Result 5. the alpha (or transparency) ** Processing line: ~ For more information about solids and borders, go to mygame/documentation/03-solids-and-borders.md.~ - Inside source: true *** True Line Result For more information about solids and borders, go to mygame/documentation/03-solids-and-borders.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.state.sprites:~ - Inside source: true *** True Line Result - args.state.sprites: ** Processing line: ~ The parameters for a sprite are~ - Inside source: true *** True Line Result The parameters for a sprite are ** Processing line: ~ 1. the position (x, y)~ - Inside source: true *** True Line Result 1. the position (x, y) ** Processing line: ~ 2. the width (w)~ - Inside source: true *** True Line Result 2. the width (w) ** Processing line: ~ 3. the height (h)~ - Inside source: true *** True Line Result 3. the height (h) ** Processing line: ~ 4. the image path~ - Inside source: true *** True Line Result 4. the image path ** Processing line: ~ 5. the angle~ - Inside source: true *** True Line Result 5. the angle ** Processing line: ~ 6. the alpha (or transparency)~ - Inside source: true *** True Line Result 6. the alpha (or transparency) ** Processing line: ~ For more information about sprites, go to mygame/documentation/05-sprites.md.~ - Inside source: true *** True Line Result For more information about sprites, go to mygame/documentation/05-sprites.md. ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app shows different objects that can be used when making games, such as labels,~ - Inside source: true *** True Line Result # This sample app shows different objects that can be used when making games, such as labels, ** Processing line: ~ # lines, sprites, solids, buttons, etc. Each demo section shows how these objects can be used.~ - Inside source: true *** True Line Result # lines, sprites, solids, buttons, etc. Each demo section shows how these objects can be used. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Also note that state.tick_count refers to the passage of time, or current frame.~ - Inside source: true *** True Line Result # Also note that state.tick_count refers to the passage of time, or current frame. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class TechDemo~ - Inside source: true *** True Line Result class TechDemo ** Processing line: ~ attr_accessor :inputs, :state, :outputs, :grid, :args~ - Inside source: true *** True Line Result attr_accessor :inputs, :state, :outputs, :grid, :args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls all methods necessary for the app to run properly.~ - Inside source: true *** True Line Result # Calls all methods necessary for the app to run properly. ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ labels_tech_demo~ - Inside source: true *** True Line Result labels_tech_demo ** Processing line: ~ lines_tech_demo~ - Inside source: true *** True Line Result lines_tech_demo ** Processing line: ~ solids_tech_demo~ - Inside source: true *** True Line Result solids_tech_demo ** Processing line: ~ borders_tech_demo~ - Inside source: true *** True Line Result borders_tech_demo ** Processing line: ~ sprites_tech_demo~ - Inside source: true *** True Line Result sprites_tech_demo ** Processing line: ~ keyboards_tech_demo~ - Inside source: true *** True Line Result keyboards_tech_demo ** Processing line: ~ controller_tech_demo~ - Inside source: true *** True Line Result controller_tech_demo ** Processing line: ~ mouse_tech_demo~ - Inside source: true *** True Line Result mouse_tech_demo ** Processing line: ~ point_to_rect_tech_demo~ - Inside source: true *** True Line Result point_to_rect_tech_demo ** Processing line: ~ rect_to_rect_tech_demo~ - Inside source: true *** True Line Result rect_to_rect_tech_demo ** Processing line: ~ button_tech_demo~ - Inside source: true *** True Line Result button_tech_demo ** Processing line: ~ export_game_state_demo~ - Inside source: true *** True Line Result export_game_state_demo ** Processing line: ~ window_state_demo~ - Inside source: true *** True Line Result window_state_demo ** Processing line: ~ render_seperators~ - Inside source: true *** True Line Result render_seperators ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Shows output of different kinds of labels on the screen~ - Inside source: true *** True Line Result # Shows output of different kinds of labels on the screen ** Processing line: ~ def labels_tech_demo~ - Inside source: true *** True Line Result def labels_tech_demo ** Processing line: ~ outputs.labels << [grid.left.shift_right(5), grid.top.shift_down(5), "This is a label located at the top left."]~ - Inside source: true *** True Line Result outputs.labels << [grid.left.shift_right(5), grid.top.shift_down(5), "This is a label located at the top left."] ** Processing line: ~ outputs.labels << [grid.left.shift_right(5), grid.bottom.shift_up(30), "This is a label located at the bottom left."]~ - Inside source: true *** True Line Result outputs.labels << [grid.left.shift_right(5), grid.bottom.shift_up(30), "This is a label located at the bottom left."] ** Processing line: ~ outputs.labels << [ 5, 690, "Labels (x, y, text, size, align, r, g, b, a)"]~ - Inside source: true *** True Line Result outputs.labels << [ 5, 690, "Labels (x, y, text, size, align, r, g, b, a)"] ** Processing line: ~ outputs.labels << [ 5, 660, "Smaller label.", -2]~ - Inside source: true *** True Line Result outputs.labels << [ 5, 660, "Smaller label.", -2] ** Processing line: ~ outputs.labels << [ 5, 630, "Small label.", -1]~ - Inside source: true *** True Line Result outputs.labels << [ 5, 630, "Small label.", -1] ** Processing line: ~ outputs.labels << [ 5, 600, "Medium label.", 0]~ - Inside source: true *** True Line Result outputs.labels << [ 5, 600, "Medium label.", 0] ** Processing line: ~ outputs.labels << [ 5, 570, "Large label.", 1]~ - Inside source: true *** True Line Result outputs.labels << [ 5, 570, "Large label.", 1] ** Processing line: ~ outputs.labels << [ 5, 540, "Larger label.", 2]~ - Inside source: true *** True Line Result outputs.labels << [ 5, 540, "Larger label.", 2] ** Processing line: ~ outputs.labels << [300, 660, "Left aligned.", 0, 2]~ - Inside source: true *** True Line Result outputs.labels << [300, 660, "Left aligned.", 0, 2] ** Processing line: ~ outputs.labels << [300, 640, "Center aligned.", 0, 1]~ - Inside source: true *** True Line Result outputs.labels << [300, 640, "Center aligned.", 0, 1] ** Processing line: ~ outputs.labels << [300, 620, "Right aligned.", 0, 0]~ - Inside source: true *** True Line Result outputs.labels << [300, 620, "Right aligned.", 0, 0] ** Processing line: ~ outputs.labels << [175, 595, "Red Label.", 0, 0, 255, 0, 0]~ - Inside source: true *** True Line Result outputs.labels << [175, 595, "Red Label.", 0, 0, 255, 0, 0] ** Processing line: ~ outputs.labels << [175, 575, "Green Label.", 0, 0, 0, 255, 0]~ - Inside source: true *** True Line Result outputs.labels << [175, 575, "Green Label.", 0, 0, 0, 255, 0] ** Processing line: ~ outputs.labels << [175, 555, "Blue Label.", 0, 0, 0, 0, 255]~ - Inside source: true *** True Line Result outputs.labels << [175, 555, "Blue Label.", 0, 0, 0, 0, 255] ** Processing line: ~ outputs.labels << [175, 535, "Faded Label.", 0, 0, 0, 0, 0, 128]~ - Inside source: true *** True Line Result outputs.labels << [175, 535, "Faded Label.", 0, 0, 0, 0, 0, 128] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Shows output of lines on the screen~ - Inside source: true *** True Line Result # Shows output of lines on the screen ** Processing line: ~ def lines_tech_demo~ - Inside source: true *** True Line Result def lines_tech_demo ** Processing line: ~ outputs.labels << [5, 500, "Lines (x, y, x2, y2, r, g, b, a)"]~ - Inside source: true *** True Line Result outputs.labels << [5, 500, "Lines (x, y, x2, y2, r, g, b, a)"] ** Processing line: ~ outputs.lines << [5, 450, 100, 450]~ - Inside source: true *** True Line Result outputs.lines << [5, 450, 100, 450] ** Processing line: ~ outputs.lines << [5, 430, 300, 430]~ - Inside source: true *** True Line Result outputs.lines << [5, 430, 300, 430] ** Processing line: ~ outputs.lines << [5, 410, 300, 410, state.tick_count % 255, 0, 0, 255] # red saturation changes~ - Inside source: true *** True Line Result outputs.lines << [5, 410, 300, 410, state.tick_count % 255, 0, 0, 255] # red saturation changes ** Processing line: ~ outputs.lines << [5, 390 - state.tick_count % 25, 300, 390, 0, 0, 0, 255] # y position changes~ - Inside source: true *** True Line Result outputs.lines << [5, 390 - state.tick_count % 25, 300, 390, 0, 0, 0, 255] # y position changes ** Processing line: ~ outputs.lines << [5 + state.tick_count % 200, 360, 300, 360, 0, 0, 0, 255] # x position changes~ - Inside source: true *** True Line Result outputs.lines << [5 + state.tick_count % 200, 360, 300, 360, 0, 0, 0, 255] # x position changes ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Shows output of different kinds of solids on the screen~ - Inside source: true *** True Line Result # Shows output of different kinds of solids on the screen ** Processing line: ~ def solids_tech_demo~ - Inside source: true *** True Line Result def solids_tech_demo ** Processing line: ~ outputs.labels << [ 5, 350, "Solids (x, y, w, h, r, g, b, a)"]~ - Inside source: true *** True Line Result outputs.labels << [ 5, 350, "Solids (x, y, w, h, r, g, b, a)"] ** Processing line: ~ outputs.solids << [ 10, 270, 50, 50]~ - Inside source: true *** True Line Result outputs.solids << [ 10, 270, 50, 50] ** Processing line: ~ outputs.solids << [ 70, 270, 50, 50, 0, 0, 0]~ - Inside source: true *** True Line Result outputs.solids << [ 70, 270, 50, 50, 0, 0, 0] ** Processing line: ~ outputs.solids << [130, 270, 50, 50, 255, 0, 0]~ - Inside source: true *** True Line Result outputs.solids << [130, 270, 50, 50, 255, 0, 0] ** Processing line: ~ outputs.solids << [190, 270, 50, 50, 255, 0, 0, 128]~ - Inside source: true *** True Line Result outputs.solids << [190, 270, 50, 50, 255, 0, 0, 128] ** Processing line: ~ outputs.solids << [250, 270, 50, 50, 0, 0, 0, 128 + state.tick_count % 128] # transparency changes~ - Inside source: true *** True Line Result outputs.solids << [250, 270, 50, 50, 0, 0, 0, 128 + state.tick_count % 128] # transparency changes ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Shows output of different kinds of borders on the screen~ - Inside source: true *** True Line Result # Shows output of different kinds of borders on the screen ** Processing line: ~ # The parameters for a border are the same as the parameters for a solid~ - Inside source: true *** True Line Result # The parameters for a border are the same as the parameters for a solid ** Processing line: ~ def borders_tech_demo~ - Inside source: true *** True Line Result def borders_tech_demo ** Processing line: ~ outputs.labels << [ 5, 260, "Borders (x, y, w, h, r, g, b, a)"]~ - Inside source: true *** True Line Result outputs.labels << [ 5, 260, "Borders (x, y, w, h, r, g, b, a)"] ** Processing line: ~ outputs.borders << [ 10, 180, 50, 50]~ - Inside source: true *** True Line Result outputs.borders << [ 10, 180, 50, 50] ** Processing line: ~ outputs.borders << [ 70, 180, 50, 50, 0, 0, 0]~ - Inside source: true *** True Line Result outputs.borders << [ 70, 180, 50, 50, 0, 0, 0] ** Processing line: ~ outputs.borders << [130, 180, 50, 50, 255, 0, 0]~ - Inside source: true *** True Line Result outputs.borders << [130, 180, 50, 50, 255, 0, 0] ** Processing line: ~ outputs.borders << [190, 180, 50, 50, 255, 0, 0, 128]~ - Inside source: true *** True Line Result outputs.borders << [190, 180, 50, 50, 255, 0, 0, 128] ** Processing line: ~ outputs.borders << [250, 180, 50, 50, 0, 0, 0, 128 + state.tick_count % 128] # transparency changes~ - Inside source: true *** True Line Result outputs.borders << [250, 180, 50, 50, 0, 0, 0, 128 + state.tick_count % 128] # transparency changes ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Shows output of different kinds of sprites on the screen~ - Inside source: true *** True Line Result # Shows output of different kinds of sprites on the screen ** Processing line: ~ def sprites_tech_demo~ - Inside source: true *** True Line Result def sprites_tech_demo ** Processing line: ~ outputs.labels << [ 5, 170, "Sprites (x, y, w, h, path, angle, a)"]~ - Inside source: true *** True Line Result outputs.labels << [ 5, 170, "Sprites (x, y, w, h, path, angle, a)"] ** Processing line: ~ outputs.sprites << [ 10, 40, 128, 101, 'dragonruby.png']~ - Inside source: true *** True Line Result outputs.sprites << [ 10, 40, 128, 101, 'dragonruby.png'] ** Processing line: ~ outputs.sprites << [ 150, 40, 128, 101, 'dragonruby.png', state.tick_count % 360] # angle changes~ - Inside source: true *** True Line Result outputs.sprites << [ 150, 40, 128, 101, 'dragonruby.png', state.tick_count % 360] # angle changes ** Processing line: ~ outputs.sprites << [ 300, 40, 128, 101, 'dragonruby.png', 0, state.tick_count % 255] # transparency changes~ - Inside source: true *** True Line Result outputs.sprites << [ 300, 40, 128, 101, 'dragonruby.png', 0, state.tick_count % 255] # transparency changes ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Holds size, alignment, color (black), and alpha (transparency) parameters~ - Inside source: true *** True Line Result # Holds size, alignment, color (black), and alpha (transparency) parameters ** Processing line: ~ # Using small_font as a parameter accounts for all remaining parameters~ - Inside source: true *** True Line Result # Using small_font as a parameter accounts for all remaining parameters ** Processing line: ~ # so they don't have to be repeatedly typed~ - Inside source: true *** True Line Result # so they don't have to be repeatedly typed ** Processing line: ~ def small_font~ - Inside source: true *** True Line Result def small_font ** Processing line: ~ [-2, 0, 0, 0, 0, 255]~ - Inside source: true *** True Line Result [-2, 0, 0, 0, 0, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets position of each row~ - Inside source: true *** True Line Result # Sets position of each row ** Processing line: ~ # Converts given row value to pixels that DragonRuby understands~ - Inside source: true *** True Line Result # Converts given row value to pixels that DragonRuby understands ** Processing line: ~ def row_to_px row_number~ - Inside source: true *** True Line Result def row_to_px row_number ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Row 0 starts 5 units below the top of the grid.~ - Inside source: true *** True Line Result # Row 0 starts 5 units below the top of the grid. ** Processing line: ~ # Each row afterward is 20 units lower.~ - Inside source: true *** True Line Result # Each row afterward is 20 units lower. ** Processing line: ~ grid.top.shift_down(5).shift_down(20 * row_number)~ - Inside source: true *** True Line Result grid.top.shift_down(5).shift_down(20 * row_number) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Uses labels to output current game time (passage of time), and whether or not "h" was pressed~ - Inside source: true *** True Line Result # Uses labels to output current game time (passage of time), and whether or not "h" was pressed ** Processing line: ~ # If "h" is pressed, the frame is output when the key_up event occurred~ - Inside source: true *** True Line Result # If "h" is pressed, the frame is output when the key_up event occurred ** Processing line: ~ def keyboards_tech_demo~ - Inside source: true *** True Line Result def keyboards_tech_demo ** Processing line: ~ outputs.labels << [460, row_to_px(0), "Current game time: #{state.tick_count}", small_font]~ - Inside source: true *** True Line Result outputs.labels << [460, row_to_px(0), "Current game time: #{state.tick_count}", small_font] ** Processing line: ~ outputs.labels << [460, row_to_px(2), "Keyboard input: inputs.keyboard.key_up.h", small_font]~ - Inside source: true *** True Line Result outputs.labels << [460, row_to_px(2), "Keyboard input: inputs.keyboard.key_up.h", small_font] ** Processing line: ~ outputs.labels << [460, row_to_px(3), "Press \"h\" on the keyboard.", small_font]~ - Inside source: true *** True Line Result outputs.labels << [460, row_to_px(3), "Press \"h\" on the keyboard.", small_font] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.key_up.h # if "h" key_up event occurs~ - Inside source: true *** True Line Result if inputs.keyboard.key_up.h # if "h" key_up event occurs ** Processing line: ~ state.h_pressed_at = state.tick_count # frame it occurred is stored~ - Inside source: true *** True Line Result state.h_pressed_at = state.tick_count # frame it occurred is stored ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # h_pressed_at is initially set to false, and changes once the user presses the "h" key.~ - Inside source: true *** True Line Result # h_pressed_at is initially set to false, and changes once the user presses the "h" key. ** Processing line: ~ state.h_pressed_at ||= false~ - Inside source: true *** True Line Result state.h_pressed_at ||= false ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.h_pressed_at # if h is pressed (pressed_at has a frame number and is no longer false)~ - Inside source: true *** True Line Result if state.h_pressed_at # if h is pressed (pressed_at has a frame number and is no longer false) ** Processing line: ~ outputs.labels << [460, row_to_px(4), "\"h\" was pressed at time: #{state.h_pressed_at}", small_font]~ - Inside source: true *** True Line Result outputs.labels << [460, row_to_px(4), "\"h\" was pressed at time: #{state.h_pressed_at}", small_font] ** Processing line: ~ else # otherwise, label says "h" was never pressed~ - Inside source: true *** True Line Result else # otherwise, label says "h" was never pressed ** Processing line: ~ outputs.labels << [460, row_to_px(4), "\"h\" has never been pressed.", small_font]~ - Inside source: true *** True Line Result outputs.labels << [460, row_to_px(4), "\"h\" has never been pressed.", small_font] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # border around keyboard input demo section~ - Inside source: true *** True Line Result # border around keyboard input demo section ** Processing line: ~ outputs.borders << [455, row_to_px(5), 360, row_to_px(2).shift_up(5) - row_to_px(5)]~ - Inside source: true *** True Line Result outputs.borders << [455, row_to_px(5), 360, row_to_px(2).shift_up(5) - row_to_px(5)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets definition for a small label~ - Inside source: true *** True Line Result # Sets definition for a small label ** Processing line: ~ # Makes it easier to position labels in respect to the position of other labels~ - Inside source: true *** True Line Result # Makes it easier to position labels in respect to the position of other labels ** Processing line: ~ def small_label x, row, message~ - Inside source: true *** True Line Result def small_label x, row, message ** Processing line: ~ [x, row_to_px(row), message, small_font]~ - Inside source: true *** True Line Result [x, row_to_px(row), message, small_font] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Uses small labels to show whether the "a" button on the controller is down, held, or up.~ - Inside source: true *** True Line Result # Uses small labels to show whether the "a" button on the controller is down, held, or up. ** Processing line: ~ # y value of each small label is set by calling the row_to_px method~ - Inside source: true *** True Line Result # y value of each small label is set by calling the row_to_px method ** Processing line: ~ def controller_tech_demo~ - Inside source: true *** True Line Result def controller_tech_demo ** Processing line: ~ x = 460~ - Inside source: true *** True Line Result x = 460 ** Processing line: ~ outputs.labels << small_label(x, 6, "Controller one input: inputs.controller_one")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 6, "Controller one input: inputs.controller_one") ** Processing line: ~ outputs.labels << small_label(x, 7, "Current state of the \"a\" button.")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 7, "Current state of the \"a\" button.") ** Processing line: ~ outputs.labels << small_label(x, 8, "Check console window for more info.")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 8, "Check console window for more info.") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.controller_one.key_down.a # if "a" is in "down" state~ - Inside source: true *** True Line Result if inputs.controller_one.key_down.a # if "a" is in "down" state ** Processing line: ~ outputs.labels << small_label(x, 9, "\"a\" button down: #{inputs.controller_one.key_down.a}")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 9, "\"a\" button down: #{inputs.controller_one.key_down.a}") ** Processing line: ~ puts "\"a\" button down at #{inputs.controller_one.key_down.a}" # prints frame the event occurred~ - Inside source: true *** True Line Result puts "\"a\" button down at #{inputs.controller_one.key_down.a}" # prints frame the event occurred ** Processing line: ~ elsif inputs.controller_one.key_held.a # if "a" is held down~ - Inside source: true *** True Line Result elsif inputs.controller_one.key_held.a # if "a" is held down ** Processing line: ~ outputs.labels << small_label(x, 9, "\"a\" button held: #{inputs.controller_one.key_held.a}")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 9, "\"a\" button held: #{inputs.controller_one.key_held.a}") ** Processing line: ~ elsif inputs.controller_one.key_up.a # if "a" is in up state~ - Inside source: true *** True Line Result elsif inputs.controller_one.key_up.a # if "a" is in up state ** Processing line: ~ outputs.labels << small_label(x, 9, "\"a\" button up: #{inputs.controller_one.key_up.a}")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 9, "\"a\" button up: #{inputs.controller_one.key_up.a}") ** Processing line: ~ puts "\"a\" key up at #{inputs.controller_one.key_up.a}"~ - Inside source: true *** True Line Result puts "\"a\" key up at #{inputs.controller_one.key_up.a}" ** Processing line: ~ else # if no event has occurred~ - Inside source: true *** True Line Result else # if no event has occurred ** Processing line: ~ outputs.labels << small_label(x, 9, "\"a\" button state is nil.")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 9, "\"a\" button state is nil.") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # border around controller input demo section~ - Inside source: true *** True Line Result # border around controller input demo section ** Processing line: ~ outputs.borders << [455, row_to_px(10), 360, row_to_px(6).shift_up(5) - row_to_px(10)]~ - Inside source: true *** True Line Result outputs.borders << [455, row_to_px(10), 360, row_to_px(6).shift_up(5) - row_to_px(10)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs when the mouse was clicked, as well as the coordinates on the screen~ - Inside source: true *** True Line Result # Outputs when the mouse was clicked, as well as the coordinates on the screen ** Processing line: ~ # of where the click occurred~ - Inside source: true *** True Line Result # of where the click occurred ** Processing line: ~ def mouse_tech_demo~ - Inside source: true *** True Line Result def mouse_tech_demo ** Processing line: ~ x = 460~ - Inside source: true *** True Line Result x = 460 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << small_label(x, 11, "Mouse input: inputs.mouse")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 11, "Mouse input: inputs.mouse") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.mouse.click # if click has a value and is not nil~ - Inside source: true *** True Line Result if inputs.mouse.click # if click has a value and is not nil ** Processing line: ~ state.last_mouse_click = inputs.mouse.click # coordinates of click are stored~ - Inside source: true *** True Line Result state.last_mouse_click = inputs.mouse.click # coordinates of click are stored ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.last_mouse_click # if mouse is clicked (has coordinates as value)~ - Inside source: true *** True Line Result if state.last_mouse_click # if mouse is clicked (has coordinates as value) ** Processing line: ~ # outputs the time (frame) the click occurred, as well as how many frames have passed since the event~ - Inside source: true *** True Line Result # outputs the time (frame) the click occurred, as well as how many frames have passed since the event ** Processing line: ~ outputs.labels << small_label(x, 12, "Mouse click happened at: #{state.last_mouse_click.created_at}, #{state.last_mouse_click.created_at_elapsed}")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 12, "Mouse click happened at: #{state.last_mouse_click.created_at}, #{state.last_mouse_click.created_at_elapsed}") ** Processing line: ~ # outputs coordinates of click~ - Inside source: true *** True Line Result # outputs coordinates of click ** Processing line: ~ outputs.labels << small_label(x, 13, "Mouse click location: #{state.last_mouse_click.point.x}, #{state.last_mouse_click.point.y}")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 13, "Mouse click location: #{state.last_mouse_click.point.x}, #{state.last_mouse_click.point.y}") ** Processing line: ~ else # otherwise if the mouse has not been clicked~ - Inside source: true *** True Line Result else # otherwise if the mouse has not been clicked ** Processing line: ~ outputs.labels << small_label(x, 12, "Mouse click has not occurred yet.")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 12, "Mouse click has not occurred yet.") ** Processing line: ~ outputs.labels << small_label(x, 13, "Please click mouse.")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 13, "Please click mouse.") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs whether a mouse click occurred inside or outside of a box~ - Inside source: true *** True Line Result # Outputs whether a mouse click occurred inside or outside of a box ** Processing line: ~ def point_to_rect_tech_demo~ - Inside source: true *** True Line Result def point_to_rect_tech_demo ** Processing line: ~ x = 460~ - Inside source: true *** True Line Result x = 460 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << small_label(x, 15, "Click inside the blue box maybe ---->")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 15, "Click inside the blue box maybe ---->") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ box = [765, 370, 50, 50, 0, 0, 170] # blue box~ - Inside source: true *** True Line Result box = [765, 370, 50, 50, 0, 0, 170] # blue box ** Processing line: ~ outputs.borders << box~ - Inside source: true *** True Line Result outputs.borders << box ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.last_mouse_click # if the mouse was clicked~ - Inside source: true *** True Line Result if state.last_mouse_click # if the mouse was clicked ** Processing line: ~ if state.last_mouse_click.point.inside_rect? box # if mouse clicked inside box~ - Inside source: true *** True Line Result if state.last_mouse_click.point.inside_rect? box # if mouse clicked inside box ** Processing line: ~ outputs.labels << small_label(x, 16, "Mouse click happened inside the box.")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 16, "Mouse click happened inside the box.") ** Processing line: ~ else # otherwise, if mouse was clicked outside the box~ - Inside source: true *** True Line Result else # otherwise, if mouse was clicked outside the box ** Processing line: ~ outputs.labels << small_label(x, 16, "Mouse click happened outside the box.")~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 16, "Mouse click happened outside the box.") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else # otherwise, if was not clicked at all~ - Inside source: true *** True Line Result else # otherwise, if was not clicked at all ** Processing line: ~ outputs.labels << small_label(x, 16, "Mouse click has not occurred yet.") # output if the mouse was not clicked~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 16, "Mouse click has not occurred yet.") # output if the mouse was not clicked ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # border around mouse input demo section~ - Inside source: true *** True Line Result # border around mouse input demo section ** Processing line: ~ outputs.borders << [455, row_to_px(14), 360, row_to_px(11).shift_up(5) - row_to_px(14)]~ - Inside source: true *** True Line Result outputs.borders << [455, row_to_px(14), 360, row_to_px(11).shift_up(5) - row_to_px(14)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs a red box onto the screen. A mouse click from the user inside of the red box will output~ - Inside source: true *** True Line Result # Outputs a red box onto the screen. A mouse click from the user inside of the red box will output ** Processing line: ~ # a smaller box. If two small boxes are inside of the red box, it will be determined whether or not~ - Inside source: true *** True Line Result # a smaller box. If two small boxes are inside of the red box, it will be determined whether or not ** Processing line: ~ # they intersect.~ - Inside source: true *** True Line Result # they intersect. ** Processing line: ~ def rect_to_rect_tech_demo~ - Inside source: true *** True Line Result def rect_to_rect_tech_demo ** Processing line: ~ x = 460~ - Inside source: true *** True Line Result x = 460 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << small_label(x, 17.5, "Click inside the red box below.") # label with instructions~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 17.5, "Click inside the red box below.") # label with instructions ** Processing line: ~ red_box = [460, 250, 355, 90, 170, 0, 0] # definition of the red box~ - Inside source: true *** True Line Result red_box = [460, 250, 355, 90, 170, 0, 0] # definition of the red box ** Processing line: ~ outputs.borders << red_box # output as a border (not filled in)~ - Inside source: true *** True Line Result outputs.borders << red_box # output as a border (not filled in) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the mouse is clicked inside the red box, two collision boxes are created.~ - Inside source: true *** True Line Result # If the mouse is clicked inside the red box, two collision boxes are created. ** Processing line: ~ if inputs.mouse.click~ - Inside source: true *** True Line Result if inputs.mouse.click ** Processing line: ~ if inputs.mouse.click.point.inside_rect? red_box~ - Inside source: true *** True Line Result if inputs.mouse.click.point.inside_rect? red_box ** Processing line: ~ if !state.box_collision_one # if the collision_one box does not yet have a definition~ - Inside source: true *** True Line Result if !state.box_collision_one # if the collision_one box does not yet have a definition ** Processing line: ~ # Subtracts 25 from the x and y positions of the click point in order to make the click point the center of the box.~ - Inside source: true *** True Line Result # Subtracts 25 from the x and y positions of the click point in order to make the click point the center of the box. ** Processing line: ~ # You can try deleting the subtraction to see how it impacts the box placement.~ - Inside source: true *** True Line Result # You can try deleting the subtraction to see how it impacts the box placement. ** Processing line: ~ state.box_collision_one = [inputs.mouse.click.point.x - 25, inputs.mouse.click.point.y - 25, 50, 50, 180, 0, 0, 180] # sets definition~ - Inside source: true *** True Line Result state.box_collision_one = [inputs.mouse.click.point.x - 25, inputs.mouse.click.point.y - 25, 50, 50, 180, 0, 0, 180] # sets definition ** Processing line: ~ elsif !state.box_collision_two # if collision_two does not yet have a definition~ - Inside source: true *** True Line Result elsif !state.box_collision_two # if collision_two does not yet have a definition ** Processing line: ~ state.box_collision_two = [inputs.mouse.click.point.x - 25, inputs.mouse.click.point.y - 25, 50, 50, 0, 0, 180, 180] # sets definition~ - Inside source: true *** True Line Result state.box_collision_two = [inputs.mouse.click.point.x - 25, inputs.mouse.click.point.y - 25, 50, 50, 0, 0, 180, 180] # sets definition ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.box_collision_one = nil # both boxes are empty~ - Inside source: true *** True Line Result state.box_collision_one = nil # both boxes are empty ** Processing line: ~ state.box_collision_two = nil~ - Inside source: true *** True Line Result state.box_collision_two = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If collision boxes exist, they are output onto screen inside the red box as solids~ - Inside source: true *** True Line Result # If collision boxes exist, they are output onto screen inside the red box as solids ** Processing line: ~ if state.box_collision_one~ - Inside source: true *** True Line Result if state.box_collision_one ** Processing line: ~ outputs.solids << state.box_collision_one~ - Inside source: true *** True Line Result outputs.solids << state.box_collision_one ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.box_collision_two~ - Inside source: true *** True Line Result if state.box_collision_two ** Processing line: ~ outputs.solids << state.box_collision_two~ - Inside source: true *** True Line Result outputs.solids << state.box_collision_two ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs whether or not the two collision boxes intersect.~ - Inside source: true *** True Line Result # Outputs whether or not the two collision boxes intersect. ** Processing line: ~ if state.box_collision_one && state.box_collision_two # if both collision_boxes are defined (and not nil or empty)~ - Inside source: true *** True Line Result if state.box_collision_one && state.box_collision_two # if both collision_boxes are defined (and not nil or empty) ** Processing line: ~ if state.box_collision_one.intersect_rect? state.box_collision_two # if the two boxes intersect~ - Inside source: true *** True Line Result if state.box_collision_one.intersect_rect? state.box_collision_two # if the two boxes intersect ** Processing line: ~ outputs.labels << small_label(x, 23.5, 'The boxes intersect.')~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 23.5, 'The boxes intersect.') ** Processing line: ~ else # otherwise, if the two boxes do not intersect~ - Inside source: true *** True Line Result else # otherwise, if the two boxes do not intersect ** Processing line: ~ outputs.labels << small_label(x, 23.5, 'The boxes do not intersect.')~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 23.5, 'The boxes do not intersect.') ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ outputs.labels << small_label(x, 23.5, '--') # if the two boxes are not defined (are nil or empty), this label is output~ - Inside source: true *** True Line Result outputs.labels << small_label(x, 23.5, '--') # if the two boxes are not defined (are nil or empty), this label is output ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates a button and outputs it onto the screen using labels and borders.~ - Inside source: true *** True Line Result # Creates a button and outputs it onto the screen using labels and borders. ** Processing line: ~ # If the button is clicked, the color changes to make it look faded.~ - Inside source: true *** True Line Result # If the button is clicked, the color changes to make it look faded. ** Processing line: ~ def button_tech_demo~ - Inside source: true *** True Line Result def button_tech_demo ** Processing line: ~ x, y, w, h = 460, 160, 300, 50~ - Inside source: true *** True Line Result x, y, w, h = 460, 160, 300, 50 ** Processing line: ~ state.button ||= state.new_entity(:button_with_fade)~ - Inside source: true *** True Line Result state.button ||= state.new_entity(:button_with_fade) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds w.half to x and h.half + 10 to y in order to display the text inside the button's borders.~ - Inside source: true *** True Line Result # Adds w.half to x and h.half + 10 to y in order to display the text inside the button's borders. ** Processing line: ~ state.button.label ||= [x + w.half, y + h.half + 10, "click me and watch me fade", 0, 1]~ - Inside source: true *** True Line Result state.button.label ||= [x + w.half, y + h.half + 10, "click me and watch me fade", 0, 1] ** Processing line: ~ state.button.border ||= [x, y, w, h]~ - Inside source: true *** True Line Result state.button.border ||= [x, y, w, h] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.mouse.click && inputs.mouse.click.point.inside_rect?(state.button.border) # if mouse is clicked, and clicked inside button's border~ - Inside source: true *** True Line Result if inputs.mouse.click && inputs.mouse.click.point.inside_rect?(state.button.border) # if mouse is clicked, and clicked inside button's border ** Processing line: ~ state.button.clicked_at = inputs.mouse.click.created_at # stores the time the click occurred~ - Inside source: true *** True Line Result state.button.clicked_at = inputs.mouse.click.created_at # stores the time the click occurred ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << state.button.label~ - Inside source: true *** True Line Result outputs.labels << state.button.label ** Processing line: ~ outputs.borders << state.button.border~ - Inside source: true *** True Line Result outputs.borders << state.button.border ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.button.clicked_at # if button was clicked (variable has a value and is not nil)~ - Inside source: true *** True Line Result if state.button.clicked_at # if button was clicked (variable has a value and is not nil) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The appearance of the button changes for 0.25 seconds after the time the button is clicked at.~ - Inside source: true *** True Line Result # The appearance of the button changes for 0.25 seconds after the time the button is clicked at. ** Processing line: ~ # The color changes (rgb is set to 0, 180, 80) and the transparency gradually changes.~ - Inside source: true *** True Line Result # The color changes (rgb is set to 0, 180, 80) and the transparency gradually changes. ** Processing line: ~ # Change 0.25 to 1.25 and notice that the transparency takes longer to return to normal.~ - Inside source: true *** True Line Result # Change 0.25 to 1.25 and notice that the transparency takes longer to return to normal. ** Processing line: ~ outputs.solids << [x, y, w, h, 0, 180, 80, 255 * state.button.clicked_at.ease(0.25.seconds, :flip)]~ - Inside source: true *** True Line Result outputs.solids << [x, y, w, h, 0, 180, 80, 255 * state.button.clicked_at.ease(0.25.seconds, :flip)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates a new button by declaring it as a new entity, and sets values.~ - Inside source: true *** True Line Result # Creates a new button by declaring it as a new entity, and sets values. ** Processing line: ~ def new_button_prefab x, y, message~ - Inside source: true *** True Line Result def new_button_prefab x, y, message ** Processing line: ~ w, h = 300, 50~ - Inside source: true *** True Line Result w, h = 300, 50 ** Processing line: ~ button = state.new_entity(:button_with_fade)~ - Inside source: true *** True Line Result button = state.new_entity(:button_with_fade) ** Processing line: ~ button.label = [x + w.half, y + h.half + 10, message, 0, 1] # '+ 10' keeps label's text within button's borders~ - Inside source: true *** True Line Result button.label = [x + w.half, y + h.half + 10, message, 0, 1] # '+ 10' keeps label's text within button's borders ** Processing line: ~ button.border = [x, y, w, h] # sets border definition~ - Inside source: true *** True Line Result button.border = [x, y, w, h] # sets border definition ** Processing line: ~ button~ - Inside source: true *** True Line Result button ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the mouse has been clicked and the click's location is inside of the button's border, that means~ - Inside source: true *** True Line Result # If the mouse has been clicked and the click's location is inside of the button's border, that means ** Processing line: ~ # that the button has been clicked. This method returns a boolean value.~ - Inside source: true *** True Line Result # that the button has been clicked. This method returns a boolean value. ** Processing line: ~ def button_clicked? button~ - Inside source: true *** True Line Result def button_clicked? button ** Processing line: ~ inputs.mouse.click && inputs.mouse.click.point.inside_rect?(button.border)~ - Inside source: true *** True Line Result inputs.mouse.click && inputs.mouse.click.point.inside_rect?(button.border) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Determines if button was clicked, and changes its appearance if it is clicked~ - Inside source: true *** True Line Result # Determines if button was clicked, and changes its appearance if it is clicked ** Processing line: ~ def tick_button_prefab button~ - Inside source: true *** True Line Result def tick_button_prefab button ** Processing line: ~ outputs.labels << button.label # outputs button's label and border~ - Inside source: true *** True Line Result outputs.labels << button.label # outputs button's label and border ** Processing line: ~ outputs.borders << button.border~ - Inside source: true *** True Line Result outputs.borders << button.border ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if button_clicked? button # if button is clicked~ - Inside source: true *** True Line Result if button_clicked? button # if button is clicked ** Processing line: ~ button.clicked_at = inputs.mouse.click.created_at # stores the time that the button was clicked~ - Inside source: true *** True Line Result button.clicked_at = inputs.mouse.click.created_at # stores the time that the button was clicked ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if button.clicked_at # if clicked_at has a frame value and is not nil~ - Inside source: true *** True Line Result if button.clicked_at # if clicked_at has a frame value and is not nil ** Processing line: ~ # button is output; color changes and transparency changes for 0.25 seconds after click occurs~ - Inside source: true *** True Line Result # button is output; color changes and transparency changes for 0.25 seconds after click occurs ** Processing line: ~ outputs.solids << [button.border.x, button.border.y, button.border.w, button.border.h,~ - Inside source: true *** True Line Result outputs.solids << [button.border.x, button.border.y, button.border.w, button.border.h, ** Processing line: ~ 0, 180, 80, 255 * button.clicked_at.ease(0.25.seconds, :flip)] # transparency changes for 0.25 seconds~ - Inside source: true *** True Line Result 0, 180, 80, 255 * button.clicked_at.ease(0.25.seconds, :flip)] # transparency changes for 0.25 seconds ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Exports the app's game state if the export button is clicked.~ - Inside source: true *** True Line Result # Exports the app's game state if the export button is clicked. ** Processing line: ~ def export_game_state_demo~ - Inside source: true *** True Line Result def export_game_state_demo ** Processing line: ~ state.export_game_state_button ||= new_button_prefab(460, 100, "click to export app state")~ - Inside source: true *** True Line Result state.export_game_state_button ||= new_button_prefab(460, 100, "click to export app state") ** Processing line: ~ tick_button_prefab(state.export_game_state_button) # calls method to output button~ - Inside source: true *** True Line Result tick_button_prefab(state.export_game_state_button) # calls method to output button ** Processing line: ~ if button_clicked? state.export_game_state_button # if the export button is clicked~ - Inside source: true *** True Line Result if button_clicked? state.export_game_state_button # if the export button is clicked ** Processing line: ~ args.gtk.export! "Exported from clicking the export button in the tech demo." # the export occurs~ - Inside source: true *** True Line Result args.gtk.export! "Exported from clicking the export button in the tech demo." # the export occurs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The mouse and keyboard focus are set to "yes" when the Dragonruby window is the active window.~ - Inside source: true *** True Line Result # The mouse and keyboard focus are set to "yes" when the Dragonruby window is the active window. ** Processing line: ~ def window_state_demo~ - Inside source: true *** True Line Result def window_state_demo ** Processing line: ~ m = $gtk.args.inputs.mouse.has_focus ? 'Y' : 'N' # ternary operator (similar to if statement)~ - Inside source: true *** True Line Result m = $gtk.args.inputs.mouse.has_focus ? 'Y' : 'N' # ternary operator (similar to if statement) ** Processing line: ~ k = $gtk.args.inputs.keyboard.has_focus ? 'Y' : 'N'~ - Inside source: true *** True Line Result k = $gtk.args.inputs.keyboard.has_focus ? 'Y' : 'N' ** Processing line: ~ outputs.labels << [460, 20, "mouse focus: #{m} keyboard focus: #{k}", small_font]~ - Inside source: true *** True Line Result outputs.labels << [460, 20, "mouse focus: #{m} keyboard focus: #{k}", small_font] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Sets values for the horizontal separator (divides demo sections)~ - Inside source: true *** True Line Result #Sets values for the horizontal separator (divides demo sections) ** Processing line: ~ def horizontal_seperator y, x, x2~ - Inside source: true *** True Line Result def horizontal_seperator y, x, x2 ** Processing line: ~ [x, y, x2, y, 150, 150, 150]~ - Inside source: true *** True Line Result [x, y, x2, y, 150, 150, 150] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Sets the values for the vertical separator (divides demo sections)~ - Inside source: true *** True Line Result #Sets the values for the vertical separator (divides demo sections) ** Processing line: ~ def vertical_seperator x, y, y2~ - Inside source: true *** True Line Result def vertical_seperator x, y, y2 ** Processing line: ~ [x, y, x, y2, 150, 150, 150]~ - Inside source: true *** True Line Result [x, y, x, y2, 150, 150, 150] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs vertical and horizontal separators onto the screen to separate each demo section.~ - Inside source: true *** True Line Result # Outputs vertical and horizontal separators onto the screen to separate each demo section. ** Processing line: ~ def render_seperators~ - Inside source: true *** True Line Result def render_seperators ** Processing line: ~ outputs.lines << horizontal_seperator(505, grid.left, 445)~ - Inside source: true *** True Line Result outputs.lines << horizontal_seperator(505, grid.left, 445) ** Processing line: ~ outputs.lines << horizontal_seperator(353, grid.left, 445)~ - Inside source: true *** True Line Result outputs.lines << horizontal_seperator(353, grid.left, 445) ** Processing line: ~ outputs.lines << horizontal_seperator(264, grid.left, 445)~ - Inside source: true *** True Line Result outputs.lines << horizontal_seperator(264, grid.left, 445) ** Processing line: ~ outputs.lines << horizontal_seperator(174, grid.left, 445)~ - Inside source: true *** True Line Result outputs.lines << horizontal_seperator(174, grid.left, 445) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.lines << vertical_seperator(445, grid.top, grid.bottom)~ - Inside source: true *** True Line Result outputs.lines << vertical_seperator(445, grid.top, grid.bottom) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.lines << horizontal_seperator(690, 445, 820)~ - Inside source: true *** True Line Result outputs.lines << horizontal_seperator(690, 445, 820) ** Processing line: ~ outputs.lines << horizontal_seperator(426, 445, 820)~ - Inside source: true *** True Line Result outputs.lines << horizontal_seperator(426, 445, 820) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.lines << vertical_seperator(820, grid.top, grid.bottom)~ - Inside source: true *** True Line Result outputs.lines << vertical_seperator(820, grid.top, grid.bottom) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $tech_demo = TechDemo.new~ - Inside source: true *** True Line Result $tech_demo = TechDemo.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $tech_demo.inputs = args.inputs~ - Inside source: true *** True Line Result $tech_demo.inputs = args.inputs ** Processing line: ~ $tech_demo.state = args.state~ - Inside source: true *** True Line Result $tech_demo.state = args.state ** Processing line: ~ $tech_demo.grid = args.grid~ - Inside source: true *** True Line Result $tech_demo.grid = args.grid ** Processing line: ~ $tech_demo.args = args~ - Inside source: true *** True Line Result $tech_demo.args = args ** Processing line: ~ $tech_demo.outputs = args.render_target(:mini_map)~ - Inside source: true *** True Line Result $tech_demo.outputs = args.render_target(:mini_map) ** Processing line: ~ $tech_demo.tick~ - Inside source: true *** True Line Result $tech_demo.tick ** Processing line: ~ args.outputs.labels << [830, 715, "Render target:", [-2, 0, 0, 0, 0, 255]]~ - Inside source: true *** True Line Result args.outputs.labels << [830, 715, "Render target:", [-2, 0, 0, 0, 0, 255]] ** Processing line: ~ args.outputs.sprites << [0, 0, 1280, 720, :mini_map]~ - Inside source: true *** True Line Result args.outputs.sprites << [0, 0, 1280, 720, :mini_map] ** Processing line: ~ args.outputs.sprites << [830, 300, 675, 379, :mini_map]~ - Inside source: true *** True Line Result args.outputs.sprites << [830, 300, 675, 379, :mini_map] ** Processing line: ~ tick_instructions args, "Sample app shows all the rendering apis available."~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows all the rendering apis available." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Rendering - Render Primitive Hierarchies - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Rendering - Render Primitive Hierarchies - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_rendering/04_render_primitive_hierarchies/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_rendering/04_render_primitive_hierarchies/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - Nested array: An array whose individual elements are also arrays; useful for~ - Inside source: true *** True Line Result - Nested array: An array whose individual elements are also arrays; useful for ** Processing line: ~ storing groups of similar data. Also called multidimensional arrays.~ - Inside source: true *** True Line Result storing groups of similar data. Also called multidimensional arrays. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ In this sample app, we see nested arrays being used in object definitions.~ - Inside source: true *** True Line Result In this sample app, we see nested arrays being used in object definitions. ** Processing line: ~ Notice the parameters for solids, listed below. Parameters 1-3 set the~ - Inside source: true *** True Line Result Notice the parameters for solids, listed below. Parameters 1-3 set the ** Processing line: ~ definition for the rect, and parameter 4 sets the definition of the color.~ - Inside source: true *** True Line Result definition for the rect, and parameter 4 sets the definition of the color. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Instead of having a solid definition that looks like this,~ - Inside source: true *** True Line Result Instead of having a solid definition that looks like this, ** Processing line: ~ [X, Y, W, H, R, G, B]~ - Inside source: true *** True Line Result [X, Y, W, H, R, G, B] ** Processing line: ~ we can separate it into two separate array definitions in one, like this~ - Inside source: true *** True Line Result we can separate it into two separate array definitions in one, like this ** Processing line: ~ [[X, Y, W, H], [R, G, B]]~ - Inside source: true *** True Line Result [[X, Y, W, H], [R, G, B]] ** Processing line: ~ and both options work fine in defining our solid (or any object).~ - Inside source: true *** True Line Result and both options work fine in defining our solid (or any object). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - Collections: Lists of data; useful for organizing large amounts of data.~ - Inside source: true *** True Line Result - Collections: Lists of data; useful for organizing large amounts of data. ** Processing line: ~ One element of a collection could be an array (which itself contains many elements).~ - Inside source: true *** True Line Result One element of a collection could be an array (which itself contains many elements). ** Processing line: ~ For example, a collection that stores two solid objects would look like this:~ - Inside source: true *** True Line Result For example, a collection that stores two solid objects would look like this: ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [100, 100, 50, 50, 0, 0, 0],~ - Inside source: true *** True Line Result [100, 100, 50, 50, 0, 0, 0], ** Processing line: ~ [100, 150, 50, 50, 255, 255, 255]~ - Inside source: true *** True Line Result [100, 150, 50, 50, 255, 255, 255] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ If this collection was added to args.outputs.solids, two solids would be output~ - Inside source: true *** True Line Result If this collection was added to args.outputs.solids, two solids would be output ** Processing line: ~ next to each other, one black and one white.~ - Inside source: true *** True Line Result next to each other, one black and one white. ** Processing line: ~ Nested arrays can be used in collections, as you will see in this sample app.~ - Inside source: true *** True Line Result Nested arrays can be used in collections, as you will see in this sample app. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.solids: An array. The values generate a solid.~ - Inside source: true *** True Line Result - args.outputs.solids: An array. The values generate a solid. ** Processing line: ~ The parameters for a solid are~ - Inside source: true *** True Line Result The parameters for a solid are ** Processing line: ~ 1. The position on the screen (x, y)~ - Inside source: true *** True Line Result 1. The position on the screen (x, y) ** Processing line: ~ 2. The width (w)~ - Inside source: true *** True Line Result 2. The width (w) ** Processing line: ~ 3. The height (h)~ - Inside source: true *** True Line Result 3. The height (h) ** Processing line: ~ 4. The color (r, g, b) (if a color is not assigned, the object's default color will be black)~ - Inside source: true *** True Line Result 4. The color (r, g, b) (if a color is not assigned, the object's default color will be black) ** Processing line: ~ NOTE: THE PARAMETERS ARE THE SAME FOR BORDERS!~ - Inside source: true *** True Line Result NOTE: THE PARAMETERS ARE THE SAME FOR BORDERS! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Here is an example of a (red) border or solid definition:~ - Inside source: true *** True Line Result Here is an example of a (red) border or solid definition: ** Processing line: ~ [100, 100, 400, 500, 255, 0, 0]~ - Inside source: true *** True Line Result [100, 100, 400, 500, 255, 0, 0] ** Processing line: ~ It will be a solid or border depending on if it is added to args.outputs.solids or args.outputs.borders.~ - Inside source: true *** True Line Result It will be a solid or border depending on if it is added to args.outputs.solids or args.outputs.borders. ** Processing line: ~ For more information about solids and borders, go to mygame/documentation/03-solids-and-borders.md.~ - Inside source: true *** True Line Result For more information about solids and borders, go to mygame/documentation/03-solids-and-borders.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.sprites: An array. The values generate a sprite.~ - Inside source: true *** True Line Result - args.outputs.sprites: An array. The values generate a sprite. ** Processing line: ~ The parameters for sprites are~ - Inside source: true *** True Line Result The parameters for sprites are ** Processing line: ~ 1. The position on the screen (x, y)~ - Inside source: true *** True Line Result 1. The position on the screen (x, y) ** Processing line: ~ 2. The width (w)~ - Inside source: true *** True Line Result 2. The width (w) ** Processing line: ~ 3. The height (h)~ - Inside source: true *** True Line Result 3. The height (h) ** Processing line: ~ 4. The image path (p)~ - Inside source: true *** True Line Result 4. The image path (p) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Here is an example of a sprite definition:~ - Inside source: true *** True Line Result Here is an example of a sprite definition: ** Processing line: ~ [100, 100, 400, 500, 'sprites/dragonruby.png']~ - Inside source: true *** True Line Result [100, 100, 400, 500, 'sprites/dragonruby.png'] ** Processing line: ~ For more information about sprites, go to mygame/documentation/05-sprites.md.~ - Inside source: true *** True Line Result For more information about sprites, go to mygame/documentation/05-sprites.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This code demonstrates the creation and output of objects like sprites, borders, and solids~ - Inside source: true *** True Line Result # This code demonstrates the creation and output of objects like sprites, borders, and solids ** Processing line: ~ # If filled in, they are solids~ - Inside source: true *** True Line Result # If filled in, they are solids ** Processing line: ~ # If hollow, they are borders~ - Inside source: true *** True Line Result # If hollow, they are borders ** Processing line: ~ # If images, they are sprites~ - Inside source: true *** True Line Result # If images, they are sprites ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Solids are added to args.outputs.solids~ - Inside source: true *** True Line Result # Solids are added to args.outputs.solids ** Processing line: ~ # Borders are added to args.outputs.borders~ - Inside source: true *** True Line Result # Borders are added to args.outputs.borders ** Processing line: ~ # Sprites are added to args.outputs.sprites~ - Inside source: true *** True Line Result # Sprites are added to args.outputs.sprites ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The tick method runs 60 frames every second.~ - Inside source: true *** True Line Result # The tick method runs 60 frames every second. ** Processing line: ~ # Your game is going to happen under this one function.~ - Inside source: true *** True Line Result # Your game is going to happen under this one function. ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ border_as_solid_and_solid_as_border args~ - Inside source: true *** True Line Result border_as_solid_and_solid_as_border args ** Processing line: ~ sprite_as_border_or_solids args~ - Inside source: true *** True Line Result sprite_as_border_or_solids args ** Processing line: ~ collection_of_borders_and_solids args~ - Inside source: true *** True Line Result collection_of_borders_and_solids args ** Processing line: ~ collection_of_sprites args~ - Inside source: true *** True Line Result collection_of_sprites args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Shows a border being output onto the screen as a border and a solid~ - Inside source: true *** True Line Result # Shows a border being output onto the screen as a border and a solid ** Processing line: ~ # Also shows how colors can be set~ - Inside source: true *** True Line Result # Also shows how colors can be set ** Processing line: ~ def border_as_solid_and_solid_as_border args~ - Inside source: true *** True Line Result def border_as_solid_and_solid_as_border args ** Processing line: ~ border = [0, 0, 50, 50]~ - Inside source: true *** True Line Result border = [0, 0, 50, 50] ** Processing line: ~ args.outputs.borders << border~ - Inside source: true *** True Line Result args.outputs.borders << border ** Processing line: ~ args.outputs.solids << border~ - Inside source: true *** True Line Result args.outputs.solids << border ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Red, green, blue saturations (last three parameters) can be any number between 0 and 255~ - Inside source: true *** True Line Result # Red, green, blue saturations (last three parameters) can be any number between 0 and 255 ** Processing line: ~ border_with_color = [0, 100, 50, 50, 255, 0, 0]~ - Inside source: true *** True Line Result border_with_color = [0, 100, 50, 50, 255, 0, 0] ** Processing line: ~ args.outputs.borders << border_with_color~ - Inside source: true *** True Line Result args.outputs.borders << border_with_color ** Processing line: ~ args.outputs.solids << border_with_color~ - Inside source: true *** True Line Result args.outputs.solids << border_with_color ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ border_with_nested_color = [0, 200, 50, 50, [0, 255, 0]] # nested color~ - Inside source: true *** True Line Result border_with_nested_color = [0, 200, 50, 50, [0, 255, 0]] # nested color ** Processing line: ~ args.outputs.borders << border_with_nested_color~ - Inside source: true *** True Line Result args.outputs.borders << border_with_nested_color ** Processing line: ~ args.outputs.solids << border_with_nested_color~ - Inside source: true *** True Line Result args.outputs.solids << border_with_nested_color ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ border_with_nested_rect = [[0, 300, 50, 50], 0, 0, 255] # nested rect~ - Inside source: true *** True Line Result border_with_nested_rect = [[0, 300, 50, 50], 0, 0, 255] # nested rect ** Processing line: ~ args.outputs.borders << border_with_nested_rect~ - Inside source: true *** True Line Result args.outputs.borders << border_with_nested_rect ** Processing line: ~ args.outputs.solids << border_with_nested_rect~ - Inside source: true *** True Line Result args.outputs.solids << border_with_nested_rect ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ border_with_nested_color_and_rect = [[0, 400, 50, 50], [255, 0, 255]] # nested rect and color~ - Inside source: true *** True Line Result border_with_nested_color_and_rect = [[0, 400, 50, 50], [255, 0, 255]] # nested rect and color ** Processing line: ~ args.outputs.borders << border_with_nested_color_and_rect~ - Inside source: true *** True Line Result args.outputs.borders << border_with_nested_color_and_rect ** Processing line: ~ args.outputs.solids << border_with_nested_color_and_rect~ - Inside source: true *** True Line Result args.outputs.solids << border_with_nested_color_and_rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Shows a sprite output onto the screen as a sprite, border, and solid~ - Inside source: true *** True Line Result # Shows a sprite output onto the screen as a sprite, border, and solid ** Processing line: ~ # Demonstrates that all three outputs appear differently on screen~ - Inside source: true *** True Line Result # Demonstrates that all three outputs appear differently on screen ** Processing line: ~ def sprite_as_border_or_solids args~ - Inside source: true *** True Line Result def sprite_as_border_or_solids args ** Processing line: ~ sprite = [100, 0, 50, 50, 'sprites/ship.png']~ - Inside source: true *** True Line Result sprite = [100, 0, 50, 50, 'sprites/ship.png'] ** Processing line: ~ args.outputs.sprites << sprite~ - Inside source: true *** True Line Result args.outputs.sprites << sprite ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sprite_as_border variable has same parameters (excluding position) as above object,~ - Inside source: true *** True Line Result # Sprite_as_border variable has same parameters (excluding position) as above object, ** Processing line: ~ # but will appear differently on screen because it is added to args.outputs.borders~ - Inside source: true *** True Line Result # but will appear differently on screen because it is added to args.outputs.borders ** Processing line: ~ sprite_as_border = [100, 100, 50, 50, 'sprites/ship.png']~ - Inside source: true *** True Line Result sprite_as_border = [100, 100, 50, 50, 'sprites/ship.png'] ** Processing line: ~ args.outputs.borders << sprite_as_border~ - Inside source: true *** True Line Result args.outputs.borders << sprite_as_border ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sprite_as_solid variable has same parameters (excluding position) as above object,~ - Inside source: true *** True Line Result # Sprite_as_solid variable has same parameters (excluding position) as above object, ** Processing line: ~ # but will appear differently on screen because it is added to args.outputs.solids~ - Inside source: true *** True Line Result # but will appear differently on screen because it is added to args.outputs.solids ** Processing line: ~ sprite_as_solid = [100, 200, 50, 50, 'sprites/ship.png']~ - Inside source: true *** True Line Result sprite_as_solid = [100, 200, 50, 50, 'sprites/ship.png'] ** Processing line: ~ args.outputs.solids << sprite_as_solid~ - Inside source: true *** True Line Result args.outputs.solids << sprite_as_solid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Holds and outputs a collection of borders and a collection of solids~ - Inside source: true *** True Line Result # Holds and outputs a collection of borders and a collection of solids ** Processing line: ~ # Collections are created by using arrays to hold parameters of each individual object~ - Inside source: true *** True Line Result # Collections are created by using arrays to hold parameters of each individual object ** Processing line: ~ def collection_of_borders_and_solids args~ - Inside source: true *** True Line Result def collection_of_borders_and_solids args ** Processing line: ~ collection_borders = [~ - Inside source: true *** True Line Result collection_borders = [ ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [200, 0, 50, 50], # black border~ - Inside source: true *** True Line Result [200, 0, 50, 50], # black border ** Processing line: ~ [200, 100, 50, 50, 255, 0, 0], # red border~ - Inside source: true *** True Line Result [200, 100, 50, 50, 255, 0, 0], # red border ** Processing line: ~ [200, 200, 50, 50, [0, 255, 0]], # nested color~ - Inside source: true *** True Line Result [200, 200, 50, 50, [0, 255, 0]], # nested color ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ [[200, 300, 50, 50], 0, 0, 255], # nested rect~ - Inside source: true *** True Line Result [[200, 300, 50, 50], 0, 0, 255], # nested rect ** Processing line: ~ [[200, 400, 50, 50], [255, 0, 255]] # nested rect and nested color~ - Inside source: true *** True Line Result [[200, 400, 50, 50], [255, 0, 255]] # nested rect and nested color ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.borders << collection_borders~ - Inside source: true *** True Line Result args.outputs.borders << collection_borders ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ collection_solids = [~ - Inside source: true *** True Line Result collection_solids = [ ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [[300, 300, 50, 50], 0, 0, 255], # nested rect~ - Inside source: true *** True Line Result [[300, 300, 50, 50], 0, 0, 255], # nested rect ** Processing line: ~ [[300, 400, 50, 50], [255, 0, 255]] # nested rect and nested color~ - Inside source: true *** True Line Result [[300, 400, 50, 50], [255, 0, 255]] # nested rect and nested color ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ [300, 0, 50, 50],~ - Inside source: true *** True Line Result [300, 0, 50, 50], ** Processing line: ~ [300, 100, 50, 50, 255, 0, 0],~ - Inside source: true *** True Line Result [300, 100, 50, 50, 255, 0, 0], ** Processing line: ~ [300, 200, 50, 50, [0, 255, 0]], # nested color~ - Inside source: true *** True Line Result [300, 200, 50, 50, [0, 255, 0]], # nested color ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.solids << collection_solids~ - Inside source: true *** True Line Result args.outputs.solids << collection_solids ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Holds and outputs a collection of sprites by adding it to args.outputs.sprites~ - Inside source: true *** True Line Result # Holds and outputs a collection of sprites by adding it to args.outputs.sprites ** Processing line: ~ # Also outputs a collection with same parameters (excluding position) by adding~ - Inside source: true *** True Line Result # Also outputs a collection with same parameters (excluding position) by adding ** Processing line: ~ # it to args.outputs.solids and another to args.outputs.borders~ - Inside source: true *** True Line Result # it to args.outputs.solids and another to args.outputs.borders ** Processing line: ~ def collection_of_sprites args~ - Inside source: true *** True Line Result def collection_of_sprites args ** Processing line: ~ sprites_collection = [~ - Inside source: true *** True Line Result sprites_collection = [ ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [400, 0, 50, 50, 'sprites/ship.png'],~ - Inside source: true *** True Line Result [400, 0, 50, 50, 'sprites/ship.png'], ** Processing line: ~ [400, 100, 50, 50, 'sprites/ship.png'],~ - Inside source: true *** True Line Result [400, 100, 50, 50, 'sprites/ship.png'], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ [400, 200, 50, 50, 'sprites/ship.png']~ - Inside source: true *** True Line Result [400, 200, 50, 50, 'sprites/ship.png'] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.sprites << sprites_collection~ - Inside source: true *** True Line Result args.outputs.sprites << sprites_collection ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.solids << [~ - Inside source: true *** True Line Result args.outputs.solids << [ ** Processing line: ~ [500, 0, 50, 50, 'sprites/ship.png'],~ - Inside source: true *** True Line Result [500, 0, 50, 50, 'sprites/ship.png'], ** Processing line: ~ [500, 100, 50, 50, 'sprites/ship.png'],~ - Inside source: true *** True Line Result [500, 100, 50, 50, 'sprites/ship.png'], ** Processing line: ~ [[[500, 200, 50, 50, 'sprites/ship.png']]]~ - Inside source: true *** True Line Result [[[500, 200, 50, 50, 'sprites/ship.png']]] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.borders << [~ - Inside source: true *** True Line Result args.outputs.borders << [ ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [600, 0, 50, 50, 'sprites/ship.png'],~ - Inside source: true *** True Line Result [600, 0, 50, 50, 'sprites/ship.png'], ** Processing line: ~ [600, 100, 50, 50, 'sprites/ship.png'],~ - Inside source: true *** True Line Result [600, 100, 50, 50, 'sprites/ship.png'], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ [600, 200, 50, 50, 'sprites/ship.png']~ - Inside source: true *** True Line Result [600, 200, 50, 50, 'sprites/ship.png'] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Rendering - Render Primitives As Hash - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Rendering - Render Primitives As Hash - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_rendering/05_render_primitives_as_hash/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_rendering/05_render_primitives_as_hash/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - Hashes: Collection of unique keys and their corresponding values. The value can be found~ - Inside source: true *** True Line Result - Hashes: Collection of unique keys and their corresponding values. The value can be found ** Processing line: ~ using their keys.~ - Inside source: true *** True Line Result using their keys. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ For example, if we have a "numbers" hash that stores numbers in English as the~ - Inside source: true *** True Line Result For example, if we have a "numbers" hash that stores numbers in English as the ** Processing line: ~ key and numbers in Spanish as the value, we'd have a hash that looks like this...~ - Inside source: true *** True Line Result key and numbers in Spanish as the value, we'd have a hash that looks like this... ** Processing line: ~ numbers = { "one" => "uno", "two" => "dos", "three" => "tres" }~ - Inside source: true *** True Line Result numbers = { "one" => "uno", "two" => "dos", "three" => "tres" } ** Processing line: ~ and on it goes.~ - Inside source: true *** True Line Result and on it goes. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Now if we wanted to find the corresponding value of the "one" key, we could say~ - Inside source: true *** True Line Result Now if we wanted to find the corresponding value of the "one" key, we could say ** Processing line: ~ puts numbers["one"]~ - Inside source: true *** True Line Result puts numbers["one"] ** Processing line: ~ which would print "uno" to the console.~ - Inside source: true *** True Line Result which would print "uno" to the console. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.sprites: An array. The values generate a sprite.~ - Inside source: true *** True Line Result - args.outputs.sprites: An array. The values generate a sprite. ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, PATH, ANGLE, ALPHA, RED, GREEN, BLUE]~ - Inside source: true *** True Line Result The parameters are [X, Y, WIDTH, HEIGHT, PATH, ANGLE, ALPHA, RED, GREEN, BLUE] ** Processing line: ~ For more information about sprites, go to mygame/documentation/05-sprites.md.~ - Inside source: true *** True Line Result For more information about sprites, go to mygame/documentation/05-sprites.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ - Inside source: true *** True Line Result - args.outputs.labels: An array. The values generate a label. ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ - Inside source: true *** True Line Result For more information about labels, go to mygame/documentation/02-labels.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.solids: An array. The values generate a solid.~ - Inside source: true *** True Line Result - args.outputs.solids: An array. The values generate a solid. ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE, ALPHA]~ - Inside source: true *** True Line Result The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE, ALPHA] ** Processing line: ~ For more information about solids, go to mygame/documentation/03-solids-and-borders.md.~ - Inside source: true *** True Line Result For more information about solids, go to mygame/documentation/03-solids-and-borders.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.borders: An array. The values generate a border.~ - Inside source: true *** True Line Result - args.outputs.borders: An array. The values generate a border. ** Processing line: ~ The parameters are the same as a solid.~ - Inside source: true *** True Line Result The parameters are the same as a solid. ** Processing line: ~ For more information about borders, go to mygame/documentation/03-solids-and-borders.md.~ - Inside source: true *** True Line Result For more information about borders, go to mygame/documentation/03-solids-and-borders.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.lines: An array. The values generate a line.~ - Inside source: true *** True Line Result - args.outputs.lines: An array. The values generate a line. ** Processing line: ~ The parameters are [X1, Y1, X2, Y2, RED, GREEN, BLUE]~ - Inside source: true *** True Line Result The parameters are [X1, Y1, X2, Y2, RED, GREEN, BLUE] ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ - Inside source: true *** True Line Result For more information about labels, go to mygame/documentation/02-labels.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app demonstrates how hashes can be used to output different kinds of objects.~ - Inside source: true *** True Line Result # This sample app demonstrates how hashes can be used to output different kinds of objects. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.angle ||= 0 # initializes angle to 0~ - Inside source: true *** True Line Result args.state.angle ||= 0 # initializes angle to 0 ** Processing line: ~ args.state.angle += 1 # increments angle by 1 every frame (60 times a second)~ - Inside source: true *** True Line Result args.state.angle += 1 # increments angle by 1 every frame (60 times a second) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs sprite using a hash~ - Inside source: true *** True Line Result # Outputs sprite using a hash ** Processing line: ~ args.outputs.sprites << {~ - Inside source: true *** True Line Result args.outputs.sprites << { ** Processing line: ~ x: 30, # sprite position~ - Inside source: true *** True Line Result x: 30, # sprite position ** Processing line: ~ y: 550,~ - Inside source: true *** True Line Result y: 550, ** Processing line: ~ w: 128, # sprite size~ - Inside source: true *** True Line Result w: 128, # sprite size ** Processing line: ~ h: 101,~ - Inside source: true *** True Line Result h: 101, ** Processing line: ~ path: "dragonruby.png", # image path~ - Inside source: true *** True Line Result path: "dragonruby.png", # image path ** Processing line: ~ angle: args.state.angle, # angle~ - Inside source: true *** True Line Result angle: args.state.angle, # angle ** Processing line: ~ a: 255, # alpha (transparency)~ - Inside source: true *** True Line Result a: 255, # alpha (transparency) ** Processing line: ~ r: 255, # color saturation~ - Inside source: true *** True Line Result r: 255, # color saturation ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 255,~ - Inside source: true *** True Line Result b: 255, ** Processing line: ~ tile_x: 0, # sprite sub division/tile~ - Inside source: true *** True Line Result tile_x: 0, # sprite sub division/tile ** Processing line: ~ tile_y: 0,~ - Inside source: true *** True Line Result tile_y: 0, ** Processing line: ~ tile_w: -1,~ - Inside source: true *** True Line Result tile_w: -1, ** Processing line: ~ tile_h: -1,~ - Inside source: true *** True Line Result tile_h: -1, ** Processing line: ~ flip_vertically: false, # don't flip sprite~ - Inside source: true *** True Line Result flip_vertically: false, # don't flip sprite ** Processing line: ~ flip_horizontally: false,~ - Inside source: true *** True Line Result flip_horizontally: false, ** Processing line: ~ angle_anchor_x: 0.5, # rotation center set to middle~ - Inside source: true *** True Line Result angle_anchor_x: 0.5, # rotation center set to middle ** Processing line: ~ angle_anchor_y: 0.5~ - Inside source: true *** True Line Result angle_anchor_y: 0.5 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs label using a hash~ - Inside source: true *** True Line Result # Outputs label using a hash ** Processing line: ~ args.outputs.labels << {~ - Inside source: true *** True Line Result args.outputs.labels << { ** Processing line: ~ x: 200, # label position~ - Inside source: true *** True Line Result x: 200, # label position ** Processing line: ~ y: 550,~ - Inside source: true *** True Line Result y: 550, ** Processing line: ~ text: "dragonruby", # label text~ - Inside source: true *** True Line Result text: "dragonruby", # label text ** Processing line: ~ size_enum: 2,~ - Inside source: true *** True Line Result size_enum: 2, ** Processing line: ~ alignment_enum: 1,~ - Inside source: true *** True Line Result alignment_enum: 1, ** Processing line: ~ r: 155, # color saturation~ - Inside source: true *** True Line Result r: 155, # color saturation ** Processing line: ~ g: 50,~ - Inside source: true *** True Line Result g: 50, ** Processing line: ~ b: 50,~ - Inside source: true *** True Line Result b: 50, ** Processing line: ~ a: 255, # transparency~ - Inside source: true *** True Line Result a: 255, # transparency ** Processing line: ~ font: "fonts/manaspc.ttf" # font style; without mentioned file, label won't output correctly~ - Inside source: true *** True Line Result font: "fonts/manaspc.ttf" # font style; without mentioned file, label won't output correctly ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs solid using a hash~ - Inside source: true *** True Line Result # Outputs solid using a hash ** Processing line: ~ # [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE, ALPHA]~ - Inside source: true *** True Line Result # [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE, ALPHA] ** Processing line: ~ args.outputs.solids << {~ - Inside source: true *** True Line Result args.outputs.solids << { ** Processing line: ~ x: 400, # position~ - Inside source: true *** True Line Result x: 400, # position ** Processing line: ~ y: 550,~ - Inside source: true *** True Line Result y: 550, ** Processing line: ~ w: 160, # size~ - Inside source: true *** True Line Result w: 160, # size ** Processing line: ~ h: 90,~ - Inside source: true *** True Line Result h: 90, ** Processing line: ~ r: 120, # color saturation~ - Inside source: true *** True Line Result r: 120, # color saturation ** Processing line: ~ g: 50,~ - Inside source: true *** True Line Result g: 50, ** Processing line: ~ b: 50,~ - Inside source: true *** True Line Result b: 50, ** Processing line: ~ a: 255 # transparency~ - Inside source: true *** True Line Result a: 255 # transparency ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs border using a hash~ - Inside source: true *** True Line Result # Outputs border using a hash ** Processing line: ~ # Same parameters as a solid~ - Inside source: true *** True Line Result # Same parameters as a solid ** Processing line: ~ args.outputs.borders << {~ - Inside source: true *** True Line Result args.outputs.borders << { ** Processing line: ~ x: 600,~ - Inside source: true *** True Line Result x: 600, ** Processing line: ~ y: 550,~ - Inside source: true *** True Line Result y: 550, ** Processing line: ~ w: 160,~ - Inside source: true *** True Line Result w: 160, ** Processing line: ~ h: 90,~ - Inside source: true *** True Line Result h: 90, ** Processing line: ~ r: 120,~ - Inside source: true *** True Line Result r: 120, ** Processing line: ~ g: 50,~ - Inside source: true *** True Line Result g: 50, ** Processing line: ~ b: 50,~ - Inside source: true *** True Line Result b: 50, ** Processing line: ~ a: 255~ - Inside source: true *** True Line Result a: 255 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs line using a hash~ - Inside source: true *** True Line Result # Outputs line using a hash ** Processing line: ~ args.outputs.lines << {~ - Inside source: true *** True Line Result args.outputs.lines << { ** Processing line: ~ x: 900, # starting position~ - Inside source: true *** True Line Result x: 900, # starting position ** Processing line: ~ y: 550,~ - Inside source: true *** True Line Result y: 550, ** Processing line: ~ x2: 1200, # ending position~ - Inside source: true *** True Line Result x2: 1200, # ending position ** Processing line: ~ y2: 550,~ - Inside source: true *** True Line Result y2: 550, ** Processing line: ~ r: 120, # color saturation~ - Inside source: true *** True Line Result r: 120, # color saturation ** Processing line: ~ g: 50,~ - Inside source: true *** True Line Result g: 50, ** Processing line: ~ b: 50,~ - Inside source: true *** True Line Result b: 50, ** Processing line: ~ a: 255 # transparency~ - Inside source: true *** True Line Result a: 255 # transparency ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs sprite as a primitive using a hash~ - Inside source: true *** True Line Result # Outputs sprite as a primitive using a hash ** Processing line: ~ args.outputs.primitives << {~ - Inside source: true *** True Line Result args.outputs.primitives << { ** Processing line: ~ x: 30, # position~ - Inside source: true *** True Line Result x: 30, # position ** Processing line: ~ y: 200,~ - Inside source: true *** True Line Result y: 200, ** Processing line: ~ w: 128, # size~ - Inside source: true *** True Line Result w: 128, # size ** Processing line: ~ h: 101,~ - Inside source: true *** True Line Result h: 101, ** Processing line: ~ path: "dragonruby.png", # image path~ - Inside source: true *** True Line Result path: "dragonruby.png", # image path ** Processing line: ~ angle: args.state.angle, # angle~ - Inside source: true *** True Line Result angle: args.state.angle, # angle ** Processing line: ~ a: 255, # transparency~ - Inside source: true *** True Line Result a: 255, # transparency ** Processing line: ~ r: 255, # color saturation~ - Inside source: true *** True Line Result r: 255, # color saturation ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 255,~ - Inside source: true *** True Line Result b: 255, ** Processing line: ~ tile_x: 0, # sprite sub division/tile~ - Inside source: true *** True Line Result tile_x: 0, # sprite sub division/tile ** Processing line: ~ tile_y: 0,~ - Inside source: true *** True Line Result tile_y: 0, ** Processing line: ~ tile_w: -1,~ - Inside source: true *** True Line Result tile_w: -1, ** Processing line: ~ tile_h: -1,~ - Inside source: true *** True Line Result tile_h: -1, ** Processing line: ~ flip_vertically: false, # don't flip~ - Inside source: true *** True Line Result flip_vertically: false, # don't flip ** Processing line: ~ flip_horizontally: false,~ - Inside source: true *** True Line Result flip_horizontally: false, ** Processing line: ~ angle_anchor_x: 0.5, # rotation center set to middle~ - Inside source: true *** True Line Result angle_anchor_x: 0.5, # rotation center set to middle ** Processing line: ~ angle_anchor_y: 0.5~ - Inside source: true *** True Line Result angle_anchor_y: 0.5 ** Processing line: ~ }.sprite!~ - Inside source: true *** True Line Result }.sprite! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs label as primitive using a hash~ - Inside source: true *** True Line Result # Outputs label as primitive using a hash ** Processing line: ~ args.outputs.primitives << {~ - Inside source: true *** True Line Result args.outputs.primitives << { ** Processing line: ~ x: 200, # position~ - Inside source: true *** True Line Result x: 200, # position ** Processing line: ~ y: 200,~ - Inside source: true *** True Line Result y: 200, ** Processing line: ~ text: "dragonruby", # text~ - Inside source: true *** True Line Result text: "dragonruby", # text ** Processing line: ~ size: 2,~ - Inside source: true *** True Line Result size: 2, ** Processing line: ~ alignment: 1,~ - Inside source: true *** True Line Result alignment: 1, ** Processing line: ~ r: 155, # color saturation~ - Inside source: true *** True Line Result r: 155, # color saturation ** Processing line: ~ g: 50,~ - Inside source: true *** True Line Result g: 50, ** Processing line: ~ b: 50,~ - Inside source: true *** True Line Result b: 50, ** Processing line: ~ a: 255, # transparency~ - Inside source: true *** True Line Result a: 255, # transparency ** Processing line: ~ font: "fonts/manaspc.ttf" # font style~ - Inside source: true *** True Line Result font: "fonts/manaspc.ttf" # font style ** Processing line: ~ }.label!~ - Inside source: true *** True Line Result }.label! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs solid as primitive using a hash~ - Inside source: true *** True Line Result # Outputs solid as primitive using a hash ** Processing line: ~ args.outputs.primitives << {~ - Inside source: true *** True Line Result args.outputs.primitives << { ** Processing line: ~ x: 400, # position~ - Inside source: true *** True Line Result x: 400, # position ** Processing line: ~ y: 200,~ - Inside source: true *** True Line Result y: 200, ** Processing line: ~ w: 160, # size~ - Inside source: true *** True Line Result w: 160, # size ** Processing line: ~ h: 90,~ - Inside source: true *** True Line Result h: 90, ** Processing line: ~ r: 120, # color saturation~ - Inside source: true *** True Line Result r: 120, # color saturation ** Processing line: ~ g: 50,~ - Inside source: true *** True Line Result g: 50, ** Processing line: ~ b: 50,~ - Inside source: true *** True Line Result b: 50, ** Processing line: ~ a: 255 # transparency~ - Inside source: true *** True Line Result a: 255 # transparency ** Processing line: ~ }.solid!~ - Inside source: true *** True Line Result }.solid! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs border as primitive using a hash~ - Inside source: true *** True Line Result # Outputs border as primitive using a hash ** Processing line: ~ # Same parameters as solid~ - Inside source: true *** True Line Result # Same parameters as solid ** Processing line: ~ args.outputs.primitives << {~ - Inside source: true *** True Line Result args.outputs.primitives << { ** Processing line: ~ x: 600, # position~ - Inside source: true *** True Line Result x: 600, # position ** Processing line: ~ y: 200,~ - Inside source: true *** True Line Result y: 200, ** Processing line: ~ w: 160, # size~ - Inside source: true *** True Line Result w: 160, # size ** Processing line: ~ h: 90,~ - Inside source: true *** True Line Result h: 90, ** Processing line: ~ r: 120, # color saturation~ - Inside source: true *** True Line Result r: 120, # color saturation ** Processing line: ~ g: 50,~ - Inside source: true *** True Line Result g: 50, ** Processing line: ~ b: 50,~ - Inside source: true *** True Line Result b: 50, ** Processing line: ~ a: 255 # transparency~ - Inside source: true *** True Line Result a: 255 # transparency ** Processing line: ~ }.border!~ - Inside source: true *** True Line Result }.border! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs line as primitive using a hash~ - Inside source: true *** True Line Result # Outputs line as primitive using a hash ** Processing line: ~ args.outputs.primitives << {~ - Inside source: true *** True Line Result args.outputs.primitives << { ** Processing line: ~ x: 900, # starting position~ - Inside source: true *** True Line Result x: 900, # starting position ** Processing line: ~ y: 200,~ - Inside source: true *** True Line Result y: 200, ** Processing line: ~ x2: 1200, # ending position~ - Inside source: true *** True Line Result x2: 1200, # ending position ** Processing line: ~ y2: 200,~ - Inside source: true *** True Line Result y2: 200, ** Processing line: ~ r: 120, # color saturation~ - Inside source: true *** True Line Result r: 120, # color saturation ** Processing line: ~ g: 50,~ - Inside source: true *** True Line Result g: 50, ** Processing line: ~ b: 50,~ - Inside source: true *** True Line Result b: 50, ** Processing line: ~ a: 255 # transparency~ - Inside source: true *** True Line Result a: 255 # transparency ** Processing line: ~ }.line!~ - Inside source: true *** True Line Result }.line! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Rendering - Pixel Arrays - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Rendering - Pixel Arrays - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_rendering/06_pixel_arrays/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_rendering/06_pixel_arrays/app/main.rb ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.posinc ||= 1~ - Inside source: true *** True Line Result args.state.posinc ||= 1 ** Processing line: ~ args.state.pos ||= 0~ - Inside source: true *** True Line Result args.state.pos ||= 0 ** Processing line: ~ args.state.rotation ||= 0~ - Inside source: true *** True Line Result args.state.rotation ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ dimension = 10 # keep it small and let the GPU scale it when rendering the sprite.~ - Inside source: true *** True Line Result dimension = 10 # keep it small and let the GPU scale it when rendering the sprite. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Set up our "scanner" pixel array and fill it with black pixels.~ - Inside source: true *** True Line Result # Set up our "scanner" pixel array and fill it with black pixels. ** Processing line: ~ args.pixel_array(:scanner).width = dimension~ - Inside source: true *** True Line Result args.pixel_array(:scanner).width = dimension ** Processing line: ~ args.pixel_array(:scanner).height = dimension~ - Inside source: true *** True Line Result args.pixel_array(:scanner).height = dimension ** Processing line: ~ args.pixel_array(:scanner).pixels.fill(0xFF000000, 0, dimension * dimension) # black, full alpha~ - Inside source: true *** True Line Result args.pixel_array(:scanner).pixels.fill(0xFF000000, 0, dimension * dimension) # black, full alpha ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draw a green line that bounces up and down the sprite.~ - Inside source: true *** True Line Result # Draw a green line that bounces up and down the sprite. ** Processing line: ~ args.pixel_array(:scanner).pixels.fill(0xFF00FF00, dimension * args.state.pos, dimension) # green, full alpha~ - Inside source: true *** True Line Result args.pixel_array(:scanner).pixels.fill(0xFF00FF00, dimension * args.state.pos, dimension) # green, full alpha ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adjust position for next frame.~ - Inside source: true *** True Line Result # Adjust position for next frame. ** Processing line: ~ args.state.pos += args.state.posinc~ - Inside source: true *** True Line Result args.state.pos += args.state.posinc ** Processing line: ~ if args.state.posinc > 0 && args.state.pos >= dimension~ - Inside source: true *** True Line Result if args.state.posinc > 0 && args.state.pos >= dimension ** Processing line: ~ args.state.posinc = -1~ - Inside source: true *** True Line Result args.state.posinc = -1 ** Processing line: ~ args.state.pos = dimension - 1~ - Inside source: true *** True Line Result args.state.pos = dimension - 1 ** Processing line: ~ elsif args.state.posinc < 0 && args.state.pos < 0~ - Inside source: true *** True Line Result elsif args.state.posinc < 0 && args.state.pos < 0 ** Processing line: ~ args.state.posinc = 1~ - Inside source: true *** True Line Result args.state.posinc = 1 ** Processing line: ~ args.state.pos = 1~ - Inside source: true *** True Line Result args.state.pos = 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # New/changed pixel arrays get uploaded to the GPU before we render~ - Inside source: true *** True Line Result # New/changed pixel arrays get uploaded to the GPU before we render ** Processing line: ~ # anything. At that point, they can be scaled, rotated, and otherwise~ - Inside source: true *** True Line Result # anything. At that point, they can be scaled, rotated, and otherwise ** Processing line: ~ # used like any other sprite.~ - Inside source: true *** True Line Result # used like any other sprite. ** Processing line: ~ w = 100~ - Inside source: true *** True Line Result w = 100 ** Processing line: ~ h = 100~ - Inside source: true *** True Line Result h = 100 ** Processing line: ~ x = (1280 - w) / 2~ - Inside source: true *** True Line Result x = (1280 - w) / 2 ** Processing line: ~ y = (720 - h) / 2~ - Inside source: true *** True Line Result y = (720 - h) / 2 ** Processing line: ~ args.outputs.background_color = [64, 0, 128]~ - Inside source: true *** True Line Result args.outputs.background_color = [64, 0, 128] ** Processing line: ~ args.outputs.primitives << [x, y, w, h, :scanner, args.state.rotation].sprite~ - Inside source: true *** True Line Result args.outputs.primitives << [x, y, w, h, :scanner, args.state.rotation].sprite ** Processing line: ~ args.state.rotation += 1~ - Inside source: true *** True Line Result args.state.rotation += 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ - Inside source: true *** True Line Result args.outputs.primitives << args.gtk.current_framerate_primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Rendering - Simple Camera - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Rendering - Simple Camera - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_rendering/07_simple_camera/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_rendering/07_simple_camera/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # variables you can play around with~ - Inside source: true *** True Line Result # variables you can play around with ** Processing line: ~ args.state.world.w ||= 1280~ - Inside source: true *** True Line Result args.state.world.w ||= 1280 ** Processing line: ~ args.state.world.h ||= 720~ - Inside source: true *** True Line Result args.state.world.h ||= 720 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.player.x ||= 0~ - Inside source: true *** True Line Result args.state.player.x ||= 0 ** Processing line: ~ args.state.player.y ||= 0~ - Inside source: true *** True Line Result args.state.player.y ||= 0 ** Processing line: ~ args.state.player.size ||= 32~ - Inside source: true *** True Line Result args.state.player.size ||= 32 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.enemy.x ||= 700~ - Inside source: true *** True Line Result args.state.enemy.x ||= 700 ** Processing line: ~ args.state.enemy.y ||= 700~ - Inside source: true *** True Line Result args.state.enemy.y ||= 700 ** Processing line: ~ args.state.enemy.size ||= 16~ - Inside source: true *** True Line Result args.state.enemy.size ||= 16 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.camera.x ||= 640~ - Inside source: true *** True Line Result args.state.camera.x ||= 640 ** Processing line: ~ args.state.camera.y ||= 300~ - Inside source: true *** True Line Result args.state.camera.y ||= 300 ** Processing line: ~ args.state.camera.scale ||= 1.0~ - Inside source: true *** True Line Result args.state.camera.scale ||= 1.0 ** Processing line: ~ args.state.camera.show_empty_space ||= :yes~ - Inside source: true *** True Line Result args.state.camera.show_empty_space ||= :yes ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # instructions~ - Inside source: true *** True Line Result # instructions ** Processing line: ~ args.outputs.primitives << { x: 0, y: 80.from_top, w: 360, h: 80, r: 0, g: 0, b: 0, a: 128 }.solid!~ - Inside source: true *** True Line Result args.outputs.primitives << { x: 0, y: 80.from_top, w: 360, h: 80, r: 0, g: 0, b: 0, a: 128 }.solid! ** Processing line: ~ args.outputs.primitives << { x: 10, y: 10.from_top, text: "arrow keys to move around", r: 255, g: 255, b: 255}.label!~ - Inside source: true *** True Line Result args.outputs.primitives << { x: 10, y: 10.from_top, text: "arrow keys to move around", r: 255, g: 255, b: 255}.label! ** Processing line: ~ args.outputs.primitives << { x: 10, y: 30.from_top, text: "+/- to change zoom of camera", r: 255, g: 255, b: 255}.label!~ - Inside source: true *** True Line Result args.outputs.primitives << { x: 10, y: 30.from_top, text: "+/- to change zoom of camera", r: 255, g: 255, b: 255}.label! ** Processing line: ~ args.outputs.primitives << { x: 10, y: 50.from_top, text: "tab to change camera edge behavior", r: 255, g: 255, b: 255}.label!~ - Inside source: true *** True Line Result args.outputs.primitives << { x: 10, y: 50.from_top, text: "tab to change camera edge behavior", r: 255, g: 255, b: 255}.label! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render scene~ - Inside source: true *** True Line Result # render scene ** Processing line: ~ args.outputs[:scene].w = args.state.world.w~ - Inside source: true *** True Line Result args.outputs[:scene].w = args.state.world.w ** Processing line: ~ args.outputs[:scene].h = args.state.world.h~ - Inside source: true *** True Line Result args.outputs[:scene].h = args.state.world.h ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs[:scene].solids << { x: 0, y: 0, w: args.state.world.w, h: args.state.world.h, r: 20, g: 60, b: 80 }~ - Inside source: true *** True Line Result args.outputs[:scene].solids << { x: 0, y: 0, w: args.state.world.w, h: args.state.world.h, r: 20, g: 60, b: 80 } ** Processing line: ~ args.outputs[:scene].solids << { x: args.state.player.x, y: args.state.player.y,~ - Inside source: true *** True Line Result args.outputs[:scene].solids << { x: args.state.player.x, y: args.state.player.y, ** Processing line: ~ w: args.state.player.size, h: args.state.player.size, r: 80, g: 155, b: 80 }~ - Inside source: true *** True Line Result w: args.state.player.size, h: args.state.player.size, r: 80, g: 155, b: 80 } ** Processing line: ~ args.outputs[:scene].solids << { x: args.state.enemy.x, y: args.state.enemy.y,~ - Inside source: true *** True Line Result args.outputs[:scene].solids << { x: args.state.enemy.x, y: args.state.enemy.y, ** Processing line: ~ w: args.state.enemy.size, h: args.state.enemy.size, r: 155, g: 80, b: 80 }~ - Inside source: true *** True Line Result w: args.state.enemy.size, h: args.state.enemy.size, r: 155, g: 80, b: 80 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render camera~ - Inside source: true *** True Line Result # render camera ** Processing line: ~ scene_position = calc_scene_position args~ - Inside source: true *** True Line Result scene_position = calc_scene_position args ** Processing line: ~ args.outputs.sprites << { x: scene_position.x,~ - Inside source: true *** True Line Result args.outputs.sprites << { x: scene_position.x, ** Processing line: ~ y: scene_position.y,~ - Inside source: true *** True Line Result y: scene_position.y, ** Processing line: ~ w: scene_position.w,~ - Inside source: true *** True Line Result w: scene_position.w, ** Processing line: ~ h: scene_position.h,~ - Inside source: true *** True Line Result h: scene_position.h, ** Processing line: ~ path: :scene }~ - Inside source: true *** True Line Result path: :scene } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # move player~ - Inside source: true *** True Line Result # move player ** Processing line: ~ if args.inputs.directional_angle~ - Inside source: true *** True Line Result if args.inputs.directional_angle ** Processing line: ~ args.state.player.x += args.inputs.directional_angle.vector_x * 5~ - Inside source: true *** True Line Result args.state.player.x += args.inputs.directional_angle.vector_x * 5 ** Processing line: ~ args.state.player.y += args.inputs.directional_angle.vector_y * 5~ - Inside source: true *** True Line Result args.state.player.y += args.inputs.directional_angle.vector_y * 5 ** Processing line: ~ args.state.player.x = args.state.player.x.clamp(0, args.state.world.w - args.state.player.size)~ - Inside source: true *** True Line Result args.state.player.x = args.state.player.x.clamp(0, args.state.world.w - args.state.player.size) ** Processing line: ~ args.state.player.y = args.state.player.y.clamp(0, args.state.world.h - args.state.player.size)~ - Inside source: true *** True Line Result args.state.player.y = args.state.player.y.clamp(0, args.state.world.h - args.state.player.size) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # +/- to zoom in and out~ - Inside source: true *** True Line Result # +/- to zoom in and out ** Processing line: ~ if args.inputs.keyboard.plus && args.state.tick_count.zmod?(3)~ - Inside source: true *** True Line Result if args.inputs.keyboard.plus && args.state.tick_count.zmod?(3) ** Processing line: ~ args.state.camera.scale += 0.05~ - Inside source: true *** True Line Result args.state.camera.scale += 0.05 ** Processing line: ~ elsif args.inputs.keyboard.hyphen && args.state.tick_count.zmod?(3)~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.hyphen && args.state.tick_count.zmod?(3) ** Processing line: ~ args.state.camera.scale -= 0.05~ - Inside source: true *** True Line Result args.state.camera.scale -= 0.05 ** Processing line: ~ elsif args.inputs.keyboard.key_down.tab~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.tab ** Processing line: ~ if args.state.camera.show_empty_space == :yes~ - Inside source: true *** True Line Result if args.state.camera.show_empty_space == :yes ** Processing line: ~ args.state.camera.show_empty_space = :no~ - Inside source: true *** True Line Result args.state.camera.show_empty_space = :no ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.camera.show_empty_space = :yes~ - Inside source: true *** True Line Result args.state.camera.show_empty_space = :yes ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.camera.scale = args.state.camera.scale.greater(0.1)~ - Inside source: true *** True Line Result args.state.camera.scale = args.state.camera.scale.greater(0.1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_scene_position args~ - Inside source: true *** True Line Result def calc_scene_position args ** Processing line: ~ result = { x: args.state.camera.x - (args.state.player.x * args.state.camera.scale),~ - Inside source: true *** True Line Result result = { x: args.state.camera.x - (args.state.player.x * args.state.camera.scale), ** Processing line: ~ y: args.state.camera.y - (args.state.player.y * args.state.camera.scale),~ - Inside source: true *** True Line Result y: args.state.camera.y - (args.state.player.y * args.state.camera.scale), ** Processing line: ~ w: args.state.world.w * args.state.camera.scale,~ - Inside source: true *** True Line Result w: args.state.world.w * args.state.camera.scale, ** Processing line: ~ h: args.state.world.h * args.state.camera.scale,~ - Inside source: true *** True Line Result h: args.state.world.h * args.state.camera.scale, ** Processing line: ~ scale: args.state.camera.scale }~ - Inside source: true *** True Line Result scale: args.state.camera.scale } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return result if args.state.camera.show_empty_space == :yes~ - Inside source: true *** True Line Result return result if args.state.camera.show_empty_space == :yes ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if result.w < args.grid.w~ - Inside source: true *** True Line Result if result.w < args.grid.w ** Processing line: ~ result.merge!(x: (args.grid.w - result.w).half)~ - Inside source: true *** True Line Result result.merge!(x: (args.grid.w - result.w).half) ** Processing line: ~ elsif (args.state.player.x * result.scale) < args.grid.w.half~ - Inside source: true *** True Line Result elsif (args.state.player.x * result.scale) < args.grid.w.half ** Processing line: ~ result.merge!(x: 10)~ - Inside source: true *** True Line Result result.merge!(x: 10) ** Processing line: ~ elsif (result.x + result.w) < args.grid.w~ - Inside source: true *** True Line Result elsif (result.x + result.w) < args.grid.w ** Processing line: ~ result.merge!(x: - result.w + (args.grid.w - 10))~ - Inside source: true *** True Line Result result.merge!(x: - result.w + (args.grid.w - 10)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if result.h < args.grid.h~ - Inside source: true *** True Line Result if result.h < args.grid.h ** Processing line: ~ result.merge!(y: (args.grid.h - result.h).half)~ - Inside source: true *** True Line Result result.merge!(y: (args.grid.h - result.h).half) ** Processing line: ~ elsif (result.y) > 10~ - Inside source: true *** True Line Result elsif (result.y) > 10 ** Processing line: ~ result.merge!(y: 10)~ - Inside source: true *** True Line Result result.merge!(y: 10) ** Processing line: ~ elsif (result.y + result.h) < args.grid.h~ - Inside source: true *** True Line Result elsif (result.y + result.h) < args.grid.h ** Processing line: ~ result.merge!(y: - result.h + (args.grid.h - 10))~ - Inside source: true *** True Line Result result.merge!(y: - result.h + (args.grid.h - 10)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result~ - Inside source: true *** True Line Result result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Rendering - Splitscreen Camera - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Rendering - Splitscreen Camera - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_rendering/08_splitscreen_camera/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_rendering/08_splitscreen_camera/app/main.rb ** Processing line: ~ class CameraMovement~ - Inside source: true *** True Line Result class CameraMovement ** Processing line: ~ attr_accessor :state, :inputs, :outputs, :grid~ - Inside source: true *** True Line Result attr_accessor :state, :inputs, :outputs, :grid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #==============================================================================================~ - Inside source: true *** True Line Result #============================================================================================== ** Processing line: ~ #Serialize~ - Inside source: true *** True Line Result #Serialize ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {state: state, inputs: inputs, outputs: outputs, grid: grid }~ - Inside source: true *** True Line Result {state: state, inputs: inputs, outputs: outputs, grid: grid } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inspect~ - Inside source: true *** True Line Result def inspect ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #==============================================================================================~ - Inside source: true *** True Line Result #============================================================================================== ** Processing line: ~ #Tick~ - Inside source: true *** True Line Result #Tick ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #==============================================================================================~ - Inside source: true *** True Line Result #============================================================================================== ** Processing line: ~ #Default functions~ - Inside source: true *** True Line Result #Default functions ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ outputs[:scene].background_color = [0,0,0]~ - Inside source: true *** True Line Result outputs[:scene].background_color = [0,0,0] ** Processing line: ~ state.trauma ||= 0.0~ - Inside source: true *** True Line Result state.trauma ||= 0.0 ** Processing line: ~ state.trauma_power ||= 2~ - Inside source: true *** True Line Result state.trauma_power ||= 2 ** Processing line: ~ state.player_cyan ||= new_player_cyan~ - Inside source: true *** True Line Result state.player_cyan ||= new_player_cyan ** Processing line: ~ state.player_magenta ||= new_player_magenta~ - Inside source: true *** True Line Result state.player_magenta ||= new_player_magenta ** Processing line: ~ state.camera_magenta ||= new_camera_magenta~ - Inside source: true *** True Line Result state.camera_magenta ||= new_camera_magenta ** Processing line: ~ state.camera_cyan ||= new_camera_cyan~ - Inside source: true *** True Line Result state.camera_cyan ||= new_camera_cyan ** Processing line: ~ state.camera_center ||= new_camera_center~ - Inside source: true *** True Line Result state.camera_center ||= new_camera_center ** Processing line: ~ state.room ||= new_room~ - Inside source: true *** True Line Result state.room ||= new_room ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def default_player x, y, w, h, sprite_path~ - Inside source: true *** True Line Result def default_player x, y, w, h, sprite_path ** Processing line: ~ state.new_entity(:player,~ - Inside source: true *** True Line Result state.new_entity(:player, ** Processing line: ~ { x: x,~ - Inside source: true *** True Line Result { x: x, ** Processing line: ~ y: y,~ - Inside source: true *** True Line Result y: y, ** Processing line: ~ dy: 0,~ - Inside source: true *** True Line Result dy: 0, ** Processing line: ~ dx: 0,~ - Inside source: true *** True Line Result dx: 0, ** Processing line: ~ w: w,~ - Inside source: true *** True Line Result w: w, ** Processing line: ~ h: h,~ - Inside source: true *** True Line Result h: h, ** Processing line: ~ damage: 0,~ - Inside source: true *** True Line Result damage: 0, ** Processing line: ~ dead: false,~ - Inside source: true *** True Line Result dead: false, ** Processing line: ~ orientation: "down",~ - Inside source: true *** True Line Result orientation: "down", ** Processing line: ~ max_alpha: 255,~ - Inside source: true *** True Line Result max_alpha: 255, ** Processing line: ~ sprite_path: sprite_path})~ - Inside source: true *** True Line Result sprite_path: sprite_path}) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def default_floor_tile x, y, w, h, sprite_path~ - Inside source: true *** True Line Result def default_floor_tile x, y, w, h, sprite_path ** Processing line: ~ state.new_entity(:room,~ - Inside source: true *** True Line Result state.new_entity(:room, ** Processing line: ~ { x: x,~ - Inside source: true *** True Line Result { x: x, ** Processing line: ~ y: y,~ - Inside source: true *** True Line Result y: y, ** Processing line: ~ w: w,~ - Inside source: true *** True Line Result w: w, ** Processing line: ~ h: h,~ - Inside source: true *** True Line Result h: h, ** Processing line: ~ sprite_path: sprite_path})~ - Inside source: true *** True Line Result sprite_path: sprite_path}) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def default_camera x, y, w, h~ - Inside source: true *** True Line Result def default_camera x, y, w, h ** Processing line: ~ state.new_entity(:camera,~ - Inside source: true *** True Line Result state.new_entity(:camera, ** Processing line: ~ { x: x,~ - Inside source: true *** True Line Result { x: x, ** Processing line: ~ y: y,~ - Inside source: true *** True Line Result y: y, ** Processing line: ~ dx: 0,~ - Inside source: true *** True Line Result dx: 0, ** Processing line: ~ dy: 0,~ - Inside source: true *** True Line Result dy: 0, ** Processing line: ~ w: w,~ - Inside source: true *** True Line Result w: w, ** Processing line: ~ h: h})~ - Inside source: true *** True Line Result h: h}) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_player_cyan~ - Inside source: true *** True Line Result def new_player_cyan ** Processing line: ~ default_player(0, 0, 64, 64,~ - Inside source: true *** True Line Result default_player(0, 0, 64, 64, ** Processing line: ~ "sprites/player/player_#{state.player_cyan.orientation}_standing.png")~ - Inside source: true *** True Line Result "sprites/player/player_#{state.player_cyan.orientation}_standing.png") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_player_magenta~ - Inside source: true *** True Line Result def new_player_magenta ** Processing line: ~ default_player(64, 0, 64, 64,~ - Inside source: true *** True Line Result default_player(64, 0, 64, 64, ** Processing line: ~ "sprites/player/player_#{state.player_magenta.orientation}_standing.png")~ - Inside source: true *** True Line Result "sprites/player/player_#{state.player_magenta.orientation}_standing.png") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_camera_magenta~ - Inside source: true *** True Line Result def new_camera_magenta ** Processing line: ~ default_camera(0,0,720,720)~ - Inside source: true *** True Line Result default_camera(0,0,720,720) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_camera_cyan~ - Inside source: true *** True Line Result def new_camera_cyan ** Processing line: ~ default_camera(0,0,720,720)~ - Inside source: true *** True Line Result default_camera(0,0,720,720) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_camera_center~ - Inside source: true *** True Line Result def new_camera_center ** Processing line: ~ default_camera(0,0,1280,720)~ - Inside source: true *** True Line Result default_camera(0,0,1280,720) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_room~ - Inside source: true *** True Line Result def new_room ** Processing line: ~ default_floor_tile(0,0,1024,1024,'sprites/rooms/camera_room.png')~ - Inside source: true *** True Line Result default_floor_tile(0,0,1024,1024,'sprites/rooms/camera_room.png') ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #==============================================================================================~ - Inside source: true *** True Line Result #============================================================================================== ** Processing line: ~ #Calculation functions~ - Inside source: true *** True Line Result #Calculation functions ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ calc_camera_magenta~ - Inside source: true *** True Line Result calc_camera_magenta ** Processing line: ~ calc_camera_cyan~ - Inside source: true *** True Line Result calc_camera_cyan ** Processing line: ~ calc_camera_center~ - Inside source: true *** True Line Result calc_camera_center ** Processing line: ~ calc_player_cyan~ - Inside source: true *** True Line Result calc_player_cyan ** Processing line: ~ calc_player_magenta~ - Inside source: true *** True Line Result calc_player_magenta ** Processing line: ~ calc_trauma_decay~ - Inside source: true *** True Line Result calc_trauma_decay ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def center_camera_tolerance~ - Inside source: true *** True Line Result def center_camera_tolerance ** Processing line: ~ return Math.sqrt(((state.player_magenta.x - state.player_cyan.x) ** 2) +~ - Inside source: true *** True Line Result return Math.sqrt(((state.player_magenta.x - state.player_cyan.x) ** 2) + ** Processing line: ~ ((state.player_magenta.y - state.player_cyan.y) ** 2)) > 640~ - Inside source: true *** True Line Result ((state.player_magenta.y - state.player_cyan.y) ** 2)) > 640 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_player_cyan~ - Inside source: true *** True Line Result def calc_player_cyan ** Processing line: ~ state.player_cyan.x += state.player_cyan.dx~ - Inside source: true *** True Line Result state.player_cyan.x += state.player_cyan.dx ** Processing line: ~ state.player_cyan.y += state.player_cyan.dy~ - Inside source: true *** True Line Result state.player_cyan.y += state.player_cyan.dy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_player_magenta~ - Inside source: true *** True Line Result def calc_player_magenta ** Processing line: ~ state.player_magenta.x += state.player_magenta.dx~ - Inside source: true *** True Line Result state.player_magenta.x += state.player_magenta.dx ** Processing line: ~ state.player_magenta.y += state.player_magenta.dy~ - Inside source: true *** True Line Result state.player_magenta.y += state.player_magenta.dy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_camera_center~ - Inside source: true *** True Line Result def calc_camera_center ** Processing line: ~ timeScale = 1~ - Inside source: true *** True Line Result timeScale = 1 ** Processing line: ~ midX = (state.player_magenta.x + state.player_cyan.x)/2~ - Inside source: true *** True Line Result midX = (state.player_magenta.x + state.player_cyan.x)/2 ** Processing line: ~ midY = (state.player_magenta.y + state.player_cyan.y)/2~ - Inside source: true *** True Line Result midY = (state.player_magenta.y + state.player_cyan.y)/2 ** Processing line: ~ targetX = midX - state.camera_center.w/2~ - Inside source: true *** True Line Result targetX = midX - state.camera_center.w/2 ** Processing line: ~ targetY = midY - state.camera_center.h/2~ - Inside source: true *** True Line Result targetY = midY - state.camera_center.h/2 ** Processing line: ~ state.camera_center.x += (targetX - state.camera_center.x) * 0.1 * timeScale~ - Inside source: true *** True Line Result state.camera_center.x += (targetX - state.camera_center.x) * 0.1 * timeScale ** Processing line: ~ state.camera_center.y += (targetY - state.camera_center.y) * 0.1 * timeScale~ - Inside source: true *** True Line Result state.camera_center.y += (targetY - state.camera_center.y) * 0.1 * timeScale ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_camera_magenta~ - Inside source: true *** True Line Result def calc_camera_magenta ** Processing line: ~ timeScale = 1~ - Inside source: true *** True Line Result timeScale = 1 ** Processing line: ~ targetX = state.player_magenta.x + state.player_magenta.w - state.camera_magenta.w/2~ - Inside source: true *** True Line Result targetX = state.player_magenta.x + state.player_magenta.w - state.camera_magenta.w/2 ** Processing line: ~ targetY = state.player_magenta.y + state.player_magenta.h - state.camera_magenta.h/2~ - Inside source: true *** True Line Result targetY = state.player_magenta.y + state.player_magenta.h - state.camera_magenta.h/2 ** Processing line: ~ state.camera_magenta.x += (targetX - state.camera_magenta.x) * 0.1 * timeScale~ - Inside source: true *** True Line Result state.camera_magenta.x += (targetX - state.camera_magenta.x) * 0.1 * timeScale ** Processing line: ~ state.camera_magenta.y += (targetY - state.camera_magenta.y) * 0.1 * timeScale~ - Inside source: true *** True Line Result state.camera_magenta.y += (targetY - state.camera_magenta.y) * 0.1 * timeScale ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_camera_cyan~ - Inside source: true *** True Line Result def calc_camera_cyan ** Processing line: ~ timeScale = 1~ - Inside source: true *** True Line Result timeScale = 1 ** Processing line: ~ targetX = state.player_cyan.x + state.player_cyan.w - state.camera_cyan.w/2~ - Inside source: true *** True Line Result targetX = state.player_cyan.x + state.player_cyan.w - state.camera_cyan.w/2 ** Processing line: ~ targetY = state.player_cyan.y + state.player_cyan.h - state.camera_cyan.h/2~ - Inside source: true *** True Line Result targetY = state.player_cyan.y + state.player_cyan.h - state.camera_cyan.h/2 ** Processing line: ~ state.camera_cyan.x += (targetX - state.camera_cyan.x) * 0.1 * timeScale~ - Inside source: true *** True Line Result state.camera_cyan.x += (targetX - state.camera_cyan.x) * 0.1 * timeScale ** Processing line: ~ state.camera_cyan.y += (targetY - state.camera_cyan.y) * 0.1 * timeScale~ - Inside source: true *** True Line Result state.camera_cyan.y += (targetY - state.camera_cyan.y) * 0.1 * timeScale ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_player_quadrant angle~ - Inside source: true *** True Line Result def calc_player_quadrant angle ** Processing line: ~ if angle < 45 and angle > -45 and state.player_cyan.x < state.player_magenta.x~ - Inside source: true *** True Line Result if angle < 45 and angle > -45 and state.player_cyan.x < state.player_magenta.x ** Processing line: ~ return 1~ - Inside source: true *** True Line Result return 1 ** Processing line: ~ elsif angle < 45 and angle > -45 and state.player_cyan.x > state.player_magenta.x~ - Inside source: true *** True Line Result elsif angle < 45 and angle > -45 and state.player_cyan.x > state.player_magenta.x ** Processing line: ~ return 3~ - Inside source: true *** True Line Result return 3 ** Processing line: ~ elsif (angle > 45 or angle < -45) and state.player_cyan.y < state.player_magenta.y~ - Inside source: true *** True Line Result elsif (angle > 45 or angle < -45) and state.player_cyan.y < state.player_magenta.y ** Processing line: ~ return 2~ - Inside source: true *** True Line Result return 2 ** Processing line: ~ elsif (angle > 45 or angle < -45) and state.player_cyan.y > state.player_magenta.y~ - Inside source: true *** True Line Result elsif (angle > 45 or angle < -45) and state.player_cyan.y > state.player_magenta.y ** Processing line: ~ return 4~ - Inside source: true *** True Line Result return 4 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_camera_shake~ - Inside source: true *** True Line Result def calc_camera_shake ** Processing line: ~ state.trauma~ - Inside source: true *** True Line Result state.trauma ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_trauma_decay~ - Inside source: true *** True Line Result def calc_trauma_decay ** Processing line: ~ state.trauma = state.trauma * 0.9~ - Inside source: true *** True Line Result state.trauma = state.trauma * 0.9 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_random_float_range(min, max)~ - Inside source: true *** True Line Result def calc_random_float_range(min, max) ** Processing line: ~ rand * (max-min) + min~ - Inside source: true *** True Line Result rand * (max-min) + min ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #==============================================================================================~ - Inside source: true *** True Line Result #============================================================================================== ** Processing line: ~ #Render Functions~ - Inside source: true *** True Line Result #Render Functions ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ render_floor~ - Inside source: true *** True Line Result render_floor ** Processing line: ~ render_player_cyan~ - Inside source: true *** True Line Result render_player_cyan ** Processing line: ~ render_player_magenta~ - Inside source: true *** True Line Result render_player_magenta ** Processing line: ~ if center_camera_tolerance~ - Inside source: true *** True Line Result if center_camera_tolerance ** Processing line: ~ render_split_camera_scene~ - Inside source: true *** True Line Result render_split_camera_scene ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ render_camera_center_scene~ - Inside source: true *** True Line Result render_camera_center_scene ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_player_cyan~ - Inside source: true *** True Line Result def render_player_cyan ** Processing line: ~ outputs[:scene].sprites << {x: state.player_cyan.x,~ - Inside source: true *** True Line Result outputs[:scene].sprites << {x: state.player_cyan.x, ** Processing line: ~ y: state.player_cyan.y,~ - Inside source: true *** True Line Result y: state.player_cyan.y, ** Processing line: ~ w: state.player_cyan.w,~ - Inside source: true *** True Line Result w: state.player_cyan.w, ** Processing line: ~ h: state.player_cyan.h,~ - Inside source: true *** True Line Result h: state.player_cyan.h, ** Processing line: ~ path: "sprites/player/player_#{state.player_cyan.orientation}_standing.png",~ - Inside source: true *** True Line Result path: "sprites/player/player_#{state.player_cyan.orientation}_standing.png", ** Processing line: ~ r: 0,~ - Inside source: true *** True Line Result r: 0, ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 255}~ - Inside source: true *** True Line Result b: 255} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_player_magenta~ - Inside source: true *** True Line Result def render_player_magenta ** Processing line: ~ outputs[:scene].sprites << {x: state.player_magenta.x,~ - Inside source: true *** True Line Result outputs[:scene].sprites << {x: state.player_magenta.x, ** Processing line: ~ y: state.player_magenta.y,~ - Inside source: true *** True Line Result y: state.player_magenta.y, ** Processing line: ~ w: state.player_magenta.w,~ - Inside source: true *** True Line Result w: state.player_magenta.w, ** Processing line: ~ h: state.player_magenta.h,~ - Inside source: true *** True Line Result h: state.player_magenta.h, ** Processing line: ~ path: "sprites/player/player_#{state.player_magenta.orientation}_standing.png",~ - Inside source: true *** True Line Result path: "sprites/player/player_#{state.player_magenta.orientation}_standing.png", ** Processing line: ~ r: 255,~ - Inside source: true *** True Line Result r: 255, ** Processing line: ~ g: 0,~ - Inside source: true *** True Line Result g: 0, ** Processing line: ~ b: 255}~ - Inside source: true *** True Line Result b: 255} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_floor~ - Inside source: true *** True Line Result def render_floor ** Processing line: ~ outputs[:scene].sprites << [state.room.x, state.room.y,~ - Inside source: true *** True Line Result outputs[:scene].sprites << [state.room.x, state.room.y, ** Processing line: ~ state.room.w, state.room.h,~ - Inside source: true *** True Line Result state.room.w, state.room.h, ** Processing line: ~ state.room.sprite_path]~ - Inside source: true *** True Line Result state.room.sprite_path] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_camera_center_scene~ - Inside source: true *** True Line Result def render_camera_center_scene ** Processing line: ~ zoomFactor = 1~ - Inside source: true *** True Line Result zoomFactor = 1 ** Processing line: ~ outputs[:scene].width = state.room.w~ - Inside source: true *** True Line Result outputs[:scene].width = state.room.w ** Processing line: ~ outputs[:scene].height = state.room.h~ - Inside source: true *** True Line Result outputs[:scene].height = state.room.h ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ maxAngle = 10.0~ - Inside source: true *** True Line Result maxAngle = 10.0 ** Processing line: ~ maxOffset = 20.0~ - Inside source: true *** True Line Result maxOffset = 20.0 ** Processing line: ~ angle = maxAngle * calc_camera_shake * calc_random_float_range(-1,1)~ - Inside source: true *** True Line Result angle = maxAngle * calc_camera_shake * calc_random_float_range(-1,1) ** Processing line: ~ offsetX = 32 - (maxOffset * calc_camera_shake * calc_random_float_range(-1,1))~ - Inside source: true *** True Line Result offsetX = 32 - (maxOffset * calc_camera_shake * calc_random_float_range(-1,1)) ** Processing line: ~ offsetY = 32 - (maxOffset * calc_camera_shake * calc_random_float_range(-1,1))~ - Inside source: true *** True Line Result offsetY = 32 - (maxOffset * calc_camera_shake * calc_random_float_range(-1,1)) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.sprites << {x: (-state.camera_center.x - offsetX)/zoomFactor,~ - Inside source: true *** True Line Result outputs.sprites << {x: (-state.camera_center.x - offsetX)/zoomFactor, ** Processing line: ~ y: (-state.camera_center.y - offsetY)/zoomFactor,~ - Inside source: true *** True Line Result y: (-state.camera_center.y - offsetY)/zoomFactor, ** Processing line: ~ w: outputs[:scene].width/zoomFactor,~ - Inside source: true *** True Line Result w: outputs[:scene].width/zoomFactor, ** Processing line: ~ h: outputs[:scene].height/zoomFactor,~ - Inside source: true *** True Line Result h: outputs[:scene].height/zoomFactor, ** Processing line: ~ path: :scene,~ - Inside source: true *** True Line Result path: :scene, ** Processing line: ~ angle: angle,~ - Inside source: true *** True Line Result angle: angle, ** Processing line: ~ source_w: -1,~ - Inside source: true *** True Line Result source_w: -1, ** Processing line: ~ source_h: -1}~ - Inside source: true *** True Line Result source_h: -1} ** Processing line: ~ outputs.labels << [128,64,"#{state.trauma.round(1)}",8,2,255,0,255,255]~ - Inside source: true *** True Line Result outputs.labels << [128,64,"#{state.trauma.round(1)}",8,2,255,0,255,255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_split_camera_scene~ - Inside source: true *** True Line Result def render_split_camera_scene ** Processing line: ~ outputs[:scene].width = state.room.w~ - Inside source: true *** True Line Result outputs[:scene].width = state.room.w ** Processing line: ~ outputs[:scene].height = state.room.h~ - Inside source: true *** True Line Result outputs[:scene].height = state.room.h ** Processing line: ~ render_camera_magenta_scene~ - Inside source: true *** True Line Result render_camera_magenta_scene ** Processing line: ~ render_camera_cyan_scene~ - Inside source: true *** True Line Result render_camera_cyan_scene ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ angle = Math.atan((state.player_magenta.y - state.player_cyan.y)/(state.player_magenta.x- state.player_cyan.x)) * 180/Math::PI~ - Inside source: true *** True Line Result angle = Math.atan((state.player_magenta.y - state.player_cyan.y)/(state.player_magenta.x- state.player_cyan.x)) * 180/Math::PI ** Processing line: ~ output_split_camera angle~ - Inside source: true *** True Line Result output_split_camera angle ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_camera_magenta_scene~ - Inside source: true *** True Line Result def render_camera_magenta_scene ** Processing line: ~ zoomFactor = 1~ - Inside source: true *** True Line Result zoomFactor = 1 ** Processing line: ~ offsetX = 32~ - Inside source: true *** True Line Result offsetX = 32 ** Processing line: ~ offsetY = 32~ - Inside source: true *** True Line Result offsetY = 32 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs[:scene_magenta].sprites << {x: (-state.camera_magenta.x*2),~ - Inside source: true *** True Line Result outputs[:scene_magenta].sprites << {x: (-state.camera_magenta.x*2), ** Processing line: ~ y: (-state.camera_magenta.y),~ - Inside source: true *** True Line Result y: (-state.camera_magenta.y), ** Processing line: ~ w: outputs[:scene].width*2,~ - Inside source: true *** True Line Result w: outputs[:scene].width*2, ** Processing line: ~ h: outputs[:scene].height,~ - Inside source: true *** True Line Result h: outputs[:scene].height, ** Processing line: ~ path: :scene}~ - Inside source: true *** True Line Result path: :scene} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_camera_cyan_scene~ - Inside source: true *** True Line Result def render_camera_cyan_scene ** Processing line: ~ zoomFactor = 1~ - Inside source: true *** True Line Result zoomFactor = 1 ** Processing line: ~ offsetX = 32~ - Inside source: true *** True Line Result offsetX = 32 ** Processing line: ~ offsetY = 32~ - Inside source: true *** True Line Result offsetY = 32 ** Processing line: ~ outputs[:scene_cyan].sprites << {x: (-state.camera_cyan.x*2),~ - Inside source: true *** True Line Result outputs[:scene_cyan].sprites << {x: (-state.camera_cyan.x*2), ** Processing line: ~ y: (-state.camera_cyan.y),~ - Inside source: true *** True Line Result y: (-state.camera_cyan.y), ** Processing line: ~ w: outputs[:scene].width*2,~ - Inside source: true *** True Line Result w: outputs[:scene].width*2, ** Processing line: ~ h: outputs[:scene].height,~ - Inside source: true *** True Line Result h: outputs[:scene].height, ** Processing line: ~ path: :scene}~ - Inside source: true *** True Line Result path: :scene} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def output_split_camera angle~ - Inside source: true *** True Line Result def output_split_camera angle ** Processing line: ~ #TODO: Clean this up!~ - Inside source: true *** True Line Result #TODO: Clean this up! ** Processing line: ~ quadrant = calc_player_quadrant angle~ - Inside source: true *** True Line Result quadrant = calc_player_quadrant angle ** Processing line: ~ outputs.labels << [128,64,"#{quadrant}",8,2,255,0,255,255]~ - Inside source: true *** True Line Result outputs.labels << [128,64,"#{quadrant}",8,2,255,0,255,255] ** Processing line: ~ if quadrant == 1~ - Inside source: true *** True Line Result if quadrant == 1 ** Processing line: ~ set_camera_attributes(w: 640, h: 720, m_x: 640, m_y: 0, c_x: 0, c_y: 0)~ - Inside source: true *** True Line Result set_camera_attributes(w: 640, h: 720, m_x: 640, m_y: 0, c_x: 0, c_y: 0) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ elsif quadrant == 2~ - Inside source: true *** True Line Result elsif quadrant == 2 ** Processing line: ~ set_camera_attributes(w: 1280, h: 360, m_x: 0, m_y: 360, c_x: 0, c_y: 0)~ - Inside source: true *** True Line Result set_camera_attributes(w: 1280, h: 360, m_x: 0, m_y: 360, c_x: 0, c_y: 0) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ elsif quadrant == 3~ - Inside source: true *** True Line Result elsif quadrant == 3 ** Processing line: ~ set_camera_attributes(w: 640, h: 720, m_x: 0, m_y: 0, c_x: 640, c_y: 0)~ - Inside source: true *** True Line Result set_camera_attributes(w: 640, h: 720, m_x: 0, m_y: 0, c_x: 640, c_y: 0) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ elsif quadrant == 4~ - Inside source: true *** True Line Result elsif quadrant == 4 ** Processing line: ~ set_camera_attributes(w: 1280, h: 360, m_x: 0, m_y: 0, c_x: 0, c_y: 360)~ - Inside source: true *** True Line Result set_camera_attributes(w: 1280, h: 360, m_x: 0, m_y: 0, c_x: 0, c_y: 360) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_camera_attributes(w: 0, h: 0, m_x: 0, m_y: 0, c_x: 0, c_y: 0)~ - Inside source: true *** True Line Result def set_camera_attributes(w: 0, h: 0, m_x: 0, m_y: 0, c_x: 0, c_y: 0) ** Processing line: ~ state.camera_cyan.w = w + 64~ - Inside source: true *** True Line Result state.camera_cyan.w = w + 64 ** Processing line: ~ state.camera_cyan.h = h + 64~ - Inside source: true *** True Line Result state.camera_cyan.h = h + 64 ** Processing line: ~ outputs[:scene_cyan].width = (w) * 2~ - Inside source: true *** True Line Result outputs[:scene_cyan].width = (w) * 2 ** Processing line: ~ outputs[:scene_cyan].height = h~ - Inside source: true *** True Line Result outputs[:scene_cyan].height = h ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.camera_magenta.w = w + 64~ - Inside source: true *** True Line Result state.camera_magenta.w = w + 64 ** Processing line: ~ state.camera_magenta.h = h + 64~ - Inside source: true *** True Line Result state.camera_magenta.h = h + 64 ** Processing line: ~ outputs[:scene_magenta].width = (w) * 2~ - Inside source: true *** True Line Result outputs[:scene_magenta].width = (w) * 2 ** Processing line: ~ outputs[:scene_magenta].height = h~ - Inside source: true *** True Line Result outputs[:scene_magenta].height = h ** Processing line: ~ outputs.sprites << {x: m_x,~ - Inside source: true *** True Line Result outputs.sprites << {x: m_x, ** Processing line: ~ y: m_y,~ - Inside source: true *** True Line Result y: m_y, ** Processing line: ~ w: w,~ - Inside source: true *** True Line Result w: w, ** Processing line: ~ h: h,~ - Inside source: true *** True Line Result h: h, ** Processing line: ~ path: :scene_magenta}~ - Inside source: true *** True Line Result path: :scene_magenta} ** Processing line: ~ outputs.sprites << {x: c_x,~ - Inside source: true *** True Line Result outputs.sprites << {x: c_x, ** Processing line: ~ y: c_y,~ - Inside source: true *** True Line Result y: c_y, ** Processing line: ~ w: w,~ - Inside source: true *** True Line Result w: w, ** Processing line: ~ h: h,~ - Inside source: true *** True Line Result h: h, ** Processing line: ~ path: :scene_cyan}~ - Inside source: true *** True Line Result path: :scene_cyan} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def add_trauma amount~ - Inside source: true *** True Line Result def add_trauma amount ** Processing line: ~ state.trauma = [state.trauma + amount, 1.0].min~ - Inside source: true *** True Line Result state.trauma = [state.trauma + amount, 1.0].min ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def remove_trauma amount~ - Inside source: true *** True Line Result def remove_trauma amount ** Processing line: ~ state.trauma = [state.trauma - amount, 0.0].max~ - Inside source: true *** True Line Result state.trauma = [state.trauma - amount, 0.0].max ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ #==============================================================================================~ - Inside source: true *** True Line Result #============================================================================================== ** Processing line: ~ #Input functions~ - Inside source: true *** True Line Result #Input functions ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ input_move_cyan~ - Inside source: true *** True Line Result input_move_cyan ** Processing line: ~ input_move_magenta~ - Inside source: true *** True Line Result input_move_magenta ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.key_down.t~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.t ** Processing line: ~ add_trauma(0.5)~ - Inside source: true *** True Line Result add_trauma(0.5) ** Processing line: ~ elsif inputs.keyboard.key_down.y~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_down.y ** Processing line: ~ remove_trauma(0.1)~ - Inside source: true *** True Line Result remove_trauma(0.1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_move_cyan~ - Inside source: true *** True Line Result def input_move_cyan ** Processing line: ~ if inputs.keyboard.key_held.up~ - Inside source: true *** True Line Result if inputs.keyboard.key_held.up ** Processing line: ~ state.player_cyan.dy = 5~ - Inside source: true *** True Line Result state.player_cyan.dy = 5 ** Processing line: ~ state.player_cyan.orientation = "up"~ - Inside source: true *** True Line Result state.player_cyan.orientation = "up" ** Processing line: ~ elsif inputs.keyboard.key_held.down~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_held.down ** Processing line: ~ state.player_cyan.dy = -5~ - Inside source: true *** True Line Result state.player_cyan.dy = -5 ** Processing line: ~ state.player_cyan.orientation = "down"~ - Inside source: true *** True Line Result state.player_cyan.orientation = "down" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.player_cyan.dy *= 0.8~ - Inside source: true *** True Line Result state.player_cyan.dy *= 0.8 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if inputs.keyboard.key_held.left~ - Inside source: true *** True Line Result if inputs.keyboard.key_held.left ** Processing line: ~ state.player_cyan.dx = -5~ - Inside source: true *** True Line Result state.player_cyan.dx = -5 ** Processing line: ~ state.player_cyan.orientation = "left"~ - Inside source: true *** True Line Result state.player_cyan.orientation = "left" ** Processing line: ~ elsif inputs.keyboard.key_held.right~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_held.right ** Processing line: ~ state.player_cyan.dx = 5~ - Inside source: true *** True Line Result state.player_cyan.dx = 5 ** Processing line: ~ state.player_cyan.orientation = "right"~ - Inside source: true *** True Line Result state.player_cyan.orientation = "right" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.player_cyan.dx *= 0.8~ - Inside source: true *** True Line Result state.player_cyan.dx *= 0.8 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [128,512,"#{state.player_cyan.x.round()}",8,2,0,255,255,255]~ - Inside source: true *** True Line Result outputs.labels << [128,512,"#{state.player_cyan.x.round()}",8,2,0,255,255,255] ** Processing line: ~ outputs.labels << [128,480,"#{state.player_cyan.y.round()}",8,2,0,255,255,255]~ - Inside source: true *** True Line Result outputs.labels << [128,480,"#{state.player_cyan.y.round()}",8,2,0,255,255,255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_move_magenta~ - Inside source: true *** True Line Result def input_move_magenta ** Processing line: ~ if inputs.keyboard.key_held.w~ - Inside source: true *** True Line Result if inputs.keyboard.key_held.w ** Processing line: ~ state.player_magenta.dy = 5~ - Inside source: true *** True Line Result state.player_magenta.dy = 5 ** Processing line: ~ state.player_magenta.orientation = "up"~ - Inside source: true *** True Line Result state.player_magenta.orientation = "up" ** Processing line: ~ elsif inputs.keyboard.key_held.s~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_held.s ** Processing line: ~ state.player_magenta.dy = -5~ - Inside source: true *** True Line Result state.player_magenta.dy = -5 ** Processing line: ~ state.player_magenta.orientation = "down"~ - Inside source: true *** True Line Result state.player_magenta.orientation = "down" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.player_magenta.dy *= 0.8~ - Inside source: true *** True Line Result state.player_magenta.dy *= 0.8 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if inputs.keyboard.key_held.a~ - Inside source: true *** True Line Result if inputs.keyboard.key_held.a ** Processing line: ~ state.player_magenta.dx = -5~ - Inside source: true *** True Line Result state.player_magenta.dx = -5 ** Processing line: ~ state.player_magenta.orientation = "left"~ - Inside source: true *** True Line Result state.player_magenta.orientation = "left" ** Processing line: ~ elsif inputs.keyboard.key_held.d~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_held.d ** Processing line: ~ state.player_magenta.dx = 5~ - Inside source: true *** True Line Result state.player_magenta.dx = 5 ** Processing line: ~ state.player_magenta.orientation = "right"~ - Inside source: true *** True Line Result state.player_magenta.orientation = "right" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.player_magenta.dx *= 0.8~ - Inside source: true *** True Line Result state.player_magenta.dx *= 0.8 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [128,360,"#{state.player_magenta.x.round()}",8,2,255,0,255,255]~ - Inside source: true *** True Line Result outputs.labels << [128,360,"#{state.player_magenta.x.round()}",8,2,255,0,255,255] ** Processing line: ~ outputs.labels << [128,328,"#{state.player_magenta.y.round()}",8,2,255,0,255,255]~ - Inside source: true *** True Line Result outputs.labels << [128,328,"#{state.player_magenta.y.round()}",8,2,255,0,255,255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $camera_movement = CameraMovement.new~ - Inside source: true *** True Line Result $camera_movement = CameraMovement.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.background_color = [0,0,0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0,0,0] ** Processing line: ~ $camera_movement.inputs = args.inputs~ - Inside source: true *** True Line Result $camera_movement.inputs = args.inputs ** Processing line: ~ $camera_movement.outputs = args.outputs~ - Inside source: true *** True Line Result $camera_movement.outputs = args.outputs ** Processing line: ~ $camera_movement.state = args.state~ - Inside source: true *** True Line Result $camera_movement.state = args.state ** Processing line: ~ $camera_movement.grid = args.grid~ - Inside source: true *** True Line Result $camera_movement.grid = args.grid ** Processing line: ~ $camera_movement.tick~ - Inside source: true *** True Line Result $camera_movement.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Rendering - Z Targeting Camera - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Rendering - Z Targeting Camera - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_rendering/09_z_targeting_camera/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_rendering/09_z_targeting_camera/app/main.rb ** Processing line: ~ class Game~ - Inside source: true *** True Line Result class Game ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ outputs.background_color = [219, 208, 191]~ - Inside source: true *** True Line Result outputs.background_color = [219, 208, 191] ** Processing line: ~ player.x ||= 634~ - Inside source: true *** True Line Result player.x ||= 634 ** Processing line: ~ player.y ||= 153~ - Inside source: true *** True Line Result player.y ||= 153 ** Processing line: ~ player.angle ||= 90~ - Inside source: true *** True Line Result player.angle ||= 90 ** Processing line: ~ player.distance ||= arena_radius~ - Inside source: true *** True Line Result player.distance ||= arena_radius ** Processing line: ~ target.x ||= 634~ - Inside source: true *** True Line Result target.x ||= 634 ** Processing line: ~ target.y ||= 359~ - Inside source: true *** True Line Result target.y ||= 359 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ outputs[:scene].sprites << ([0, 0, 933, 700, 'sprites/arena.png'].center_inside_rect grid.rect)~ - Inside source: true *** True Line Result outputs[:scene].sprites << ([0, 0, 933, 700, 'sprites/arena.png'].center_inside_rect grid.rect) ** Processing line: ~ outputs[:scene].sprites << target_sprite~ - Inside source: true *** True Line Result outputs[:scene].sprites << target_sprite ** Processing line: ~ outputs[:scene].sprites << player_sprite~ - Inside source: true *** True Line Result outputs[:scene].sprites << player_sprite ** Processing line: ~ outputs.sprites << scene~ - Inside source: true *** True Line Result outputs.sprites << scene ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def target_sprite~ - Inside source: true *** True Line Result def target_sprite ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: target.x, y: target.y,~ - Inside source: true *** True Line Result x: target.x, y: target.y, ** Processing line: ~ w: 10, h: 10,~ - Inside source: true *** True Line Result w: 10, h: 10, ** Processing line: ~ path: 'sprites/square/black.png'~ - Inside source: true *** True Line Result path: 'sprites/square/black.png' ** Processing line: ~ }.anchor_rect 0.5, 0.5~ - Inside source: true *** True Line Result }.anchor_rect 0.5, 0.5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ if inputs.up && player.distance > 30~ - Inside source: true *** True Line Result if inputs.up && player.distance > 30 ** Processing line: ~ player.distance -= 2~ - Inside source: true *** True Line Result player.distance -= 2 ** Processing line: ~ elsif inputs.down && player.distance < 200~ - Inside source: true *** True Line Result elsif inputs.down && player.distance < 200 ** Processing line: ~ player.distance += 2~ - Inside source: true *** True Line Result player.distance += 2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ player.angle += inputs.left_right * -1~ - Inside source: true *** True Line Result player.angle += inputs.left_right * -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ player.x = target.x + ((player.angle * 1).vector_x player.distance)~ - Inside source: true *** True Line Result player.x = target.x + ((player.angle * 1).vector_x player.distance) ** Processing line: ~ player.y = target.y + ((player.angle * -1).vector_y player.distance)~ - Inside source: true *** True Line Result player.y = target.y + ((player.angle * -1).vector_y player.distance) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_sprite~ - Inside source: true *** True Line Result def player_sprite ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: player.x,~ - Inside source: true *** True Line Result x: player.x, ** Processing line: ~ y: player.y,~ - Inside source: true *** True Line Result y: player.y, ** Processing line: ~ w: 50,~ - Inside source: true *** True Line Result w: 50, ** Processing line: ~ h: 100,~ - Inside source: true *** True Line Result h: 100, ** Processing line: ~ path: 'sprites/player.png',~ - Inside source: true *** True Line Result path: 'sprites/player.png', ** Processing line: ~ angle: (player.angle * -1) + 90~ - Inside source: true *** True Line Result angle: (player.angle * -1) + 90 ** Processing line: ~ }.anchor_rect 0.5, 0~ - Inside source: true *** True Line Result }.anchor_rect 0.5, 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def center_map~ - Inside source: true *** True Line Result def center_map ** Processing line: ~ { x: 634, y: 359 }~ - Inside source: true *** True Line Result { x: 634, y: 359 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def zoom_factor_single~ - Inside source: true *** True Line Result def zoom_factor_single ** Processing line: ~ 2 - ((args.geometry.distance player, center_map).fdiv arena_radius)~ - Inside source: true *** True Line Result 2 - ((args.geometry.distance player, center_map).fdiv arena_radius) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def zoom_factor~ - Inside source: true *** True Line Result def zoom_factor ** Processing line: ~ zoom_factor_single ** 2~ - Inside source: true *** True Line Result zoom_factor_single ** 2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def arena_radius~ - Inside source: true *** True Line Result def arena_radius ** Processing line: ~ 206~ - Inside source: true *** True Line Result 206 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def scene~ - Inside source: true *** True Line Result def scene ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: (640 - player.x) + (640 - (640 * zoom_factor)),~ - Inside source: true *** True Line Result x: (640 - player.x) + (640 - (640 * zoom_factor)), ** Processing line: ~ y: (360 - player.y - (75 * zoom_factor)) + (320 - (320 * zoom_factor)),~ - Inside source: true *** True Line Result y: (360 - player.y - (75 * zoom_factor)) + (320 - (320 * zoom_factor)), ** Processing line: ~ w: 1280 * zoom_factor,~ - Inside source: true *** True Line Result w: 1280 * zoom_factor, ** Processing line: ~ h: 720 * zoom_factor,~ - Inside source: true *** True Line Result h: 720 * zoom_factor, ** Processing line: ~ path: :scene,~ - Inside source: true *** True Line Result path: :scene, ** Processing line: ~ angle: player.angle - 90,~ - Inside source: true *** True Line Result angle: player.angle - 90, ** Processing line: ~ angle_anchor_x: (player.x.fdiv 1280),~ - Inside source: true *** True Line Result angle_anchor_x: (player.x.fdiv 1280), ** Processing line: ~ angle_anchor_y: (player.y.fdiv 720)~ - Inside source: true *** True Line Result angle_anchor_y: (player.y.fdiv 720) ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player~ - Inside source: true *** True Line Result def player ** Processing line: ~ state.player~ - Inside source: true *** True Line Result state.player ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def target~ - Inside source: true *** True Line Result def target ** Processing line: ~ state.target~ - Inside source: true *** True Line Result state.target ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $game ||= Game.new~ - Inside source: true *** True Line Result $game ||= Game.new ** Processing line: ~ $game.args = args~ - Inside source: true *** True Line Result $game.args = args ** Processing line: ~ $game.tick~ - Inside source: true *** True Line Result $game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Rendering - Blend Modes - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Rendering - Blend Modes - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_rendering/10_blend_modes/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_rendering/10_blend_modes/app/main.rb ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw_blendmode args, mode~ - Inside source: true *** True Line Result def draw_blendmode args, mode ** Processing line: ~ w = 160~ - Inside source: true *** True Line Result w = 160 ** Processing line: ~ h = w~ - Inside source: true *** True Line Result h = w ** Processing line: ~ args.state.x += (1280-w) / (args.state.blendmodes.length + 1)~ - Inside source: true *** True Line Result args.state.x += (1280-w) / (args.state.blendmodes.length + 1) ** Processing line: ~ x = args.state.x~ - Inside source: true *** True Line Result x = args.state.x ** Processing line: ~ y = (720 - h) / 2~ - Inside source: true *** True Line Result y = (720 - h) / 2 ** Processing line: ~ s = 'sprites/blue-feathered.png'~ - Inside source: true *** True Line Result s = 'sprites/blue-feathered.png' ** Processing line: ~ args.outputs.sprites << { blendmode_enum: mode.value, x: x, y: y, w: w, h: h, path: s }~ - Inside source: true *** True Line Result args.outputs.sprites << { blendmode_enum: mode.value, x: x, y: y, w: w, h: h, path: s } ** Processing line: ~ args.outputs.labels << [x + (w/2), y, mode.name.to_s, 1, 1, 255, 255, 255]~ - Inside source: true *** True Line Result args.outputs.labels << [x + (w/2), y, mode.name.to_s, 1, 1, 255, 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Different blend modes do different things, depending on what they~ - Inside source: true *** True Line Result # Different blend modes do different things, depending on what they ** Processing line: ~ # blend against (in this case, the pixels of the background color).~ - Inside source: true *** True Line Result # blend against (in this case, the pixels of the background color). ** Processing line: ~ args.state.bg_element ||= 1~ - Inside source: true *** True Line Result args.state.bg_element ||= 1 ** Processing line: ~ args.state.bg_color ||= 255~ - Inside source: true *** True Line Result args.state.bg_color ||= 255 ** Processing line: ~ args.state.bg_color_direction ||= 1~ - Inside source: true *** True Line Result args.state.bg_color_direction ||= 1 ** Processing line: ~ bg_r = (args.state.bg_element == 1) ? args.state.bg_color : 0~ - Inside source: true *** True Line Result bg_r = (args.state.bg_element == 1) ? args.state.bg_color : 0 ** Processing line: ~ bg_g = (args.state.bg_element == 2) ? args.state.bg_color : 0~ - Inside source: true *** True Line Result bg_g = (args.state.bg_element == 2) ? args.state.bg_color : 0 ** Processing line: ~ bg_b = (args.state.bg_element == 3) ? args.state.bg_color : 0~ - Inside source: true *** True Line Result bg_b = (args.state.bg_element == 3) ? args.state.bg_color : 0 ** Processing line: ~ args.state.bg_color += args.state.bg_color_direction~ - Inside source: true *** True Line Result args.state.bg_color += args.state.bg_color_direction ** Processing line: ~ if (args.state.bg_color_direction > 0) && (args.state.bg_color >= 255)~ - Inside source: true *** True Line Result if (args.state.bg_color_direction > 0) && (args.state.bg_color >= 255) ** Processing line: ~ args.state.bg_color_direction = -1~ - Inside source: true *** True Line Result args.state.bg_color_direction = -1 ** Processing line: ~ args.state.bg_color = 255~ - Inside source: true *** True Line Result args.state.bg_color = 255 ** Processing line: ~ elsif (args.state.bg_color_direction < 0) && (args.state.bg_color <= 0)~ - Inside source: true *** True Line Result elsif (args.state.bg_color_direction < 0) && (args.state.bg_color <= 0) ** Processing line: ~ args.state.bg_color_direction = 1~ - Inside source: true *** True Line Result args.state.bg_color_direction = 1 ** Processing line: ~ args.state.bg_color = 0~ - Inside source: true *** True Line Result args.state.bg_color = 0 ** Processing line: ~ args.state.bg_element += 1~ - Inside source: true *** True Line Result args.state.bg_element += 1 ** Processing line: ~ if args.state.bg_element >= 4~ - Inside source: true *** True Line Result if args.state.bg_element >= 4 ** Processing line: ~ args.state.bg_element = 1~ - Inside source: true *** True Line Result args.state.bg_element = 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.background_color = [ bg_r, bg_g, bg_b, 255 ]~ - Inside source: true *** True Line Result args.outputs.background_color = [ bg_r, bg_g, bg_b, 255 ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.blendmodes ||= [~ - Inside source: true *** True Line Result args.state.blendmodes ||= [ ** Processing line: ~ { name: :none, value: 0 },~ - Inside source: true *** True Line Result { name: :none, value: 0 }, ** Processing line: ~ { name: :blend, value: 1 },~ - Inside source: true *** True Line Result { name: :blend, value: 1 }, ** Processing line: ~ { name: :add, value: 2 },~ - Inside source: true *** True Line Result { name: :add, value: 2 }, ** Processing line: ~ { name: :mod, value: 3 },~ - Inside source: true *** True Line Result { name: :mod, value: 3 }, ** Processing line: ~ { name: :mul, value: 4 }~ - Inside source: true *** True Line Result { name: :mul, value: 4 } ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.x = 0 # reset this, draw_blendmode will increment it.~ - Inside source: true *** True Line Result args.state.x = 0 # reset this, draw_blendmode will increment it. ** Processing line: ~ args.state.blendmodes.each { |blendmode| draw_blendmode args, blendmode }~ - Inside source: true *** True Line Result args.state.blendmodes.each { |blendmode| draw_blendmode args, blendmode } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Rendering - Render Target Noclear - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Rendering - Render Target Noclear - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/07_advanced_rendering/11_render_target_noclear/app/main.rb~ - Inside source: true *** True Line Result # ./samples/07_advanced_rendering/11_render_target_noclear/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.x ||= 500~ - Inside source: true *** True Line Result args.state.x ||= 500 ** Processing line: ~ args.state.y ||= 350~ - Inside source: true *** True Line Result args.state.y ||= 350 ** Processing line: ~ args.state.xinc ||= 7~ - Inside source: true *** True Line Result args.state.xinc ||= 7 ** Processing line: ~ args.state.yinc ||= 7~ - Inside source: true *** True Line Result args.state.yinc ||= 7 ** Processing line: ~ args.state.bgcolor ||= 1~ - Inside source: true *** True Line Result args.state.bgcolor ||= 1 ** Processing line: ~ args.state.bginc ||= 1~ - Inside source: true *** True Line Result args.state.bginc ||= 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # clear the render target on the first tick, and then never again. Draw~ - Inside source: true *** True Line Result # clear the render target on the first tick, and then never again. Draw ** Processing line: ~ # another box to it every tick, accumulating over time.~ - Inside source: true *** True Line Result # another box to it every tick, accumulating over time. ** Processing line: ~ clear_target = (args.state.tick_count == 0) || (args.inputs.keyboard.key_down.space)~ - Inside source: true *** True Line Result clear_target = (args.state.tick_count == 0) || (args.inputs.keyboard.key_down.space) ** Processing line: ~ args.render_target(:accumulation).background_color = [ 0, 0, 0, 0 ];~ - Inside source: true *** True Line Result args.render_target(:accumulation).background_color = [ 0, 0, 0, 0 ]; ** Processing line: ~ args.render_target(:accumulation).clear_before_render = clear_target~ - Inside source: true *** True Line Result args.render_target(:accumulation).clear_before_render = clear_target ** Processing line: ~ args.render_target(:accumulation).solids << [args.state.x, args.state.y, 25, 25, 255, 0, 0, 255];~ - Inside source: true *** True Line Result args.render_target(:accumulation).solids << [args.state.x, args.state.y, 25, 25, 255, 0, 0, 255]; ** Processing line: ~ args.state.x += args.state.xinc~ - Inside source: true *** True Line Result args.state.x += args.state.xinc ** Processing line: ~ args.state.y += args.state.yinc~ - Inside source: true *** True Line Result args.state.y += args.state.yinc ** Processing line: ~ args.state.bgcolor += args.state.bginc~ - Inside source: true *** True Line Result args.state.bgcolor += args.state.bginc ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # animation upkeep...change where we draw the next box and what color the~ - Inside source: true *** True Line Result # animation upkeep...change where we draw the next box and what color the ** Processing line: ~ # window background will be.~ - Inside source: true *** True Line Result # window background will be. ** Processing line: ~ if args.state.xinc > 0 && args.state.x >= 1280~ - Inside source: true *** True Line Result if args.state.xinc > 0 && args.state.x >= 1280 ** Processing line: ~ args.state.xinc = -7~ - Inside source: true *** True Line Result args.state.xinc = -7 ** Processing line: ~ elsif args.state.xinc < 0 && args.state.x < 0~ - Inside source: true *** True Line Result elsif args.state.xinc < 0 && args.state.x < 0 ** Processing line: ~ args.state.xinc = 7~ - Inside source: true *** True Line Result args.state.xinc = 7 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.yinc > 0 && args.state.y >= 720~ - Inside source: true *** True Line Result if args.state.yinc > 0 && args.state.y >= 720 ** Processing line: ~ args.state.yinc = -7~ - Inside source: true *** True Line Result args.state.yinc = -7 ** Processing line: ~ elsif args.state.yinc < 0 && args.state.y < 0~ - Inside source: true *** True Line Result elsif args.state.yinc < 0 && args.state.y < 0 ** Processing line: ~ args.state.yinc = 7~ - Inside source: true *** True Line Result args.state.yinc = 7 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.bginc > 0 && args.state.bgcolor >= 255~ - Inside source: true *** True Line Result if args.state.bginc > 0 && args.state.bgcolor >= 255 ** Processing line: ~ args.state.bginc = -1~ - Inside source: true *** True Line Result args.state.bginc = -1 ** Processing line: ~ elsif args.state.bginc < 0 && args.state.bgcolor <= 0~ - Inside source: true *** True Line Result elsif args.state.bginc < 0 && args.state.bgcolor <= 0 ** Processing line: ~ args.state.bginc = 1~ - Inside source: true *** True Line Result args.state.bginc = 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # clear the screen to a shade of blue and draw the render target, which~ - Inside source: true *** True Line Result # clear the screen to a shade of blue and draw the render target, which ** Processing line: ~ # is not clearing every frame, on top of it. Note that you can NOT opt to~ - Inside source: true *** True Line Result # is not clearing every frame, on top of it. Note that you can NOT opt to ** Processing line: ~ # skip clearing the screen, only render targets. The screen clears every~ - Inside source: true *** True Line Result # skip clearing the screen, only render targets. The screen clears every ** Processing line: ~ # frame; double-buffering would prevent correct updates between frames.~ - Inside source: true *** True Line Result # frame; double-buffering would prevent correct updates between frames. ** Processing line: ~ args.outputs.background_color = [ 0, 0, args.state.bgcolor, 255 ]~ - Inside source: true *** True Line Result args.outputs.background_color = [ 0, 0, args.state.bgcolor, 255 ] ** Processing line: ~ args.outputs.sprites << [ 0, 0, 1280, 720, :accumulation ]~ - Inside source: true *** True Line Result args.outputs.sprites << [ 0, 0, 1280, 720, :accumulation ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Tweening Lerping Easing Functions - Easing Functions - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Tweening Lerping Easing Functions - Easing Functions - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/08_tweening_lerping_easing_functions/01_easing_functions/app/main.rb~ - Inside source: true *** True Line Result # ./samples/08_tweening_lerping_easing_functions/01_easing_functions/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # STOP! Watch the following presentation first!!!!~ - Inside source: true *** True Line Result # STOP! Watch the following presentation first!!!! ** Processing line: ~ # Math for Game Programmers: Fast and Funky 1D Nonlinear Transformations~ - Inside source: true *** True Line Result # Math for Game Programmers: Fast and Funky 1D Nonlinear Transformations ** Processing line: ~ # https://www.youtube.com/watch?v=mr5xkf6zSzk~ - Inside source: true *** True Line Result # https://www.youtube.com/watch?v=mr5xkf6zSzk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # You've watched the talk, yes? YES???~ - Inside source: true *** True Line Result # You've watched the talk, yes? YES??? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # define starting and ending points of properties to animate~ - Inside source: true *** True Line Result # define starting and ending points of properties to animate ** Processing line: ~ args.state.target_x = 1180~ - Inside source: true *** True Line Result args.state.target_x = 1180 ** Processing line: ~ args.state.target_y = 620~ - Inside source: true *** True Line Result args.state.target_y = 620 ** Processing line: ~ args.state.target_w = 100~ - Inside source: true *** True Line Result args.state.target_w = 100 ** Processing line: ~ args.state.target_h = 100~ - Inside source: true *** True Line Result args.state.target_h = 100 ** Processing line: ~ args.state.starting_x = 0~ - Inside source: true *** True Line Result args.state.starting_x = 0 ** Processing line: ~ args.state.starting_y = 0~ - Inside source: true *** True Line Result args.state.starting_y = 0 ** Processing line: ~ args.state.starting_w = 300~ - Inside source: true *** True Line Result args.state.starting_w = 300 ** Processing line: ~ args.state.starting_h = 300~ - Inside source: true *** True Line Result args.state.starting_h = 300 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # define start time and duration of animation~ - Inside source: true *** True Line Result # define start time and duration of animation ** Processing line: ~ args.state.start_animate_at = 3.seconds # this is the same as writing 60 * 5 (or 300)~ - Inside source: true *** True Line Result args.state.start_animate_at = 3.seconds # this is the same as writing 60 * 5 (or 300) ** Processing line: ~ args.state.duration = 2.seconds # this is the same as writing 60 * 2 (or 120)~ - Inside source: true *** True Line Result args.state.duration = 2.seconds # this is the same as writing 60 * 2 (or 120) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # define type of animations~ - Inside source: true *** True Line Result # define type of animations ** Processing line: ~ # Here are all the options you have for values you can put in the array:~ - Inside source: true *** True Line Result # Here are all the options you have for values you can put in the array: ** Processing line: ~ # :identity, :quad, :cube, :quart, :quint, :flip~ - Inside source: true *** True Line Result # :identity, :quad, :cube, :quart, :quint, :flip ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Linear is defined as:~ - Inside source: true *** True Line Result # Linear is defined as: ** Processing line: ~ # [:identity]~ - Inside source: true *** True Line Result # [:identity] ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Smooth start variations are:~ - Inside source: true *** True Line Result # Smooth start variations are: ** Processing line: ~ # [:quad]~ - Inside source: true *** True Line Result # [:quad] ** Processing line: ~ # [:cube]~ - Inside source: true *** True Line Result # [:cube] ** Processing line: ~ # [:quart]~ - Inside source: true *** True Line Result # [:quart] ** Processing line: ~ # [:quint]~ - Inside source: true *** True Line Result # [:quint] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Linear reversed, and smooth stop are the same as the animations defined above, but reversed:~ - Inside source: true *** True Line Result # Linear reversed, and smooth stop are the same as the animations defined above, but reversed: ** Processing line: ~ # [:flip, :identity]~ - Inside source: true *** True Line Result # [:flip, :identity] ** Processing line: ~ # [:flip, :quad, :flip]~ - Inside source: true *** True Line Result # [:flip, :quad, :flip] ** Processing line: ~ # [:flip, :cube, :flip]~ - Inside source: true *** True Line Result # [:flip, :cube, :flip] ** Processing line: ~ # [:flip, :quart, :flip]~ - Inside source: true *** True Line Result # [:flip, :quart, :flip] ** Processing line: ~ # [:flip, :quint, :flip]~ - Inside source: true *** True Line Result # [:flip, :quint, :flip] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # You can also do custom definitions. See the bottom of the file details~ - Inside source: true *** True Line Result # You can also do custom definitions. See the bottom of the file details ** Processing line: ~ # on how to do that. I've defined a couple for you:~ - Inside source: true *** True Line Result # on how to do that. I've defined a couple for you: ** Processing line: ~ # [:smoothest_start]~ - Inside source: true *** True Line Result # [:smoothest_start] ** Processing line: ~ # [:smoothest_stop]~ - Inside source: true *** True Line Result # [:smoothest_stop] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # CHANGE THIS LINE TO ONE OF THE LINES ABOVE TO SEE VARIATIONS~ - Inside source: true *** True Line Result # CHANGE THIS LINE TO ONE OF THE LINES ABOVE TO SEE VARIATIONS ** Processing line: ~ args.state.animation_type = [:identity]~ - Inside source: true *** True Line Result args.state.animation_type = [:identity] ** Processing line: ~ # args.state.animation_type = [:quad]~ - Inside source: true *** True Line Result # args.state.animation_type = [:quad] ** Processing line: ~ # args.state.animation_type = [:cube]~ - Inside source: true *** True Line Result # args.state.animation_type = [:cube] ** Processing line: ~ # args.state.animation_type = [:quart]~ - Inside source: true *** True Line Result # args.state.animation_type = [:quart] ** Processing line: ~ # args.state.animation_type = [:quint]~ - Inside source: true *** True Line Result # args.state.animation_type = [:quint] ** Processing line: ~ # args.state.animation_type = [:flip, :identity]~ - Inside source: true *** True Line Result # args.state.animation_type = [:flip, :identity] ** Processing line: ~ # args.state.animation_type = [:flip, :quad, :flip]~ - Inside source: true *** True Line Result # args.state.animation_type = [:flip, :quad, :flip] ** Processing line: ~ # args.state.animation_type = [:flip, :cube, :flip]~ - Inside source: true *** True Line Result # args.state.animation_type = [:flip, :cube, :flip] ** Processing line: ~ # args.state.animation_type = [:flip, :quart, :flip]~ - Inside source: true *** True Line Result # args.state.animation_type = [:flip, :quart, :flip] ** Processing line: ~ # args.state.animation_type = [:flip, :quint, :flip]~ - Inside source: true *** True Line Result # args.state.animation_type = [:flip, :quint, :flip] ** Processing line: ~ # args.state.animation_type = [:smoothest_start]~ - Inside source: true *** True Line Result # args.state.animation_type = [:smoothest_start] ** Processing line: ~ # args.state.animation_type = [:smoothest_stop]~ - Inside source: true *** True Line Result # args.state.animation_type = [:smoothest_stop] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # THIS IS WHERE THE MAGIC HAPPENS!~ - Inside source: true *** True Line Result # THIS IS WHERE THE MAGIC HAPPENS! ** Processing line: ~ # Numeric#ease~ - Inside source: true *** True Line Result # Numeric#ease ** Processing line: ~ progress = args.state.start_animate_at.ease(args.state.duration, args.state.animation_type)~ - Inside source: true *** True Line Result progress = args.state.start_animate_at.ease(args.state.duration, args.state.animation_type) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Numeric#ease needs to called:~ - Inside source: true *** True Line Result # Numeric#ease needs to called: ** Processing line: ~ # 1. On the number that represents the point in time you want to start, and takes two parameters:~ - Inside source: true *** True Line Result # 1. On the number that represents the point in time you want to start, and takes two parameters: ** Processing line: ~ # a. The first parameter is how long the animation should take.~ - Inside source: true *** True Line Result # a. The first parameter is how long the animation should take. ** Processing line: ~ # b. The second parameter represents the functions that need to be called.~ - Inside source: true *** True Line Result # b. The second parameter represents the functions that need to be called. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # For example, if I wanted an animate to start 3 seconds in, and last for 10 seconds,~ - Inside source: true *** True Line Result # For example, if I wanted an animate to start 3 seconds in, and last for 10 seconds, ** Processing line: ~ # and I want to animation to start fast and end slow, I would do:~ - Inside source: true *** True Line Result # and I want to animation to start fast and end slow, I would do: ** Processing line: ~ # (60 * 3).ease(60 * 10, :flip, :quint, :flip)~ - Inside source: true *** True Line Result # (60 * 3).ease(60 * 10, :flip, :quint, :flip) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # initial value delta to the final value~ - Inside source: true *** True Line Result # initial value delta to the final value ** Processing line: ~ calc_x = args.state.starting_x + (args.state.target_x - args.state.starting_x) * progress~ - Inside source: true *** True Line Result calc_x = args.state.starting_x + (args.state.target_x - args.state.starting_x) * progress ** Processing line: ~ calc_y = args.state.starting_y + (args.state.target_y - args.state.starting_y) * progress~ - Inside source: true *** True Line Result calc_y = args.state.starting_y + (args.state.target_y - args.state.starting_y) * progress ** Processing line: ~ calc_w = args.state.starting_w + (args.state.target_w - args.state.starting_w) * progress~ - Inside source: true *** True Line Result calc_w = args.state.starting_w + (args.state.target_w - args.state.starting_w) * progress ** Processing line: ~ calc_h = args.state.starting_h + (args.state.target_h - args.state.starting_h) * progress~ - Inside source: true *** True Line Result calc_h = args.state.starting_h + (args.state.target_h - args.state.starting_h) * progress ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.solids << [calc_x, calc_y, calc_w, calc_h, 0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.solids << [calc_x, calc_y, calc_w, calc_h, 0, 0, 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # count down~ - Inside source: true *** True Line Result # count down ** Processing line: ~ count_down = args.state.start_animate_at - args.state.tick_count~ - Inside source: true *** True Line Result count_down = args.state.start_animate_at - args.state.tick_count ** Processing line: ~ if count_down > 0~ - Inside source: true *** True Line Result if count_down > 0 ** Processing line: ~ args.outputs.labels << [640, 375, "Running: #{args.state.animation_type} in...", 3, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 375, "Running: #{args.state.animation_type} in...", 3, 1] ** Processing line: ~ args.outputs.labels << [640, 345, "%.2f" % count_down.fdiv(60), 3, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 345, "%.2f" % count_down.fdiv(60), 3, 1] ** Processing line: ~ elsif progress >= 1~ - Inside source: true *** True Line Result elsif progress >= 1 ** Processing line: ~ args.outputs.labels << [640, 360, "Click screen to reset.", 3, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 360, "Click screen to reset.", 3, 1] ** Processing line: ~ if args.inputs.click~ - Inside source: true *** True Line Result if args.inputs.click ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # $gtk.reset~ - Inside source: true *** True Line Result # $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # you can make own variations of animations using this~ - Inside source: true *** True Line Result # you can make own variations of animations using this ** Processing line: ~ module Easing~ - Inside source: true *** True Line Result module Easing ** Processing line: ~ # you have access to all the built in functions: identity, flip, quad, cube, quart, quint~ - Inside source: true *** True Line Result # you have access to all the built in functions: identity, flip, quad, cube, quart, quint ** Processing line: ~ def self.smoothest_start x~ - Inside source: true *** True Line Result def self.smoothest_start x ** Processing line: ~ quad(quint(x))~ - Inside source: true *** True Line Result quad(quint(x)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.smoothest_stop x~ - Inside source: true *** True Line Result def self.smoothest_stop x ** Processing line: ~ flip(quad(quint(flip(x))))~ - Inside source: true *** True Line Result flip(quad(quint(flip(x)))) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # this is the source for the existing easing functions~ - Inside source: true *** True Line Result # this is the source for the existing easing functions ** Processing line: ~ def self.identity x~ - Inside source: true *** True Line Result def self.identity x ** Processing line: ~ x~ - Inside source: true *** True Line Result x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.flip x~ - Inside source: true *** True Line Result def self.flip x ** Processing line: ~ 1 - x~ - Inside source: true *** True Line Result 1 - x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.quad x~ - Inside source: true *** True Line Result def self.quad x ** Processing line: ~ x * x~ - Inside source: true *** True Line Result x * x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.cube x~ - Inside source: true *** True Line Result def self.cube x ** Processing line: ~ x * x * x~ - Inside source: true *** True Line Result x * x * x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.quart x~ - Inside source: true *** True Line Result def self.quart x ** Processing line: ~ x * x * x * x * x~ - Inside source: true *** True Line Result x * x * x * x * x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.quint x~ - Inside source: true *** True Line Result def self.quint x ** Processing line: ~ x * x * x * x * x * x~ - Inside source: true *** True Line Result x * x * x * x * x * x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Tweening Lerping Easing Functions - Cubic Bezier - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Tweening Lerping Easing Functions - Cubic Bezier - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/08_tweening_lerping_easing_functions/02_cubic_bezier/app/main.rb~ - Inside source: true *** True Line Result # ./samples/08_tweening_lerping_easing_functions/02_cubic_bezier/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.background_color = [33, 33, 33]~ - Inside source: true *** True Line Result args.outputs.background_color = [33, 33, 33] ** Processing line: ~ args.outputs.lines << bezier(100, 100,~ - Inside source: true *** True Line Result args.outputs.lines << bezier(100, 100, ** Processing line: ~ 100, 620,~ - Inside source: true *** True Line Result 100, 620, ** Processing line: ~ 1180, 620,~ - Inside source: true *** True Line Result 1180, 620, ** Processing line: ~ 1180, 100,~ - Inside source: true *** True Line Result 1180, 100, ** Processing line: ~ 0)~ - Inside source: true *** True Line Result 0) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.lines << bezier(100, 100,~ - Inside source: true *** True Line Result args.outputs.lines << bezier(100, 100, ** Processing line: ~ 100, 620,~ - Inside source: true *** True Line Result 100, 620, ** Processing line: ~ 1180, 620,~ - Inside source: true *** True Line Result 1180, 620, ** Processing line: ~ 1180, 100,~ - Inside source: true *** True Line Result 1180, 100, ** Processing line: ~ 20)~ - Inside source: true *** True Line Result 20) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bezier x1, y1, x2, y2, x3, y3, x4, y4, step~ - Inside source: true *** True Line Result def bezier x1, y1, x2, y2, x3, y3, x4, y4, step ** Processing line: ~ step ||= 0~ - Inside source: true *** True Line Result step ||= 0 ** Processing line: ~ color = [200, 200, 200]~ - Inside source: true *** True Line Result color = [200, 200, 200] ** Processing line: ~ points = points_for_bezier [x1, y1], [x2, y2], [x3, y3], [x4, y4], step~ - Inside source: true *** True Line Result points = points_for_bezier [x1, y1], [x2, y2], [x3, y3], [x4, y4], step ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ points.each_cons(2).map do |p1, p2|~ - Inside source: true *** True Line Result points.each_cons(2).map do |p1, p2| ** Processing line: ~ [p1, p2, color]~ - Inside source: true *** True Line Result [p1, p2, color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def points_for_bezier p1, p2, p3, p4, step~ - Inside source: true *** True Line Result def points_for_bezier p1, p2, p3, p4, step ** Processing line: ~ points = []~ - Inside source: true *** True Line Result points = [] ** Processing line: ~ if step == 0~ - Inside source: true *** True Line Result if step == 0 ** Processing line: ~ [p1, p2, p3, p4]~ - Inside source: true *** True Line Result [p1, p2, p3, p4] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ t_step = 1.fdiv(step + 1)~ - Inside source: true *** True Line Result t_step = 1.fdiv(step + 1) ** Processing line: ~ t = 0~ - Inside source: true *** True Line Result t = 0 ** Processing line: ~ t += t_step~ - Inside source: true *** True Line Result t += t_step ** Processing line: ~ points = []~ - Inside source: true *** True Line Result points = [] ** Processing line: ~ while t < 1~ - Inside source: true *** True Line Result while t < 1 ** Processing line: ~ points << [~ - Inside source: true *** True Line Result points << [ ** Processing line: ~ b_for_t(p1.x, p2.x, p3.x, p4.x, t),~ - Inside source: true *** True Line Result b_for_t(p1.x, p2.x, p3.x, p4.x, t), ** Processing line: ~ b_for_t(p1.y, p2.y, p3.y, p4.y, t),~ - Inside source: true *** True Line Result b_for_t(p1.y, p2.y, p3.y, p4.y, t), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ t += t_step~ - Inside source: true *** True Line Result t += t_step ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ p1,~ - Inside source: true *** True Line Result p1, ** Processing line: ~ *points,~ - Inside source: true *** True Line Result *points, ** Processing line: ~ p4~ - Inside source: true *** True Line Result p4 ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def b_for_t v0, v1, v2, v3, t~ - Inside source: true *** True Line Result def b_for_t v0, v1, v2, v3, t ** Processing line: ~ pow(1 - t, 3) * v0 +~ - Inside source: true *** True Line Result pow(1 - t, 3) * v0 + ** Processing line: ~ 3 * pow(1 - t, 2) * t * v1 +~ - Inside source: true *** True Line Result 3 * pow(1 - t, 2) * t * v1 + ** Processing line: ~ 3 * (1 - t) * pow(t, 2) * v2 +~ - Inside source: true *** True Line Result 3 * (1 - t) * pow(t, 2) * v2 + ** Processing line: ~ pow(t, 3) * v3~ - Inside source: true *** True Line Result pow(t, 3) * v3 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def pow n, to~ - Inside source: true *** True Line Result def pow n, to ** Processing line: ~ n ** to~ - Inside source: true *** True Line Result n ** to ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Tweening Lerping Easing Functions - Easing Using Spline - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Tweening Lerping Easing Functions - Easing Using Spline - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/08_tweening_lerping_easing_functions/03_easing_using_spline/app/main.rb~ - Inside source: true *** True Line Result # ./samples/08_tweening_lerping_easing_functions/03_easing_using_spline/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.duration = 10.seconds~ - Inside source: true *** True Line Result args.state.duration = 10.seconds ** Processing line: ~ args.state.spline = [~ - Inside source: true *** True Line Result args.state.spline = [ ** Processing line: ~ [0.0, 0.33, 0.66, 1.0],~ - Inside source: true *** True Line Result [0.0, 0.33, 0.66, 1.0], ** Processing line: ~ [1.0, 1.0, 1.0, 1.0],~ - Inside source: true *** True Line Result [1.0, 1.0, 1.0, 1.0], ** Processing line: ~ [1.0, 0.66, 0.33, 0.0],~ - Inside source: true *** True Line Result [1.0, 0.66, 0.33, 0.0], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.simulation_tick = args.state.tick_count % args.state.duration~ - Inside source: true *** True Line Result args.state.simulation_tick = args.state.tick_count % args.state.duration ** Processing line: ~ progress = 0.ease_spline_extended args.state.simulation_tick, args.state.duration, args.state.spline~ - Inside source: true *** True Line Result progress = 0.ease_spline_extended args.state.simulation_tick, args.state.duration, args.state.spline ** Processing line: ~ args.outputs.borders << args.grid.rect~ - Inside source: true *** True Line Result args.outputs.borders << args.grid.rect ** Processing line: ~ args.outputs.solids << [20 + 1240 * progress,~ - Inside source: true *** True Line Result args.outputs.solids << [20 + 1240 * progress, ** Processing line: ~ 20 + 680 * progress,~ - Inside source: true *** True Line Result 20 + 680 * progress, ** Processing line: ~ 20, 20].anchor_rect(0.5, 0.5)~ - Inside source: true *** True Line Result 20, 20].anchor_rect(0.5, 0.5) ** Processing line: ~ args.outputs.labels << [10,~ - Inside source: true *** True Line Result args.outputs.labels << [10, ** Processing line: ~ 710,~ - Inside source: true *** True Line Result 710, ** Processing line: ~ "perc: #{"%.2f" % (args.state.simulation_tick / args.state.duration)} t: #{args.state.simulation_tick}"]~ - Inside source: true *** True Line Result "perc: #{"%.2f" % (args.state.simulation_tick / args.state.duration)} t: #{args.state.simulation_tick}"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Tweening Lerping Easing Functions - Parametric Enemy Movement - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Tweening Lerping Easing Functions - Parametric Enemy Movement - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/08_tweening_lerping_easing_functions/04_parametric_enemy_movement/app/main.rb~ - Inside source: true *** True Line Result # ./samples/08_tweening_lerping_easing_functions/04_parametric_enemy_movement/app/main.rb ** Processing line: ~ def new_star args~ - Inside source: true *** True Line Result def new_star args ** Processing line: ~ { x: 1280.randomize(:ratio),~ - Inside source: true *** True Line Result { x: 1280.randomize(:ratio), ** Processing line: ~ starting_y: 800,~ - Inside source: true *** True Line Result starting_y: 800, ** Processing line: ~ distance_to_travel: 900 + 100.randomize(:ratio),~ - Inside source: true *** True Line Result distance_to_travel: 900 + 100.randomize(:ratio), ** Processing line: ~ duration: 100.randomize(:ratio) + 60,~ - Inside source: true *** True Line Result duration: 100.randomize(:ratio) + 60, ** Processing line: ~ created_at: args.state.tick_count,~ - Inside source: true *** True Line Result created_at: args.state.tick_count, ** Processing line: ~ max_alpha: 128.randomize(:ratio) + 128,~ - Inside source: true *** True Line Result max_alpha: 128.randomize(:ratio) + 128, ** Processing line: ~ b: 255.randomize(:ratio),~ - Inside source: true *** True Line Result b: 255.randomize(:ratio), ** Processing line: ~ g: 200.randomize(:ratio),~ - Inside source: true *** True Line Result g: 200.randomize(:ratio), ** Processing line: ~ w: 1.randomize(:ratio) + 1,~ - Inside source: true *** True Line Result w: 1.randomize(:ratio) + 1, ** Processing line: ~ h: 1.randomize(:ratio) + 1 }~ - Inside source: true *** True Line Result h: 1.randomize(:ratio) + 1 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_enemy args~ - Inside source: true *** True Line Result def new_enemy args ** Processing line: ~ { x: 1280.randomize(:ratio),~ - Inside source: true *** True Line Result { x: 1280.randomize(:ratio), ** Processing line: ~ starting_y: 800,~ - Inside source: true *** True Line Result starting_y: 800, ** Processing line: ~ distance_to_travel: -900,~ - Inside source: true *** True Line Result distance_to_travel: -900, ** Processing line: ~ duration: 60.randomize(:ratio) + 180,~ - Inside source: true *** True Line Result duration: 60.randomize(:ratio) + 180, ** Processing line: ~ created_at: args.state.tick_count,~ - Inside source: true *** True Line Result created_at: args.state.tick_count, ** Processing line: ~ w: 32,~ - Inside source: true *** True Line Result w: 32, ** Processing line: ~ h: 32,~ - Inside source: true *** True Line Result h: 32, ** Processing line: ~ fire_rate: (30.randomize(:ratio) + (60 - args.state.score)).to_i }~ - Inside source: true *** True Line Result fire_rate: (30.randomize(:ratio) + (60 - args.state.score)).to_i } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_bullet args, starting_x, starting_y, enemy_speed~ - Inside source: true *** True Line Result def new_bullet args, starting_x, starting_y, enemy_speed ** Processing line: ~ { x: starting_x,~ - Inside source: true *** True Line Result { x: starting_x, ** Processing line: ~ starting_y: starting_y,~ - Inside source: true *** True Line Result starting_y: starting_y, ** Processing line: ~ distance_to_travel: -900,~ - Inside source: true *** True Line Result distance_to_travel: -900, ** Processing line: ~ created_at: args.state.tick_count,~ - Inside source: true *** True Line Result created_at: args.state.tick_count, ** Processing line: ~ duration: 900 / (enemy_speed.abs + 2.0 + (5.0 * args.state.score.fdiv(100))).abs,~ - Inside source: true *** True Line Result duration: 900 / (enemy_speed.abs + 2.0 + (5.0 * args.state.score.fdiv(100))).abs, ** Processing line: ~ w: 5,~ - Inside source: true *** True Line Result w: 5, ** Processing line: ~ h: 5 }~ - Inside source: true *** True Line Result h: 5 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_player_bullet args, starting_x, starting_y, player_speed~ - Inside source: true *** True Line Result def new_player_bullet args, starting_x, starting_y, player_speed ** Processing line: ~ { x: starting_x,~ - Inside source: true *** True Line Result { x: starting_x, ** Processing line: ~ starting_y: starting_y,~ - Inside source: true *** True Line Result starting_y: starting_y, ** Processing line: ~ distance_to_travel: 900,~ - Inside source: true *** True Line Result distance_to_travel: 900, ** Processing line: ~ created_at: args.state.tick_count,~ - Inside source: true *** True Line Result created_at: args.state.tick_count, ** Processing line: ~ duration: 900 / (player_speed + 2.0),~ - Inside source: true *** True Line Result duration: 900 / (player_speed + 2.0), ** Processing line: ~ w: 5,~ - Inside source: true *** True Line Result w: 5, ** Processing line: ~ h: 5 }~ - Inside source: true *** True Line Result h: 5 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ args.state.score ||= 0~ - Inside source: true *** True Line Result args.state.score ||= 0 ** Processing line: ~ args.state.stars ||= []~ - Inside source: true *** True Line Result args.state.stars ||= [] ** Processing line: ~ args.state.enemies ||= []~ - Inside source: true *** True Line Result args.state.enemies ||= [] ** Processing line: ~ args.state.bullets ||= []~ - Inside source: true *** True Line Result args.state.bullets ||= [] ** Processing line: ~ args.state.player_bullets ||= []~ - Inside source: true *** True Line Result args.state.player_bullets ||= [] ** Processing line: ~ args.state.max_stars = 50~ - Inside source: true *** True Line Result args.state.max_stars = 50 ** Processing line: ~ args.state.max_enemies = 10~ - Inside source: true *** True Line Result args.state.max_enemies = 10 ** Processing line: ~ args.state.player.x ||= 640~ - Inside source: true *** True Line Result args.state.player.x ||= 640 ** Processing line: ~ args.state.player.y ||= 100~ - Inside source: true *** True Line Result args.state.player.y ||= 100 ** Processing line: ~ args.state.player.w ||= 32~ - Inside source: true *** True Line Result args.state.player.w ||= 32 ** Processing line: ~ args.state.player.h ||= 32~ - Inside source: true *** True Line Result args.state.player.h ||= 32 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.state.stars.clear~ - Inside source: true *** True Line Result args.state.stars.clear ** Processing line: ~ args.state.max_stars.times do~ - Inside source: true *** True Line Result args.state.max_stars.times do ** Processing line: ~ s = new_star args~ - Inside source: true *** True Line Result s = new_star args ** Processing line: ~ s[:created_at] += s[:duration].randomize(:ratio)~ - Inside source: true *** True Line Result s[:created_at] += s[:duration].randomize(:ratio) ** Processing line: ~ args.state.stars << s~ - Inside source: true *** True Line Result args.state.stars << s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.state.enemies.clear~ - Inside source: true *** True Line Result args.state.enemies.clear ** Processing line: ~ args.state.max_enemies.times do~ - Inside source: true *** True Line Result args.state.max_enemies.times do ** Processing line: ~ s = new_enemy args~ - Inside source: true *** True Line Result s = new_enemy args ** Processing line: ~ s[:created_at] += s[:duration].randomize(:ratio)~ - Inside source: true *** True Line Result s[:created_at] += s[:duration].randomize(:ratio) ** Processing line: ~ args.state.enemies << s~ - Inside source: true *** True Line Result args.state.enemies << s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input args~ - Inside source: true *** True Line Result def input args ** Processing line: ~ if args.inputs.keyboard.left~ - Inside source: true *** True Line Result if args.inputs.keyboard.left ** Processing line: ~ args.state.player.x -= 5~ - Inside source: true *** True Line Result args.state.player.x -= 5 ** Processing line: ~ elsif args.inputs.keyboard.right~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.right ** Processing line: ~ args.state.player.x += 5~ - Inside source: true *** True Line Result args.state.player.x += 5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.keyboard.up~ - Inside source: true *** True Line Result if args.inputs.keyboard.up ** Processing line: ~ args.state.player.y += 5~ - Inside source: true *** True Line Result args.state.player.y += 5 ** Processing line: ~ elsif args.inputs.keyboard.down~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.down ** Processing line: ~ args.state.player.y -= 5~ - Inside source: true *** True Line Result args.state.player.y -= 5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.keyboard.key_down.space~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.space ** Processing line: ~ args.state.player_bullets << new_player_bullet(args,~ - Inside source: true *** True Line Result args.state.player_bullets << new_player_bullet(args, ** Processing line: ~ args.state.player.x + args.state.player.w.half,~ - Inside source: true *** True Line Result args.state.player.x + args.state.player.w.half, ** Processing line: ~ args.state.player.y + args.state.player.h, 5)~ - Inside source: true *** True Line Result args.state.player.y + args.state.player.h, 5) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.player.y = args.state.player.y.greater(0).lesser(720 - args.state.player.w)~ - Inside source: true *** True Line Result args.state.player.y = args.state.player.y.greater(0).lesser(720 - args.state.player.w) ** Processing line: ~ args.state.player.x = args.state.player.x.greater(0).lesser(1280 - args.state.player.h)~ - Inside source: true *** True Line Result args.state.player.x = args.state.player.x.greater(0).lesser(1280 - args.state.player.h) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def completed? entity~ - Inside source: true *** True Line Result def completed? entity ** Processing line: ~ (entity[:created_at] + entity[:duration]).elapsed_time > 0~ - Inside source: true *** True Line Result (entity[:created_at] + entity[:duration]).elapsed_time > 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_stars args~ - Inside source: true *** True Line Result def calc_stars args ** Processing line: ~ if (stars_to_add = args.state.max_stars - args.state.stars.length) > 0~ - Inside source: true *** True Line Result if (stars_to_add = args.state.max_stars - args.state.stars.length) > 0 ** Processing line: ~ stars_to_add.times { args.state.stars << new_star(args) }~ - Inside source: true *** True Line Result stars_to_add.times { args.state.stars << new_star(args) } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.stars = args.state.stars.reject { |s| completed? s }~ - Inside source: true *** True Line Result args.state.stars = args.state.stars.reject { |s| completed? s } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_enemies args~ - Inside source: true *** True Line Result def move_enemies args ** Processing line: ~ if (enemies_to_add = args.state.max_enemies - args.state.enemies.length) > 0~ - Inside source: true *** True Line Result if (enemies_to_add = args.state.max_enemies - args.state.enemies.length) > 0 ** Processing line: ~ enemies_to_add.times { args.state.enemies << new_enemy(args) }~ - Inside source: true *** True Line Result enemies_to_add.times { args.state.enemies << new_enemy(args) } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.enemies = args.state.enemies.reject { |s| completed? s }~ - Inside source: true *** True Line Result args.state.enemies = args.state.enemies.reject { |s| completed? s } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_bullets args~ - Inside source: true *** True Line Result def move_bullets args ** Processing line: ~ args.state.enemies.each do |e|~ - Inside source: true *** True Line Result args.state.enemies.each do |e| ** Processing line: ~ if args.state.tick_count.mod_zero?(e[:fire_rate])~ - Inside source: true *** True Line Result if args.state.tick_count.mod_zero?(e[:fire_rate]) ** Processing line: ~ args.state.bullets << new_bullet(args, e[:x] + e[:w].half, current_y(e), e[:distance_to_travel] / e[:duration])~ - Inside source: true *** True Line Result args.state.bullets << new_bullet(args, e[:x] + e[:w].half, current_y(e), e[:distance_to_travel] / e[:duration]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.bullets = args.state.bullets.reject { |s| completed? s }~ - Inside source: true *** True Line Result args.state.bullets = args.state.bullets.reject { |s| completed? s } ** Processing line: ~ args.state.player_bullets = args.state.player_bullets.reject { |s| completed? s }~ - Inside source: true *** True Line Result args.state.player_bullets = args.state.player_bullets.reject { |s| completed? s } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def intersect? entity_one, entity_two~ - Inside source: true *** True Line Result def intersect? entity_one, entity_two ** Processing line: ~ entity_one.merge(y: current_y(entity_one))~ - Inside source: true *** True Line Result entity_one.merge(y: current_y(entity_one)) ** Processing line: ~ .intersect_rect? entity_two.merge(y: current_y(entity_two))~ - Inside source: true *** True Line Result .intersect_rect? entity_two.merge(y: current_y(entity_two)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def kill args~ - Inside source: true *** True Line Result def kill args ** Processing line: ~ bullets_hitting_enemies = []~ - Inside source: true *** True Line Result bullets_hitting_enemies = [] ** Processing line: ~ dead_bullets = []~ - Inside source: true *** True Line Result dead_bullets = [] ** Processing line: ~ dead_enemies = []~ - Inside source: true *** True Line Result dead_enemies = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.player_bullets.each do |b|~ - Inside source: true *** True Line Result args.state.player_bullets.each do |b| ** Processing line: ~ args.state.enemies.each do |e|~ - Inside source: true *** True Line Result args.state.enemies.each do |e| ** Processing line: ~ if intersect? b, e~ - Inside source: true *** True Line Result if intersect? b, e ** Processing line: ~ dead_bullets << b~ - Inside source: true *** True Line Result dead_bullets << b ** Processing line: ~ dead_enemies << e~ - Inside source: true *** True Line Result dead_enemies << e ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.score += dead_enemies.length~ - Inside source: true *** True Line Result args.state.score += dead_enemies.length ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.player_bullets.reject! { |b| dead_bullets.include? b }~ - Inside source: true *** True Line Result args.state.player_bullets.reject! { |b| dead_bullets.include? b } ** Processing line: ~ args.state.enemies.reject! { |e| dead_enemies.include? e }~ - Inside source: true *** True Line Result args.state.enemies.reject! { |e| dead_enemies.include? e } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ dead = args.state.bullets.any? do |b|~ - Inside source: true *** True Line Result dead = args.state.bullets.any? do |b| ** Processing line: ~ [args.state.player.x,~ - Inside source: true *** True Line Result [args.state.player.x, ** Processing line: ~ args.state.player.y,~ - Inside source: true *** True Line Result args.state.player.y, ** Processing line: ~ args.state.player.w,~ - Inside source: true *** True Line Result args.state.player.w, ** Processing line: ~ args.state.player.h].intersect_rect? b.merge(y: current_y(b))~ - Inside source: true *** True Line Result args.state.player.h].intersect_rect? b.merge(y: current_y(b)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ return unless dead~ - Inside source: true *** True Line Result return unless dead ** Processing line: ~ args.gtk.reset~ - Inside source: true *** True Line Result args.gtk.reset ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ calc_stars args~ - Inside source: true *** True Line Result calc_stars args ** Processing line: ~ move_enemies args~ - Inside source: true *** True Line Result move_enemies args ** Processing line: ~ move_bullets args~ - Inside source: true *** True Line Result move_bullets args ** Processing line: ~ kill args~ - Inside source: true *** True Line Result kill args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def current_y entity~ - Inside source: true *** True Line Result def current_y entity ** Processing line: ~ entity[:starting_y] + (entity[:distance_to_travel] * entity[:created_at].ease(entity[:duration], :identity))~ - Inside source: true *** True Line Result entity[:starting_y] + (entity[:distance_to_travel] * entity[:created_at].ease(entity[:duration], :identity)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ args.outputs.solids << args.state.stars.map do |s|~ - Inside source: true *** True Line Result args.outputs.solids << args.state.stars.map do |s| ** Processing line: ~ [s[:x],~ - Inside source: true *** True Line Result [s[:x], ** Processing line: ~ current_y(s),~ - Inside source: true *** True Line Result current_y(s), ** Processing line: ~ s[:w], s[:h], 0, s[:g], s[:b], s[:max_alpha] * s[:created_at].ease(20, :identity)]~ - Inside source: true *** True Line Result s[:w], s[:h], 0, s[:g], s[:b], s[:max_alpha] * s[:created_at].ease(20, :identity)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.borders << args.state.enemies.map do |s|~ - Inside source: true *** True Line Result args.outputs.borders << args.state.enemies.map do |s| ** Processing line: ~ [s[:x],~ - Inside source: true *** True Line Result [s[:x], ** Processing line: ~ current_y(s),~ - Inside source: true *** True Line Result current_y(s), ** Processing line: ~ s[:w], s[:h], 255, 0, 0]~ - Inside source: true *** True Line Result s[:w], s[:h], 255, 0, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.borders << args.state.bullets.map do |b|~ - Inside source: true *** True Line Result args.outputs.borders << args.state.bullets.map do |b| ** Processing line: ~ [b[:x],~ - Inside source: true *** True Line Result [b[:x], ** Processing line: ~ current_y(b),~ - Inside source: true *** True Line Result current_y(b), ** Processing line: ~ b[:w], b[:h], 255, 0, 0]~ - Inside source: true *** True Line Result b[:w], b[:h], 255, 0, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.borders << args.state.player_bullets.map do |b|~ - Inside source: true *** True Line Result args.outputs.borders << args.state.player_bullets.map do |b| ** Processing line: ~ [b[:x],~ - Inside source: true *** True Line Result [b[:x], ** Processing line: ~ current_y(b),~ - Inside source: true *** True Line Result current_y(b), ** Processing line: ~ b[:w], b[:h], 255, 255, 255]~ - Inside source: true *** True Line Result b[:w], b[:h], 255, 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.borders << [args.state.player.x,~ - Inside source: true *** True Line Result args.borders << [args.state.player.x, ** Processing line: ~ args.state.player.y,~ - Inside source: true *** True Line Result args.state.player.y, ** Processing line: ~ args.state.player.w,~ - Inside source: true *** True Line Result args.state.player.w, ** Processing line: ~ args.state.player.h, 255, 255, 255]~ - Inside source: true *** True Line Result args.state.player.h, 255, 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ input args~ - Inside source: true *** True Line Result input args ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Performance - Sprites As Hash - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Performance - Sprites As Hash - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/09_performance/01_sprites_as_hash/app/main.rb~ - Inside source: true *** True Line Result # ./samples/09_performance/01_sprites_as_hash/app/main.rb ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sprites represented as Hashes using the queue ~args.outputs.sprites~~ - Inside source: true *** True Line Result # Sprites represented as Hashes using the queue ~args.outputs.sprites~ ** Processing line: ~ # code up, but are the "slowest" to render.~ - Inside source: true *** True Line Result # code up, but are the "slowest" to render. ** Processing line: ~ # The reason for this is the access of the key in the Hash and also~ - Inside source: true *** True Line Result # The reason for this is the access of the key in the Hash and also ** Processing line: ~ # because the data args.outputs.sprites is cleared every tick.~ - Inside source: true *** True Line Result # because the data args.outputs.sprites is cleared every tick. ** Processing line: ~ def random_x args~ - Inside source: true *** True Line Result def random_x args ** Processing line: ~ (args.grid.w.randomize :ratio) * -1~ - Inside source: true *** True Line Result (args.grid.w.randomize :ratio) * -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def random_y args~ - Inside source: true *** True Line Result def random_y args ** Processing line: ~ (args.grid.h.randomize :ratio) * -1~ - Inside source: true *** True Line Result (args.grid.h.randomize :ratio) * -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def random_speed~ - Inside source: true *** True Line Result def random_speed ** Processing line: ~ 1 + (4.randomize :ratio)~ - Inside source: true *** True Line Result 1 + (4.randomize :ratio) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_star args~ - Inside source: true *** True Line Result def new_star args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: (random_x args),~ - Inside source: true *** True Line Result x: (random_x args), ** Processing line: ~ y: (random_y args),~ - Inside source: true *** True Line Result y: (random_y args), ** Processing line: ~ w: 4, h: 4, path: 'sprites/tiny-star.png',~ - Inside source: true *** True Line Result w: 4, h: 4, path: 'sprites/tiny-star.png', ** Processing line: ~ s: random_speed~ - Inside source: true *** True Line Result s: random_speed ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_star args, star~ - Inside source: true *** True Line Result def move_star args, star ** Processing line: ~ star.x += star[:s]~ - Inside source: true *** True Line Result star.x += star[:s] ** Processing line: ~ star.y += star[:s]~ - Inside source: true *** True Line Result star.y += star[:s] ** Processing line: ~ if star.x > args.grid.w || star.y > args.grid.h~ - Inside source: true *** True Line Result if star.x > args.grid.w || star.y > args.grid.h ** Processing line: ~ star.x = (random_x args)~ - Inside source: true *** True Line Result star.x = (random_x args) ** Processing line: ~ star.y = (random_y args)~ - Inside source: true *** True Line Result star.y = (random_y args) ** Processing line: ~ star[:s] = random_speed~ - Inside source: true *** True Line Result star[:s] = random_speed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.star_count ||= 0~ - Inside source: true *** True Line Result args.state.star_count ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # sets console command when sample app initially opens~ - Inside source: true *** True Line Result # sets console command when sample app initially opens ** Processing line: ~ if Kernel.global_tick_count == 0~ - Inside source: true *** True Line Result if Kernel.global_tick_count == 0 ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts "========================================================="~ - Inside source: true *** True Line Result puts "=========================================================" ** Processing line: ~ puts "* INFO: Sprites, Hashes"~ - Inside source: true *** True Line Result puts "* INFO: Sprites, Hashes" ** Processing line: ~ puts "* INFO: Please specify the number of sprites to render."~ - Inside source: true *** True Line Result puts "* INFO: Please specify the number of sprites to render." ** Processing line: ~ args.gtk.console.set_command "reset_with count: 100"~ - Inside source: true *** True Line Result args.gtk.console.set_command "reset_with count: 100" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # init~ - Inside source: true *** True Line Result # init ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.state.stars = args.state.star_count.map { |i| new_star args }~ - Inside source: true *** True Line Result args.state.stars = args.state.star_count.map { |i| new_star args } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # update~ - Inside source: true *** True Line Result # update ** Processing line: ~ args.state.stars.each { |s| move_star args, s }~ - Inside source: true *** True Line Result args.state.stars.each { |s| move_star args, s } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render~ - Inside source: true *** True Line Result # render ** Processing line: ~ args.outputs.sprites << args.state.stars~ - Inside source: true *** True Line Result args.outputs.sprites << args.state.stars ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ - Inside source: true *** True Line Result args.outputs.primitives << args.gtk.current_framerate_primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # resets game, and assigns star count given by user~ - Inside source: true *** True Line Result # resets game, and assigns star count given by user ** Processing line: ~ def reset_with count: count~ - Inside source: true *** True Line Result def reset_with count: count ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ $gtk.args.state.star_count = count~ - Inside source: true *** True Line Result $gtk.args.state.star_count = count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Performance - Sprites As Entities - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Performance - Sprites As Entities - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/09_performance/02_sprites_as_entities/app/main.rb~ - Inside source: true *** True Line Result # ./samples/09_performance/02_sprites_as_entities/app/main.rb ** Processing line: ~ # Sprites represented as Entities using the queue ~args.outputs.sprites~~ - Inside source: true *** True Line Result # Sprites represented as Entities using the queue ~args.outputs.sprites~ ** Processing line: ~ # yields nicer access apis over Hashes, but require a bit more code upfront.~ - Inside source: true *** True Line Result # yields nicer access apis over Hashes, but require a bit more code upfront. ** Processing line: ~ # The hash sample has to use star[:s] to get the speed of the star, but~ - Inside source: true *** True Line Result # The hash sample has to use star[:s] to get the speed of the star, but ** Processing line: ~ # an entity can use .s instead.~ - Inside source: true *** True Line Result # an entity can use .s instead. ** Processing line: ~ def random_x args~ - Inside source: true *** True Line Result def random_x args ** Processing line: ~ (args.grid.w.randomize :ratio) * -1~ - Inside source: true *** True Line Result (args.grid.w.randomize :ratio) * -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def random_y args~ - Inside source: true *** True Line Result def random_y args ** Processing line: ~ (args.grid.h.randomize :ratio) * -1~ - Inside source: true *** True Line Result (args.grid.h.randomize :ratio) * -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def random_speed~ - Inside source: true *** True Line Result def random_speed ** Processing line: ~ 1 + (4.randomize :ratio)~ - Inside source: true *** True Line Result 1 + (4.randomize :ratio) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_star args~ - Inside source: true *** True Line Result def new_star args ** Processing line: ~ args.state.new_entity :star, {~ - Inside source: true *** True Line Result args.state.new_entity :star, { ** Processing line: ~ x: (random_x args),~ - Inside source: true *** True Line Result x: (random_x args), ** Processing line: ~ y: (random_y args),~ - Inside source: true *** True Line Result y: (random_y args), ** Processing line: ~ w: 4, h: 4,~ - Inside source: true *** True Line Result w: 4, h: 4, ** Processing line: ~ path: 'sprites/tiny-star.png',~ - Inside source: true *** True Line Result path: 'sprites/tiny-star.png', ** Processing line: ~ s: random_speed~ - Inside source: true *** True Line Result s: random_speed ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_star args, star~ - Inside source: true *** True Line Result def move_star args, star ** Processing line: ~ star.x += star.s~ - Inside source: true *** True Line Result star.x += star.s ** Processing line: ~ star.y += star.s~ - Inside source: true *** True Line Result star.y += star.s ** Processing line: ~ if star.x > args.grid.w || star.y > args.grid.h~ - Inside source: true *** True Line Result if star.x > args.grid.w || star.y > args.grid.h ** Processing line: ~ star.x = (random_x args)~ - Inside source: true *** True Line Result star.x = (random_x args) ** Processing line: ~ star.y = (random_y args)~ - Inside source: true *** True Line Result star.y = (random_y args) ** Processing line: ~ star.s = random_speed~ - Inside source: true *** True Line Result star.s = random_speed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.star_count ||= 0~ - Inside source: true *** True Line Result args.state.star_count ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # sets console command when sample app initially opens~ - Inside source: true *** True Line Result # sets console command when sample app initially opens ** Processing line: ~ if Kernel.global_tick_count == 0~ - Inside source: true *** True Line Result if Kernel.global_tick_count == 0 ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts "========================================================="~ - Inside source: true *** True Line Result puts "=========================================================" ** Processing line: ~ puts "* INFO: Sprites, Open Entities"~ - Inside source: true *** True Line Result puts "* INFO: Sprites, Open Entities" ** Processing line: ~ puts "* INFO: Please specify the number of sprites to render."~ - Inside source: true *** True Line Result puts "* INFO: Please specify the number of sprites to render." ** Processing line: ~ args.gtk.console.set_command "reset_with count: 100"~ - Inside source: true *** True Line Result args.gtk.console.set_command "reset_with count: 100" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # init~ - Inside source: true *** True Line Result # init ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.state.stars = args.state.star_count.map { |i| new_star args }~ - Inside source: true *** True Line Result args.state.stars = args.state.star_count.map { |i| new_star args } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # update~ - Inside source: true *** True Line Result # update ** Processing line: ~ args.state.stars.each { |s| move_star args, s }~ - Inside source: true *** True Line Result args.state.stars.each { |s| move_star args, s } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render~ - Inside source: true *** True Line Result # render ** Processing line: ~ args.outputs.sprites << args.state.stars~ - Inside source: true *** True Line Result args.outputs.sprites << args.state.stars ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ - Inside source: true *** True Line Result args.outputs.primitives << args.gtk.current_framerate_primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # resets game, and assigns star count given by user~ - Inside source: true *** True Line Result # resets game, and assigns star count given by user ** Processing line: ~ def reset_with count: count~ - Inside source: true *** True Line Result def reset_with count: count ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ $gtk.args.state.star_count = count~ - Inside source: true *** True Line Result $gtk.args.state.star_count = count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Performance - Sprites As Struct - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Performance - Sprites As Struct - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/09_performance/03_sprites_as_struct/app/main.rb~ - Inside source: true *** True Line Result # ./samples/09_performance/03_sprites_as_struct/app/main.rb ** Processing line: ~ # create a Struct variant that allows for named parameters on construction.~ - Inside source: true *** True Line Result # create a Struct variant that allows for named parameters on construction. ** Processing line: ~ class NamedStruct < Struct~ - Inside source: true *** True Line Result class NamedStruct < Struct ** Processing line: ~ def initialize **opts~ - Inside source: true *** True Line Result def initialize **opts ** Processing line: ~ super(*members.map { |k| opts[k] })~ - Inside source: true *** True Line Result super(*members.map { |k| opts[k] }) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # create a Star NamedStruct~ - Inside source: true *** True Line Result # create a Star NamedStruct ** Processing line: ~ Star = NamedStruct.new(:x, :y, :w, :h, :path, :s,~ - Inside source: true *** True Line Result Star = NamedStruct.new(:x, :y, :w, :h, :path, :s, ** Processing line: ~ :angle, :angle_anchor_x, :angle_anchor_y,~ - Inside source: true *** True Line Result :angle, :angle_anchor_x, :angle_anchor_y, ** Processing line: ~ :r, :g, :b, :a,~ - Inside source: true *** True Line Result :r, :g, :b, :a, ** Processing line: ~ :tile_x, :tile_y,~ - Inside source: true *** True Line Result :tile_x, :tile_y, ** Processing line: ~ :tile_w, :tile_h,~ - Inside source: true *** True Line Result :tile_w, :tile_h, ** Processing line: ~ :source_x, :source_y,~ - Inside source: true *** True Line Result :source_x, :source_y, ** Processing line: ~ :source_w, :source_h,~ - Inside source: true *** True Line Result :source_w, :source_h, ** Processing line: ~ :flip_horizontally, :flip_vertically,~ - Inside source: true *** True Line Result :flip_horizontally, :flip_vertically, ** Processing line: ~ :blendmode_enum)~ - Inside source: true *** True Line Result :blendmode_enum) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sprites represented as Structs. They require a little bit more code than Hashes,~ - Inside source: true *** True Line Result # Sprites represented as Structs. They require a little bit more code than Hashes, ** Processing line: ~ # but are the a little faster to render too.~ - Inside source: true *** True Line Result # but are the a little faster to render too. ** Processing line: ~ def random_x args~ - Inside source: true *** True Line Result def random_x args ** Processing line: ~ (args.grid.w.randomize :ratio) * -1~ - Inside source: true *** True Line Result (args.grid.w.randomize :ratio) * -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def random_y args~ - Inside source: true *** True Line Result def random_y args ** Processing line: ~ (args.grid.h.randomize :ratio) * -1~ - Inside source: true *** True Line Result (args.grid.h.randomize :ratio) * -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def random_speed~ - Inside source: true *** True Line Result def random_speed ** Processing line: ~ 1 + (4.randomize :ratio)~ - Inside source: true *** True Line Result 1 + (4.randomize :ratio) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_star args~ - Inside source: true *** True Line Result def new_star args ** Processing line: ~ Star.new x: (random_x args),~ - Inside source: true *** True Line Result Star.new x: (random_x args), ** Processing line: ~ y: (random_y args),~ - Inside source: true *** True Line Result y: (random_y args), ** Processing line: ~ w: 4, h: 4,~ - Inside source: true *** True Line Result w: 4, h: 4, ** Processing line: ~ path: 'sprites/tiny-star.png',~ - Inside source: true *** True Line Result path: 'sprites/tiny-star.png', ** Processing line: ~ s: random_speed~ - Inside source: true *** True Line Result s: random_speed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_star args, star~ - Inside source: true *** True Line Result def move_star args, star ** Processing line: ~ star.x += star[:s]~ - Inside source: true *** True Line Result star.x += star[:s] ** Processing line: ~ star.y += star[:s]~ - Inside source: true *** True Line Result star.y += star[:s] ** Processing line: ~ if star.x > args.grid.w || star.y > args.grid.h~ - Inside source: true *** True Line Result if star.x > args.grid.w || star.y > args.grid.h ** Processing line: ~ star.x = (random_x args)~ - Inside source: true *** True Line Result star.x = (random_x args) ** Processing line: ~ star.y = (random_y args)~ - Inside source: true *** True Line Result star.y = (random_y args) ** Processing line: ~ star[:s] = random_speed~ - Inside source: true *** True Line Result star[:s] = random_speed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.star_count ||= 0~ - Inside source: true *** True Line Result args.state.star_count ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # sets console command when sample app initially opens~ - Inside source: true *** True Line Result # sets console command when sample app initially opens ** Processing line: ~ if Kernel.global_tick_count == 0~ - Inside source: true *** True Line Result if Kernel.global_tick_count == 0 ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts "========================================================="~ - Inside source: true *** True Line Result puts "=========================================================" ** Processing line: ~ puts "* INFO: Sprites, Structs"~ - Inside source: true *** True Line Result puts "* INFO: Sprites, Structs" ** Processing line: ~ puts "* INFO: Please specify the number of sprites to render."~ - Inside source: true *** True Line Result puts "* INFO: Please specify the number of sprites to render." ** Processing line: ~ args.gtk.console.set_command "reset_with count: 100"~ - Inside source: true *** True Line Result args.gtk.console.set_command "reset_with count: 100" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # init~ - Inside source: true *** True Line Result # init ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.state.stars = args.state.star_count.map { |i| new_star args }~ - Inside source: true *** True Line Result args.state.stars = args.state.star_count.map { |i| new_star args } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # update~ - Inside source: true *** True Line Result # update ** Processing line: ~ args.state.stars.each { |s| move_star args, s }~ - Inside source: true *** True Line Result args.state.stars.each { |s| move_star args, s } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render~ - Inside source: true *** True Line Result # render ** Processing line: ~ args.outputs.sprites << args.state.stars~ - Inside source: true *** True Line Result args.outputs.sprites << args.state.stars ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ - Inside source: true *** True Line Result args.outputs.primitives << args.gtk.current_framerate_primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # resets game, and assigns star count given by user~ - Inside source: true *** True Line Result # resets game, and assigns star count given by user ** Processing line: ~ def reset_with count: count~ - Inside source: true *** True Line Result def reset_with count: count ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ $gtk.args.state.star_count = count~ - Inside source: true *** True Line Result $gtk.args.state.star_count = count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Performance - Sprites As Strict Entities - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Performance - Sprites As Strict Entities - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/09_performance/04_sprites_as_strict_entities/app/main.rb~ - Inside source: true *** True Line Result # ./samples/09_performance/04_sprites_as_strict_entities/app/main.rb ** Processing line: ~ # Sprites represented as StrictEntities using the queue ~args.outputs.sprites~~ - Inside source: true *** True Line Result # Sprites represented as StrictEntities using the queue ~args.outputs.sprites~ ** Processing line: ~ # yields apis access similar to Entities, but all properties that can be set on the~ - Inside source: true *** True Line Result # yields apis access similar to Entities, but all properties that can be set on the ** Processing line: ~ # entity must be predefined with a default value. Strict entities do not support the~ - Inside source: true *** True Line Result # entity must be predefined with a default value. Strict entities do not support the ** Processing line: ~ # addition of new properties after the fact. They are more performant than OpenEntities~ - Inside source: true *** True Line Result # addition of new properties after the fact. They are more performant than OpenEntities ** Processing line: ~ # because of this constraint.~ - Inside source: true *** True Line Result # because of this constraint. ** Processing line: ~ def random_x args~ - Inside source: true *** True Line Result def random_x args ** Processing line: ~ (args.grid.w.randomize :ratio) * -1~ - Inside source: true *** True Line Result (args.grid.w.randomize :ratio) * -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def random_y args~ - Inside source: true *** True Line Result def random_y args ** Processing line: ~ (args.grid.h.randomize :ratio) * -1~ - Inside source: true *** True Line Result (args.grid.h.randomize :ratio) * -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def random_speed~ - Inside source: true *** True Line Result def random_speed ** Processing line: ~ 1 + (4.randomize :ratio)~ - Inside source: true *** True Line Result 1 + (4.randomize :ratio) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_star args~ - Inside source: true *** True Line Result def new_star args ** Processing line: ~ args.state.new_entity_strict(:star,~ - Inside source: true *** True Line Result args.state.new_entity_strict(:star, ** Processing line: ~ x: (random_x args),~ - Inside source: true *** True Line Result x: (random_x args), ** Processing line: ~ y: (random_y args),~ - Inside source: true *** True Line Result y: (random_y args), ** Processing line: ~ w: 4, h: 4,~ - Inside source: true *** True Line Result w: 4, h: 4, ** Processing line: ~ path: 'sprites/tiny-star.png',~ - Inside source: true *** True Line Result path: 'sprites/tiny-star.png', ** Processing line: ~ s: random_speed) do |entity|~ - Inside source: true *** True Line Result s: random_speed) do |entity| ** Processing line: ~ # invoke attr_sprite so that it responds to~ - Inside source: true *** True Line Result # invoke attr_sprite so that it responds to ** Processing line: ~ # all properties that are required to render a sprite~ - Inside source: true *** True Line Result # all properties that are required to render a sprite ** Processing line: ~ entity.attr_sprite~ - Inside source: true *** True Line Result entity.attr_sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_star args, star~ - Inside source: true *** True Line Result def move_star args, star ** Processing line: ~ star.x += star.s~ - Inside source: true *** True Line Result star.x += star.s ** Processing line: ~ star.y += star.s~ - Inside source: true *** True Line Result star.y += star.s ** Processing line: ~ if star.x > args.grid.w || star.y > args.grid.h~ - Inside source: true *** True Line Result if star.x > args.grid.w || star.y > args.grid.h ** Processing line: ~ star.x = (random_x args)~ - Inside source: true *** True Line Result star.x = (random_x args) ** Processing line: ~ star.y = (random_y args)~ - Inside source: true *** True Line Result star.y = (random_y args) ** Processing line: ~ star.s = random_speed~ - Inside source: true *** True Line Result star.s = random_speed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.star_count ||= 0~ - Inside source: true *** True Line Result args.state.star_count ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # sets console command when sample app initially opens~ - Inside source: true *** True Line Result # sets console command when sample app initially opens ** Processing line: ~ if Kernel.global_tick_count == 0~ - Inside source: true *** True Line Result if Kernel.global_tick_count == 0 ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts "========================================================="~ - Inside source: true *** True Line Result puts "=========================================================" ** Processing line: ~ puts "* INFO: Sprites, Strict Entities"~ - Inside source: true *** True Line Result puts "* INFO: Sprites, Strict Entities" ** Processing line: ~ puts "* INFO: Please specify the number of sprites to render."~ - Inside source: true *** True Line Result puts "* INFO: Please specify the number of sprites to render." ** Processing line: ~ args.gtk.console.set_command "reset_with count: 100"~ - Inside source: true *** True Line Result args.gtk.console.set_command "reset_with count: 100" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # init~ - Inside source: true *** True Line Result # init ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.state.stars = args.state.star_count.map { |i| new_star args }~ - Inside source: true *** True Line Result args.state.stars = args.state.star_count.map { |i| new_star args } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # update~ - Inside source: true *** True Line Result # update ** Processing line: ~ args.state.stars.each { |s| move_star args, s }~ - Inside source: true *** True Line Result args.state.stars.each { |s| move_star args, s } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render~ - Inside source: true *** True Line Result # render ** Processing line: ~ args.outputs.sprites << args.state.stars~ - Inside source: true *** True Line Result args.outputs.sprites << args.state.stars ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ - Inside source: true *** True Line Result args.outputs.primitives << args.gtk.current_framerate_primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # resets game, and assigns star count given by user~ - Inside source: true *** True Line Result # resets game, and assigns star count given by user ** Processing line: ~ def reset_with count: count~ - Inside source: true *** True Line Result def reset_with count: count ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ $gtk.args.state.star_count = count~ - Inside source: true *** True Line Result $gtk.args.state.star_count = count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Performance - Sprites As Classes - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Performance - Sprites As Classes - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/09_performance/05_sprites_as_classes/app/main.rb~ - Inside source: true *** True Line Result # ./samples/09_performance/05_sprites_as_classes/app/main.rb ** Processing line: ~ # Sprites represented as Classes using the queue ~args.outputs.sprites~.~ - Inside source: true *** True Line Result # Sprites represented as Classes using the queue ~args.outputs.sprites~. ** Processing line: ~ # gives you full control of property declaration and method invocation.~ - Inside source: true *** True Line Result # gives you full control of property declaration and method invocation. ** Processing line: ~ # They are more performant than OpenEntities and StrictEntities, but more code upfront.~ - Inside source: true *** True Line Result # They are more performant than OpenEntities and StrictEntities, but more code upfront. ** Processing line: ~ class Star~ - Inside source: true *** True Line Result class Star ** Processing line: ~ attr_sprite~ - Inside source: true *** True Line Result attr_sprite ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize grid~ - Inside source: true *** True Line Result def initialize grid ** Processing line: ~ @grid = grid~ - Inside source: true *** True Line Result @grid = grid ** Processing line: ~ @x = (rand @grid.w) * -1~ - Inside source: true *** True Line Result @x = (rand @grid.w) * -1 ** Processing line: ~ @y = (rand @grid.h) * -1~ - Inside source: true *** True Line Result @y = (rand @grid.h) * -1 ** Processing line: ~ @w = 4~ - Inside source: true *** True Line Result @w = 4 ** Processing line: ~ @h = 4~ - Inside source: true *** True Line Result @h = 4 ** Processing line: ~ @s = 1 + (4.randomize :ratio)~ - Inside source: true *** True Line Result @s = 1 + (4.randomize :ratio) ** Processing line: ~ @path = 'sprites/tiny-star.png'~ - Inside source: true *** True Line Result @path = 'sprites/tiny-star.png' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move~ - Inside source: true *** True Line Result def move ** Processing line: ~ @x += @s~ - Inside source: true *** True Line Result @x += @s ** Processing line: ~ @y += @s~ - Inside source: true *** True Line Result @y += @s ** Processing line: ~ @x = (rand @grid.w) * -1 if @x > @grid.right~ - Inside source: true *** True Line Result @x = (rand @grid.w) * -1 if @x > @grid.right ** Processing line: ~ @y = (rand @grid.h) * -1 if @y > @grid.top~ - Inside source: true *** True Line Result @y = (rand @grid.h) * -1 if @y > @grid.top ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # calls methods needed for game to run properly~ - Inside source: true *** True Line Result # calls methods needed for game to run properly ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # sets console command when sample app initially opens~ - Inside source: true *** True Line Result # sets console command when sample app initially opens ** Processing line: ~ if Kernel.global_tick_count == 0~ - Inside source: true *** True Line Result if Kernel.global_tick_count == 0 ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts "========================================================="~ - Inside source: true *** True Line Result puts "=========================================================" ** Processing line: ~ puts "* INFO: Sprites, Classes"~ - Inside source: true *** True Line Result puts "* INFO: Sprites, Classes" ** Processing line: ~ puts "* INFO: Please specify the number of sprites to render."~ - Inside source: true *** True Line Result puts "* INFO: Please specify the number of sprites to render." ** Processing line: ~ args.gtk.console.set_command "reset_with count: 100"~ - Inside source: true *** True Line Result args.gtk.console.set_command "reset_with count: 100" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # init~ - Inside source: true *** True Line Result # init ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.state.stars = args.state.star_count.map { |i| Star.new args.grid }~ - Inside source: true *** True Line Result args.state.stars = args.state.star_count.map { |i| Star.new args.grid } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # update~ - Inside source: true *** True Line Result # update ** Processing line: ~ args.state.stars.each(&:move)~ - Inside source: true *** True Line Result args.state.stars.each(&:move) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render~ - Inside source: true *** True Line Result # render ** Processing line: ~ args.outputs.sprites << args.state.stars~ - Inside source: true *** True Line Result args.outputs.sprites << args.state.stars ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ - Inside source: true *** True Line Result args.outputs.primitives << args.gtk.current_framerate_primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # resets game, and assigns star count given by user~ - Inside source: true *** True Line Result # resets game, and assigns star count given by user ** Processing line: ~ def reset_with count: count~ - Inside source: true *** True Line Result def reset_with count: count ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ $gtk.args.state.star_count = count~ - Inside source: true *** True Line Result $gtk.args.state.star_count = count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Performance - Static Sprites As Classes - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Performance - Static Sprites As Classes - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/09_performance/06_static_sprites_as_classes/app/main.rb~ - Inside source: true *** True Line Result # ./samples/09_performance/06_static_sprites_as_classes/app/main.rb ** Processing line: ~ # Sprites represented as Classes using the queue ~args.outputs.static_sprites~.~ - Inside source: true *** True Line Result # Sprites represented as Classes using the queue ~args.outputs.static_sprites~. ** Processing line: ~ # bypasses the queue behavior of ~args.outputs.sprites~. All instances are held~ - Inside source: true *** True Line Result # bypasses the queue behavior of ~args.outputs.sprites~. All instances are held ** Processing line: ~ # by reference. You get better performance, but you are mutating state of held objects~ - Inside source: true *** True Line Result # by reference. You get better performance, but you are mutating state of held objects ** Processing line: ~ # which is less functional/data oriented.~ - Inside source: true *** True Line Result # which is less functional/data oriented. ** Processing line: ~ class Star~ - Inside source: true *** True Line Result class Star ** Processing line: ~ attr_sprite~ - Inside source: true *** True Line Result attr_sprite ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize grid~ - Inside source: true *** True Line Result def initialize grid ** Processing line: ~ @grid = grid~ - Inside source: true *** True Line Result @grid = grid ** Processing line: ~ @x = (rand @grid.w) * -1~ - Inside source: true *** True Line Result @x = (rand @grid.w) * -1 ** Processing line: ~ @y = (rand @grid.h) * -1~ - Inside source: true *** True Line Result @y = (rand @grid.h) * -1 ** Processing line: ~ @w = 4~ - Inside source: true *** True Line Result @w = 4 ** Processing line: ~ @h = 4~ - Inside source: true *** True Line Result @h = 4 ** Processing line: ~ @s = 1 + (4.randomize :ratio)~ - Inside source: true *** True Line Result @s = 1 + (4.randomize :ratio) ** Processing line: ~ @path = 'sprites/tiny-star.png'~ - Inside source: true *** True Line Result @path = 'sprites/tiny-star.png' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move~ - Inside source: true *** True Line Result def move ** Processing line: ~ @x += @s~ - Inside source: true *** True Line Result @x += @s ** Processing line: ~ @y += @s~ - Inside source: true *** True Line Result @y += @s ** Processing line: ~ @x = (rand @grid.w) * -1 if @x > @grid.right~ - Inside source: true *** True Line Result @x = (rand @grid.w) * -1 if @x > @grid.right ** Processing line: ~ @y = (rand @grid.h) * -1 if @y > @grid.top~ - Inside source: true *** True Line Result @y = (rand @grid.h) * -1 if @y > @grid.top ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # calls methods needed for game to run properly~ - Inside source: true *** True Line Result # calls methods needed for game to run properly ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # sets console command when sample app initially opens~ - Inside source: true *** True Line Result # sets console command when sample app initially opens ** Processing line: ~ if Kernel.global_tick_count == 0~ - Inside source: true *** True Line Result if Kernel.global_tick_count == 0 ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts "========================================================="~ - Inside source: true *** True Line Result puts "=========================================================" ** Processing line: ~ puts "* INFO: Static Sprites, Classes"~ - Inside source: true *** True Line Result puts "* INFO: Static Sprites, Classes" ** Processing line: ~ puts "* INFO: Please specify the number of sprites to render."~ - Inside source: true *** True Line Result puts "* INFO: Please specify the number of sprites to render." ** Processing line: ~ args.gtk.console.set_command "reset_with count: 100"~ - Inside source: true *** True Line Result args.gtk.console.set_command "reset_with count: 100" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # init~ - Inside source: true *** True Line Result # init ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.state.stars = args.state.star_count.map { |i| Star.new args.grid }~ - Inside source: true *** True Line Result args.state.stars = args.state.star_count.map { |i| Star.new args.grid } ** Processing line: ~ args.outputs.static_sprites << args.state.stars~ - Inside source: true *** True Line Result args.outputs.static_sprites << args.state.stars ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # update~ - Inside source: true *** True Line Result # update ** Processing line: ~ args.state.stars.each(&:move)~ - Inside source: true *** True Line Result args.state.stars.each(&:move) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render~ - Inside source: true *** True Line Result # render ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ - Inside source: true *** True Line Result args.outputs.primitives << args.gtk.current_framerate_primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # resets game, and assigns star count given by user~ - Inside source: true *** True Line Result # resets game, and assigns star count given by user ** Processing line: ~ def reset_with count: count~ - Inside source: true *** True Line Result def reset_with count: count ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ $gtk.args.state.star_count = count~ - Inside source: true *** True Line Result $gtk.args.state.star_count = count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Performance - Static Sprites As Classes With Custom Drawing - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Performance - Static Sprites As Classes With Custom Drawing - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/09_performance/07_static_sprites_as_classes_with_custom_drawing/app/main.rb~ - Inside source: true *** True Line Result # ./samples/09_performance/07_static_sprites_as_classes_with_custom_drawing/app/main.rb ** Processing line: ~ # Sprites represented as Classes, with a draw_override method, and using the queue ~args.outputs.static_sprites~.~ - Inside source: true *** True Line Result # Sprites represented as Classes, with a draw_override method, and using the queue ~args.outputs.static_sprites~. ** Processing line: ~ # is the fastest approach. This is comparable to what other game engines set as the default behavior.~ - Inside source: true *** True Line Result # is the fastest approach. This is comparable to what other game engines set as the default behavior. ** Processing line: ~ # There are tradeoffs for all this speed if the creation of a full blown class, and bypassing~ - Inside source: true *** True Line Result # There are tradeoffs for all this speed if the creation of a full blown class, and bypassing ** Processing line: ~ # functional/data-oriented practices.~ - Inside source: true *** True Line Result # functional/data-oriented practices. ** Processing line: ~ class Star~ - Inside source: true *** True Line Result class Star ** Processing line: ~ def initialize grid~ - Inside source: true *** True Line Result def initialize grid ** Processing line: ~ @grid = grid~ - Inside source: true *** True Line Result @grid = grid ** Processing line: ~ @x = (rand @grid.w) * -1~ - Inside source: true *** True Line Result @x = (rand @grid.w) * -1 ** Processing line: ~ @y = (rand @grid.h) * -1~ - Inside source: true *** True Line Result @y = (rand @grid.h) * -1 ** Processing line: ~ @w = 4~ - Inside source: true *** True Line Result @w = 4 ** Processing line: ~ @h = 4~ - Inside source: true *** True Line Result @h = 4 ** Processing line: ~ @s = 1 + (4.randomize :ratio)~ - Inside source: true *** True Line Result @s = 1 + (4.randomize :ratio) ** Processing line: ~ @path = 'sprites/tiny-star.png'~ - Inside source: true *** True Line Result @path = 'sprites/tiny-star.png' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move~ - Inside source: true *** True Line Result def move ** Processing line: ~ @x += @s~ - Inside source: true *** True Line Result @x += @s ** Processing line: ~ @y += @s~ - Inside source: true *** True Line Result @y += @s ** Processing line: ~ @x = (rand @grid.w) * -1 if @x > @grid.right~ - Inside source: true *** True Line Result @x = (rand @grid.w) * -1 if @x > @grid.right ** Processing line: ~ @y = (rand @grid.h) * -1 if @y > @grid.top~ - Inside source: true *** True Line Result @y = (rand @grid.h) * -1 if @y > @grid.top ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the object that is in args.outputs.sprites (or static_sprites)~ - Inside source: true *** True Line Result # if the object that is in args.outputs.sprites (or static_sprites) ** Processing line: ~ # respond_to? :draw_override, then the method is invoked giving you~ - Inside source: true *** True Line Result # respond_to? :draw_override, then the method is invoked giving you ** Processing line: ~ # access to the class used to draw to the canvas.~ - Inside source: true *** True Line Result # access to the class used to draw to the canvas. ** Processing line: ~ def draw_override ffi_draw~ - Inside source: true *** True Line Result def draw_override ffi_draw ** Processing line: ~ # first move then draw~ - Inside source: true *** True Line Result # first move then draw ** Processing line: ~ move~ - Inside source: true *** True Line Result move ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The argument order for ffi.draw_sprite is:~ - Inside source: true *** True Line Result # The argument order for ffi.draw_sprite is: ** Processing line: ~ # x, y, w, h, path~ - Inside source: true *** True Line Result # x, y, w, h, path ** Processing line: ~ ffi_draw.draw_sprite @x, @y, @w, @h, @path~ - Inside source: true *** True Line Result ffi_draw.draw_sprite @x, @y, @w, @h, @path ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The argument order for ffi_draw.draw_sprite_2 is (pass in nil for default value):~ - Inside source: true *** True Line Result # The argument order for ffi_draw.draw_sprite_2 is (pass in nil for default value): ** Processing line: ~ # x, y, w, h, path,~ - Inside source: true *** True Line Result # x, y, w, h, path, ** Processing line: ~ # angle, alpha~ - Inside source: true *** True Line Result # angle, alpha ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The argument order for ffi_draw.draw_sprite_3 is:~ - Inside source: true *** True Line Result # The argument order for ffi_draw.draw_sprite_3 is: ** Processing line: ~ # x, y, w, h,~ - Inside source: true *** True Line Result # x, y, w, h, ** Processing line: ~ # path,~ - Inside source: true *** True Line Result # path, ** Processing line: ~ # angle,~ - Inside source: true *** True Line Result # angle, ** Processing line: ~ # alpha, red_saturation, green_saturation, blue_saturation~ - Inside source: true *** True Line Result # alpha, red_saturation, green_saturation, blue_saturation ** Processing line: ~ # tile_x, tile_y, tile_w, tile_h,~ - Inside source: true *** True Line Result # tile_x, tile_y, tile_w, tile_h, ** Processing line: ~ # flip_horizontally, flip_vertically,~ - Inside source: true *** True Line Result # flip_horizontally, flip_vertically, ** Processing line: ~ # angle_anchor_x, angle_anchor_y,~ - Inside source: true *** True Line Result # angle_anchor_x, angle_anchor_y, ** Processing line: ~ # source_x, source_y, source_w, source_h~ - Inside source: true *** True Line Result # source_x, source_y, source_w, source_h ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The argument order for ffi_draw.draw_sprite_4 is:~ - Inside source: true *** True Line Result # The argument order for ffi_draw.draw_sprite_4 is: ** Processing line: ~ # x, y, w, h,~ - Inside source: true *** True Line Result # x, y, w, h, ** Processing line: ~ # path,~ - Inside source: true *** True Line Result # path, ** Processing line: ~ # angle,~ - Inside source: true *** True Line Result # angle, ** Processing line: ~ # alpha, red_saturation, green_saturation, blue_saturation~ - Inside source: true *** True Line Result # alpha, red_saturation, green_saturation, blue_saturation ** Processing line: ~ # tile_x, tile_y, tile_w, tile_h,~ - Inside source: true *** True Line Result # tile_x, tile_y, tile_w, tile_h, ** Processing line: ~ # flip_horizontally, flip_vertically,~ - Inside source: true *** True Line Result # flip_horizontally, flip_vertically, ** Processing line: ~ # angle_anchor_x, angle_anchor_y,~ - Inside source: true *** True Line Result # angle_anchor_x, angle_anchor_y, ** Processing line: ~ # source_x, source_y, source_w, source_h,~ - Inside source: true *** True Line Result # source_x, source_y, source_w, source_h, ** Processing line: ~ # blendmode_enum~ - Inside source: true *** True Line Result # blendmode_enum ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # calls methods needed for game to run properly~ - Inside source: true *** True Line Result # calls methods needed for game to run properly ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # sets console command when sample app initially opens~ - Inside source: true *** True Line Result # sets console command when sample app initially opens ** Processing line: ~ if Kernel.global_tick_count == 0~ - Inside source: true *** True Line Result if Kernel.global_tick_count == 0 ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts ""~ - Inside source: true *** True Line Result puts "" ** Processing line: ~ puts "========================================================="~ - Inside source: true *** True Line Result puts "=========================================================" ** Processing line: ~ puts "* INFO: Static Sprites, Classes, Draw Override"~ - Inside source: true *** True Line Result puts "* INFO: Static Sprites, Classes, Draw Override" ** Processing line: ~ puts "* INFO: Please specify the number of sprites to render."~ - Inside source: true *** True Line Result puts "* INFO: Please specify the number of sprites to render." ** Processing line: ~ args.gtk.console.set_command "reset_with count: 100"~ - Inside source: true *** True Line Result args.gtk.console.set_command "reset_with count: 100" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # init~ - Inside source: true *** True Line Result # init ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.state.stars = args.state.star_count.map { |i| Star.new args.grid }~ - Inside source: true *** True Line Result args.state.stars = args.state.star_count.map { |i| Star.new args.grid } ** Processing line: ~ args.outputs.static_sprites << args.state.stars~ - Inside source: true *** True Line Result args.outputs.static_sprites << args.state.stars ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render framerate~ - Inside source: true *** True Line Result # render framerate ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ - Inside source: true *** True Line Result args.outputs.primitives << args.gtk.current_framerate_primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # resets game, and assigns star count given by user~ - Inside source: true *** True Line Result # resets game, and assigns star count given by user ** Processing line: ~ def reset_with count: count~ - Inside source: true *** True Line Result def reset_with count: count ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ $gtk.args.state.star_count = count~ - Inside source: true *** True Line Result $gtk.args.state.star_count = count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Performance - Collision Limits - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Performance - Collision Limits - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/09_performance/08_collision_limits/app/main.rb~ - Inside source: true *** True Line Result # ./samples/09_performance/08_collision_limits/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~ - find_all: Finds all elements of a collection that meet certain requirements.~ - Inside source: true *** True Line Result - find_all: Finds all elements of a collection that meet certain requirements. ** Processing line: ~ In this sample app, we're finding all bodies that intersect with the center body.~ - Inside source: true *** True Line Result In this sample app, we're finding all bodies that intersect with the center body. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.solids: An array. The values generate a solid.~ - Inside source: true *** True Line Result - args.outputs.solids: An array. The values generate a solid. ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE]~ - Inside source: true *** True Line Result The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE] ** Processing line: ~ For more information about solids, go to mygame/documentation/03-solids-and-borders.md.~ - Inside source: true *** True Line Result For more information about solids, go to mygame/documentation/03-solids-and-borders.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ - Inside source: true *** True Line Result - args.outputs.labels: An array. The values generate a label. ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ - Inside source: true *** True Line Result For more information about labels, go to mygame/documentation/02-labels.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - ARRAY#intersect_rect?: Returns true or false depending on if two rectangles intersect.~ - Inside source: true *** True Line Result - ARRAY#intersect_rect?: Returns true or false depending on if two rectangles intersect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This code demonstrates moving objects that loop around once they exceed the scope of the screen,~ - Inside source: true *** True Line Result # This code demonstrates moving objects that loop around once they exceed the scope of the screen, ** Processing line: ~ # which has dimensions of 1280 by 720, and also detects collisions between objects called "bodies".~ - Inside source: true *** True Line Result # which has dimensions of 1280 by 720, and also detects collisions between objects called "bodies". ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def body_count num~ - Inside source: true *** True Line Result def body_count num ** Processing line: ~ $gtk.args.state.other_bodies = num.map { [1280 * rand, 720 * rand, 10, 10] } # other_bodies set using num collection~ - Inside source: true *** True Line Result $gtk.args.state.other_bodies = num.map { [1280 * rand, 720 * rand, 10, 10] } # other_bodies set using num collection ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Center body's values are set using an array~ - Inside source: true *** True Line Result # Center body's values are set using an array ** Processing line: ~ # Map is used to set values of 2000 other bodies~ - Inside source: true *** True Line Result # Map is used to set values of 2000 other bodies ** Processing line: ~ # All bodies that intersect with center body are stored in collisions collection~ - Inside source: true *** True Line Result # All bodies that intersect with center body are stored in collisions collection ** Processing line: ~ args.state.center_body ||= [640 - 100, 360 - 100, 200, 200] # calculations done to place body in center~ - Inside source: true *** True Line Result args.state.center_body ||= [640 - 100, 360 - 100, 200, 200] # calculations done to place body in center ** Processing line: ~ args.state.other_bodies ||= 2000.map { [1280 * rand, 720 * rand, 10, 10] } # 2000 bodies given random position on screen~ - Inside source: true *** True Line Result args.state.other_bodies ||= 2000.map { [1280 * rand, 720 * rand, 10, 10] } # 2000 bodies given random position on screen ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # finds all bodies that intersect with center body, stores them in collisions~ - Inside source: true *** True Line Result # finds all bodies that intersect with center body, stores them in collisions ** Processing line: ~ collisions = args.state.other_bodies.find_all { |b| b.intersect_rect? args.state.center_body }~ - Inside source: true *** True Line Result collisions = args.state.other_bodies.find_all { |b| b.intersect_rect? args.state.center_body } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.borders << args.state.center_body # outputs center body as a black border~ - Inside source: true *** True Line Result args.borders << args.state.center_body # outputs center body as a black border ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # transparency changes based on number of collisions; the more collisions, the redder (more transparent) the box becomes~ - Inside source: true *** True Line Result # transparency changes based on number of collisions; the more collisions, the redder (more transparent) the box becomes ** Processing line: ~ args.solids << [args.state.center_body, 255, 0, 0, collisions.length * 5] # center body is red solid~ - Inside source: true *** True Line Result args.solids << [args.state.center_body, 255, 0, 0, collisions.length * 5] # center body is red solid ** Processing line: ~ args.solids << args.state.other_bodies # other bodies are output as (black) solids, as well~ - Inside source: true *** True Line Result args.solids << args.state.other_bodies # other bodies are output as (black) solids, as well ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.labels << [10, 30, args.gtk.current_framerate] # outputs frame rate in bottom left corner~ - Inside source: true *** True Line Result args.labels << [10, 30, args.gtk.current_framerate] # outputs frame rate in bottom left corner ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Bodies are returned to bottom left corner if positions exceed scope of screen~ - Inside source: true *** True Line Result # Bodies are returned to bottom left corner if positions exceed scope of screen ** Processing line: ~ args.state.other_bodies.each do |b| # for each body in the other_bodies collection~ - Inside source: true *** True Line Result args.state.other_bodies.each do |b| # for each body in the other_bodies collection ** Processing line: ~ b.x += 5 # x and y are both incremented by 5~ - Inside source: true *** True Line Result b.x += 5 # x and y are both incremented by 5 ** Processing line: ~ b.y += 5~ - Inside source: true *** True Line Result b.y += 5 ** Processing line: ~ b.x = 0 if b.x > 1280 # x becomes 0 if star exceeds scope of screen (goes too far right)~ - Inside source: true *** True Line Result b.x = 0 if b.x > 1280 # x becomes 0 if star exceeds scope of screen (goes too far right) ** Processing line: ~ b.y = 0 if b.y > 720 # y becomes 0 if star exceeds scope of screen (goes too far up)~ - Inside source: true *** True Line Result b.y = 0 if b.y > 720 # y becomes 0 if star exceeds scope of screen (goes too far up) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Resets the game.~ - Inside source: true *** True Line Result # Resets the game. ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Logging - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Logging - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/00_logging/app/main.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/00_logging/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.background_color = [255, 255, 255, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [255, 255, 255, 0] ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.gtk.log_spam "log level spam"~ - Inside source: true *** True Line Result args.gtk.log_spam "log level spam" ** Processing line: ~ args.gtk.log_debug "log level debug"~ - Inside source: true *** True Line Result args.gtk.log_debug "log level debug" ** Processing line: ~ args.gtk.log_info "log level info"~ - Inside source: true *** True Line Result args.gtk.log_info "log level info" ** Processing line: ~ args.gtk.log_warn "log level warn"~ - Inside source: true *** True Line Result args.gtk.log_warn "log level warn" ** Processing line: ~ args.gtk.log_error "log level error"~ - Inside source: true *** True Line Result args.gtk.log_error "log level error" ** Processing line: ~ args.gtk.log_unfiltered "log level unfiltered"~ - Inside source: true *** True Line Result args.gtk.log_unfiltered "log level unfiltered" ** Processing line: ~ puts "This is a puts call"~ - Inside source: true *** True Line Result puts "This is a puts call" ** Processing line: ~ args.gtk.console.show~ - Inside source: true *** True Line Result args.gtk.console.show ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.tick_count == 60~ - Inside source: true *** True Line Result if args.state.tick_count == 60 ** Processing line: ~ puts "This is a puts call on tick 60"~ - Inside source: true *** True Line Result puts "This is a puts call on tick 60" ** Processing line: ~ elsif args.state.tick_count == 120~ - Inside source: true *** True Line Result elsif args.state.tick_count == 120 ** Processing line: ~ puts "This is a puts call on tick 120"~ - Inside source: true *** True Line Result puts "This is a puts call on tick 120" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Trace Debugging - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Trace Debugging - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/01_trace_debugging/app/main.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/01_trace_debugging/app/main.rb ** Processing line: ~ class Game~ - Inside source: true *** True Line Result class Game ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def method1 num~ - Inside source: true *** True Line Result def method1 num ** Processing line: ~ method2 num~ - Inside source: true *** True Line Result method2 num ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def method2 num~ - Inside source: true *** True Line Result def method2 num ** Processing line: ~ method3 num~ - Inside source: true *** True Line Result method3 num ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def method3 num~ - Inside source: true *** True Line Result def method3 num ** Processing line: ~ method4 num~ - Inside source: true *** True Line Result method4 num ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def method4 num~ - Inside source: true *** True Line Result def method4 num ** Processing line: ~ if num == 1~ - Inside source: true *** True Line Result if num == 1 ** Processing line: ~ puts "UNLUCKY #{num}."~ - Inside source: true *** True Line Result puts "UNLUCKY #{num}." ** Processing line: ~ state.unlucky_count += 1~ - Inside source: true *** True Line Result state.unlucky_count += 1 ** Processing line: ~ if state.unlucky_count > 3~ - Inside source: true *** True Line Result if state.unlucky_count > 3 ** Processing line: ~ raise "NAT 1 finally occurred. Check app/trace.txt for all method invocation history."~ - Inside source: true *** True Line Result raise "NAT 1 finally occurred. Check app/trace.txt for all method invocation history." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ puts "LUCKY #{num}."~ - Inside source: true *** True Line Result puts "LUCKY #{num}." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ state.roll_history ||= []~ - Inside source: true *** True Line Result state.roll_history ||= [] ** Processing line: ~ state.roll_history << rand(20) + 1~ - Inside source: true *** True Line Result state.roll_history << rand(20) + 1 ** Processing line: ~ state.countdown ||= 600~ - Inside source: true *** True Line Result state.countdown ||= 600 ** Processing line: ~ state.countdown -= 1~ - Inside source: true *** True Line Result state.countdown -= 1 ** Processing line: ~ state.unlucky_count ||= 0~ - Inside source: true *** True Line Result state.unlucky_count ||= 0 ** Processing line: ~ outputs.labels << [640, 360, "A dice roll of 1 will cause an exception.", 0, 1]~ - Inside source: true *** True Line Result outputs.labels << [640, 360, "A dice roll of 1 will cause an exception.", 0, 1] ** Processing line: ~ if state.countdown > 0~ - Inside source: true *** True Line Result if state.countdown > 0 ** Processing line: ~ outputs.labels << [640, 340, "Dice roll countdown: #{state.countdown}", 0, 1]~ - Inside source: true *** True Line Result outputs.labels << [640, 340, "Dice roll countdown: #{state.countdown}", 0, 1] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.attempts ||= 0~ - Inside source: true *** True Line Result state.attempts ||= 0 ** Processing line: ~ state.attempts += 1~ - Inside source: true *** True Line Result state.attempts += 1 ** Processing line: ~ outputs.labels << [640, 340, "ROLLING! #{state.attempts}", 0, 1]~ - Inside source: true *** True Line Result outputs.labels << [640, 340, "ROLLING! #{state.attempts}", 0, 1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ return if state.countdown > 0~ - Inside source: true *** True Line Result return if state.countdown > 0 ** Processing line: ~ method1 state.roll_history[-1]~ - Inside source: true *** True Line Result method1 state.roll_history[-1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $game = Game.new~ - Inside source: true *** True Line Result $game = Game.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ trace! $game # <------------------- TRACING ENABLED FOR THIS OBJECT~ - Inside source: true *** True Line Result trace! $game # <------------------- TRACING ENABLED FOR THIS OBJECT ** Processing line: ~ $game.args = args~ - Inside source: true *** True Line Result $game.args = args ** Processing line: ~ $game.tick~ - Inside source: true *** True Line Result $game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Trace Debugging Classes - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Trace Debugging Classes - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/02_trace_debugging_classes/app/main.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/02_trace_debugging_classes/app/main.rb ** Processing line: ~ class Foobar~ - Inside source: true *** True Line Result class Foobar ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ trace! # Trace is added to the constructor.~ - Inside source: true *** True Line Result trace! # Trace is added to the constructor. ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def clicky args~ - Inside source: true *** True Line Result def clicky args ** Processing line: ~ return unless args.inputs.mouse.click~ - Inside source: true *** True Line Result return unless args.inputs.mouse.click ** Processing line: ~ try_rand rand~ - Inside source: true *** True Line Result try_rand rand ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def try_rand num~ - Inside source: true *** True Line Result def try_rand num ** Processing line: ~ return if num < 0.9~ - Inside source: true *** True Line Result return if num < 0.9 ** Processing line: ~ raise "Exception finally occurred. Take a look at logs/trace.txt #{num}."~ - Inside source: true *** True Line Result raise "Exception finally occurred. Take a look at logs/trace.txt #{num}." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.labels << [640, 360, "Start clicking. Eventually an exception will be thrown. Then look at logs/trace.txt.", 0, 1]~ - Inside source: true *** True Line Result args.labels << [640, 360, "Start clicking. Eventually an exception will be thrown. Then look at logs/trace.txt.", 0, 1] ** Processing line: ~ args.state.foobar = Foobar.new if args.tick_count~ - Inside source: true *** True Line Result args.state.foobar = Foobar.new if args.tick_count ** Processing line: ~ return unless args.state.foobar~ - Inside source: true *** True Line Result return unless args.state.foobar ** Processing line: ~ args.state.foobar.clicky args~ - Inside source: true *** True Line Result args.state.foobar.clicky args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Unit Tests - benchmark_api_tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Unit Tests - benchmark_api_tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/benchmark_api_tests.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/03_unit_tests/benchmark_api_tests.rb ** Processing line: ~ def test_benchmark_api args, assert~ - Inside source: true *** True Line Result def test_benchmark_api args, assert ** Processing line: ~ result = args.gtk.benchmark iterations: 100,~ - Inside source: true *** True Line Result result = args.gtk.benchmark iterations: 100, ** Processing line: ~ only_one: -> () {~ - Inside source: true *** True Line Result only_one: -> () { ** Processing line: ~ r = 0~ - Inside source: true *** True Line Result r = 0 ** Processing line: ~ (1..100).each do |i|~ - Inside source: true *** True Line Result (1..100).each do |i| ** Processing line: ~ r += 1~ - Inside source: true *** True Line Result r += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.equal! result.first_place.name, :only_one~ - Inside source: true *** True Line Result assert.equal! result.first_place.name, :only_one ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result = args.gtk.benchmark iterations: 100,~ - Inside source: true *** True Line Result result = args.gtk.benchmark iterations: 100, ** Processing line: ~ iterations_100: -> () {~ - Inside source: true *** True Line Result iterations_100: -> () { ** Processing line: ~ r = 0~ - Inside source: true *** True Line Result r = 0 ** Processing line: ~ (1..100).each do |i|~ - Inside source: true *** True Line Result (1..100).each do |i| ** Processing line: ~ r += 1~ - Inside source: true *** True Line Result r += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ },~ - Inside source: true *** True Line Result }, ** Processing line: ~ iterations_50: -> () {~ - Inside source: true *** True Line Result iterations_50: -> () { ** Processing line: ~ r = 0~ - Inside source: true *** True Line Result r = 0 ** Processing line: ~ (1..50).each do |i|~ - Inside source: true *** True Line Result (1..50).each do |i| ** Processing line: ~ r += 1~ - Inside source: true *** True Line Result r += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.equal! result.first_place.name, :iterations_50~ - Inside source: true *** True Line Result assert.equal! result.first_place.name, :iterations_50 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result = args.gtk.benchmark iterations: 1,~ - Inside source: true *** True Line Result result = args.gtk.benchmark iterations: 1, ** Processing line: ~ iterations_100: -> () {~ - Inside source: true *** True Line Result iterations_100: -> () { ** Processing line: ~ r = 0~ - Inside source: true *** True Line Result r = 0 ** Processing line: ~ (1..100).each do |i|~ - Inside source: true *** True Line Result (1..100).each do |i| ** Processing line: ~ r += 1~ - Inside source: true *** True Line Result r += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ },~ - Inside source: true *** True Line Result }, ** Processing line: ~ iterations_50: -> () {~ - Inside source: true *** True Line Result iterations_50: -> () { ** Processing line: ~ r = 0~ - Inside source: true *** True Line Result r = 0 ** Processing line: ~ (1..50).each do |i|~ - Inside source: true *** True Line Result (1..50).each do |i| ** Processing line: ~ r += 1~ - Inside source: true *** True Line Result r += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.equal! result.too_small_to_measure, true~ - Inside source: true *** True Line Result assert.equal! result.too_small_to_measure, true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Unit Tests - exception_raising_tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Unit Tests - exception_raising_tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/exception_raising_tests.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/03_unit_tests/exception_raising_tests.rb ** Processing line: ~ begin :shared~ - Inside source: true *** True Line Result begin :shared ** Processing line: ~ class ExceptionalClass~ - Inside source: true *** True Line Result class ExceptionalClass ** Processing line: ~ def initialize exception_to_throw = nil~ - Inside source: true *** True Line Result def initialize exception_to_throw = nil ** Processing line: ~ raise exception_to_throw if exception_to_throw~ - Inside source: true *** True Line Result raise exception_to_throw if exception_to_throw ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_exception_in_newing_object args, assert~ - Inside source: true *** True Line Result def test_exception_in_newing_object args, assert ** Processing line: ~ begin~ - Inside source: true *** True Line Result begin ** Processing line: ~ ExceptionalClass.new TypeError~ - Inside source: true *** True Line Result ExceptionalClass.new TypeError ** Processing line: ~ raise "Exception wasn't thrown!"~ - Inside source: true *** True Line Result raise "Exception wasn't thrown!" ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ assert.equal! e.class, TypeError, "Exceptions within constructor should be retained."~ - Inside source: true *** True Line Result assert.equal! e.class, TypeError, "Exceptions within constructor should be retained." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset 100~ - Inside source: true *** True Line Result $gtk.reset 100 ** Processing line: ~ $gtk.log_level = :off~ - Inside source: true *** True Line Result $gtk.log_level = :off ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Unit Tests - fn_tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Unit Tests - fn_tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/fn_tests.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/03_unit_tests/fn_tests.rb ** Processing line: ~ def infinity~ - Inside source: true *** True Line Result def infinity ** Processing line: ~ 1 / 0~ - Inside source: true *** True Line Result 1 / 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def neg_infinity~ - Inside source: true *** True Line Result def neg_infinity ** Processing line: ~ -1 / 0~ - Inside source: true *** True Line Result -1 / 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def nan~ - Inside source: true *** True Line Result def nan ** Processing line: ~ 0.0 / 0~ - Inside source: true *** True Line Result 0.0 / 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_add args, assert~ - Inside source: true *** True Line Result def test_add args, assert ** Processing line: ~ assert.equal! (args.fn.add), 0~ - Inside source: true *** True Line Result assert.equal! (args.fn.add), 0 ** Processing line: ~ assert.equal! (args.fn.+), 0~ - Inside source: true *** True Line Result assert.equal! (args.fn.+), 0 ** Processing line: ~ assert.equal! (args.fn.+ 1, 2, 3), 6~ - Inside source: true *** True Line Result assert.equal! (args.fn.+ 1, 2, 3), 6 ** Processing line: ~ assert.equal! (args.fn.+ 0), 0~ - Inside source: true *** True Line Result assert.equal! (args.fn.+ 0), 0 ** Processing line: ~ assert.equal! (args.fn.+ 0, nil), 0~ - Inside source: true *** True Line Result assert.equal! (args.fn.+ 0, nil), 0 ** Processing line: ~ assert.equal! (args.fn.+ 0, nan), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.+ 0, nan), nil ** Processing line: ~ assert.equal! (args.fn.+ 0, nil, infinity), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.+ 0, nil, infinity), nil ** Processing line: ~ assert.equal! (args.fn.+ [1, 2, 3, [4, 5, 6]]), 21~ - Inside source: true *** True Line Result assert.equal! (args.fn.+ [1, 2, 3, [4, 5, 6]]), 21 ** Processing line: ~ assert.equal! (args.fn.+ [nil, [4, 5, 6]]), 15~ - Inside source: true *** True Line Result assert.equal! (args.fn.+ [nil, [4, 5, 6]]), 15 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_sub args, assert~ - Inside source: true *** True Line Result def test_sub args, assert ** Processing line: ~ neg_infinity = infinity * -1~ - Inside source: true *** True Line Result neg_infinity = infinity * -1 ** Processing line: ~ assert.equal! (args.fn.+), 0~ - Inside source: true *** True Line Result assert.equal! (args.fn.+), 0 ** Processing line: ~ assert.equal! (args.fn.- 1, 2, 3), -4~ - Inside source: true *** True Line Result assert.equal! (args.fn.- 1, 2, 3), -4 ** Processing line: ~ assert.equal! (args.fn.- 4), -4~ - Inside source: true *** True Line Result assert.equal! (args.fn.- 4), -4 ** Processing line: ~ assert.equal! (args.fn.- 4, nan), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.- 4, nan), nil ** Processing line: ~ assert.equal! (args.fn.- 0, nil), 0~ - Inside source: true *** True Line Result assert.equal! (args.fn.- 0, nil), 0 ** Processing line: ~ assert.equal! (args.fn.- 0, nil, infinity), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.- 0, nil, infinity), nil ** Processing line: ~ assert.equal! (args.fn.- [0, 1, 2, 3, [4, 5, 6]]), -21~ - Inside source: true *** True Line Result assert.equal! (args.fn.- [0, 1, 2, 3, [4, 5, 6]]), -21 ** Processing line: ~ assert.equal! (args.fn.- [nil, 0, [4, 5, 6]]), -15~ - Inside source: true *** True Line Result assert.equal! (args.fn.- [nil, 0, [4, 5, 6]]), -15 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_div args, assert~ - Inside source: true *** True Line Result def test_div args, assert ** Processing line: ~ assert.equal! (args.fn.div), 1~ - Inside source: true *** True Line Result assert.equal! (args.fn.div), 1 ** Processing line: ~ assert.equal! (args.fn./), 1~ - Inside source: true *** True Line Result assert.equal! (args.fn./), 1 ** Processing line: ~ assert.equal! (args.fn./ 6, 3), 2~ - Inside source: true *** True Line Result assert.equal! (args.fn./ 6, 3), 2 ** Processing line: ~ assert.equal! (args.fn./ 6, infinity), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn./ 6, infinity), nil ** Processing line: ~ assert.equal! (args.fn./ 6, nan), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn./ 6, nan), nil ** Processing line: ~ assert.equal! (args.fn./ infinity), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn./ infinity), nil ** Processing line: ~ assert.equal! (args.fn./ 0), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn./ 0), nil ** Processing line: ~ assert.equal! (args.fn./ 6, [3]), 2~ - Inside source: true *** True Line Result assert.equal! (args.fn./ 6, [3]), 2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_idiv args, assert~ - Inside source: true *** True Line Result def test_idiv args, assert ** Processing line: ~ assert.equal! (args.fn.idiv), 1~ - Inside source: true *** True Line Result assert.equal! (args.fn.idiv), 1 ** Processing line: ~ assert.equal! (args.fn.idiv 7, 3), 2~ - Inside source: true *** True Line Result assert.equal! (args.fn.idiv 7, 3), 2 ** Processing line: ~ assert.equal! (args.fn.idiv 6, infinity), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.idiv 6, infinity), nil ** Processing line: ~ assert.equal! (args.fn.idiv 6, nan), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.idiv 6, nan), nil ** Processing line: ~ assert.equal! (args.fn.idiv infinity), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.idiv infinity), nil ** Processing line: ~ assert.equal! (args.fn.idiv 0), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.idiv 0), nil ** Processing line: ~ assert.equal! (args.fn.idiv 7, [3]), 2~ - Inside source: true *** True Line Result assert.equal! (args.fn.idiv 7, [3]), 2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_mul args, assert~ - Inside source: true *** True Line Result def test_mul args, assert ** Processing line: ~ assert.equal! (args.fn.mul), 1~ - Inside source: true *** True Line Result assert.equal! (args.fn.mul), 1 ** Processing line: ~ assert.equal! (args.fn.*), 1~ - Inside source: true *** True Line Result assert.equal! (args.fn.*), 1 ** Processing line: ~ assert.equal! (args.fn.* 7, 3), 21~ - Inside source: true *** True Line Result assert.equal! (args.fn.* 7, 3), 21 ** Processing line: ~ assert.equal! (args.fn.* 6, nan), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.* 6, nan), nil ** Processing line: ~ assert.equal! (args.fn.* 6, infinity), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.* 6, infinity), nil ** Processing line: ~ assert.equal! (args.fn.* infinity), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.* infinity), nil ** Processing line: ~ assert.equal! (args.fn.* 0), 0~ - Inside source: true *** True Line Result assert.equal! (args.fn.* 0), 0 ** Processing line: ~ assert.equal! (args.fn.* 7, [3]), 21~ - Inside source: true *** True Line Result assert.equal! (args.fn.* 7, [3]), 21 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_lt args, assert~ - Inside source: true *** True Line Result def test_lt args, assert ** Processing line: ~ assert.equal! (args.fn.lt 1), 1~ - Inside source: true *** True Line Result assert.equal! (args.fn.lt 1), 1 ** Processing line: ~ assert.equal! (args.fn.lt), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.lt), nil ** Processing line: ~ assert.equal! (args.fn.lt infinity), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.lt infinity), nil ** Processing line: ~ assert.equal! (args.fn.lt nan), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.lt nan), nil ** Processing line: ~ assert.equal! (args.fn.lt 10, 9, 8), 8~ - Inside source: true *** True Line Result assert.equal! (args.fn.lt 10, 9, 8), 8 ** Processing line: ~ assert.equal! (args.fn.< 10, 9, 8), 8~ - Inside source: true *** True Line Result assert.equal! (args.fn.< 10, 9, 8), 8 ** Processing line: ~ assert.equal! (args.fn.< [10, 9, [8]]), 8~ - Inside source: true *** True Line Result assert.equal! (args.fn.< [10, 9, [8]]), 8 ** Processing line: ~ assert.equal! (args.fn.< 10, 10), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.< 10, 10), nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_lte args, assert~ - Inside source: true *** True Line Result def test_lte args, assert ** Processing line: ~ assert.equal! (args.fn.lte 1), 1~ - Inside source: true *** True Line Result assert.equal! (args.fn.lte 1), 1 ** Processing line: ~ assert.equal! (args.fn.lte), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.lte), nil ** Processing line: ~ assert.equal! (args.fn.lte infinity), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.lte infinity), nil ** Processing line: ~ assert.equal! (args.fn.lte nan), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.lte nan), nil ** Processing line: ~ assert.equal! (args.fn.lte 10, 9, 8), 8~ - Inside source: true *** True Line Result assert.equal! (args.fn.lte 10, 9, 8), 8 ** Processing line: ~ assert.equal! (args.fn.lte 10, 10), 10~ - Inside source: true *** True Line Result assert.equal! (args.fn.lte 10, 10), 10 ** Processing line: ~ assert.equal! (args.fn.lte 10, 9, [8]), 8~ - Inside source: true *** True Line Result assert.equal! (args.fn.lte 10, 9, [8]), 8 ** Processing line: ~ assert.equal! (args.fn.<= 10, 9, 8), 8~ - Inside source: true *** True Line Result assert.equal! (args.fn.<= 10, 9, 8), 8 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_gt args, assert~ - Inside source: true *** True Line Result def test_gt args, assert ** Processing line: ~ assert.equal! (args.fn.gt 1), 1~ - Inside source: true *** True Line Result assert.equal! (args.fn.gt 1), 1 ** Processing line: ~ assert.equal! (args.fn.gt), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.gt), nil ** Processing line: ~ assert.equal! (args.fn.gt infinity), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.gt infinity), nil ** Processing line: ~ assert.equal! (args.fn.gt nan), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.gt nan), nil ** Processing line: ~ assert.equal! (args.fn.gt 8, 9, 10), 10~ - Inside source: true *** True Line Result assert.equal! (args.fn.gt 8, 9, 10), 10 ** Processing line: ~ assert.equal! (args.fn.gt [8, 9, [10]]), 10~ - Inside source: true *** True Line Result assert.equal! (args.fn.gt [8, 9, [10]]), 10 ** Processing line: ~ assert.equal! (args.fn.gt 10, 10), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.gt 10, 10), nil ** Processing line: ~ assert.equal! (args.fn.gt 10, 10), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.gt 10, 10), nil ** Processing line: ~ assert.equal! (args.fn.gt 10, 9), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.gt 10, 9), nil ** Processing line: ~ assert.equal! (args.fn.> 8, 9, 10), 10~ - Inside source: true *** True Line Result assert.equal! (args.fn.> 8, 9, 10), 10 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_gte args, assert~ - Inside source: true *** True Line Result def test_gte args, assert ** Processing line: ~ assert.equal! (args.fn.gte 1), 1~ - Inside source: true *** True Line Result assert.equal! (args.fn.gte 1), 1 ** Processing line: ~ assert.equal! (args.fn.gte), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.gte), nil ** Processing line: ~ assert.equal! (args.fn.gte infinity), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.gte infinity), nil ** Processing line: ~ assert.equal! (args.fn.gte nan), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.gte nan), nil ** Processing line: ~ assert.equal! (args.fn.gte 8, 9, 10), 10~ - Inside source: true *** True Line Result assert.equal! (args.fn.gte 8, 9, 10), 10 ** Processing line: ~ assert.equal! (args.fn.gte 10, 10), 10~ - Inside source: true *** True Line Result assert.equal! (args.fn.gte 10, 10), 10 ** Processing line: ~ assert.equal! (args.fn.gte 8, 9, [10]), 10~ - Inside source: true *** True Line Result assert.equal! (args.fn.gte 8, 9, [10]), 10 ** Processing line: ~ assert.equal! (args.fn.gte 10, 9), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.gte 10, 9), nil ** Processing line: ~ assert.equal! (args.fn.>= 8, 9, 10), 10~ - Inside source: true *** True Line Result assert.equal! (args.fn.>= 8, 9, 10), 10 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_acopy args, assert~ - Inside source: true *** True Line Result def test_acopy args, assert ** Processing line: ~ orig = [1, 2, 3]~ - Inside source: true *** True Line Result orig = [1, 2, 3] ** Processing line: ~ clone = args.fn.acopy orig~ - Inside source: true *** True Line Result clone = args.fn.acopy orig ** Processing line: ~ assert.equal! clone, [1, 2, 3]~ - Inside source: true *** True Line Result assert.equal! clone, [1, 2, 3] ** Processing line: ~ assert.equal! clone, orig~ - Inside source: true *** True Line Result assert.equal! clone, orig ** Processing line: ~ assert.not_equal! clone.object_id, orig.object_id~ - Inside source: true *** True Line Result assert.not_equal! clone.object_id, orig.object_id ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_aget args, assert~ - Inside source: true *** True Line Result def test_aget args, assert ** Processing line: ~ assert.equal! (args.fn.aget [:a, :b, :c], 1), :b~ - Inside source: true *** True Line Result assert.equal! (args.fn.aget [:a, :b, :c], 1), :b ** Processing line: ~ assert.equal! (args.fn.aget [:a, :b, :c], nil), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.aget [:a, :b, :c], nil), nil ** Processing line: ~ assert.equal! (args.fn.aget nil, 1), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.aget nil, 1), nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_alength args, assert~ - Inside source: true *** True Line Result def test_alength args, assert ** Processing line: ~ assert.equal! (args.fn.alength [:a, :b, :c]), 3~ - Inside source: true *** True Line Result assert.equal! (args.fn.alength [:a, :b, :c]), 3 ** Processing line: ~ assert.equal! (args.fn.alength nil), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.alength nil), nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_amap args, assert~ - Inside source: true *** True Line Result def test_amap args, assert ** Processing line: ~ inc = lambda { |i| i + 1 }~ - Inside source: true *** True Line Result inc = lambda { |i| i + 1 } ** Processing line: ~ ary = [1, 2, 3]~ - Inside source: true *** True Line Result ary = [1, 2, 3] ** Processing line: ~ assert.equal! (args.fn.amap ary, inc), [2, 3, 4]~ - Inside source: true *** True Line Result assert.equal! (args.fn.amap ary, inc), [2, 3, 4] ** Processing line: ~ assert.equal! (args.fn.amap nil, inc), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.amap nil, inc), nil ** Processing line: ~ assert.equal! (args.fn.amap ary, nil), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.amap ary, nil), nil ** Processing line: ~ assert.equal! (args.fn.amap ary, inc).class, Array~ - Inside source: true *** True Line Result assert.equal! (args.fn.amap ary, inc).class, Array ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_and args, assert~ - Inside source: true *** True Line Result def test_and args, assert ** Processing line: ~ assert.equal! (args.fn.and 1, 2, 3, 4), 4~ - Inside source: true *** True Line Result assert.equal! (args.fn.and 1, 2, 3, 4), 4 ** Processing line: ~ assert.equal! (args.fn.and 1, 2, nil, 4), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.and 1, 2, nil, 4), nil ** Processing line: ~ assert.equal! (args.fn.and), true~ - Inside source: true *** True Line Result assert.equal! (args.fn.and), true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_or args, assert~ - Inside source: true *** True Line Result def test_or args, assert ** Processing line: ~ assert.equal! (args.fn.or 1, 2, 3, 4), 1~ - Inside source: true *** True Line Result assert.equal! (args.fn.or 1, 2, 3, 4), 1 ** Processing line: ~ assert.equal! (args.fn.or 1, 2, nil, 4), 1~ - Inside source: true *** True Line Result assert.equal! (args.fn.or 1, 2, nil, 4), 1 ** Processing line: ~ assert.equal! (args.fn.or), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.or), nil ** Processing line: ~ assert.equal! (args.fn.or nil, nil, false, 5, 10), 5~ - Inside source: true *** True Line Result assert.equal! (args.fn.or nil, nil, false, 5, 10), 5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_eq_eq args, assert~ - Inside source: true *** True Line Result def test_eq_eq args, assert ** Processing line: ~ assert.equal! (args.fn.eq?), true~ - Inside source: true *** True Line Result assert.equal! (args.fn.eq?), true ** Processing line: ~ assert.equal! (args.fn.eq? 1, 0), false~ - Inside source: true *** True Line Result assert.equal! (args.fn.eq? 1, 0), false ** Processing line: ~ assert.equal! (args.fn.eq? 1, 1, 1), true~ - Inside source: true *** True Line Result assert.equal! (args.fn.eq? 1, 1, 1), true ** Processing line: ~ assert.equal! (args.fn.== 1, 1, 1), true~ - Inside source: true *** True Line Result assert.equal! (args.fn.== 1, 1, 1), true ** Processing line: ~ assert.equal! (args.fn.== nil, nil), true~ - Inside source: true *** True Line Result assert.equal! (args.fn.== nil, nil), true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_apply args, assert~ - Inside source: true *** True Line Result def test_apply args, assert ** Processing line: ~ assert.equal! (args.fn.and [nil, nil, nil]), [nil, nil, nil]~ - Inside source: true *** True Line Result assert.equal! (args.fn.and [nil, nil, nil]), [nil, nil, nil] ** Processing line: ~ assert.equal! (args.fn.apply [nil, nil, nil], args.fn.method(:and)), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.apply [nil, nil, nil], args.fn.method(:and)), nil ** Processing line: ~ and_lambda = lambda {|*xs| args.fn.and(*xs)}~ - Inside source: true *** True Line Result and_lambda = lambda {|*xs| args.fn.and(*xs)} ** Processing line: ~ assert.equal! (args.fn.apply [nil, nil, nil], and_lambda), nil~ - Inside source: true *** True Line Result assert.equal! (args.fn.apply [nil, nil, nil], and_lambda), nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_areduce args, assert~ - Inside source: true *** True Line Result def test_areduce args, assert ** Processing line: ~ assert.equal! (args.fn.areduce [1, 2, 3], 0, lambda { |i, a| i + a }), 6~ - Inside source: true *** True Line Result assert.equal! (args.fn.areduce [1, 2, 3], 0, lambda { |i, a| i + a }), 6 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_array_hash args, assert~ - Inside source: true *** True Line Result def test_array_hash args, assert ** Processing line: ~ assert.equal! (args.fn.array_hash :a, 1, :b, 2), { a: 1, b: 2 }~ - Inside source: true *** True Line Result assert.equal! (args.fn.array_hash :a, 1, :b, 2), { a: 1, b: 2 } ** Processing line: ~ assert.equal! (args.fn.array_hash), { }~ - Inside source: true *** True Line Result assert.equal! (args.fn.array_hash), { } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Unit Tests - gen_docs.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Unit Tests - gen_docs.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/gen_docs.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/03_unit_tests/gen_docs.rb ** Processing line: ~ # ./dragonruby mygame --eval samples/99_zz_gtk_unit_tests/gen_docs.rb --no-tick~ - Inside source: true *** True Line Result # ./dragonruby mygame --eval samples/99_zz_gtk_unit_tests/gen_docs.rb --no-tick ** Processing line: ~ Kernel.export_docs!~ - Inside source: true *** True Line Result Kernel.export_docs! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Unit Tests - geometry_tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Unit Tests - geometry_tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/geometry_tests.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/03_unit_tests/geometry_tests.rb ** Processing line: ~ begin :shared~ - Inside source: true *** True Line Result begin :shared ** Processing line: ~ def primitive_representations x, y, w, h~ - Inside source: true *** True Line Result def primitive_representations x, y, w, h ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [x, y, w, h],~ - Inside source: true *** True Line Result [x, y, w, h], ** Processing line: ~ { x: x, y: y, w: w, h: h },~ - Inside source: true *** True Line Result { x: x, y: y, w: w, h: h }, ** Processing line: ~ RectForTest.new(x, y, w, h)~ - Inside source: true *** True Line Result RectForTest.new(x, y, w, h) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class RectForTest~ - Inside source: true *** True Line Result class RectForTest ** Processing line: ~ attr_sprite~ - Inside source: true *** True Line Result attr_sprite ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize x, y, w, h~ - Inside source: true *** True Line Result def initialize x, y, w, h ** Processing line: ~ @x = x~ - Inside source: true *** True Line Result @x = x ** Processing line: ~ @y = y~ - Inside source: true *** True Line Result @y = y ** Processing line: ~ @w = w~ - Inside source: true *** True Line Result @w = w ** Processing line: ~ @h = h~ - Inside source: true *** True Line Result @h = h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ "RectForTest: #{[x, y, w, h]}"~ - Inside source: true *** True Line Result "RectForTest: #{[x, y, w, h]}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :intersect_rect?~ - Inside source: true *** True Line Result begin :intersect_rect? ** Processing line: ~ def test_intersect_rect_point args, assert~ - Inside source: true *** True Line Result def test_intersect_rect_point args, assert ** Processing line: ~ assert.true! [16, 13].intersect_rect?([13, 12, 4, 4]), "point intersects with rect."~ - Inside source: true *** True Line Result assert.true! [16, 13].intersect_rect?([13, 12, 4, 4]), "point intersects with rect." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_intersect_rect args, assert~ - Inside source: true *** True Line Result def test_intersect_rect args, assert ** Processing line: ~ intersecting = primitive_representations(0, 0, 100, 100) +~ - Inside source: true *** True Line Result intersecting = primitive_representations(0, 0, 100, 100) + ** Processing line: ~ primitive_representations(20, 20, 20, 20)~ - Inside source: true *** True Line Result primitive_representations(20, 20, 20, 20) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ intersecting.product(intersecting).each do |rect_one, rect_two|~ - Inside source: true *** True Line Result intersecting.product(intersecting).each do |rect_one, rect_two| ** Processing line: ~ assert.true! rect_one.intersect_rect?(rect_two),~ - Inside source: true *** True Line Result assert.true! rect_one.intersect_rect?(rect_two), ** Processing line: ~ "intersect_rect? assertion failed for #{rect_one}, #{rect_two} (expected true)."~ - Inside source: true *** True Line Result "intersect_rect? assertion failed for #{rect_one}, #{rect_two} (expected true)." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ not_intersecting = [~ - Inside source: true *** True Line Result not_intersecting = [ ** Processing line: ~ [ 0, 0, 5, 5],~ - Inside source: true *** True Line Result [ 0, 0, 5, 5], ** Processing line: ~ { x: 10, y: 10, w: 5, h: 5 },~ - Inside source: true *** True Line Result { x: 10, y: 10, w: 5, h: 5 }, ** Processing line: ~ RectForTest.new(20, 20, 5, 5)~ - Inside source: true *** True Line Result RectForTest.new(20, 20, 5, 5) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ not_intersecting.product(not_intersecting)~ - Inside source: true *** True Line Result not_intersecting.product(not_intersecting) ** Processing line: ~ .reject { |rect_one, rect_two| rect_one == rect_two }~ - Inside source: true *** True Line Result .reject { |rect_one, rect_two| rect_one == rect_two } ** Processing line: ~ .each do |rect_one, rect_two|~ - Inside source: true *** True Line Result .each do |rect_one, rect_two| ** Processing line: ~ assert.false! rect_one.intersect_rect?(rect_two),~ - Inside source: true *** True Line Result assert.false! rect_one.intersect_rect?(rect_two), ** Processing line: ~ "intersect_rect? assertion failed for #{rect_one}, #{rect_two} (expected false)."~ - Inside source: true *** True Line Result "intersect_rect? assertion failed for #{rect_one}, #{rect_two} (expected false)." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :inside_rect?~ - Inside source: true *** True Line Result begin :inside_rect? ** Processing line: ~ def assert_inside_rect outer: nil, inner: nil, expected: nil, assert: nil~ - Inside source: true *** True Line Result def assert_inside_rect outer: nil, inner: nil, expected: nil, assert: nil ** Processing line: ~ assert.true! inner.inside_rect?(outer) == expected,~ - Inside source: true *** True Line Result assert.true! inner.inside_rect?(outer) == expected, ** Processing line: ~ "inside_rect? assertion failed for outer: #{outer} inner: #{inner} (expected #{expected})."~ - Inside source: true *** True Line Result "inside_rect? assertion failed for outer: #{outer} inner: #{inner} (expected #{expected})." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_inside_rect args, assert~ - Inside source: true *** True Line Result def test_inside_rect args, assert ** Processing line: ~ outer_rects = primitive_representations(0, 0, 10, 10)~ - Inside source: true *** True Line Result outer_rects = primitive_representations(0, 0, 10, 10) ** Processing line: ~ inner_rects = primitive_representations(1, 1, 5, 5)~ - Inside source: true *** True Line Result inner_rects = primitive_representations(1, 1, 5, 5) ** Processing line: ~ primitive_representations(0, 0, 10, 10).product(primitive_representations(1, 1, 5, 5))~ - Inside source: true *** True Line Result primitive_representations(0, 0, 10, 10).product(primitive_representations(1, 1, 5, 5)) ** Processing line: ~ .each do |outer, inner|~ - Inside source: true *** True Line Result .each do |outer, inner| ** Processing line: ~ assert_inside_rect outer: outer, inner: inner,~ - Inside source: true *** True Line Result assert_inside_rect outer: outer, inner: inner, ** Processing line: ~ expected: true, assert: assert~ - Inside source: true *** True Line Result expected: true, assert: assert ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :angle_to~ - Inside source: true *** True Line Result begin :angle_to ** Processing line: ~ def test_angle_to args, assert~ - Inside source: true *** True Line Result def test_angle_to args, assert ** Processing line: ~ origins = primitive_representations(0, 0, 0, 0)~ - Inside source: true *** True Line Result origins = primitive_representations(0, 0, 0, 0) ** Processing line: ~ rights = primitive_representations(1, 0, 0, 0)~ - Inside source: true *** True Line Result rights = primitive_representations(1, 0, 0, 0) ** Processing line: ~ aboves = primitive_representations(0, 1, 0, 0)~ - Inside source: true *** True Line Result aboves = primitive_representations(0, 1, 0, 0) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ origins.product(aboves).each do |origin, above|~ - Inside source: true *** True Line Result origins.product(aboves).each do |origin, above| ** Processing line: ~ assert.equal! origin.angle_to(above), 90,~ - Inside source: true *** True Line Result assert.equal! origin.angle_to(above), 90, ** Processing line: ~ "A point directly above should be 90 degrees."~ - Inside source: true *** True Line Result "A point directly above should be 90 degrees." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.equal! above.angle_from(origin), 90,~ - Inside source: true *** True Line Result assert.equal! above.angle_from(origin), 90, ** Processing line: ~ "A point coming from above should be 90 degrees."~ - Inside source: true *** True Line Result "A point coming from above should be 90 degrees." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ origins.product(rights).each do |origin, right|~ - Inside source: true *** True Line Result origins.product(rights).each do |origin, right| ** Processing line: ~ assert.equal! origin.angle_to(right) % 360, 0,~ - Inside source: true *** True Line Result assert.equal! origin.angle_to(right) % 360, 0, ** Processing line: ~ "A point directly to the right should be 0 degrees."~ - Inside source: true *** True Line Result "A point directly to the right should be 0 degrees." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.equal! right.angle_from(origin) % 360, 0,~ - Inside source: true *** True Line Result assert.equal! right.angle_from(origin) % 360, 0, ** Processing line: ~ "A point coming from the right should be 0 degrees."~ - Inside source: true *** True Line Result "A point coming from the right should be 0 degrees." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :scale_rect~ - Inside source: true *** True Line Result begin :scale_rect ** Processing line: ~ def test_scale_rect args, assert~ - Inside source: true *** True Line Result def test_scale_rect args, assert ** Processing line: ~ assert.equal! [0, 0, 100, 100].scale_rect(0.5, 0.5),~ - Inside source: true *** True Line Result assert.equal! [0, 0, 100, 100].scale_rect(0.5, 0.5), ** Processing line: ~ [25.0, 25.0, 50.0, 50.0]~ - Inside source: true *** True Line Result [25.0, 25.0, 50.0, 50.0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.equal! [0, 0, 100, 100].scale_rect(0.5),~ - Inside source: true *** True Line Result assert.equal! [0, 0, 100, 100].scale_rect(0.5), ** Processing line: ~ [0.0, 0.0, 50.0, 50.0]~ - Inside source: true *** True Line Result [0.0, 0.0, 50.0, 50.0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.equal! [0, 0, 100, 100].scale_rect_extended(percentage_x: 0.5, percentage_y: 0.5, anchor_x: 0.5, anchor_y: 0.5),~ - Inside source: true *** True Line Result assert.equal! [0, 0, 100, 100].scale_rect_extended(percentage_x: 0.5, percentage_y: 0.5, anchor_x: 0.5, anchor_y: 0.5), ** Processing line: ~ [25.0, 25.0, 50.0, 50.0]~ - Inside source: true *** True Line Result [25.0, 25.0, 50.0, 50.0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.equal! [0, 0, 100, 100].scale_rect_extended(percentage_x: 0.5, percentage_y: 0.5, anchor_x: 0, anchor_y: 0),~ - Inside source: true *** True Line Result assert.equal! [0, 0, 100, 100].scale_rect_extended(percentage_x: 0.5, percentage_y: 0.5, anchor_x: 0, anchor_y: 0), ** Processing line: ~ [0.0, 0.0, 50.0, 50.0]~ - Inside source: true *** True Line Result [0.0, 0.0, 50.0, 50.0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset 100~ - Inside source: true *** True Line Result $gtk.reset 100 ** Processing line: ~ $gtk.log_level = :off~ - Inside source: true *** True Line Result $gtk.log_level = :off ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Unit Tests - http_tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Unit Tests - http_tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/http_tests.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/03_unit_tests/http_tests.rb ** Processing line: ~ def try_assert_or_schedule args, assert~ - Inside source: true *** True Line Result def try_assert_or_schedule args, assert ** Processing line: ~ if $result[:complete]~ - Inside source: true *** True Line Result if $result[:complete] ** Processing line: ~ log_info "Request completed! Verifying."~ - Inside source: true *** True Line Result log_info "Request completed! Verifying." ** Processing line: ~ if $result[:http_response_code] != 200~ - Inside source: true *** True Line Result if $result[:http_response_code] != 200 ** Processing line: ~ log_info "The request yielded a result of #{$result[:http_response_code]} instead of 200."~ - Inside source: true *** True Line Result log_info "The request yielded a result of #{$result[:http_response_code]} instead of 200." ** Processing line: ~ exit~ - Inside source: true *** True Line Result exit ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ log_info ":try_assert_or_schedule succeeded!"~ - Inside source: true *** True Line Result log_info ":try_assert_or_schedule succeeded!" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.gtk.schedule_callback Kernel.tick_count + 10 do~ - Inside source: true *** True Line Result args.gtk.schedule_callback Kernel.tick_count + 10 do ** Processing line: ~ try_assert_or_schedule args, assert~ - Inside source: true *** True Line Result try_assert_or_schedule args, assert ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_http args, assert~ - Inside source: true *** True Line Result def test_http args, assert ** Processing line: ~ $result = $gtk.http_get 'http://dragonruby.org'~ - Inside source: true *** True Line Result $result = $gtk.http_get 'http://dragonruby.org' ** Processing line: ~ try_assert_or_schedule args, assert~ - Inside source: true *** True Line Result try_assert_or_schedule args, assert ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset 100~ - Inside source: true *** True Line Result $gtk.reset 100 ** Processing line: ~ $gtk.log_level = :off~ - Inside source: true *** True Line Result $gtk.log_level = :off ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Unit Tests - nil_coercion_tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Unit Tests - nil_coercion_tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/nil_coercion_tests.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/03_unit_tests/nil_coercion_tests.rb ** Processing line: ~ # numbers~ - Inside source: true *** True Line Result # numbers ** Processing line: ~ def test_open_entity_add_number args, assert~ - Inside source: true *** True Line Result def test_open_entity_add_number args, assert ** Processing line: ~ assert.nil! args.state.i_value~ - Inside source: true *** True Line Result assert.nil! args.state.i_value ** Processing line: ~ args.state.i_value += 5~ - Inside source: true *** True Line Result args.state.i_value += 5 ** Processing line: ~ assert.equal! args.state.i_value, 5~ - Inside source: true *** True Line Result assert.equal! args.state.i_value, 5 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.nil! args.state.f_value~ - Inside source: true *** True Line Result assert.nil! args.state.f_value ** Processing line: ~ args.state.f_value += 5.5~ - Inside source: true *** True Line Result args.state.f_value += 5.5 ** Processing line: ~ assert.equal! args.state.f_value, 5.5~ - Inside source: true *** True Line Result assert.equal! args.state.f_value, 5.5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_open_entity_subtract_number args, assert~ - Inside source: true *** True Line Result def test_open_entity_subtract_number args, assert ** Processing line: ~ assert.nil! args.state.i_value~ - Inside source: true *** True Line Result assert.nil! args.state.i_value ** Processing line: ~ args.state.i_value -= 5~ - Inside source: true *** True Line Result args.state.i_value -= 5 ** Processing line: ~ assert.equal! args.state.i_value, -5~ - Inside source: true *** True Line Result assert.equal! args.state.i_value, -5 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.nil! args.state.f_value~ - Inside source: true *** True Line Result assert.nil! args.state.f_value ** Processing line: ~ args.state.f_value -= 5.5~ - Inside source: true *** True Line Result args.state.f_value -= 5.5 ** Processing line: ~ assert.equal! args.state.f_value, -5.5~ - Inside source: true *** True Line Result assert.equal! args.state.f_value, -5.5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_open_entity_multiply_number args, assert~ - Inside source: true *** True Line Result def test_open_entity_multiply_number args, assert ** Processing line: ~ assert.nil! args.state.i_value~ - Inside source: true *** True Line Result assert.nil! args.state.i_value ** Processing line: ~ args.state.i_value *= 5~ - Inside source: true *** True Line Result args.state.i_value *= 5 ** Processing line: ~ assert.equal! args.state.i_value, 0~ - Inside source: true *** True Line Result assert.equal! args.state.i_value, 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.nil! args.state.f_value~ - Inside source: true *** True Line Result assert.nil! args.state.f_value ** Processing line: ~ args.state.f_value *= 5.5~ - Inside source: true *** True Line Result args.state.f_value *= 5.5 ** Processing line: ~ assert.equal! args.state.f_value, 0~ - Inside source: true *** True Line Result assert.equal! args.state.f_value, 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_open_entity_divide_number args, assert~ - Inside source: true *** True Line Result def test_open_entity_divide_number args, assert ** Processing line: ~ assert.nil! args.state.i_value~ - Inside source: true *** True Line Result assert.nil! args.state.i_value ** Processing line: ~ args.state.i_value /= 5~ - Inside source: true *** True Line Result args.state.i_value /= 5 ** Processing line: ~ assert.equal! args.state.i_value, 0~ - Inside source: true *** True Line Result assert.equal! args.state.i_value, 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.nil! args.state.f_value~ - Inside source: true *** True Line Result assert.nil! args.state.f_value ** Processing line: ~ args.state.f_value /= 5.5~ - Inside source: true *** True Line Result args.state.f_value /= 5.5 ** Processing line: ~ assert.equal! args.state.f_value, 0~ - Inside source: true *** True Line Result assert.equal! args.state.f_value, 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # array~ - Inside source: true *** True Line Result # array ** Processing line: ~ def test_open_entity_add_array args, assert~ - Inside source: true *** True Line Result def test_open_entity_add_array args, assert ** Processing line: ~ assert.nil! args.state.values~ - Inside source: true *** True Line Result assert.nil! args.state.values ** Processing line: ~ args.state.values += [:a, :b, :c]~ - Inside source: true *** True Line Result args.state.values += [:a, :b, :c] ** Processing line: ~ assert.equal! args.state.values, [:a, :b, :c]~ - Inside source: true *** True Line Result assert.equal! args.state.values, [:a, :b, :c] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_open_entity_subtract_array args, assert~ - Inside source: true *** True Line Result def test_open_entity_subtract_array args, assert ** Processing line: ~ assert.nil! args.state.values~ - Inside source: true *** True Line Result assert.nil! args.state.values ** Processing line: ~ args.state.values -= [:a, :b, :c]~ - Inside source: true *** True Line Result args.state.values -= [:a, :b, :c] ** Processing line: ~ assert.equal! args.state.values, []~ - Inside source: true *** True Line Result assert.equal! args.state.values, [] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_open_entity_shovel_array args, assert~ - Inside source: true *** True Line Result def test_open_entity_shovel_array args, assert ** Processing line: ~ assert.nil! args.state.values~ - Inside source: true *** True Line Result assert.nil! args.state.values ** Processing line: ~ args.state.values << :a~ - Inside source: true *** True Line Result args.state.values << :a ** Processing line: ~ assert.equal! args.state.values, [:a]~ - Inside source: true *** True Line Result assert.equal! args.state.values, [:a] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_open_entity_enumerate args, assert~ - Inside source: true *** True Line Result def test_open_entity_enumerate args, assert ** Processing line: ~ assert.nil! args.state.values~ - Inside source: true *** True Line Result assert.nil! args.state.values ** Processing line: ~ args.state.values = args.state.values.map_with_index { |i| i }~ - Inside source: true *** True Line Result args.state.values = args.state.values.map_with_index { |i| i } ** Processing line: ~ assert.equal! args.state.values, []~ - Inside source: true *** True Line Result assert.equal! args.state.values, [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.nil! args.state.values_2~ - Inside source: true *** True Line Result assert.nil! args.state.values_2 ** Processing line: ~ args.state.values_2 = args.state.values_2.map { |i| i }~ - Inside source: true *** True Line Result args.state.values_2 = args.state.values_2.map { |i| i } ** Processing line: ~ assert.equal! args.state.values_2, []~ - Inside source: true *** True Line Result assert.equal! args.state.values_2, [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.nil! args.state.values_3~ - Inside source: true *** True Line Result assert.nil! args.state.values_3 ** Processing line: ~ args.state.values_3 = args.state.values_3.flat_map { |i| i }~ - Inside source: true *** True Line Result args.state.values_3 = args.state.values_3.flat_map { |i| i } ** Processing line: ~ assert.equal! args.state.values_3, []~ - Inside source: true *** True Line Result assert.equal! args.state.values_3, [] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # hashes~ - Inside source: true *** True Line Result # hashes ** Processing line: ~ def test_open_entity_indexer args, assert~ - Inside source: true *** True Line Result def test_open_entity_indexer args, assert ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ assert.nil! args.state.values~ - Inside source: true *** True Line Result assert.nil! args.state.values ** Processing line: ~ args.state.values[:test] = :value~ - Inside source: true *** True Line Result args.state.values[:test] = :value ** Processing line: ~ assert.equal! args.state.values.to_s, { entity_id: 1, entity_name: :values, entity_keys_by_ref: {}, test: :value }.to_s~ - Inside source: true *** True Line Result assert.equal! args.state.values.to_s, { entity_id: 1, entity_name: :values, entity_keys_by_ref: {}, test: :value }.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # bug~ - Inside source: true *** True Line Result # bug ** Processing line: ~ def test_open_entity_nil_bug args, assert~ - Inside source: true *** True Line Result def test_open_entity_nil_bug args, assert ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ args.state.foo.a~ - Inside source: true *** True Line Result args.state.foo.a ** Processing line: ~ args.state.foo.b~ - Inside source: true *** True Line Result args.state.foo.b ** Processing line: ~ @hello[:foobar]~ - Inside source: true *** True Line Result @hello[:foobar] ** Processing line: ~ assert.nil! args.state.foo.a, "a was not nil."~ - Inside source: true *** True Line Result assert.nil! args.state.foo.a, "a was not nil." ** Processing line: ~ # the line below fails~ - Inside source: true *** True Line Result # the line below fails ** Processing line: ~ # assert.nil! args.state.foo.b, "b was not nil."~ - Inside source: true *** True Line Result # assert.nil! args.state.foo.b, "b was not nil." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Unit Tests - object_to_primitive_tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Unit Tests - object_to_primitive_tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/object_to_primitive_tests.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/03_unit_tests/object_to_primitive_tests.rb ** Processing line: ~ class PlayerSpriteForTest~ - Inside source: true *** True Line Result class PlayerSpriteForTest ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_array_to_sprite args, assert~ - Inside source: true *** True Line Result def test_array_to_sprite args, assert ** Processing line: ~ array = [[0, 0, 100, 100, "test.png"]].sprites~ - Inside source: true *** True Line Result array = [[0, 0, 100, 100, "test.png"]].sprites ** Processing line: ~ puts "No exception was thrown. Sweet!"~ - Inside source: true *** True Line Result puts "No exception was thrown. Sweet!" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_class_to_sprite args, assert~ - Inside source: true *** True Line Result def test_class_to_sprite args, assert ** Processing line: ~ array = [PlayerSprite.new].sprites~ - Inside source: true *** True Line Result array = [PlayerSprite.new].sprites ** Processing line: ~ assert.true! array.first.is_a?(PlayerSprite)~ - Inside source: true *** True Line Result assert.true! array.first.is_a?(PlayerSprite) ** Processing line: ~ puts "No exception was thrown. Sweet!"~ - Inside source: true *** True Line Result puts "No exception was thrown. Sweet!" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset 100~ - Inside source: true *** True Line Result $gtk.reset 100 ** Processing line: ~ $gtk.log_level = :off~ - Inside source: true *** True Line Result $gtk.log_level = :off ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Unit Tests - parsing_tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Unit Tests - parsing_tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/parsing_tests.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/03_unit_tests/parsing_tests.rb ** Processing line: ~ def test_parse_json args, assert~ - Inside source: true *** True Line Result def test_parse_json args, assert ** Processing line: ~ result = args.gtk.parse_json '{ "name": "John Doe", "aliases": ["JD"] }'~ - Inside source: true *** True Line Result result = args.gtk.parse_json '{ "name": "John Doe", "aliases": ["JD"] }' ** Processing line: ~ assert.equal! result, { "name"=>"John Doe", "aliases"=>["JD"] }, "Parsing JSON failed."~ - Inside source: true *** True Line Result assert.equal! result, { "name"=>"John Doe", "aliases"=>["JD"] }, "Parsing JSON failed." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_parse_xml args, assert~ - Inside source: true *** True Line Result def test_parse_xml args, assert ** Processing line: ~ result = args.gtk.parse_xml <<-S~ - Inside source: true *** True Line Result result = args.gtk.parse_xml <<-S ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ John Doe~ - Inside source: true *** True Line Result John Doe ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ expected = {:type=>:element,~ - Inside source: true *** True Line Result expected = {:type=>:element, ** Processing line: ~ :name=>nil,~ - Inside source: true *** True Line Result :name=>nil, ** Processing line: ~ :children=>[{:type=>:element,~ - Inside source: true *** True Line Result :children=>[{:type=>:element, ** Processing line: ~ :name=>"Person",~ - Inside source: true *** True Line Result :name=>"Person", ** Processing line: ~ :children=>[{:type=>:element,~ - Inside source: true *** True Line Result :children=>[{:type=>:element, ** Processing line: ~ :name=>"Name",~ - Inside source: true *** True Line Result :name=>"Name", ** Processing line: ~ :children=>[{:type=>:content,~ - Inside source: true *** True Line Result :children=>[{:type=>:content, ** Processing line: ~ :data=>"John Doe"}]}],~ - Inside source: true *** True Line Result :data=>"John Doe"}]}], ** Processing line: ~ :attributes=>{"id"=>"100"}}]}~ - Inside source: true *** True Line Result :attributes=>{"id"=>"100"}}]} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.equal! result, expected, "Parsing xml failed."~ - Inside source: true *** True Line Result assert.equal! result, expected, "Parsing xml failed." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset 100~ - Inside source: true *** True Line Result $gtk.reset 100 ** Processing line: ~ $gtk.log_level = :off~ - Inside source: true *** True Line Result $gtk.log_level = :off ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Unit Tests - pretty_format_tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Unit Tests - pretty_format_tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/pretty_format_tests.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/03_unit_tests/pretty_format_tests.rb ** Processing line: ~ def H opts~ - Inside source: true *** True Line Result def H opts ** Processing line: ~ opts~ - Inside source: true *** True Line Result opts ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def A *opts~ - Inside source: true *** True Line Result def A *opts ** Processing line: ~ opts~ - Inside source: true *** True Line Result opts ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def assert_format args, assert, hash, expected~ - Inside source: true *** True Line Result def assert_format args, assert, hash, expected ** Processing line: ~ actual = args.fn.pretty_format hash~ - Inside source: true *** True Line Result actual = args.fn.pretty_format hash ** Processing line: ~ assert.are_equal! actual, expected~ - Inside source: true *** True Line Result assert.are_equal! actual, expected ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_pretty_print args, assert~ - Inside source: true *** True Line Result def test_pretty_print args, assert ** Processing line: ~ # =============================~ - Inside source: true *** True Line Result # ============================= ** Processing line: ~ # hash with single value~ - Inside source: true *** True Line Result # hash with single value ** Processing line: ~ # =============================~ - Inside source: true *** True Line Result # ============================= ** Processing line: ~ input = (H first_name: "John")~ - Inside source: true *** True Line Result input = (H first_name: "John") ** Processing line: ~ expected = <<-S~ - Inside source: true *** True Line Result expected = <<-S ** Processing line: ~ {:first_name "John"}~ - Inside source: true *** True Line Result {:first_name "John"} ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ (assert_format args, assert, input, expected)~ - Inside source: true *** True Line Result (assert_format args, assert, input, expected) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =============================~ - Inside source: true *** True Line Result # ============================= ** Processing line: ~ # hash with two values~ - Inside source: true *** True Line Result # hash with two values ** Processing line: ~ # =============================~ - Inside source: true *** True Line Result # ============================= ** Processing line: ~ input = (H first_name: "John", last_name: "Smith")~ - Inside source: true *** True Line Result input = (H first_name: "John", last_name: "Smith") ** Processing line: ~ expected = <<-S~ - Inside source: true *** True Line Result expected = <<-S ** Processing line: ~ {:first_name "John"~ - Inside source: true *** True Line Result {:first_name "John" ** Processing line: ~ :last_name "Smith"}~ - Inside source: true *** True Line Result :last_name "Smith"} ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ (assert_format args, assert, input, expected)~ - Inside source: true *** True Line Result (assert_format args, assert, input, expected) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =============================~ - Inside source: true *** True Line Result # ============================= ** Processing line: ~ # hash with inner hash~ - Inside source: true *** True Line Result # hash with inner hash ** Processing line: ~ # =============================~ - Inside source: true *** True Line Result # ============================= ** Processing line: ~ input = (H first_name: "John",~ - Inside source: true *** True Line Result input = (H first_name: "John", ** Processing line: ~ last_name: "Smith",~ - Inside source: true *** True Line Result last_name: "Smith", ** Processing line: ~ middle_initial: "I",~ - Inside source: true *** True Line Result middle_initial: "I", ** Processing line: ~ so: (H first_name: "Pocahontas",~ - Inside source: true *** True Line Result so: (H first_name: "Pocahontas", ** Processing line: ~ last_name: "Tsenacommacah"),~ - Inside source: true *** True Line Result last_name: "Tsenacommacah"), ** Processing line: ~ friends: (A (H first_name: "Side", last_name: "Kick"),~ - Inside source: true *** True Line Result friends: (A (H first_name: "Side", last_name: "Kick"), ** Processing line: ~ (H first_name: "Tim", last_name: "Wizard")))~ - Inside source: true *** True Line Result (H first_name: "Tim", last_name: "Wizard"))) ** Processing line: ~ expected = <<-S~ - Inside source: true *** True Line Result expected = <<-S ** Processing line: ~ {:first_name "John"~ - Inside source: true *** True Line Result {:first_name "John" ** Processing line: ~ :last_name "Smith"~ - Inside source: true *** True Line Result :last_name "Smith" ** Processing line: ~ :middle_initial "I"~ - Inside source: true *** True Line Result :middle_initial "I" ** Processing line: ~ :so {:first_name "Pocahontas"~ - Inside source: true *** True Line Result :so {:first_name "Pocahontas" ** Processing line: ~ :last_name "Tsenacommacah"}~ - Inside source: true *** True Line Result :last_name "Tsenacommacah"} ** Processing line: ~ :friends [{:first_name "Side"~ - Inside source: true *** True Line Result :friends [{:first_name "Side" ** Processing line: ~ :last_name "Kick"}~ - Inside source: true *** True Line Result :last_name "Kick"} ** Processing line: ~ {:first_name "Tim"~ - Inside source: true *** True Line Result {:first_name "Tim" ** Processing line: ~ :last_name "Wizard"}]}~ - Inside source: true *** True Line Result :last_name "Wizard"}]} ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ (assert_format args, assert, input, expected)~ - Inside source: true *** True Line Result (assert_format args, assert, input, expected) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =============================~ - Inside source: true *** True Line Result # ============================= ** Processing line: ~ # array with one value~ - Inside source: true *** True Line Result # array with one value ** Processing line: ~ # =============================~ - Inside source: true *** True Line Result # ============================= ** Processing line: ~ input = (A 1)~ - Inside source: true *** True Line Result input = (A 1) ** Processing line: ~ expected = <<-S~ - Inside source: true *** True Line Result expected = <<-S ** Processing line: ~ [1]~ - Inside source: true *** True Line Result [1] ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ (assert_format args, assert, input, expected)~ - Inside source: true *** True Line Result (assert_format args, assert, input, expected) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =============================~ - Inside source: true *** True Line Result # ============================= ** Processing line: ~ # array with multiple values~ - Inside source: true *** True Line Result # array with multiple values ** Processing line: ~ # =============================~ - Inside source: true *** True Line Result # ============================= ** Processing line: ~ input = (A 1, 2, 3)~ - Inside source: true *** True Line Result input = (A 1, 2, 3) ** Processing line: ~ expected = <<-S~ - Inside source: true *** True Line Result expected = <<-S ** Processing line: ~ [1~ - Inside source: true *** True Line Result [1 ** Processing line: ~ 2~ - Inside source: true *** True Line Result 2 ** Processing line: ~ 3]~ - Inside source: true *** True Line Result 3] ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ (assert_format args, assert, input, expected)~ - Inside source: true *** True Line Result (assert_format args, assert, input, expected) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =============================~ - Inside source: true *** True Line Result # ============================= ** Processing line: ~ # array with multiple values hashes~ - Inside source: true *** True Line Result # array with multiple values hashes ** Processing line: ~ # =============================~ - Inside source: true *** True Line Result # ============================= ** Processing line: ~ input = (A (H first_name: "Side", last_name: "Kick"),~ - Inside source: true *** True Line Result input = (A (H first_name: "Side", last_name: "Kick"), ** Processing line: ~ (H first_name: "Tim", last_name: "Wizard"))~ - Inside source: true *** True Line Result (H first_name: "Tim", last_name: "Wizard")) ** Processing line: ~ expected = <<-S~ - Inside source: true *** True Line Result expected = <<-S ** Processing line: ~ [{:first_name "Side"~ - Inside source: true *** True Line Result [{:first_name "Side" ** Processing line: ~ :last_name "Kick"}~ - Inside source: true *** True Line Result :last_name "Kick"} ** Processing line: ~ {:first_name "Tim"~ - Inside source: true *** True Line Result {:first_name "Tim" ** Processing line: ~ :last_name "Wizard"}]~ - Inside source: true *** True Line Result :last_name "Wizard"}] ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ (assert_format args, assert, input, expected)~ - Inside source: true *** True Line Result (assert_format args, assert, input, expected) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_nested_nested args, assert~ - Inside source: true *** True Line Result def test_nested_nested args, assert ** Processing line: ~ # =============================~ - Inside source: true *** True Line Result # ============================= ** Processing line: ~ # nested array in nested hash~ - Inside source: true *** True Line Result # nested array in nested hash ** Processing line: ~ # =============================~ - Inside source: true *** True Line Result # ============================= ** Processing line: ~ input = (H type: :root,~ - Inside source: true *** True Line Result input = (H type: :root, ** Processing line: ~ text: "Root",~ - Inside source: true *** True Line Result text: "Root", ** Processing line: ~ children: (A (H level: 1,~ - Inside source: true *** True Line Result children: (A (H level: 1, ** Processing line: ~ text: "Level 1",~ - Inside source: true *** True Line Result text: "Level 1", ** Processing line: ~ children: (A (H level: 2,~ - Inside source: true *** True Line Result children: (A (H level: 2, ** Processing line: ~ text: "Level 2",~ - Inside source: true *** True Line Result text: "Level 2", ** Processing line: ~ children: [])))))~ - Inside source: true *** True Line Result children: []))))) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ expected = <<-S~ - Inside source: true *** True Line Result expected = <<-S ** Processing line: ~ {:type :root~ - Inside source: true *** True Line Result {:type :root ** Processing line: ~ :text "Root"~ - Inside source: true *** True Line Result :text "Root" ** Processing line: ~ :children [{:level 1~ - Inside source: true *** True Line Result :children [{:level 1 ** Processing line: ~ :text "Level 1"~ - Inside source: true *** True Line Result :text "Level 1" ** Processing line: ~ :children [{:level 2~ - Inside source: true *** True Line Result :children [{:level 2 ** Processing line: ~ :text "Level 2"~ - Inside source: true *** True Line Result :text "Level 2" ** Processing line: ~ :children []}]}]}~ - Inside source: true *** True Line Result :children []}]}]} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ (assert_format args, assert, input, expected)~ - Inside source: true *** True Line Result (assert_format args, assert, input, expected) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_scene args, assert~ - Inside source: true *** True Line Result def test_scene args, assert ** Processing line: ~ script = <<-S~ - Inside source: true *** True Line Result script = <<-S ** Processing line: ~ * Scene 1~ - Inside source: true *** True Line Result * Scene 1 ** Processing line: ~ ** Narrator~ - Inside source: true *** True Line Result ** Narrator ** Processing line: ~ They say happy endings don't exist.~ - Inside source: true *** True Line Result They say happy endings don't exist. ** Processing line: ~ ** Narrator~ - Inside source: true *** True Line Result ** Narrator ** Processing line: ~ They say true love is a lie.~ - Inside source: true *** True Line Result They say true love is a lie. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ input = parse_org args, script~ - Inside source: true *** True Line Result input = parse_org args, script ** Processing line: ~ puts (args.fn.pretty_format input)~ - Inside source: true *** True Line Result puts (args.fn.pretty_format input) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Unit Tests - require_tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Unit Tests - require_tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/require_tests.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/03_unit_tests/require_tests.rb ** Processing line: ~ def write_src path, src~ - Inside source: true *** True Line Result def write_src path, src ** Processing line: ~ $gtk.write_file path, src~ - Inside source: true *** True Line Result $gtk.write_file path, src ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ write_src 'app/unit_testing_game.rb', <<-S~ - Inside source: true *** True Line Result write_src 'app/unit_testing_game.rb', <<-S ** Processing line: ~ module UnitTesting~ - Inside source: true *** True Line Result module UnitTesting ** Processing line: ~ class Game~ - Inside source: true *** True Line Result class Game ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ write_src 'lib/unit_testing_lib.rb', <<-S~ - Inside source: true *** True Line Result write_src 'lib/unit_testing_lib.rb', <<-S ** Processing line: ~ module UnitTesting~ - Inside source: true *** True Line Result module UnitTesting ** Processing line: ~ class Lib~ - Inside source: true *** True Line Result class Lib ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ write_src 'app/nested/unit_testing_nested.rb', <<-S~ - Inside source: true *** True Line Result write_src 'app/nested/unit_testing_nested.rb', <<-S ** Processing line: ~ module UnitTesting~ - Inside source: true *** True Line Result module UnitTesting ** Processing line: ~ class Nested~ - Inside source: true *** True Line Result class Nested ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ require 'app/unit_testing_game.rb'~ - Inside source: true *** True Line Result require 'app/unit_testing_game.rb' ** Processing line: ~ require 'app/nested/unit_testing_nested.rb'~ - Inside source: true *** True Line Result require 'app/nested/unit_testing_nested.rb' ** Processing line: ~ require 'lib/unit_testing_lib.rb'~ - Inside source: true *** True Line Result require 'lib/unit_testing_lib.rb' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_require args, assert~ - Inside source: true *** True Line Result def test_require args, assert ** Processing line: ~ UnitTesting::Game.new~ - Inside source: true *** True Line Result UnitTesting::Game.new ** Processing line: ~ UnitTesting::Lib.new~ - Inside source: true *** True Line Result UnitTesting::Lib.new ** Processing line: ~ UnitTesting::Nested.new~ - Inside source: true *** True Line Result UnitTesting::Nested.new ** Processing line: ~ $gtk.exec 'rm ./mygame/app/unit_testing_game.rb'~ - Inside source: true *** True Line Result $gtk.exec 'rm ./mygame/app/unit_testing_game.rb' ** Processing line: ~ $gtk.exec 'rm ./mygame/app/nested/unit_testing_nested.rb'~ - Inside source: true *** True Line Result $gtk.exec 'rm ./mygame/app/nested/unit_testing_nested.rb' ** Processing line: ~ $gtk.exec 'rm ./mygame/lib/unit_testing_lib.rb'~ - Inside source: true *** True Line Result $gtk.exec 'rm ./mygame/lib/unit_testing_lib.rb' ** Processing line: ~ assert.ok!~ - Inside source: true *** True Line Result assert.ok! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Unit Tests - serialize_deserialize_tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Unit Tests - serialize_deserialize_tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/serialize_deserialize_tests.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/03_unit_tests/serialize_deserialize_tests.rb ** Processing line: ~ def test_serialize args, assert~ - Inside source: true *** True Line Result def test_serialize args, assert ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ args.state.player_one = "test"~ - Inside source: true *** True Line Result args.state.player_one = "test" ** Processing line: ~ result = args.gtk.serialize_state args.state~ - Inside source: true *** True Line Result result = args.gtk.serialize_state args.state ** Processing line: ~ assert.equal! result, "{:entity_id=>4, :entity_keys_by_ref=>{}, :tick_count=>-1, :player_one=>\"test\"}"~ - Inside source: true *** True Line Result assert.equal! result, "{:entity_id=>4, :entity_keys_by_ref=>{}, :tick_count=>-1, :player_one=>\"test\"}" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ args.gtk.write_file 'state.txt', ''~ - Inside source: true *** True Line Result args.gtk.write_file 'state.txt', '' ** Processing line: ~ result = args.gtk.serialize_state 'state.txt', args.state~ - Inside source: true *** True Line Result result = args.gtk.serialize_state 'state.txt', args.state ** Processing line: ~ assert.equal! result, "{:entity_id=>4, :entity_keys_by_ref=>{}, :tick_count=>-1, :player_one=>\"test\"}"~ - Inside source: true *** True Line Result assert.equal! result, "{:entity_id=>4, :entity_keys_by_ref=>{}, :tick_count=>-1, :player_one=>\"test\"}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_deserialize args, assert~ - Inside source: true *** True Line Result def test_deserialize args, assert ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ result = args.gtk.deserialize_state '{:entity_id=>3, :tick_count=>-1, :player_one=>"test"}'~ - Inside source: true *** True Line Result result = args.gtk.deserialize_state '{:entity_id=>3, :tick_count=>-1, :player_one=>"test"}' ** Processing line: ~ assert.equal! result.player_one, "test"~ - Inside source: true *** True Line Result assert.equal! result.player_one, "test" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ args.gtk.write_file 'state.txt', '{:entity_id=>3, :tick_count=>-1, :player_one=>"test"}'~ - Inside source: true *** True Line Result args.gtk.write_file 'state.txt', '{:entity_id=>3, :tick_count=>-1, :player_one=>"test"}' ** Processing line: ~ result = args.gtk.deserialize_state 'state.txt'~ - Inside source: true *** True Line Result result = args.gtk.deserialize_state 'state.txt' ** Processing line: ~ assert.equal! result.player_one, "test"~ - Inside source: true *** True Line Result assert.equal! result.player_one, "test" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_very_large_serialization args, assert~ - Inside source: true *** True Line Result def test_very_large_serialization args, assert ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ size = 3000~ - Inside source: true *** True Line Result size = 3000 ** Processing line: ~ size.map_with_index do |i|~ - Inside source: true *** True Line Result size.map_with_index do |i| ** Processing line: ~ args.state.send("k#{i}=".to_sym, i)~ - Inside source: true *** True Line Result args.state.send("k#{i}=".to_sym, i) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result = args.gtk.serialize_state args.state~ - Inside source: true *** True Line Result result = args.gtk.serialize_state args.state ** Processing line: ~ assert.true! (args.gtk.console.log.join.include? "unlikely a string this large will deserialize correctly")~ - Inside source: true *** True Line Result assert.true! (args.gtk.console.log.join.include? "unlikely a string this large will deserialize correctly") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_strict_entity_serialization args, assert~ - Inside source: true *** True Line Result def test_strict_entity_serialization args, assert ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ args.state.player_one = args.state.new_entity(:player, name: "Ryu")~ - Inside source: true *** True Line Result args.state.player_one = args.state.new_entity(:player, name: "Ryu") ** Processing line: ~ args.state.player_two = args.state.new_entity_strict(:player_strict, name: "Ken")~ - Inside source: true *** True Line Result args.state.player_two = args.state.new_entity_strict(:player_strict, name: "Ken") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ serialized_state = args.gtk.serialize_state args.state~ - Inside source: true *** True Line Result serialized_state = args.gtk.serialize_state args.state ** Processing line: ~ assert.equal! serialized_state, '{:entity_id=>1, :entity_keys_by_ref=>{}, :tick_count=>-1, :player_one=>{:entity_id=>1, :entity_name=>:player, :entity_keys_by_ref=>{}, :entity_type=>:player, :created_at=>-1, :global_created_at=>-1, :name=>"Ryu"}, :player_two=>{:entity_id=>3, :entity_name=>:player_strict, :entity_type=>:player_strict, :created_at=>-1, :global_created_at_elapsed=>-1, :entity_strict=>true, :entity_keys_by_ref=>{:entity_type=>:entity_name, :global_created_at_elapsed=>:created_at}, :name=>"Ken"}}'~ - Inside source: true *** True Line Result assert.equal! serialized_state, '{:entity_id=>1, :entity_keys_by_ref=>{}, :tick_count=>-1, :player_one=>{:entity_id=>1, :entity_name=>:player, :entity_keys_by_ref=>{}, :entity_type=>:player, :created_at=>-1, :global_created_at=>-1, :name=>"Ryu"}, :player_two=>{:entity_id=>3, :entity_name=>:player_strict, :entity_type=>:player_strict, :created_at=>-1, :global_created_at_elapsed=>-1, :entity_strict=>true, :entity_keys_by_ref=>{:entity_type=>:entity_name, :global_created_at_elapsed=>:created_at}, :name=>"Ken"}}' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ deserialize_state = args.gtk.deserialize_state serialized_state~ - Inside source: true *** True Line Result deserialize_state = args.gtk.deserialize_state serialized_state ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.equal! args.state.player_one.name, deserialize_state.player_one.name~ - Inside source: true *** True Line Result assert.equal! args.state.player_one.name, deserialize_state.player_one.name ** Processing line: ~ assert.true! args.state.player_one.is_a? GTK::OpenEntity~ - Inside source: true *** True Line Result assert.true! args.state.player_one.is_a? GTK::OpenEntity ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.equal! args.state.player_two.name, deserialize_state.player_two.name~ - Inside source: true *** True Line Result assert.equal! args.state.player_two.name, deserialize_state.player_two.name ** Processing line: ~ assert.true! args.state.player_two.is_a? GTK::StrictEntity~ - Inside source: true *** True Line Result assert.true! args.state.player_two.is_a? GTK::StrictEntity ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_strict_entity_serialization_with_nil args, assert~ - Inside source: true *** True Line Result def test_strict_entity_serialization_with_nil args, assert ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ args.state.player_one = args.state.new_entity(:player, name: "Ryu")~ - Inside source: true *** True Line Result args.state.player_one = args.state.new_entity(:player, name: "Ryu") ** Processing line: ~ args.state.player_two = args.state.new_entity_strict(:player_strict, name: "Ken", blood_type: nil)~ - Inside source: true *** True Line Result args.state.player_two = args.state.new_entity_strict(:player_strict, name: "Ken", blood_type: nil) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ serialized_state = args.gtk.serialize_state args.state~ - Inside source: true *** True Line Result serialized_state = args.gtk.serialize_state args.state ** Processing line: ~ assert.equal! serialized_state, '{:entity_id=>7, :entity_keys_by_ref=>{}, :tick_count=>-1, :player_one=>{:entity_id=>1, :entity_name=>:player, :entity_keys_by_ref=>{}, :entity_type=>:player, :created_at=>-1, :global_created_at=>-1, :name=>"Ryu"}, :player_two=>{:entity_id=>2, :entity_name=>:player_strict, :entity_type=>:player_strict, :created_at=>-1, :global_created_at_elapsed=>-1, :entity_strict=>true, :entity_keys_by_ref=>{:entity_type=>:entity_name, :global_created_at_elapsed=>:created_at}, :name=>"Ken", :blood_type=>nil}}'~ - Inside source: true *** True Line Result assert.equal! serialized_state, '{:entity_id=>7, :entity_keys_by_ref=>{}, :tick_count=>-1, :player_one=>{:entity_id=>1, :entity_name=>:player, :entity_keys_by_ref=>{}, :entity_type=>:player, :created_at=>-1, :global_created_at=>-1, :name=>"Ryu"}, :player_two=>{:entity_id=>2, :entity_name=>:player_strict, :entity_type=>:player_strict, :created_at=>-1, :global_created_at_elapsed=>-1, :entity_strict=>true, :entity_keys_by_ref=>{:entity_type=>:entity_name, :global_created_at_elapsed=>:created_at}, :name=>"Ken", :blood_type=>nil}}' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ deserialized_state = args.gtk.deserialize_state serialized_state~ - Inside source: true *** True Line Result deserialized_state = args.gtk.deserialize_state serialized_state ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.equal! args.state.player_one.name, deserialized_state.player_one.name~ - Inside source: true *** True Line Result assert.equal! args.state.player_one.name, deserialized_state.player_one.name ** Processing line: ~ assert.true! args.state.player_one.is_a? GTK::OpenEntity~ - Inside source: true *** True Line Result assert.true! args.state.player_one.is_a? GTK::OpenEntity ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.equal! args.state.player_two.name, deserialized_state.player_two.name~ - Inside source: true *** True Line Result assert.equal! args.state.player_two.name, deserialized_state.player_two.name ** Processing line: ~ assert.equal! args.state.player_two.blood_type, deserialized_state.player_two.blood_type~ - Inside source: true *** True Line Result assert.equal! args.state.player_two.blood_type, deserialized_state.player_two.blood_type ** Processing line: ~ assert.equal! deserialized_state.player_two.blood_type, nil~ - Inside source: true *** True Line Result assert.equal! deserialized_state.player_two.blood_type, nil ** Processing line: ~ assert.true! args.state.player_two.is_a? GTK::StrictEntity~ - Inside source: true *** True Line Result assert.true! args.state.player_two.is_a? GTK::StrictEntity ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ deserialized_state.player_two.blood_type = :O~ - Inside source: true *** True Line Result deserialized_state.player_two.blood_type = :O ** Processing line: ~ assert.equal! deserialized_state.player_two.blood_type, :O~ - Inside source: true *** True Line Result assert.equal! deserialized_state.player_two.blood_type, :O ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_multiple_strict_entities args, assert~ - Inside source: true *** True Line Result def test_multiple_strict_entities args, assert ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ args.state.player = args.state.new_entity_strict(:player_one, name: "Ryu")~ - Inside source: true *** True Line Result args.state.player = args.state.new_entity_strict(:player_one, name: "Ryu") ** Processing line: ~ args.state.enemy = args.state.new_entity_strict(:enemy, name: "Bison", other_property: 'extra mean')~ - Inside source: true *** True Line Result args.state.enemy = args.state.new_entity_strict(:enemy, name: "Bison", other_property: 'extra mean') ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ serialized_state = args.gtk.serialize_state args.state~ - Inside source: true *** True Line Result serialized_state = args.gtk.serialize_state args.state ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ deserialized_state = args.gtk.deserialize_state serialized_state~ - Inside source: true *** True Line Result deserialized_state = args.gtk.deserialize_state serialized_state ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ assert.equal! deserialized_state.player.name, "Ryu"~ - Inside source: true *** True Line Result assert.equal! deserialized_state.player.name, "Ryu" ** Processing line: ~ assert.equal! deserialized_state.enemy.other_property, "extra mean"~ - Inside source: true *** True Line Result assert.equal! deserialized_state.enemy.other_property, "extra mean" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_by_reference_state args, assert~ - Inside source: true *** True Line Result def test_by_reference_state args, assert ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ args.state.a = { name: "Jane Doe" }~ - Inside source: true *** True Line Result args.state.a = { name: "Jane Doe" } ** Processing line: ~ args.state.b = args.state.a~ - Inside source: true *** True Line Result args.state.b = args.state.a ** Processing line: ~ assert.equal! args.state.a.object_id, args.state.b.object_id~ - Inside source: true *** True Line Result assert.equal! args.state.a.object_id, args.state.b.object_id ** Processing line: ~ serialized_state = args.gtk.serialize_state args.state~ - Inside source: true *** True Line Result serialized_state = args.gtk.serialize_state args.state ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ deserialized_state = args.gtk.deserialize_state serialized_state~ - Inside source: true *** True Line Result deserialized_state = args.gtk.deserialize_state serialized_state ** Processing line: ~ assert.equal! deserialized_state.a.object_id, deserialized_state.b.object_id~ - Inside source: true *** True Line Result assert.equal! deserialized_state.a.object_id, deserialized_state.b.object_id ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_by_reference_state_strict_entities args, assert~ - Inside source: true *** True Line Result def test_by_reference_state_strict_entities args, assert ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ args.state.a = { name: "Jane Doe" }~ - Inside source: true *** True Line Result args.state.a = { name: "Jane Doe" } ** Processing line: ~ args.state.strict_entity = args.state.new_entity_strict(:couple) do |e|~ - Inside source: true *** True Line Result args.state.strict_entity = args.state.new_entity_strict(:couple) do |e| ** Processing line: ~ e.one = args.state.new_entity_strict(:person, name: "Jane")~ - Inside source: true *** True Line Result e.one = args.state.new_entity_strict(:person, name: "Jane") ** Processing line: ~ e.two = e.one~ - Inside source: true *** True Line Result e.two = e.one ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ assert.equal! args.state.strict_entity.one, args.state.strict_entity.two~ - Inside source: true *** True Line Result assert.equal! args.state.strict_entity.one, args.state.strict_entity.two ** Processing line: ~ serialized_state = args.gtk.serialize_state args.state~ - Inside source: true *** True Line Result serialized_state = args.gtk.serialize_state args.state ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ deserialized_state = args.gtk.deserialize_state serialized_state~ - Inside source: true *** True Line Result deserialized_state = args.gtk.deserialize_state serialized_state ** Processing line: ~ assert.equal! deserialized_state.strict_entity.one, deserialized_state.strict_entity.two~ - Inside source: true *** True Line Result assert.equal! deserialized_state.strict_entity.one, deserialized_state.strict_entity.two ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_serialization_excludes_thrash_count args, assert~ - Inside source: true *** True Line Result def test_serialization_excludes_thrash_count args, assert ** Processing line: ~ GTK::Entity.__reset_id__!~ - Inside source: true *** True Line Result GTK::Entity.__reset_id__! ** Processing line: ~ args.state.player.name = "Ryu"~ - Inside source: true *** True Line Result args.state.player.name = "Ryu" ** Processing line: ~ # force a nil pun~ - Inside source: true *** True Line Result # force a nil pun ** Processing line: ~ if args.state.player.age > 30~ - Inside source: true *** True Line Result if args.state.player.age > 30 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ assert.equal! args.state.player.as_hash[:__thrash_count__][:>], 1~ - Inside source: true *** True Line Result assert.equal! args.state.player.as_hash[:__thrash_count__][:>], 1 ** Processing line: ~ result = args.gtk.serialize_state args.state~ - Inside source: true *** True Line Result result = args.gtk.serialize_state args.state ** Processing line: ~ assert.false! (result.include? "__thrash_count__"),~ - Inside source: true *** True Line Result assert.false! (result.include? "__thrash_count__"), ** Processing line: ~ "The __thrash_count__ key exists in state when it shouldn't have."~ - Inside source: true *** True Line Result "The __thrash_count__ key exists in state when it shouldn't have." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Unit Tests - state_serialization_experimental_tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Unit Tests - state_serialization_experimental_tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/state_serialization_experimental_tests.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/03_unit_tests/state_serialization_experimental_tests.rb ** Processing line: ~ MAX_CODE_GEN_LENGTH = 50~ - Inside source: true *** True Line Result MAX_CODE_GEN_LENGTH = 50 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # NOTE: This is experimental/advanced stuff.~ - Inside source: true *** True Line Result # NOTE: This is experimental/advanced stuff. ** Processing line: ~ def needs_partitioning? target~ - Inside source: true *** True Line Result def needs_partitioning? target ** Processing line: ~ target[:value].to_s.length > MAX_CODE_GEN_LENGTH~ - Inside source: true *** True Line Result target[:value].to_s.length > MAX_CODE_GEN_LENGTH ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def partition target~ - Inside source: true *** True Line Result def partition target ** Processing line: ~ return [] unless needs_partitioning? target~ - Inside source: true *** True Line Result return [] unless needs_partitioning? target ** Processing line: ~ if target[:value].is_a? GTK::OpenEntity~ - Inside source: true *** True Line Result if target[:value].is_a? GTK::OpenEntity ** Processing line: ~ target[:value] = target[:value].hash~ - Inside source: true *** True Line Result target[:value] = target[:value].hash ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results = []~ - Inside source: true *** True Line Result results = [] ** Processing line: ~ idx = 0~ - Inside source: true *** True Line Result idx = 0 ** Processing line: ~ left, right = target[:value].partition do~ - Inside source: true *** True Line Result left, right = target[:value].partition do ** Processing line: ~ idx += 1~ - Inside source: true *** True Line Result idx += 1 ** Processing line: ~ idx.even?~ - Inside source: true *** True Line Result idx.even? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ left, right = Hash[left], Hash[right]~ - Inside source: true *** True Line Result left, right = Hash[left], Hash[right] ** Processing line: ~ left = { value: left }~ - Inside source: true *** True Line Result left = { value: left } ** Processing line: ~ right = { value: right}~ - Inside source: true *** True Line Result right = { value: right} ** Processing line: ~ [left, right]~ - Inside source: true *** True Line Result [left, right] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def add_partition target, path, aggregate, final_result~ - Inside source: true *** True Line Result def add_partition target, path, aggregate, final_result ** Processing line: ~ partitions = partition target~ - Inside source: true *** True Line Result partitions = partition target ** Processing line: ~ partitions.each do |part|~ - Inside source: true *** True Line Result partitions.each do |part| ** Processing line: ~ if needs_partitioning? part~ - Inside source: true *** True Line Result if needs_partitioning? part ** Processing line: ~ if part[:value].keys.length == 1~ - Inside source: true *** True Line Result if part[:value].keys.length == 1 ** Processing line: ~ first_key = part[:value].keys[0]~ - Inside source: true *** True Line Result first_key = part[:value].keys[0] ** Processing line: ~ new_part = { value: part[:value][first_key] }~ - Inside source: true *** True Line Result new_part = { value: part[:value][first_key] } ** Processing line: ~ path.push first_key~ - Inside source: true *** True Line Result path.push first_key ** Processing line: ~ add_partition new_part, path, aggregate, final_result~ - Inside source: true *** True Line Result add_partition new_part, path, aggregate, final_result ** Processing line: ~ path.pop~ - Inside source: true *** True Line Result path.pop ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ add_partition part, path, aggregate, final_result~ - Inside source: true *** True Line Result add_partition part, path, aggregate, final_result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ final_result << { value: { __path__: [*path] } }~ - Inside source: true *** True Line Result final_result << { value: { __path__: [*path] } } ** Processing line: ~ final_result << { value: part[:value] }~ - Inside source: true *** True Line Result final_result << { value: part[:value] } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def state_to_string state~ - Inside source: true *** True Line Result def state_to_string state ** Processing line: ~ parts_queue = []~ - Inside source: true *** True Line Result parts_queue = [] ** Processing line: ~ final_queue = []~ - Inside source: true *** True Line Result final_queue = [] ** Processing line: ~ add_partition({ value: state.hash },~ - Inside source: true *** True Line Result add_partition({ value: state.hash }, ** Processing line: ~ [],~ - Inside source: true *** True Line Result [], ** Processing line: ~ parts_queue,~ - Inside source: true *** True Line Result parts_queue, ** Processing line: ~ final_queue)~ - Inside source: true *** True Line Result final_queue) ** Processing line: ~ final_queue.reject {|i| i[:value].keys.length == 0}.map do |i|~ - Inside source: true *** True Line Result final_queue.reject {|i| i[:value].keys.length == 0}.map do |i| ** Processing line: ~ i[:value].to_s~ - Inside source: true *** True Line Result i[:value].to_s ** Processing line: ~ end.join("\n#==================================================#\n")~ - Inside source: true *** True Line Result end.join("\n#==================================================#\n") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def state_from_string string~ - Inside source: true *** True Line Result def state_from_string string ** Processing line: ~ Kernel.eval("$load_data = {}")~ - Inside source: true *** True Line Result Kernel.eval("$load_data = {}") ** Processing line: ~ lines = string.split("\n#==================================================#\n")~ - Inside source: true *** True Line Result lines = string.split("\n#==================================================#\n") ** Processing line: ~ lines.each do |l|~ - Inside source: true *** True Line Result lines.each do |l| ** Processing line: ~ puts "todo: #{l}"~ - Inside source: true *** True Line Result puts "todo: #{l}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ GTK::OpenEntity.parse_from_hash $load_data~ - Inside source: true *** True Line Result GTK::OpenEntity.parse_from_hash $load_data ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_save_and_load args, assert~ - Inside source: true *** True Line Result def test_save_and_load args, assert ** Processing line: ~ args.state.item_1.name = "Jane"~ - Inside source: true *** True Line Result args.state.item_1.name = "Jane" ** Processing line: ~ string = state_to_string args.state~ - Inside source: true *** True Line Result string = state_to_string args.state ** Processing line: ~ state = state_from_string string~ - Inside source: true *** True Line Result state = state_from_string string ** Processing line: ~ assert.equal! args.state.item_1.name, state.item_1.name~ - Inside source: true *** True Line Result assert.equal! args.state.item_1.name, state.item_1.name ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_save_and_load_big args, assert~ - Inside source: true *** True Line Result def test_save_and_load_big args, assert ** Processing line: ~ size = 1000~ - Inside source: true *** True Line Result size = 1000 ** Processing line: ~ size.map_with_index do |i|~ - Inside source: true *** True Line Result size.map_with_index do |i| ** Processing line: ~ args.state.send("k#{i}=".to_sym, i)~ - Inside source: true *** True Line Result args.state.send("k#{i}=".to_sym, i) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ string = state_to_string args.state~ - Inside source: true *** True Line Result string = state_to_string args.state ** Processing line: ~ state = state_from_string string~ - Inside source: true *** True Line Result state = state_from_string string ** Processing line: ~ size.map_with_index do |i|~ - Inside source: true *** True Line Result size.map_with_index do |i| ** Processing line: ~ assert.equal! args.state.send("k#{i}".to_sym), state.send("k#{i}".to_sym)~ - Inside source: true *** True Line Result assert.equal! args.state.send("k#{i}".to_sym), state.send("k#{i}".to_sym) ** Processing line: ~ assert.equal! args.state.send("k#{i}".to_sym), i~ - Inside source: true *** True Line Result assert.equal! args.state.send("k#{i}".to_sym), i ** Processing line: ~ assert.equal! state.send("k#{i}".to_sym), i~ - Inside source: true *** True Line Result assert.equal! state.send("k#{i}".to_sym), i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_save_and_load_big_nested args, assert~ - Inside source: true *** True Line Result def test_save_and_load_big_nested args, assert ** Processing line: ~ args.state.player_one.friend.nested_hash.k0 = 0~ - Inside source: true *** True Line Result args.state.player_one.friend.nested_hash.k0 = 0 ** Processing line: ~ args.state.player_one.friend.nested_hash.k1 = 1~ - Inside source: true *** True Line Result args.state.player_one.friend.nested_hash.k1 = 1 ** Processing line: ~ args.state.player_one.friend.nested_hash.k2 = 2~ - Inside source: true *** True Line Result args.state.player_one.friend.nested_hash.k2 = 2 ** Processing line: ~ args.state.player_one.friend.nested_hash.k3 = 3~ - Inside source: true *** True Line Result args.state.player_one.friend.nested_hash.k3 = 3 ** Processing line: ~ args.state.player_one.friend.nested_hash.k4 = 4~ - Inside source: true *** True Line Result args.state.player_one.friend.nested_hash.k4 = 4 ** Processing line: ~ args.state.player_one.friend.nested_hash.k5 = 5~ - Inside source: true *** True Line Result args.state.player_one.friend.nested_hash.k5 = 5 ** Processing line: ~ args.state.player_one.friend.nested_hash.k6 = 6~ - Inside source: true *** True Line Result args.state.player_one.friend.nested_hash.k6 = 6 ** Processing line: ~ args.state.player_one.friend.nested_hash.k7 = 7~ - Inside source: true *** True Line Result args.state.player_one.friend.nested_hash.k7 = 7 ** Processing line: ~ args.state.player_one.friend.nested_hash.k8 = 8~ - Inside source: true *** True Line Result args.state.player_one.friend.nested_hash.k8 = 8 ** Processing line: ~ args.state.player_one.friend.nested_hash.k9 = 9~ - Inside source: true *** True Line Result args.state.player_one.friend.nested_hash.k9 = 9 ** Processing line: ~ string = state_to_string args.state~ - Inside source: true *** True Line Result string = state_to_string args.state ** Processing line: ~ state = state_from_string string~ - Inside source: true *** True Line Result state = state_from_string string ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset 100~ - Inside source: true *** True Line Result $gtk.reset 100 ** Processing line: ~ $gtk.log_level = :off~ - Inside source: true *** True Line Result $gtk.log_level = :off ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Advanced Debugging - Unit Tests - suggest_autocompletion_tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Advanced Debugging - Unit Tests - suggest_autocompletion_tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/suggest_autocompletion_tests.rb~ - Inside source: true *** True Line Result # ./samples/10_advanced_debugging/03_unit_tests/suggest_autocompletion_tests.rb ** Processing line: ~ def default_suggest_autocompletion args~ - Inside source: true *** True Line Result def default_suggest_autocompletion args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ index: 4,~ - Inside source: true *** True Line Result index: 4, ** Processing line: ~ text: "args.",~ - Inside source: true *** True Line Result text: "args.", ** Processing line: ~ __meta__: {~ - Inside source: true *** True Line Result __meta__: { ** Processing line: ~ other_options: [~ - Inside source: true *** True Line Result other_options: [ ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ index: Fixnum,~ - Inside source: true *** True Line Result index: Fixnum, ** Processing line: ~ file: "app/main.rb"~ - Inside source: true *** True Line Result file: "app/main.rb" ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def assert_completion source, *expected~ - Inside source: true *** True Line Result def assert_completion source, *expected ** Processing line: ~ results = suggest_autocompletion text: (source.strip.gsub ":cursor", ""),~ - Inside source: true *** True Line Result results = suggest_autocompletion text: (source.strip.gsub ":cursor", ""), ** Processing line: ~ index: (source.strip.index ":cursor")~ - Inside source: true *** True Line Result index: (source.strip.index ":cursor") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts results~ - Inside source: true *** True Line Result puts results ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_args_completion args, assert~ - Inside source: true *** True Line Result def test_args_completion args, assert ** Processing line: ~ $gtk.write_file_root "autocomplete.txt", ($gtk.suggest_autocompletion text: <<-S, index: 128).join("\n")~ - Inside source: true *** True Line Result $gtk.write_file_root "autocomplete.txt", ($gtk.suggest_autocompletion text: <<-S, index: 128).join("\n") ** Processing line: ~ require 'app/game.rb'~ - Inside source: true *** True Line Result require 'app/game.rb' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.gtk.suppress_mailbox = false~ - Inside source: true *** True Line Result args.gtk.suppress_mailbox = false ** Processing line: ~ $game ||= Game.new~ - Inside source: true *** True Line Result $game ||= Game.new ** Processing line: ~ $game.args = args~ - Inside source: true *** True Line Result $game.args = args ** Processing line: ~ $game.args.~ - Inside source: true *** True Line Result $game.args. ** Processing line: ~ $game.tick~ - Inside source: true *** True Line Result $game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts "contents:"~ - Inside source: true *** True Line Result puts "contents:" ** Processing line: ~ puts ($gtk.read_file "autocomplete.txt")~ - Inside source: true *** True Line Result puts ($gtk.read_file "autocomplete.txt") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Http - Retrieve Images - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Http - Retrieve Images - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/11_http/01_retrieve_images/app/main.rb~ - Inside source: true *** True Line Result # ./samples/11_http/01_retrieve_images/app/main.rb ** Processing line: ~ $gtk.register_cvar 'app.warn_seconds', "seconds to wait before starting", :uint, 11~ - Inside source: true *** True Line Result $gtk.register_cvar 'app.warn_seconds', "seconds to wait before starting", :uint, 11 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Show a warning at the start.~ - Inside source: true *** True Line Result # Show a warning at the start. ** Processing line: ~ args.state.warning_debounce ||= args.cvars['app.warn_seconds'].value * 60~ - Inside source: true *** True Line Result args.state.warning_debounce ||= args.cvars['app.warn_seconds'].value * 60 ** Processing line: ~ if args.state.warning_debounce > 0~ - Inside source: true *** True Line Result if args.state.warning_debounce > 0 ** Processing line: ~ args.state.warning_debounce -= 1~ - Inside source: true *** True Line Result args.state.warning_debounce -= 1 ** Processing line: ~ args.outputs.labels << [640, 600, "This app shows random images from the Internet.", 10, 1, 255, 255, 255]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 600, "This app shows random images from the Internet.", 10, 1, 255, 255, 255] ** Processing line: ~ args.outputs.labels << [640, 500, "Quit in the next few seconds if this is a problem.", 10, 1, 255, 255, 255]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 500, "Quit in the next few seconds if this is a problem.", 10, 1, 255, 255, 255] ** Processing line: ~ args.outputs.labels << [640, 350, "#{(args.state.warning_debounce / 60.0).to_i}", 10, 1, 255, 255, 255]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 350, "#{(args.state.warning_debounce / 60.0).to_i}", 10, 1, 255, 255, 255] ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.download_debounce ||= 0 # start immediately, reset to non zero later.~ - Inside source: true *** True Line Result args.state.download_debounce ||= 0 # start immediately, reset to non zero later. ** Processing line: ~ args.state.photos ||= []~ - Inside source: true *** True Line Result args.state.photos ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Put a little pause between each download.~ - Inside source: true *** True Line Result # Put a little pause between each download. ** Processing line: ~ if args.state.download.nil?~ - Inside source: true *** True Line Result if args.state.download.nil? ** Processing line: ~ if args.state.download_debounce > 0~ - Inside source: true *** True Line Result if args.state.download_debounce > 0 ** Processing line: ~ args.state.download_debounce -= 1~ - Inside source: true *** True Line Result args.state.download_debounce -= 1 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.download = $gtk.http_get 'https://picsum.photos/200/300.jpg'~ - Inside source: true *** True Line Result args.state.download = $gtk.http_get 'https://picsum.photos/200/300.jpg' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !args.state.download.nil?~ - Inside source: true *** True Line Result if !args.state.download.nil? ** Processing line: ~ if args.state.download[:complete]~ - Inside source: true *** True Line Result if args.state.download[:complete] ** Processing line: ~ if args.state.download[:http_response_code] == 200~ - Inside source: true *** True Line Result if args.state.download[:http_response_code] == 200 ** Processing line: ~ fname = "sprites/#{args.state.photos.length}.jpg"~ - Inside source: true *** True Line Result fname = "sprites/#{args.state.photos.length}.jpg" ** Processing line: ~ $gtk.write_file fname, args.state.download[:response_data]~ - Inside source: true *** True Line Result $gtk.write_file fname, args.state.download[:response_data] ** Processing line: ~ args.state.photos << [ 100 + rand(1080), 500 - rand(480), fname, rand(80) - 40 ]~ - Inside source: true *** True Line Result args.state.photos << [ 100 + rand(1080), 500 - rand(480), fname, rand(80) - 40 ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.download = nil~ - Inside source: true *** True Line Result args.state.download = nil ** Processing line: ~ args.state.download_debounce = (rand(3) + 2) * 60~ - Inside source: true *** True Line Result args.state.download_debounce = (rand(3) + 2) * 60 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # draw any downloaded photos...~ - Inside source: true *** True Line Result # draw any downloaded photos... ** Processing line: ~ args.state.photos.each { |i|~ - Inside source: true *** True Line Result args.state.photos.each { |i| ** Processing line: ~ args.outputs.primitives << [i[0], i[1], 200, 300, i[2], i[3]].sprite~ - Inside source: true *** True Line Result args.outputs.primitives << [i[0], i[1], 200, 300, i[2], i[3]].sprite ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draw a download progress bar...~ - Inside source: true *** True Line Result # Draw a download progress bar... ** Processing line: ~ args.outputs.primitives << [0, 0, 1280, 30, 0, 0, 0, 255].solid~ - Inside source: true *** True Line Result args.outputs.primitives << [0, 0, 1280, 30, 0, 0, 0, 255].solid ** Processing line: ~ if !args.state.download.nil?~ - Inside source: true *** True Line Result if !args.state.download.nil? ** Processing line: ~ br = args.state.download[:response_read]~ - Inside source: true *** True Line Result br = args.state.download[:response_read] ** Processing line: ~ total = args.state.download[:response_total]~ - Inside source: true *** True Line Result total = args.state.download[:response_total] ** Processing line: ~ if total != 0~ - Inside source: true *** True Line Result if total != 0 ** Processing line: ~ pct = br.to_f / total.to_f~ - Inside source: true *** True Line Result pct = br.to_f / total.to_f ** Processing line: ~ args.outputs.primitives << [0, 0, 1280 * pct, 30, 0, 0, 255, 255].solid~ - Inside source: true *** True Line Result args.outputs.primitives << [0, 0, 1280 * pct, 30, 0, 0, 255, 255].solid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Http - In Game Web Server Http Get - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Http - In Game Web Server Http Get - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/11_http/02_in_game_web_server_http_get/app/main.rb~ - Inside source: true *** True Line Result # ./samples/11_http/02_in_game_web_server_http_get/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.port ||= 3000~ - Inside source: true *** True Line Result args.state.port ||= 3000 ** Processing line: ~ args.state.reqnum ||= 0~ - Inside source: true *** True Line Result args.state.reqnum ||= 0 ** Processing line: ~ # by default the embedded webserver runs on port 9001 (the port number is over 9000) and is disabled in a production build~ - Inside source: true *** True Line Result # by default the embedded webserver runs on port 9001 (the port number is over 9000) and is disabled in a production build ** Processing line: ~ # to enable the http server in a production build, you need to manually start~ - Inside source: true *** True Line Result # to enable the http server in a production build, you need to manually start ** Processing line: ~ # the server up:~ - Inside source: true *** True Line Result # the server up: ** Processing line: ~ args.gtk.start_server! port: args.state.port, enable_in_prod: true~ - Inside source: true *** True Line Result args.gtk.start_server! port: args.state.port, enable_in_prod: true ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ args.outputs.labels << [640, 600, "Point your web browser at http://localhost:#{args.state.port}/", 10, 1, 255, 255, 255]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 600, "Point your web browser at http://localhost:#{args.state.port}/", 10, 1, 255, 255, 255] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.inputs.http_requests.each { |req|~ - Inside source: true *** True Line Result args.inputs.http_requests.each { |req| ** Processing line: ~ puts("METHOD: #{req.method}");~ - Inside source: true *** True Line Result puts("METHOD: #{req.method}"); ** Processing line: ~ puts("URI: #{req.uri}");~ - Inside source: true *** True Line Result puts("URI: #{req.uri}"); ** Processing line: ~ puts("HEADERS:");~ - Inside source: true *** True Line Result puts("HEADERS:"); ** Processing line: ~ req.headers.each { |k,v| puts(" #{k}: #{v}") }~ - Inside source: true *** True Line Result req.headers.each { |k,v| puts(" #{k}: #{v}") } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (req.uri == '/')~ - Inside source: true *** True Line Result if (req.uri == '/') ** Processing line: ~ # headers and body can be nil if you don't care about them.~ - Inside source: true *** True Line Result # headers and body can be nil if you don't care about them. ** Processing line: ~ # If you don't set the Content-Type, it will default to~ - Inside source: true *** True Line Result # If you don't set the Content-Type, it will default to ** Processing line: ~ # "text/html; charset=utf-8".~ - Inside source: true *** True Line Result # "text/html; charset=utf-8". ** Processing line: ~ # Don't set Content-Length; we'll ignore it and calculate it for you~ - Inside source: true *** True Line Result # Don't set Content-Length; we'll ignore it and calculate it for you ** Processing line: ~ args.state.reqnum += 1~ - Inside source: true *** True Line Result args.state.reqnum += 1 ** Processing line: ~ req.respond 200, "hello

This #{req.method} was request number #{args.state.reqnum}!

\n", { 'X-DRGTK-header' => 'Powered by DragonRuby!' }~ - Inside source: true *** True Line Result req.respond 200, "hello

This #{req.method} was request number #{args.state.reqnum}!

\n", { 'X-DRGTK-header' => 'Powered by DragonRuby!' } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ req.reject~ - Inside source: true *** True Line Result req.reject ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Http - In Game Web Server Http Post - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Http - In Game Web Server Http Post - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/11_http/03_in_game_web_server_http_post/app/main.rb~ - Inside source: true *** True Line Result # ./samples/11_http/03_in_game_web_server_http_post/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # defaults~ - Inside source: true *** True Line Result # defaults ** Processing line: ~ args.state.post_button = args.layout.rect(row: 0, col: 0, w: 5, h: 1).merge(text: "execute http_post")~ - Inside source: true *** True Line Result args.state.post_button = args.layout.rect(row: 0, col: 0, w: 5, h: 1).merge(text: "execute http_post") ** Processing line: ~ args.state.post_body_button = args.layout.rect(row: 1, col: 0, w: 5, h: 1).merge(text: "execute http_post_body")~ - Inside source: true *** True Line Result args.state.post_body_button = args.layout.rect(row: 1, col: 0, w: 5, h: 1).merge(text: "execute http_post_body") ** Processing line: ~ args.state.request_to_s ||= ""~ - Inside source: true *** True Line Result args.state.request_to_s ||= "" ** Processing line: ~ args.state.request_body ||= ""~ - Inside source: true *** True Line Result args.state.request_body ||= "" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render~ - Inside source: true *** True Line Result # render ** Processing line: ~ args.state.post_button.yield_self do |b|~ - Inside source: true *** True Line Result args.state.post_button.yield_self do |b| ** Processing line: ~ args.outputs.borders << b~ - Inside source: true *** True Line Result args.outputs.borders << b ** Processing line: ~ args.outputs.labels << b.merge(text: b.text,~ - Inside source: true *** True Line Result args.outputs.labels << b.merge(text: b.text, ** Processing line: ~ y: b.y + 30,~ - Inside source: true *** True Line Result y: b.y + 30, ** Processing line: ~ x: b.x + 10)~ - Inside source: true *** True Line Result x: b.x + 10) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.post_body_button.yield_self do |b|~ - Inside source: true *** True Line Result args.state.post_body_button.yield_self do |b| ** Processing line: ~ args.outputs.borders << b~ - Inside source: true *** True Line Result args.outputs.borders << b ** Processing line: ~ args.outputs.labels << b.merge(text: b.text,~ - Inside source: true *** True Line Result args.outputs.labels << b.merge(text: b.text, ** Processing line: ~ y: b.y + 30,~ - Inside source: true *** True Line Result y: b.y + 30, ** Processing line: ~ x: b.x + 10)~ - Inside source: true *** True Line Result x: b.x + 10) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ draw_label args, 0, 6, "Request:", args.state.request_to_s~ - Inside source: true *** True Line Result draw_label args, 0, 6, "Request:", args.state.request_to_s ** Processing line: ~ draw_label args, 0, 14, "Request Body Unaltered:", args.state.request_body~ - Inside source: true *** True Line Result draw_label args, 0, 14, "Request Body Unaltered:", args.state.request_body ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # input~ - Inside source: true *** True Line Result # input ** Processing line: ~ if args.inputs.mouse.click~ - Inside source: true *** True Line Result if args.inputs.mouse.click ** Processing line: ~ # ============= HTTP_POST =============~ - Inside source: true *** True Line Result # ============= HTTP_POST ============= ** Processing line: ~ if (args.inputs.mouse.inside_rect? args.state.post_button)~ - Inside source: true *** True Line Result if (args.inputs.mouse.inside_rect? args.state.post_button) ** Processing line: ~ # ========= DATA TO SEND ===========~ - Inside source: true *** True Line Result # ========= DATA TO SEND =========== ** Processing line: ~ form_fields = { "userId" => "#{Time.now.to_i}" }~ - Inside source: true *** True Line Result form_fields = { "userId" => "#{Time.now.to_i}" } ** Processing line: ~ # ==================================~ - Inside source: true *** True Line Result # ================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.gtk.http_post "http://localhost:9001/testing",~ - Inside source: true *** True Line Result args.gtk.http_post "http://localhost:9001/testing", ** Processing line: ~ form_fields,~ - Inside source: true *** True Line Result form_fields, ** Processing line: ~ ["Content-Type: application/x-www-form-urlencoded"]~ - Inside source: true *** True Line Result ["Content-Type: application/x-www-form-urlencoded"] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.gtk.notify! "http_post"~ - Inside source: true *** True Line Result args.gtk.notify! "http_post" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ============= HTTP_POST_BODY =============~ - Inside source: true *** True Line Result # ============= HTTP_POST_BODY ============= ** Processing line: ~ if (args.inputs.mouse.inside_rect? args.state.post_body_button)~ - Inside source: true *** True Line Result if (args.inputs.mouse.inside_rect? args.state.post_body_button) ** Processing line: ~ # =========== DATA TO SEND ==============~ - Inside source: true *** True Line Result # =========== DATA TO SEND ============== ** Processing line: ~ json = "{ \"userId\": \"#{Time.now.to_i}\"}"~ - Inside source: true *** True Line Result json = "{ \"userId\": \"#{Time.now.to_i}\"}" ** Processing line: ~ # ==================================~ - Inside source: true *** True Line Result # ================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.gtk.http_post_body "http://localhost:9001/testing",~ - Inside source: true *** True Line Result args.gtk.http_post_body "http://localhost:9001/testing", ** Processing line: ~ json,~ - Inside source: true *** True Line Result json, ** Processing line: ~ ["Content-Type: application/json", "Content-Length: #{json.length}"]~ - Inside source: true *** True Line Result ["Content-Type: application/json", "Content-Length: #{json.length}"] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.gtk.notify! "http_post_body"~ - Inside source: true *** True Line Result args.gtk.notify! "http_post_body" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # calc~ - Inside source: true *** True Line Result # calc ** Processing line: ~ args.inputs.http_requests.each do |r|~ - Inside source: true *** True Line Result args.inputs.http_requests.each do |r| ** Processing line: ~ puts "#{r}"~ - Inside source: true *** True Line Result puts "#{r}" ** Processing line: ~ if r.uri == "/testing"~ - Inside source: true *** True Line Result if r.uri == "/testing" ** Processing line: ~ puts r~ - Inside source: true *** True Line Result puts r ** Processing line: ~ args.state.request_to_s = "#{r}"~ - Inside source: true *** True Line Result args.state.request_to_s = "#{r}" ** Processing line: ~ args.state.request_body = r.raw_body~ - Inside source: true *** True Line Result args.state.request_body = r.raw_body ** Processing line: ~ r.respond 200, "ok"~ - Inside source: true *** True Line Result r.respond 200, "ok" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw_label args, row, col, header, text~ - Inside source: true *** True Line Result def draw_label args, row, col, header, text ** Processing line: ~ label_pos = args.layout.rect(row: row, col: col, w: 0, h: 0)~ - Inside source: true *** True Line Result label_pos = args.layout.rect(row: row, col: col, w: 0, h: 0) ** Processing line: ~ args.outputs.labels << "#{header}\n\n#{text}".wrapped_lines(80).map_with_index do |l, i|~ - Inside source: true *** True Line Result args.outputs.labels << "#{header}\n\n#{text}".wrapped_lines(80).map_with_index do |l, i| ** Processing line: ~ { x: label_pos.x, y: label_pos.y - (i * 15), text: l, size_enum: -2 }~ - Inside source: true *** True Line Result { x: label_pos.x, y: label_pos.y - (i * 15), text: l, size_enum: -2 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** C Extensions - Basics - main.rb~ - Header detected. *** True Line Result *** True Line Result *** C Extensions - Basics - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/12_c_extensions/01_basics/app/main.rb~ - Inside source: true *** True Line Result # ./samples/12_c_extensions/01_basics/app/main.rb ** Processing line: ~ $gtk.ffi_misc.gtk_dlopen("ext")~ - Inside source: true *** True Line Result $gtk.ffi_misc.gtk_dlopen("ext") ** Processing line: ~ include FFI::CExt~ - Inside source: true *** True Line Result include FFI::CExt ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.labels << [640, 500, "mouse.x = #{args.mouse.x.to_i}", 5, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 500, "mouse.x = #{args.mouse.x.to_i}", 5, 1] ** Processing line: ~ args.outputs.labels << [640, 460, "square(mouse.x) = #{square(args.mouse.x.to_i)}", 5, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 460, "square(mouse.x) = #{square(args.mouse.x.to_i)}", 5, 1] ** Processing line: ~ args.outputs.labels << [640, 420, "mouse.y = #{args.mouse.y.to_i}", 5, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 420, "mouse.y = #{args.mouse.y.to_i}", 5, 1] ** Processing line: ~ args.outputs.labels << [640, 380, "square(mouse.y) = #{square(args.mouse.y.to_i)}", 5, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 380, "square(mouse.y) = #{square(args.mouse.y.to_i)}", 5, 1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** C Extensions - Intermediate - main.rb~ - Header detected. *** True Line Result *** True Line Result *** C Extensions - Intermediate - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/12_c_extensions/02_intermediate/app/main.rb~ - Inside source: true *** True Line Result # ./samples/12_c_extensions/02_intermediate/app/main.rb ** Processing line: ~ $gtk.ffi_misc.gtk_dlopen("ext")~ - Inside source: true *** True Line Result $gtk.ffi_misc.gtk_dlopen("ext") ** Processing line: ~ include FFI::RE~ - Inside source: true *** True Line Result include FFI::RE ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def split_words(input)~ - Inside source: true *** True Line Result def split_words(input) ** Processing line: ~ words = []~ - Inside source: true *** True Line Result words = [] ** Processing line: ~ last = IntPointer.new~ - Inside source: true *** True Line Result last = IntPointer.new ** Processing line: ~ re = re_compile("\\w+")~ - Inside source: true *** True Line Result re = re_compile("\\w+") ** Processing line: ~ first = re_matchp(re, input, last)~ - Inside source: true *** True Line Result first = re_matchp(re, input, last) ** Processing line: ~ while first != -1~ - Inside source: true *** True Line Result while first != -1 ** Processing line: ~ words << input.slice(first, last.value)~ - Inside source: true *** True Line Result words << input.slice(first, last.value) ** Processing line: ~ input = input.slice(last.value + first, input.length)~ - Inside source: true *** True Line Result input = input.slice(last.value + first, input.length) ** Processing line: ~ first = re_matchp(re, input, last)~ - Inside source: true *** True Line Result first = re_matchp(re, input, last) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ words~ - Inside source: true *** True Line Result words ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.labels << [640, 500, split_words("hello, dragonriders!").join(' '), 5, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 500, split_words("hello, dragonriders!").join(' '), 5, 1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** C Extensions - Native Pixel Arrays - main.rb~ - Header detected. *** True Line Result *** True Line Result *** C Extensions - Native Pixel Arrays - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/12_c_extensions/03_native_pixel_arrays/app/main.rb~ - Inside source: true *** True Line Result # ./samples/12_c_extensions/03_native_pixel_arrays/app/main.rb ** Processing line: ~ $gtk.ffi_misc.gtk_dlopen("ext")~ - Inside source: true *** True Line Result $gtk.ffi_misc.gtk_dlopen("ext") ** Processing line: ~ include FFI::CExt~ - Inside source: true *** True Line Result include FFI::CExt ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.rotation ||= 0~ - Inside source: true *** True Line Result args.state.rotation ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ update_scanner_texture # this calls into a C extension!~ - Inside source: true *** True Line Result update_scanner_texture # this calls into a C extension! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # New/changed pixel arrays get uploaded to the GPU before we render~ - Inside source: true *** True Line Result # New/changed pixel arrays get uploaded to the GPU before we render ** Processing line: ~ # anything. At that point, they can be scaled, rotated, and otherwise~ - Inside source: true *** True Line Result # anything. At that point, they can be scaled, rotated, and otherwise ** Processing line: ~ # used like any other sprite.~ - Inside source: true *** True Line Result # used like any other sprite. ** Processing line: ~ w = 100~ - Inside source: true *** True Line Result w = 100 ** Processing line: ~ h = 100~ - Inside source: true *** True Line Result h = 100 ** Processing line: ~ x = (1280 - w) / 2~ - Inside source: true *** True Line Result x = (1280 - w) / 2 ** Processing line: ~ y = (720 - h) / 2~ - Inside source: true *** True Line Result y = (720 - h) / 2 ** Processing line: ~ args.outputs.background_color = [64, 0, 128]~ - Inside source: true *** True Line Result args.outputs.background_color = [64, 0, 128] ** Processing line: ~ args.outputs.primitives << [x, y, w, h, :scanner, args.state.rotation].sprite~ - Inside source: true *** True Line Result args.outputs.primitives << [x, y, w, h, :scanner, args.state.rotation].sprite ** Processing line: ~ args.state.rotation += 1~ - Inside source: true *** True Line Result args.state.rotation += 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ - Inside source: true *** True Line Result args.outputs.primitives << args.gtk.current_framerate_primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Path Finding Algorithms - Breadth First Search - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Path Finding Algorithms - Breadth First Search - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/13_path_finding_algorithms/01_breadth_first_search/app/main.rb~ - Inside source: true *** True Line Result # ./samples/13_path_finding_algorithms/01_breadth_first_search/app/main.rb ** Processing line: ~ # A visual demonstration of a breadth first search~ - Inside source: true *** True Line Result # A visual demonstration of a breadth first search ** Processing line: ~ # Inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html~ - Inside source: true *** True Line Result # Inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # An animation that can respond to user input in real time~ - Inside source: true *** True Line Result # An animation that can respond to user input in real time ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # A breadth first search expands in all directions one step at a time~ - Inside source: true *** True Line Result # A breadth first search expands in all directions one step at a time ** Processing line: ~ # The frontier is a queue of cells to be expanded from~ - Inside source: true *** True Line Result # The frontier is a queue of cells to be expanded from ** Processing line: ~ # The visited hash allows quick lookups of cells that have been expanded from~ - Inside source: true *** True Line Result # The visited hash allows quick lookups of cells that have been expanded from ** Processing line: ~ # The walls hash allows quick lookup of whether a cell is a wall~ - Inside source: true *** True Line Result # The walls hash allows quick lookup of whether a cell is a wall ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The breadth first search starts by adding the red star to the frontier array~ - Inside source: true *** True Line Result # The breadth first search starts by adding the red star to the frontier array ** Processing line: ~ # and marking it as visited~ - Inside source: true *** True Line Result # and marking it as visited ** Processing line: ~ # Each step a cell is removed from the front of the frontier array (queue)~ - Inside source: true *** True Line Result # Each step a cell is removed from the front of the frontier array (queue) ** Processing line: ~ # Unless the neighbor is a wall or visited, it is added to the frontier array~ - Inside source: true *** True Line Result # Unless the neighbor is a wall or visited, it is added to the frontier array ** Processing line: ~ # The neighbor is then marked as visited~ - Inside source: true *** True Line Result # The neighbor is then marked as visited ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The frontier is blue~ - Inside source: true *** True Line Result # The frontier is blue ** Processing line: ~ # Visited cells are light brown~ - Inside source: true *** True Line Result # Visited cells are light brown ** Processing line: ~ # Walls are camo green~ - Inside source: true *** True Line Result # Walls are camo green ** Processing line: ~ # Even when walls are visited, they will maintain their wall color~ - Inside source: true *** True Line Result # Even when walls are visited, they will maintain their wall color ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The star can be moved by clicking and dragging~ - Inside source: true *** True Line Result # The star can be moved by clicking and dragging ** Processing line: ~ # Walls can be added and removed by clicking and dragging~ - Inside source: true *** True Line Result # Walls can be added and removed by clicking and dragging ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class BreadthFirstSearch~ - Inside source: true *** True Line Result class BreadthFirstSearch ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize(args)~ - Inside source: true *** True Line Result def initialize(args) ** Processing line: ~ # Variables to edit the size and appearance of the grid~ - Inside source: true *** True Line Result # Variables to edit the size and appearance of the grid ** Processing line: ~ # Freely customizable to user's liking~ - Inside source: true *** True Line Result # Freely customizable to user's liking ** Processing line: ~ args.state.grid.width = 30~ - Inside source: true *** True Line Result args.state.grid.width = 30 ** Processing line: ~ args.state.grid.height = 15~ - Inside source: true *** True Line Result args.state.grid.height = 15 ** Processing line: ~ args.state.grid.cell_size = 40~ - Inside source: true *** True Line Result args.state.grid.cell_size = 40 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Stores which step of the animation is being rendered~ - Inside source: true *** True Line Result # Stores which step of the animation is being rendered ** Processing line: ~ # When the user moves the star or messes with the walls,~ - Inside source: true *** True Line Result # When the user moves the star or messes with the walls, ** Processing line: ~ # the breadth first search is recalculated up to this step~ - Inside source: true *** True Line Result # the breadth first search is recalculated up to this step ** Processing line: ~ args.state.anim_steps = 0~ - Inside source: true *** True Line Result args.state.anim_steps = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # At some step the animation will end,~ - Inside source: true *** True Line Result # At some step the animation will end, ** Processing line: ~ # and further steps won't change anything (the whole grid will be explored)~ - Inside source: true *** True Line Result # and further steps won't change anything (the whole grid will be explored) ** Processing line: ~ # This step is roughly the grid's width * height~ - Inside source: true *** True Line Result # This step is roughly the grid's width * height ** Processing line: ~ # When anim_steps equals max_steps no more calculations will occur~ - Inside source: true *** True Line Result # When anim_steps equals max_steps no more calculations will occur ** Processing line: ~ # and the slider will be at the end~ - Inside source: true *** True Line Result # and the slider will be at the end ** Processing line: ~ args.state.max_steps = args.state.grid.width * args.state.grid.height~ - Inside source: true *** True Line Result args.state.max_steps = args.state.grid.width * args.state.grid.height ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Whether the animation should play or not~ - Inside source: true *** True Line Result # Whether the animation should play or not ** Processing line: ~ # If true, every tick moves anim_steps forward one~ - Inside source: true *** True Line Result # If true, every tick moves anim_steps forward one ** Processing line: ~ # Pressing the stepwise animation buttons will pause the animation~ - Inside source: true *** True Line Result # Pressing the stepwise animation buttons will pause the animation ** Processing line: ~ args.state.play = true~ - Inside source: true *** True Line Result args.state.play = true ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The location of the star and walls of the grid~ - Inside source: true *** True Line Result # The location of the star and walls of the grid ** Processing line: ~ # They can be modified to have a different initial grid~ - Inside source: true *** True Line Result # They can be modified to have a different initial grid ** Processing line: ~ # Walls are stored in a hash for quick look up when doing the search~ - Inside source: true *** True Line Result # Walls are stored in a hash for quick look up when doing the search ** Processing line: ~ args.state.star = [0, 0]~ - Inside source: true *** True Line Result args.state.star = [0, 0] ** Processing line: ~ args.state.walls = {~ - Inside source: true *** True Line Result args.state.walls = { ** Processing line: ~ [3, 3] => true,~ - Inside source: true *** True Line Result [3, 3] => true, ** Processing line: ~ [3, 4] => true,~ - Inside source: true *** True Line Result [3, 4] => true, ** Processing line: ~ [3, 5] => true,~ - Inside source: true *** True Line Result [3, 5] => true, ** Processing line: ~ [3, 6] => true,~ - Inside source: true *** True Line Result [3, 6] => true, ** Processing line: ~ [3, 7] => true,~ - Inside source: true *** True Line Result [3, 7] => true, ** Processing line: ~ [3, 8] => true,~ - Inside source: true *** True Line Result [3, 8] => true, ** Processing line: ~ [3, 9] => true,~ - Inside source: true *** True Line Result [3, 9] => true, ** Processing line: ~ [3, 10] => true,~ - Inside source: true *** True Line Result [3, 10] => true, ** Processing line: ~ [3, 11] => true,~ - Inside source: true *** True Line Result [3, 11] => true, ** Processing line: ~ [4, 3] => true,~ - Inside source: true *** True Line Result [4, 3] => true, ** Processing line: ~ [4, 4] => true,~ - Inside source: true *** True Line Result [4, 4] => true, ** Processing line: ~ [4, 5] => true,~ - Inside source: true *** True Line Result [4, 5] => true, ** Processing line: ~ [4, 6] => true,~ - Inside source: true *** True Line Result [4, 6] => true, ** Processing line: ~ [4, 7] => true,~ - Inside source: true *** True Line Result [4, 7] => true, ** Processing line: ~ [4, 8] => true,~ - Inside source: true *** True Line Result [4, 8] => true, ** Processing line: ~ [4, 9] => true,~ - Inside source: true *** True Line Result [4, 9] => true, ** Processing line: ~ [4, 10] => true,~ - Inside source: true *** True Line Result [4, 10] => true, ** Processing line: ~ [4, 11] => true,~ - Inside source: true *** True Line Result [4, 11] => true, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [13, 0] => true,~ - Inside source: true *** True Line Result [13, 0] => true, ** Processing line: ~ [13, 1] => true,~ - Inside source: true *** True Line Result [13, 1] => true, ** Processing line: ~ [13, 2] => true,~ - Inside source: true *** True Line Result [13, 2] => true, ** Processing line: ~ [13, 3] => true,~ - Inside source: true *** True Line Result [13, 3] => true, ** Processing line: ~ [13, 4] => true,~ - Inside source: true *** True Line Result [13, 4] => true, ** Processing line: ~ [13, 5] => true,~ - Inside source: true *** True Line Result [13, 5] => true, ** Processing line: ~ [13, 6] => true,~ - Inside source: true *** True Line Result [13, 6] => true, ** Processing line: ~ [13, 7] => true,~ - Inside source: true *** True Line Result [13, 7] => true, ** Processing line: ~ [13, 8] => true,~ - Inside source: true *** True Line Result [13, 8] => true, ** Processing line: ~ [13, 9] => true,~ - Inside source: true *** True Line Result [13, 9] => true, ** Processing line: ~ [13, 10] => true,~ - Inside source: true *** True Line Result [13, 10] => true, ** Processing line: ~ [14, 0] => true,~ - Inside source: true *** True Line Result [14, 0] => true, ** Processing line: ~ [14, 1] => true,~ - Inside source: true *** True Line Result [14, 1] => true, ** Processing line: ~ [14, 2] => true,~ - Inside source: true *** True Line Result [14, 2] => true, ** Processing line: ~ [14, 3] => true,~ - Inside source: true *** True Line Result [14, 3] => true, ** Processing line: ~ [14, 4] => true,~ - Inside source: true *** True Line Result [14, 4] => true, ** Processing line: ~ [14, 5] => true,~ - Inside source: true *** True Line Result [14, 5] => true, ** Processing line: ~ [14, 6] => true,~ - Inside source: true *** True Line Result [14, 6] => true, ** Processing line: ~ [14, 7] => true,~ - Inside source: true *** True Line Result [14, 7] => true, ** Processing line: ~ [14, 8] => true,~ - Inside source: true *** True Line Result [14, 8] => true, ** Processing line: ~ [14, 9] => true,~ - Inside source: true *** True Line Result [14, 9] => true, ** Processing line: ~ [14, 10] => true,~ - Inside source: true *** True Line Result [14, 10] => true, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [21, 8] => true,~ - Inside source: true *** True Line Result [21, 8] => true, ** Processing line: ~ [21, 9] => true,~ - Inside source: true *** True Line Result [21, 9] => true, ** Processing line: ~ [21, 10] => true,~ - Inside source: true *** True Line Result [21, 10] => true, ** Processing line: ~ [21, 11] => true,~ - Inside source: true *** True Line Result [21, 11] => true, ** Processing line: ~ [21, 12] => true,~ - Inside source: true *** True Line Result [21, 12] => true, ** Processing line: ~ [21, 13] => true,~ - Inside source: true *** True Line Result [21, 13] => true, ** Processing line: ~ [21, 14] => true,~ - Inside source: true *** True Line Result [21, 14] => true, ** Processing line: ~ [22, 8] => true,~ - Inside source: true *** True Line Result [22, 8] => true, ** Processing line: ~ [22, 9] => true,~ - Inside source: true *** True Line Result [22, 9] => true, ** Processing line: ~ [22, 10] => true,~ - Inside source: true *** True Line Result [22, 10] => true, ** Processing line: ~ [22, 11] => true,~ - Inside source: true *** True Line Result [22, 11] => true, ** Processing line: ~ [22, 12] => true,~ - Inside source: true *** True Line Result [22, 12] => true, ** Processing line: ~ [22, 13] => true,~ - Inside source: true *** True Line Result [22, 13] => true, ** Processing line: ~ [22, 14] => true,~ - Inside source: true *** True Line Result [22, 14] => true, ** Processing line: ~ [23, 8] => true,~ - Inside source: true *** True Line Result [23, 8] => true, ** Processing line: ~ [23, 9] => true,~ - Inside source: true *** True Line Result [23, 9] => true, ** Processing line: ~ [24, 8] => true,~ - Inside source: true *** True Line Result [24, 8] => true, ** Processing line: ~ [24, 9] => true,~ - Inside source: true *** True Line Result [24, 9] => true, ** Processing line: ~ [25, 8] => true,~ - Inside source: true *** True Line Result [25, 8] => true, ** Processing line: ~ [25, 9] => true,~ - Inside source: true *** True Line Result [25, 9] => true, ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Variables that are used by the breadth first search~ - Inside source: true *** True Line Result # Variables that are used by the breadth first search ** Processing line: ~ # Storing cells that the search has visited, prevents unnecessary steps~ - Inside source: true *** True Line Result # Storing cells that the search has visited, prevents unnecessary steps ** Processing line: ~ # Expanding the frontier of the search in order makes the search expand~ - Inside source: true *** True Line Result # Expanding the frontier of the search in order makes the search expand ** Processing line: ~ # from the center outward~ - Inside source: true *** True Line Result # from the center outward ** Processing line: ~ args.state.visited = {}~ - Inside source: true *** True Line Result args.state.visited = {} ** Processing line: ~ args.state.frontier = []~ - Inside source: true *** True Line Result args.state.frontier = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # What the user is currently editing on the grid~ - Inside source: true *** True Line Result # What the user is currently editing on the grid ** Processing line: ~ # Possible values are: :none, :slider, :star, :remove_wall, :add_wall~ - Inside source: true *** True Line Result # Possible values are: :none, :slider, :star, :remove_wall, :add_wall ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # We store this value, because we want to remember the value even when~ - Inside source: true *** True Line Result # We store this value, because we want to remember the value even when ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ - Inside source: true *** True Line Result # the user's cursor is no longer over what they're interacting with, but ** Processing line: ~ # they are still clicking down on the mouse.~ - Inside source: true *** True Line Result # they are still clicking down on the mouse. ** Processing line: ~ args.state.click_and_drag = :none~ - Inside source: true *** True Line Result args.state.click_and_drag = :none ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Store the rects of the buttons that control the animation~ - Inside source: true *** True Line Result # Store the rects of the buttons that control the animation ** Processing line: ~ # They are here for user customization~ - Inside source: true *** True Line Result # They are here for user customization ** Processing line: ~ # Editing these might require recentering the text inside them~ - Inside source: true *** True Line Result # Editing these might require recentering the text inside them ** Processing line: ~ # Those values can be found in the render_button methods~ - Inside source: true *** True Line Result # Those values can be found in the render_button methods ** Processing line: ~ args.state.buttons.left = [450, 600, 50, 50]~ - Inside source: true *** True Line Result args.state.buttons.left = [450, 600, 50, 50] ** Processing line: ~ args.state.buttons.center = [500, 600, 200, 50]~ - Inside source: true *** True Line Result args.state.buttons.center = [500, 600, 200, 50] ** Processing line: ~ args.state.buttons.right = [700, 600, 50, 50]~ - Inside source: true *** True Line Result args.state.buttons.right = [700, 600, 50, 50] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The variables below are related to the slider~ - Inside source: true *** True Line Result # The variables below are related to the slider ** Processing line: ~ # They allow the user to customize them~ - Inside source: true *** True Line Result # They allow the user to customize them ** Processing line: ~ # They also give a central location for the render and input methods to get~ - Inside source: true *** True Line Result # They also give a central location for the render and input methods to get ** Processing line: ~ # information from~ - Inside source: true *** True Line Result # information from ** Processing line: ~ # x & y are the coordinates of the leftmost part of the slider line~ - Inside source: true *** True Line Result # x & y are the coordinates of the leftmost part of the slider line ** Processing line: ~ args.state.slider.x = 400~ - Inside source: true *** True Line Result args.state.slider.x = 400 ** Processing line: ~ args.state.slider.y = 675~ - Inside source: true *** True Line Result args.state.slider.y = 675 ** Processing line: ~ # This is the width of the line~ - Inside source: true *** True Line Result # This is the width of the line ** Processing line: ~ args.state.slider.w = 360~ - Inside source: true *** True Line Result args.state.slider.w = 360 ** Processing line: ~ # This is the offset for the circle~ - Inside source: true *** True Line Result # This is the offset for the circle ** Processing line: ~ # Allows the center of the circle to be on the line,~ - Inside source: true *** True Line Result # Allows the center of the circle to be on the line, ** Processing line: ~ # as opposed to the upper right corner~ - Inside source: true *** True Line Result # as opposed to the upper right corner ** Processing line: ~ args.state.slider.offset = 20~ - Inside source: true *** True Line Result args.state.slider.offset = 20 ** Processing line: ~ # This is the spacing between each of the notches on the slider~ - Inside source: true *** True Line Result # This is the spacing between each of the notches on the slider ** Processing line: ~ # Notches are places where the circle can rest on the slider line~ - Inside source: true *** True Line Result # Notches are places where the circle can rest on the slider line ** Processing line: ~ # There needs to be a notch for each step before the maximum number of steps~ - Inside source: true *** True Line Result # There needs to be a notch for each step before the maximum number of steps ** Processing line: ~ args.state.slider.spacing = args.state.slider.w.to_f / args.state.max_steps.to_f~ - Inside source: true *** True Line Result args.state.slider.spacing = args.state.slider.w.to_f / args.state.max_steps.to_f ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method is called every frame/tick~ - Inside source: true *** True Line Result # This method is called every frame/tick ** Processing line: ~ # Every tick, the current state of the search is rendered on the screen,~ - Inside source: true *** True Line Result # Every tick, the current state of the search is rendered on the screen, ** Processing line: ~ # User input is processed, and~ - Inside source: true *** True Line Result # User input is processed, and ** Processing line: ~ # The next step in the search is calculated~ - Inside source: true *** True Line Result # The next step in the search is calculated ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ # If animation is playing, and max steps have not been reached~ - Inside source: true *** True Line Result # If animation is playing, and max steps have not been reached ** Processing line: ~ # Move the search a step forward~ - Inside source: true *** True Line Result # Move the search a step forward ** Processing line: ~ if state.play && state.anim_steps < state.max_steps~ - Inside source: true *** True Line Result if state.play && state.anim_steps < state.max_steps ** Processing line: ~ # Variable that tells the program what step to recalculate up to~ - Inside source: true *** True Line Result # Variable that tells the program what step to recalculate up to ** Processing line: ~ state.anim_steps += 1~ - Inside source: true *** True Line Result state.anim_steps += 1 ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws everything onto the screen~ - Inside source: true *** True Line Result # Draws everything onto the screen ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ render_buttons~ - Inside source: true *** True Line Result render_buttons ** Processing line: ~ render_slider~ - Inside source: true *** True Line Result render_slider ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_background~ - Inside source: true *** True Line Result render_background ** Processing line: ~ render_visited~ - Inside source: true *** True Line Result render_visited ** Processing line: ~ render_frontier~ - Inside source: true *** True Line Result render_frontier ** Processing line: ~ render_walls~ - Inside source: true *** True Line Result render_walls ** Processing line: ~ render_star~ - Inside source: true *** True Line Result render_star ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The methods below subdivide the task of drawing everything to the screen~ - Inside source: true *** True Line Result # The methods below subdivide the task of drawing everything to the screen ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws the buttons that control the animation step and state~ - Inside source: true *** True Line Result # Draws the buttons that control the animation step and state ** Processing line: ~ def render_buttons~ - Inside source: true *** True Line Result def render_buttons ** Processing line: ~ render_left_button~ - Inside source: true *** True Line Result render_left_button ** Processing line: ~ render_center_button~ - Inside source: true *** True Line Result render_center_button ** Processing line: ~ render_right_button~ - Inside source: true *** True Line Result render_right_button ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws the button which steps the search backward~ - Inside source: true *** True Line Result # Draws the button which steps the search backward ** Processing line: ~ # Shows the user where to click to move the search backward~ - Inside source: true *** True Line Result # Shows the user where to click to move the search backward ** Processing line: ~ def render_left_button~ - Inside source: true *** True Line Result def render_left_button ** Processing line: ~ # Draws the gray button, and a black border~ - Inside source: true *** True Line Result # Draws the gray button, and a black border ** Processing line: ~ # The border separates the buttons visually~ - Inside source: true *** True Line Result # The border separates the buttons visually ** Processing line: ~ outputs.solids << [buttons.left, gray]~ - Inside source: true *** True Line Result outputs.solids << [buttons.left, gray] ** Processing line: ~ outputs.borders << [buttons.left, black]~ - Inside source: true *** True Line Result outputs.borders << [buttons.left, black] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders an explanatory label in the center of the button~ - Inside source: true *** True Line Result # Renders an explanatory label in the center of the button ** Processing line: ~ # Explains to the user what the button does~ - Inside source: true *** True Line Result # Explains to the user what the button does ** Processing line: ~ # If the button size is changed, the label might need to be edited as well~ - Inside source: true *** True Line Result # If the button size is changed, the label might need to be edited as well ** Processing line: ~ # to keep the label in the center of the button~ - Inside source: true *** True Line Result # to keep the label in the center of the button ** Processing line: ~ label_x = buttons.left.x + 20~ - Inside source: true *** True Line Result label_x = buttons.left.x + 20 ** Processing line: ~ label_y = buttons.left.y + 35~ - Inside source: true *** True Line Result label_y = buttons.left.y + 35 ** Processing line: ~ outputs.labels << [label_x, label_y, "<"]~ - Inside source: true *** True Line Result outputs.labels << [label_x, label_y, "<"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_center_button~ - Inside source: true *** True Line Result def render_center_button ** Processing line: ~ # Draws the gray button, and a black border~ - Inside source: true *** True Line Result # Draws the gray button, and a black border ** Processing line: ~ # The border separates the buttons visually~ - Inside source: true *** True Line Result # The border separates the buttons visually ** Processing line: ~ outputs.solids << [buttons.center, gray]~ - Inside source: true *** True Line Result outputs.solids << [buttons.center, gray] ** Processing line: ~ outputs.borders << [buttons.center, black]~ - Inside source: true *** True Line Result outputs.borders << [buttons.center, black] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders an explanatory label in the center of the button~ - Inside source: true *** True Line Result # Renders an explanatory label in the center of the button ** Processing line: ~ # Explains to the user what the button does~ - Inside source: true *** True Line Result # Explains to the user what the button does ** Processing line: ~ # If the button size is changed, the label might need to be edited as well~ - Inside source: true *** True Line Result # If the button size is changed, the label might need to be edited as well ** Processing line: ~ # to keep the label in the center of the button~ - Inside source: true *** True Line Result # to keep the label in the center of the button ** Processing line: ~ label_x = buttons.center.x + 37~ - Inside source: true *** True Line Result label_x = buttons.center.x + 37 ** Processing line: ~ label_y = buttons.center.y + 35~ - Inside source: true *** True Line Result label_y = buttons.center.y + 35 ** Processing line: ~ label_text = state.play ? "Pause Animation" : "Play Animation"~ - Inside source: true *** True Line Result label_text = state.play ? "Pause Animation" : "Play Animation" ** Processing line: ~ outputs.labels << [label_x, label_y, label_text]~ - Inside source: true *** True Line Result outputs.labels << [label_x, label_y, label_text] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_right_button~ - Inside source: true *** True Line Result def render_right_button ** Processing line: ~ # Draws the gray button, and a black border~ - Inside source: true *** True Line Result # Draws the gray button, and a black border ** Processing line: ~ # The border separates the buttons visually~ - Inside source: true *** True Line Result # The border separates the buttons visually ** Processing line: ~ outputs.solids << [buttons.right, gray]~ - Inside source: true *** True Line Result outputs.solids << [buttons.right, gray] ** Processing line: ~ outputs.borders << [buttons.right, black]~ - Inside source: true *** True Line Result outputs.borders << [buttons.right, black] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders an explanatory label in the center of the button~ - Inside source: true *** True Line Result # Renders an explanatory label in the center of the button ** Processing line: ~ # Explains to the user what the button does~ - Inside source: true *** True Line Result # Explains to the user what the button does ** Processing line: ~ label_x = buttons.right.x + 20~ - Inside source: true *** True Line Result label_x = buttons.right.x + 20 ** Processing line: ~ label_y = buttons.right.y + 35~ - Inside source: true *** True Line Result label_y = buttons.right.y + 35 ** Processing line: ~ outputs.labels << [label_x, label_y, ">"]~ - Inside source: true *** True Line Result outputs.labels << [label_x, label_y, ">"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws the slider so the user can move it and see the progress of the search~ - Inside source: true *** True Line Result # Draws the slider so the user can move it and see the progress of the search ** Processing line: ~ def render_slider~ - Inside source: true *** True Line Result def render_slider ** Processing line: ~ # Using primitives hides the line under the white circle of the slider~ - Inside source: true *** True Line Result # Using primitives hides the line under the white circle of the slider ** Processing line: ~ # Draws the line~ - Inside source: true *** True Line Result # Draws the line ** Processing line: ~ outputs.primitives << [slider.x, slider.y, slider.x + slider.w, slider.y].line~ - Inside source: true *** True Line Result outputs.primitives << [slider.x, slider.y, slider.x + slider.w, slider.y].line ** Processing line: ~ # The circle needs to be offset so that the center of the circle~ - Inside source: true *** True Line Result # The circle needs to be offset so that the center of the circle ** Processing line: ~ # overlaps the line instead of the upper right corner of the circle~ - Inside source: true *** True Line Result # overlaps the line instead of the upper right corner of the circle ** Processing line: ~ # The circle's x value is also moved based on the current seach step~ - Inside source: true *** True Line Result # The circle's x value is also moved based on the current seach step ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.anim_steps * slider.spacing)~ - Inside source: true *** True Line Result circle_x = (slider.x - slider.offset) + (state.anim_steps * slider.spacing) ** Processing line: ~ circle_y = (slider.y - slider.offset)~ - Inside source: true *** True Line Result circle_y = (slider.y - slider.offset) ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ - Inside source: true *** True Line Result circle_rect = [circle_x, circle_y, 37, 37] ** Processing line: ~ outputs.primitives << [circle_rect, 'circle-white.png'].sprite~ - Inside source: true *** True Line Result outputs.primitives << [circle_rect, 'circle-white.png'].sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws what the grid looks like with nothing on it~ - Inside source: true *** True Line Result # Draws what the grid looks like with nothing on it ** Processing line: ~ def render_background~ - Inside source: true *** True Line Result def render_background ** Processing line: ~ render_unvisited~ - Inside source: true *** True Line Result render_unvisited ** Processing line: ~ render_grid_lines~ - Inside source: true *** True Line Result render_grid_lines ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws a rectangle the size of the entire grid to represent unvisited cells~ - Inside source: true *** True Line Result # Draws a rectangle the size of the entire grid to represent unvisited cells ** Processing line: ~ def render_unvisited~ - Inside source: true *** True Line Result def render_unvisited ** Processing line: ~ outputs.solids << [scale_up([0, 0, grid.width, grid.height]), unvisited_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up([0, 0, grid.width, grid.height]), unvisited_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws grid lines to show the division of the grid into cells~ - Inside source: true *** True Line Result # Draws grid lines to show the division of the grid into cells ** Processing line: ~ def render_grid_lines~ - Inside source: true *** True Line Result def render_grid_lines ** Processing line: ~ for x in 0..grid.width~ - Inside source: true *** True Line Result for x in 0..grid.width ** Processing line: ~ outputs.lines << vertical_line(x)~ - Inside source: true *** True Line Result outputs.lines << vertical_line(x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ for y in 0..grid.height~ - Inside source: true *** True Line Result for y in 0..grid.height ** Processing line: ~ outputs.lines << horizontal_line(y)~ - Inside source: true *** True Line Result outputs.lines << horizontal_line(y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easy way to draw vertical lines given an index~ - Inside source: true *** True Line Result # Easy way to draw vertical lines given an index ** Processing line: ~ def vertical_line column~ - Inside source: true *** True Line Result def vertical_line column ** Processing line: ~ scale_up([column, 0, column, grid.height])~ - Inside source: true *** True Line Result scale_up([column, 0, column, grid.height]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easy way to draw horizontal lines given an index~ - Inside source: true *** True Line Result # Easy way to draw horizontal lines given an index ** Processing line: ~ def horizontal_line row~ - Inside source: true *** True Line Result def horizontal_line row ** Processing line: ~ scale_up([0, row, grid.width, row])~ - Inside source: true *** True Line Result scale_up([0, row, grid.width, row]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws the area that is going to be searched from~ - Inside source: true *** True Line Result # Draws the area that is going to be searched from ** Processing line: ~ # The frontier is the most outward parts of the search~ - Inside source: true *** True Line Result # The frontier is the most outward parts of the search ** Processing line: ~ def render_frontier~ - Inside source: true *** True Line Result def render_frontier ** Processing line: ~ outputs.solids << state.frontier.map do |cell|~ - Inside source: true *** True Line Result outputs.solids << state.frontier.map do |cell| ** Processing line: ~ [scale_up([cell.x, cell.y]), frontier_color]~ - Inside source: true *** True Line Result [scale_up([cell.x, cell.y]), frontier_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws the walls~ - Inside source: true *** True Line Result # Draws the walls ** Processing line: ~ def render_walls~ - Inside source: true *** True Line Result def render_walls ** Processing line: ~ outputs.solids << state.walls.map do |wall|~ - Inside source: true *** True Line Result outputs.solids << state.walls.map do |wall| ** Processing line: ~ [scale_up([wall.x, wall.y]), wall_color]~ - Inside source: true *** True Line Result [scale_up([wall.x, wall.y]), wall_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders cells that have been searched in the appropriate color~ - Inside source: true *** True Line Result # Renders cells that have been searched in the appropriate color ** Processing line: ~ def render_visited~ - Inside source: true *** True Line Result def render_visited ** Processing line: ~ outputs.solids << state.visited.map do |cell|~ - Inside source: true *** True Line Result outputs.solids << state.visited.map do |cell| ** Processing line: ~ [scale_up([cell.x, cell.y]), visited_color]~ - Inside source: true *** True Line Result [scale_up([cell.x, cell.y]), visited_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the star~ - Inside source: true *** True Line Result # Renders the star ** Processing line: ~ def render_star~ - Inside source: true *** True Line Result def render_star ** Processing line: ~ outputs.sprites << [scale_up(state.star), 'star.png']~ - Inside source: true *** True Line Result outputs.sprites << [scale_up(state.star), 'star.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # In code, the cells are represented as 1x1 rectangles~ - Inside source: true *** True Line Result # In code, the cells are represented as 1x1 rectangles ** Processing line: ~ # When drawn, the cells are larger than 1x1 rectangles~ - Inside source: true *** True Line Result # When drawn, the cells are larger than 1x1 rectangles ** Processing line: ~ # This method is used to scale up cells, and lines~ - Inside source: true *** True Line Result # This method is used to scale up cells, and lines ** Processing line: ~ # Objects are scaled up according to the grid.cell_size variable~ - Inside source: true *** True Line Result # Objects are scaled up according to the grid.cell_size variable ** Processing line: ~ # This allows for easy customization of the visual scale of the grid~ - Inside source: true *** True Line Result # This allows for easy customization of the visual scale of the grid ** Processing line: ~ def scale_up(cell)~ - Inside source: true *** True Line Result def scale_up(cell) ** Processing line: ~ # Prevents the original value of cell from being edited~ - Inside source: true *** True Line Result # Prevents the original value of cell from being edited ** Processing line: ~ cell = cell.clone~ - Inside source: true *** True Line Result cell = cell.clone ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If cell is just an x and y coordinate~ - Inside source: true *** True Line Result # If cell is just an x and y coordinate ** Processing line: ~ if cell.size == 2~ - Inside source: true *** True Line Result if cell.size == 2 ** Processing line: ~ # Add a width and height of 1~ - Inside source: true *** True Line Result # Add a width and height of 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Scale all the values up~ - Inside source: true *** True Line Result # Scale all the values up ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ - Inside source: true *** True Line Result cell.map! { |value| value * grid.cell_size } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the scaled up cell~ - Inside source: true *** True Line Result # Returns the scaled up cell ** Processing line: ~ cell~ - Inside source: true *** True Line Result cell ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method processes user input every tick~ - Inside source: true *** True Line Result # This method processes user input every tick ** Processing line: ~ # This method allows the user to use the buttons, slider, and edit the grid~ - Inside source: true *** True Line Result # This method allows the user to use the buttons, slider, and edit the grid ** Processing line: ~ # There are 2 types of input:~ - Inside source: true *** True Line Result # There are 2 types of input: ** Processing line: ~ # Button Input~ - Inside source: true *** True Line Result # Button Input ** Processing line: ~ # Click and Drag Input~ - Inside source: true *** True Line Result # Click and Drag Input ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Button Input is used for the backward step and forward step buttons~ - Inside source: true *** True Line Result # Button Input is used for the backward step and forward step buttons ** Processing line: ~ # Input is detected by mouse up within the bounds of the rect~ - Inside source: true *** True Line Result # Input is detected by mouse up within the bounds of the rect ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Click and Drag Input is used for moving the star, adding walls,~ - Inside source: true *** True Line Result # Click and Drag Input is used for moving the star, adding walls, ** Processing line: ~ # removing walls, and the slider~ - Inside source: true *** True Line Result # removing walls, and the slider ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # When the mouse is down on the star, the click_and_drag variable is set to :star~ - Inside source: true *** True Line Result # When the mouse is down on the star, the click_and_drag variable is set to :star ** Processing line: ~ # While click_and_drag equals :star, the cursor's position is used to calculate the~ - Inside source: true *** True Line Result # While click_and_drag equals :star, the cursor's position is used to calculate the ** Processing line: ~ # appropriate drag behavior~ - Inside source: true *** True Line Result # appropriate drag behavior ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # When the mouse goes up click_and_drag is set to :none~ - Inside source: true *** True Line Result # When the mouse goes up click_and_drag is set to :none ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # A variable has to be used because the star has to continue being edited even~ - Inside source: true *** True Line Result # A variable has to be used because the star has to continue being edited even ** Processing line: ~ # when the cursor is no longer over the star~ - Inside source: true *** True Line Result # when the cursor is no longer over the star ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Similar things occur for the other Click and Drag inputs~ - Inside source: true *** True Line Result # Similar things occur for the other Click and Drag inputs ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ # Checks whether any of the buttons are being clicked~ - Inside source: true *** True Line Result # Checks whether any of the buttons are being clicked ** Processing line: ~ input_buttons~ - Inside source: true *** True Line Result input_buttons ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The detection and processing of click and drag inputs are separate~ - Inside source: true *** True Line Result # The detection and processing of click and drag inputs are separate ** Processing line: ~ # The program has to remember that the user is dragging an object~ - Inside source: true *** True Line Result # The program has to remember that the user is dragging an object ** Processing line: ~ # even when the mouse is no longer over that object~ - Inside source: true *** True Line Result # even when the mouse is no longer over that object ** Processing line: ~ detect_click_and_drag~ - Inside source: true *** True Line Result detect_click_and_drag ** Processing line: ~ process_click_and_drag~ - Inside source: true *** True Line Result process_click_and_drag ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Detects and Process input for each button~ - Inside source: true *** True Line Result # Detects and Process input for each button ** Processing line: ~ def input_buttons~ - Inside source: true *** True Line Result def input_buttons ** Processing line: ~ input_left_button~ - Inside source: true *** True Line Result input_left_button ** Processing line: ~ input_center_button~ - Inside source: true *** True Line Result input_center_button ** Processing line: ~ input_next_step_button~ - Inside source: true *** True Line Result input_next_step_button ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks if the previous step button is clicked~ - Inside source: true *** True Line Result # Checks if the previous step button is clicked ** Processing line: ~ # If it is, it pauses the animation and moves the search one step backward~ - Inside source: true *** True Line Result # If it is, it pauses the animation and moves the search one step backward ** Processing line: ~ def input_left_button~ - Inside source: true *** True Line Result def input_left_button ** Processing line: ~ if left_button_clicked?~ - Inside source: true *** True Line Result if left_button_clicked? ** Processing line: ~ state.play = false~ - Inside source: true *** True Line Result state.play = false ** Processing line: ~ state.anim_steps -= 1~ - Inside source: true *** True Line Result state.anim_steps -= 1 ** Processing line: ~ recalculate~ - Inside source: true *** True Line Result recalculate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Controls the play/pause button~ - Inside source: true *** True Line Result # Controls the play/pause button ** Processing line: ~ # Inverses whether the animation is playing or not when clicked~ - Inside source: true *** True Line Result # Inverses whether the animation is playing or not when clicked ** Processing line: ~ def input_center_button~ - Inside source: true *** True Line Result def input_center_button ** Processing line: ~ if center_button_clicked? or inputs.keyboard.key_down.space~ - Inside source: true *** True Line Result if center_button_clicked? or inputs.keyboard.key_down.space ** Processing line: ~ state.play = !state.play~ - Inside source: true *** True Line Result state.play = !state.play ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks if the next step button is clicked~ - Inside source: true *** True Line Result # Checks if the next step button is clicked ** Processing line: ~ # If it is, it pauses the animation and moves the search one step forward~ - Inside source: true *** True Line Result # If it is, it pauses the animation and moves the search one step forward ** Processing line: ~ def input_next_step_button~ - Inside source: true *** True Line Result def input_next_step_button ** Processing line: ~ if right_button_clicked?~ - Inside source: true *** True Line Result if right_button_clicked? ** Processing line: ~ state.play = false~ - Inside source: true *** True Line Result state.play = false ** Processing line: ~ state.anim_steps += 1~ - Inside source: true *** True Line Result state.anim_steps += 1 ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Determines what the user is editing and stores the value~ - Inside source: true *** True Line Result # Determines what the user is editing and stores the value ** Processing line: ~ # Storing the value allows the user to continue the same edit as long as the~ - Inside source: true *** True Line Result # Storing the value allows the user to continue the same edit as long as the ** Processing line: ~ # mouse left click is held~ - Inside source: true *** True Line Result # mouse left click is held ** Processing line: ~ def detect_click_and_drag~ - Inside source: true *** True Line Result def detect_click_and_drag ** Processing line: ~ if inputs.mouse.up~ - Inside source: true *** True Line Result if inputs.mouse.up ** Processing line: ~ state.click_and_drag = :none~ - Inside source: true *** True Line Result state.click_and_drag = :none ** Processing line: ~ elsif star_clicked?~ - Inside source: true *** True Line Result elsif star_clicked? ** Processing line: ~ state.click_and_drag = :star~ - Inside source: true *** True Line Result state.click_and_drag = :star ** Processing line: ~ elsif wall_clicked?~ - Inside source: true *** True Line Result elsif wall_clicked? ** Processing line: ~ state.click_and_drag = :remove_wall~ - Inside source: true *** True Line Result state.click_and_drag = :remove_wall ** Processing line: ~ elsif grid_clicked?~ - Inside source: true *** True Line Result elsif grid_clicked? ** Processing line: ~ state.click_and_drag = :add_wall~ - Inside source: true *** True Line Result state.click_and_drag = :add_wall ** Processing line: ~ elsif slider_clicked?~ - Inside source: true *** True Line Result elsif slider_clicked? ** Processing line: ~ state.click_and_drag = :slider~ - Inside source: true *** True Line Result state.click_and_drag = :slider ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Processes click and drag based on what the user is currently dragging~ - Inside source: true *** True Line Result # Processes click and drag based on what the user is currently dragging ** Processing line: ~ def process_click_and_drag~ - Inside source: true *** True Line Result def process_click_and_drag ** Processing line: ~ if state.click_and_drag == :star~ - Inside source: true *** True Line Result if state.click_and_drag == :star ** Processing line: ~ input_star~ - Inside source: true *** True Line Result input_star ** Processing line: ~ elsif state.click_and_drag == :remove_wall~ - Inside source: true *** True Line Result elsif state.click_and_drag == :remove_wall ** Processing line: ~ input_remove_wall~ - Inside source: true *** True Line Result input_remove_wall ** Processing line: ~ elsif state.click_and_drag == :add_wall~ - Inside source: true *** True Line Result elsif state.click_and_drag == :add_wall ** Processing line: ~ input_add_wall~ - Inside source: true *** True Line Result input_add_wall ** Processing line: ~ elsif state.click_and_drag == :slider~ - Inside source: true *** True Line Result elsif state.click_and_drag == :slider ** Processing line: ~ input_slider~ - Inside source: true *** True Line Result input_slider ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the star to the grid closest to the mouse~ - Inside source: true *** True Line Result # Moves the star to the grid closest to the mouse ** Processing line: ~ # Only recalculates the search if the star changes position~ - Inside source: true *** True Line Result # Only recalculates the search if the star changes position ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ - Inside source: true *** True Line Result # Called whenever the user is editing the star (puts mouse down on star) ** Processing line: ~ def input_star~ - Inside source: true *** True Line Result def input_star ** Processing line: ~ old_star = state.star.clone~ - Inside source: true *** True Line Result old_star = state.star.clone ** Processing line: ~ state.star = cell_closest_to_mouse~ - Inside source: true *** True Line Result state.star = cell_closest_to_mouse ** Processing line: ~ unless old_star == state.star~ - Inside source: true *** True Line Result unless old_star == state.star ** Processing line: ~ recalculate~ - Inside source: true *** True Line Result recalculate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Removes walls that are under the cursor~ - Inside source: true *** True Line Result # Removes walls that are under the cursor ** Processing line: ~ def input_remove_wall~ - Inside source: true *** True Line Result def input_remove_wall ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ - Inside source: true *** True Line Result # The mouse needs to be inside the grid, because we only want to remove walls ** Processing line: ~ # the cursor is directly over~ - Inside source: true *** True Line Result # the cursor is directly over ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ - Inside source: true *** True Line Result # Recalculations should only occur when a wall is actually deleted ** Processing line: ~ if mouse_inside_grid?~ - Inside source: true *** True Line Result if mouse_inside_grid? ** Processing line: ~ if state.walls.has_key?(cell_closest_to_mouse)~ - Inside source: true *** True Line Result if state.walls.has_key?(cell_closest_to_mouse) ** Processing line: ~ state.walls.delete(cell_closest_to_mouse)~ - Inside source: true *** True Line Result state.walls.delete(cell_closest_to_mouse) ** Processing line: ~ recalculate~ - Inside source: true *** True Line Result recalculate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds walls at cells under the cursor~ - Inside source: true *** True Line Result # Adds walls at cells under the cursor ** Processing line: ~ def input_add_wall~ - Inside source: true *** True Line Result def input_add_wall ** Processing line: ~ if mouse_inside_grid?~ - Inside source: true *** True Line Result if mouse_inside_grid? ** Processing line: ~ unless state.walls.has_key?(cell_closest_to_mouse)~ - Inside source: true *** True Line Result unless state.walls.has_key?(cell_closest_to_mouse) ** Processing line: ~ state.walls[cell_closest_to_mouse] = true~ - Inside source: true *** True Line Result state.walls[cell_closest_to_mouse] = true ** Processing line: ~ recalculate~ - Inside source: true *** True Line Result recalculate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method is called when the user is editing the slider~ - Inside source: true *** True Line Result # This method is called when the user is editing the slider ** Processing line: ~ # It pauses the animation and moves the white circle to the closest integer point~ - Inside source: true *** True Line Result # It pauses the animation and moves the white circle to the closest integer point ** Processing line: ~ # on the slider~ - Inside source: true *** True Line Result # on the slider ** Processing line: ~ # Changes the step of the search to be animated~ - Inside source: true *** True Line Result # Changes the step of the search to be animated ** Processing line: ~ def input_slider~ - Inside source: true *** True Line Result def input_slider ** Processing line: ~ state.play = false~ - Inside source: true *** True Line Result state.play = false ** Processing line: ~ mouse_x = inputs.mouse.point.x~ - Inside source: true *** True Line Result mouse_x = inputs.mouse.point.x ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Bounds the mouse_x to the closest x value on the slider line~ - Inside source: true *** True Line Result # Bounds the mouse_x to the closest x value on the slider line ** Processing line: ~ mouse_x = slider.x if mouse_x < slider.x~ - Inside source: true *** True Line Result mouse_x = slider.x if mouse_x < slider.x ** Processing line: ~ mouse_x = slider.x + slider.w if mouse_x > slider.x + slider.w~ - Inside source: true *** True Line Result mouse_x = slider.x + slider.w if mouse_x > slider.x + slider.w ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the current search step to the one represented by the mouse x value~ - Inside source: true *** True Line Result # Sets the current search step to the one represented by the mouse x value ** Processing line: ~ # The slider's circle moves due to the render_slider method using anim_steps~ - Inside source: true *** True Line Result # The slider's circle moves due to the render_slider method using anim_steps ** Processing line: ~ state.anim_steps = ((mouse_x - slider.x) / slider.spacing).to_i~ - Inside source: true *** True Line Result state.anim_steps = ((mouse_x - slider.x) / slider.spacing).to_i ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ recalculate~ - Inside source: true *** True Line Result recalculate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Whenever the user edits the grid,~ - Inside source: true *** True Line Result # Whenever the user edits the grid, ** Processing line: ~ # The search has to be recalculated upto the current step~ - Inside source: true *** True Line Result # The search has to be recalculated upto the current step ** Processing line: ~ # with the current grid as the initial state of the grid~ - Inside source: true *** True Line Result # with the current grid as the initial state of the grid ** Processing line: ~ def recalculate~ - Inside source: true *** True Line Result def recalculate ** Processing line: ~ # Resets the search~ - Inside source: true *** True Line Result # Resets the search ** Processing line: ~ state.frontier = []~ - Inside source: true *** True Line Result state.frontier = [] ** Processing line: ~ state.visited = {}~ - Inside source: true *** True Line Result state.visited = {} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the animation forward one step at a time~ - Inside source: true *** True Line Result # Moves the animation forward one step at a time ** Processing line: ~ state.anim_steps.times { calc }~ - Inside source: true *** True Line Result state.anim_steps.times { calc } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method moves the search forward one step~ - Inside source: true *** True Line Result # This method moves the search forward one step ** Processing line: ~ # When the animation is playing it is called every tick~ - Inside source: true *** True Line Result # When the animation is playing it is called every tick ** Processing line: ~ # And called whenever the current step of the animation needs to be recalculated~ - Inside source: true *** True Line Result # And called whenever the current step of the animation needs to be recalculated ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the search forward one step~ - Inside source: true *** True Line Result # Moves the search forward one step ** Processing line: ~ # Parameter called_from_tick is true if it is called from the tick method~ - Inside source: true *** True Line Result # Parameter called_from_tick is true if it is called from the tick method ** Processing line: ~ # It is false when the search is being recalculated after user editing the grid~ - Inside source: true *** True Line Result # It is false when the search is being recalculated after user editing the grid ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The setup to the search~ - Inside source: true *** True Line Result # The setup to the search ** Processing line: ~ # Runs once when the there is no frontier or visited cells~ - Inside source: true *** True Line Result # Runs once when the there is no frontier or visited cells ** Processing line: ~ if state.frontier.empty? && state.visited.empty?~ - Inside source: true *** True Line Result if state.frontier.empty? && state.visited.empty? ** Processing line: ~ state.frontier << state.star~ - Inside source: true *** True Line Result state.frontier << state.star ** Processing line: ~ state.visited[state.star] = true~ - Inside source: true *** True Line Result state.visited[state.star] = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # A step in the search~ - Inside source: true *** True Line Result # A step in the search ** Processing line: ~ unless state.frontier.empty?~ - Inside source: true *** True Line Result unless state.frontier.empty? ** Processing line: ~ # Takes the next frontier cell~ - Inside source: true *** True Line Result # Takes the next frontier cell ** Processing line: ~ new_frontier = state.frontier.shift~ - Inside source: true *** True Line Result new_frontier = state.frontier.shift ** Processing line: ~ # For each of its neighbors~ - Inside source: true *** True Line Result # For each of its neighbors ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ - Inside source: true *** True Line Result adjacent_neighbors(new_frontier).each do |neighbor| ** Processing line: ~ # That have not been visited and are not walls~ - Inside source: true *** True Line Result # That have not been visited and are not walls ** Processing line: ~ unless state.visited.has_key?(neighbor) || state.walls.has_key?(neighbor)~ - Inside source: true *** True Line Result unless state.visited.has_key?(neighbor) || state.walls.has_key?(neighbor) ** Processing line: ~ # Add them to the frontier and mark them as visited~ - Inside source: true *** True Line Result # Add them to the frontier and mark them as visited ** Processing line: ~ state.frontier << neighbor~ - Inside source: true *** True Line Result state.frontier << neighbor ** Processing line: ~ state.visited[neighbor] = true~ - Inside source: true *** True Line Result state.visited[neighbor] = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a list of adjacent cells~ - Inside source: true *** True Line Result # Returns a list of adjacent cells ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ - Inside source: true *** True Line Result # Used to determine what the next cells to be added to the frontier are ** Processing line: ~ def adjacent_neighbors(cell)~ - Inside source: true *** True Line Result def adjacent_neighbors(cell) ** Processing line: ~ neighbors = []~ - Inside source: true *** True Line Result neighbors = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ neighbors << [cell.x, cell.y + 1] unless cell.y == grid.height - 1~ - Inside source: true *** True Line Result neighbors << [cell.x, cell.y + 1] unless cell.y == grid.height - 1 ** Processing line: ~ neighbors << [cell.x + 1, cell.y] unless cell.x == grid.width - 1~ - Inside source: true *** True Line Result neighbors << [cell.x + 1, cell.y] unless cell.x == grid.width - 1 ** Processing line: ~ neighbors << [cell.x, cell.y - 1] unless cell.y == 0~ - Inside source: true *** True Line Result neighbors << [cell.x, cell.y - 1] unless cell.y == 0 ** Processing line: ~ neighbors << [cell.x - 1, cell.y] unless cell.x == 0~ - Inside source: true *** True Line Result neighbors << [cell.x - 1, cell.y] unless cell.x == 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ neighbors~ - Inside source: true *** True Line Result neighbors ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ - Inside source: true *** True Line Result # When the user grabs the star and puts their cursor to the far right ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ - Inside source: true *** True Line Result # and moves up and down, the star is supposed to move along the grid as well ** Processing line: ~ # Finding the cell closest to the mouse helps with this~ - Inside source: true *** True Line Result # Finding the cell closest to the mouse helps with this ** Processing line: ~ def cell_closest_to_mouse~ - Inside source: true *** True Line Result def cell_closest_to_mouse ** Processing line: ~ # Closest cell to the mouse~ - Inside source: true *** True Line Result # Closest cell to the mouse ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ - Inside source: true *** True Line Result x = (inputs.mouse.point.x / grid.cell_size).to_i ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ - Inside source: true *** True Line Result y = (inputs.mouse.point.y / grid.cell_size).to_i ** Processing line: ~ # Bound x and y to the grid~ - Inside source: true *** True Line Result # Bound x and y to the grid ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ - Inside source: true *** True Line Result x = grid.width - 1 if x > grid.width - 1 ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ - Inside source: true *** True Line Result y = grid.height - 1 if y > grid.height - 1 ** Processing line: ~ # Return closest cell~ - Inside source: true *** True Line Result # Return closest cell ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These methods detect when the buttons are clicked~ - Inside source: true *** True Line Result # These methods detect when the buttons are clicked ** Processing line: ~ def left_button_clicked?~ - Inside source: true *** True Line Result def left_button_clicked? ** Processing line: ~ inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.left)~ - Inside source: true *** True Line Result inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.left) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def center_button_clicked?~ - Inside source: true *** True Line Result def center_button_clicked? ** Processing line: ~ inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.center)~ - Inside source: true *** True Line Result inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.center) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def right_button_clicked?~ - Inside source: true *** True Line Result def right_button_clicked? ** Processing line: ~ inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.right)~ - Inside source: true *** True Line Result inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.right) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the slider~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the slider ** Processing line: ~ # Is the mouse down on the circle of the slider?~ - Inside source: true *** True Line Result # Is the mouse down on the circle of the slider? ** Processing line: ~ def slider_clicked?~ - Inside source: true *** True Line Result def slider_clicked? ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.anim_steps * slider.spacing)~ - Inside source: true *** True Line Result circle_x = (slider.x - slider.offset) + (state.anim_steps * slider.spacing) ** Processing line: ~ circle_y = (slider.y - slider.offset)~ - Inside source: true *** True Line Result circle_y = (slider.y - slider.offset) ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ - Inside source: true *** True Line Result circle_rect = [circle_x, circle_y, 37, 37] ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(circle_rect)~ - Inside source: true *** True Line Result inputs.mouse.down && inputs.mouse.point.inside_rect?(circle_rect) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the star~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the star ** Processing line: ~ def star_clicked?~ - Inside source: true *** True Line Result def star_clicked? ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(state.star))~ - Inside source: true *** True Line Result inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(state.star)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing walls~ - Inside source: true *** True Line Result # Signal that the user is going to be removing walls ** Processing line: ~ def wall_clicked?~ - Inside source: true *** True Line Result def wall_clicked? ** Processing line: ~ inputs.mouse.down && mouse_inside_a_wall?~ - Inside source: true *** True Line Result inputs.mouse.down && mouse_inside_a_wall? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be adding walls~ - Inside source: true *** True Line Result # Signal that the user is going to be adding walls ** Processing line: ~ def grid_clicked?~ - Inside source: true *** True Line Result def grid_clicked? ** Processing line: ~ inputs.mouse.down && mouse_inside_grid?~ - Inside source: true *** True Line Result inputs.mouse.down && mouse_inside_grid? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns whether the mouse is inside of a wall~ - Inside source: true *** True Line Result # Returns whether the mouse is inside of a wall ** Processing line: ~ # Part of the condition that checks whether the user is removing a wall~ - Inside source: true *** True Line Result # Part of the condition that checks whether the user is removing a wall ** Processing line: ~ def mouse_inside_a_wall?~ - Inside source: true *** True Line Result def mouse_inside_a_wall? ** Processing line: ~ state.walls.each_key do | wall |~ - Inside source: true *** True Line Result state.walls.each_key do | wall | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(scale_up([wall.x, wall.y]))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(scale_up([wall.x, wall.y])) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns whether the mouse is inside of a grid~ - Inside source: true *** True Line Result # Returns whether the mouse is inside of a grid ** Processing line: ~ # Part of the condition that checks whether the user is adding a wall~ - Inside source: true *** True Line Result # Part of the condition that checks whether the user is adding a wall ** Processing line: ~ def mouse_inside_grid?~ - Inside source: true *** True Line Result def mouse_inside_grid? ** Processing line: ~ inputs.mouse.point.inside_rect?(scale_up([0, 0, grid.width, grid.height]))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(scale_up([0, 0, grid.width, grid.height])) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These methods provide handy aliases to colors~ - Inside source: true *** True Line Result # These methods provide handy aliases to colors ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Light brown~ - Inside source: true *** True Line Result # Light brown ** Processing line: ~ def unvisited_color~ - Inside source: true *** True Line Result def unvisited_color ** Processing line: ~ [221, 212, 213]~ - Inside source: true *** True Line Result [221, 212, 213] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Black~ - Inside source: true *** True Line Result # Black ** Processing line: ~ def grid_line_color~ - Inside source: true *** True Line Result def grid_line_color ** Processing line: ~ [255, 255, 255]~ - Inside source: true *** True Line Result [255, 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Dark Brown~ - Inside source: true *** True Line Result # Dark Brown ** Processing line: ~ def visited_color~ - Inside source: true *** True Line Result def visited_color ** Processing line: ~ [204, 191, 179]~ - Inside source: true *** True Line Result [204, 191, 179] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Blue~ - Inside source: true *** True Line Result # Blue ** Processing line: ~ def frontier_color~ - Inside source: true *** True Line Result def frontier_color ** Processing line: ~ [103, 136, 204]~ - Inside source: true *** True Line Result [103, 136, 204] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Camo Green~ - Inside source: true *** True Line Result # Camo Green ** Processing line: ~ def wall_color~ - Inside source: true *** True Line Result def wall_color ** Processing line: ~ [134, 134, 120]~ - Inside source: true *** True Line Result [134, 134, 120] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Button Background~ - Inside source: true *** True Line Result # Button Background ** Processing line: ~ def gray~ - Inside source: true *** True Line Result def gray ** Processing line: ~ [190, 190, 190]~ - Inside source: true *** True Line Result [190, 190, 190] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Button Outline~ - Inside source: true *** True Line Result # Button Outline ** Processing line: ~ def black~ - Inside source: true *** True Line Result def black ** Processing line: ~ [0, 0, 0]~ - Inside source: true *** True Line Result [0, 0, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These methods make the code more concise~ - Inside source: true *** True Line Result # These methods make the code more concise ** Processing line: ~ def grid~ - Inside source: true *** True Line Result def grid ** Processing line: ~ state.grid~ - Inside source: true *** True Line Result state.grid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def buttons~ - Inside source: true *** True Line Result def buttons ** Processing line: ~ state.buttons~ - Inside source: true *** True Line Result state.buttons ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def slider~ - Inside source: true *** True Line Result def slider ** Processing line: ~ state.slider~ - Inside source: true *** True Line Result state.slider ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Method that is called by DragonRuby periodically~ - Inside source: true *** True Line Result # Method that is called by DragonRuby periodically ** Processing line: ~ # Used for updating animations and calculations~ - Inside source: true *** True Line Result # Used for updating animations and calculations ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Pressing r will reset the application~ - Inside source: true *** True Line Result # Pressing r will reset the application ** Processing line: ~ if args.inputs.keyboard.key_down.r~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.r ** Processing line: ~ args.gtk.reset~ - Inside source: true *** True Line Result args.gtk.reset ** Processing line: ~ reset~ - Inside source: true *** True Line Result reset ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Every tick, new args are passed, and the Breadth First Search tick is called~ - Inside source: true *** True Line Result # Every tick, new args are passed, and the Breadth First Search tick is called ** Processing line: ~ $breadth_first_search ||= BreadthFirstSearch.new(args)~ - Inside source: true *** True Line Result $breadth_first_search ||= BreadthFirstSearch.new(args) ** Processing line: ~ $breadth_first_search.args = args~ - Inside source: true *** True Line Result $breadth_first_search.args = args ** Processing line: ~ $breadth_first_search.tick~ - Inside source: true *** True Line Result $breadth_first_search.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset~ - Inside source: true *** True Line Result def reset ** Processing line: ~ $breadth_first_search = nil~ - Inside source: true *** True Line Result $breadth_first_search = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Path Finding Algorithms - Detailed Breadth First Search - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Path Finding Algorithms - Detailed Breadth First Search - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/13_path_finding_algorithms/02_detailed_breadth_first_search/app/main.rb~ - Inside source: true *** True Line Result # ./samples/13_path_finding_algorithms/02_detailed_breadth_first_search/app/main.rb ** Processing line: ~ # A visual demonstration of a breadth first search~ - Inside source: true *** True Line Result # A visual demonstration of a breadth first search ** Processing line: ~ # Inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html~ - Inside source: true *** True Line Result # Inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # An animation that can respond to user input in real time~ - Inside source: true *** True Line Result # An animation that can respond to user input in real time ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # A breadth first search expands in all directions one step at a time~ - Inside source: true *** True Line Result # A breadth first search expands in all directions one step at a time ** Processing line: ~ # The frontier is a queue of cells to be expanded from~ - Inside source: true *** True Line Result # The frontier is a queue of cells to be expanded from ** Processing line: ~ # The visited hash allows quick lookups of cells that have been expanded from~ - Inside source: true *** True Line Result # The visited hash allows quick lookups of cells that have been expanded from ** Processing line: ~ # The walls hash allows quick lookup of whether a cell is a wall~ - Inside source: true *** True Line Result # The walls hash allows quick lookup of whether a cell is a wall ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The breadth first search starts by adding the red star to the frontier array~ - Inside source: true *** True Line Result # The breadth first search starts by adding the red star to the frontier array ** Processing line: ~ # and marking it as visited~ - Inside source: true *** True Line Result # and marking it as visited ** Processing line: ~ # Each step a cell is removed from the front of the frontier array (queue)~ - Inside source: true *** True Line Result # Each step a cell is removed from the front of the frontier array (queue) ** Processing line: ~ # Unless the neighbor is a wall or visited, it is added to the frontier array~ - Inside source: true *** True Line Result # Unless the neighbor is a wall or visited, it is added to the frontier array ** Processing line: ~ # The neighbor is then marked as visited~ - Inside source: true *** True Line Result # The neighbor is then marked as visited ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The frontier is blue~ - Inside source: true *** True Line Result # The frontier is blue ** Processing line: ~ # Visited cells are light brown~ - Inside source: true *** True Line Result # Visited cells are light brown ** Processing line: ~ # Walls are camo green~ - Inside source: true *** True Line Result # Walls are camo green ** Processing line: ~ # Even when walls are visited, they will maintain their wall color~ - Inside source: true *** True Line Result # Even when walls are visited, they will maintain their wall color ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This search numbers the order in which new cells are explored~ - Inside source: true *** True Line Result # This search numbers the order in which new cells are explored ** Processing line: ~ # The next cell from where the search will continue is highlighted yellow~ - Inside source: true *** True Line Result # The next cell from where the search will continue is highlighted yellow ** Processing line: ~ # And the cells that will be considered for expansion are in semi-transparent green~ - Inside source: true *** True Line Result # And the cells that will be considered for expansion are in semi-transparent green ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The star can be moved by clicking and dragging~ - Inside source: true *** True Line Result # The star can be moved by clicking and dragging ** Processing line: ~ # Walls can be added and removed by clicking and dragging~ - Inside source: true *** True Line Result # Walls can be added and removed by clicking and dragging ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class DetailedBreadthFirstSearch~ - Inside source: true *** True Line Result class DetailedBreadthFirstSearch ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize(args)~ - Inside source: true *** True Line Result def initialize(args) ** Processing line: ~ # Variables to edit the size and appearance of the grid~ - Inside source: true *** True Line Result # Variables to edit the size and appearance of the grid ** Processing line: ~ # Freely customizable to user's liking~ - Inside source: true *** True Line Result # Freely customizable to user's liking ** Processing line: ~ args.state.grid.width = 9~ - Inside source: true *** True Line Result args.state.grid.width = 9 ** Processing line: ~ args.state.grid.height = 4~ - Inside source: true *** True Line Result args.state.grid.height = 4 ** Processing line: ~ args.state.grid.cell_size = 90~ - Inside source: true *** True Line Result args.state.grid.cell_size = 90 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Stores which step of the animation is being rendered~ - Inside source: true *** True Line Result # Stores which step of the animation is being rendered ** Processing line: ~ # When the user moves the star or messes with the walls,~ - Inside source: true *** True Line Result # When the user moves the star or messes with the walls, ** Processing line: ~ # the breadth first search is recalculated up to this step~ - Inside source: true *** True Line Result # the breadth first search is recalculated up to this step ** Processing line: ~ args.state.anim_steps = 0~ - Inside source: true *** True Line Result args.state.anim_steps = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # At some step the animation will end,~ - Inside source: true *** True Line Result # At some step the animation will end, ** Processing line: ~ # and further steps won't change anything (the whole grid will be explored)~ - Inside source: true *** True Line Result # and further steps won't change anything (the whole grid will be explored) ** Processing line: ~ # This step is roughly the grid's width * height~ - Inside source: true *** True Line Result # This step is roughly the grid's width * height ** Processing line: ~ # When anim_steps equals max_steps no more calculations will occur~ - Inside source: true *** True Line Result # When anim_steps equals max_steps no more calculations will occur ** Processing line: ~ # and the slider will be at the end~ - Inside source: true *** True Line Result # and the slider will be at the end ** Processing line: ~ args.state.max_steps = args.state.grid.width * args.state.grid.height~ - Inside source: true *** True Line Result args.state.max_steps = args.state.grid.width * args.state.grid.height ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The location of the star and walls of the grid~ - Inside source: true *** True Line Result # The location of the star and walls of the grid ** Processing line: ~ # They can be modified to have a different initial grid~ - Inside source: true *** True Line Result # They can be modified to have a different initial grid ** Processing line: ~ # Walls are stored in a hash for quick look up when doing the search~ - Inside source: true *** True Line Result # Walls are stored in a hash for quick look up when doing the search ** Processing line: ~ args.state.star = [3, 2]~ - Inside source: true *** True Line Result args.state.star = [3, 2] ** Processing line: ~ args.state.walls = {}~ - Inside source: true *** True Line Result args.state.walls = {} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Variables that are used by the breadth first search~ - Inside source: true *** True Line Result # Variables that are used by the breadth first search ** Processing line: ~ # Storing cells that the search has visited, prevents unnecessary steps~ - Inside source: true *** True Line Result # Storing cells that the search has visited, prevents unnecessary steps ** Processing line: ~ # Expanding the frontier of the search in order makes the search expand~ - Inside source: true *** True Line Result # Expanding the frontier of the search in order makes the search expand ** Processing line: ~ # from the center outward~ - Inside source: true *** True Line Result # from the center outward ** Processing line: ~ args.state.visited = {}~ - Inside source: true *** True Line Result args.state.visited = {} ** Processing line: ~ args.state.frontier = []~ - Inside source: true *** True Line Result args.state.frontier = [] ** Processing line: ~ args.state.cell_numbers = []~ - Inside source: true *** True Line Result args.state.cell_numbers = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # What the user is currently editing on the grid~ - Inside source: true *** True Line Result # What the user is currently editing on the grid ** Processing line: ~ # Possible values are: :none, :slider, :star, :remove_wall, :add_wall~ - Inside source: true *** True Line Result # Possible values are: :none, :slider, :star, :remove_wall, :add_wall ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # We store this value, because we want to remember the value even when~ - Inside source: true *** True Line Result # We store this value, because we want to remember the value even when ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ - Inside source: true *** True Line Result # the user's cursor is no longer over what they're interacting with, but ** Processing line: ~ # they are still clicking down on the mouse.~ - Inside source: true *** True Line Result # they are still clicking down on the mouse. ** Processing line: ~ args.state.click_and_drag = :none~ - Inside source: true *** True Line Result args.state.click_and_drag = :none ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The x, y, w, h values for the buttons~ - Inside source: true *** True Line Result # The x, y, w, h values for the buttons ** Processing line: ~ # Allow easy movement of the buttons location~ - Inside source: true *** True Line Result # Allow easy movement of the buttons location ** Processing line: ~ # A centralized location to get values to detect input and draw the buttons~ - Inside source: true *** True Line Result # A centralized location to get values to detect input and draw the buttons ** Processing line: ~ # Editing these values might mean needing to edit the label offsets~ - Inside source: true *** True Line Result # Editing these values might mean needing to edit the label offsets ** Processing line: ~ # which can be found in the appropriate render button methods~ - Inside source: true *** True Line Result # which can be found in the appropriate render button methods ** Processing line: ~ args.state.buttons.left = [450, 600, 160, 50]~ - Inside source: true *** True Line Result args.state.buttons.left = [450, 600, 160, 50] ** Processing line: ~ args.state.buttons.right = [610, 600, 160, 50]~ - Inside source: true *** True Line Result args.state.buttons.right = [610, 600, 160, 50] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The variables below are related to the slider~ - Inside source: true *** True Line Result # The variables below are related to the slider ** Processing line: ~ # They allow the user to customize them~ - Inside source: true *** True Line Result # They allow the user to customize them ** Processing line: ~ # They also give a central location for the render and input methods to get~ - Inside source: true *** True Line Result # They also give a central location for the render and input methods to get ** Processing line: ~ # information from~ - Inside source: true *** True Line Result # information from ** Processing line: ~ # x & y are the coordinates of the leftmost part of the slider line~ - Inside source: true *** True Line Result # x & y are the coordinates of the leftmost part of the slider line ** Processing line: ~ args.state.slider.x = 400~ - Inside source: true *** True Line Result args.state.slider.x = 400 ** Processing line: ~ args.state.slider.y = 675~ - Inside source: true *** True Line Result args.state.slider.y = 675 ** Processing line: ~ # This is the width of the line~ - Inside source: true *** True Line Result # This is the width of the line ** Processing line: ~ args.state.slider.w = 360~ - Inside source: true *** True Line Result args.state.slider.w = 360 ** Processing line: ~ # This is the offset for the circle~ - Inside source: true *** True Line Result # This is the offset for the circle ** Processing line: ~ # Allows the center of the circle to be on the line,~ - Inside source: true *** True Line Result # Allows the center of the circle to be on the line, ** Processing line: ~ # as opposed to the upper right corner~ - Inside source: true *** True Line Result # as opposed to the upper right corner ** Processing line: ~ args.state.slider.offset = 20~ - Inside source: true *** True Line Result args.state.slider.offset = 20 ** Processing line: ~ # This is the spacing between each of the notches on the slider~ - Inside source: true *** True Line Result # This is the spacing between each of the notches on the slider ** Processing line: ~ # Notches are places where the circle can rest on the slider line~ - Inside source: true *** True Line Result # Notches are places where the circle can rest on the slider line ** Processing line: ~ # There needs to be a notch for each step before the maximum number of steps~ - Inside source: true *** True Line Result # There needs to be a notch for each step before the maximum number of steps ** Processing line: ~ args.state.slider.spacing = args.state.slider.w.to_f / args.state.max_steps.to_f~ - Inside source: true *** True Line Result args.state.slider.spacing = args.state.slider.w.to_f / args.state.max_steps.to_f ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method is called every frame/tick~ - Inside source: true *** True Line Result # This method is called every frame/tick ** Processing line: ~ # Every tick, the current state of the search is rendered on the screen,~ - Inside source: true *** True Line Result # Every tick, the current state of the search is rendered on the screen, ** Processing line: ~ # User input is processed, and~ - Inside source: true *** True Line Result # User input is processed, and ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method is called from tick and renders everything every tick~ - Inside source: true *** True Line Result # This method is called from tick and renders everything every tick ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ render_buttons~ - Inside source: true *** True Line Result render_buttons ** Processing line: ~ render_slider~ - Inside source: true *** True Line Result render_slider ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_background~ - Inside source: true *** True Line Result render_background ** Processing line: ~ render_visited~ - Inside source: true *** True Line Result render_visited ** Processing line: ~ render_frontier~ - Inside source: true *** True Line Result render_frontier ** Processing line: ~ render_walls~ - Inside source: true *** True Line Result render_walls ** Processing line: ~ render_star~ - Inside source: true *** True Line Result render_star ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_highlights~ - Inside source: true *** True Line Result render_highlights ** Processing line: ~ render_cell_numbers~ - Inside source: true *** True Line Result render_cell_numbers ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The methods below subdivide the task of drawing everything to the screen~ - Inside source: true *** True Line Result # The methods below subdivide the task of drawing everything to the screen ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws the buttons that move the search backward or forward~ - Inside source: true *** True Line Result # Draws the buttons that move the search backward or forward ** Processing line: ~ # These buttons are rendered so the user knows where to click to move the search~ - Inside source: true *** True Line Result # These buttons are rendered so the user knows where to click to move the search ** Processing line: ~ def render_buttons~ - Inside source: true *** True Line Result def render_buttons ** Processing line: ~ render_left_button~ - Inside source: true *** True Line Result render_left_button ** Processing line: ~ render_right_button~ - Inside source: true *** True Line Result render_right_button ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the button which steps the search backward~ - Inside source: true *** True Line Result # Renders the button which steps the search backward ** Processing line: ~ # Shows the user where to click to move the search backward~ - Inside source: true *** True Line Result # Shows the user where to click to move the search backward ** Processing line: ~ def render_left_button~ - Inside source: true *** True Line Result def render_left_button ** Processing line: ~ # Draws the gray button, and a black border~ - Inside source: true *** True Line Result # Draws the gray button, and a black border ** Processing line: ~ # The border separates the buttons visually~ - Inside source: true *** True Line Result # The border separates the buttons visually ** Processing line: ~ outputs.solids << [buttons.left, gray]~ - Inside source: true *** True Line Result outputs.solids << [buttons.left, gray] ** Processing line: ~ outputs.borders << [buttons.left, black]~ - Inside source: true *** True Line Result outputs.borders << [buttons.left, black] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders an explanatory label in the center of the button~ - Inside source: true *** True Line Result # Renders an explanatory label in the center of the button ** Processing line: ~ # Explains to the user what the button does~ - Inside source: true *** True Line Result # Explains to the user what the button does ** Processing line: ~ label_x = buttons.left.x + 05~ - Inside source: true *** True Line Result label_x = buttons.left.x + 05 ** Processing line: ~ label_y = buttons.left.y + 35~ - Inside source: true *** True Line Result label_y = buttons.left.y + 35 ** Processing line: ~ outputs.labels << [label_x, label_y, "< Step backward"]~ - Inside source: true *** True Line Result outputs.labels << [label_x, label_y, "< Step backward"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the button which steps the search forward~ - Inside source: true *** True Line Result # Renders the button which steps the search forward ** Processing line: ~ # Shows the user where to click to move the search forward~ - Inside source: true *** True Line Result # Shows the user where to click to move the search forward ** Processing line: ~ def render_right_button~ - Inside source: true *** True Line Result def render_right_button ** Processing line: ~ # Draws the gray button, and a black border~ - Inside source: true *** True Line Result # Draws the gray button, and a black border ** Processing line: ~ # The border separates the buttons visually~ - Inside source: true *** True Line Result # The border separates the buttons visually ** Processing line: ~ outputs.solids << [buttons.right, gray]~ - Inside source: true *** True Line Result outputs.solids << [buttons.right, gray] ** Processing line: ~ outputs.borders << [buttons.right, black]~ - Inside source: true *** True Line Result outputs.borders << [buttons.right, black] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders an explanatory label in the center of the button~ - Inside source: true *** True Line Result # Renders an explanatory label in the center of the button ** Processing line: ~ # Explains to the user what the button does~ - Inside source: true *** True Line Result # Explains to the user what the button does ** Processing line: ~ label_x = buttons.right.x + 10~ - Inside source: true *** True Line Result label_x = buttons.right.x + 10 ** Processing line: ~ label_y = buttons.right.y + 35~ - Inside source: true *** True Line Result label_y = buttons.right.y + 35 ** Processing line: ~ outputs.labels << [label_x, label_y, "Step forward >"]~ - Inside source: true *** True Line Result outputs.labels << [label_x, label_y, "Step forward >"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws the slider so the user can move it and see the progress of the search~ - Inside source: true *** True Line Result # Draws the slider so the user can move it and see the progress of the search ** Processing line: ~ def render_slider~ - Inside source: true *** True Line Result def render_slider ** Processing line: ~ # Using primitives hides the line under the white circle of the slider~ - Inside source: true *** True Line Result # Using primitives hides the line under the white circle of the slider ** Processing line: ~ # Draws the line~ - Inside source: true *** True Line Result # Draws the line ** Processing line: ~ outputs.primitives << [slider.x, slider.y, slider.x + slider.w, slider.y].line~ - Inside source: true *** True Line Result outputs.primitives << [slider.x, slider.y, slider.x + slider.w, slider.y].line ** Processing line: ~ # The circle needs to be offset so that the center of the circle~ - Inside source: true *** True Line Result # The circle needs to be offset so that the center of the circle ** Processing line: ~ # overlaps the line instead of the upper right corner of the circle~ - Inside source: true *** True Line Result # overlaps the line instead of the upper right corner of the circle ** Processing line: ~ # The circle's x value is also moved based on the current seach step~ - Inside source: true *** True Line Result # The circle's x value is also moved based on the current seach step ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.anim_steps * slider.spacing)~ - Inside source: true *** True Line Result circle_x = (slider.x - slider.offset) + (state.anim_steps * slider.spacing) ** Processing line: ~ circle_y = (slider.y - slider.offset)~ - Inside source: true *** True Line Result circle_y = (slider.y - slider.offset) ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ - Inside source: true *** True Line Result circle_rect = [circle_x, circle_y, 37, 37] ** Processing line: ~ outputs.primitives << [circle_rect, 'circle-white.png'].sprite~ - Inside source: true *** True Line Result outputs.primitives << [circle_rect, 'circle-white.png'].sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws what the grid looks like with nothing on it~ - Inside source: true *** True Line Result # Draws what the grid looks like with nothing on it ** Processing line: ~ # Which is a bunch of unvisited cells~ - Inside source: true *** True Line Result # Which is a bunch of unvisited cells ** Processing line: ~ # Drawn first so other things can draw on top of it~ - Inside source: true *** True Line Result # Drawn first so other things can draw on top of it ** Processing line: ~ def render_background~ - Inside source: true *** True Line Result def render_background ** Processing line: ~ render_unvisited~ - Inside source: true *** True Line Result render_unvisited ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The grid lines make the cells appear separate~ - Inside source: true *** True Line Result # The grid lines make the cells appear separate ** Processing line: ~ render_grid_lines~ - Inside source: true *** True Line Result render_grid_lines ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws a rectangle the size of the entire grid to represent unvisited cells~ - Inside source: true *** True Line Result # Draws a rectangle the size of the entire grid to represent unvisited cells ** Processing line: ~ # Unvisited cells are the default cell~ - Inside source: true *** True Line Result # Unvisited cells are the default cell ** Processing line: ~ def render_unvisited~ - Inside source: true *** True Line Result def render_unvisited ** Processing line: ~ background = [0, 0, grid.width, grid.height]~ - Inside source: true *** True Line Result background = [0, 0, grid.width, grid.height] ** Processing line: ~ outputs.solids << [scale_up(background), unvisited_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(background), unvisited_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws grid lines to show the division of the grid into cells~ - Inside source: true *** True Line Result # Draws grid lines to show the division of the grid into cells ** Processing line: ~ def render_grid_lines~ - Inside source: true *** True Line Result def render_grid_lines ** Processing line: ~ for x in 0..grid.width~ - Inside source: true *** True Line Result for x in 0..grid.width ** Processing line: ~ outputs.lines << [scale_up(vertical_line(x)), grid_line_color]~ - Inside source: true *** True Line Result outputs.lines << [scale_up(vertical_line(x)), grid_line_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ for y in 0..grid.height~ - Inside source: true *** True Line Result for y in 0..grid.height ** Processing line: ~ outputs.lines << [scale_up(horizontal_line(y)), grid_line_color]~ - Inside source: true *** True Line Result outputs.lines << [scale_up(horizontal_line(y)), grid_line_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easy way to get a vertical line given an index~ - Inside source: true *** True Line Result # Easy way to get a vertical line given an index ** Processing line: ~ def vertical_line column~ - Inside source: true *** True Line Result def vertical_line column ** Processing line: ~ [column, 0, column, grid.height]~ - Inside source: true *** True Line Result [column, 0, column, grid.height] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easy way to get a horizontal line given an index~ - Inside source: true *** True Line Result # Easy way to get a horizontal line given an index ** Processing line: ~ def horizontal_line row~ - Inside source: true *** True Line Result def horizontal_line row ** Processing line: ~ [0, row, grid.width, row]~ - Inside source: true *** True Line Result [0, row, grid.width, row] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws the area that is going to be searched from~ - Inside source: true *** True Line Result # Draws the area that is going to be searched from ** Processing line: ~ # The frontier is the most outward parts of the search~ - Inside source: true *** True Line Result # The frontier is the most outward parts of the search ** Processing line: ~ def render_frontier~ - Inside source: true *** True Line Result def render_frontier ** Processing line: ~ state.frontier.each do |cell|~ - Inside source: true *** True Line Result state.frontier.each do |cell| ** Processing line: ~ outputs.solids << [scale_up(cell), frontier_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(cell), frontier_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws the walls~ - Inside source: true *** True Line Result # Draws the walls ** Processing line: ~ def render_walls~ - Inside source: true *** True Line Result def render_walls ** Processing line: ~ state.walls.each_key do |wall|~ - Inside source: true *** True Line Result state.walls.each_key do |wall| ** Processing line: ~ outputs.solids << [scale_up(wall), wall_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(wall), wall_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders cells that have been searched in the appropriate color~ - Inside source: true *** True Line Result # Renders cells that have been searched in the appropriate color ** Processing line: ~ def render_visited~ - Inside source: true *** True Line Result def render_visited ** Processing line: ~ state.visited.each_key do |cell|~ - Inside source: true *** True Line Result state.visited.each_key do |cell| ** Processing line: ~ outputs.solids << [scale_up(cell), visited_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(cell), visited_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the star~ - Inside source: true *** True Line Result # Renders the star ** Processing line: ~ def render_star~ - Inside source: true *** True Line Result def render_star ** Processing line: ~ outputs.sprites << [scale_up(state.star), 'star.png']~ - Inside source: true *** True Line Result outputs.sprites << [scale_up(state.star), 'star.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Cells have a number rendered in them based on when they were explored~ - Inside source: true *** True Line Result # Cells have a number rendered in them based on when they were explored ** Processing line: ~ # This is based off of their index in the cell_numbers array~ - Inside source: true *** True Line Result # This is based off of their index in the cell_numbers array ** Processing line: ~ # Cells are added to this array the same time they are added to the frontier array~ - Inside source: true *** True Line Result # Cells are added to this array the same time they are added to the frontier array ** Processing line: ~ def render_cell_numbers~ - Inside source: true *** True Line Result def render_cell_numbers ** Processing line: ~ state.cell_numbers.each_with_index do |cell, index|~ - Inside source: true *** True Line Result state.cell_numbers.each_with_index do |cell, index| ** Processing line: ~ # Math that approx centers the number in the cell~ - Inside source: true *** True Line Result # Math that approx centers the number in the cell ** Processing line: ~ label_x = (cell.x * grid.cell_size) + grid.cell_size / 2 - 5~ - Inside source: true *** True Line Result label_x = (cell.x * grid.cell_size) + grid.cell_size / 2 - 5 ** Processing line: ~ label_y = (cell.y * grid.cell_size) + (grid.cell_size / 2) + 5~ - Inside source: true *** True Line Result label_y = (cell.y * grid.cell_size) + (grid.cell_size / 2) + 5 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [label_x, label_y, (index + 1).to_s]~ - Inside source: true *** True Line Result outputs.labels << [label_x, label_y, (index + 1).to_s] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The next frontier to be expanded is highlighted yellow~ - Inside source: true *** True Line Result # The next frontier to be expanded is highlighted yellow ** Processing line: ~ # Its adjacent non-wall neighbors have their border highlighted green~ - Inside source: true *** True Line Result # Its adjacent non-wall neighbors have their border highlighted green ** Processing line: ~ # This is to show the user how the search expands~ - Inside source: true *** True Line Result # This is to show the user how the search expands ** Processing line: ~ def render_highlights~ - Inside source: true *** True Line Result def render_highlights ** Processing line: ~ return if state.frontier.empty?~ - Inside source: true *** True Line Result return if state.frontier.empty? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Highlight the next frontier to be expanded yellow~ - Inside source: true *** True Line Result # Highlight the next frontier to be expanded yellow ** Processing line: ~ next_frontier = state.frontier[0]~ - Inside source: true *** True Line Result next_frontier = state.frontier[0] ** Processing line: ~ outputs.solids << [scale_up(next_frontier), highlighter_yellow]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(next_frontier), highlighter_yellow] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Neighbors have a semi-transparent green layer over them~ - Inside source: true *** True Line Result # Neighbors have a semi-transparent green layer over them ** Processing line: ~ # Unless the neighbor is a wall~ - Inside source: true *** True Line Result # Unless the neighbor is a wall ** Processing line: ~ adjacent_neighbors(next_frontier).each do |neighbor|~ - Inside source: true *** True Line Result adjacent_neighbors(next_frontier).each do |neighbor| ** Processing line: ~ unless state.walls.has_key?(neighbor)~ - Inside source: true *** True Line Result unless state.walls.has_key?(neighbor) ** Processing line: ~ outputs.solids << [scale_up(neighbor), highlighter_green, 70]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(neighbor), highlighter_green, 70] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Cell Size is used when rendering to allow the grid to be scaled up or down~ - Inside source: true *** True Line Result # Cell Size is used when rendering to allow the grid to be scaled up or down ** Processing line: ~ # Cells in the frontier array and visited hash and walls hash are stored as x & y~ - Inside source: true *** True Line Result # Cells in the frontier array and visited hash and walls hash are stored as x & y ** Processing line: ~ # Scaling up cells and lines when rendering allows omitting of width and height~ - Inside source: true *** True Line Result # Scaling up cells and lines when rendering allows omitting of width and height ** Processing line: ~ def scale_up(cell)~ - Inside source: true *** True Line Result def scale_up(cell) ** Processing line: ~ # Prevents the original value of cell from being edited~ - Inside source: true *** True Line Result # Prevents the original value of cell from being edited ** Processing line: ~ cell = cell.clone~ - Inside source: true *** True Line Result cell = cell.clone ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If cell is just an x and y coordinate~ - Inside source: true *** True Line Result # If cell is just an x and y coordinate ** Processing line: ~ if cell.size == 2~ - Inside source: true *** True Line Result if cell.size == 2 ** Processing line: ~ # Add a width and height of 1~ - Inside source: true *** True Line Result # Add a width and height of 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Scale all the values up~ - Inside source: true *** True Line Result # Scale all the values up ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ - Inside source: true *** True Line Result cell.map! { |value| value * grid.cell_size } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the scaled up cell~ - Inside source: true *** True Line Result # Returns the scaled up cell ** Processing line: ~ cell~ - Inside source: true *** True Line Result cell ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method processes user input every tick~ - Inside source: true *** True Line Result # This method processes user input every tick ** Processing line: ~ # This method allows the user to use the buttons, slider, and edit the grid~ - Inside source: true *** True Line Result # This method allows the user to use the buttons, slider, and edit the grid ** Processing line: ~ # There are 2 types of input:~ - Inside source: true *** True Line Result # There are 2 types of input: ** Processing line: ~ # Button Input~ - Inside source: true *** True Line Result # Button Input ** Processing line: ~ # Click and Drag Input~ - Inside source: true *** True Line Result # Click and Drag Input ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Button Input is used for the backward step and forward step buttons~ - Inside source: true *** True Line Result # Button Input is used for the backward step and forward step buttons ** Processing line: ~ # Input is detected by mouse up within the bounds of the rect~ - Inside source: true *** True Line Result # Input is detected by mouse up within the bounds of the rect ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Click and Drag Input is used for moving the star, adding walls,~ - Inside source: true *** True Line Result # Click and Drag Input is used for moving the star, adding walls, ** Processing line: ~ # removing walls, and the slider~ - Inside source: true *** True Line Result # removing walls, and the slider ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # When the mouse is down on the star, the click_and_drag variable is set to :star~ - Inside source: true *** True Line Result # When the mouse is down on the star, the click_and_drag variable is set to :star ** Processing line: ~ # While click_and_drag equals :star, the cursor's position is used to calculate the~ - Inside source: true *** True Line Result # While click_and_drag equals :star, the cursor's position is used to calculate the ** Processing line: ~ # appropriate drag behavior~ - Inside source: true *** True Line Result # appropriate drag behavior ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # When the mouse goes up click_and_drag is set to :none~ - Inside source: true *** True Line Result # When the mouse goes up click_and_drag is set to :none ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # A variable has to be used because the star has to continue being edited even~ - Inside source: true *** True Line Result # A variable has to be used because the star has to continue being edited even ** Processing line: ~ # when the cursor is no longer over the star~ - Inside source: true *** True Line Result # when the cursor is no longer over the star ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # Similar things occur for the other Click and Drag inputs~ - Inside source: true *** True Line Result # Similar things occur for the other Click and Drag inputs ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ # Processes inputs for the buttons~ - Inside source: true *** True Line Result # Processes inputs for the buttons ** Processing line: ~ input_buttons~ - Inside source: true *** True Line Result input_buttons ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Detects which if any click and drag input is occurring~ - Inside source: true *** True Line Result # Detects which if any click and drag input is occurring ** Processing line: ~ detect_click_and_drag~ - Inside source: true *** True Line Result detect_click_and_drag ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Does the appropriate click and drag input based on the click_and_drag variable~ - Inside source: true *** True Line Result # Does the appropriate click and drag input based on the click_and_drag variable ** Processing line: ~ process_click_and_drag~ - Inside source: true *** True Line Result process_click_and_drag ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Detects and Process input for each button~ - Inside source: true *** True Line Result # Detects and Process input for each button ** Processing line: ~ def input_buttons~ - Inside source: true *** True Line Result def input_buttons ** Processing line: ~ input_left_button~ - Inside source: true *** True Line Result input_left_button ** Processing line: ~ input_right_button~ - Inside source: true *** True Line Result input_right_button ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks if the previous step button is clicked~ - Inside source: true *** True Line Result # Checks if the previous step button is clicked ** Processing line: ~ # If it is, it pauses the animation and moves the search one step backward~ - Inside source: true *** True Line Result # If it is, it pauses the animation and moves the search one step backward ** Processing line: ~ def input_left_button~ - Inside source: true *** True Line Result def input_left_button ** Processing line: ~ if left_button_clicked?~ - Inside source: true *** True Line Result if left_button_clicked? ** Processing line: ~ unless state.anim_steps == 0~ - Inside source: true *** True Line Result unless state.anim_steps == 0 ** Processing line: ~ state.anim_steps -= 1~ - Inside source: true *** True Line Result state.anim_steps -= 1 ** Processing line: ~ recalculate~ - Inside source: true *** True Line Result recalculate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks if the next step button is clicked~ - Inside source: true *** True Line Result # Checks if the next step button is clicked ** Processing line: ~ # If it is, it pauses the animation and moves the search one step forward~ - Inside source: true *** True Line Result # If it is, it pauses the animation and moves the search one step forward ** Processing line: ~ def input_right_button~ - Inside source: true *** True Line Result def input_right_button ** Processing line: ~ if right_button_clicked?~ - Inside source: true *** True Line Result if right_button_clicked? ** Processing line: ~ unless state.anim_steps == state.max_steps~ - Inside source: true *** True Line Result unless state.anim_steps == state.max_steps ** Processing line: ~ state.anim_steps += 1~ - Inside source: true *** True Line Result state.anim_steps += 1 ** Processing line: ~ # Although normally recalculate would be called here~ - Inside source: true *** True Line Result # Although normally recalculate would be called here ** Processing line: ~ # because the right button only moves the search forward~ - Inside source: true *** True Line Result # because the right button only moves the search forward ** Processing line: ~ # We can just do that~ - Inside source: true *** True Line Result # We can just do that ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Whenever the user edits the grid,~ - Inside source: true *** True Line Result # Whenever the user edits the grid, ** Processing line: ~ # The search has to be recalculated upto the current step~ - Inside source: true *** True Line Result # The search has to be recalculated upto the current step ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def recalculate~ - Inside source: true *** True Line Result def recalculate ** Processing line: ~ # Resets the search~ - Inside source: true *** True Line Result # Resets the search ** Processing line: ~ state.frontier = []~ - Inside source: true *** True Line Result state.frontier = [] ** Processing line: ~ state.visited = {}~ - Inside source: true *** True Line Result state.visited = {} ** Processing line: ~ state.cell_numbers = []~ - Inside source: true *** True Line Result state.cell_numbers = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the animation forward one step at a time~ - Inside source: true *** True Line Result # Moves the animation forward one step at a time ** Processing line: ~ state.anim_steps.times { calc }~ - Inside source: true *** True Line Result state.anim_steps.times { calc } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Determines what the user is clicking and planning on dragging~ - Inside source: true *** True Line Result # Determines what the user is clicking and planning on dragging ** Processing line: ~ # Click and drag input is initiated by a click on the appropriate item~ - Inside source: true *** True Line Result # Click and drag input is initiated by a click on the appropriate item ** Processing line: ~ # and ended by mouse up~ - Inside source: true *** True Line Result # and ended by mouse up ** Processing line: ~ # Storing the value allows the user to continue the same edit as long as the~ - Inside source: true *** True Line Result # Storing the value allows the user to continue the same edit as long as the ** Processing line: ~ # mouse left click is held~ - Inside source: true *** True Line Result # mouse left click is held ** Processing line: ~ def detect_click_and_drag~ - Inside source: true *** True Line Result def detect_click_and_drag ** Processing line: ~ if inputs.mouse.up~ - Inside source: true *** True Line Result if inputs.mouse.up ** Processing line: ~ state.click_and_drag = :none~ - Inside source: true *** True Line Result state.click_and_drag = :none ** Processing line: ~ elsif star_clicked?~ - Inside source: true *** True Line Result elsif star_clicked? ** Processing line: ~ state.click_and_drag = :star~ - Inside source: true *** True Line Result state.click_and_drag = :star ** Processing line: ~ elsif wall_clicked?~ - Inside source: true *** True Line Result elsif wall_clicked? ** Processing line: ~ state.click_and_drag = :remove_wall~ - Inside source: true *** True Line Result state.click_and_drag = :remove_wall ** Processing line: ~ elsif grid_clicked?~ - Inside source: true *** True Line Result elsif grid_clicked? ** Processing line: ~ state.click_and_drag = :add_wall~ - Inside source: true *** True Line Result state.click_and_drag = :add_wall ** Processing line: ~ elsif slider_clicked?~ - Inside source: true *** True Line Result elsif slider_clicked? ** Processing line: ~ state.click_and_drag = :slider~ - Inside source: true *** True Line Result state.click_and_drag = :slider ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Processes input based on what the user is currently dragging~ - Inside source: true *** True Line Result # Processes input based on what the user is currently dragging ** Processing line: ~ def process_click_and_drag~ - Inside source: true *** True Line Result def process_click_and_drag ** Processing line: ~ if state.click_and_drag == :slider~ - Inside source: true *** True Line Result if state.click_and_drag == :slider ** Processing line: ~ input_slider~ - Inside source: true *** True Line Result input_slider ** Processing line: ~ elsif state.click_and_drag == :star~ - Inside source: true *** True Line Result elsif state.click_and_drag == :star ** Processing line: ~ input_star~ - Inside source: true *** True Line Result input_star ** Processing line: ~ elsif state.click_and_drag == :remove_wall~ - Inside source: true *** True Line Result elsif state.click_and_drag == :remove_wall ** Processing line: ~ input_remove_wall~ - Inside source: true *** True Line Result input_remove_wall ** Processing line: ~ elsif state.click_and_drag == :add_wall~ - Inside source: true *** True Line Result elsif state.click_and_drag == :add_wall ** Processing line: ~ input_add_wall~ - Inside source: true *** True Line Result input_add_wall ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method is called when the user is dragging the slider~ - Inside source: true *** True Line Result # This method is called when the user is dragging the slider ** Processing line: ~ # It moves the current animation step to the point represented by the slider~ - Inside source: true *** True Line Result # It moves the current animation step to the point represented by the slider ** Processing line: ~ def input_slider~ - Inside source: true *** True Line Result def input_slider ** Processing line: ~ mouse_x = inputs.mouse.point.x~ - Inside source: true *** True Line Result mouse_x = inputs.mouse.point.x ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Bounds the mouse_x to the closest x value on the slider line~ - Inside source: true *** True Line Result # Bounds the mouse_x to the closest x value on the slider line ** Processing line: ~ mouse_x = slider.x if mouse_x < slider.x~ - Inside source: true *** True Line Result mouse_x = slider.x if mouse_x < slider.x ** Processing line: ~ mouse_x = slider.x + slider.w if mouse_x > slider.x + slider.w~ - Inside source: true *** True Line Result mouse_x = slider.x + slider.w if mouse_x > slider.x + slider.w ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the current search step to the one represented by the mouse x value~ - Inside source: true *** True Line Result # Sets the current search step to the one represented by the mouse x value ** Processing line: ~ # The slider's circle moves due to the render_slider method using anim_steps~ - Inside source: true *** True Line Result # The slider's circle moves due to the render_slider method using anim_steps ** Processing line: ~ state.anim_steps = ((mouse_x - slider.x) / slider.spacing).to_i~ - Inside source: true *** True Line Result state.anim_steps = ((mouse_x - slider.x) / slider.spacing).to_i ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ recalculate~ - Inside source: true *** True Line Result recalculate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the star to the grid closest to the mouse~ - Inside source: true *** True Line Result # Moves the star to the grid closest to the mouse ** Processing line: ~ # Only recalculates the search if the star changes position~ - Inside source: true *** True Line Result # Only recalculates the search if the star changes position ** Processing line: ~ # Called whenever the user is dragging the star~ - Inside source: true *** True Line Result # Called whenever the user is dragging the star ** Processing line: ~ def input_star~ - Inside source: true *** True Line Result def input_star ** Processing line: ~ old_star = state.star.clone~ - Inside source: true *** True Line Result old_star = state.star.clone ** Processing line: ~ state.star = cell_closest_to_mouse~ - Inside source: true *** True Line Result state.star = cell_closest_to_mouse ** Processing line: ~ unless old_star == state.star~ - Inside source: true *** True Line Result unless old_star == state.star ** Processing line: ~ recalculate~ - Inside source: true *** True Line Result recalculate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Removes walls that are under the cursor~ - Inside source: true *** True Line Result # Removes walls that are under the cursor ** Processing line: ~ def input_remove_wall~ - Inside source: true *** True Line Result def input_remove_wall ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ - Inside source: true *** True Line Result # The mouse needs to be inside the grid, because we only want to remove walls ** Processing line: ~ # the cursor is directly over~ - Inside source: true *** True Line Result # the cursor is directly over ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ - Inside source: true *** True Line Result # Recalculations should only occur when a wall is actually deleted ** Processing line: ~ if mouse_inside_grid?~ - Inside source: true *** True Line Result if mouse_inside_grid? ** Processing line: ~ if state.walls.has_key?(cell_closest_to_mouse)~ - Inside source: true *** True Line Result if state.walls.has_key?(cell_closest_to_mouse) ** Processing line: ~ state.walls.delete(cell_closest_to_mouse)~ - Inside source: true *** True Line Result state.walls.delete(cell_closest_to_mouse) ** Processing line: ~ recalculate~ - Inside source: true *** True Line Result recalculate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds walls at cells under the cursor~ - Inside source: true *** True Line Result # Adds walls at cells under the cursor ** Processing line: ~ def input_add_wall~ - Inside source: true *** True Line Result def input_add_wall ** Processing line: ~ # Adds a wall to the hash~ - Inside source: true *** True Line Result # Adds a wall to the hash ** Processing line: ~ # We can use the grid closest to mouse, because the cursor is inside the grid~ - Inside source: true *** True Line Result # We can use the grid closest to mouse, because the cursor is inside the grid ** Processing line: ~ if mouse_inside_grid?~ - Inside source: true *** True Line Result if mouse_inside_grid? ** Processing line: ~ unless state.walls.has_key?(cell_closest_to_mouse)~ - Inside source: true *** True Line Result unless state.walls.has_key?(cell_closest_to_mouse) ** Processing line: ~ state.walls[cell_closest_to_mouse] = true~ - Inside source: true *** True Line Result state.walls[cell_closest_to_mouse] = true ** Processing line: ~ recalculate~ - Inside source: true *** True Line Result recalculate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method moves the search forward one step~ - Inside source: true *** True Line Result # This method moves the search forward one step ** Processing line: ~ # When the animation is playing it is called every tick~ - Inside source: true *** True Line Result # When the animation is playing it is called every tick ** Processing line: ~ # And called whenever the current step of the animation needs to be recalculated~ - Inside source: true *** True Line Result # And called whenever the current step of the animation needs to be recalculated ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the search forward one step~ - Inside source: true *** True Line Result # Moves the search forward one step ** Processing line: ~ # Parameter called_from_tick is true if it is called from the tick method~ - Inside source: true *** True Line Result # Parameter called_from_tick is true if it is called from the tick method ** Processing line: ~ # It is false when the search is being recalculated after user editing the grid~ - Inside source: true *** True Line Result # It is false when the search is being recalculated after user editing the grid ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ # The setup to the search~ - Inside source: true *** True Line Result # The setup to the search ** Processing line: ~ # Runs once when the there is no frontier or visited cells~ - Inside source: true *** True Line Result # Runs once when the there is no frontier or visited cells ** Processing line: ~ if state.frontier.empty? && state.visited.empty?~ - Inside source: true *** True Line Result if state.frontier.empty? && state.visited.empty? ** Processing line: ~ state.frontier << state.star~ - Inside source: true *** True Line Result state.frontier << state.star ** Processing line: ~ state.visited[state.star] = true~ - Inside source: true *** True Line Result state.visited[state.star] = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # A step in the search~ - Inside source: true *** True Line Result # A step in the search ** Processing line: ~ unless state.frontier.empty?~ - Inside source: true *** True Line Result unless state.frontier.empty? ** Processing line: ~ # Takes the next frontier cell~ - Inside source: true *** True Line Result # Takes the next frontier cell ** Processing line: ~ new_frontier = state.frontier.shift~ - Inside source: true *** True Line Result new_frontier = state.frontier.shift ** Processing line: ~ # For each of its neighbors~ - Inside source: true *** True Line Result # For each of its neighbors ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ - Inside source: true *** True Line Result adjacent_neighbors(new_frontier).each do |neighbor| ** Processing line: ~ # That have not been visited and are not walls~ - Inside source: true *** True Line Result # That have not been visited and are not walls ** Processing line: ~ unless state.visited.has_key?(neighbor) || state.walls.has_key?(neighbor)~ - Inside source: true *** True Line Result unless state.visited.has_key?(neighbor) || state.walls.has_key?(neighbor) ** Processing line: ~ # Add them to the frontier and mark them as visited~ - Inside source: true *** True Line Result # Add them to the frontier and mark them as visited ** Processing line: ~ state.frontier << neighbor~ - Inside source: true *** True Line Result state.frontier << neighbor ** Processing line: ~ state.visited[neighbor] = true~ - Inside source: true *** True Line Result state.visited[neighbor] = true ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Also assign them a frontier number~ - Inside source: true *** True Line Result # Also assign them a frontier number ** Processing line: ~ state.cell_numbers << neighbor~ - Inside source: true *** True Line Result state.cell_numbers << neighbor ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a list of adjacent cells~ - Inside source: true *** True Line Result # Returns a list of adjacent cells ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ - Inside source: true *** True Line Result # Used to determine what the next cells to be added to the frontier are ** Processing line: ~ def adjacent_neighbors cell~ - Inside source: true *** True Line Result def adjacent_neighbors cell ** Processing line: ~ neighbors = []~ - Inside source: true *** True Line Result neighbors = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ neighbors << [cell.x, cell.y + 1] unless cell.y == grid.height - 1~ - Inside source: true *** True Line Result neighbors << [cell.x, cell.y + 1] unless cell.y == grid.height - 1 ** Processing line: ~ neighbors << [cell.x + 1, cell.y] unless cell.x == grid.width - 1~ - Inside source: true *** True Line Result neighbors << [cell.x + 1, cell.y] unless cell.x == grid.width - 1 ** Processing line: ~ neighbors << [cell.x, cell.y - 1] unless cell.y == 0~ - Inside source: true *** True Line Result neighbors << [cell.x, cell.y - 1] unless cell.y == 0 ** Processing line: ~ neighbors << [cell.x - 1, cell.y] unless cell.x == 0~ - Inside source: true *** True Line Result neighbors << [cell.x - 1, cell.y] unless cell.x == 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ neighbors~ - Inside source: true *** True Line Result neighbors ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ - Inside source: true *** True Line Result # When the user grabs the star and puts their cursor to the far right ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ - Inside source: true *** True Line Result # and moves up and down, the star is supposed to move along the grid as well ** Processing line: ~ # Finding the grid closest to the mouse helps with this~ - Inside source: true *** True Line Result # Finding the grid closest to the mouse helps with this ** Processing line: ~ def cell_closest_to_mouse~ - Inside source: true *** True Line Result def cell_closest_to_mouse ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ - Inside source: true *** True Line Result x = (inputs.mouse.point.x / grid.cell_size).to_i ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ - Inside source: true *** True Line Result y = (inputs.mouse.point.y / grid.cell_size).to_i ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ - Inside source: true *** True Line Result x = grid.width - 1 if x > grid.width - 1 ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ - Inside source: true *** True Line Result y = grid.height - 1 if y > grid.height - 1 ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These methods detect when the buttons are clicked~ - Inside source: true *** True Line Result # These methods detect when the buttons are clicked ** Processing line: ~ def left_button_clicked?~ - Inside source: true *** True Line Result def left_button_clicked? ** Processing line: ~ (inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.left)) || inputs.keyboard.key_up.left~ - Inside source: true *** True Line Result (inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.left)) || inputs.keyboard.key_up.left ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def right_button_clicked?~ - Inside source: true *** True Line Result def right_button_clicked? ** Processing line: ~ (inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.right)) || inputs.keyboard.key_up.right~ - Inside source: true *** True Line Result (inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.right)) || inputs.keyboard.key_up.right ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the slider~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the slider ** Processing line: ~ def slider_clicked?~ - Inside source: true *** True Line Result def slider_clicked? ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.anim_steps * slider.spacing)~ - Inside source: true *** True Line Result circle_x = (slider.x - slider.offset) + (state.anim_steps * slider.spacing) ** Processing line: ~ circle_y = (slider.y - slider.offset)~ - Inside source: true *** True Line Result circle_y = (slider.y - slider.offset) ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ - Inside source: true *** True Line Result circle_rect = [circle_x, circle_y, 37, 37] ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(circle_rect)~ - Inside source: true *** True Line Result inputs.mouse.down && inputs.mouse.point.inside_rect?(circle_rect) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the star~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the star ** Processing line: ~ def star_clicked?~ - Inside source: true *** True Line Result def star_clicked? ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(state.star))~ - Inside source: true *** True Line Result inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(state.star)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing walls~ - Inside source: true *** True Line Result # Signal that the user is going to be removing walls ** Processing line: ~ def wall_clicked?~ - Inside source: true *** True Line Result def wall_clicked? ** Processing line: ~ inputs.mouse.down && mouse_inside_a_wall?~ - Inside source: true *** True Line Result inputs.mouse.down && mouse_inside_a_wall? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be adding walls~ - Inside source: true *** True Line Result # Signal that the user is going to be adding walls ** Processing line: ~ def grid_clicked?~ - Inside source: true *** True Line Result def grid_clicked? ** Processing line: ~ inputs.mouse.down && mouse_inside_grid?~ - Inside source: true *** True Line Result inputs.mouse.down && mouse_inside_grid? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns whether the mouse is inside of a wall~ - Inside source: true *** True Line Result # Returns whether the mouse is inside of a wall ** Processing line: ~ # Part of the condition that checks whether the user is removing a wall~ - Inside source: true *** True Line Result # Part of the condition that checks whether the user is removing a wall ** Processing line: ~ def mouse_inside_a_wall?~ - Inside source: true *** True Line Result def mouse_inside_a_wall? ** Processing line: ~ state.walls.each_key do | wall |~ - Inside source: true *** True Line Result state.walls.each_key do | wall | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(scale_up(wall))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(scale_up(wall)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns whether the mouse is inside of a grid~ - Inside source: true *** True Line Result # Returns whether the mouse is inside of a grid ** Processing line: ~ # Part of the condition that checks whether the user is adding a wall~ - Inside source: true *** True Line Result # Part of the condition that checks whether the user is adding a wall ** Processing line: ~ def mouse_inside_grid?~ - Inside source: true *** True Line Result def mouse_inside_grid? ** Processing line: ~ inputs.mouse.point.inside_rect?(scale_up([0, 0, grid.width, grid.height]))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(scale_up([0, 0, grid.width, grid.height])) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These methods provide handy aliases to colors~ - Inside source: true *** True Line Result # These methods provide handy aliases to colors ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Light brown~ - Inside source: true *** True Line Result # Light brown ** Processing line: ~ def unvisited_color~ - Inside source: true *** True Line Result def unvisited_color ** Processing line: ~ [221, 212, 213]~ - Inside source: true *** True Line Result [221, 212, 213] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Black~ - Inside source: true *** True Line Result # Black ** Processing line: ~ def grid_line_color~ - Inside source: true *** True Line Result def grid_line_color ** Processing line: ~ [255, 255, 255]~ - Inside source: true *** True Line Result [255, 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Dark Brown~ - Inside source: true *** True Line Result # Dark Brown ** Processing line: ~ def visited_color~ - Inside source: true *** True Line Result def visited_color ** Processing line: ~ [204, 191, 179]~ - Inside source: true *** True Line Result [204, 191, 179] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Blue~ - Inside source: true *** True Line Result # Blue ** Processing line: ~ def frontier_color~ - Inside source: true *** True Line Result def frontier_color ** Processing line: ~ [103, 136, 204]~ - Inside source: true *** True Line Result [103, 136, 204] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Camo Green~ - Inside source: true *** True Line Result # Camo Green ** Processing line: ~ def wall_color~ - Inside source: true *** True Line Result def wall_color ** Processing line: ~ [134, 134, 120]~ - Inside source: true *** True Line Result [134, 134, 120] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Next frontier to be expanded~ - Inside source: true *** True Line Result # Next frontier to be expanded ** Processing line: ~ def highlighter_yellow~ - Inside source: true *** True Line Result def highlighter_yellow ** Processing line: ~ [214, 231, 125]~ - Inside source: true *** True Line Result [214, 231, 125] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The neighbors of the next frontier to be expanded~ - Inside source: true *** True Line Result # The neighbors of the next frontier to be expanded ** Processing line: ~ def highlighter_green~ - Inside source: true *** True Line Result def highlighter_green ** Processing line: ~ [65, 191, 127]~ - Inside source: true *** True Line Result [65, 191, 127] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Button background~ - Inside source: true *** True Line Result # Button background ** Processing line: ~ def gray~ - Inside source: true *** True Line Result def gray ** Processing line: ~ [190, 190, 190]~ - Inside source: true *** True Line Result [190, 190, 190] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Button outline~ - Inside source: true *** True Line Result # Button outline ** Processing line: ~ def black~ - Inside source: true *** True Line Result def black ** Processing line: ~ [0, 0, 0]~ - Inside source: true *** True Line Result [0, 0, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These methods make the code more concise~ - Inside source: true *** True Line Result # These methods make the code more concise ** Processing line: ~ def grid~ - Inside source: true *** True Line Result def grid ** Processing line: ~ state.grid~ - Inside source: true *** True Line Result state.grid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def buttons~ - Inside source: true *** True Line Result def buttons ** Processing line: ~ state.buttons~ - Inside source: true *** True Line Result state.buttons ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def slider~ - Inside source: true *** True Line Result def slider ** Processing line: ~ state.slider~ - Inside source: true *** True Line Result state.slider ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # Pressing r resets the program~ - Inside source: true *** True Line Result # Pressing r resets the program ** Processing line: ~ if args.inputs.keyboard.key_down.r~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.r ** Processing line: ~ args.gtk.reset~ - Inside source: true *** True Line Result args.gtk.reset ** Processing line: ~ reset~ - Inside source: true *** True Line Result reset ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $detailed_breadth_first_search ||= DetailedBreadthFirstSearch.new(args)~ - Inside source: true *** True Line Result $detailed_breadth_first_search ||= DetailedBreadthFirstSearch.new(args) ** Processing line: ~ $detailed_breadth_first_search.args = args~ - Inside source: true *** True Line Result $detailed_breadth_first_search.args = args ** Processing line: ~ $detailed_breadth_first_search.tick~ - Inside source: true *** True Line Result $detailed_breadth_first_search.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset~ - Inside source: true *** True Line Result def reset ** Processing line: ~ $detailed_breadth_first_search = nil~ - Inside source: true *** True Line Result $detailed_breadth_first_search = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Path Finding Algorithms - Breadcrumbs - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Path Finding Algorithms - Breadcrumbs - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/13_path_finding_algorithms/03_breadcrumbs/app/main.rb~ - Inside source: true *** True Line Result # ./samples/13_path_finding_algorithms/03_breadcrumbs/app/main.rb ** Processing line: ~ class Breadcrumbs~ - Inside source: true *** True Line Result class Breadcrumbs ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method is called every frame/tick~ - Inside source: true *** True Line Result # This method is called every frame/tick ** Processing line: ~ # Every tick, the current state of the search is rendered on the screen,~ - Inside source: true *** True Line Result # Every tick, the current state of the search is rendered on the screen, ** Processing line: ~ # User input is processed, and~ - Inside source: true *** True Line Result # User input is processed, and ** Processing line: ~ # The next step in the search is calculated~ - Inside source: true *** True Line Result # The next step in the search is calculated ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ # If the grid has not been searched~ - Inside source: true *** True Line Result # If the grid has not been searched ** Processing line: ~ if search.came_from.empty?~ - Inside source: true *** True Line Result if search.came_from.empty? ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ # Calc Path~ - Inside source: true *** True Line Result # Calc Path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ # Variables to edit the size and appearance of the grid~ - Inside source: true *** True Line Result # Variables to edit the size and appearance of the grid ** Processing line: ~ # Freely customizable to user's liking~ - Inside source: true *** True Line Result # Freely customizable to user's liking ** Processing line: ~ grid.width ||= 30~ - Inside source: true *** True Line Result grid.width ||= 30 ** Processing line: ~ grid.height ||= 15~ - Inside source: true *** True Line Result grid.height ||= 15 ** Processing line: ~ grid.cell_size ||= 40~ - Inside source: true *** True Line Result grid.cell_size ||= 40 ** Processing line: ~ grid.rect ||= [0, 0, grid.width, grid.height]~ - Inside source: true *** True Line Result grid.rect ||= [0, 0, grid.width, grid.height] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The location of the star and walls of the grid~ - Inside source: true *** True Line Result # The location of the star and walls of the grid ** Processing line: ~ # They can be modified to have a different initial grid~ - Inside source: true *** True Line Result # They can be modified to have a different initial grid ** Processing line: ~ # Walls are stored in a hash for quick look up when doing the search~ - Inside source: true *** True Line Result # Walls are stored in a hash for quick look up when doing the search ** Processing line: ~ grid.star ||= [2, 8]~ - Inside source: true *** True Line Result grid.star ||= [2, 8] ** Processing line: ~ grid.target ||= [10, 5]~ - Inside source: true *** True Line Result grid.target ||= [10, 5] ** Processing line: ~ grid.walls ||= {~ - Inside source: true *** True Line Result grid.walls ||= { ** Processing line: ~ [3, 3] => true,~ - Inside source: true *** True Line Result [3, 3] => true, ** Processing line: ~ [3, 4] => true,~ - Inside source: true *** True Line Result [3, 4] => true, ** Processing line: ~ [3, 5] => true,~ - Inside source: true *** True Line Result [3, 5] => true, ** Processing line: ~ [3, 6] => true,~ - Inside source: true *** True Line Result [3, 6] => true, ** Processing line: ~ [3, 7] => true,~ - Inside source: true *** True Line Result [3, 7] => true, ** Processing line: ~ [3, 8] => true,~ - Inside source: true *** True Line Result [3, 8] => true, ** Processing line: ~ [3, 9] => true,~ - Inside source: true *** True Line Result [3, 9] => true, ** Processing line: ~ [3, 10] => true,~ - Inside source: true *** True Line Result [3, 10] => true, ** Processing line: ~ [3, 11] => true,~ - Inside source: true *** True Line Result [3, 11] => true, ** Processing line: ~ [4, 3] => true,~ - Inside source: true *** True Line Result [4, 3] => true, ** Processing line: ~ [4, 4] => true,~ - Inside source: true *** True Line Result [4, 4] => true, ** Processing line: ~ [4, 5] => true,~ - Inside source: true *** True Line Result [4, 5] => true, ** Processing line: ~ [4, 6] => true,~ - Inside source: true *** True Line Result [4, 6] => true, ** Processing line: ~ [4, 7] => true,~ - Inside source: true *** True Line Result [4, 7] => true, ** Processing line: ~ [4, 8] => true,~ - Inside source: true *** True Line Result [4, 8] => true, ** Processing line: ~ [4, 9] => true,~ - Inside source: true *** True Line Result [4, 9] => true, ** Processing line: ~ [4, 10] => true,~ - Inside source: true *** True Line Result [4, 10] => true, ** Processing line: ~ [4, 11] => true,~ - Inside source: true *** True Line Result [4, 11] => true, ** Processing line: ~ [13, 0] => true,~ - Inside source: true *** True Line Result [13, 0] => true, ** Processing line: ~ [13, 1] => true,~ - Inside source: true *** True Line Result [13, 1] => true, ** Processing line: ~ [13, 2] => true,~ - Inside source: true *** True Line Result [13, 2] => true, ** Processing line: ~ [13, 3] => true,~ - Inside source: true *** True Line Result [13, 3] => true, ** Processing line: ~ [13, 4] => true,~ - Inside source: true *** True Line Result [13, 4] => true, ** Processing line: ~ [13, 5] => true,~ - Inside source: true *** True Line Result [13, 5] => true, ** Processing line: ~ [13, 6] => true,~ - Inside source: true *** True Line Result [13, 6] => true, ** Processing line: ~ [13, 7] => true,~ - Inside source: true *** True Line Result [13, 7] => true, ** Processing line: ~ [13, 8] => true,~ - Inside source: true *** True Line Result [13, 8] => true, ** Processing line: ~ [13, 9] => true,~ - Inside source: true *** True Line Result [13, 9] => true, ** Processing line: ~ [13, 10] => true,~ - Inside source: true *** True Line Result [13, 10] => true, ** Processing line: ~ [14, 0] => true,~ - Inside source: true *** True Line Result [14, 0] => true, ** Processing line: ~ [14, 1] => true,~ - Inside source: true *** True Line Result [14, 1] => true, ** Processing line: ~ [14, 2] => true,~ - Inside source: true *** True Line Result [14, 2] => true, ** Processing line: ~ [14, 3] => true,~ - Inside source: true *** True Line Result [14, 3] => true, ** Processing line: ~ [14, 4] => true,~ - Inside source: true *** True Line Result [14, 4] => true, ** Processing line: ~ [14, 5] => true,~ - Inside source: true *** True Line Result [14, 5] => true, ** Processing line: ~ [14, 6] => true,~ - Inside source: true *** True Line Result [14, 6] => true, ** Processing line: ~ [14, 7] => true,~ - Inside source: true *** True Line Result [14, 7] => true, ** Processing line: ~ [14, 8] => true,~ - Inside source: true *** True Line Result [14, 8] => true, ** Processing line: ~ [14, 9] => true,~ - Inside source: true *** True Line Result [14, 9] => true, ** Processing line: ~ [14, 10] => true,~ - Inside source: true *** True Line Result [14, 10] => true, ** Processing line: ~ [21, 8] => true,~ - Inside source: true *** True Line Result [21, 8] => true, ** Processing line: ~ [21, 9] => true,~ - Inside source: true *** True Line Result [21, 9] => true, ** Processing line: ~ [21, 10] => true,~ - Inside source: true *** True Line Result [21, 10] => true, ** Processing line: ~ [21, 11] => true,~ - Inside source: true *** True Line Result [21, 11] => true, ** Processing line: ~ [21, 12] => true,~ - Inside source: true *** True Line Result [21, 12] => true, ** Processing line: ~ [21, 13] => true,~ - Inside source: true *** True Line Result [21, 13] => true, ** Processing line: ~ [21, 14] => true,~ - Inside source: true *** True Line Result [21, 14] => true, ** Processing line: ~ [22, 8] => true,~ - Inside source: true *** True Line Result [22, 8] => true, ** Processing line: ~ [22, 9] => true,~ - Inside source: true *** True Line Result [22, 9] => true, ** Processing line: ~ [22, 10] => true,~ - Inside source: true *** True Line Result [22, 10] => true, ** Processing line: ~ [22, 11] => true,~ - Inside source: true *** True Line Result [22, 11] => true, ** Processing line: ~ [22, 12] => true,~ - Inside source: true *** True Line Result [22, 12] => true, ** Processing line: ~ [22, 13] => true,~ - Inside source: true *** True Line Result [22, 13] => true, ** Processing line: ~ [22, 14] => true,~ - Inside source: true *** True Line Result [22, 14] => true, ** Processing line: ~ [23, 8] => true,~ - Inside source: true *** True Line Result [23, 8] => true, ** Processing line: ~ [23, 9] => true,~ - Inside source: true *** True Line Result [23, 9] => true, ** Processing line: ~ [24, 8] => true,~ - Inside source: true *** True Line Result [24, 8] => true, ** Processing line: ~ [24, 9] => true,~ - Inside source: true *** True Line Result [24, 9] => true, ** Processing line: ~ [25, 8] => true,~ - Inside source: true *** True Line Result [25, 8] => true, ** Processing line: ~ [25, 9] => true,~ - Inside source: true *** True Line Result [25, 9] => true, ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Variables that are used by the breadth first search~ - Inside source: true *** True Line Result # Variables that are used by the breadth first search ** Processing line: ~ # Storing cells that the search has visited, prevents unnecessary steps~ - Inside source: true *** True Line Result # Storing cells that the search has visited, prevents unnecessary steps ** Processing line: ~ # Expanding the frontier of the search in order makes the search expand~ - Inside source: true *** True Line Result # Expanding the frontier of the search in order makes the search expand ** Processing line: ~ # from the center outward~ - Inside source: true *** True Line Result # from the center outward ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The cells from which the search is to expand~ - Inside source: true *** True Line Result # The cells from which the search is to expand ** Processing line: ~ search.frontier ||= []~ - Inside source: true *** True Line Result search.frontier ||= [] ** Processing line: ~ # A hash of where each cell was expanded from~ - Inside source: true *** True Line Result # A hash of where each cell was expanded from ** Processing line: ~ # The key is a cell, and the value is the cell it came from~ - Inside source: true *** True Line Result # The key is a cell, and the value is the cell it came from ** Processing line: ~ search.came_from ||= {}~ - Inside source: true *** True Line Result search.came_from ||= {} ** Processing line: ~ # Cells that are part of the path from the target to the star~ - Inside source: true *** True Line Result # Cells that are part of the path from the target to the star ** Processing line: ~ search.path ||= {}~ - Inside source: true *** True Line Result search.path ||= {} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # What the user is currently editing on the grid~ - Inside source: true *** True Line Result # What the user is currently editing on the grid ** Processing line: ~ # We store this value, because we want to remember the value even when~ - Inside source: true *** True Line Result # We store this value, because we want to remember the value even when ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ - Inside source: true *** True Line Result # the user's cursor is no longer over what they're interacting with, but ** Processing line: ~ # they are still clicking down on the mouse.~ - Inside source: true *** True Line Result # they are still clicking down on the mouse. ** Processing line: ~ state.current_input ||= :none~ - Inside source: true *** True Line Result state.current_input ||= :none ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ # Setup the search to start from the star~ - Inside source: true *** True Line Result # Setup the search to start from the star ** Processing line: ~ search.frontier << grid.star~ - Inside source: true *** True Line Result search.frontier << grid.star ** Processing line: ~ search.came_from[grid.star] = nil~ - Inside source: true *** True Line Result search.came_from[grid.star] = nil ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Until there are no more cells to expand from~ - Inside source: true *** True Line Result # Until there are no more cells to expand from ** Processing line: ~ until search.frontier.empty?~ - Inside source: true *** True Line Result until search.frontier.empty? ** Processing line: ~ # Takes the next frontier cell~ - Inside source: true *** True Line Result # Takes the next frontier cell ** Processing line: ~ new_frontier = search.frontier.shift~ - Inside source: true *** True Line Result new_frontier = search.frontier.shift ** Processing line: ~ # For each of its neighbors~ - Inside source: true *** True Line Result # For each of its neighbors ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ - Inside source: true *** True Line Result adjacent_neighbors(new_frontier).each do |neighbor| ** Processing line: ~ # That have not been visited and are not walls~ - Inside source: true *** True Line Result # That have not been visited and are not walls ** Processing line: ~ unless search.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor)~ - Inside source: true *** True Line Result unless search.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor) ** Processing line: ~ # Add them to the frontier and mark them as visited in the first grid~ - Inside source: true *** True Line Result # Add them to the frontier and mark them as visited in the first grid ** Processing line: ~ # Unless the target has been visited~ - Inside source: true *** True Line Result # Unless the target has been visited ** Processing line: ~ # Add the neighbor to the frontier and remember which cell it came from~ - Inside source: true *** True Line Result # Add the neighbor to the frontier and remember which cell it came from ** Processing line: ~ search.frontier << neighbor~ - Inside source: true *** True Line Result search.frontier << neighbor ** Processing line: ~ search.came_from[neighbor] = new_frontier~ - Inside source: true *** True Line Result search.came_from[neighbor] = new_frontier ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws everything onto the screen~ - Inside source: true *** True Line Result # Draws everything onto the screen ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ render_background~ - Inside source: true *** True Line Result render_background ** Processing line: ~ # render_heat_map~ - Inside source: true *** True Line Result # render_heat_map ** Processing line: ~ render_walls~ - Inside source: true *** True Line Result render_walls ** Processing line: ~ # render_path~ - Inside source: true *** True Line Result # render_path ** Processing line: ~ # render_labels~ - Inside source: true *** True Line Result # render_labels ** Processing line: ~ render_arrows~ - Inside source: true *** True Line Result render_arrows ** Processing line: ~ render_star~ - Inside source: true *** True Line Result render_star ** Processing line: ~ render_target~ - Inside source: true *** True Line Result render_target ** Processing line: ~ unless grid.walls.has_key?(grid.target)~ - Inside source: true *** True Line Result unless grid.walls.has_key?(grid.target) ** Processing line: ~ render_trail~ - Inside source: true *** True Line Result render_trail ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_trail(current_cell=grid.target)~ - Inside source: true *** True Line Result def render_trail(current_cell=grid.target) ** Processing line: ~ return if current_cell == grid.star~ - Inside source: true *** True Line Result return if current_cell == grid.star ** Processing line: ~ parent_cell = search.came_from[current_cell]~ - Inside source: true *** True Line Result parent_cell = search.came_from[current_cell] ** Processing line: ~ if current_cell && parent_cell~ - Inside source: true *** True Line Result if current_cell && parent_cell ** Processing line: ~ outputs.lines << [(current_cell.x + 0.5) * grid.cell_size, (current_cell.y + 0.5) * grid.cell_size,~ - Inside source: true *** True Line Result outputs.lines << [(current_cell.x + 0.5) * grid.cell_size, (current_cell.y + 0.5) * grid.cell_size, ** Processing line: ~ (parent_cell.x + 0.5) * grid.cell_size, (parent_cell.y + 0.5) * grid.cell_size, purple]~ - Inside source: true *** True Line Result (parent_cell.x + 0.5) * grid.cell_size, (parent_cell.y + 0.5) * grid.cell_size, purple] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ render_trail(parent_cell)~ - Inside source: true *** True Line Result render_trail(parent_cell) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_arrows~ - Inside source: true *** True Line Result def render_arrows ** Processing line: ~ search.came_from.each do |child, parent|~ - Inside source: true *** True Line Result search.came_from.each do |child, parent| ** Processing line: ~ if parent && child~ - Inside source: true *** True Line Result if parent && child ** Processing line: ~ arrow_cell = [(child.x + parent.x) / 2, (child.y + parent.y) / 2]~ - Inside source: true *** True Line Result arrow_cell = [(child.x + parent.x) / 2, (child.y + parent.y) / 2] ** Processing line: ~ if parent.x > child.x # If the parent cell is to the right of the child cell~ - Inside source: true *** True Line Result if parent.x > child.x # If the parent cell is to the right of the child cell ** Processing line: ~ outputs.sprites << [scale_up(arrow_cell), 'arrow.png', 0] # Point the arrow to the right~ - Inside source: true *** True Line Result outputs.sprites << [scale_up(arrow_cell), 'arrow.png', 0] # Point the arrow to the right ** Processing line: ~ elsif parent.x < child.x # If the parent cell is to the right of the child cell~ - Inside source: true *** True Line Result elsif parent.x < child.x # If the parent cell is to the right of the child cell ** Processing line: ~ outputs.sprites << [scale_up(arrow_cell), 'arrow.png', 180] # Point the arrow to the right~ - Inside source: true *** True Line Result outputs.sprites << [scale_up(arrow_cell), 'arrow.png', 180] # Point the arrow to the right ** Processing line: ~ elsif parent.y > child.y # If the parent cell is to the right of the child cell~ - Inside source: true *** True Line Result elsif parent.y > child.y # If the parent cell is to the right of the child cell ** Processing line: ~ outputs.sprites << [scale_up(arrow_cell), 'arrow.png', 90] # Point the arrow to the right~ - Inside source: true *** True Line Result outputs.sprites << [scale_up(arrow_cell), 'arrow.png', 90] # Point the arrow to the right ** Processing line: ~ elsif parent.y < child.y # If the parent cell is to the right of the child cell~ - Inside source: true *** True Line Result elsif parent.y < child.y # If the parent cell is to the right of the child cell ** Processing line: ~ outputs.sprites << [scale_up(arrow_cell), 'arrow.png', 270] # Point the arrow to the right~ - Inside source: true *** True Line Result outputs.sprites << [scale_up(arrow_cell), 'arrow.png', 270] # Point the arrow to the right ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The methods below subdivide the task of drawing everything to the screen~ - Inside source: true *** True Line Result # The methods below subdivide the task of drawing everything to the screen ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws what the grid looks like with nothing on it~ - Inside source: true *** True Line Result # Draws what the grid looks like with nothing on it ** Processing line: ~ def render_background~ - Inside source: true *** True Line Result def render_background ** Processing line: ~ render_unvisited~ - Inside source: true *** True Line Result render_unvisited ** Processing line: ~ render_grid_lines~ - Inside source: true *** True Line Result render_grid_lines ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws both grids~ - Inside source: true *** True Line Result # Draws both grids ** Processing line: ~ def render_unvisited~ - Inside source: true *** True Line Result def render_unvisited ** Processing line: ~ outputs.solids << [scale_up(grid.rect), unvisited_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(grid.rect), unvisited_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws grid lines to show the division of the grid into cells~ - Inside source: true *** True Line Result # Draws grid lines to show the division of the grid into cells ** Processing line: ~ def render_grid_lines~ - Inside source: true *** True Line Result def render_grid_lines ** Processing line: ~ for x in 0..grid.width~ - Inside source: true *** True Line Result for x in 0..grid.width ** Processing line: ~ outputs.lines << vertical_line(x)~ - Inside source: true *** True Line Result outputs.lines << vertical_line(x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ for y in 0..grid.height~ - Inside source: true *** True Line Result for y in 0..grid.height ** Processing line: ~ outputs.lines << horizontal_line(y)~ - Inside source: true *** True Line Result outputs.lines << horizontal_line(y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easy way to draw vertical lines given an index~ - Inside source: true *** True Line Result # Easy way to draw vertical lines given an index ** Processing line: ~ def vertical_line column~ - Inside source: true *** True Line Result def vertical_line column ** Processing line: ~ scale_up([column, 0, column, grid.height])~ - Inside source: true *** True Line Result scale_up([column, 0, column, grid.height]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easy way to draw horizontal lines given an index~ - Inside source: true *** True Line Result # Easy way to draw horizontal lines given an index ** Processing line: ~ def horizontal_line row~ - Inside source: true *** True Line Result def horizontal_line row ** Processing line: ~ scale_up([0, row, grid.width, row])~ - Inside source: true *** True Line Result scale_up([0, row, grid.width, row]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws the walls on both grids~ - Inside source: true *** True Line Result # Draws the walls on both grids ** Processing line: ~ def render_walls~ - Inside source: true *** True Line Result def render_walls ** Processing line: ~ grid.walls.each_key do |wall|~ - Inside source: true *** True Line Result grid.walls.each_key do |wall| ** Processing line: ~ outputs.solids << [scale_up(wall), wall_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(wall), wall_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the star on both grids~ - Inside source: true *** True Line Result # Renders the star on both grids ** Processing line: ~ def render_star~ - Inside source: true *** True Line Result def render_star ** Processing line: ~ outputs.sprites << [scale_up(grid.star), 'star.png']~ - Inside source: true *** True Line Result outputs.sprites << [scale_up(grid.star), 'star.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the target on both grids~ - Inside source: true *** True Line Result # Renders the target on both grids ** Processing line: ~ def render_target~ - Inside source: true *** True Line Result def render_target ** Processing line: ~ outputs.sprites << [scale_up(grid.target), 'target.png']~ - Inside source: true *** True Line Result outputs.sprites << [scale_up(grid.target), 'target.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Labels the grids~ - Inside source: true *** True Line Result # Labels the grids ** Processing line: ~ def render_labels~ - Inside source: true *** True Line Result def render_labels ** Processing line: ~ outputs.labels << [200, 625, "Without early exit"]~ - Inside source: true *** True Line Result outputs.labels << [200, 625, "Without early exit"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the path based off of the search.path hash~ - Inside source: true *** True Line Result # Renders the path based off of the search.path hash ** Processing line: ~ def render_path~ - Inside source: true *** True Line Result def render_path ** Processing line: ~ # If the star and target are disconnected there will only be one path~ - Inside source: true *** True Line Result # If the star and target are disconnected there will only be one path ** Processing line: ~ # The path should not render in that case~ - Inside source: true *** True Line Result # The path should not render in that case ** Processing line: ~ unless search.path.size == 1~ - Inside source: true *** True Line Result unless search.path.size == 1 ** Processing line: ~ search.path.each_key do | cell |~ - Inside source: true *** True Line Result search.path.each_key do | cell | ** Processing line: ~ # Renders path on both grids~ - Inside source: true *** True Line Result # Renders path on both grids ** Processing line: ~ outputs.solids << [scale_up(cell), path_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(cell), path_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the path from the target to the star after the search is over~ - Inside source: true *** True Line Result # Calculates the path from the target to the star after the search is over ** Processing line: ~ # Relies on the came_from hash~ - Inside source: true *** True Line Result # Relies on the came_from hash ** Processing line: ~ # Fills the search.path hash, which is later rendered on screen~ - Inside source: true *** True Line Result # Fills the search.path hash, which is later rendered on screen ** Processing line: ~ def calc_path~ - Inside source: true *** True Line Result def calc_path ** Processing line: ~ endpoint = grid.target~ - Inside source: true *** True Line Result endpoint = grid.target ** Processing line: ~ while endpoint~ - Inside source: true *** True Line Result while endpoint ** Processing line: ~ search.path[endpoint] = true~ - Inside source: true *** True Line Result search.path[endpoint] = true ** Processing line: ~ endpoint = search.came_from[endpoint]~ - Inside source: true *** True Line Result endpoint = search.came_from[endpoint] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # In code, the cells are represented as 1x1 rectangles~ - Inside source: true *** True Line Result # In code, the cells are represented as 1x1 rectangles ** Processing line: ~ # When drawn, the cells are larger than 1x1 rectangles~ - Inside source: true *** True Line Result # When drawn, the cells are larger than 1x1 rectangles ** Processing line: ~ # This method is used to scale up cells, and lines~ - Inside source: true *** True Line Result # This method is used to scale up cells, and lines ** Processing line: ~ # Objects are scaled up according to the grid.cell_size variable~ - Inside source: true *** True Line Result # Objects are scaled up according to the grid.cell_size variable ** Processing line: ~ # This allows for easy customization of the visual scale of the grid~ - Inside source: true *** True Line Result # This allows for easy customization of the visual scale of the grid ** Processing line: ~ def scale_up(cell)~ - Inside source: true *** True Line Result def scale_up(cell) ** Processing line: ~ # Prevents the original value of cell from being edited~ - Inside source: true *** True Line Result # Prevents the original value of cell from being edited ** Processing line: ~ cell = cell.clone~ - Inside source: true *** True Line Result cell = cell.clone ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If cell is just an x and y coordinate~ - Inside source: true *** True Line Result # If cell is just an x and y coordinate ** Processing line: ~ if cell.size == 2~ - Inside source: true *** True Line Result if cell.size == 2 ** Processing line: ~ # Add a width and height of 1~ - Inside source: true *** True Line Result # Add a width and height of 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Scale all the values up~ - Inside source: true *** True Line Result # Scale all the values up ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ - Inside source: true *** True Line Result cell.map! { |value| value * grid.cell_size } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the scaled up cell~ - Inside source: true *** True Line Result # Returns the scaled up cell ** Processing line: ~ cell~ - Inside source: true *** True Line Result cell ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method processes user input every tick~ - Inside source: true *** True Line Result # This method processes user input every tick ** Processing line: ~ # Any method with "1" is related to the first grid~ - Inside source: true *** True Line Result # Any method with "1" is related to the first grid ** Processing line: ~ # Any method with "2" is related to the second grid~ - Inside source: true *** True Line Result # Any method with "2" is related to the second grid ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ # The program has to remember that the user is dragging an object~ - Inside source: true *** True Line Result # The program has to remember that the user is dragging an object ** Processing line: ~ # even when the mouse is no longer over that object~ - Inside source: true *** True Line Result # even when the mouse is no longer over that object ** Processing line: ~ # So detecting input and processing input is separate~ - Inside source: true *** True Line Result # So detecting input and processing input is separate ** Processing line: ~ # detect_input~ - Inside source: true *** True Line Result # detect_input ** Processing line: ~ # process_input~ - Inside source: true *** True Line Result # process_input ** Processing line: ~ if inputs.mouse.up~ - Inside source: true *** True Line Result if inputs.mouse.up ** Processing line: ~ state.current_input = :none~ - Inside source: true *** True Line Result state.current_input = :none ** Processing line: ~ elsif star_clicked?~ - Inside source: true *** True Line Result elsif star_clicked? ** Processing line: ~ state.current_input = :star~ - Inside source: true *** True Line Result state.current_input = :star ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if mouse_inside_grid?~ - Inside source: true *** True Line Result if mouse_inside_grid? ** Processing line: ~ unless grid.target == cell_closest_to_mouse~ - Inside source: true *** True Line Result unless grid.target == cell_closest_to_mouse ** Processing line: ~ grid.target = cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.target = cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if state.current_input == :star~ - Inside source: true *** True Line Result if state.current_input == :star ** Processing line: ~ unless grid.star == cell_closest_to_mouse~ - Inside source: true *** True Line Result unless grid.star == cell_closest_to_mouse ** Processing line: ~ grid.star = cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.star = cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Determines what the user is editing and stores the value~ - Inside source: true *** True Line Result # Determines what the user is editing and stores the value ** Processing line: ~ # Storing the value allows the user to continue the same edit as long as the~ - Inside source: true *** True Line Result # Storing the value allows the user to continue the same edit as long as the ** Processing line: ~ # mouse left click is held~ - Inside source: true *** True Line Result # mouse left click is held ** Processing line: ~ def detect_input~ - Inside source: true *** True Line Result def detect_input ** Processing line: ~ # When the mouse is up, nothing is being edited~ - Inside source: true *** True Line Result # When the mouse is up, nothing is being edited ** Processing line: ~ if inputs.mouse.up~ - Inside source: true *** True Line Result if inputs.mouse.up ** Processing line: ~ state.current_input = :none~ - Inside source: true *** True Line Result state.current_input = :none ** Processing line: ~ # When the star in the no second grid is clicked~ - Inside source: true *** True Line Result # When the star in the no second grid is clicked ** Processing line: ~ elsif star_clicked?~ - Inside source: true *** True Line Result elsif star_clicked? ** Processing line: ~ state.current_input = :star~ - Inside source: true *** True Line Result state.current_input = :star ** Processing line: ~ # When the target in the no second grid is clicked~ - Inside source: true *** True Line Result # When the target in the no second grid is clicked ** Processing line: ~ elsif target_clicked?~ - Inside source: true *** True Line Result elsif target_clicked? ** Processing line: ~ state.current_input = :target~ - Inside source: true *** True Line Result state.current_input = :target ** Processing line: ~ # When a wall in the first grid is clicked~ - Inside source: true *** True Line Result # When a wall in the first grid is clicked ** Processing line: ~ elsif wall_clicked?~ - Inside source: true *** True Line Result elsif wall_clicked? ** Processing line: ~ state.current_input = :remove_wall~ - Inside source: true *** True Line Result state.current_input = :remove_wall ** Processing line: ~ # When the first grid is clicked~ - Inside source: true *** True Line Result # When the first grid is clicked ** Processing line: ~ elsif grid_clicked?~ - Inside source: true *** True Line Result elsif grid_clicked? ** Processing line: ~ state.current_input = :add_wall~ - Inside source: true *** True Line Result state.current_input = :add_wall ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Processes click and drag based on what the user is currently dragging~ - Inside source: true *** True Line Result # Processes click and drag based on what the user is currently dragging ** Processing line: ~ def process_input~ - Inside source: true *** True Line Result def process_input ** Processing line: ~ if state.current_input == :star~ - Inside source: true *** True Line Result if state.current_input == :star ** Processing line: ~ input_star~ - Inside source: true *** True Line Result input_star ** Processing line: ~ elsif state.current_input == :target~ - Inside source: true *** True Line Result elsif state.current_input == :target ** Processing line: ~ input_target~ - Inside source: true *** True Line Result input_target ** Processing line: ~ elsif state.current_input == :remove_wall~ - Inside source: true *** True Line Result elsif state.current_input == :remove_wall ** Processing line: ~ input_remove_wall~ - Inside source: true *** True Line Result input_remove_wall ** Processing line: ~ elsif state.current_input == :add_wall~ - Inside source: true *** True Line Result elsif state.current_input == :add_wall ** Processing line: ~ input_add_wall~ - Inside source: true *** True Line Result input_add_wall ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the star to the cell closest to the mouse in the first grid~ - Inside source: true *** True Line Result # Moves the star to the cell closest to the mouse in the first grid ** Processing line: ~ # Only resets the search if the star changes position~ - Inside source: true *** True Line Result # Only resets the search if the star changes position ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ - Inside source: true *** True Line Result # Called whenever the user is editing the star (puts mouse down on star) ** Processing line: ~ def input_star~ - Inside source: true *** True Line Result def input_star ** Processing line: ~ old_star = grid.star.clone~ - Inside source: true *** True Line Result old_star = grid.star.clone ** Processing line: ~ grid.star = cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.star = cell_closest_to_mouse ** Processing line: ~ unless old_star == grid.star~ - Inside source: true *** True Line Result unless old_star == grid.star ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the target to the grid closest to the mouse in the first grid~ - Inside source: true *** True Line Result # Moves the target to the grid closest to the mouse in the first grid ** Processing line: ~ # Only reset_searchs the search if the target changes position~ - Inside source: true *** True Line Result # Only reset_searchs the search if the target changes position ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ - Inside source: true *** True Line Result # Called whenever the user is editing the target (puts mouse down on target) ** Processing line: ~ def input_target~ - Inside source: true *** True Line Result def input_target ** Processing line: ~ old_target = grid.target.clone~ - Inside source: true *** True Line Result old_target = grid.target.clone ** Processing line: ~ grid.target = cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.target = cell_closest_to_mouse ** Processing line: ~ unless old_target == grid.target~ - Inside source: true *** True Line Result unless old_target == grid.target ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Removes walls in the first grid that are under the cursor~ - Inside source: true *** True Line Result # Removes walls in the first grid that are under the cursor ** Processing line: ~ def input_remove_wall~ - Inside source: true *** True Line Result def input_remove_wall ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ - Inside source: true *** True Line Result # The mouse needs to be inside the grid, because we only want to remove walls ** Processing line: ~ # the cursor is directly over~ - Inside source: true *** True Line Result # the cursor is directly over ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ - Inside source: true *** True Line Result # Recalculations should only occur when a wall is actually deleted ** Processing line: ~ if mouse_inside_grid?~ - Inside source: true *** True Line Result if mouse_inside_grid? ** Processing line: ~ if grid.walls.has_key?(cell_closest_to_mouse)~ - Inside source: true *** True Line Result if grid.walls.has_key?(cell_closest_to_mouse) ** Processing line: ~ grid.walls.delete(cell_closest_to_mouse)~ - Inside source: true *** True Line Result grid.walls.delete(cell_closest_to_mouse) ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds a wall in the first grid in the cell the mouse is over~ - Inside source: true *** True Line Result # Adds a wall in the first grid in the cell the mouse is over ** Processing line: ~ def input_add_wall~ - Inside source: true *** True Line Result def input_add_wall ** Processing line: ~ if mouse_inside_grid?~ - Inside source: true *** True Line Result if mouse_inside_grid? ** Processing line: ~ unless grid.walls.has_key?(cell_closest_to_mouse)~ - Inside source: true *** True Line Result unless grid.walls.has_key?(cell_closest_to_mouse) ** Processing line: ~ grid.walls[cell_closest_to_mouse] = true~ - Inside source: true *** True Line Result grid.walls[cell_closest_to_mouse] = true ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Whenever the user edits the grid,~ - Inside source: true *** True Line Result # Whenever the user edits the grid, ** Processing line: ~ # The search has to be reset_searchd upto the current step~ - Inside source: true *** True Line Result # The search has to be reset_searchd upto the current step ** Processing line: ~ # with the current grid as the initial state of the grid~ - Inside source: true *** True Line Result # with the current grid as the initial state of the grid ** Processing line: ~ def reset_search~ - Inside source: true *** True Line Result def reset_search ** Processing line: ~ # Reset_Searchs the search~ - Inside source: true *** True Line Result # Reset_Searchs the search ** Processing line: ~ search.frontier = []~ - Inside source: true *** True Line Result search.frontier = [] ** Processing line: ~ search.came_from = {}~ - Inside source: true *** True Line Result search.came_from = {} ** Processing line: ~ search.path = {}~ - Inside source: true *** True Line Result search.path = {} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a list of adjacent cells~ - Inside source: true *** True Line Result # Returns a list of adjacent cells ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ - Inside source: true *** True Line Result # Used to determine what the next cells to be added to the frontier are ** Processing line: ~ def adjacent_neighbors(cell)~ - Inside source: true *** True Line Result def adjacent_neighbors(cell) ** Processing line: ~ neighbors = []~ - Inside source: true *** True Line Result neighbors = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Gets all the valid neighbors into the array~ - Inside source: true *** True Line Result # Gets all the valid neighbors into the array ** Processing line: ~ # From southern neighbor, clockwise~ - Inside source: true *** True Line Result # From southern neighbor, clockwise ** Processing line: ~ neighbors << [cell.x, cell.y - 1] unless cell.y == 0~ - Inside source: true *** True Line Result neighbors << [cell.x, cell.y - 1] unless cell.y == 0 ** Processing line: ~ neighbors << [cell.x - 1, cell.y] unless cell.x == 0~ - Inside source: true *** True Line Result neighbors << [cell.x - 1, cell.y] unless cell.x == 0 ** Processing line: ~ neighbors << [cell.x, cell.y + 1] unless cell.y == grid.height - 1~ - Inside source: true *** True Line Result neighbors << [cell.x, cell.y + 1] unless cell.y == grid.height - 1 ** Processing line: ~ neighbors << [cell.x + 1, cell.y] unless cell.x == grid.width - 1~ - Inside source: true *** True Line Result neighbors << [cell.x + 1, cell.y] unless cell.x == grid.width - 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sorts the neighbors so the rendered path is a zigzag path~ - Inside source: true *** True Line Result # Sorts the neighbors so the rendered path is a zigzag path ** Processing line: ~ # Cells in a diagonal direction are given priority~ - Inside source: true *** True Line Result # Cells in a diagonal direction are given priority ** Processing line: ~ # Comment this line to see the difference~ - Inside source: true *** True Line Result # Comment this line to see the difference ** Processing line: ~ neighbors = neighbors.sort_by { |neighbor_x, neighbor_y| proximity_to_star(neighbor_x, neighbor_y) }~ - Inside source: true *** True Line Result neighbors = neighbors.sort_by { |neighbor_x, neighbor_y| proximity_to_star(neighbor_x, neighbor_y) } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ neighbors~ - Inside source: true *** True Line Result neighbors ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds the vertical and horizontal distance of a cell from the star~ - Inside source: true *** True Line Result # Finds the vertical and horizontal distance of a cell from the star ** Processing line: ~ # and returns the larger value~ - Inside source: true *** True Line Result # and returns the larger value ** Processing line: ~ # This method is used to have a zigzag pattern in the rendered path~ - Inside source: true *** True Line Result # This method is used to have a zigzag pattern in the rendered path ** Processing line: ~ # A cell that is [5, 5] from the star,~ - Inside source: true *** True Line Result # A cell that is [5, 5] from the star, ** Processing line: ~ # is explored before over a cell that is [0, 7] away.~ - Inside source: true *** True Line Result # is explored before over a cell that is [0, 7] away. ** Processing line: ~ # So, if possible, the search tries to go diagonal (zigzag) first~ - Inside source: true *** True Line Result # So, if possible, the search tries to go diagonal (zigzag) first ** Processing line: ~ def proximity_to_star(x, y)~ - Inside source: true *** True Line Result def proximity_to_star(x, y) ** Processing line: ~ distance_x = (grid.star.x - x).abs~ - Inside source: true *** True Line Result distance_x = (grid.star.x - x).abs ** Processing line: ~ distance_y = (grid.star.y - y).abs~ - Inside source: true *** True Line Result distance_y = (grid.star.y - y).abs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if distance_x > distance_y~ - Inside source: true *** True Line Result if distance_x > distance_y ** Processing line: ~ return distance_x~ - Inside source: true *** True Line Result return distance_x ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return distance_y~ - Inside source: true *** True Line Result return distance_y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ - Inside source: true *** True Line Result # When the user grabs the star and puts their cursor to the far right ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ - Inside source: true *** True Line Result # and moves up and down, the star is supposed to move along the grid as well ** Processing line: ~ # Finding the cell closest to the mouse helps with this~ - Inside source: true *** True Line Result # Finding the cell closest to the mouse helps with this ** Processing line: ~ def cell_closest_to_mouse~ - Inside source: true *** True Line Result def cell_closest_to_mouse ** Processing line: ~ # Closest cell to the mouse in the first grid~ - Inside source: true *** True Line Result # Closest cell to the mouse in the first grid ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ - Inside source: true *** True Line Result x = (inputs.mouse.point.x / grid.cell_size).to_i ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ - Inside source: true *** True Line Result y = (inputs.mouse.point.y / grid.cell_size).to_i ** Processing line: ~ # Bound x and y to the grid~ - Inside source: true *** True Line Result # Bound x and y to the grid ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ - Inside source: true *** True Line Result x = grid.width - 1 if x > grid.width - 1 ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ - Inside source: true *** True Line Result y = grid.height - 1 if y > grid.height - 1 ** Processing line: ~ # Return closest cell~ - Inside source: true *** True Line Result # Return closest cell ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the star from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the star from the first grid ** Processing line: ~ def star_clicked?~ - Inside source: true *** True Line Result def star_clicked? ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(grid.star))~ - Inside source: true *** True Line Result inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(grid.star)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the target from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the target from the first grid ** Processing line: ~ def target_clicked?~ - Inside source: true *** True Line Result def target_clicked? ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(grid.target))~ - Inside source: true *** True Line Result inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(grid.target)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be adding walls from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be adding walls from the first grid ** Processing line: ~ def grid_clicked?~ - Inside source: true *** True Line Result def grid_clicked? ** Processing line: ~ inputs.mouse.down && mouse_inside_grid?~ - Inside source: true *** True Line Result inputs.mouse.down && mouse_inside_grid? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns whether the mouse is inside of the first grid~ - Inside source: true *** True Line Result # Returns whether the mouse is inside of the first grid ** Processing line: ~ # Part of the condition that checks whether the user is adding a wall~ - Inside source: true *** True Line Result # Part of the condition that checks whether the user is adding a wall ** Processing line: ~ def mouse_inside_grid?~ - Inside source: true *** True Line Result def mouse_inside_grid? ** Processing line: ~ inputs.mouse.point.inside_rect?(scale_up(grid.rect))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(scale_up(grid.rect)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These methods provide handy aliases to colors~ - Inside source: true *** True Line Result # These methods provide handy aliases to colors ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Light brown~ - Inside source: true *** True Line Result # Light brown ** Processing line: ~ def unvisited_color~ - Inside source: true *** True Line Result def unvisited_color ** Processing line: ~ [221, 212, 213]~ - Inside source: true *** True Line Result [221, 212, 213] ** Processing line: ~ # [255, 255, 255]~ - Inside source: true *** True Line Result # [255, 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Camo Green~ - Inside source: true *** True Line Result # Camo Green ** Processing line: ~ def wall_color~ - Inside source: true *** True Line Result def wall_color ** Processing line: ~ [134, 134, 120]~ - Inside source: true *** True Line Result [134, 134, 120] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Pastel White~ - Inside source: true *** True Line Result # Pastel White ** Processing line: ~ def path_color~ - Inside source: true *** True Line Result def path_color ** Processing line: ~ [231, 230, 228]~ - Inside source: true *** True Line Result [231, 230, 228] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def red~ - Inside source: true *** True Line Result def red ** Processing line: ~ [255, 0, 0]~ - Inside source: true *** True Line Result [255, 0, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def purple~ - Inside source: true *** True Line Result def purple ** Processing line: ~ [149, 64, 191]~ - Inside source: true *** True Line Result [149, 64, 191] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Makes code more concise~ - Inside source: true *** True Line Result # Makes code more concise ** Processing line: ~ def grid~ - Inside source: true *** True Line Result def grid ** Processing line: ~ state.grid~ - Inside source: true *** True Line Result state.grid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def search~ - Inside source: true *** True Line Result def search ** Processing line: ~ state.search~ - Inside source: true *** True Line Result state.search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Method that is called by DragonRuby periodically~ - Inside source: true *** True Line Result # Method that is called by DragonRuby periodically ** Processing line: ~ # Used for updating animations and calculations~ - Inside source: true *** True Line Result # Used for updating animations and calculations ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Pressing r will reset the application~ - Inside source: true *** True Line Result # Pressing r will reset the application ** Processing line: ~ if args.inputs.keyboard.key_down.r~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.r ** Processing line: ~ args.gtk.reset~ - Inside source: true *** True Line Result args.gtk.reset ** Processing line: ~ reset~ - Inside source: true *** True Line Result reset ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Every tick, new args are passed, and the Breadth First Search tick is called~ - Inside source: true *** True Line Result # Every tick, new args are passed, and the Breadth First Search tick is called ** Processing line: ~ $breadcrumbs ||= Breadcrumbs.new~ - Inside source: true *** True Line Result $breadcrumbs ||= Breadcrumbs.new ** Processing line: ~ $breadcrumbs.args = args~ - Inside source: true *** True Line Result $breadcrumbs.args = args ** Processing line: ~ $breadcrumbs.tick~ - Inside source: true *** True Line Result $breadcrumbs.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset~ - Inside source: true *** True Line Result def reset ** Processing line: ~ $breadcrumbs = nil~ - Inside source: true *** True Line Result $breadcrumbs = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # # Representation of how far away visited cells are from the star~ - Inside source: true *** True Line Result # # Representation of how far away visited cells are from the star ** Processing line: ~ # # Replaces the render_visited method~ - Inside source: true *** True Line Result # # Replaces the render_visited method ** Processing line: ~ # # Visually demonstrates the effectiveness of early exit for pathfinding~ - Inside source: true *** True Line Result # # Visually demonstrates the effectiveness of early exit for pathfinding ** Processing line: ~ # def render_heat_map~ - Inside source: true *** True Line Result # def render_heat_map ** Processing line: ~ # # THIS CODE NEEDS SOME FIXING DUE TO REFACTORING~ - Inside source: true *** True Line Result # # THIS CODE NEEDS SOME FIXING DUE TO REFACTORING ** Processing line: ~ # search.came_from.each_key do | cell |~ - Inside source: true *** True Line Result # search.came_from.each_key do | cell | ** Processing line: ~ # distance = (grid.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs~ - Inside source: true *** True Line Result # distance = (grid.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs ** Processing line: ~ # max_distance = grid.width + grid.height~ - Inside source: true *** True Line Result # max_distance = grid.width + grid.height ** Processing line: ~ # alpha = 255.to_i * distance.to_i / max_distance.to_i~ - Inside source: true *** True Line Result # alpha = 255.to_i * distance.to_i / max_distance.to_i ** Processing line: ~ # outputs.solids << [scale_up(visited_cell), red, alpha]~ - Inside source: true *** True Line Result # outputs.solids << [scale_up(visited_cell), red, alpha] ** Processing line: ~ # # outputs.solids << [early_exit_scale_up(visited_cell), red, alpha]~ - Inside source: true *** True Line Result # # outputs.solids << [early_exit_scale_up(visited_cell), red, alpha] ** Processing line: ~ # end~ - Inside source: true *** True Line Result # end ** Processing line: ~ # end~ - Inside source: true *** True Line Result # end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Path Finding Algorithms - Early Exit - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Path Finding Algorithms - Early Exit - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/13_path_finding_algorithms/04_early_exit/app/main.rb~ - Inside source: true *** True Line Result # ./samples/13_path_finding_algorithms/04_early_exit/app/main.rb ** Processing line: ~ # Comparison of a breadth first search with and without early exit~ - Inside source: true *** True Line Result # Comparison of a breadth first search with and without early exit ** Processing line: ~ # Inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html~ - Inside source: true *** True Line Result # Inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Demonstrates the exploration difference caused by early exit~ - Inside source: true *** True Line Result # Demonstrates the exploration difference caused by early exit ** Processing line: ~ # Also demonstrates how breadth first search is used for path generation~ - Inside source: true *** True Line Result # Also demonstrates how breadth first search is used for path generation ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The left grid is a breadth first search without early exit~ - Inside source: true *** True Line Result # The left grid is a breadth first search without early exit ** Processing line: ~ # The right grid is a breadth first search with early exit~ - Inside source: true *** True Line Result # The right grid is a breadth first search with early exit ** Processing line: ~ # The red squares represent how far the search expanded~ - Inside source: true *** True Line Result # The red squares represent how far the search expanded ** Processing line: ~ # The darker the red, the farther the search proceeded~ - Inside source: true *** True Line Result # The darker the red, the farther the search proceeded ** Processing line: ~ # Comparison of the heat map reveals how much searching can be saved by early exit~ - Inside source: true *** True Line Result # Comparison of the heat map reveals how much searching can be saved by early exit ** Processing line: ~ # The white path shows path generation via breadth first search~ - Inside source: true *** True Line Result # The white path shows path generation via breadth first search ** Processing line: ~ class EarlyExitBreadthFirstSearch~ - Inside source: true *** True Line Result class EarlyExitBreadthFirstSearch ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method is called every frame/tick~ - Inside source: true *** True Line Result # This method is called every frame/tick ** Processing line: ~ # Every tick, the current state of the search is rendered on the screen,~ - Inside source: true *** True Line Result # Every tick, the current state of the search is rendered on the screen, ** Processing line: ~ # User input is processed, and~ - Inside source: true *** True Line Result # User input is processed, and ** Processing line: ~ # The next step in the search is calculated~ - Inside source: true *** True Line Result # The next step in the search is calculated ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ # If the grid has not been searched~ - Inside source: true *** True Line Result # If the grid has not been searched ** Processing line: ~ if state.visited.empty?~ - Inside source: true *** True Line Result if state.visited.empty? ** Processing line: ~ # Complete the search~ - Inside source: true *** True Line Result # Complete the search ** Processing line: ~ state.max_steps.times { step }~ - Inside source: true *** True Line Result state.max_steps.times { step } ** Processing line: ~ # And calculate the path~ - Inside source: true *** True Line Result # And calculate the path ** Processing line: ~ calc_path~ - Inside source: true *** True Line Result calc_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ # Variables to edit the size and appearance of the grid~ - Inside source: true *** True Line Result # Variables to edit the size and appearance of the grid ** Processing line: ~ # Freely customizable to user's liking~ - Inside source: true *** True Line Result # Freely customizable to user's liking ** Processing line: ~ grid.width ||= 15~ - Inside source: true *** True Line Result grid.width ||= 15 ** Processing line: ~ grid.height ||= 15~ - Inside source: true *** True Line Result grid.height ||= 15 ** Processing line: ~ grid.cell_size ||= 40~ - Inside source: true *** True Line Result grid.cell_size ||= 40 ** Processing line: ~ grid.rect ||= [0, 0, grid.width, grid.height]~ - Inside source: true *** True Line Result grid.rect ||= [0, 0, grid.width, grid.height] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # At some step the animation will end,~ - Inside source: true *** True Line Result # At some step the animation will end, ** Processing line: ~ # and further steps won't change anything (the whole grid.widthill be explored)~ - Inside source: true *** True Line Result # and further steps won't change anything (the whole grid.widthill be explored) ** Processing line: ~ # This step is roughly the grid's width * height~ - Inside source: true *** True Line Result # This step is roughly the grid's width * height ** Processing line: ~ # When anim_steps equals max_steps no more calculations will occur~ - Inside source: true *** True Line Result # When anim_steps equals max_steps no more calculations will occur ** Processing line: ~ # and the slider will be at the end~ - Inside source: true *** True Line Result # and the slider will be at the end ** Processing line: ~ state.max_steps ||= args.state.grid.width * args.state.grid.height~ - Inside source: true *** True Line Result state.max_steps ||= args.state.grid.width * args.state.grid.height ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The location of the star and walls of the grid~ - Inside source: true *** True Line Result # The location of the star and walls of the grid ** Processing line: ~ # They can be modified to have a different initial grid~ - Inside source: true *** True Line Result # They can be modified to have a different initial grid ** Processing line: ~ # Walls are stored in a hash for quick look up when doing the search~ - Inside source: true *** True Line Result # Walls are stored in a hash for quick look up when doing the search ** Processing line: ~ state.star ||= [2, 8]~ - Inside source: true *** True Line Result state.star ||= [2, 8] ** Processing line: ~ state.target ||= [10, 5]~ - Inside source: true *** True Line Result state.target ||= [10, 5] ** Processing line: ~ state.walls ||= {}~ - Inside source: true *** True Line Result state.walls ||= {} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Variables that are used by the breadth first search~ - Inside source: true *** True Line Result # Variables that are used by the breadth first search ** Processing line: ~ # Storing cells that the search has visited, prevents unnecessary steps~ - Inside source: true *** True Line Result # Storing cells that the search has visited, prevents unnecessary steps ** Processing line: ~ # Expanding the frontier of the search in order makes the search expand~ - Inside source: true *** True Line Result # Expanding the frontier of the search in order makes the search expand ** Processing line: ~ # from the center outward~ - Inside source: true *** True Line Result # from the center outward ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Visited cells in the first grid~ - Inside source: true *** True Line Result # Visited cells in the first grid ** Processing line: ~ state.visited ||= {}~ - Inside source: true *** True Line Result state.visited ||= {} ** Processing line: ~ # Visited cells in the second grid~ - Inside source: true *** True Line Result # Visited cells in the second grid ** Processing line: ~ state.early_exit_visited ||= {}~ - Inside source: true *** True Line Result state.early_exit_visited ||= {} ** Processing line: ~ # The cells from which the search is to expand~ - Inside source: true *** True Line Result # The cells from which the search is to expand ** Processing line: ~ state.frontier ||= []~ - Inside source: true *** True Line Result state.frontier ||= [] ** Processing line: ~ # A hash of where each cell was expanded from~ - Inside source: true *** True Line Result # A hash of where each cell was expanded from ** Processing line: ~ # The key is a cell, and the value is the cell it came from~ - Inside source: true *** True Line Result # The key is a cell, and the value is the cell it came from ** Processing line: ~ state.came_from ||= {}~ - Inside source: true *** True Line Result state.came_from ||= {} ** Processing line: ~ # Cells that are part of the path from the target to the star~ - Inside source: true *** True Line Result # Cells that are part of the path from the target to the star ** Processing line: ~ state.path ||= {}~ - Inside source: true *** True Line Result state.path ||= {} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # What the user is currently editing on the grid~ - Inside source: true *** True Line Result # What the user is currently editing on the grid ** Processing line: ~ # We store this value, because we want to remember the value even when~ - Inside source: true *** True Line Result # We store this value, because we want to remember the value even when ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ - Inside source: true *** True Line Result # the user's cursor is no longer over what they're interacting with, but ** Processing line: ~ # they are still clicking down on the mouse.~ - Inside source: true *** True Line Result # they are still clicking down on the mouse. ** Processing line: ~ state.current_input ||= :none~ - Inside source: true *** True Line Result state.current_input ||= :none ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws everything onto the screen~ - Inside source: true *** True Line Result # Draws everything onto the screen ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ render_background~ - Inside source: true *** True Line Result render_background ** Processing line: ~ render_heat_map~ - Inside source: true *** True Line Result render_heat_map ** Processing line: ~ render_walls~ - Inside source: true *** True Line Result render_walls ** Processing line: ~ render_path~ - Inside source: true *** True Line Result render_path ** Processing line: ~ render_star~ - Inside source: true *** True Line Result render_star ** Processing line: ~ render_target~ - Inside source: true *** True Line Result render_target ** Processing line: ~ render_labels~ - Inside source: true *** True Line Result render_labels ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The methods below subdivide the task of drawing everything to the screen~ - Inside source: true *** True Line Result # The methods below subdivide the task of drawing everything to the screen ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws what the grid looks like with nothing on it~ - Inside source: true *** True Line Result # Draws what the grid looks like with nothing on it ** Processing line: ~ def render_background~ - Inside source: true *** True Line Result def render_background ** Processing line: ~ render_unvisited~ - Inside source: true *** True Line Result render_unvisited ** Processing line: ~ render_grid_lines~ - Inside source: true *** True Line Result render_grid_lines ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws both grids~ - Inside source: true *** True Line Result # Draws both grids ** Processing line: ~ def render_unvisited~ - Inside source: true *** True Line Result def render_unvisited ** Processing line: ~ outputs.solids << [scale_up(grid.rect), unvisited_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(grid.rect), unvisited_color] ** Processing line: ~ outputs.solids << [early_exit_scale_up(grid.rect), unvisited_color]~ - Inside source: true *** True Line Result outputs.solids << [early_exit_scale_up(grid.rect), unvisited_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws grid lines to show the division of the grid into cells~ - Inside source: true *** True Line Result # Draws grid lines to show the division of the grid into cells ** Processing line: ~ def render_grid_lines~ - Inside source: true *** True Line Result def render_grid_lines ** Processing line: ~ for x in 0..grid.width~ - Inside source: true *** True Line Result for x in 0..grid.width ** Processing line: ~ outputs.lines << vertical_line(x)~ - Inside source: true *** True Line Result outputs.lines << vertical_line(x) ** Processing line: ~ outputs.lines << early_exit_vertical_line(x)~ - Inside source: true *** True Line Result outputs.lines << early_exit_vertical_line(x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ for y in 0..grid.height~ - Inside source: true *** True Line Result for y in 0..grid.height ** Processing line: ~ outputs.lines << horizontal_line(y)~ - Inside source: true *** True Line Result outputs.lines << horizontal_line(y) ** Processing line: ~ outputs.lines << early_exit_horizontal_line(y)~ - Inside source: true *** True Line Result outputs.lines << early_exit_horizontal_line(y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easy way to draw vertical lines given an index~ - Inside source: true *** True Line Result # Easy way to draw vertical lines given an index ** Processing line: ~ def vertical_line column~ - Inside source: true *** True Line Result def vertical_line column ** Processing line: ~ scale_up([column, 0, column, grid.height])~ - Inside source: true *** True Line Result scale_up([column, 0, column, grid.height]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easy way to draw horizontal lines given an index~ - Inside source: true *** True Line Result # Easy way to draw horizontal lines given an index ** Processing line: ~ def horizontal_line row~ - Inside source: true *** True Line Result def horizontal_line row ** Processing line: ~ scale_up([0, row, grid.width, row])~ - Inside source: true *** True Line Result scale_up([0, row, grid.width, row]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easy way to draw vertical lines given an index~ - Inside source: true *** True Line Result # Easy way to draw vertical lines given an index ** Processing line: ~ def early_exit_vertical_line column~ - Inside source: true *** True Line Result def early_exit_vertical_line column ** Processing line: ~ scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height])~ - Inside source: true *** True Line Result scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easy way to draw horizontal lines given an index~ - Inside source: true *** True Line Result # Easy way to draw horizontal lines given an index ** Processing line: ~ def early_exit_horizontal_line row~ - Inside source: true *** True Line Result def early_exit_horizontal_line row ** Processing line: ~ scale_up([grid.width + 1, row, grid.width + grid.width + 1, row])~ - Inside source: true *** True Line Result scale_up([grid.width + 1, row, grid.width + grid.width + 1, row]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws the walls on both grids~ - Inside source: true *** True Line Result # Draws the walls on both grids ** Processing line: ~ def render_walls~ - Inside source: true *** True Line Result def render_walls ** Processing line: ~ state.walls.each_key do |wall|~ - Inside source: true *** True Line Result state.walls.each_key do |wall| ** Processing line: ~ outputs.solids << [scale_up(wall), wall_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(wall), wall_color] ** Processing line: ~ outputs.solids << [early_exit_scale_up(wall), wall_color]~ - Inside source: true *** True Line Result outputs.solids << [early_exit_scale_up(wall), wall_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the star on both grids~ - Inside source: true *** True Line Result # Renders the star on both grids ** Processing line: ~ def render_star~ - Inside source: true *** True Line Result def render_star ** Processing line: ~ outputs.sprites << [scale_up(state.star), 'star.png']~ - Inside source: true *** True Line Result outputs.sprites << [scale_up(state.star), 'star.png'] ** Processing line: ~ outputs.sprites << [early_exit_scale_up(state.star), 'star.png']~ - Inside source: true *** True Line Result outputs.sprites << [early_exit_scale_up(state.star), 'star.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the target on both grids~ - Inside source: true *** True Line Result # Renders the target on both grids ** Processing line: ~ def render_target~ - Inside source: true *** True Line Result def render_target ** Processing line: ~ outputs.sprites << [scale_up(state.target), 'target.png']~ - Inside source: true *** True Line Result outputs.sprites << [scale_up(state.target), 'target.png'] ** Processing line: ~ outputs.sprites << [early_exit_scale_up(state.target), 'target.png']~ - Inside source: true *** True Line Result outputs.sprites << [early_exit_scale_up(state.target), 'target.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Labels the grids~ - Inside source: true *** True Line Result # Labels the grids ** Processing line: ~ def render_labels~ - Inside source: true *** True Line Result def render_labels ** Processing line: ~ outputs.labels << [200, 625, "Without early exit"]~ - Inside source: true *** True Line Result outputs.labels << [200, 625, "Without early exit"] ** Processing line: ~ outputs.labels << [875, 625, "With early exit"]~ - Inside source: true *** True Line Result outputs.labels << [875, 625, "With early exit"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the path based off of the state.path hash~ - Inside source: true *** True Line Result # Renders the path based off of the state.path hash ** Processing line: ~ def render_path~ - Inside source: true *** True Line Result def render_path ** Processing line: ~ # If the star and target are disconnected there will only be one path~ - Inside source: true *** True Line Result # If the star and target are disconnected there will only be one path ** Processing line: ~ # The path should not render in that case~ - Inside source: true *** True Line Result # The path should not render in that case ** Processing line: ~ unless state.path.size == 1~ - Inside source: true *** True Line Result unless state.path.size == 1 ** Processing line: ~ state.path.each_key do | cell |~ - Inside source: true *** True Line Result state.path.each_key do | cell | ** Processing line: ~ # Renders path on both grids~ - Inside source: true *** True Line Result # Renders path on both grids ** Processing line: ~ outputs.solids << [scale_up(cell), path_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(cell), path_color] ** Processing line: ~ outputs.solids << [early_exit_scale_up(cell), path_color]~ - Inside source: true *** True Line Result outputs.solids << [early_exit_scale_up(cell), path_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the path from the target to the star after the search is over~ - Inside source: true *** True Line Result # Calculates the path from the target to the star after the search is over ** Processing line: ~ # Relies on the came_from hash~ - Inside source: true *** True Line Result # Relies on the came_from hash ** Processing line: ~ # Fills the state.path hash, which is later rendered on screen~ - Inside source: true *** True Line Result # Fills the state.path hash, which is later rendered on screen ** Processing line: ~ def calc_path~ - Inside source: true *** True Line Result def calc_path ** Processing line: ~ endpoint = state.target~ - Inside source: true *** True Line Result endpoint = state.target ** Processing line: ~ while endpoint~ - Inside source: true *** True Line Result while endpoint ** Processing line: ~ state.path[endpoint] = true~ - Inside source: true *** True Line Result state.path[endpoint] = true ** Processing line: ~ endpoint = state.came_from[endpoint]~ - Inside source: true *** True Line Result endpoint = state.came_from[endpoint] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Representation of how far away visited cells are from the star~ - Inside source: true *** True Line Result # Representation of how far away visited cells are from the star ** Processing line: ~ # Replaces the render_visited method~ - Inside source: true *** True Line Result # Replaces the render_visited method ** Processing line: ~ # Visually demonstrates the effectiveness of early exit for pathfinding~ - Inside source: true *** True Line Result # Visually demonstrates the effectiveness of early exit for pathfinding ** Processing line: ~ def render_heat_map~ - Inside source: true *** True Line Result def render_heat_map ** Processing line: ~ state.visited.each_key do | visited_cell |~ - Inside source: true *** True Line Result state.visited.each_key do | visited_cell | ** Processing line: ~ distance = (state.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs~ - Inside source: true *** True Line Result distance = (state.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs ** Processing line: ~ max_distance = grid.width + grid.height~ - Inside source: true *** True Line Result max_distance = grid.width + grid.height ** Processing line: ~ alpha = 255.to_i * distance.to_i / max_distance.to_i~ - Inside source: true *** True Line Result alpha = 255.to_i * distance.to_i / max_distance.to_i ** Processing line: ~ outputs.solids << [scale_up(visited_cell), red, alpha]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(visited_cell), red, alpha] ** Processing line: ~ # outputs.solids << [early_exit_scale_up(visited_cell), red, alpha]~ - Inside source: true *** True Line Result # outputs.solids << [early_exit_scale_up(visited_cell), red, alpha] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.early_exit_visited.each_key do | visited_cell |~ - Inside source: true *** True Line Result state.early_exit_visited.each_key do | visited_cell | ** Processing line: ~ distance = (state.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs~ - Inside source: true *** True Line Result distance = (state.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs ** Processing line: ~ max_distance = grid.width + grid.height~ - Inside source: true *** True Line Result max_distance = grid.width + grid.height ** Processing line: ~ alpha = 255.to_i * distance.to_i / max_distance.to_i~ - Inside source: true *** True Line Result alpha = 255.to_i * distance.to_i / max_distance.to_i ** Processing line: ~ outputs.solids << [early_exit_scale_up(visited_cell), red, alpha]~ - Inside source: true *** True Line Result outputs.solids << [early_exit_scale_up(visited_cell), red, alpha] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Translates the given cell grid.width + 1 to the right and then scales up~ - Inside source: true *** True Line Result # Translates the given cell grid.width + 1 to the right and then scales up ** Processing line: ~ # Used to draw cells for the second grid~ - Inside source: true *** True Line Result # Used to draw cells for the second grid ** Processing line: ~ # This method does not work for lines,~ - Inside source: true *** True Line Result # This method does not work for lines, ** Processing line: ~ # so separate methods exist for the grid lines~ - Inside source: true *** True Line Result # so separate methods exist for the grid lines ** Processing line: ~ def early_exit_scale_up(cell)~ - Inside source: true *** True Line Result def early_exit_scale_up(cell) ** Processing line: ~ cell_clone = cell.clone~ - Inside source: true *** True Line Result cell_clone = cell.clone ** Processing line: ~ cell_clone.x += grid.width + 1~ - Inside source: true *** True Line Result cell_clone.x += grid.width + 1 ** Processing line: ~ scale_up(cell_clone)~ - Inside source: true *** True Line Result scale_up(cell_clone) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # In code, the cells are represented as 1x1 rectangles~ - Inside source: true *** True Line Result # In code, the cells are represented as 1x1 rectangles ** Processing line: ~ # When drawn, the cells are larger than 1x1 rectangles~ - Inside source: true *** True Line Result # When drawn, the cells are larger than 1x1 rectangles ** Processing line: ~ # This method is used to scale up cells, and lines~ - Inside source: true *** True Line Result # This method is used to scale up cells, and lines ** Processing line: ~ # Objects are scaled up according to the grid.cell_size variable~ - Inside source: true *** True Line Result # Objects are scaled up according to the grid.cell_size variable ** Processing line: ~ # This allows for easy customization of the visual scale of the grid~ - Inside source: true *** True Line Result # This allows for easy customization of the visual scale of the grid ** Processing line: ~ def scale_up(cell)~ - Inside source: true *** True Line Result def scale_up(cell) ** Processing line: ~ # Prevents the original value of cell from being edited~ - Inside source: true *** True Line Result # Prevents the original value of cell from being edited ** Processing line: ~ cell = cell.clone~ - Inside source: true *** True Line Result cell = cell.clone ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If cell is just an x and y coordinate~ - Inside source: true *** True Line Result # If cell is just an x and y coordinate ** Processing line: ~ if cell.size == 2~ - Inside source: true *** True Line Result if cell.size == 2 ** Processing line: ~ # Add a width and height of 1~ - Inside source: true *** True Line Result # Add a width and height of 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Scale all the values up~ - Inside source: true *** True Line Result # Scale all the values up ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ - Inside source: true *** True Line Result cell.map! { |value| value * grid.cell_size } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the scaled up cell~ - Inside source: true *** True Line Result # Returns the scaled up cell ** Processing line: ~ cell~ - Inside source: true *** True Line Result cell ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method processes user input every tick~ - Inside source: true *** True Line Result # This method processes user input every tick ** Processing line: ~ # Any method with "1" is related to the first grid~ - Inside source: true *** True Line Result # Any method with "1" is related to the first grid ** Processing line: ~ # Any method with "2" is related to the second grid~ - Inside source: true *** True Line Result # Any method with "2" is related to the second grid ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ # The program has to remember that the user is dragging an object~ - Inside source: true *** True Line Result # The program has to remember that the user is dragging an object ** Processing line: ~ # even when the mouse is no longer over that object~ - Inside source: true *** True Line Result # even when the mouse is no longer over that object ** Processing line: ~ # So detecting input and processing input is separate~ - Inside source: true *** True Line Result # So detecting input and processing input is separate ** Processing line: ~ detect_input~ - Inside source: true *** True Line Result detect_input ** Processing line: ~ process_input~ - Inside source: true *** True Line Result process_input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Determines what the user is editing and stores the value~ - Inside source: true *** True Line Result # Determines what the user is editing and stores the value ** Processing line: ~ # Storing the value allows the user to continue the same edit as long as the~ - Inside source: true *** True Line Result # Storing the value allows the user to continue the same edit as long as the ** Processing line: ~ # mouse left click is held~ - Inside source: true *** True Line Result # mouse left click is held ** Processing line: ~ def detect_input~ - Inside source: true *** True Line Result def detect_input ** Processing line: ~ # When the mouse is up, nothing is being edited~ - Inside source: true *** True Line Result # When the mouse is up, nothing is being edited ** Processing line: ~ if inputs.mouse.up~ - Inside source: true *** True Line Result if inputs.mouse.up ** Processing line: ~ state.current_input = :none~ - Inside source: true *** True Line Result state.current_input = :none ** Processing line: ~ # When the star in the no second grid is clicked~ - Inside source: true *** True Line Result # When the star in the no second grid is clicked ** Processing line: ~ elsif star_clicked?~ - Inside source: true *** True Line Result elsif star_clicked? ** Processing line: ~ state.current_input = :star~ - Inside source: true *** True Line Result state.current_input = :star ** Processing line: ~ # When the star in the second grid is clicked~ - Inside source: true *** True Line Result # When the star in the second grid is clicked ** Processing line: ~ elsif star2_clicked?~ - Inside source: true *** True Line Result elsif star2_clicked? ** Processing line: ~ state.current_input = :star2~ - Inside source: true *** True Line Result state.current_input = :star2 ** Processing line: ~ # When the target in the no second grid is clicked~ - Inside source: true *** True Line Result # When the target in the no second grid is clicked ** Processing line: ~ elsif target_clicked?~ - Inside source: true *** True Line Result elsif target_clicked? ** Processing line: ~ state.current_input = :target~ - Inside source: true *** True Line Result state.current_input = :target ** Processing line: ~ # When the target in the second grid is clicked~ - Inside source: true *** True Line Result # When the target in the second grid is clicked ** Processing line: ~ elsif target2_clicked?~ - Inside source: true *** True Line Result elsif target2_clicked? ** Processing line: ~ state.current_input = :target2~ - Inside source: true *** True Line Result state.current_input = :target2 ** Processing line: ~ # When a wall in the first grid is clicked~ - Inside source: true *** True Line Result # When a wall in the first grid is clicked ** Processing line: ~ elsif wall_clicked?~ - Inside source: true *** True Line Result elsif wall_clicked? ** Processing line: ~ state.current_input = :remove_wall~ - Inside source: true *** True Line Result state.current_input = :remove_wall ** Processing line: ~ # When a wall in the second grid is clicked~ - Inside source: true *** True Line Result # When a wall in the second grid is clicked ** Processing line: ~ elsif wall2_clicked?~ - Inside source: true *** True Line Result elsif wall2_clicked? ** Processing line: ~ state.current_input = :remove_wall2~ - Inside source: true *** True Line Result state.current_input = :remove_wall2 ** Processing line: ~ # When the first grid is clicked~ - Inside source: true *** True Line Result # When the first grid is clicked ** Processing line: ~ elsif grid_clicked?~ - Inside source: true *** True Line Result elsif grid_clicked? ** Processing line: ~ state.current_input = :add_wall~ - Inside source: true *** True Line Result state.current_input = :add_wall ** Processing line: ~ # When the second grid is clicked~ - Inside source: true *** True Line Result # When the second grid is clicked ** Processing line: ~ elsif grid2_clicked?~ - Inside source: true *** True Line Result elsif grid2_clicked? ** Processing line: ~ state.current_input = :add_wall2~ - Inside source: true *** True Line Result state.current_input = :add_wall2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Processes click and drag based on what the user is currently dragging~ - Inside source: true *** True Line Result # Processes click and drag based on what the user is currently dragging ** Processing line: ~ def process_input~ - Inside source: true *** True Line Result def process_input ** Processing line: ~ if state.current_input == :star~ - Inside source: true *** True Line Result if state.current_input == :star ** Processing line: ~ input_star~ - Inside source: true *** True Line Result input_star ** Processing line: ~ elsif state.current_input == :star2~ - Inside source: true *** True Line Result elsif state.current_input == :star2 ** Processing line: ~ input_star2~ - Inside source: true *** True Line Result input_star2 ** Processing line: ~ elsif state.current_input == :target~ - Inside source: true *** True Line Result elsif state.current_input == :target ** Processing line: ~ input_target~ - Inside source: true *** True Line Result input_target ** Processing line: ~ elsif state.current_input == :target2~ - Inside source: true *** True Line Result elsif state.current_input == :target2 ** Processing line: ~ input_target2~ - Inside source: true *** True Line Result input_target2 ** Processing line: ~ elsif state.current_input == :remove_wall~ - Inside source: true *** True Line Result elsif state.current_input == :remove_wall ** Processing line: ~ input_remove_wall~ - Inside source: true *** True Line Result input_remove_wall ** Processing line: ~ elsif state.current_input == :remove_wall2~ - Inside source: true *** True Line Result elsif state.current_input == :remove_wall2 ** Processing line: ~ input_remove_wall2~ - Inside source: true *** True Line Result input_remove_wall2 ** Processing line: ~ elsif state.current_input == :add_wall~ - Inside source: true *** True Line Result elsif state.current_input == :add_wall ** Processing line: ~ input_add_wall~ - Inside source: true *** True Line Result input_add_wall ** Processing line: ~ elsif state.current_input == :add_wall2~ - Inside source: true *** True Line Result elsif state.current_input == :add_wall2 ** Processing line: ~ input_add_wall2~ - Inside source: true *** True Line Result input_add_wall2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the star to the cell closest to the mouse in the first grid~ - Inside source: true *** True Line Result # Moves the star to the cell closest to the mouse in the first grid ** Processing line: ~ # Only resets the search if the star changes position~ - Inside source: true *** True Line Result # Only resets the search if the star changes position ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ - Inside source: true *** True Line Result # Called whenever the user is editing the star (puts mouse down on star) ** Processing line: ~ def input_star~ - Inside source: true *** True Line Result def input_star ** Processing line: ~ old_star = state.star.clone~ - Inside source: true *** True Line Result old_star = state.star.clone ** Processing line: ~ state.star = cell_closest_to_mouse~ - Inside source: true *** True Line Result state.star = cell_closest_to_mouse ** Processing line: ~ unless old_star == state.star~ - Inside source: true *** True Line Result unless old_star == state.star ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the star to the cell closest to the mouse in the second grid~ - Inside source: true *** True Line Result # Moves the star to the cell closest to the mouse in the second grid ** Processing line: ~ # Only resets the search if the star changes position~ - Inside source: true *** True Line Result # Only resets the search if the star changes position ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ - Inside source: true *** True Line Result # Called whenever the user is editing the star (puts mouse down on star) ** Processing line: ~ def input_star2~ - Inside source: true *** True Line Result def input_star2 ** Processing line: ~ old_star = state.star.clone~ - Inside source: true *** True Line Result old_star = state.star.clone ** Processing line: ~ state.star = cell_closest_to_mouse2~ - Inside source: true *** True Line Result state.star = cell_closest_to_mouse2 ** Processing line: ~ unless old_star == state.star~ - Inside source: true *** True Line Result unless old_star == state.star ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the target to the grid closest to the mouse in the first grid~ - Inside source: true *** True Line Result # Moves the target to the grid closest to the mouse in the first grid ** Processing line: ~ # Only reset_searchs the search if the target changes position~ - Inside source: true *** True Line Result # Only reset_searchs the search if the target changes position ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ - Inside source: true *** True Line Result # Called whenever the user is editing the target (puts mouse down on target) ** Processing line: ~ def input_target~ - Inside source: true *** True Line Result def input_target ** Processing line: ~ old_target = state.target.clone~ - Inside source: true *** True Line Result old_target = state.target.clone ** Processing line: ~ state.target = cell_closest_to_mouse~ - Inside source: true *** True Line Result state.target = cell_closest_to_mouse ** Processing line: ~ unless old_target == state.target~ - Inside source: true *** True Line Result unless old_target == state.target ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the target to the cell closest to the mouse in the second grid~ - Inside source: true *** True Line Result # Moves the target to the cell closest to the mouse in the second grid ** Processing line: ~ # Only reset_searchs the search if the target changes position~ - Inside source: true *** True Line Result # Only reset_searchs the search if the target changes position ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ - Inside source: true *** True Line Result # Called whenever the user is editing the target (puts mouse down on target) ** Processing line: ~ def input_target2~ - Inside source: true *** True Line Result def input_target2 ** Processing line: ~ old_target = state.target.clone~ - Inside source: true *** True Line Result old_target = state.target.clone ** Processing line: ~ state.target = cell_closest_to_mouse2~ - Inside source: true *** True Line Result state.target = cell_closest_to_mouse2 ** Processing line: ~ unless old_target == state.target~ - Inside source: true *** True Line Result unless old_target == state.target ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Removes walls in the first grid that are under the cursor~ - Inside source: true *** True Line Result # Removes walls in the first grid that are under the cursor ** Processing line: ~ def input_remove_wall~ - Inside source: true *** True Line Result def input_remove_wall ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ - Inside source: true *** True Line Result # The mouse needs to be inside the grid, because we only want to remove walls ** Processing line: ~ # the cursor is directly over~ - Inside source: true *** True Line Result # the cursor is directly over ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ - Inside source: true *** True Line Result # Recalculations should only occur when a wall is actually deleted ** Processing line: ~ if mouse_inside_grid?~ - Inside source: true *** True Line Result if mouse_inside_grid? ** Processing line: ~ if state.walls.has_key?(cell_closest_to_mouse)~ - Inside source: true *** True Line Result if state.walls.has_key?(cell_closest_to_mouse) ** Processing line: ~ state.walls.delete(cell_closest_to_mouse)~ - Inside source: true *** True Line Result state.walls.delete(cell_closest_to_mouse) ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Removes walls in the second grid that are under the cursor~ - Inside source: true *** True Line Result # Removes walls in the second grid that are under the cursor ** Processing line: ~ def input_remove_wall2~ - Inside source: true *** True Line Result def input_remove_wall2 ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ - Inside source: true *** True Line Result # The mouse needs to be inside the grid, because we only want to remove walls ** Processing line: ~ # the cursor is directly over~ - Inside source: true *** True Line Result # the cursor is directly over ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ - Inside source: true *** True Line Result # Recalculations should only occur when a wall is actually deleted ** Processing line: ~ if mouse_inside_grid2?~ - Inside source: true *** True Line Result if mouse_inside_grid2? ** Processing line: ~ if state.walls.has_key?(cell_closest_to_mouse2)~ - Inside source: true *** True Line Result if state.walls.has_key?(cell_closest_to_mouse2) ** Processing line: ~ state.walls.delete(cell_closest_to_mouse2)~ - Inside source: true *** True Line Result state.walls.delete(cell_closest_to_mouse2) ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds a wall in the first grid in the cell the mouse is over~ - Inside source: true *** True Line Result # Adds a wall in the first grid in the cell the mouse is over ** Processing line: ~ def input_add_wall~ - Inside source: true *** True Line Result def input_add_wall ** Processing line: ~ if mouse_inside_grid?~ - Inside source: true *** True Line Result if mouse_inside_grid? ** Processing line: ~ unless state.walls.has_key?(cell_closest_to_mouse)~ - Inside source: true *** True Line Result unless state.walls.has_key?(cell_closest_to_mouse) ** Processing line: ~ state.walls[cell_closest_to_mouse] = true~ - Inside source: true *** True Line Result state.walls[cell_closest_to_mouse] = true ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds a wall in the second grid in the cell the mouse is over~ - Inside source: true *** True Line Result # Adds a wall in the second grid in the cell the mouse is over ** Processing line: ~ def input_add_wall2~ - Inside source: true *** True Line Result def input_add_wall2 ** Processing line: ~ if mouse_inside_grid2?~ - Inside source: true *** True Line Result if mouse_inside_grid2? ** Processing line: ~ unless state.walls.has_key?(cell_closest_to_mouse2)~ - Inside source: true *** True Line Result unless state.walls.has_key?(cell_closest_to_mouse2) ** Processing line: ~ state.walls[cell_closest_to_mouse2] = true~ - Inside source: true *** True Line Result state.walls[cell_closest_to_mouse2] = true ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Whenever the user edits the grid,~ - Inside source: true *** True Line Result # Whenever the user edits the grid, ** Processing line: ~ # The search has to be reset_searchd upto the current step~ - Inside source: true *** True Line Result # The search has to be reset_searchd upto the current step ** Processing line: ~ # with the current grid as the initial state of the grid~ - Inside source: true *** True Line Result # with the current grid as the initial state of the grid ** Processing line: ~ def reset_search~ - Inside source: true *** True Line Result def reset_search ** Processing line: ~ # Reset_Searchs the search~ - Inside source: true *** True Line Result # Reset_Searchs the search ** Processing line: ~ state.frontier = []~ - Inside source: true *** True Line Result state.frontier = [] ** Processing line: ~ state.visited = {}~ - Inside source: true *** True Line Result state.visited = {} ** Processing line: ~ state.early_exit_visited = {}~ - Inside source: true *** True Line Result state.early_exit_visited = {} ** Processing line: ~ state.came_from = {}~ - Inside source: true *** True Line Result state.came_from = {} ** Processing line: ~ state.path = {}~ - Inside source: true *** True Line Result state.path = {} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the search forward one step~ - Inside source: true *** True Line Result # Moves the search forward one step ** Processing line: ~ def step~ - Inside source: true *** True Line Result def step ** Processing line: ~ # The setup to the search~ - Inside source: true *** True Line Result # The setup to the search ** Processing line: ~ # Runs once when there are no visited cells~ - Inside source: true *** True Line Result # Runs once when there are no visited cells ** Processing line: ~ if state.visited.empty?~ - Inside source: true *** True Line Result if state.visited.empty? ** Processing line: ~ state.visited[state.star] = true~ - Inside source: true *** True Line Result state.visited[state.star] = true ** Processing line: ~ state.early_exit_visited[state.star] = true~ - Inside source: true *** True Line Result state.early_exit_visited[state.star] = true ** Processing line: ~ state.frontier << state.star~ - Inside source: true *** True Line Result state.frontier << state.star ** Processing line: ~ state.came_from[state.star] = nil~ - Inside source: true *** True Line Result state.came_from[state.star] = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # A step in the search~ - Inside source: true *** True Line Result # A step in the search ** Processing line: ~ unless state.frontier.empty?~ - Inside source: true *** True Line Result unless state.frontier.empty? ** Processing line: ~ # Takes the next frontier cell~ - Inside source: true *** True Line Result # Takes the next frontier cell ** Processing line: ~ new_frontier = state.frontier.shift~ - Inside source: true *** True Line Result new_frontier = state.frontier.shift ** Processing line: ~ # For each of its neighbors~ - Inside source: true *** True Line Result # For each of its neighbors ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ - Inside source: true *** True Line Result adjacent_neighbors(new_frontier).each do |neighbor| ** Processing line: ~ # That have not been visited and are not walls~ - Inside source: true *** True Line Result # That have not been visited and are not walls ** Processing line: ~ unless state.visited.has_key?(neighbor) || state.walls.has_key?(neighbor)~ - Inside source: true *** True Line Result unless state.visited.has_key?(neighbor) || state.walls.has_key?(neighbor) ** Processing line: ~ # Add them to the frontier and mark them as visited in the first grid~ - Inside source: true *** True Line Result # Add them to the frontier and mark them as visited in the first grid ** Processing line: ~ state.visited[neighbor] = true~ - Inside source: true *** True Line Result state.visited[neighbor] = true ** Processing line: ~ # Unless the target has been visited~ - Inside source: true *** True Line Result # Unless the target has been visited ** Processing line: ~ unless state.visited.has_key?(state.target)~ - Inside source: true *** True Line Result unless state.visited.has_key?(state.target) ** Processing line: ~ # Mark the neighbor as visited in the second grid as well~ - Inside source: true *** True Line Result # Mark the neighbor as visited in the second grid as well ** Processing line: ~ state.early_exit_visited[neighbor] = true~ - Inside source: true *** True Line Result state.early_exit_visited[neighbor] = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Add the neighbor to the frontier and remember which cell it came from~ - Inside source: true *** True Line Result # Add the neighbor to the frontier and remember which cell it came from ** Processing line: ~ state.frontier << neighbor~ - Inside source: true *** True Line Result state.frontier << neighbor ** Processing line: ~ state.came_from[neighbor] = new_frontier~ - Inside source: true *** True Line Result state.came_from[neighbor] = new_frontier ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a list of adjacent cells~ - Inside source: true *** True Line Result # Returns a list of adjacent cells ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ - Inside source: true *** True Line Result # Used to determine what the next cells to be added to the frontier are ** Processing line: ~ def adjacent_neighbors(cell)~ - Inside source: true *** True Line Result def adjacent_neighbors(cell) ** Processing line: ~ neighbors = []~ - Inside source: true *** True Line Result neighbors = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Gets all the valid neighbors into the array~ - Inside source: true *** True Line Result # Gets all the valid neighbors into the array ** Processing line: ~ # From southern neighbor, clockwise~ - Inside source: true *** True Line Result # From southern neighbor, clockwise ** Processing line: ~ neighbors << [cell.x, cell.y - 1] unless cell.y == 0~ - Inside source: true *** True Line Result neighbors << [cell.x, cell.y - 1] unless cell.y == 0 ** Processing line: ~ neighbors << [cell.x - 1, cell.y] unless cell.x == 0~ - Inside source: true *** True Line Result neighbors << [cell.x - 1, cell.y] unless cell.x == 0 ** Processing line: ~ neighbors << [cell.x, cell.y + 1] unless cell.y == grid.height - 1~ - Inside source: true *** True Line Result neighbors << [cell.x, cell.y + 1] unless cell.y == grid.height - 1 ** Processing line: ~ neighbors << [cell.x + 1, cell.y] unless cell.x == grid.width - 1~ - Inside source: true *** True Line Result neighbors << [cell.x + 1, cell.y] unless cell.x == grid.width - 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sorts the neighbors so the rendered path is a zigzag path~ - Inside source: true *** True Line Result # Sorts the neighbors so the rendered path is a zigzag path ** Processing line: ~ # Cells in a diagonal direction are given priority~ - Inside source: true *** True Line Result # Cells in a diagonal direction are given priority ** Processing line: ~ # Comment this line to see the difference~ - Inside source: true *** True Line Result # Comment this line to see the difference ** Processing line: ~ neighbors = neighbors.sort_by { |neighbor_x, neighbor_y| proximity_to_star(neighbor_x, neighbor_y) }~ - Inside source: true *** True Line Result neighbors = neighbors.sort_by { |neighbor_x, neighbor_y| proximity_to_star(neighbor_x, neighbor_y) } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ neighbors~ - Inside source: true *** True Line Result neighbors ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds the vertical and horizontal distance of a cell from the star~ - Inside source: true *** True Line Result # Finds the vertical and horizontal distance of a cell from the star ** Processing line: ~ # and returns the larger value~ - Inside source: true *** True Line Result # and returns the larger value ** Processing line: ~ # This method is used to have a zigzag pattern in the rendered path~ - Inside source: true *** True Line Result # This method is used to have a zigzag pattern in the rendered path ** Processing line: ~ # A cell that is [5, 5] from the star,~ - Inside source: true *** True Line Result # A cell that is [5, 5] from the star, ** Processing line: ~ # is explored before over a cell that is [0, 7] away.~ - Inside source: true *** True Line Result # is explored before over a cell that is [0, 7] away. ** Processing line: ~ # So, if possible, the search tries to go diagonal (zigzag) first~ - Inside source: true *** True Line Result # So, if possible, the search tries to go diagonal (zigzag) first ** Processing line: ~ def proximity_to_star(x, y)~ - Inside source: true *** True Line Result def proximity_to_star(x, y) ** Processing line: ~ distance_x = (state.star.x - x).abs~ - Inside source: true *** True Line Result distance_x = (state.star.x - x).abs ** Processing line: ~ distance_y = (state.star.y - y).abs~ - Inside source: true *** True Line Result distance_y = (state.star.y - y).abs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if distance_x > distance_y~ - Inside source: true *** True Line Result if distance_x > distance_y ** Processing line: ~ return distance_x~ - Inside source: true *** True Line Result return distance_x ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return distance_y~ - Inside source: true *** True Line Result return distance_y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ - Inside source: true *** True Line Result # When the user grabs the star and puts their cursor to the far right ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ - Inside source: true *** True Line Result # and moves up and down, the star is supposed to move along the grid as well ** Processing line: ~ # Finding the cell closest to the mouse helps with this~ - Inside source: true *** True Line Result # Finding the cell closest to the mouse helps with this ** Processing line: ~ def cell_closest_to_mouse~ - Inside source: true *** True Line Result def cell_closest_to_mouse ** Processing line: ~ # Closest cell to the mouse in the first grid~ - Inside source: true *** True Line Result # Closest cell to the mouse in the first grid ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ - Inside source: true *** True Line Result x = (inputs.mouse.point.x / grid.cell_size).to_i ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ - Inside source: true *** True Line Result y = (inputs.mouse.point.y / grid.cell_size).to_i ** Processing line: ~ # Bound x and y to the grid~ - Inside source: true *** True Line Result # Bound x and y to the grid ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ - Inside source: true *** True Line Result x = grid.width - 1 if x > grid.width - 1 ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ - Inside source: true *** True Line Result y = grid.height - 1 if y > grid.height - 1 ** Processing line: ~ # Return closest cell~ - Inside source: true *** True Line Result # Return closest cell ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ - Inside source: true *** True Line Result # When the user grabs the star and puts their cursor to the far right ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ - Inside source: true *** True Line Result # and moves up and down, the star is supposed to move along the grid as well ** Processing line: ~ # Finding the cell closest to the mouse in the second grid helps with this~ - Inside source: true *** True Line Result # Finding the cell closest to the mouse in the second grid helps with this ** Processing line: ~ def cell_closest_to_mouse2~ - Inside source: true *** True Line Result def cell_closest_to_mouse2 ** Processing line: ~ # Closest cell grid to the mouse in the second~ - Inside source: true *** True Line Result # Closest cell grid to the mouse in the second ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ - Inside source: true *** True Line Result x = (inputs.mouse.point.x / grid.cell_size).to_i ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ - Inside source: true *** True Line Result y = (inputs.mouse.point.y / grid.cell_size).to_i ** Processing line: ~ # Translate the cell to the first grid~ - Inside source: true *** True Line Result # Translate the cell to the first grid ** Processing line: ~ x -= grid.width + 1~ - Inside source: true *** True Line Result x -= grid.width + 1 ** Processing line: ~ # Bound x and y to the first grid~ - Inside source: true *** True Line Result # Bound x and y to the first grid ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ - Inside source: true *** True Line Result x = grid.width - 1 if x > grid.width - 1 ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ - Inside source: true *** True Line Result y = grid.height - 1 if y > grid.height - 1 ** Processing line: ~ # Return closest cell~ - Inside source: true *** True Line Result # Return closest cell ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the star from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the star from the first grid ** Processing line: ~ def star_clicked?~ - Inside source: true *** True Line Result def star_clicked? ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(state.star))~ - Inside source: true *** True Line Result inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(state.star)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the star from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the star from the second grid ** Processing line: ~ def star2_clicked?~ - Inside source: true *** True Line Result def star2_clicked? ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(early_exit_scale_up(state.star))~ - Inside source: true *** True Line Result inputs.mouse.down && inputs.mouse.point.inside_rect?(early_exit_scale_up(state.star)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the target from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the target from the first grid ** Processing line: ~ def target_clicked?~ - Inside source: true *** True Line Result def target_clicked? ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(state.target))~ - Inside source: true *** True Line Result inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(state.target)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the target from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the target from the second grid ** Processing line: ~ def target2_clicked?~ - Inside source: true *** True Line Result def target2_clicked? ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(early_exit_scale_up(state.target))~ - Inside source: true *** True Line Result inputs.mouse.down && inputs.mouse.point.inside_rect?(early_exit_scale_up(state.target)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing walls from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be removing walls from the first grid ** Processing line: ~ def wall_clicked?~ - Inside source: true *** True Line Result def wall_clicked? ** Processing line: ~ inputs.mouse.down && mouse_inside_wall?~ - Inside source: true *** True Line Result inputs.mouse.down && mouse_inside_wall? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing walls from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be removing walls from the second grid ** Processing line: ~ def wall2_clicked?~ - Inside source: true *** True Line Result def wall2_clicked? ** Processing line: ~ inputs.mouse.down && mouse_inside_wall2?~ - Inside source: true *** True Line Result inputs.mouse.down && mouse_inside_wall2? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be adding walls from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be adding walls from the first grid ** Processing line: ~ def grid_clicked?~ - Inside source: true *** True Line Result def grid_clicked? ** Processing line: ~ inputs.mouse.down && mouse_inside_grid?~ - Inside source: true *** True Line Result inputs.mouse.down && mouse_inside_grid? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be adding walls from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be adding walls from the second grid ** Processing line: ~ def grid2_clicked?~ - Inside source: true *** True Line Result def grid2_clicked? ** Processing line: ~ inputs.mouse.down && mouse_inside_grid2?~ - Inside source: true *** True Line Result inputs.mouse.down && mouse_inside_grid2? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns whether the mouse is inside of a wall in the first grid~ - Inside source: true *** True Line Result # Returns whether the mouse is inside of a wall in the first grid ** Processing line: ~ # Part of the condition that checks whether the user is removing a wall~ - Inside source: true *** True Line Result # Part of the condition that checks whether the user is removing a wall ** Processing line: ~ def mouse_inside_wall?~ - Inside source: true *** True Line Result def mouse_inside_wall? ** Processing line: ~ state.walls.each_key do | wall |~ - Inside source: true *** True Line Result state.walls.each_key do | wall | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(scale_up(wall))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(scale_up(wall)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns whether the mouse is inside of a wall in the second grid~ - Inside source: true *** True Line Result # Returns whether the mouse is inside of a wall in the second grid ** Processing line: ~ # Part of the condition that checks whether the user is removing a wall~ - Inside source: true *** True Line Result # Part of the condition that checks whether the user is removing a wall ** Processing line: ~ def mouse_inside_wall2?~ - Inside source: true *** True Line Result def mouse_inside_wall2? ** Processing line: ~ state.walls.each_key do | wall |~ - Inside source: true *** True Line Result state.walls.each_key do | wall | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(early_exit_scale_up(wall))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(early_exit_scale_up(wall)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns whether the mouse is inside of the first grid~ - Inside source: true *** True Line Result # Returns whether the mouse is inside of the first grid ** Processing line: ~ # Part of the condition that checks whether the user is adding a wall~ - Inside source: true *** True Line Result # Part of the condition that checks whether the user is adding a wall ** Processing line: ~ def mouse_inside_grid?~ - Inside source: true *** True Line Result def mouse_inside_grid? ** Processing line: ~ inputs.mouse.point.inside_rect?(scale_up(grid.rect))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(scale_up(grid.rect)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns whether the mouse is inside of the second grid~ - Inside source: true *** True Line Result # Returns whether the mouse is inside of the second grid ** Processing line: ~ # Part of the condition that checks whether the user is adding a wall~ - Inside source: true *** True Line Result # Part of the condition that checks whether the user is adding a wall ** Processing line: ~ def mouse_inside_grid2?~ - Inside source: true *** True Line Result def mouse_inside_grid2? ** Processing line: ~ inputs.mouse.point.inside_rect?(early_exit_scale_up(grid.rect))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(early_exit_scale_up(grid.rect)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These methods provide handy aliases to colors~ - Inside source: true *** True Line Result # These methods provide handy aliases to colors ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Light brown~ - Inside source: true *** True Line Result # Light brown ** Processing line: ~ def unvisited_color~ - Inside source: true *** True Line Result def unvisited_color ** Processing line: ~ [221, 212, 213]~ - Inside source: true *** True Line Result [221, 212, 213] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Camo Green~ - Inside source: true *** True Line Result # Camo Green ** Processing line: ~ def wall_color~ - Inside source: true *** True Line Result def wall_color ** Processing line: ~ [134, 134, 120]~ - Inside source: true *** True Line Result [134, 134, 120] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Pastel White~ - Inside source: true *** True Line Result # Pastel White ** Processing line: ~ def path_color~ - Inside source: true *** True Line Result def path_color ** Processing line: ~ [231, 230, 228]~ - Inside source: true *** True Line Result [231, 230, 228] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def red~ - Inside source: true *** True Line Result def red ** Processing line: ~ [255, 0, 0]~ - Inside source: true *** True Line Result [255, 0, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Makes code more concise~ - Inside source: true *** True Line Result # Makes code more concise ** Processing line: ~ def grid~ - Inside source: true *** True Line Result def grid ** Processing line: ~ state.grid~ - Inside source: true *** True Line Result state.grid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Method that is called by DragonRuby periodically~ - Inside source: true *** True Line Result # Method that is called by DragonRuby periodically ** Processing line: ~ # Used for updating animations and calculations~ - Inside source: true *** True Line Result # Used for updating animations and calculations ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Pressing r will reset the application~ - Inside source: true *** True Line Result # Pressing r will reset the application ** Processing line: ~ if args.inputs.keyboard.key_down.r~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.r ** Processing line: ~ args.gtk.reset~ - Inside source: true *** True Line Result args.gtk.reset ** Processing line: ~ reset~ - Inside source: true *** True Line Result reset ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Every tick, new args are passed, and the Breadth First Search tick is called~ - Inside source: true *** True Line Result # Every tick, new args are passed, and the Breadth First Search tick is called ** Processing line: ~ $early_exit_breadth_first_search ||= EarlyExitBreadthFirstSearch.new~ - Inside source: true *** True Line Result $early_exit_breadth_first_search ||= EarlyExitBreadthFirstSearch.new ** Processing line: ~ $early_exit_breadth_first_search.args = args~ - Inside source: true *** True Line Result $early_exit_breadth_first_search.args = args ** Processing line: ~ $early_exit_breadth_first_search.tick~ - Inside source: true *** True Line Result $early_exit_breadth_first_search.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset~ - Inside source: true *** True Line Result def reset ** Processing line: ~ $early_exit_breadth_first_search = nil~ - Inside source: true *** True Line Result $early_exit_breadth_first_search = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Path Finding Algorithms - Dijkstra - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Path Finding Algorithms - Dijkstra - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/13_path_finding_algorithms/05_dijkstra/app/main.rb~ - Inside source: true *** True Line Result # ./samples/13_path_finding_algorithms/05_dijkstra/app/main.rb ** Processing line: ~ # Demonstrates how Dijkstra's Algorithm allows movement costs to be considered~ - Inside source: true *** True Line Result # Demonstrates how Dijkstra's Algorithm allows movement costs to be considered ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html~ - Inside source: true *** True Line Result # Inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The first grid is a breadth first search with an early exit.~ - Inside source: true *** True Line Result # The first grid is a breadth first search with an early exit. ** Processing line: ~ # It shows a heat map of all the cells that were visited by the search and their relative distance.~ - Inside source: true *** True Line Result # It shows a heat map of all the cells that were visited by the search and their relative distance. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The second grid is an implementation of Dijkstra's algorithm.~ - Inside source: true *** True Line Result # The second grid is an implementation of Dijkstra's algorithm. ** Processing line: ~ # Light green cells have 5 times the movement cost of regular cells.~ - Inside source: true *** True Line Result # Light green cells have 5 times the movement cost of regular cells. ** Processing line: ~ # The heat map will darken based on movement cost.~ - Inside source: true *** True Line Result # The heat map will darken based on movement cost. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Dark green cells are walls, and the search cannot go through them.~ - Inside source: true *** True Line Result # Dark green cells are walls, and the search cannot go through them. ** Processing line: ~ class Movement_Costs~ - Inside source: true *** True Line Result class Movement_Costs ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method is called every frame/tick~ - Inside source: true *** True Line Result # This method is called every frame/tick ** Processing line: ~ # Every tick, the current state of the search is rendered on the screen,~ - Inside source: true *** True Line Result # Every tick, the current state of the search is rendered on the screen, ** Processing line: ~ # User input is processed, and~ - Inside source: true *** True Line Result # User input is processed, and ** Processing line: ~ # The next step in the search is calculated~ - Inside source: true *** True Line Result # The next step in the search is calculated ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ # Variables to edit the size and appearance of the grid~ - Inside source: true *** True Line Result # Variables to edit the size and appearance of the grid ** Processing line: ~ # Freely customizable to user's liking~ - Inside source: true *** True Line Result # Freely customizable to user's liking ** Processing line: ~ grid.width ||= 10~ - Inside source: true *** True Line Result grid.width ||= 10 ** Processing line: ~ grid.height ||= 10~ - Inside source: true *** True Line Result grid.height ||= 10 ** Processing line: ~ grid.cell_size ||= 60~ - Inside source: true *** True Line Result grid.cell_size ||= 60 ** Processing line: ~ grid.rect ||= [0, 0, grid.width, grid.height]~ - Inside source: true *** True Line Result grid.rect ||= [0, 0, grid.width, grid.height] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The location of the star and walls of the grid~ - Inside source: true *** True Line Result # The location of the star and walls of the grid ** Processing line: ~ # They can be modified to have a different initial grid~ - Inside source: true *** True Line Result # They can be modified to have a different initial grid ** Processing line: ~ # Walls are stored in a hash for quick look up when doing the search~ - Inside source: true *** True Line Result # Walls are stored in a hash for quick look up when doing the search ** Processing line: ~ state.star ||= [1, 5]~ - Inside source: true *** True Line Result state.star ||= [1, 5] ** Processing line: ~ state.target ||= [8, 4]~ - Inside source: true *** True Line Result state.target ||= [8, 4] ** Processing line: ~ state.walls ||= {[1, 1] => true, [2, 1] => true, [3, 1] => true, [1, 2] => true, [2, 2] => true, [3, 2] => true}~ - Inside source: true *** True Line Result state.walls ||= {[1, 1] => true, [2, 1] => true, [3, 1] => true, [1, 2] => true, [2, 2] => true, [3, 2] => true} ** Processing line: ~ state.hills ||= {~ - Inside source: true *** True Line Result state.hills ||= { ** Processing line: ~ [4, 1] => true,~ - Inside source: true *** True Line Result [4, 1] => true, ** Processing line: ~ [5, 1] => true,~ - Inside source: true *** True Line Result [5, 1] => true, ** Processing line: ~ [4, 2] => true,~ - Inside source: true *** True Line Result [4, 2] => true, ** Processing line: ~ [5, 2] => true,~ - Inside source: true *** True Line Result [5, 2] => true, ** Processing line: ~ [6, 2] => true,~ - Inside source: true *** True Line Result [6, 2] => true, ** Processing line: ~ [4, 3] => true,~ - Inside source: true *** True Line Result [4, 3] => true, ** Processing line: ~ [5, 3] => true,~ - Inside source: true *** True Line Result [5, 3] => true, ** Processing line: ~ [6, 3] => true,~ - Inside source: true *** True Line Result [6, 3] => true, ** Processing line: ~ [3, 4] => true,~ - Inside source: true *** True Line Result [3, 4] => true, ** Processing line: ~ [4, 4] => true,~ - Inside source: true *** True Line Result [4, 4] => true, ** Processing line: ~ [5, 4] => true,~ - Inside source: true *** True Line Result [5, 4] => true, ** Processing line: ~ [6, 4] => true,~ - Inside source: true *** True Line Result [6, 4] => true, ** Processing line: ~ [7, 4] => true,~ - Inside source: true *** True Line Result [7, 4] => true, ** Processing line: ~ [3, 5] => true,~ - Inside source: true *** True Line Result [3, 5] => true, ** Processing line: ~ [4, 5] => true,~ - Inside source: true *** True Line Result [4, 5] => true, ** Processing line: ~ [5, 5] => true,~ - Inside source: true *** True Line Result [5, 5] => true, ** Processing line: ~ [6, 5] => true,~ - Inside source: true *** True Line Result [6, 5] => true, ** Processing line: ~ [7, 5] => true,~ - Inside source: true *** True Line Result [7, 5] => true, ** Processing line: ~ [4, 6] => true,~ - Inside source: true *** True Line Result [4, 6] => true, ** Processing line: ~ [5, 6] => true,~ - Inside source: true *** True Line Result [5, 6] => true, ** Processing line: ~ [6, 6] => true,~ - Inside source: true *** True Line Result [6, 6] => true, ** Processing line: ~ [7, 6] => true,~ - Inside source: true *** True Line Result [7, 6] => true, ** Processing line: ~ [4, 7] => true,~ - Inside source: true *** True Line Result [4, 7] => true, ** Processing line: ~ [5, 7] => true,~ - Inside source: true *** True Line Result [5, 7] => true, ** Processing line: ~ [6, 7] => true,~ - Inside source: true *** True Line Result [6, 7] => true, ** Processing line: ~ [4, 8] => true,~ - Inside source: true *** True Line Result [4, 8] => true, ** Processing line: ~ [5, 8] => true,~ - Inside source: true *** True Line Result [5, 8] => true, ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # What the user is currently editing on the grid~ - Inside source: true *** True Line Result # What the user is currently editing on the grid ** Processing line: ~ # We store this value, because we want to remember the value even when~ - Inside source: true *** True Line Result # We store this value, because we want to remember the value even when ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ - Inside source: true *** True Line Result # the user's cursor is no longer over what they're interacting with, but ** Processing line: ~ # they are still clicking down on the mouse.~ - Inside source: true *** True Line Result # they are still clicking down on the mouse. ** Processing line: ~ state.user_input ||= :none~ - Inside source: true *** True Line Result state.user_input ||= :none ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Values that are used for the breadth first search~ - Inside source: true *** True Line Result # Values that are used for the breadth first search ** Processing line: ~ # Keeping track of what cells were visited prevents counting cells multiple times~ - Inside source: true *** True Line Result # Keeping track of what cells were visited prevents counting cells multiple times ** Processing line: ~ breadth_first_search.visited ||= {}~ - Inside source: true *** True Line Result breadth_first_search.visited ||= {} ** Processing line: ~ # The cells from which the breadth first search will expand~ - Inside source: true *** True Line Result # The cells from which the breadth first search will expand ** Processing line: ~ breadth_first_search.frontier ||= []~ - Inside source: true *** True Line Result breadth_first_search.frontier ||= [] ** Processing line: ~ # Keeps track of which cell all cells were searched from~ - Inside source: true *** True Line Result # Keeps track of which cell all cells were searched from ** Processing line: ~ # Used to recreate the path from the target to the star~ - Inside source: true *** True Line Result # Used to recreate the path from the target to the star ** Processing line: ~ breadth_first_search.came_from ||= {}~ - Inside source: true *** True Line Result breadth_first_search.came_from ||= {} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Keeps track of the movement cost so far to be at a cell~ - Inside source: true *** True Line Result # Keeps track of the movement cost so far to be at a cell ** Processing line: ~ # Allows the costs of new cells to be quickly calculated~ - Inside source: true *** True Line Result # Allows the costs of new cells to be quickly calculated ** Processing line: ~ # Also doubles as a way to check if cells have already been visited~ - Inside source: true *** True Line Result # Also doubles as a way to check if cells have already been visited ** Processing line: ~ dijkstra_search.cost_so_far ||= {}~ - Inside source: true *** True Line Result dijkstra_search.cost_so_far ||= {} ** Processing line: ~ # The cells from which the Dijkstra search will expand~ - Inside source: true *** True Line Result # The cells from which the Dijkstra search will expand ** Processing line: ~ dijkstra_search.frontier ||= []~ - Inside source: true *** True Line Result dijkstra_search.frontier ||= [] ** Processing line: ~ # Keeps track of which cell all cells were searched from~ - Inside source: true *** True Line Result # Keeps track of which cell all cells were searched from ** Processing line: ~ # Used to recreate the path from the target to the star~ - Inside source: true *** True Line Result # Used to recreate the path from the target to the star ** Processing line: ~ dijkstra_search.came_from ||= {}~ - Inside source: true *** True Line Result dijkstra_search.came_from ||= {} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws everything onto the screen~ - Inside source: true *** True Line Result # Draws everything onto the screen ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ render_background~ - Inside source: true *** True Line Result render_background ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_heat_maps~ - Inside source: true *** True Line Result render_heat_maps ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_star~ - Inside source: true *** True Line Result render_star ** Processing line: ~ render_target~ - Inside source: true *** True Line Result render_target ** Processing line: ~ render_hills~ - Inside source: true *** True Line Result render_hills ** Processing line: ~ render_walls~ - Inside source: true *** True Line Result render_walls ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_paths~ - Inside source: true *** True Line Result render_paths ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ # The methods below subdivide the task of drawing everything to the screen~ - Inside source: true *** True Line Result # The methods below subdivide the task of drawing everything to the screen ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws what the grid looks like with nothing on it~ - Inside source: true *** True Line Result # Draws what the grid looks like with nothing on it ** Processing line: ~ def render_background~ - Inside source: true *** True Line Result def render_background ** Processing line: ~ render_unvisited~ - Inside source: true *** True Line Result render_unvisited ** Processing line: ~ render_grid_lines~ - Inside source: true *** True Line Result render_grid_lines ** Processing line: ~ render_labels~ - Inside source: true *** True Line Result render_labels ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws two rectangles the size of the grid in the default cell color~ - Inside source: true *** True Line Result # Draws two rectangles the size of the grid in the default cell color ** Processing line: ~ # Used as part of the background~ - Inside source: true *** True Line Result # Used as part of the background ** Processing line: ~ def render_unvisited~ - Inside source: true *** True Line Result def render_unvisited ** Processing line: ~ outputs.solids << [scale_up(grid.rect), unvisited_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(grid.rect), unvisited_color] ** Processing line: ~ outputs.solids << [move_and_scale_up(grid.rect), unvisited_color]~ - Inside source: true *** True Line Result outputs.solids << [move_and_scale_up(grid.rect), unvisited_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws grid lines to show the division of the grid into cells~ - Inside source: true *** True Line Result # Draws grid lines to show the division of the grid into cells ** Processing line: ~ def render_grid_lines~ - Inside source: true *** True Line Result def render_grid_lines ** Processing line: ~ for x in 0..grid.width~ - Inside source: true *** True Line Result for x in 0..grid.width ** Processing line: ~ outputs.lines << vertical_line(x)~ - Inside source: true *** True Line Result outputs.lines << vertical_line(x) ** Processing line: ~ outputs.lines << shifted_vertical_line(x)~ - Inside source: true *** True Line Result outputs.lines << shifted_vertical_line(x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ for y in 0..grid.height~ - Inside source: true *** True Line Result for y in 0..grid.height ** Processing line: ~ outputs.lines << horizontal_line(y)~ - Inside source: true *** True Line Result outputs.lines << horizontal_line(y) ** Processing line: ~ outputs.lines << shifted_horizontal_line(y)~ - Inside source: true *** True Line Result outputs.lines << shifted_horizontal_line(y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easy way to draw vertical lines given an index for the first grid~ - Inside source: true *** True Line Result # Easy way to draw vertical lines given an index for the first grid ** Processing line: ~ def vertical_line column~ - Inside source: true *** True Line Result def vertical_line column ** Processing line: ~ scale_up([column, 0, column, grid.height])~ - Inside source: true *** True Line Result scale_up([column, 0, column, grid.height]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easy way to draw horizontal lines given an index for the second grid~ - Inside source: true *** True Line Result # Easy way to draw horizontal lines given an index for the second grid ** Processing line: ~ def horizontal_line row~ - Inside source: true *** True Line Result def horizontal_line row ** Processing line: ~ scale_up([0, row, grid.width, row])~ - Inside source: true *** True Line Result scale_up([0, row, grid.width, row]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easy way to draw vertical lines given an index for the first grid~ - Inside source: true *** True Line Result # Easy way to draw vertical lines given an index for the first grid ** Processing line: ~ def shifted_vertical_line column~ - Inside source: true *** True Line Result def shifted_vertical_line column ** Processing line: ~ scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height])~ - Inside source: true *** True Line Result scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easy way to draw horizontal lines given an index for the second grid~ - Inside source: true *** True Line Result # Easy way to draw horizontal lines given an index for the second grid ** Processing line: ~ def shifted_horizontal_line row~ - Inside source: true *** True Line Result def shifted_horizontal_line row ** Processing line: ~ scale_up([grid.width + 1, row, grid.width + grid.width + 1, row])~ - Inside source: true *** True Line Result scale_up([grid.width + 1, row, grid.width + grid.width + 1, row]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Labels the grids~ - Inside source: true *** True Line Result # Labels the grids ** Processing line: ~ def render_labels~ - Inside source: true *** True Line Result def render_labels ** Processing line: ~ outputs.labels << [175, 650, "Number of steps", 3]~ - Inside source: true *** True Line Result outputs.labels << [175, 650, "Number of steps", 3] ** Processing line: ~ outputs.labels << [925, 650, "Distance", 3]~ - Inside source: true *** True Line Result outputs.labels << [925, 650, "Distance", 3] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_paths~ - Inside source: true *** True Line Result def render_paths ** Processing line: ~ render_breadth_first_search_path~ - Inside source: true *** True Line Result render_breadth_first_search_path ** Processing line: ~ render_dijkstra_path~ - Inside source: true *** True Line Result render_dijkstra_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_heat_maps~ - Inside source: true *** True Line Result def render_heat_maps ** Processing line: ~ render_breadth_first_search_heat_map~ - Inside source: true *** True Line Result render_breadth_first_search_heat_map ** Processing line: ~ render_dijkstra_heat_map~ - Inside source: true *** True Line Result render_dijkstra_heat_map ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the breadth first search on the first grid~ - Inside source: true *** True Line Result # Renders the breadth first search on the first grid ** Processing line: ~ def render_breadth_first_search~ - Inside source: true *** True Line Result def render_breadth_first_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This heat map shows the cells explored by the breadth first search and how far they are from the star.~ - Inside source: true *** True Line Result # This heat map shows the cells explored by the breadth first search and how far they are from the star. ** Processing line: ~ def render_breadth_first_search_heat_map~ - Inside source: true *** True Line Result def render_breadth_first_search_heat_map ** Processing line: ~ # For each cell explored~ - Inside source: true *** True Line Result # For each cell explored ** Processing line: ~ breadth_first_search.visited.each_key do | visited_cell |~ - Inside source: true *** True Line Result breadth_first_search.visited.each_key do | visited_cell | ** Processing line: ~ # Find its distance from the star~ - Inside source: true *** True Line Result # Find its distance from the star ** Processing line: ~ distance = (state.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs~ - Inside source: true *** True Line Result distance = (state.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs ** Processing line: ~ max_distance = grid.width + grid.height~ - Inside source: true *** True Line Result max_distance = grid.width + grid.height ** Processing line: ~ # Get it as a percent of the maximum distance and scale to 255 for use as an alpha value~ - Inside source: true *** True Line Result # Get it as a percent of the maximum distance and scale to 255 for use as an alpha value ** Processing line: ~ alpha = 255.to_i * distance.to_i / max_distance.to_i~ - Inside source: true *** True Line Result alpha = 255.to_i * distance.to_i / max_distance.to_i ** Processing line: ~ outputs.solids << [scale_up(visited_cell), red, alpha]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(visited_cell), red, alpha] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_breadth_first_search_path~ - Inside source: true *** True Line Result def render_breadth_first_search_path ** Processing line: ~ # If the search found the target~ - Inside source: true *** True Line Result # If the search found the target ** Processing line: ~ if breadth_first_search.visited.has_key?(state.target)~ - Inside source: true *** True Line Result if breadth_first_search.visited.has_key?(state.target) ** Processing line: ~ # Start from the target~ - Inside source: true *** True Line Result # Start from the target ** Processing line: ~ endpoint = state.target~ - Inside source: true *** True Line Result endpoint = state.target ** Processing line: ~ # And the cell it came from~ - Inside source: true *** True Line Result # And the cell it came from ** Processing line: ~ next_endpoint = breadth_first_search.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = breadth_first_search.came_from[endpoint] ** Processing line: ~ while endpoint and next_endpoint~ - Inside source: true *** True Line Result while endpoint and next_endpoint ** Processing line: ~ # Draw a path between these two cells~ - Inside source: true *** True Line Result # Draw a path between these two cells ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ - Inside source: true *** True Line Result path = get_path_between(endpoint, next_endpoint) ** Processing line: ~ outputs.solids << [scale_up(path), path_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(path), path_color] ** Processing line: ~ # And get the next pair of cells~ - Inside source: true *** True Line Result # And get the next pair of cells ** Processing line: ~ endpoint = next_endpoint~ - Inside source: true *** True Line Result endpoint = next_endpoint ** Processing line: ~ next_endpoint = breadth_first_search.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = breadth_first_search.came_from[endpoint] ** Processing line: ~ # Continue till there are no more cells~ - Inside source: true *** True Line Result # Continue till there are no more cells ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the Dijkstra search on the second grid~ - Inside source: true *** True Line Result # Renders the Dijkstra search on the second grid ** Processing line: ~ def render_dijkstra~ - Inside source: true *** True Line Result def render_dijkstra ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_dijkstra_heat_map~ - Inside source: true *** True Line Result def render_dijkstra_heat_map ** Processing line: ~ dijkstra_search.cost_so_far.each do |visited_cell, cost|~ - Inside source: true *** True Line Result dijkstra_search.cost_so_far.each do |visited_cell, cost| ** Processing line: ~ max_cost = (grid.width + grid.height) #* 5~ - Inside source: true *** True Line Result max_cost = (grid.width + grid.height) #* 5 ** Processing line: ~ alpha = 255.to_i * cost.to_i / max_cost.to_i~ - Inside source: true *** True Line Result alpha = 255.to_i * cost.to_i / max_cost.to_i ** Processing line: ~ outputs.solids << [move_and_scale_up(visited_cell), red, alpha]~ - Inside source: true *** True Line Result outputs.solids << [move_and_scale_up(visited_cell), red, alpha] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_dijkstra_path~ - Inside source: true *** True Line Result def render_dijkstra_path ** Processing line: ~ # If the search found the target~ - Inside source: true *** True Line Result # If the search found the target ** Processing line: ~ if dijkstra_search.came_from.has_key?(state.target)~ - Inside source: true *** True Line Result if dijkstra_search.came_from.has_key?(state.target) ** Processing line: ~ # Get the target and the cell it came from~ - Inside source: true *** True Line Result # Get the target and the cell it came from ** Processing line: ~ endpoint = state.target~ - Inside source: true *** True Line Result endpoint = state.target ** Processing line: ~ next_endpoint = dijkstra_search.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = dijkstra_search.came_from[endpoint] ** Processing line: ~ while endpoint and next_endpoint~ - Inside source: true *** True Line Result while endpoint and next_endpoint ** Processing line: ~ # Draw a path between them~ - Inside source: true *** True Line Result # Draw a path between them ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ - Inside source: true *** True Line Result path = get_path_between(endpoint, next_endpoint) ** Processing line: ~ outputs.solids << [move_and_scale_up(path), path_color]~ - Inside source: true *** True Line Result outputs.solids << [move_and_scale_up(path), path_color] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Shift one cell down the path~ - Inside source: true *** True Line Result # Shift one cell down the path ** Processing line: ~ endpoint = next_endpoint~ - Inside source: true *** True Line Result endpoint = next_endpoint ** Processing line: ~ next_endpoint = dijkstra_search.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = dijkstra_search.came_from[endpoint] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Repeat till the end of the path~ - Inside source: true *** True Line Result # Repeat till the end of the path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the star on both grids~ - Inside source: true *** True Line Result # Renders the star on both grids ** Processing line: ~ def render_star~ - Inside source: true *** True Line Result def render_star ** Processing line: ~ outputs.sprites << [scale_up(state.star), 'star.png']~ - Inside source: true *** True Line Result outputs.sprites << [scale_up(state.star), 'star.png'] ** Processing line: ~ outputs.sprites << [move_and_scale_up(state.star), 'star.png']~ - Inside source: true *** True Line Result outputs.sprites << [move_and_scale_up(state.star), 'star.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the target on both grids~ - Inside source: true *** True Line Result # Renders the target on both grids ** Processing line: ~ def render_target~ - Inside source: true *** True Line Result def render_target ** Processing line: ~ outputs.sprites << [scale_up(state.target), 'target.png']~ - Inside source: true *** True Line Result outputs.sprites << [scale_up(state.target), 'target.png'] ** Processing line: ~ outputs.sprites << [move_and_scale_up(state.target), 'target.png']~ - Inside source: true *** True Line Result outputs.sprites << [move_and_scale_up(state.target), 'target.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_hills~ - Inside source: true *** True Line Result def render_hills ** Processing line: ~ state.hills.each_key do |hill|~ - Inside source: true *** True Line Result state.hills.each_key do |hill| ** Processing line: ~ outputs.solids << [scale_up(hill), hill_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(hill), hill_color] ** Processing line: ~ outputs.solids << [move_and_scale_up(hill), hill_color]~ - Inside source: true *** True Line Result outputs.solids << [move_and_scale_up(hill), hill_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draws the walls on both grids~ - Inside source: true *** True Line Result # Draws the walls on both grids ** Processing line: ~ def render_walls~ - Inside source: true *** True Line Result def render_walls ** Processing line: ~ state.walls.each_key do |wall|~ - Inside source: true *** True Line Result state.walls.each_key do |wall| ** Processing line: ~ outputs.solids << [scale_up(wall), wall_color]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(wall), wall_color] ** Processing line: ~ outputs.solids << [move_and_scale_up(wall), wall_color]~ - Inside source: true *** True Line Result outputs.solids << [move_and_scale_up(wall), wall_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_path_between(cell_one, cell_two)~ - Inside source: true *** True Line Result def get_path_between(cell_one, cell_two) ** Processing line: ~ path = nil~ - Inside source: true *** True Line Result path = nil ** Processing line: ~ if cell_one.x == cell_two.x~ - Inside source: true *** True Line Result if cell_one.x == cell_two.x ** Processing line: ~ if cell_one.y < cell_two.y~ - Inside source: true *** True Line Result if cell_one.y < cell_two.y ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 0.4, 1.4]~ - Inside source: true *** True Line Result path = [cell_one.x + 0.3, cell_one.y + 0.3, 0.4, 1.4] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 0.4, 1.4]~ - Inside source: true *** True Line Result path = [cell_two.x + 0.3, cell_two.y + 0.3, 0.4, 1.4] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ if cell_one.x < cell_two.x~ - Inside source: true *** True Line Result if cell_one.x < cell_two.x ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 1.4, 0.4]~ - Inside source: true *** True Line Result path = [cell_one.x + 0.3, cell_one.y + 0.3, 1.4, 0.4] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 1.4, 0.4]~ - Inside source: true *** True Line Result path = [cell_two.x + 0.3, cell_two.y + 0.3, 1.4, 0.4] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ path~ - Inside source: true *** True Line Result path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Representation of how far away visited cells are from the star~ - Inside source: true *** True Line Result # Representation of how far away visited cells are from the star ** Processing line: ~ # Replaces the render_visited method~ - Inside source: true *** True Line Result # Replaces the render_visited method ** Processing line: ~ # Visually demonstrates the effectiveness of early exit for pathfinding~ - Inside source: true *** True Line Result # Visually demonstrates the effectiveness of early exit for pathfinding ** Processing line: ~ def render_breadth_first_search_heat_map~ - Inside source: true *** True Line Result def render_breadth_first_search_heat_map ** Processing line: ~ breadth_first_search.visited.each_key do | visited_cell |~ - Inside source: true *** True Line Result breadth_first_search.visited.each_key do | visited_cell | ** Processing line: ~ distance = (state.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs~ - Inside source: true *** True Line Result distance = (state.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs ** Processing line: ~ max_distance = grid.width + grid.height~ - Inside source: true *** True Line Result max_distance = grid.width + grid.height ** Processing line: ~ alpha = 255.to_i * distance.to_i / max_distance.to_i~ - Inside source: true *** True Line Result alpha = 255.to_i * distance.to_i / max_distance.to_i ** Processing line: ~ outputs.solids << [scale_up(visited_cell), red, alpha]~ - Inside source: true *** True Line Result outputs.solids << [scale_up(visited_cell), red, alpha] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Translates the given cell grid.width + 1 to the right and then scales up~ - Inside source: true *** True Line Result # Translates the given cell grid.width + 1 to the right and then scales up ** Processing line: ~ # Used to draw cells for the second grid~ - Inside source: true *** True Line Result # Used to draw cells for the second grid ** Processing line: ~ # This method does not work for lines,~ - Inside source: true *** True Line Result # This method does not work for lines, ** Processing line: ~ # so separate methods exist for the grid lines~ - Inside source: true *** True Line Result # so separate methods exist for the grid lines ** Processing line: ~ def move_and_scale_up(cell)~ - Inside source: true *** True Line Result def move_and_scale_up(cell) ** Processing line: ~ cell_clone = cell.clone~ - Inside source: true *** True Line Result cell_clone = cell.clone ** Processing line: ~ cell_clone.x += grid.width + 1~ - Inside source: true *** True Line Result cell_clone.x += grid.width + 1 ** Processing line: ~ scale_up(cell_clone)~ - Inside source: true *** True Line Result scale_up(cell_clone) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # In code, the cells are represented as 1x1 rectangles~ - Inside source: true *** True Line Result # In code, the cells are represented as 1x1 rectangles ** Processing line: ~ # When drawn, the cells are larger than 1x1 rectangles~ - Inside source: true *** True Line Result # When drawn, the cells are larger than 1x1 rectangles ** Processing line: ~ # This method is used to scale up cells, and lines~ - Inside source: true *** True Line Result # This method is used to scale up cells, and lines ** Processing line: ~ # Objects are scaled up according to the grid.cell_size variable~ - Inside source: true *** True Line Result # Objects are scaled up according to the grid.cell_size variable ** Processing line: ~ # This allows for easy customization of the visual scale of the grid~ - Inside source: true *** True Line Result # This allows for easy customization of the visual scale of the grid ** Processing line: ~ def scale_up(cell)~ - Inside source: true *** True Line Result def scale_up(cell) ** Processing line: ~ # Prevents the original value of cell from being edited~ - Inside source: true *** True Line Result # Prevents the original value of cell from being edited ** Processing line: ~ cell = cell.clone~ - Inside source: true *** True Line Result cell = cell.clone ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If cell is just an x and y coordinate~ - Inside source: true *** True Line Result # If cell is just an x and y coordinate ** Processing line: ~ if cell.size == 2~ - Inside source: true *** True Line Result if cell.size == 2 ** Processing line: ~ # Add a width and height of 1~ - Inside source: true *** True Line Result # Add a width and height of 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Scale all the values up~ - Inside source: true *** True Line Result # Scale all the values up ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ - Inside source: true *** True Line Result cell.map! { |value| value * grid.cell_size } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the scaled up cell~ - Inside source: true *** True Line Result # Returns the scaled up cell ** Processing line: ~ cell~ - Inside source: true *** True Line Result cell ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Handles user input every tick so the grid can be edited~ - Inside source: true *** True Line Result # Handles user input every tick so the grid can be edited ** Processing line: ~ # Separate input detection and processing is needed~ - Inside source: true *** True Line Result # Separate input detection and processing is needed ** Processing line: ~ # For example: Adding walls is started by clicking down on a hill,~ - Inside source: true *** True Line Result # For example: Adding walls is started by clicking down on a hill, ** Processing line: ~ # but the mouse doesn't need to remain over hills to add walls~ - Inside source: true *** True Line Result # but the mouse doesn't need to remain over hills to add walls ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ # If the mouse was lifted this tick~ - Inside source: true *** True Line Result # If the mouse was lifted this tick ** Processing line: ~ if inputs.mouse.up~ - Inside source: true *** True Line Result if inputs.mouse.up ** Processing line: ~ # Set current input to none~ - Inside source: true *** True Line Result # Set current input to none ** Processing line: ~ state.user_input = :none~ - Inside source: true *** True Line Result state.user_input = :none ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the mouse was clicked this tick~ - Inside source: true *** True Line Result # If the mouse was clicked this tick ** Processing line: ~ if inputs.mouse.down~ - Inside source: true *** True Line Result if inputs.mouse.down ** Processing line: ~ # Determine what the user is editing and edit the state.user_input variable~ - Inside source: true *** True Line Result # Determine what the user is editing and edit the state.user_input variable ** Processing line: ~ determine_input~ - Inside source: true *** True Line Result determine_input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Process user input based on user_input variable and current mouse position~ - Inside source: true *** True Line Result # Process user input based on user_input variable and current mouse position ** Processing line: ~ process_input~ - Inside source: true *** True Line Result process_input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Determines what the user is editing and stores the value~ - Inside source: true *** True Line Result # Determines what the user is editing and stores the value ** Processing line: ~ # This method is called the tick the mouse is clicked~ - Inside source: true *** True Line Result # This method is called the tick the mouse is clicked ** Processing line: ~ # Storing the value allows the user to continue the same edit as long as the~ - Inside source: true *** True Line Result # Storing the value allows the user to continue the same edit as long as the ** Processing line: ~ # mouse left click is held~ - Inside source: true *** True Line Result # mouse left click is held ** Processing line: ~ def determine_input~ - Inside source: true *** True Line Result def determine_input ** Processing line: ~ # If the mouse is over the star in the first grid~ - Inside source: true *** True Line Result # If the mouse is over the star in the first grid ** Processing line: ~ if mouse_over_star?~ - Inside source: true *** True Line Result if mouse_over_star? ** Processing line: ~ # The user is editing the star from the first grid~ - Inside source: true *** True Line Result # The user is editing the star from the first grid ** Processing line: ~ state.user_input = :star~ - Inside source: true *** True Line Result state.user_input = :star ** Processing line: ~ # If the mouse is over the star in the second grid~ - Inside source: true *** True Line Result # If the mouse is over the star in the second grid ** Processing line: ~ elsif mouse_over_star2?~ - Inside source: true *** True Line Result elsif mouse_over_star2? ** Processing line: ~ # The user is editing the star from the second grid~ - Inside source: true *** True Line Result # The user is editing the star from the second grid ** Processing line: ~ state.user_input = :star2~ - Inside source: true *** True Line Result state.user_input = :star2 ** Processing line: ~ # If the mouse is over the target in the first grid~ - Inside source: true *** True Line Result # If the mouse is over the target in the first grid ** Processing line: ~ elsif mouse_over_target?~ - Inside source: true *** True Line Result elsif mouse_over_target? ** Processing line: ~ # The user is editing the target from the first grid~ - Inside source: true *** True Line Result # The user is editing the target from the first grid ** Processing line: ~ state.user_input = :target~ - Inside source: true *** True Line Result state.user_input = :target ** Processing line: ~ # If the mouse is over the target in the second grid~ - Inside source: true *** True Line Result # If the mouse is over the target in the second grid ** Processing line: ~ elsif mouse_over_target2?~ - Inside source: true *** True Line Result elsif mouse_over_target2? ** Processing line: ~ # The user is editing the target from the second grid~ - Inside source: true *** True Line Result # The user is editing the target from the second grid ** Processing line: ~ state.user_input = :target2~ - Inside source: true *** True Line Result state.user_input = :target2 ** Processing line: ~ # If the mouse is over a wall in the first grid~ - Inside source: true *** True Line Result # If the mouse is over a wall in the first grid ** Processing line: ~ elsif mouse_over_wall?~ - Inside source: true *** True Line Result elsif mouse_over_wall? ** Processing line: ~ # The user is removing a wall from the first grid~ - Inside source: true *** True Line Result # The user is removing a wall from the first grid ** Processing line: ~ state.user_input = :remove_wall~ - Inside source: true *** True Line Result state.user_input = :remove_wall ** Processing line: ~ # If the mouse is over a wall in the second grid~ - Inside source: true *** True Line Result # If the mouse is over a wall in the second grid ** Processing line: ~ elsif mouse_over_wall2?~ - Inside source: true *** True Line Result elsif mouse_over_wall2? ** Processing line: ~ # The user is removing a wall from the second grid~ - Inside source: true *** True Line Result # The user is removing a wall from the second grid ** Processing line: ~ state.user_input = :remove_wall2~ - Inside source: true *** True Line Result state.user_input = :remove_wall2 ** Processing line: ~ # If the mouse is over a hill in the first grid~ - Inside source: true *** True Line Result # If the mouse is over a hill in the first grid ** Processing line: ~ elsif mouse_over_hill?~ - Inside source: true *** True Line Result elsif mouse_over_hill? ** Processing line: ~ # The user is adding a wall from the first grid~ - Inside source: true *** True Line Result # The user is adding a wall from the first grid ** Processing line: ~ state.user_input = :add_wall~ - Inside source: true *** True Line Result state.user_input = :add_wall ** Processing line: ~ # If the mouse is over a hill in the second grid~ - Inside source: true *** True Line Result # If the mouse is over a hill in the second grid ** Processing line: ~ elsif mouse_over_hill2?~ - Inside source: true *** True Line Result elsif mouse_over_hill2? ** Processing line: ~ # The user is adding a wall from the second grid~ - Inside source: true *** True Line Result # The user is adding a wall from the second grid ** Processing line: ~ state.user_input = :add_wall2~ - Inside source: true *** True Line Result state.user_input = :add_wall2 ** Processing line: ~ # If the mouse is over the first grid~ - Inside source: true *** True Line Result # If the mouse is over the first grid ** Processing line: ~ elsif mouse_over_grid?~ - Inside source: true *** True Line Result elsif mouse_over_grid? ** Processing line: ~ # The user is adding a hill from the first grid~ - Inside source: true *** True Line Result # The user is adding a hill from the first grid ** Processing line: ~ state.user_input = :add_hill~ - Inside source: true *** True Line Result state.user_input = :add_hill ** Processing line: ~ # If the mouse is over the second grid~ - Inside source: true *** True Line Result # If the mouse is over the second grid ** Processing line: ~ elsif mouse_over_grid2?~ - Inside source: true *** True Line Result elsif mouse_over_grid2? ** Processing line: ~ # The user is adding a hill from the second grid~ - Inside source: true *** True Line Result # The user is adding a hill from the second grid ** Processing line: ~ state.user_input = :add_hill2~ - Inside source: true *** True Line Result state.user_input = :add_hill2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Processes click and drag based on what the user is currently dragging~ - Inside source: true *** True Line Result # Processes click and drag based on what the user is currently dragging ** Processing line: ~ def process_input~ - Inside source: true *** True Line Result def process_input ** Processing line: ~ if state.user_input == :star~ - Inside source: true *** True Line Result if state.user_input == :star ** Processing line: ~ input_star~ - Inside source: true *** True Line Result input_star ** Processing line: ~ elsif state.user_input == :star2~ - Inside source: true *** True Line Result elsif state.user_input == :star2 ** Processing line: ~ input_star2~ - Inside source: true *** True Line Result input_star2 ** Processing line: ~ elsif state.user_input == :target~ - Inside source: true *** True Line Result elsif state.user_input == :target ** Processing line: ~ input_target~ - Inside source: true *** True Line Result input_target ** Processing line: ~ elsif state.user_input == :target2~ - Inside source: true *** True Line Result elsif state.user_input == :target2 ** Processing line: ~ input_target2~ - Inside source: true *** True Line Result input_target2 ** Processing line: ~ elsif state.user_input == :remove_wall~ - Inside source: true *** True Line Result elsif state.user_input == :remove_wall ** Processing line: ~ input_remove_wall~ - Inside source: true *** True Line Result input_remove_wall ** Processing line: ~ elsif state.user_input == :remove_wall2~ - Inside source: true *** True Line Result elsif state.user_input == :remove_wall2 ** Processing line: ~ input_remove_wall2~ - Inside source: true *** True Line Result input_remove_wall2 ** Processing line: ~ elsif state.user_input == :add_hill~ - Inside source: true *** True Line Result elsif state.user_input == :add_hill ** Processing line: ~ input_add_hill~ - Inside source: true *** True Line Result input_add_hill ** Processing line: ~ elsif state.user_input == :add_hill2~ - Inside source: true *** True Line Result elsif state.user_input == :add_hill2 ** Processing line: ~ input_add_hill2~ - Inside source: true *** True Line Result input_add_hill2 ** Processing line: ~ elsif state.user_input == :add_wall~ - Inside source: true *** True Line Result elsif state.user_input == :add_wall ** Processing line: ~ input_add_wall~ - Inside source: true *** True Line Result input_add_wall ** Processing line: ~ elsif state.user_input == :add_wall2~ - Inside source: true *** True Line Result elsif state.user_input == :add_wall2 ** Processing line: ~ input_add_wall2~ - Inside source: true *** True Line Result input_add_wall2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the two searches~ - Inside source: true *** True Line Result # Calculates the two searches ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ # If the searches have not started~ - Inside source: true *** True Line Result # If the searches have not started ** Processing line: ~ if breadth_first_search.visited.empty?~ - Inside source: true *** True Line Result if breadth_first_search.visited.empty? ** Processing line: ~ # Calculate the two searches~ - Inside source: true *** True Line Result # Calculate the two searches ** Processing line: ~ calc_breadth_first~ - Inside source: true *** True Line Result calc_breadth_first ** Processing line: ~ calc_dijkstra~ - Inside source: true *** True Line Result calc_dijkstra ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_breadth_first~ - Inside source: true *** True Line Result def calc_breadth_first ** Processing line: ~ # Sets up the Breadth First Search~ - Inside source: true *** True Line Result # Sets up the Breadth First Search ** Processing line: ~ breadth_first_search.visited[state.star] = true~ - Inside source: true *** True Line Result breadth_first_search.visited[state.star] = true ** Processing line: ~ breadth_first_search.frontier << state.star~ - Inside source: true *** True Line Result breadth_first_search.frontier << state.star ** Processing line: ~ breadth_first_search.came_from[state.star] = nil~ - Inside source: true *** True Line Result breadth_first_search.came_from[state.star] = nil ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ until breadth_first_search.frontier.empty?~ - Inside source: true *** True Line Result until breadth_first_search.frontier.empty? ** Processing line: ~ return if breadth_first_search.visited.has_key?(state.target)~ - Inside source: true *** True Line Result return if breadth_first_search.visited.has_key?(state.target) ** Processing line: ~ # A step in the search~ - Inside source: true *** True Line Result # A step in the search ** Processing line: ~ # Takes the next frontier cell~ - Inside source: true *** True Line Result # Takes the next frontier cell ** Processing line: ~ new_frontier = breadth_first_search.frontier.shift~ - Inside source: true *** True Line Result new_frontier = breadth_first_search.frontier.shift ** Processing line: ~ # For each of its neighbors~ - Inside source: true *** True Line Result # For each of its neighbors ** Processing line: ~ adjacent_neighbors(new_frontier).each do | neighbor |~ - Inside source: true *** True Line Result adjacent_neighbors(new_frontier).each do | neighbor | ** Processing line: ~ # That have not been visited and are not walls~ - Inside source: true *** True Line Result # That have not been visited and are not walls ** Processing line: ~ unless breadth_first_search.visited.has_key?(neighbor) || state.walls.has_key?(neighbor)~ - Inside source: true *** True Line Result unless breadth_first_search.visited.has_key?(neighbor) || state.walls.has_key?(neighbor) ** Processing line: ~ # Add them to the frontier and mark them as visited in the first grid~ - Inside source: true *** True Line Result # Add them to the frontier and mark them as visited in the first grid ** Processing line: ~ breadth_first_search.visited[neighbor] = true~ - Inside source: true *** True Line Result breadth_first_search.visited[neighbor] = true ** Processing line: ~ breadth_first_search.frontier << neighbor~ - Inside source: true *** True Line Result breadth_first_search.frontier << neighbor ** Processing line: ~ # Remember which cell the neighbor came from~ - Inside source: true *** True Line Result # Remember which cell the neighbor came from ** Processing line: ~ breadth_first_search.came_from[neighbor] = new_frontier~ - Inside source: true *** True Line Result breadth_first_search.came_from[neighbor] = new_frontier ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the Dijkstra Search from the beginning to the end~ - Inside source: true *** True Line Result # Calculates the Dijkstra Search from the beginning to the end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_dijkstra~ - Inside source: true *** True Line Result def calc_dijkstra ** Processing line: ~ # The initial values for the Dijkstra search~ - Inside source: true *** True Line Result # The initial values for the Dijkstra search ** Processing line: ~ dijkstra_search.frontier << [state.star, 0]~ - Inside source: true *** True Line Result dijkstra_search.frontier << [state.star, 0] ** Processing line: ~ dijkstra_search.came_from[state.star] = nil~ - Inside source: true *** True Line Result dijkstra_search.came_from[state.star] = nil ** Processing line: ~ dijkstra_search.cost_so_far[state.star] = 0~ - Inside source: true *** True Line Result dijkstra_search.cost_so_far[state.star] = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Until their are no more cells to be explored~ - Inside source: true *** True Line Result # Until their are no more cells to be explored ** Processing line: ~ until dijkstra_search.frontier.empty?~ - Inside source: true *** True Line Result until dijkstra_search.frontier.empty? ** Processing line: ~ # Get the next cell to be explored from~ - Inside source: true *** True Line Result # Get the next cell to be explored from ** Processing line: ~ # We get the first element of the array which is the cell. The second element is the priority.~ - Inside source: true *** True Line Result # We get the first element of the array which is the cell. The second element is the priority. ** Processing line: ~ current = dijkstra_search.frontier.shift[0]~ - Inside source: true *** True Line Result current = dijkstra_search.frontier.shift[0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Stop the search if we found the target~ - Inside source: true *** True Line Result # Stop the search if we found the target ** Processing line: ~ return if current == state.target~ - Inside source: true *** True Line Result return if current == state.target ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # For each of the neighbors~ - Inside source: true *** True Line Result # For each of the neighbors ** Processing line: ~ adjacent_neighbors(current).each do | neighbor |~ - Inside source: true *** True Line Result adjacent_neighbors(current).each do | neighbor | ** Processing line: ~ # Unless this cell is a wall or has already been explored.~ - Inside source: true *** True Line Result # Unless this cell is a wall or has already been explored. ** Processing line: ~ unless dijkstra_search.came_from.has_key?(neighbor) or state.walls.has_key?(neighbor)~ - Inside source: true *** True Line Result unless dijkstra_search.came_from.has_key?(neighbor) or state.walls.has_key?(neighbor) ** Processing line: ~ # Calculate the movement cost of getting to this cell and memo~ - Inside source: true *** True Line Result # Calculate the movement cost of getting to this cell and memo ** Processing line: ~ new_cost = dijkstra_search.cost_so_far[current] + cost(neighbor)~ - Inside source: true *** True Line Result new_cost = dijkstra_search.cost_so_far[current] + cost(neighbor) ** Processing line: ~ dijkstra_search.cost_so_far[neighbor] = new_cost~ - Inside source: true *** True Line Result dijkstra_search.cost_so_far[neighbor] = new_cost ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Add this neighbor to the cells too be explored~ - Inside source: true *** True Line Result # Add this neighbor to the cells too be explored ** Processing line: ~ dijkstra_search.frontier << [neighbor, new_cost]~ - Inside source: true *** True Line Result dijkstra_search.frontier << [neighbor, new_cost] ** Processing line: ~ dijkstra_search.came_from[neighbor] = current~ - Inside source: true *** True Line Result dijkstra_search.came_from[neighbor] = current ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sort the frontier so exploration occurs that have a low cost so far.~ - Inside source: true *** True Line Result # Sort the frontier so exploration occurs that have a low cost so far. ** Processing line: ~ # My implementation of a priority queue~ - Inside source: true *** True Line Result # My implementation of a priority queue ** Processing line: ~ dijkstra_search.frontier = dijkstra_search.frontier.sort_by {|cell, priority| priority}~ - Inside source: true *** True Line Result dijkstra_search.frontier = dijkstra_search.frontier.sort_by {|cell, priority| priority} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def cost(cell)~ - Inside source: true *** True Line Result def cost(cell) ** Processing line: ~ if state.hills.has_key?(cell)~ - Inside source: true *** True Line Result if state.hills.has_key?(cell) ** Processing line: ~ return 5~ - Inside source: true *** True Line Result return 5 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return 1~ - Inside source: true *** True Line Result return 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the star to the cell closest to the mouse in the first grid~ - Inside source: true *** True Line Result # Moves the star to the cell closest to the mouse in the first grid ** Processing line: ~ # Only resets the search if the star changes position~ - Inside source: true *** True Line Result # Only resets the search if the star changes position ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ - Inside source: true *** True Line Result # Called whenever the user is editing the star (puts mouse down on star) ** Processing line: ~ def input_star~ - Inside source: true *** True Line Result def input_star ** Processing line: ~ old_star = state.star.clone~ - Inside source: true *** True Line Result old_star = state.star.clone ** Processing line: ~ unless cell_closest_to_mouse == state.target~ - Inside source: true *** True Line Result unless cell_closest_to_mouse == state.target ** Processing line: ~ state.star = cell_closest_to_mouse~ - Inside source: true *** True Line Result state.star = cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_star == state.star~ - Inside source: true *** True Line Result unless old_star == state.star ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the star to the cell closest to the mouse in the second grid~ - Inside source: true *** True Line Result # Moves the star to the cell closest to the mouse in the second grid ** Processing line: ~ # Only resets the search if the star changes position~ - Inside source: true *** True Line Result # Only resets the search if the star changes position ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ - Inside source: true *** True Line Result # Called whenever the user is editing the star (puts mouse down on star) ** Processing line: ~ def input_star2~ - Inside source: true *** True Line Result def input_star2 ** Processing line: ~ old_star = state.star.clone~ - Inside source: true *** True Line Result old_star = state.star.clone ** Processing line: ~ unless cell_closest_to_mouse2 == state.target~ - Inside source: true *** True Line Result unless cell_closest_to_mouse2 == state.target ** Processing line: ~ state.star = cell_closest_to_mouse2~ - Inside source: true *** True Line Result state.star = cell_closest_to_mouse2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_star == state.star~ - Inside source: true *** True Line Result unless old_star == state.star ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the target to the grid closest to the mouse in the first grid~ - Inside source: true *** True Line Result # Moves the target to the grid closest to the mouse in the first grid ** Processing line: ~ # Only reset_searchs the search if the target changes position~ - Inside source: true *** True Line Result # Only reset_searchs the search if the target changes position ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ - Inside source: true *** True Line Result # Called whenever the user is editing the target (puts mouse down on target) ** Processing line: ~ def input_target~ - Inside source: true *** True Line Result def input_target ** Processing line: ~ old_target = state.target.clone~ - Inside source: true *** True Line Result old_target = state.target.clone ** Processing line: ~ unless cell_closest_to_mouse == state.star~ - Inside source: true *** True Line Result unless cell_closest_to_mouse == state.star ** Processing line: ~ state.target = cell_closest_to_mouse~ - Inside source: true *** True Line Result state.target = cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_target == state.target~ - Inside source: true *** True Line Result unless old_target == state.target ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the target to the cell closest to the mouse in the second grid~ - Inside source: true *** True Line Result # Moves the target to the cell closest to the mouse in the second grid ** Processing line: ~ # Only reset_searchs the search if the target changes position~ - Inside source: true *** True Line Result # Only reset_searchs the search if the target changes position ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ - Inside source: true *** True Line Result # Called whenever the user is editing the target (puts mouse down on target) ** Processing line: ~ def input_target2~ - Inside source: true *** True Line Result def input_target2 ** Processing line: ~ old_target = state.target.clone~ - Inside source: true *** True Line Result old_target = state.target.clone ** Processing line: ~ unless cell_closest_to_mouse2 == state.star~ - Inside source: true *** True Line Result unless cell_closest_to_mouse2 == state.star ** Processing line: ~ state.target = cell_closest_to_mouse2~ - Inside source: true *** True Line Result state.target = cell_closest_to_mouse2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_target == state.target~ - Inside source: true *** True Line Result unless old_target == state.target ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Removes walls in the first grid that are under the cursor~ - Inside source: true *** True Line Result # Removes walls in the first grid that are under the cursor ** Processing line: ~ def input_remove_wall~ - Inside source: true *** True Line Result def input_remove_wall ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ - Inside source: true *** True Line Result # The mouse needs to be inside the grid, because we only want to remove walls ** Processing line: ~ # the cursor is directly over~ - Inside source: true *** True Line Result # the cursor is directly over ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ - Inside source: true *** True Line Result # Recalculations should only occur when a wall is actually deleted ** Processing line: ~ if mouse_over_grid?~ - Inside source: true *** True Line Result if mouse_over_grid? ** Processing line: ~ if state.walls.has_key?(cell_closest_to_mouse) or state.hills.has_key?(cell_closest_to_mouse)~ - Inside source: true *** True Line Result if state.walls.has_key?(cell_closest_to_mouse) or state.hills.has_key?(cell_closest_to_mouse) ** Processing line: ~ state.walls.delete(cell_closest_to_mouse)~ - Inside source: true *** True Line Result state.walls.delete(cell_closest_to_mouse) ** Processing line: ~ state.hills.delete(cell_closest_to_mouse)~ - Inside source: true *** True Line Result state.hills.delete(cell_closest_to_mouse) ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Removes walls in the second grid that are under the cursor~ - Inside source: true *** True Line Result # Removes walls in the second grid that are under the cursor ** Processing line: ~ def input_remove_wall2~ - Inside source: true *** True Line Result def input_remove_wall2 ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ - Inside source: true *** True Line Result # The mouse needs to be inside the grid, because we only want to remove walls ** Processing line: ~ # the cursor is directly over~ - Inside source: true *** True Line Result # the cursor is directly over ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ - Inside source: true *** True Line Result # Recalculations should only occur when a wall is actually deleted ** Processing line: ~ if mouse_over_grid2?~ - Inside source: true *** True Line Result if mouse_over_grid2? ** Processing line: ~ if state.walls.has_key?(cell_closest_to_mouse2) or state.hills.has_key?(cell_closest_to_mouse2)~ - Inside source: true *** True Line Result if state.walls.has_key?(cell_closest_to_mouse2) or state.hills.has_key?(cell_closest_to_mouse2) ** Processing line: ~ state.walls.delete(cell_closest_to_mouse2)~ - Inside source: true *** True Line Result state.walls.delete(cell_closest_to_mouse2) ** Processing line: ~ state.hills.delete(cell_closest_to_mouse2)~ - Inside source: true *** True Line Result state.hills.delete(cell_closest_to_mouse2) ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds a hill in the first grid in the cell the mouse is over~ - Inside source: true *** True Line Result # Adds a hill in the first grid in the cell the mouse is over ** Processing line: ~ def input_add_hill~ - Inside source: true *** True Line Result def input_add_hill ** Processing line: ~ if mouse_over_grid?~ - Inside source: true *** True Line Result if mouse_over_grid? ** Processing line: ~ unless state.hills.has_key?(cell_closest_to_mouse)~ - Inside source: true *** True Line Result unless state.hills.has_key?(cell_closest_to_mouse) ** Processing line: ~ state.hills[cell_closest_to_mouse] = true~ - Inside source: true *** True Line Result state.hills[cell_closest_to_mouse] = true ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds a hill in the second grid in the cell the mouse is over~ - Inside source: true *** True Line Result # Adds a hill in the second grid in the cell the mouse is over ** Processing line: ~ def input_add_hill2~ - Inside source: true *** True Line Result def input_add_hill2 ** Processing line: ~ if mouse_over_grid2?~ - Inside source: true *** True Line Result if mouse_over_grid2? ** Processing line: ~ unless state.hills.has_key?(cell_closest_to_mouse2)~ - Inside source: true *** True Line Result unless state.hills.has_key?(cell_closest_to_mouse2) ** Processing line: ~ state.hills[cell_closest_to_mouse2] = true~ - Inside source: true *** True Line Result state.hills[cell_closest_to_mouse2] = true ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds a wall in the first grid in the cell the mouse is over~ - Inside source: true *** True Line Result # Adds a wall in the first grid in the cell the mouse is over ** Processing line: ~ def input_add_wall~ - Inside source: true *** True Line Result def input_add_wall ** Processing line: ~ if mouse_over_grid?~ - Inside source: true *** True Line Result if mouse_over_grid? ** Processing line: ~ unless state.walls.has_key?(cell_closest_to_mouse)~ - Inside source: true *** True Line Result unless state.walls.has_key?(cell_closest_to_mouse) ** Processing line: ~ state.hills.delete(cell_closest_to_mouse)~ - Inside source: true *** True Line Result state.hills.delete(cell_closest_to_mouse) ** Processing line: ~ state.walls[cell_closest_to_mouse] = true~ - Inside source: true *** True Line Result state.walls[cell_closest_to_mouse] = true ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds a wall in the second grid in the cell the mouse is over~ - Inside source: true *** True Line Result # Adds a wall in the second grid in the cell the mouse is over ** Processing line: ~ def input_add_wall2~ - Inside source: true *** True Line Result def input_add_wall2 ** Processing line: ~ if mouse_over_grid2?~ - Inside source: true *** True Line Result if mouse_over_grid2? ** Processing line: ~ unless state.walls.has_key?(cell_closest_to_mouse2)~ - Inside source: true *** True Line Result unless state.walls.has_key?(cell_closest_to_mouse2) ** Processing line: ~ state.hills.delete(cell_closest_to_mouse2)~ - Inside source: true *** True Line Result state.hills.delete(cell_closest_to_mouse2) ** Processing line: ~ state.walls[cell_closest_to_mouse2] = true~ - Inside source: true *** True Line Result state.walls[cell_closest_to_mouse2] = true ** Processing line: ~ reset_search~ - Inside source: true *** True Line Result reset_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Whenever the user edits the grid,~ - Inside source: true *** True Line Result # Whenever the user edits the grid, ** Processing line: ~ # The search has to be reset_searchd upto the current step~ - Inside source: true *** True Line Result # The search has to be reset_searchd upto the current step ** Processing line: ~ # with the current grid as the initial state of the grid~ - Inside source: true *** True Line Result # with the current grid as the initial state of the grid ** Processing line: ~ def reset_search~ - Inside source: true *** True Line Result def reset_search ** Processing line: ~ breadth_first_search.visited = {}~ - Inside source: true *** True Line Result breadth_first_search.visited = {} ** Processing line: ~ breadth_first_search.frontier = []~ - Inside source: true *** True Line Result breadth_first_search.frontier = [] ** Processing line: ~ breadth_first_search.came_from = {}~ - Inside source: true *** True Line Result breadth_first_search.came_from = {} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ dijkstra_search.frontier = []~ - Inside source: true *** True Line Result dijkstra_search.frontier = [] ** Processing line: ~ dijkstra_search.came_from = {}~ - Inside source: true *** True Line Result dijkstra_search.came_from = {} ** Processing line: ~ dijkstra_search.cost_so_far = {}~ - Inside source: true *** True Line Result dijkstra_search.cost_so_far = {} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a list of adjacent cells~ - Inside source: true *** True Line Result # Returns a list of adjacent cells ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ - Inside source: true *** True Line Result # Used to determine what the next cells to be added to the frontier are ** Processing line: ~ def adjacent_neighbors(cell)~ - Inside source: true *** True Line Result def adjacent_neighbors(cell) ** Processing line: ~ neighbors = []~ - Inside source: true *** True Line Result neighbors = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Gets all the valid neighbors into the array~ - Inside source: true *** True Line Result # Gets all the valid neighbors into the array ** Processing line: ~ # From southern neighbor, clockwise~ - Inside source: true *** True Line Result # From southern neighbor, clockwise ** Processing line: ~ neighbors << [cell.x , cell.y - 1] unless cell.y == 0~ - Inside source: true *** True Line Result neighbors << [cell.x , cell.y - 1] unless cell.y == 0 ** Processing line: ~ neighbors << [cell.x - 1, cell.y ] unless cell.x == 0~ - Inside source: true *** True Line Result neighbors << [cell.x - 1, cell.y ] unless cell.x == 0 ** Processing line: ~ neighbors << [cell.x , cell.y + 1] unless cell.y == grid.height - 1~ - Inside source: true *** True Line Result neighbors << [cell.x , cell.y + 1] unless cell.y == grid.height - 1 ** Processing line: ~ neighbors << [cell.x + 1, cell.y ] unless cell.x == grid.width - 1~ - Inside source: true *** True Line Result neighbors << [cell.x + 1, cell.y ] unless cell.x == grid.width - 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sorts the neighbors so the rendered path is a zigzag path~ - Inside source: true *** True Line Result # Sorts the neighbors so the rendered path is a zigzag path ** Processing line: ~ # Cells in a diagonal direction are given priority~ - Inside source: true *** True Line Result # Cells in a diagonal direction are given priority ** Processing line: ~ # Comment this line to see the difference~ - Inside source: true *** True Line Result # Comment this line to see the difference ** Processing line: ~ neighbors = neighbors.sort_by { |neighbor_x, neighbor_y| proximity_to_star(neighbor_x, neighbor_y) }~ - Inside source: true *** True Line Result neighbors = neighbors.sort_by { |neighbor_x, neighbor_y| proximity_to_star(neighbor_x, neighbor_y) } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ neighbors~ - Inside source: true *** True Line Result neighbors ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds the vertical and horizontal distance of a cell from the star~ - Inside source: true *** True Line Result # Finds the vertical and horizontal distance of a cell from the star ** Processing line: ~ # and returns the larger value~ - Inside source: true *** True Line Result # and returns the larger value ** Processing line: ~ # This method is used to have a zigzag pattern in the rendered path~ - Inside source: true *** True Line Result # This method is used to have a zigzag pattern in the rendered path ** Processing line: ~ # A cell that is [5, 5] from the star,~ - Inside source: true *** True Line Result # A cell that is [5, 5] from the star, ** Processing line: ~ # is explored before over a cell that is [0, 7] away.~ - Inside source: true *** True Line Result # is explored before over a cell that is [0, 7] away. ** Processing line: ~ # So, if possible, the search tries to go diagonal (zigzag) first~ - Inside source: true *** True Line Result # So, if possible, the search tries to go diagonal (zigzag) first ** Processing line: ~ def proximity_to_star(x, y)~ - Inside source: true *** True Line Result def proximity_to_star(x, y) ** Processing line: ~ distance_x = (state.star.x - x).abs~ - Inside source: true *** True Line Result distance_x = (state.star.x - x).abs ** Processing line: ~ distance_y = (state.star.y - y).abs~ - Inside source: true *** True Line Result distance_y = (state.star.y - y).abs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if distance_x > distance_y~ - Inside source: true *** True Line Result if distance_x > distance_y ** Processing line: ~ return distance_x~ - Inside source: true *** True Line Result return distance_x ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return distance_y~ - Inside source: true *** True Line Result return distance_y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ - Inside source: true *** True Line Result # When the user grabs the star and puts their cursor to the far right ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ - Inside source: true *** True Line Result # and moves up and down, the star is supposed to move along the grid as well ** Processing line: ~ # Finding the cell closest to the mouse helps with this~ - Inside source: true *** True Line Result # Finding the cell closest to the mouse helps with this ** Processing line: ~ def cell_closest_to_mouse~ - Inside source: true *** True Line Result def cell_closest_to_mouse ** Processing line: ~ # Closest cell to the mouse in the first grid~ - Inside source: true *** True Line Result # Closest cell to the mouse in the first grid ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ - Inside source: true *** True Line Result x = (inputs.mouse.point.x / grid.cell_size).to_i ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ - Inside source: true *** True Line Result y = (inputs.mouse.point.y / grid.cell_size).to_i ** Processing line: ~ # Bound x and y to the grid~ - Inside source: true *** True Line Result # Bound x and y to the grid ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ - Inside source: true *** True Line Result x = grid.width - 1 if x > grid.width - 1 ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ - Inside source: true *** True Line Result y = grid.height - 1 if y > grid.height - 1 ** Processing line: ~ # Return closest cell~ - Inside source: true *** True Line Result # Return closest cell ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ - Inside source: true *** True Line Result # When the user grabs the star and puts their cursor to the far right ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ - Inside source: true *** True Line Result # and moves up and down, the star is supposed to move along the grid as well ** Processing line: ~ # Finding the cell closest to the mouse in the second grid helps with this~ - Inside source: true *** True Line Result # Finding the cell closest to the mouse in the second grid helps with this ** Processing line: ~ def cell_closest_to_mouse2~ - Inside source: true *** True Line Result def cell_closest_to_mouse2 ** Processing line: ~ # Closest cell grid to the mouse in the second~ - Inside source: true *** True Line Result # Closest cell grid to the mouse in the second ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ - Inside source: true *** True Line Result x = (inputs.mouse.point.x / grid.cell_size).to_i ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ - Inside source: true *** True Line Result y = (inputs.mouse.point.y / grid.cell_size).to_i ** Processing line: ~ # Translate the cell to the first grid~ - Inside source: true *** True Line Result # Translate the cell to the first grid ** Processing line: ~ x -= grid.width + 1~ - Inside source: true *** True Line Result x -= grid.width + 1 ** Processing line: ~ # Bound x and y to the first grid~ - Inside source: true *** True Line Result # Bound x and y to the first grid ** Processing line: ~ x = 0 if x < 0~ - Inside source: true *** True Line Result x = 0 if x < 0 ** Processing line: ~ y = 0 if y < 0~ - Inside source: true *** True Line Result y = 0 if y < 0 ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ - Inside source: true *** True Line Result x = grid.width - 1 if x > grid.width - 1 ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ - Inside source: true *** True Line Result y = grid.height - 1 if y > grid.height - 1 ** Processing line: ~ # Return closest cell~ - Inside source: true *** True Line Result # Return closest cell ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the star from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the star from the first grid ** Processing line: ~ def mouse_over_star?~ - Inside source: true *** True Line Result def mouse_over_star? ** Processing line: ~ inputs.mouse.point.inside_rect?(scale_up(state.star))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(scale_up(state.star)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the star from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the star from the second grid ** Processing line: ~ def mouse_over_star2?~ - Inside source: true *** True Line Result def mouse_over_star2? ** Processing line: ~ inputs.mouse.point.inside_rect?(move_and_scale_up(state.star))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(move_and_scale_up(state.star)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the target from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the target from the first grid ** Processing line: ~ def mouse_over_target?~ - Inside source: true *** True Line Result def mouse_over_target? ** Processing line: ~ inputs.mouse.point.inside_rect?(scale_up(state.target))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(scale_up(state.target)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the target from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the target from the second grid ** Processing line: ~ def mouse_over_target2?~ - Inside source: true *** True Line Result def mouse_over_target2? ** Processing line: ~ inputs.mouse.point.inside_rect?(move_and_scale_up(state.target))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(move_and_scale_up(state.target)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing walls from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be removing walls from the first grid ** Processing line: ~ def mouse_over_wall?~ - Inside source: true *** True Line Result def mouse_over_wall? ** Processing line: ~ state.walls.each_key do | wall |~ - Inside source: true *** True Line Result state.walls.each_key do | wall | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(scale_up(wall))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(scale_up(wall)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing walls from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be removing walls from the second grid ** Processing line: ~ def mouse_over_wall2?~ - Inside source: true *** True Line Result def mouse_over_wall2? ** Processing line: ~ state.walls.each_key do | wall |~ - Inside source: true *** True Line Result state.walls.each_key do | wall | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(move_and_scale_up(wall))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(move_and_scale_up(wall)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing hills from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be removing hills from the first grid ** Processing line: ~ def mouse_over_hill?~ - Inside source: true *** True Line Result def mouse_over_hill? ** Processing line: ~ state.hills.each_key do | hill |~ - Inside source: true *** True Line Result state.hills.each_key do | hill | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(scale_up(hill))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(scale_up(hill)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing hills from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be removing hills from the second grid ** Processing line: ~ def mouse_over_hill2?~ - Inside source: true *** True Line Result def mouse_over_hill2? ** Processing line: ~ state.hills.each_key do | hill |~ - Inside source: true *** True Line Result state.hills.each_key do | hill | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(move_and_scale_up(hill))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(move_and_scale_up(hill)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be adding walls from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be adding walls from the first grid ** Processing line: ~ def mouse_over_grid?~ - Inside source: true *** True Line Result def mouse_over_grid? ** Processing line: ~ inputs.mouse.point.inside_rect?(scale_up(grid.rect))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(scale_up(grid.rect)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be adding walls from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be adding walls from the second grid ** Processing line: ~ def mouse_over_grid2?~ - Inside source: true *** True Line Result def mouse_over_grid2? ** Processing line: ~ inputs.mouse.point.inside_rect?(move_and_scale_up(grid.rect))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(move_and_scale_up(grid.rect)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These methods provide handy aliases to colors~ - Inside source: true *** True Line Result # These methods provide handy aliases to colors ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Light brown~ - Inside source: true *** True Line Result # Light brown ** Processing line: ~ def unvisited_color~ - Inside source: true *** True Line Result def unvisited_color ** Processing line: ~ [221, 212, 213]~ - Inside source: true *** True Line Result [221, 212, 213] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Camo Green~ - Inside source: true *** True Line Result # Camo Green ** Processing line: ~ def wall_color~ - Inside source: true *** True Line Result def wall_color ** Processing line: ~ [134, 134, 120]~ - Inside source: true *** True Line Result [134, 134, 120] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Pastel White~ - Inside source: true *** True Line Result # Pastel White ** Processing line: ~ def path_color~ - Inside source: true *** True Line Result def path_color ** Processing line: ~ [231, 230, 228]~ - Inside source: true *** True Line Result [231, 230, 228] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def red~ - Inside source: true *** True Line Result def red ** Processing line: ~ [255, 0, 0]~ - Inside source: true *** True Line Result [255, 0, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # A Green~ - Inside source: true *** True Line Result # A Green ** Processing line: ~ def hill_color~ - Inside source: true *** True Line Result def hill_color ** Processing line: ~ [139, 173, 132]~ - Inside source: true *** True Line Result [139, 173, 132] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Makes code more concise~ - Inside source: true *** True Line Result # Makes code more concise ** Processing line: ~ def grid~ - Inside source: true *** True Line Result def grid ** Processing line: ~ state.grid~ - Inside source: true *** True Line Result state.grid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def breadth_first_search~ - Inside source: true *** True Line Result def breadth_first_search ** Processing line: ~ state.breadth_first_search~ - Inside source: true *** True Line Result state.breadth_first_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def dijkstra_search~ - Inside source: true *** True Line Result def dijkstra_search ** Processing line: ~ state.dijkstra_search~ - Inside source: true *** True Line Result state.dijkstra_search ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Method that is called by DragonRuby periodically~ - Inside source: true *** True Line Result # Method that is called by DragonRuby periodically ** Processing line: ~ # Used for updating animations and calculations~ - Inside source: true *** True Line Result # Used for updating animations and calculations ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Pressing r will reset the application~ - Inside source: true *** True Line Result # Pressing r will reset the application ** Processing line: ~ if args.inputs.keyboard.key_down.r~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.r ** Processing line: ~ args.gtk.reset~ - Inside source: true *** True Line Result args.gtk.reset ** Processing line: ~ reset~ - Inside source: true *** True Line Result reset ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Every tick, new args are passed, and the Dijkstra tick method is called~ - Inside source: true *** True Line Result # Every tick, new args are passed, and the Dijkstra tick method is called ** Processing line: ~ $movement_costs ||= Movement_Costs.new~ - Inside source: true *** True Line Result $movement_costs ||= Movement_Costs.new ** Processing line: ~ $movement_costs.args = args~ - Inside source: true *** True Line Result $movement_costs.args = args ** Processing line: ~ $movement_costs.tick~ - Inside source: true *** True Line Result $movement_costs.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset~ - Inside source: true *** True Line Result def reset ** Processing line: ~ $movement_costs = nil~ - Inside source: true *** True Line Result $movement_costs = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Path Finding Algorithms - Heuristic - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Path Finding Algorithms - Heuristic - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/13_path_finding_algorithms/06_heuristic/app/main.rb~ - Inside source: true *** True Line Result # ./samples/13_path_finding_algorithms/06_heuristic/app/main.rb ** Processing line: ~ # This program is inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html~ - Inside source: true *** True Line Result # This program is inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This time the heuristic search still explored less of the grid, hence finishing faster.~ - Inside source: true *** True Line Result # This time the heuristic search still explored less of the grid, hence finishing faster. ** Processing line: ~ # However, it did not find the shortest path between the star and the target.~ - Inside source: true *** True Line Result # However, it did not find the shortest path between the star and the target. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The only difference between this app and Heuristic is the change of the starting position.~ - Inside source: true *** True Line Result # The only difference between this app and Heuristic is the change of the starting position. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Heuristic_With_Walls~ - Inside source: true *** True Line Result class Heuristic_With_Walls ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ # If animation is playing, and max steps have not been reached~ - Inside source: true *** True Line Result # If animation is playing, and max steps have not been reached ** Processing line: ~ # Move the search a step forward~ - Inside source: true *** True Line Result # Move the search a step forward ** Processing line: ~ if state.play && state.current_step < state.max_steps~ - Inside source: true *** True Line Result if state.play && state.current_step < state.max_steps ** Processing line: ~ # Variable that tells the program what step to recalculate up to~ - Inside source: true *** True Line Result # Variable that tells the program what step to recalculate up to ** Processing line: ~ state.current_step += 1~ - Inside source: true *** True Line Result state.current_step += 1 ** Processing line: ~ move_searches_one_step_forward~ - Inside source: true *** True Line Result move_searches_one_step_forward ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ # Variables to edit the size and appearance of the grid~ - Inside source: true *** True Line Result # Variables to edit the size and appearance of the grid ** Processing line: ~ # Freely customizable to user's liking~ - Inside source: true *** True Line Result # Freely customizable to user's liking ** Processing line: ~ grid.width ||= 15~ - Inside source: true *** True Line Result grid.width ||= 15 ** Processing line: ~ grid.height ||= 15~ - Inside source: true *** True Line Result grid.height ||= 15 ** Processing line: ~ grid.cell_size ||= 40~ - Inside source: true *** True Line Result grid.cell_size ||= 40 ** Processing line: ~ grid.rect ||= [0, 0, grid.width, grid.height]~ - Inside source: true *** True Line Result grid.rect ||= [0, 0, grid.width, grid.height] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ grid.star ||= [0, 2]~ - Inside source: true *** True Line Result grid.star ||= [0, 2] ** Processing line: ~ grid.target ||= [14, 12]~ - Inside source: true *** True Line Result grid.target ||= [14, 12] ** Processing line: ~ grid.walls ||= {}~ - Inside source: true *** True Line Result grid.walls ||= {} ** Processing line: ~ # There are no hills in the Heuristic Search Demo~ - Inside source: true *** True Line Result # There are no hills in the Heuristic Search Demo ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # What the user is currently editing on the grid~ - Inside source: true *** True Line Result # What the user is currently editing on the grid ** Processing line: ~ # We store this value, because we want to remember the value even when~ - Inside source: true *** True Line Result # We store this value, because we want to remember the value even when ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ - Inside source: true *** True Line Result # the user's cursor is no longer over what they're interacting with, but ** Processing line: ~ # they are still clicking down on the mouse.~ - Inside source: true *** True Line Result # they are still clicking down on the mouse. ** Processing line: ~ state.user_input ||= :none~ - Inside source: true *** True Line Result state.user_input ||= :none ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These variables allow the breadth first search to take place~ - Inside source: true *** True Line Result # These variables allow the breadth first search to take place ** Processing line: ~ # Came_from is a hash with a key of a cell and a value of the cell that was expanded from to find the key.~ - Inside source: true *** True Line Result # Came_from is a hash with a key of a cell and a value of the cell that was expanded from to find the key. ** Processing line: ~ # Used to prevent searching cells that have already been found~ - Inside source: true *** True Line Result # Used to prevent searching cells that have already been found ** Processing line: ~ # and to trace a path from the target back to the starting point.~ - Inside source: true *** True Line Result # and to trace a path from the target back to the starting point. ** Processing line: ~ # Frontier is an array of cells to expand the search from.~ - Inside source: true *** True Line Result # Frontier is an array of cells to expand the search from. ** Processing line: ~ # The search is over when there are no more cells to search from.~ - Inside source: true *** True Line Result # The search is over when there are no more cells to search from. ** Processing line: ~ # Path stores the path from the target to the star, once the target has been found~ - Inside source: true *** True Line Result # Path stores the path from the target to the star, once the target has been found ** Processing line: ~ # It prevents calculating the path every tick.~ - Inside source: true *** True Line Result # It prevents calculating the path every tick. ** Processing line: ~ bfs.came_from ||= {}~ - Inside source: true *** True Line Result bfs.came_from ||= {} ** Processing line: ~ bfs.frontier ||= []~ - Inside source: true *** True Line Result bfs.frontier ||= [] ** Processing line: ~ bfs.path ||= []~ - Inside source: true *** True Line Result bfs.path ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ heuristic.came_from ||= {}~ - Inside source: true *** True Line Result heuristic.came_from ||= {} ** Processing line: ~ heuristic.frontier ||= []~ - Inside source: true *** True Line Result heuristic.frontier ||= [] ** Processing line: ~ heuristic.path ||= []~ - Inside source: true *** True Line Result heuristic.path ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Stores which step of the animation is being rendered~ - Inside source: true *** True Line Result # Stores which step of the animation is being rendered ** Processing line: ~ # When the user moves the star or messes with the walls,~ - Inside source: true *** True Line Result # When the user moves the star or messes with the walls, ** Processing line: ~ # the searches are recalculated up to this step~ - Inside source: true *** True Line Result # the searches are recalculated up to this step ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Unless the current step has a value~ - Inside source: true *** True Line Result # Unless the current step has a value ** Processing line: ~ unless state.current_step~ - Inside source: true *** True Line Result unless state.current_step ** Processing line: ~ # Set the current step to 10~ - Inside source: true *** True Line Result # Set the current step to 10 ** Processing line: ~ state.current_step = 10~ - Inside source: true *** True Line Result state.current_step = 10 ** Processing line: ~ # And calculate the searches up to step 10~ - Inside source: true *** True Line Result # And calculate the searches up to step 10 ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # At some step the animation will end,~ - Inside source: true *** True Line Result # At some step the animation will end, ** Processing line: ~ # and further steps won't change anything (the whole grid will be explored)~ - Inside source: true *** True Line Result # and further steps won't change anything (the whole grid will be explored) ** Processing line: ~ # This step is roughly the grid's width * height~ - Inside source: true *** True Line Result # This step is roughly the grid's width * height ** Processing line: ~ # When anim_steps equals max_steps no more calculations will occur~ - Inside source: true *** True Line Result # When anim_steps equals max_steps no more calculations will occur ** Processing line: ~ # and the slider will be at the end~ - Inside source: true *** True Line Result # and the slider will be at the end ** Processing line: ~ state.max_steps = grid.width * grid.height~ - Inside source: true *** True Line Result state.max_steps = grid.width * grid.height ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Whether the animation should play or not~ - Inside source: true *** True Line Result # Whether the animation should play or not ** Processing line: ~ # If true, every tick moves anim_steps forward one~ - Inside source: true *** True Line Result # If true, every tick moves anim_steps forward one ** Processing line: ~ # Pressing the stepwise animation buttons will pause the animation~ - Inside source: true *** True Line Result # Pressing the stepwise animation buttons will pause the animation ** Processing line: ~ # An if statement instead of the ||= operator is used for assigning a boolean value.~ - Inside source: true *** True Line Result # An if statement instead of the ||= operator is used for assigning a boolean value. ** Processing line: ~ # The || operator does not differentiate between nil and false.~ - Inside source: true *** True Line Result # The || operator does not differentiate between nil and false. ** Processing line: ~ if state.play == nil~ - Inside source: true *** True Line Result if state.play == nil ** Processing line: ~ state.play = false~ - Inside source: true *** True Line Result state.play = false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Store the rects of the buttons that control the animation~ - Inside source: true *** True Line Result # Store the rects of the buttons that control the animation ** Processing line: ~ # They are here for user customization~ - Inside source: true *** True Line Result # They are here for user customization ** Processing line: ~ # Editing these might require recentering the text inside them~ - Inside source: true *** True Line Result # Editing these might require recentering the text inside them ** Processing line: ~ # Those values can be found in the render_button methods~ - Inside source: true *** True Line Result # Those values can be found in the render_button methods ** Processing line: ~ buttons.left = [470, 600, 50, 50]~ - Inside source: true *** True Line Result buttons.left = [470, 600, 50, 50] ** Processing line: ~ buttons.center = [520, 600, 200, 50]~ - Inside source: true *** True Line Result buttons.center = [520, 600, 200, 50] ** Processing line: ~ buttons.right = [720, 600, 50, 50]~ - Inside source: true *** True Line Result buttons.right = [720, 600, 50, 50] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The variables below are related to the slider~ - Inside source: true *** True Line Result # The variables below are related to the slider ** Processing line: ~ # They allow the user to customize them~ - Inside source: true *** True Line Result # They allow the user to customize them ** Processing line: ~ # They also give a central location for the render and input methods to get~ - Inside source: true *** True Line Result # They also give a central location for the render and input methods to get ** Processing line: ~ # information from~ - Inside source: true *** True Line Result # information from ** Processing line: ~ # x & y are the coordinates of the leftmost part of the slider line~ - Inside source: true *** True Line Result # x & y are the coordinates of the leftmost part of the slider line ** Processing line: ~ slider.x = 440~ - Inside source: true *** True Line Result slider.x = 440 ** Processing line: ~ slider.y = 675~ - Inside source: true *** True Line Result slider.y = 675 ** Processing line: ~ # This is the width of the line~ - Inside source: true *** True Line Result # This is the width of the line ** Processing line: ~ slider.w = 360~ - Inside source: true *** True Line Result slider.w = 360 ** Processing line: ~ # This is the offset for the circle~ - Inside source: true *** True Line Result # This is the offset for the circle ** Processing line: ~ # Allows the center of the circle to be on the line,~ - Inside source: true *** True Line Result # Allows the center of the circle to be on the line, ** Processing line: ~ # as opposed to the upper right corner~ - Inside source: true *** True Line Result # as opposed to the upper right corner ** Processing line: ~ slider.offset = 20~ - Inside source: true *** True Line Result slider.offset = 20 ** Processing line: ~ # This is the spacing between each of the notches on the slider~ - Inside source: true *** True Line Result # This is the spacing between each of the notches on the slider ** Processing line: ~ # Notches are places where the circle can rest on the slider line~ - Inside source: true *** True Line Result # Notches are places where the circle can rest on the slider line ** Processing line: ~ # There needs to be a notch for each step before the maximum number of steps~ - Inside source: true *** True Line Result # There needs to be a notch for each step before the maximum number of steps ** Processing line: ~ slider.spacing = slider.w.to_f / state.max_steps.to_f~ - Inside source: true *** True Line Result slider.spacing = slider.w.to_f / state.max_steps.to_f ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # All methods with render draw stuff on the screen~ - Inside source: true *** True Line Result # All methods with render draw stuff on the screen ** Processing line: ~ # UI has buttons, the slider, and labels~ - Inside source: true *** True Line Result # UI has buttons, the slider, and labels ** Processing line: ~ # The search specific rendering occurs in the respective methods~ - Inside source: true *** True Line Result # The search specific rendering occurs in the respective methods ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ render_ui~ - Inside source: true *** True Line Result render_ui ** Processing line: ~ render_bfs~ - Inside source: true *** True Line Result render_bfs ** Processing line: ~ render_heuristic~ - Inside source: true *** True Line Result render_heuristic ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_ui~ - Inside source: true *** True Line Result def render_ui ** Processing line: ~ render_buttons~ - Inside source: true *** True Line Result render_buttons ** Processing line: ~ render_slider~ - Inside source: true *** True Line Result render_slider ** Processing line: ~ render_labels~ - Inside source: true *** True Line Result render_labels ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_buttons~ - Inside source: true *** True Line Result def render_buttons ** Processing line: ~ render_left_button~ - Inside source: true *** True Line Result render_left_button ** Processing line: ~ render_center_button~ - Inside source: true *** True Line Result render_center_button ** Processing line: ~ render_right_button~ - Inside source: true *** True Line Result render_right_button ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_bfs~ - Inside source: true *** True Line Result def render_bfs ** Processing line: ~ render_bfs_grid~ - Inside source: true *** True Line Result render_bfs_grid ** Processing line: ~ render_bfs_star~ - Inside source: true *** True Line Result render_bfs_star ** Processing line: ~ render_bfs_target~ - Inside source: true *** True Line Result render_bfs_target ** Processing line: ~ render_bfs_visited~ - Inside source: true *** True Line Result render_bfs_visited ** Processing line: ~ render_bfs_walls~ - Inside source: true *** True Line Result render_bfs_walls ** Processing line: ~ render_bfs_frontier~ - Inside source: true *** True Line Result render_bfs_frontier ** Processing line: ~ render_bfs_path~ - Inside source: true *** True Line Result render_bfs_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_heuristic~ - Inside source: true *** True Line Result def render_heuristic ** Processing line: ~ render_heuristic_grid~ - Inside source: true *** True Line Result render_heuristic_grid ** Processing line: ~ render_heuristic_star~ - Inside source: true *** True Line Result render_heuristic_star ** Processing line: ~ render_heuristic_target~ - Inside source: true *** True Line Result render_heuristic_target ** Processing line: ~ render_heuristic_visited~ - Inside source: true *** True Line Result render_heuristic_visited ** Processing line: ~ render_heuristic_walls~ - Inside source: true *** True Line Result render_heuristic_walls ** Processing line: ~ render_heuristic_frontier~ - Inside source: true *** True Line Result render_heuristic_frontier ** Processing line: ~ render_heuristic_path~ - Inside source: true *** True Line Result render_heuristic_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method handles user input every tick~ - Inside source: true *** True Line Result # This method handles user input every tick ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ # Check and handle button input~ - Inside source: true *** True Line Result # Check and handle button input ** Processing line: ~ input_buttons~ - Inside source: true *** True Line Result input_buttons ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the mouse was lifted this tick~ - Inside source: true *** True Line Result # If the mouse was lifted this tick ** Processing line: ~ if inputs.mouse.up~ - Inside source: true *** True Line Result if inputs.mouse.up ** Processing line: ~ # Set current input to none~ - Inside source: true *** True Line Result # Set current input to none ** Processing line: ~ state.user_input = :none~ - Inside source: true *** True Line Result state.user_input = :none ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the mouse was clicked this tick~ - Inside source: true *** True Line Result # If the mouse was clicked this tick ** Processing line: ~ if inputs.mouse.down~ - Inside source: true *** True Line Result if inputs.mouse.down ** Processing line: ~ # Determine what the user is editing and appropriately edit the state.user_input variable~ - Inside source: true *** True Line Result # Determine what the user is editing and appropriately edit the state.user_input variable ** Processing line: ~ determine_input~ - Inside source: true *** True Line Result determine_input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Process user input based on user_input variable and current mouse position~ - Inside source: true *** True Line Result # Process user input based on user_input variable and current mouse position ** Processing line: ~ process_input~ - Inside source: true *** True Line Result process_input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Determines what the user is editing~ - Inside source: true *** True Line Result # Determines what the user is editing ** Processing line: ~ # This method is called when the mouse is clicked down~ - Inside source: true *** True Line Result # This method is called when the mouse is clicked down ** Processing line: ~ def determine_input~ - Inside source: true *** True Line Result def determine_input ** Processing line: ~ if mouse_over_slider?~ - Inside source: true *** True Line Result if mouse_over_slider? ** Processing line: ~ state.user_input = :slider~ - Inside source: true *** True Line Result state.user_input = :slider ** Processing line: ~ # If the mouse is over the star in the first grid~ - Inside source: true *** True Line Result # If the mouse is over the star in the first grid ** Processing line: ~ elsif bfs_mouse_over_star?~ - Inside source: true *** True Line Result elsif bfs_mouse_over_star? ** Processing line: ~ # The user is editing the star from the first grid~ - Inside source: true *** True Line Result # The user is editing the star from the first grid ** Processing line: ~ state.user_input = :bfs_star~ - Inside source: true *** True Line Result state.user_input = :bfs_star ** Processing line: ~ # If the mouse is over the star in the second grid~ - Inside source: true *** True Line Result # If the mouse is over the star in the second grid ** Processing line: ~ elsif heuristic_mouse_over_star?~ - Inside source: true *** True Line Result elsif heuristic_mouse_over_star? ** Processing line: ~ # The user is editing the star from the second grid~ - Inside source: true *** True Line Result # The user is editing the star from the second grid ** Processing line: ~ state.user_input = :heuristic_star~ - Inside source: true *** True Line Result state.user_input = :heuristic_star ** Processing line: ~ # If the mouse is over the target in the first grid~ - Inside source: true *** True Line Result # If the mouse is over the target in the first grid ** Processing line: ~ elsif bfs_mouse_over_target?~ - Inside source: true *** True Line Result elsif bfs_mouse_over_target? ** Processing line: ~ # The user is editing the target from the first grid~ - Inside source: true *** True Line Result # The user is editing the target from the first grid ** Processing line: ~ state.user_input = :bfs_target~ - Inside source: true *** True Line Result state.user_input = :bfs_target ** Processing line: ~ # If the mouse is over the target in the second grid~ - Inside source: true *** True Line Result # If the mouse is over the target in the second grid ** Processing line: ~ elsif heuristic_mouse_over_target?~ - Inside source: true *** True Line Result elsif heuristic_mouse_over_target? ** Processing line: ~ # The user is editing the target from the second grid~ - Inside source: true *** True Line Result # The user is editing the target from the second grid ** Processing line: ~ state.user_input = :heuristic_target~ - Inside source: true *** True Line Result state.user_input = :heuristic_target ** Processing line: ~ # If the mouse is over a wall in the first grid~ - Inside source: true *** True Line Result # If the mouse is over a wall in the first grid ** Processing line: ~ elsif bfs_mouse_over_wall?~ - Inside source: true *** True Line Result elsif bfs_mouse_over_wall? ** Processing line: ~ # The user is removing a wall from the first grid~ - Inside source: true *** True Line Result # The user is removing a wall from the first grid ** Processing line: ~ state.user_input = :bfs_remove_wall~ - Inside source: true *** True Line Result state.user_input = :bfs_remove_wall ** Processing line: ~ # If the mouse is over a wall in the second grid~ - Inside source: true *** True Line Result # If the mouse is over a wall in the second grid ** Processing line: ~ elsif heuristic_mouse_over_wall?~ - Inside source: true *** True Line Result elsif heuristic_mouse_over_wall? ** Processing line: ~ # The user is removing a wall from the second grid~ - Inside source: true *** True Line Result # The user is removing a wall from the second grid ** Processing line: ~ state.user_input = :heuristic_remove_wall~ - Inside source: true *** True Line Result state.user_input = :heuristic_remove_wall ** Processing line: ~ # If the mouse is over the first grid~ - Inside source: true *** True Line Result # If the mouse is over the first grid ** Processing line: ~ elsif bfs_mouse_over_grid?~ - Inside source: true *** True Line Result elsif bfs_mouse_over_grid? ** Processing line: ~ # The user is adding a wall from the first grid~ - Inside source: true *** True Line Result # The user is adding a wall from the first grid ** Processing line: ~ state.user_input = :bfs_add_wall~ - Inside source: true *** True Line Result state.user_input = :bfs_add_wall ** Processing line: ~ # If the mouse is over the second grid~ - Inside source: true *** True Line Result # If the mouse is over the second grid ** Processing line: ~ elsif heuristic_mouse_over_grid?~ - Inside source: true *** True Line Result elsif heuristic_mouse_over_grid? ** Processing line: ~ # The user is adding a wall from the second grid~ - Inside source: true *** True Line Result # The user is adding a wall from the second grid ** Processing line: ~ state.user_input = :heuristic_add_wall~ - Inside source: true *** True Line Result state.user_input = :heuristic_add_wall ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Processes click and drag based on what the user is currently dragging~ - Inside source: true *** True Line Result # Processes click and drag based on what the user is currently dragging ** Processing line: ~ def process_input~ - Inside source: true *** True Line Result def process_input ** Processing line: ~ if state.user_input == :slider~ - Inside source: true *** True Line Result if state.user_input == :slider ** Processing line: ~ process_input_slider~ - Inside source: true *** True Line Result process_input_slider ** Processing line: ~ elsif state.user_input == :bfs_star~ - Inside source: true *** True Line Result elsif state.user_input == :bfs_star ** Processing line: ~ process_input_bfs_star~ - Inside source: true *** True Line Result process_input_bfs_star ** Processing line: ~ elsif state.user_input == :heuristic_star~ - Inside source: true *** True Line Result elsif state.user_input == :heuristic_star ** Processing line: ~ process_input_heuristic_star~ - Inside source: true *** True Line Result process_input_heuristic_star ** Processing line: ~ elsif state.user_input == :bfs_target~ - Inside source: true *** True Line Result elsif state.user_input == :bfs_target ** Processing line: ~ process_input_bfs_target~ - Inside source: true *** True Line Result process_input_bfs_target ** Processing line: ~ elsif state.user_input == :heuristic_target~ - Inside source: true *** True Line Result elsif state.user_input == :heuristic_target ** Processing line: ~ process_input_heuristic_target~ - Inside source: true *** True Line Result process_input_heuristic_target ** Processing line: ~ elsif state.user_input == :bfs_remove_wall~ - Inside source: true *** True Line Result elsif state.user_input == :bfs_remove_wall ** Processing line: ~ process_input_bfs_remove_wall~ - Inside source: true *** True Line Result process_input_bfs_remove_wall ** Processing line: ~ elsif state.user_input == :heuristic_remove_wall~ - Inside source: true *** True Line Result elsif state.user_input == :heuristic_remove_wall ** Processing line: ~ process_input_heuristic_remove_wall~ - Inside source: true *** True Line Result process_input_heuristic_remove_wall ** Processing line: ~ elsif state.user_input == :bfs_add_wall~ - Inside source: true *** True Line Result elsif state.user_input == :bfs_add_wall ** Processing line: ~ process_input_bfs_add_wall~ - Inside source: true *** True Line Result process_input_bfs_add_wall ** Processing line: ~ elsif state.user_input == :heuristic_add_wall~ - Inside source: true *** True Line Result elsif state.user_input == :heuristic_add_wall ** Processing line: ~ process_input_heuristic_add_wall~ - Inside source: true *** True Line Result process_input_heuristic_add_wall ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_slider~ - Inside source: true *** True Line Result def render_slider ** Processing line: ~ # Using primitives hides the line under the white circle of the slider~ - Inside source: true *** True Line Result # Using primitives hides the line under the white circle of the slider ** Processing line: ~ # Draws the line~ - Inside source: true *** True Line Result # Draws the line ** Processing line: ~ outputs.primitives << [slider.x, slider.y, slider.x + slider.w, slider.y].line~ - Inside source: true *** True Line Result outputs.primitives << [slider.x, slider.y, slider.x + slider.w, slider.y].line ** Processing line: ~ # The circle needs to be offset so that the center of the circle~ - Inside source: true *** True Line Result # The circle needs to be offset so that the center of the circle ** Processing line: ~ # overlaps the line instead of the upper right corner of the circle~ - Inside source: true *** True Line Result # overlaps the line instead of the upper right corner of the circle ** Processing line: ~ # The circle's x value is also moved based on the current seach step~ - Inside source: true *** True Line Result # The circle's x value is also moved based on the current seach step ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.current_step * slider.spacing)~ - Inside source: true *** True Line Result circle_x = (slider.x - slider.offset) + (state.current_step * slider.spacing) ** Processing line: ~ circle_y = (slider.y - slider.offset)~ - Inside source: true *** True Line Result circle_y = (slider.y - slider.offset) ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ - Inside source: true *** True Line Result circle_rect = [circle_x, circle_y, 37, 37] ** Processing line: ~ outputs.primitives << [circle_rect, 'circle-white.png'].sprite~ - Inside source: true *** True Line Result outputs.primitives << [circle_rect, 'circle-white.png'].sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_labels~ - Inside source: true *** True Line Result def render_labels ** Processing line: ~ outputs.labels << [205, 625, "Breadth First Search"]~ - Inside source: true *** True Line Result outputs.labels << [205, 625, "Breadth First Search"] ** Processing line: ~ outputs.labels << [820, 625, "Heuristic Best-First Search"]~ - Inside source: true *** True Line Result outputs.labels << [820, 625, "Heuristic Best-First Search"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_left_button~ - Inside source: true *** True Line Result def render_left_button ** Processing line: ~ # Draws the button_color button, and a black border~ - Inside source: true *** True Line Result # Draws the button_color button, and a black border ** Processing line: ~ # The border separates the buttons visually~ - Inside source: true *** True Line Result # The border separates the buttons visually ** Processing line: ~ outputs.solids << [buttons.left, button_color]~ - Inside source: true *** True Line Result outputs.solids << [buttons.left, button_color] ** Processing line: ~ outputs.borders << [buttons.left]~ - Inside source: true *** True Line Result outputs.borders << [buttons.left] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders an explanatory label in the center of the button~ - Inside source: true *** True Line Result # Renders an explanatory label in the center of the button ** Processing line: ~ # Explains to the user what the button does~ - Inside source: true *** True Line Result # Explains to the user what the button does ** Processing line: ~ # If the button size is changed, the label might need to be edited as well~ - Inside source: true *** True Line Result # If the button size is changed, the label might need to be edited as well ** Processing line: ~ # to keep the label in the center of the button~ - Inside source: true *** True Line Result # to keep the label in the center of the button ** Processing line: ~ label_x = buttons.left.x + 20~ - Inside source: true *** True Line Result label_x = buttons.left.x + 20 ** Processing line: ~ label_y = buttons.left.y + 35~ - Inside source: true *** True Line Result label_y = buttons.left.y + 35 ** Processing line: ~ outputs.labels << [label_x, label_y, "<"]~ - Inside source: true *** True Line Result outputs.labels << [label_x, label_y, "<"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_center_button~ - Inside source: true *** True Line Result def render_center_button ** Processing line: ~ # Draws the button_color button, and a black border~ - Inside source: true *** True Line Result # Draws the button_color button, and a black border ** Processing line: ~ # The border separates the buttons visually~ - Inside source: true *** True Line Result # The border separates the buttons visually ** Processing line: ~ outputs.solids << [buttons.center, button_color]~ - Inside source: true *** True Line Result outputs.solids << [buttons.center, button_color] ** Processing line: ~ outputs.borders << [buttons.center]~ - Inside source: true *** True Line Result outputs.borders << [buttons.center] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders an explanatory label in the center of the button~ - Inside source: true *** True Line Result # Renders an explanatory label in the center of the button ** Processing line: ~ # Explains to the user what the button does~ - Inside source: true *** True Line Result # Explains to the user what the button does ** Processing line: ~ # If the button size is changed, the label might need to be edited as well~ - Inside source: true *** True Line Result # If the button size is changed, the label might need to be edited as well ** Processing line: ~ # to keep the label in the center of the button~ - Inside source: true *** True Line Result # to keep the label in the center of the button ** Processing line: ~ label_x = buttons.center.x + 37~ - Inside source: true *** True Line Result label_x = buttons.center.x + 37 ** Processing line: ~ label_y = buttons.center.y + 35~ - Inside source: true *** True Line Result label_y = buttons.center.y + 35 ** Processing line: ~ label_text = state.play ? "Pause Animation" : "Play Animation"~ - Inside source: true *** True Line Result label_text = state.play ? "Pause Animation" : "Play Animation" ** Processing line: ~ outputs.labels << [label_x, label_y, label_text]~ - Inside source: true *** True Line Result outputs.labels << [label_x, label_y, label_text] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_right_button~ - Inside source: true *** True Line Result def render_right_button ** Processing line: ~ # Draws the button_color button, and a black border~ - Inside source: true *** True Line Result # Draws the button_color button, and a black border ** Processing line: ~ # The border separates the buttons visually~ - Inside source: true *** True Line Result # The border separates the buttons visually ** Processing line: ~ outputs.solids << [buttons.right, button_color]~ - Inside source: true *** True Line Result outputs.solids << [buttons.right, button_color] ** Processing line: ~ outputs.borders << [buttons.right]~ - Inside source: true *** True Line Result outputs.borders << [buttons.right] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders an explanatory label in the center of the button~ - Inside source: true *** True Line Result # Renders an explanatory label in the center of the button ** Processing line: ~ # Explains to the user what the button does~ - Inside source: true *** True Line Result # Explains to the user what the button does ** Processing line: ~ label_x = buttons.right.x + 20~ - Inside source: true *** True Line Result label_x = buttons.right.x + 20 ** Processing line: ~ label_y = buttons.right.y + 35~ - Inside source: true *** True Line Result label_y = buttons.right.y + 35 ** Processing line: ~ outputs.labels << [label_x, label_y, ">"]~ - Inside source: true *** True Line Result outputs.labels << [label_x, label_y, ">"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_bfs_grid~ - Inside source: true *** True Line Result def render_bfs_grid ** Processing line: ~ # A large rect the size of the grid~ - Inside source: true *** True Line Result # A large rect the size of the grid ** Processing line: ~ outputs.solids << [bfs_scale_up(grid.rect), default_color]~ - Inside source: true *** True Line Result outputs.solids << [bfs_scale_up(grid.rect), default_color] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The vertical grid lines~ - Inside source: true *** True Line Result # The vertical grid lines ** Processing line: ~ for x in 0..grid.width~ - Inside source: true *** True Line Result for x in 0..grid.width ** Processing line: ~ outputs.lines << bfs_vertical_line(x)~ - Inside source: true *** True Line Result outputs.lines << bfs_vertical_line(x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The horizontal grid lines~ - Inside source: true *** True Line Result # The horizontal grid lines ** Processing line: ~ for y in 0..grid.height~ - Inside source: true *** True Line Result for y in 0..grid.height ** Processing line: ~ outputs.lines << bfs_horizontal_line(y)~ - Inside source: true *** True Line Result outputs.lines << bfs_horizontal_line(y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_heuristic_grid~ - Inside source: true *** True Line Result def render_heuristic_grid ** Processing line: ~ # A large rect the size of the grid~ - Inside source: true *** True Line Result # A large rect the size of the grid ** Processing line: ~ outputs.solids << [heuristic_scale_up(grid.rect), default_color]~ - Inside source: true *** True Line Result outputs.solids << [heuristic_scale_up(grid.rect), default_color] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The vertical grid lines~ - Inside source: true *** True Line Result # The vertical grid lines ** Processing line: ~ for x in 0..grid.width~ - Inside source: true *** True Line Result for x in 0..grid.width ** Processing line: ~ outputs.lines << heuristic_vertical_line(x)~ - Inside source: true *** True Line Result outputs.lines << heuristic_vertical_line(x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The horizontal grid lines~ - Inside source: true *** True Line Result # The horizontal grid lines ** Processing line: ~ for y in 0..grid.height~ - Inside source: true *** True Line Result for y in 0..grid.height ** Processing line: ~ outputs.lines << heuristic_horizontal_line(y)~ - Inside source: true *** True Line Result outputs.lines << heuristic_horizontal_line(y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a vertical line for a column of the first grid~ - Inside source: true *** True Line Result # Returns a vertical line for a column of the first grid ** Processing line: ~ def bfs_vertical_line column~ - Inside source: true *** True Line Result def bfs_vertical_line column ** Processing line: ~ bfs_scale_up([column, 0, column, grid.height])~ - Inside source: true *** True Line Result bfs_scale_up([column, 0, column, grid.height]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a horizontal line for a column of the first grid~ - Inside source: true *** True Line Result # Returns a horizontal line for a column of the first grid ** Processing line: ~ def bfs_horizontal_line row~ - Inside source: true *** True Line Result def bfs_horizontal_line row ** Processing line: ~ bfs_scale_up([0, row, grid.width, row])~ - Inside source: true *** True Line Result bfs_scale_up([0, row, grid.width, row]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a vertical line for a column of the second grid~ - Inside source: true *** True Line Result # Returns a vertical line for a column of the second grid ** Processing line: ~ def heuristic_vertical_line column~ - Inside source: true *** True Line Result def heuristic_vertical_line column ** Processing line: ~ bfs_scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height])~ - Inside source: true *** True Line Result bfs_scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a horizontal line for a column of the second grid~ - Inside source: true *** True Line Result # Returns a horizontal line for a column of the second grid ** Processing line: ~ def heuristic_horizontal_line row~ - Inside source: true *** True Line Result def heuristic_horizontal_line row ** Processing line: ~ bfs_scale_up([grid.width + 1, row, grid.width + grid.width + 1, row])~ - Inside source: true *** True Line Result bfs_scale_up([grid.width + 1, row, grid.width + grid.width + 1, row]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the star on the first grid~ - Inside source: true *** True Line Result # Renders the star on the first grid ** Processing line: ~ def render_bfs_star~ - Inside source: true *** True Line Result def render_bfs_star ** Processing line: ~ outputs.sprites << [bfs_scale_up(grid.star), 'star.png']~ - Inside source: true *** True Line Result outputs.sprites << [bfs_scale_up(grid.star), 'star.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the star on the second grid~ - Inside source: true *** True Line Result # Renders the star on the second grid ** Processing line: ~ def render_heuristic_star~ - Inside source: true *** True Line Result def render_heuristic_star ** Processing line: ~ outputs.sprites << [heuristic_scale_up(grid.star), 'star.png']~ - Inside source: true *** True Line Result outputs.sprites << [heuristic_scale_up(grid.star), 'star.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the target on the first grid~ - Inside source: true *** True Line Result # Renders the target on the first grid ** Processing line: ~ def render_bfs_target~ - Inside source: true *** True Line Result def render_bfs_target ** Processing line: ~ outputs.sprites << [bfs_scale_up(grid.target), 'target.png']~ - Inside source: true *** True Line Result outputs.sprites << [bfs_scale_up(grid.target), 'target.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the target on the second grid~ - Inside source: true *** True Line Result # Renders the target on the second grid ** Processing line: ~ def render_heuristic_target~ - Inside source: true *** True Line Result def render_heuristic_target ** Processing line: ~ outputs.sprites << [heuristic_scale_up(grid.target), 'target.png']~ - Inside source: true *** True Line Result outputs.sprites << [heuristic_scale_up(grid.target), 'target.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the walls on the first grid~ - Inside source: true *** True Line Result # Renders the walls on the first grid ** Processing line: ~ def render_bfs_walls~ - Inside source: true *** True Line Result def render_bfs_walls ** Processing line: ~ grid.walls.each_key do | wall |~ - Inside source: true *** True Line Result grid.walls.each_key do | wall | ** Processing line: ~ outputs.solids << [bfs_scale_up(wall), wall_color]~ - Inside source: true *** True Line Result outputs.solids << [bfs_scale_up(wall), wall_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the walls on the second grid~ - Inside source: true *** True Line Result # Renders the walls on the second grid ** Processing line: ~ def render_heuristic_walls~ - Inside source: true *** True Line Result def render_heuristic_walls ** Processing line: ~ grid.walls.each_key do | wall |~ - Inside source: true *** True Line Result grid.walls.each_key do | wall | ** Processing line: ~ outputs.solids << [heuristic_scale_up(wall), wall_color]~ - Inside source: true *** True Line Result outputs.solids << [heuristic_scale_up(wall), wall_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the visited cells on the first grid~ - Inside source: true *** True Line Result # Renders the visited cells on the first grid ** Processing line: ~ def render_bfs_visited~ - Inside source: true *** True Line Result def render_bfs_visited ** Processing line: ~ bfs.came_from.each_key do | visited_cell |~ - Inside source: true *** True Line Result bfs.came_from.each_key do | visited_cell | ** Processing line: ~ outputs.solids << [bfs_scale_up(visited_cell), visited_color]~ - Inside source: true *** True Line Result outputs.solids << [bfs_scale_up(visited_cell), visited_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the visited cells on the second grid~ - Inside source: true *** True Line Result # Renders the visited cells on the second grid ** Processing line: ~ def render_heuristic_visited~ - Inside source: true *** True Line Result def render_heuristic_visited ** Processing line: ~ heuristic.came_from.each_key do | visited_cell |~ - Inside source: true *** True Line Result heuristic.came_from.each_key do | visited_cell | ** Processing line: ~ outputs.solids << [heuristic_scale_up(visited_cell), visited_color]~ - Inside source: true *** True Line Result outputs.solids << [heuristic_scale_up(visited_cell), visited_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the frontier cells on the first grid~ - Inside source: true *** True Line Result # Renders the frontier cells on the first grid ** Processing line: ~ def render_bfs_frontier~ - Inside source: true *** True Line Result def render_bfs_frontier ** Processing line: ~ bfs.frontier.each do | frontier_cell |~ - Inside source: true *** True Line Result bfs.frontier.each do | frontier_cell | ** Processing line: ~ outputs.solids << [bfs_scale_up(frontier_cell), frontier_color, 200]~ - Inside source: true *** True Line Result outputs.solids << [bfs_scale_up(frontier_cell), frontier_color, 200] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the frontier cells on the second grid~ - Inside source: true *** True Line Result # Renders the frontier cells on the second grid ** Processing line: ~ def render_heuristic_frontier~ - Inside source: true *** True Line Result def render_heuristic_frontier ** Processing line: ~ heuristic.frontier.each do | frontier_cell |~ - Inside source: true *** True Line Result heuristic.frontier.each do | frontier_cell | ** Processing line: ~ outputs.solids << [heuristic_scale_up(frontier_cell), frontier_color, 200]~ - Inside source: true *** True Line Result outputs.solids << [heuristic_scale_up(frontier_cell), frontier_color, 200] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the path found by the breadth first search on the first grid~ - Inside source: true *** True Line Result # Renders the path found by the breadth first search on the first grid ** Processing line: ~ def render_bfs_path~ - Inside source: true *** True Line Result def render_bfs_path ** Processing line: ~ bfs.path.each do | path |~ - Inside source: true *** True Line Result bfs.path.each do | path | ** Processing line: ~ outputs.solids << [bfs_scale_up(path), path_color]~ - Inside source: true *** True Line Result outputs.solids << [bfs_scale_up(path), path_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the path found by the heuristic search on the second grid~ - Inside source: true *** True Line Result # Renders the path found by the heuristic search on the second grid ** Processing line: ~ def render_heuristic_path~ - Inside source: true *** True Line Result def render_heuristic_path ** Processing line: ~ heuristic.path.each do | path |~ - Inside source: true *** True Line Result heuristic.path.each do | path | ** Processing line: ~ outputs.solids << [heuristic_scale_up(path), path_color]~ - Inside source: true *** True Line Result outputs.solids << [heuristic_scale_up(path), path_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the rect for the path between two cells based on their relative positions~ - Inside source: true *** True Line Result # Returns the rect for the path between two cells based on their relative positions ** Processing line: ~ def get_path_between(cell_one, cell_two)~ - Inside source: true *** True Line Result def get_path_between(cell_one, cell_two) ** Processing line: ~ path = nil~ - Inside source: true *** True Line Result path = nil ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If cell one is above cell two~ - Inside source: true *** True Line Result # If cell one is above cell two ** Processing line: ~ if cell_one.x == cell_two.x and cell_one.y > cell_two.y~ - Inside source: true *** True Line Result if cell_one.x == cell_two.x and cell_one.y > cell_two.y ** Processing line: ~ # Path starts from the center of cell two and moves upward to the center of cell one~ - Inside source: true *** True Line Result # Path starts from the center of cell two and moves upward to the center of cell one ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 0.4, 1.4]~ - Inside source: true *** True Line Result path = [cell_two.x + 0.3, cell_two.y + 0.3, 0.4, 1.4] ** Processing line: ~ # If cell one is below cell two~ - Inside source: true *** True Line Result # If cell one is below cell two ** Processing line: ~ elsif cell_one.x == cell_two.x and cell_one.y < cell_two.y~ - Inside source: true *** True Line Result elsif cell_one.x == cell_two.x and cell_one.y < cell_two.y ** Processing line: ~ # Path starts from the center of cell one and moves upward to the center of cell two~ - Inside source: true *** True Line Result # Path starts from the center of cell one and moves upward to the center of cell two ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 0.4, 1.4]~ - Inside source: true *** True Line Result path = [cell_one.x + 0.3, cell_one.y + 0.3, 0.4, 1.4] ** Processing line: ~ # If cell one is to the left of cell two~ - Inside source: true *** True Line Result # If cell one is to the left of cell two ** Processing line: ~ elsif cell_one.x > cell_two.x and cell_one.y == cell_two.y~ - Inside source: true *** True Line Result elsif cell_one.x > cell_two.x and cell_one.y == cell_two.y ** Processing line: ~ # Path starts from the center of cell two and moves rightward to the center of cell one~ - Inside source: true *** True Line Result # Path starts from the center of cell two and moves rightward to the center of cell one ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 1.4, 0.4]~ - Inside source: true *** True Line Result path = [cell_two.x + 0.3, cell_two.y + 0.3, 1.4, 0.4] ** Processing line: ~ # If cell one is to the right of cell two~ - Inside source: true *** True Line Result # If cell one is to the right of cell two ** Processing line: ~ elsif cell_one.x < cell_two.x and cell_one.y == cell_two.y~ - Inside source: true *** True Line Result elsif cell_one.x < cell_two.x and cell_one.y == cell_two.y ** Processing line: ~ # Path starts from the center of cell one and moves rightward to the center of cell two~ - Inside source: true *** True Line Result # Path starts from the center of cell one and moves rightward to the center of cell two ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 1.4, 0.4]~ - Inside source: true *** True Line Result path = [cell_one.x + 0.3, cell_one.y + 0.3, 1.4, 0.4] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ path~ - Inside source: true *** True Line Result path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # In code, the cells are represented as 1x1 rectangles~ - Inside source: true *** True Line Result # In code, the cells are represented as 1x1 rectangles ** Processing line: ~ # When drawn, the cells are larger than 1x1 rectangles~ - Inside source: true *** True Line Result # When drawn, the cells are larger than 1x1 rectangles ** Processing line: ~ # This method is used to scale up cells, and lines~ - Inside source: true *** True Line Result # This method is used to scale up cells, and lines ** Processing line: ~ # Objects are scaled up according to the grid.cell_size variable~ - Inside source: true *** True Line Result # Objects are scaled up according to the grid.cell_size variable ** Processing line: ~ # This allows for easy customization of the visual scale of the grid~ - Inside source: true *** True Line Result # This allows for easy customization of the visual scale of the grid ** Processing line: ~ # This method scales up cells for the first grid~ - Inside source: true *** True Line Result # This method scales up cells for the first grid ** Processing line: ~ def bfs_scale_up(cell)~ - Inside source: true *** True Line Result def bfs_scale_up(cell) ** Processing line: ~ # Prevents the original value of cell from being edited~ - Inside source: true *** True Line Result # Prevents the original value of cell from being edited ** Processing line: ~ cell = cell.clone~ - Inside source: true *** True Line Result cell = cell.clone ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If cell is just an x and y coordinate~ - Inside source: true *** True Line Result # If cell is just an x and y coordinate ** Processing line: ~ if cell.size == 2~ - Inside source: true *** True Line Result if cell.size == 2 ** Processing line: ~ # Add a width and height of 1~ - Inside source: true *** True Line Result # Add a width and height of 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Scale all the values up~ - Inside source: true *** True Line Result # Scale all the values up ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ - Inside source: true *** True Line Result cell.map! { |value| value * grid.cell_size } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the scaled up cell~ - Inside source: true *** True Line Result # Returns the scaled up cell ** Processing line: ~ cell~ - Inside source: true *** True Line Result cell ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Translates the given cell grid.width + 1 to the right and then scales up~ - Inside source: true *** True Line Result # Translates the given cell grid.width + 1 to the right and then scales up ** Processing line: ~ # Used to draw cells for the second grid~ - Inside source: true *** True Line Result # Used to draw cells for the second grid ** Processing line: ~ # This method does not work for lines,~ - Inside source: true *** True Line Result # This method does not work for lines, ** Processing line: ~ # so separate methods exist for the grid lines~ - Inside source: true *** True Line Result # so separate methods exist for the grid lines ** Processing line: ~ def heuristic_scale_up(cell)~ - Inside source: true *** True Line Result def heuristic_scale_up(cell) ** Processing line: ~ # Prevents the original value of cell from being edited~ - Inside source: true *** True Line Result # Prevents the original value of cell from being edited ** Processing line: ~ cell = cell.clone~ - Inside source: true *** True Line Result cell = cell.clone ** Processing line: ~ # Translates the cell to the second grid equivalent~ - Inside source: true *** True Line Result # Translates the cell to the second grid equivalent ** Processing line: ~ cell.x += grid.width + 1~ - Inside source: true *** True Line Result cell.x += grid.width + 1 ** Processing line: ~ # Proceeds as if scaling up for the first grid~ - Inside source: true *** True Line Result # Proceeds as if scaling up for the first grid ** Processing line: ~ bfs_scale_up(cell)~ - Inside source: true *** True Line Result bfs_scale_up(cell) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks and handles input for the buttons~ - Inside source: true *** True Line Result # Checks and handles input for the buttons ** Processing line: ~ # Called when the mouse is lifted~ - Inside source: true *** True Line Result # Called when the mouse is lifted ** Processing line: ~ def input_buttons~ - Inside source: true *** True Line Result def input_buttons ** Processing line: ~ input_left_button~ - Inside source: true *** True Line Result input_left_button ** Processing line: ~ input_center_button~ - Inside source: true *** True Line Result input_center_button ** Processing line: ~ input_right_button~ - Inside source: true *** True Line Result input_right_button ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks if the previous step button is clicked~ - Inside source: true *** True Line Result # Checks if the previous step button is clicked ** Processing line: ~ # If it is, it pauses the animation and moves the search one step backward~ - Inside source: true *** True Line Result # If it is, it pauses the animation and moves the search one step backward ** Processing line: ~ def input_left_button~ - Inside source: true *** True Line Result def input_left_button ** Processing line: ~ if left_button_clicked?~ - Inside source: true *** True Line Result if left_button_clicked? ** Processing line: ~ state.play = false~ - Inside source: true *** True Line Result state.play = false ** Processing line: ~ state.current_step -= 1~ - Inside source: true *** True Line Result state.current_step -= 1 ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Controls the play/pause button~ - Inside source: true *** True Line Result # Controls the play/pause button ** Processing line: ~ # Inverses whether the animation is playing or not when clicked~ - Inside source: true *** True Line Result # Inverses whether the animation is playing or not when clicked ** Processing line: ~ def input_center_button~ - Inside source: true *** True Line Result def input_center_button ** Processing line: ~ if center_button_clicked? || inputs.keyboard.key_down.space~ - Inside source: true *** True Line Result if center_button_clicked? || inputs.keyboard.key_down.space ** Processing line: ~ state.play = !state.play~ - Inside source: true *** True Line Result state.play = !state.play ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks if the next step button is clicked~ - Inside source: true *** True Line Result # Checks if the next step button is clicked ** Processing line: ~ # If it is, it pauses the animation and moves the search one step forward~ - Inside source: true *** True Line Result # If it is, it pauses the animation and moves the search one step forward ** Processing line: ~ def input_right_button~ - Inside source: true *** True Line Result def input_right_button ** Processing line: ~ if right_button_clicked?~ - Inside source: true *** True Line Result if right_button_clicked? ** Processing line: ~ state.play = false~ - Inside source: true *** True Line Result state.play = false ** Processing line: ~ state.current_step += 1~ - Inside source: true *** True Line Result state.current_step += 1 ** Processing line: ~ move_searches_one_step_forward~ - Inside source: true *** True Line Result move_searches_one_step_forward ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These methods detect when the buttons are clicked~ - Inside source: true *** True Line Result # These methods detect when the buttons are clicked ** Processing line: ~ def left_button_clicked?~ - Inside source: true *** True Line Result def left_button_clicked? ** Processing line: ~ inputs.mouse.point.inside_rect?(buttons.left) && inputs.mouse.up~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(buttons.left) && inputs.mouse.up ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def center_button_clicked?~ - Inside source: true *** True Line Result def center_button_clicked? ** Processing line: ~ inputs.mouse.point.inside_rect?(buttons.center) && inputs.mouse.up~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(buttons.center) && inputs.mouse.up ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def right_button_clicked?~ - Inside source: true *** True Line Result def right_button_clicked? ** Processing line: ~ inputs.mouse.point.inside_rect?(buttons.right) && inputs.mouse.up~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(buttons.right) && inputs.mouse.up ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the slider~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the slider ** Processing line: ~ # Is the mouse over the circle of the slider?~ - Inside source: true *** True Line Result # Is the mouse over the circle of the slider? ** Processing line: ~ def mouse_over_slider?~ - Inside source: true *** True Line Result def mouse_over_slider? ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.current_step * slider.spacing)~ - Inside source: true *** True Line Result circle_x = (slider.x - slider.offset) + (state.current_step * slider.spacing) ** Processing line: ~ circle_y = (slider.y - slider.offset)~ - Inside source: true *** True Line Result circle_y = (slider.y - slider.offset) ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ - Inside source: true *** True Line Result circle_rect = [circle_x, circle_y, 37, 37] ** Processing line: ~ inputs.mouse.point.inside_rect?(circle_rect)~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(circle_rect) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the star from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the star from the first grid ** Processing line: ~ def bfs_mouse_over_star?~ - Inside source: true *** True Line Result def bfs_mouse_over_star? ** Processing line: ~ inputs.mouse.point.inside_rect?(bfs_scale_up(grid.star))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(bfs_scale_up(grid.star)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the star from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the star from the second grid ** Processing line: ~ def heuristic_mouse_over_star?~ - Inside source: true *** True Line Result def heuristic_mouse_over_star? ** Processing line: ~ inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.star))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.star)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the target from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the target from the first grid ** Processing line: ~ def bfs_mouse_over_target?~ - Inside source: true *** True Line Result def bfs_mouse_over_target? ** Processing line: ~ inputs.mouse.point.inside_rect?(bfs_scale_up(grid.target))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(bfs_scale_up(grid.target)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the target from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the target from the second grid ** Processing line: ~ def heuristic_mouse_over_target?~ - Inside source: true *** True Line Result def heuristic_mouse_over_target? ** Processing line: ~ inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.target))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.target)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing walls from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be removing walls from the first grid ** Processing line: ~ def bfs_mouse_over_wall?~ - Inside source: true *** True Line Result def bfs_mouse_over_wall? ** Processing line: ~ grid.walls.each_key do | wall |~ - Inside source: true *** True Line Result grid.walls.each_key do | wall | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(bfs_scale_up(wall))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(bfs_scale_up(wall)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing walls from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be removing walls from the second grid ** Processing line: ~ def heuristic_mouse_over_wall?~ - Inside source: true *** True Line Result def heuristic_mouse_over_wall? ** Processing line: ~ grid.walls.each_key do | wall |~ - Inside source: true *** True Line Result grid.walls.each_key do | wall | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(heuristic_scale_up(wall))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(heuristic_scale_up(wall)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be adding walls from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be adding walls from the first grid ** Processing line: ~ def bfs_mouse_over_grid?~ - Inside source: true *** True Line Result def bfs_mouse_over_grid? ** Processing line: ~ inputs.mouse.point.inside_rect?(bfs_scale_up(grid.rect))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(bfs_scale_up(grid.rect)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be adding walls from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be adding walls from the second grid ** Processing line: ~ def heuristic_mouse_over_grid?~ - Inside source: true *** True Line Result def heuristic_mouse_over_grid? ** Processing line: ~ inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.rect))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.rect)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method is called when the user is editing the slider~ - Inside source: true *** True Line Result # This method is called when the user is editing the slider ** Processing line: ~ # It pauses the animation and moves the white circle to the closest integer point~ - Inside source: true *** True Line Result # It pauses the animation and moves the white circle to the closest integer point ** Processing line: ~ # on the slider~ - Inside source: true *** True Line Result # on the slider ** Processing line: ~ # Changes the step of the search to be animated~ - Inside source: true *** True Line Result # Changes the step of the search to be animated ** Processing line: ~ def process_input_slider~ - Inside source: true *** True Line Result def process_input_slider ** Processing line: ~ state.play = false~ - Inside source: true *** True Line Result state.play = false ** Processing line: ~ mouse_x = inputs.mouse.point.x~ - Inside source: true *** True Line Result mouse_x = inputs.mouse.point.x ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Bounds the mouse_x to the closest x value on the slider line~ - Inside source: true *** True Line Result # Bounds the mouse_x to the closest x value on the slider line ** Processing line: ~ mouse_x = slider.x if mouse_x < slider.x~ - Inside source: true *** True Line Result mouse_x = slider.x if mouse_x < slider.x ** Processing line: ~ mouse_x = slider.x + slider.w if mouse_x > slider.x + slider.w~ - Inside source: true *** True Line Result mouse_x = slider.x + slider.w if mouse_x > slider.x + slider.w ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the current search step to the one represented by the mouse x value~ - Inside source: true *** True Line Result # Sets the current search step to the one represented by the mouse x value ** Processing line: ~ # The slider's circle moves due to the render_slider method using anim_steps~ - Inside source: true *** True Line Result # The slider's circle moves due to the render_slider method using anim_steps ** Processing line: ~ state.current_step = ((mouse_x - slider.x) / slider.spacing).to_i~ - Inside source: true *** True Line Result state.current_step = ((mouse_x - slider.x) / slider.spacing).to_i ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the star to the cell closest to the mouse in the first grid~ - Inside source: true *** True Line Result # Moves the star to the cell closest to the mouse in the first grid ** Processing line: ~ # Only resets the search if the star changes position~ - Inside source: true *** True Line Result # Only resets the search if the star changes position ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ - Inside source: true *** True Line Result # Called whenever the user is editing the star (puts mouse down on star) ** Processing line: ~ def process_input_bfs_star~ - Inside source: true *** True Line Result def process_input_bfs_star ** Processing line: ~ old_star = grid.star.clone~ - Inside source: true *** True Line Result old_star = grid.star.clone ** Processing line: ~ unless bfs_cell_closest_to_mouse == grid.target~ - Inside source: true *** True Line Result unless bfs_cell_closest_to_mouse == grid.target ** Processing line: ~ grid.star = bfs_cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.star = bfs_cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_star == grid.star~ - Inside source: true *** True Line Result unless old_star == grid.star ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the star to the cell closest to the mouse in the second grid~ - Inside source: true *** True Line Result # Moves the star to the cell closest to the mouse in the second grid ** Processing line: ~ # Only resets the search if the star changes position~ - Inside source: true *** True Line Result # Only resets the search if the star changes position ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ - Inside source: true *** True Line Result # Called whenever the user is editing the star (puts mouse down on star) ** Processing line: ~ def process_input_heuristic_star~ - Inside source: true *** True Line Result def process_input_heuristic_star ** Processing line: ~ old_star = grid.star.clone~ - Inside source: true *** True Line Result old_star = grid.star.clone ** Processing line: ~ unless heuristic_cell_closest_to_mouse == grid.target~ - Inside source: true *** True Line Result unless heuristic_cell_closest_to_mouse == grid.target ** Processing line: ~ grid.star = heuristic_cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.star = heuristic_cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_star == grid.star~ - Inside source: true *** True Line Result unless old_star == grid.star ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the target to the grid closest to the mouse in the first grid~ - Inside source: true *** True Line Result # Moves the target to the grid closest to the mouse in the first grid ** Processing line: ~ # Only recalculate_searchess the search if the target changes position~ - Inside source: true *** True Line Result # Only recalculate_searchess the search if the target changes position ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ - Inside source: true *** True Line Result # Called whenever the user is editing the target (puts mouse down on target) ** Processing line: ~ def process_input_bfs_target~ - Inside source: true *** True Line Result def process_input_bfs_target ** Processing line: ~ old_target = grid.target.clone~ - Inside source: true *** True Line Result old_target = grid.target.clone ** Processing line: ~ unless bfs_cell_closest_to_mouse == grid.star~ - Inside source: true *** True Line Result unless bfs_cell_closest_to_mouse == grid.star ** Processing line: ~ grid.target = bfs_cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.target = bfs_cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_target == grid.target~ - Inside source: true *** True Line Result unless old_target == grid.target ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the target to the cell closest to the mouse in the second grid~ - Inside source: true *** True Line Result # Moves the target to the cell closest to the mouse in the second grid ** Processing line: ~ # Only recalculate_searchess the search if the target changes position~ - Inside source: true *** True Line Result # Only recalculate_searchess the search if the target changes position ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ - Inside source: true *** True Line Result # Called whenever the user is editing the target (puts mouse down on target) ** Processing line: ~ def process_input_heuristic_target~ - Inside source: true *** True Line Result def process_input_heuristic_target ** Processing line: ~ old_target = grid.target.clone~ - Inside source: true *** True Line Result old_target = grid.target.clone ** Processing line: ~ unless heuristic_cell_closest_to_mouse == grid.star~ - Inside source: true *** True Line Result unless heuristic_cell_closest_to_mouse == grid.star ** Processing line: ~ grid.target = heuristic_cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.target = heuristic_cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_target == grid.target~ - Inside source: true *** True Line Result unless old_target == grid.target ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Removes walls in the first grid that are under the cursor~ - Inside source: true *** True Line Result # Removes walls in the first grid that are under the cursor ** Processing line: ~ def process_input_bfs_remove_wall~ - Inside source: true *** True Line Result def process_input_bfs_remove_wall ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ - Inside source: true *** True Line Result # The mouse needs to be inside the grid, because we only want to remove walls ** Processing line: ~ # the cursor is directly over~ - Inside source: true *** True Line Result # the cursor is directly over ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ - Inside source: true *** True Line Result # Recalculations should only occur when a wall is actually deleted ** Processing line: ~ if bfs_mouse_over_grid?~ - Inside source: true *** True Line Result if bfs_mouse_over_grid? ** Processing line: ~ if grid.walls.has_key?(bfs_cell_closest_to_mouse)~ - Inside source: true *** True Line Result if grid.walls.has_key?(bfs_cell_closest_to_mouse) ** Processing line: ~ grid.walls.delete(bfs_cell_closest_to_mouse)~ - Inside source: true *** True Line Result grid.walls.delete(bfs_cell_closest_to_mouse) ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Removes walls in the second grid that are under the cursor~ - Inside source: true *** True Line Result # Removes walls in the second grid that are under the cursor ** Processing line: ~ def process_input_heuristic_remove_wall~ - Inside source: true *** True Line Result def process_input_heuristic_remove_wall ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ - Inside source: true *** True Line Result # The mouse needs to be inside the grid, because we only want to remove walls ** Processing line: ~ # the cursor is directly over~ - Inside source: true *** True Line Result # the cursor is directly over ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ - Inside source: true *** True Line Result # Recalculations should only occur when a wall is actually deleted ** Processing line: ~ if heuristic_mouse_over_grid?~ - Inside source: true *** True Line Result if heuristic_mouse_over_grid? ** Processing line: ~ if grid.walls.has_key?(heuristic_cell_closest_to_mouse)~ - Inside source: true *** True Line Result if grid.walls.has_key?(heuristic_cell_closest_to_mouse) ** Processing line: ~ grid.walls.delete(heuristic_cell_closest_to_mouse)~ - Inside source: true *** True Line Result grid.walls.delete(heuristic_cell_closest_to_mouse) ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ # Adds a wall in the first grid in the cell the mouse is over~ - Inside source: true *** True Line Result # Adds a wall in the first grid in the cell the mouse is over ** Processing line: ~ def process_input_bfs_add_wall~ - Inside source: true *** True Line Result def process_input_bfs_add_wall ** Processing line: ~ if bfs_mouse_over_grid?~ - Inside source: true *** True Line Result if bfs_mouse_over_grid? ** Processing line: ~ unless grid.walls.has_key?(bfs_cell_closest_to_mouse)~ - Inside source: true *** True Line Result unless grid.walls.has_key?(bfs_cell_closest_to_mouse) ** Processing line: ~ grid.walls[bfs_cell_closest_to_mouse] = true~ - Inside source: true *** True Line Result grid.walls[bfs_cell_closest_to_mouse] = true ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds a wall in the second grid in the cell the mouse is over~ - Inside source: true *** True Line Result # Adds a wall in the second grid in the cell the mouse is over ** Processing line: ~ def process_input_heuristic_add_wall~ - Inside source: true *** True Line Result def process_input_heuristic_add_wall ** Processing line: ~ if heuristic_mouse_over_grid?~ - Inside source: true *** True Line Result if heuristic_mouse_over_grid? ** Processing line: ~ unless grid.walls.has_key?(heuristic_cell_closest_to_mouse)~ - Inside source: true *** True Line Result unless grid.walls.has_key?(heuristic_cell_closest_to_mouse) ** Processing line: ~ grid.walls[heuristic_cell_closest_to_mouse] = true~ - Inside source: true *** True Line Result grid.walls[heuristic_cell_closest_to_mouse] = true ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ - Inside source: true *** True Line Result # When the user grabs the star and puts their cursor to the far right ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ - Inside source: true *** True Line Result # and moves up and down, the star is supposed to move along the grid as well ** Processing line: ~ # Finding the cell closest to the mouse helps with this~ - Inside source: true *** True Line Result # Finding the cell closest to the mouse helps with this ** Processing line: ~ def bfs_cell_closest_to_mouse~ - Inside source: true *** True Line Result def bfs_cell_closest_to_mouse ** Processing line: ~ # Closest cell to the mouse in the first grid~ - Inside source: true *** True Line Result # Closest cell to the mouse in the first grid ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ - Inside source: true *** True Line Result x = (inputs.mouse.point.x / grid.cell_size).to_i ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ - Inside source: true *** True Line Result y = (inputs.mouse.point.y / grid.cell_size).to_i ** Processing line: ~ # Bound x and y to the grid~ - Inside source: true *** True Line Result # Bound x and y to the grid ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ - Inside source: true *** True Line Result x = grid.width - 1 if x > grid.width - 1 ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ - Inside source: true *** True Line Result y = grid.height - 1 if y > grid.height - 1 ** Processing line: ~ # Return closest cell~ - Inside source: true *** True Line Result # Return closest cell ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ - Inside source: true *** True Line Result # When the user grabs the star and puts their cursor to the far right ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ - Inside source: true *** True Line Result # and moves up and down, the star is supposed to move along the grid as well ** Processing line: ~ # Finding the cell closest to the mouse in the second grid helps with this~ - Inside source: true *** True Line Result # Finding the cell closest to the mouse in the second grid helps with this ** Processing line: ~ def heuristic_cell_closest_to_mouse~ - Inside source: true *** True Line Result def heuristic_cell_closest_to_mouse ** Processing line: ~ # Closest cell grid to the mouse in the second~ - Inside source: true *** True Line Result # Closest cell grid to the mouse in the second ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ - Inside source: true *** True Line Result x = (inputs.mouse.point.x / grid.cell_size).to_i ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ - Inside source: true *** True Line Result y = (inputs.mouse.point.y / grid.cell_size).to_i ** Processing line: ~ # Translate the cell to the first grid~ - Inside source: true *** True Line Result # Translate the cell to the first grid ** Processing line: ~ x -= grid.width + 1~ - Inside source: true *** True Line Result x -= grid.width + 1 ** Processing line: ~ # Bound x and y to the first grid~ - Inside source: true *** True Line Result # Bound x and y to the first grid ** Processing line: ~ x = 0 if x < 0~ - Inside source: true *** True Line Result x = 0 if x < 0 ** Processing line: ~ y = 0 if y < 0~ - Inside source: true *** True Line Result y = 0 if y < 0 ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ - Inside source: true *** True Line Result x = grid.width - 1 if x > grid.width - 1 ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ - Inside source: true *** True Line Result y = grid.height - 1 if y > grid.height - 1 ** Processing line: ~ # Return closest cell~ - Inside source: true *** True Line Result # Return closest cell ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def recalculate_searches~ - Inside source: true *** True Line Result def recalculate_searches ** Processing line: ~ # Reset the searches~ - Inside source: true *** True Line Result # Reset the searches ** Processing line: ~ bfs.came_from = {}~ - Inside source: true *** True Line Result bfs.came_from = {} ** Processing line: ~ bfs.frontier = []~ - Inside source: true *** True Line Result bfs.frontier = [] ** Processing line: ~ bfs.path = []~ - Inside source: true *** True Line Result bfs.path = [] ** Processing line: ~ heuristic.came_from = {}~ - Inside source: true *** True Line Result heuristic.came_from = {} ** Processing line: ~ heuristic.frontier = []~ - Inside source: true *** True Line Result heuristic.frontier = [] ** Processing line: ~ heuristic.path = []~ - Inside source: true *** True Line Result heuristic.path = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Move the searches forward to the current step~ - Inside source: true *** True Line Result # Move the searches forward to the current step ** Processing line: ~ state.current_step.times { move_searches_one_step_forward }~ - Inside source: true *** True Line Result state.current_step.times { move_searches_one_step_forward } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_searches_one_step_forward~ - Inside source: true *** True Line Result def move_searches_one_step_forward ** Processing line: ~ bfs_one_step_forward~ - Inside source: true *** True Line Result bfs_one_step_forward ** Processing line: ~ heuristic_one_step_forward~ - Inside source: true *** True Line Result heuristic_one_step_forward ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bfs_one_step_forward~ - Inside source: true *** True Line Result def bfs_one_step_forward ** Processing line: ~ return if bfs.came_from.has_key?(grid.target)~ - Inside source: true *** True Line Result return if bfs.came_from.has_key?(grid.target) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Only runs at the beginning of the search as setup.~ - Inside source: true *** True Line Result # Only runs at the beginning of the search as setup. ** Processing line: ~ if bfs.came_from.empty?~ - Inside source: true *** True Line Result if bfs.came_from.empty? ** Processing line: ~ bfs.frontier << grid.star~ - Inside source: true *** True Line Result bfs.frontier << grid.star ** Processing line: ~ bfs.came_from[grid.star] = nil~ - Inside source: true *** True Line Result bfs.came_from[grid.star] = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # A step in the search~ - Inside source: true *** True Line Result # A step in the search ** Processing line: ~ unless bfs.frontier.empty?~ - Inside source: true *** True Line Result unless bfs.frontier.empty? ** Processing line: ~ # Takes the next frontier cell~ - Inside source: true *** True Line Result # Takes the next frontier cell ** Processing line: ~ new_frontier = bfs.frontier.shift~ - Inside source: true *** True Line Result new_frontier = bfs.frontier.shift ** Processing line: ~ # For each of its neighbors~ - Inside source: true *** True Line Result # For each of its neighbors ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ - Inside source: true *** True Line Result adjacent_neighbors(new_frontier).each do |neighbor| ** Processing line: ~ # That have not been visited and are not walls~ - Inside source: true *** True Line Result # That have not been visited and are not walls ** Processing line: ~ unless bfs.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor)~ - Inside source: true *** True Line Result unless bfs.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor) ** Processing line: ~ # Add them to the frontier and mark them as visited~ - Inside source: true *** True Line Result # Add them to the frontier and mark them as visited ** Processing line: ~ bfs.frontier << neighbor~ - Inside source: true *** True Line Result bfs.frontier << neighbor ** Processing line: ~ bfs.came_from[neighbor] = new_frontier~ - Inside source: true *** True Line Result bfs.came_from[neighbor] = new_frontier ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line~ - Inside source: true *** True Line Result # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line ** Processing line: ~ # Comment this line and let a path generate to see the difference~ - Inside source: true *** True Line Result # Comment this line and let a path generate to see the difference ** Processing line: ~ bfs.frontier = bfs.frontier.sort_by {| cell | proximity_to_star(cell) }~ - Inside source: true *** True Line Result bfs.frontier = bfs.frontier.sort_by {| cell | proximity_to_star(cell) } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the search found the target~ - Inside source: true *** True Line Result # If the search found the target ** Processing line: ~ if bfs.came_from.has_key?(grid.target)~ - Inside source: true *** True Line Result if bfs.came_from.has_key?(grid.target) ** Processing line: ~ # Calculate the path between the target and star~ - Inside source: true *** True Line Result # Calculate the path between the target and star ** Processing line: ~ bfs_calc_path~ - Inside source: true *** True Line Result bfs_calc_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the path between the target and star for the breadth first search~ - Inside source: true *** True Line Result # Calculates the path between the target and star for the breadth first search ** Processing line: ~ # Only called when the breadth first search finds the target~ - Inside source: true *** True Line Result # Only called when the breadth first search finds the target ** Processing line: ~ def bfs_calc_path~ - Inside source: true *** True Line Result def bfs_calc_path ** Processing line: ~ # Start from the target~ - Inside source: true *** True Line Result # Start from the target ** Processing line: ~ endpoint = grid.target~ - Inside source: true *** True Line Result endpoint = grid.target ** Processing line: ~ # And the cell it came from~ - Inside source: true *** True Line Result # And the cell it came from ** Processing line: ~ next_endpoint = bfs.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = bfs.came_from[endpoint] ** Processing line: ~ while endpoint and next_endpoint~ - Inside source: true *** True Line Result while endpoint and next_endpoint ** Processing line: ~ # Draw a path between these two cells and store it~ - Inside source: true *** True Line Result # Draw a path between these two cells and store it ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ - Inside source: true *** True Line Result path = get_path_between(endpoint, next_endpoint) ** Processing line: ~ bfs.path << path~ - Inside source: true *** True Line Result bfs.path << path ** Processing line: ~ # And get the next pair of cells~ - Inside source: true *** True Line Result # And get the next pair of cells ** Processing line: ~ endpoint = next_endpoint~ - Inside source: true *** True Line Result endpoint = next_endpoint ** Processing line: ~ next_endpoint = bfs.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = bfs.came_from[endpoint] ** Processing line: ~ # Continue till there are no more cells~ - Inside source: true *** True Line Result # Continue till there are no more cells ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the heuristic search forward one step~ - Inside source: true *** True Line Result # Moves the heuristic search forward one step ** Processing line: ~ # Can be called from tick while the animation is playing~ - Inside source: true *** True Line Result # Can be called from tick while the animation is playing ** Processing line: ~ # Can also be called when recalculating the searches after the user edited the grid~ - Inside source: true *** True Line Result # Can also be called when recalculating the searches after the user edited the grid ** Processing line: ~ def heuristic_one_step_forward~ - Inside source: true *** True Line Result def heuristic_one_step_forward ** Processing line: ~ # Stop the search if the target has been found~ - Inside source: true *** True Line Result # Stop the search if the target has been found ** Processing line: ~ return if heuristic.came_from.has_key?(grid.target)~ - Inside source: true *** True Line Result return if heuristic.came_from.has_key?(grid.target) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the search has not begun~ - Inside source: true *** True Line Result # If the search has not begun ** Processing line: ~ if heuristic.came_from.empty?~ - Inside source: true *** True Line Result if heuristic.came_from.empty? ** Processing line: ~ # Setup the search to begin from the star~ - Inside source: true *** True Line Result # Setup the search to begin from the star ** Processing line: ~ heuristic.frontier << grid.star~ - Inside source: true *** True Line Result heuristic.frontier << grid.star ** Processing line: ~ heuristic.came_from[grid.star] = nil~ - Inside source: true *** True Line Result heuristic.came_from[grid.star] = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # One step in the heuristic search~ - Inside source: true *** True Line Result # One step in the heuristic search ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Unless there are no more cells to explore from~ - Inside source: true *** True Line Result # Unless there are no more cells to explore from ** Processing line: ~ unless heuristic.frontier.empty?~ - Inside source: true *** True Line Result unless heuristic.frontier.empty? ** Processing line: ~ # Get the next cell to explore from~ - Inside source: true *** True Line Result # Get the next cell to explore from ** Processing line: ~ new_frontier = heuristic.frontier.shift~ - Inside source: true *** True Line Result new_frontier = heuristic.frontier.shift ** Processing line: ~ # For each of its neighbors~ - Inside source: true *** True Line Result # For each of its neighbors ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ - Inside source: true *** True Line Result adjacent_neighbors(new_frontier).each do |neighbor| ** Processing line: ~ # That have not been visited and are not walls~ - Inside source: true *** True Line Result # That have not been visited and are not walls ** Processing line: ~ unless heuristic.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor)~ - Inside source: true *** True Line Result unless heuristic.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor) ** Processing line: ~ # Add them to the frontier and mark them as visited~ - Inside source: true *** True Line Result # Add them to the frontier and mark them as visited ** Processing line: ~ heuristic.frontier << neighbor~ - Inside source: true *** True Line Result heuristic.frontier << neighbor ** Processing line: ~ heuristic.came_from[neighbor] = new_frontier~ - Inside source: true *** True Line Result heuristic.came_from[neighbor] = new_frontier ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line~ - Inside source: true *** True Line Result # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line ** Processing line: ~ heuristic.frontier = heuristic.frontier.sort_by {| cell | proximity_to_star(cell) }~ - Inside source: true *** True Line Result heuristic.frontier = heuristic.frontier.sort_by {| cell | proximity_to_star(cell) } ** Processing line: ~ # Sort the frontier so cells that are close to the target are then prioritized~ - Inside source: true *** True Line Result # Sort the frontier so cells that are close to the target are then prioritized ** Processing line: ~ heuristic.frontier = heuristic.frontier.sort_by {| cell | heuristic_heuristic(cell) }~ - Inside source: true *** True Line Result heuristic.frontier = heuristic.frontier.sort_by {| cell | heuristic_heuristic(cell) } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the search found the target~ - Inside source: true *** True Line Result # If the search found the target ** Processing line: ~ if heuristic.came_from.has_key?(grid.target)~ - Inside source: true *** True Line Result if heuristic.came_from.has_key?(grid.target) ** Processing line: ~ # Calculate the path between the target and star~ - Inside source: true *** True Line Result # Calculate the path between the target and star ** Processing line: ~ heuristic_calc_path~ - Inside source: true *** True Line Result heuristic_calc_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns one-dimensional absolute distance between cell and target~ - Inside source: true *** True Line Result # Returns one-dimensional absolute distance between cell and target ** Processing line: ~ # Returns a number to compare distances between cells and the target~ - Inside source: true *** True Line Result # Returns a number to compare distances between cells and the target ** Processing line: ~ def heuristic_heuristic(cell)~ - Inside source: true *** True Line Result def heuristic_heuristic(cell) ** Processing line: ~ (grid.target.x - cell.x).abs + (grid.target.y - cell.y).abs~ - Inside source: true *** True Line Result (grid.target.x - cell.x).abs + (grid.target.y - cell.y).abs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the path between the target and star for the heuristic search~ - Inside source: true *** True Line Result # Calculates the path between the target and star for the heuristic search ** Processing line: ~ # Only called when the heuristic search finds the target~ - Inside source: true *** True Line Result # Only called when the heuristic search finds the target ** Processing line: ~ def heuristic_calc_path~ - Inside source: true *** True Line Result def heuristic_calc_path ** Processing line: ~ # Start from the target~ - Inside source: true *** True Line Result # Start from the target ** Processing line: ~ endpoint = grid.target~ - Inside source: true *** True Line Result endpoint = grid.target ** Processing line: ~ # And the cell it came from~ - Inside source: true *** True Line Result # And the cell it came from ** Processing line: ~ next_endpoint = heuristic.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = heuristic.came_from[endpoint] ** Processing line: ~ while endpoint and next_endpoint~ - Inside source: true *** True Line Result while endpoint and next_endpoint ** Processing line: ~ # Draw a path between these two cells and store it~ - Inside source: true *** True Line Result # Draw a path between these two cells and store it ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ - Inside source: true *** True Line Result path = get_path_between(endpoint, next_endpoint) ** Processing line: ~ heuristic.path << path~ - Inside source: true *** True Line Result heuristic.path << path ** Processing line: ~ # And get the next pair of cells~ - Inside source: true *** True Line Result # And get the next pair of cells ** Processing line: ~ endpoint = next_endpoint~ - Inside source: true *** True Line Result endpoint = next_endpoint ** Processing line: ~ next_endpoint = heuristic.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = heuristic.came_from[endpoint] ** Processing line: ~ # Continue till there are no more cells~ - Inside source: true *** True Line Result # Continue till there are no more cells ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a list of adjacent cells~ - Inside source: true *** True Line Result # Returns a list of adjacent cells ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ - Inside source: true *** True Line Result # Used to determine what the next cells to be added to the frontier are ** Processing line: ~ def adjacent_neighbors(cell)~ - Inside source: true *** True Line Result def adjacent_neighbors(cell) ** Processing line: ~ neighbors = []~ - Inside source: true *** True Line Result neighbors = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Gets all the valid neighbors into the array~ - Inside source: true *** True Line Result # Gets all the valid neighbors into the array ** Processing line: ~ # From southern neighbor, clockwise~ - Inside source: true *** True Line Result # From southern neighbor, clockwise ** Processing line: ~ neighbors << [cell.x , cell.y - 1] unless cell.y == 0~ - Inside source: true *** True Line Result neighbors << [cell.x , cell.y - 1] unless cell.y == 0 ** Processing line: ~ neighbors << [cell.x - 1, cell.y ] unless cell.x == 0~ - Inside source: true *** True Line Result neighbors << [cell.x - 1, cell.y ] unless cell.x == 0 ** Processing line: ~ neighbors << [cell.x , cell.y + 1] unless cell.y == grid.height - 1~ - Inside source: true *** True Line Result neighbors << [cell.x , cell.y + 1] unless cell.y == grid.height - 1 ** Processing line: ~ neighbors << [cell.x + 1, cell.y ] unless cell.x == grid.width - 1~ - Inside source: true *** True Line Result neighbors << [cell.x + 1, cell.y ] unless cell.x == grid.width - 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ neighbors~ - Inside source: true *** True Line Result neighbors ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds the vertical and horizontal distance of a cell from the star~ - Inside source: true *** True Line Result # Finds the vertical and horizontal distance of a cell from the star ** Processing line: ~ # and returns the larger value~ - Inside source: true *** True Line Result # and returns the larger value ** Processing line: ~ # This method is used to have a zigzag pattern in the rendered path~ - Inside source: true *** True Line Result # This method is used to have a zigzag pattern in the rendered path ** Processing line: ~ # A cell that is [5, 5] from the star,~ - Inside source: true *** True Line Result # A cell that is [5, 5] from the star, ** Processing line: ~ # is explored before over a cell that is [0, 7] away.~ - Inside source: true *** True Line Result # is explored before over a cell that is [0, 7] away. ** Processing line: ~ # So, if possible, the search tries to go diagonal (zigzag) first~ - Inside source: true *** True Line Result # So, if possible, the search tries to go diagonal (zigzag) first ** Processing line: ~ def proximity_to_star(cell)~ - Inside source: true *** True Line Result def proximity_to_star(cell) ** Processing line: ~ distance_x = (grid.star.x - cell.x).abs~ - Inside source: true *** True Line Result distance_x = (grid.star.x - cell.x).abs ** Processing line: ~ distance_y = (grid.star.y - cell.y).abs~ - Inside source: true *** True Line Result distance_y = (grid.star.y - cell.y).abs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if distance_x > distance_y~ - Inside source: true *** True Line Result if distance_x > distance_y ** Processing line: ~ return distance_x~ - Inside source: true *** True Line Result return distance_x ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return distance_y~ - Inside source: true *** True Line Result return distance_y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Methods that allow code to be more concise. Subdivides args.state, which is where all variables are stored.~ - Inside source: true *** True Line Result # Methods that allow code to be more concise. Subdivides args.state, which is where all variables are stored. ** Processing line: ~ def grid~ - Inside source: true *** True Line Result def grid ** Processing line: ~ state.grid~ - Inside source: true *** True Line Result state.grid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def buttons~ - Inside source: true *** True Line Result def buttons ** Processing line: ~ state.buttons~ - Inside source: true *** True Line Result state.buttons ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def slider~ - Inside source: true *** True Line Result def slider ** Processing line: ~ state.slider~ - Inside source: true *** True Line Result state.slider ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bfs~ - Inside source: true *** True Line Result def bfs ** Processing line: ~ state.bfs~ - Inside source: true *** True Line Result state.bfs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def heuristic~ - Inside source: true *** True Line Result def heuristic ** Processing line: ~ state.heuristic~ - Inside source: true *** True Line Result state.heuristic ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Descriptive aliases for colors~ - Inside source: true *** True Line Result # Descriptive aliases for colors ** Processing line: ~ def default_color~ - Inside source: true *** True Line Result def default_color ** Processing line: ~ [221, 212, 213] # Light Brown~ - Inside source: true *** True Line Result [221, 212, 213] # Light Brown ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def wall_color~ - Inside source: true *** True Line Result def wall_color ** Processing line: ~ [134, 134, 120] # Camo Green~ - Inside source: true *** True Line Result [134, 134, 120] # Camo Green ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def visited_color~ - Inside source: true *** True Line Result def visited_color ** Processing line: ~ [204, 191, 179] # Dark Brown~ - Inside source: true *** True Line Result [204, 191, 179] # Dark Brown ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def frontier_color~ - Inside source: true *** True Line Result def frontier_color ** Processing line: ~ [103, 136, 204] # Blue~ - Inside source: true *** True Line Result [103, 136, 204] # Blue ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def path_color~ - Inside source: true *** True Line Result def path_color ** Processing line: ~ [231, 230, 228] # Pastel White~ - Inside source: true *** True Line Result [231, 230, 228] # Pastel White ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def button_color~ - Inside source: true *** True Line Result def button_color ** Processing line: ~ [190, 190, 190] # Gray~ - Inside source: true *** True Line Result [190, 190, 190] # Gray ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ # Method that is called by DragonRuby periodically~ - Inside source: true *** True Line Result # Method that is called by DragonRuby periodically ** Processing line: ~ # Used for updating animations and calculations~ - Inside source: true *** True Line Result # Used for updating animations and calculations ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Pressing r will reset the application~ - Inside source: true *** True Line Result # Pressing r will reset the application ** Processing line: ~ if args.inputs.keyboard.key_down.r~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.r ** Processing line: ~ args.gtk.reset~ - Inside source: true *** True Line Result args.gtk.reset ** Processing line: ~ reset~ - Inside source: true *** True Line Result reset ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Every tick, new args are passed, and the Breadth First Search tick is called~ - Inside source: true *** True Line Result # Every tick, new args are passed, and the Breadth First Search tick is called ** Processing line: ~ $heuristic_with_walls ||= Heuristic_With_Walls.new~ - Inside source: true *** True Line Result $heuristic_with_walls ||= Heuristic_With_Walls.new ** Processing line: ~ $heuristic_with_walls.args = args~ - Inside source: true *** True Line Result $heuristic_with_walls.args = args ** Processing line: ~ $heuristic_with_walls.tick~ - Inside source: true *** True Line Result $heuristic_with_walls.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset~ - Inside source: true *** True Line Result def reset ** Processing line: ~ $heuristic_with_walls = nil~ - Inside source: true *** True Line Result $heuristic_with_walls = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Path Finding Algorithms - Heuristic With Walls - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Path Finding Algorithms - Heuristic With Walls - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/13_path_finding_algorithms/07_heuristic_with_walls/app/main.rb~ - Inside source: true *** True Line Result # ./samples/13_path_finding_algorithms/07_heuristic_with_walls/app/main.rb ** Processing line: ~ # This program is inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html~ - Inside source: true *** True Line Result # This program is inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html ** Processing line: ~ # The effectiveness of the Heuristic search algorithm is shown through this demonstration.~ - Inside source: true *** True Line Result # The effectiveness of the Heuristic search algorithm is shown through this demonstration. ** Processing line: ~ # Notice that both searches find the shortest path~ - Inside source: true *** True Line Result # Notice that both searches find the shortest path ** Processing line: ~ # The heuristic search, however, explores less of the grid, and is therefore faster.~ - Inside source: true *** True Line Result # The heuristic search, however, explores less of the grid, and is therefore faster. ** Processing line: ~ # The heuristic search prioritizes searching cells that are closer to the target.~ - Inside source: true *** True Line Result # The heuristic search prioritizes searching cells that are closer to the target. ** Processing line: ~ # Make sure to look at the Heuristic with walls program to see some of the downsides of the heuristic algorithm.~ - Inside source: true *** True Line Result # Make sure to look at the Heuristic with walls program to see some of the downsides of the heuristic algorithm. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Heuristic~ - Inside source: true *** True Line Result class Heuristic ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ # If animation is playing, and max steps have not been reached~ - Inside source: true *** True Line Result # If animation is playing, and max steps have not been reached ** Processing line: ~ # Move the search a step forward~ - Inside source: true *** True Line Result # Move the search a step forward ** Processing line: ~ if state.play && state.current_step < state.max_steps~ - Inside source: true *** True Line Result if state.play && state.current_step < state.max_steps ** Processing line: ~ # Variable that tells the program what step to recalculate up to~ - Inside source: true *** True Line Result # Variable that tells the program what step to recalculate up to ** Processing line: ~ state.current_step += 1~ - Inside source: true *** True Line Result state.current_step += 1 ** Processing line: ~ move_searches_one_step_forward~ - Inside source: true *** True Line Result move_searches_one_step_forward ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ # Variables to edit the size and appearance of the grid~ - Inside source: true *** True Line Result # Variables to edit the size and appearance of the grid ** Processing line: ~ # Freely customizable to user's liking~ - Inside source: true *** True Line Result # Freely customizable to user's liking ** Processing line: ~ grid.width ||= 15~ - Inside source: true *** True Line Result grid.width ||= 15 ** Processing line: ~ grid.height ||= 15~ - Inside source: true *** True Line Result grid.height ||= 15 ** Processing line: ~ grid.cell_size ||= 40~ - Inside source: true *** True Line Result grid.cell_size ||= 40 ** Processing line: ~ grid.rect ||= [0, 0, grid.width, grid.height]~ - Inside source: true *** True Line Result grid.rect ||= [0, 0, grid.width, grid.height] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ grid.star ||= [0, 2]~ - Inside source: true *** True Line Result grid.star ||= [0, 2] ** Processing line: ~ grid.target ||= [14, 12]~ - Inside source: true *** True Line Result grid.target ||= [14, 12] ** Processing line: ~ grid.walls ||= {~ - Inside source: true *** True Line Result grid.walls ||= { ** Processing line: ~ [2, 2] => true,~ - Inside source: true *** True Line Result [2, 2] => true, ** Processing line: ~ [3, 2] => true,~ - Inside source: true *** True Line Result [3, 2] => true, ** Processing line: ~ [4, 2] => true,~ - Inside source: true *** True Line Result [4, 2] => true, ** Processing line: ~ [5, 2] => true,~ - Inside source: true *** True Line Result [5, 2] => true, ** Processing line: ~ [6, 2] => true,~ - Inside source: true *** True Line Result [6, 2] => true, ** Processing line: ~ [7, 2] => true,~ - Inside source: true *** True Line Result [7, 2] => true, ** Processing line: ~ [8, 2] => true,~ - Inside source: true *** True Line Result [8, 2] => true, ** Processing line: ~ [9, 2] => true,~ - Inside source: true *** True Line Result [9, 2] => true, ** Processing line: ~ [10, 2] => true,~ - Inside source: true *** True Line Result [10, 2] => true, ** Processing line: ~ [11, 2] => true,~ - Inside source: true *** True Line Result [11, 2] => true, ** Processing line: ~ [12, 2] => true,~ - Inside source: true *** True Line Result [12, 2] => true, ** Processing line: ~ [12, 3] => true,~ - Inside source: true *** True Line Result [12, 3] => true, ** Processing line: ~ [12, 4] => true,~ - Inside source: true *** True Line Result [12, 4] => true, ** Processing line: ~ [12, 5] => true,~ - Inside source: true *** True Line Result [12, 5] => true, ** Processing line: ~ [12, 6] => true,~ - Inside source: true *** True Line Result [12, 6] => true, ** Processing line: ~ [12, 7] => true,~ - Inside source: true *** True Line Result [12, 7] => true, ** Processing line: ~ [12, 8] => true,~ - Inside source: true *** True Line Result [12, 8] => true, ** Processing line: ~ [12, 9] => true,~ - Inside source: true *** True Line Result [12, 9] => true, ** Processing line: ~ [12, 10] => true,~ - Inside source: true *** True Line Result [12, 10] => true, ** Processing line: ~ [12, 11] => true,~ - Inside source: true *** True Line Result [12, 11] => true, ** Processing line: ~ [12, 12] => true,~ - Inside source: true *** True Line Result [12, 12] => true, ** Processing line: ~ [2, 12] => true,~ - Inside source: true *** True Line Result [2, 12] => true, ** Processing line: ~ [3, 12] => true,~ - Inside source: true *** True Line Result [3, 12] => true, ** Processing line: ~ [4, 12] => true,~ - Inside source: true *** True Line Result [4, 12] => true, ** Processing line: ~ [5, 12] => true,~ - Inside source: true *** True Line Result [5, 12] => true, ** Processing line: ~ [6, 12] => true,~ - Inside source: true *** True Line Result [6, 12] => true, ** Processing line: ~ [7, 12] => true,~ - Inside source: true *** True Line Result [7, 12] => true, ** Processing line: ~ [8, 12] => true,~ - Inside source: true *** True Line Result [8, 12] => true, ** Processing line: ~ [9, 12] => true,~ - Inside source: true *** True Line Result [9, 12] => true, ** Processing line: ~ [10, 12] => true,~ - Inside source: true *** True Line Result [10, 12] => true, ** Processing line: ~ [11, 12] => true,~ - Inside source: true *** True Line Result [11, 12] => true, ** Processing line: ~ [12, 12] => true~ - Inside source: true *** True Line Result [12, 12] => true ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ # There are no hills in the Heuristic Search Demo~ - Inside source: true *** True Line Result # There are no hills in the Heuristic Search Demo ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # What the user is currently editing on the grid~ - Inside source: true *** True Line Result # What the user is currently editing on the grid ** Processing line: ~ # We store this value, because we want to remember the value even when~ - Inside source: true *** True Line Result # We store this value, because we want to remember the value even when ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ - Inside source: true *** True Line Result # the user's cursor is no longer over what they're interacting with, but ** Processing line: ~ # they are still clicking down on the mouse.~ - Inside source: true *** True Line Result # they are still clicking down on the mouse. ** Processing line: ~ state.user_input ||= :none~ - Inside source: true *** True Line Result state.user_input ||= :none ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These variables allow the breadth first search to take place~ - Inside source: true *** True Line Result # These variables allow the breadth first search to take place ** Processing line: ~ # Came_from is a hash with a key of a cell and a value of the cell that was expanded from to find the key.~ - Inside source: true *** True Line Result # Came_from is a hash with a key of a cell and a value of the cell that was expanded from to find the key. ** Processing line: ~ # Used to prevent searching cells that have already been found~ - Inside source: true *** True Line Result # Used to prevent searching cells that have already been found ** Processing line: ~ # and to trace a path from the target back to the starting point.~ - Inside source: true *** True Line Result # and to trace a path from the target back to the starting point. ** Processing line: ~ # Frontier is an array of cells to expand the search from.~ - Inside source: true *** True Line Result # Frontier is an array of cells to expand the search from. ** Processing line: ~ # The search is over when there are no more cells to search from.~ - Inside source: true *** True Line Result # The search is over when there are no more cells to search from. ** Processing line: ~ # Path stores the path from the target to the star, once the target has been found~ - Inside source: true *** True Line Result # Path stores the path from the target to the star, once the target has been found ** Processing line: ~ # It prevents calculating the path every tick.~ - Inside source: true *** True Line Result # It prevents calculating the path every tick. ** Processing line: ~ bfs.came_from ||= {}~ - Inside source: true *** True Line Result bfs.came_from ||= {} ** Processing line: ~ bfs.frontier ||= []~ - Inside source: true *** True Line Result bfs.frontier ||= [] ** Processing line: ~ bfs.path ||= []~ - Inside source: true *** True Line Result bfs.path ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ heuristic.came_from ||= {}~ - Inside source: true *** True Line Result heuristic.came_from ||= {} ** Processing line: ~ heuristic.frontier ||= []~ - Inside source: true *** True Line Result heuristic.frontier ||= [] ** Processing line: ~ heuristic.path ||= []~ - Inside source: true *** True Line Result heuristic.path ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Stores which step of the animation is being rendered~ - Inside source: true *** True Line Result # Stores which step of the animation is being rendered ** Processing line: ~ # When the user moves the star or messes with the walls,~ - Inside source: true *** True Line Result # When the user moves the star or messes with the walls, ** Processing line: ~ # the searches are recalculated up to this step~ - Inside source: true *** True Line Result # the searches are recalculated up to this step ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Unless the current step has a value~ - Inside source: true *** True Line Result # Unless the current step has a value ** Processing line: ~ unless state.current_step~ - Inside source: true *** True Line Result unless state.current_step ** Processing line: ~ # Set the current step to 10~ - Inside source: true *** True Line Result # Set the current step to 10 ** Processing line: ~ state.current_step = 10~ - Inside source: true *** True Line Result state.current_step = 10 ** Processing line: ~ # And calculate the searches up to step 10~ - Inside source: true *** True Line Result # And calculate the searches up to step 10 ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # At some step the animation will end,~ - Inside source: true *** True Line Result # At some step the animation will end, ** Processing line: ~ # and further steps won't change anything (the whole grid will be explored)~ - Inside source: true *** True Line Result # and further steps won't change anything (the whole grid will be explored) ** Processing line: ~ # This step is roughly the grid's width * height~ - Inside source: true *** True Line Result # This step is roughly the grid's width * height ** Processing line: ~ # When anim_steps equals max_steps no more calculations will occur~ - Inside source: true *** True Line Result # When anim_steps equals max_steps no more calculations will occur ** Processing line: ~ # and the slider will be at the end~ - Inside source: true *** True Line Result # and the slider will be at the end ** Processing line: ~ state.max_steps = grid.width * grid.height~ - Inside source: true *** True Line Result state.max_steps = grid.width * grid.height ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Whether the animation should play or not~ - Inside source: true *** True Line Result # Whether the animation should play or not ** Processing line: ~ # If true, every tick moves anim_steps forward one~ - Inside source: true *** True Line Result # If true, every tick moves anim_steps forward one ** Processing line: ~ # Pressing the stepwise animation buttons will pause the animation~ - Inside source: true *** True Line Result # Pressing the stepwise animation buttons will pause the animation ** Processing line: ~ # An if statement instead of the ||= operator is used for assigning a boolean value.~ - Inside source: true *** True Line Result # An if statement instead of the ||= operator is used for assigning a boolean value. ** Processing line: ~ # The || operator does not differentiate between nil and false.~ - Inside source: true *** True Line Result # The || operator does not differentiate between nil and false. ** Processing line: ~ if state.play == nil~ - Inside source: true *** True Line Result if state.play == nil ** Processing line: ~ state.play = false~ - Inside source: true *** True Line Result state.play = false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Store the rects of the buttons that control the animation~ - Inside source: true *** True Line Result # Store the rects of the buttons that control the animation ** Processing line: ~ # They are here for user customization~ - Inside source: true *** True Line Result # They are here for user customization ** Processing line: ~ # Editing these might require recentering the text inside them~ - Inside source: true *** True Line Result # Editing these might require recentering the text inside them ** Processing line: ~ # Those values can be found in the render_button methods~ - Inside source: true *** True Line Result # Those values can be found in the render_button methods ** Processing line: ~ buttons.left = [470, 600, 50, 50]~ - Inside source: true *** True Line Result buttons.left = [470, 600, 50, 50] ** Processing line: ~ buttons.center = [520, 600, 200, 50]~ - Inside source: true *** True Line Result buttons.center = [520, 600, 200, 50] ** Processing line: ~ buttons.right = [720, 600, 50, 50]~ - Inside source: true *** True Line Result buttons.right = [720, 600, 50, 50] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The variables below are related to the slider~ - Inside source: true *** True Line Result # The variables below are related to the slider ** Processing line: ~ # They allow the user to customize them~ - Inside source: true *** True Line Result # They allow the user to customize them ** Processing line: ~ # They also give a central location for the render and input methods to get~ - Inside source: true *** True Line Result # They also give a central location for the render and input methods to get ** Processing line: ~ # information from~ - Inside source: true *** True Line Result # information from ** Processing line: ~ # x & y are the coordinates of the leftmost part of the slider line~ - Inside source: true *** True Line Result # x & y are the coordinates of the leftmost part of the slider line ** Processing line: ~ slider.x = 440~ - Inside source: true *** True Line Result slider.x = 440 ** Processing line: ~ slider.y = 675~ - Inside source: true *** True Line Result slider.y = 675 ** Processing line: ~ # This is the width of the line~ - Inside source: true *** True Line Result # This is the width of the line ** Processing line: ~ slider.w = 360~ - Inside source: true *** True Line Result slider.w = 360 ** Processing line: ~ # This is the offset for the circle~ - Inside source: true *** True Line Result # This is the offset for the circle ** Processing line: ~ # Allows the center of the circle to be on the line,~ - Inside source: true *** True Line Result # Allows the center of the circle to be on the line, ** Processing line: ~ # as opposed to the upper right corner~ - Inside source: true *** True Line Result # as opposed to the upper right corner ** Processing line: ~ slider.offset = 20~ - Inside source: true *** True Line Result slider.offset = 20 ** Processing line: ~ # This is the spacing between each of the notches on the slider~ - Inside source: true *** True Line Result # This is the spacing between each of the notches on the slider ** Processing line: ~ # Notches are places where the circle can rest on the slider line~ - Inside source: true *** True Line Result # Notches are places where the circle can rest on the slider line ** Processing line: ~ # There needs to be a notch for each step before the maximum number of steps~ - Inside source: true *** True Line Result # There needs to be a notch for each step before the maximum number of steps ** Processing line: ~ slider.spacing = slider.w.to_f / state.max_steps.to_f~ - Inside source: true *** True Line Result slider.spacing = slider.w.to_f / state.max_steps.to_f ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # All methods with render draw stuff on the screen~ - Inside source: true *** True Line Result # All methods with render draw stuff on the screen ** Processing line: ~ # UI has buttons, the slider, and labels~ - Inside source: true *** True Line Result # UI has buttons, the slider, and labels ** Processing line: ~ # The search specific rendering occurs in the respective methods~ - Inside source: true *** True Line Result # The search specific rendering occurs in the respective methods ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ render_ui~ - Inside source: true *** True Line Result render_ui ** Processing line: ~ render_bfs~ - Inside source: true *** True Line Result render_bfs ** Processing line: ~ render_heuristic~ - Inside source: true *** True Line Result render_heuristic ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_ui~ - Inside source: true *** True Line Result def render_ui ** Processing line: ~ render_buttons~ - Inside source: true *** True Line Result render_buttons ** Processing line: ~ render_slider~ - Inside source: true *** True Line Result render_slider ** Processing line: ~ render_labels~ - Inside source: true *** True Line Result render_labels ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_buttons~ - Inside source: true *** True Line Result def render_buttons ** Processing line: ~ render_left_button~ - Inside source: true *** True Line Result render_left_button ** Processing line: ~ render_center_button~ - Inside source: true *** True Line Result render_center_button ** Processing line: ~ render_right_button~ - Inside source: true *** True Line Result render_right_button ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_bfs~ - Inside source: true *** True Line Result def render_bfs ** Processing line: ~ render_bfs_grid~ - Inside source: true *** True Line Result render_bfs_grid ** Processing line: ~ render_bfs_star~ - Inside source: true *** True Line Result render_bfs_star ** Processing line: ~ render_bfs_target~ - Inside source: true *** True Line Result render_bfs_target ** Processing line: ~ render_bfs_visited~ - Inside source: true *** True Line Result render_bfs_visited ** Processing line: ~ render_bfs_walls~ - Inside source: true *** True Line Result render_bfs_walls ** Processing line: ~ render_bfs_frontier~ - Inside source: true *** True Line Result render_bfs_frontier ** Processing line: ~ render_bfs_path~ - Inside source: true *** True Line Result render_bfs_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_heuristic~ - Inside source: true *** True Line Result def render_heuristic ** Processing line: ~ render_heuristic_grid~ - Inside source: true *** True Line Result render_heuristic_grid ** Processing line: ~ render_heuristic_star~ - Inside source: true *** True Line Result render_heuristic_star ** Processing line: ~ render_heuristic_target~ - Inside source: true *** True Line Result render_heuristic_target ** Processing line: ~ render_heuristic_visited~ - Inside source: true *** True Line Result render_heuristic_visited ** Processing line: ~ render_heuristic_walls~ - Inside source: true *** True Line Result render_heuristic_walls ** Processing line: ~ render_heuristic_frontier~ - Inside source: true *** True Line Result render_heuristic_frontier ** Processing line: ~ render_heuristic_path~ - Inside source: true *** True Line Result render_heuristic_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method handles user input every tick~ - Inside source: true *** True Line Result # This method handles user input every tick ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ # Check and handle button input~ - Inside source: true *** True Line Result # Check and handle button input ** Processing line: ~ input_buttons~ - Inside source: true *** True Line Result input_buttons ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the mouse was lifted this tick~ - Inside source: true *** True Line Result # If the mouse was lifted this tick ** Processing line: ~ if inputs.mouse.up~ - Inside source: true *** True Line Result if inputs.mouse.up ** Processing line: ~ # Set current input to none~ - Inside source: true *** True Line Result # Set current input to none ** Processing line: ~ state.user_input = :none~ - Inside source: true *** True Line Result state.user_input = :none ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the mouse was clicked this tick~ - Inside source: true *** True Line Result # If the mouse was clicked this tick ** Processing line: ~ if inputs.mouse.down~ - Inside source: true *** True Line Result if inputs.mouse.down ** Processing line: ~ # Determine what the user is editing and appropriately edit the state.user_input variable~ - Inside source: true *** True Line Result # Determine what the user is editing and appropriately edit the state.user_input variable ** Processing line: ~ determine_input~ - Inside source: true *** True Line Result determine_input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Process user input based on user_input variable and current mouse position~ - Inside source: true *** True Line Result # Process user input based on user_input variable and current mouse position ** Processing line: ~ process_input~ - Inside source: true *** True Line Result process_input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Determines what the user is editing~ - Inside source: true *** True Line Result # Determines what the user is editing ** Processing line: ~ # This method is called when the mouse is clicked down~ - Inside source: true *** True Line Result # This method is called when the mouse is clicked down ** Processing line: ~ def determine_input~ - Inside source: true *** True Line Result def determine_input ** Processing line: ~ if mouse_over_slider?~ - Inside source: true *** True Line Result if mouse_over_slider? ** Processing line: ~ state.user_input = :slider~ - Inside source: true *** True Line Result state.user_input = :slider ** Processing line: ~ # If the mouse is over the star in the first grid~ - Inside source: true *** True Line Result # If the mouse is over the star in the first grid ** Processing line: ~ elsif bfs_mouse_over_star?~ - Inside source: true *** True Line Result elsif bfs_mouse_over_star? ** Processing line: ~ # The user is editing the star from the first grid~ - Inside source: true *** True Line Result # The user is editing the star from the first grid ** Processing line: ~ state.user_input = :bfs_star~ - Inside source: true *** True Line Result state.user_input = :bfs_star ** Processing line: ~ # If the mouse is over the star in the second grid~ - Inside source: true *** True Line Result # If the mouse is over the star in the second grid ** Processing line: ~ elsif heuristic_mouse_over_star?~ - Inside source: true *** True Line Result elsif heuristic_mouse_over_star? ** Processing line: ~ # The user is editing the star from the second grid~ - Inside source: true *** True Line Result # The user is editing the star from the second grid ** Processing line: ~ state.user_input = :heuristic_star~ - Inside source: true *** True Line Result state.user_input = :heuristic_star ** Processing line: ~ # If the mouse is over the target in the first grid~ - Inside source: true *** True Line Result # If the mouse is over the target in the first grid ** Processing line: ~ elsif bfs_mouse_over_target?~ - Inside source: true *** True Line Result elsif bfs_mouse_over_target? ** Processing line: ~ # The user is editing the target from the first grid~ - Inside source: true *** True Line Result # The user is editing the target from the first grid ** Processing line: ~ state.user_input = :bfs_target~ - Inside source: true *** True Line Result state.user_input = :bfs_target ** Processing line: ~ # If the mouse is over the target in the second grid~ - Inside source: true *** True Line Result # If the mouse is over the target in the second grid ** Processing line: ~ elsif heuristic_mouse_over_target?~ - Inside source: true *** True Line Result elsif heuristic_mouse_over_target? ** Processing line: ~ # The user is editing the target from the second grid~ - Inside source: true *** True Line Result # The user is editing the target from the second grid ** Processing line: ~ state.user_input = :heuristic_target~ - Inside source: true *** True Line Result state.user_input = :heuristic_target ** Processing line: ~ # If the mouse is over a wall in the first grid~ - Inside source: true *** True Line Result # If the mouse is over a wall in the first grid ** Processing line: ~ elsif bfs_mouse_over_wall?~ - Inside source: true *** True Line Result elsif bfs_mouse_over_wall? ** Processing line: ~ # The user is removing a wall from the first grid~ - Inside source: true *** True Line Result # The user is removing a wall from the first grid ** Processing line: ~ state.user_input = :bfs_remove_wall~ - Inside source: true *** True Line Result state.user_input = :bfs_remove_wall ** Processing line: ~ # If the mouse is over a wall in the second grid~ - Inside source: true *** True Line Result # If the mouse is over a wall in the second grid ** Processing line: ~ elsif heuristic_mouse_over_wall?~ - Inside source: true *** True Line Result elsif heuristic_mouse_over_wall? ** Processing line: ~ # The user is removing a wall from the second grid~ - Inside source: true *** True Line Result # The user is removing a wall from the second grid ** Processing line: ~ state.user_input = :heuristic_remove_wall~ - Inside source: true *** True Line Result state.user_input = :heuristic_remove_wall ** Processing line: ~ # If the mouse is over the first grid~ - Inside source: true *** True Line Result # If the mouse is over the first grid ** Processing line: ~ elsif bfs_mouse_over_grid?~ - Inside source: true *** True Line Result elsif bfs_mouse_over_grid? ** Processing line: ~ # The user is adding a wall from the first grid~ - Inside source: true *** True Line Result # The user is adding a wall from the first grid ** Processing line: ~ state.user_input = :bfs_add_wall~ - Inside source: true *** True Line Result state.user_input = :bfs_add_wall ** Processing line: ~ # If the mouse is over the second grid~ - Inside source: true *** True Line Result # If the mouse is over the second grid ** Processing line: ~ elsif heuristic_mouse_over_grid?~ - Inside source: true *** True Line Result elsif heuristic_mouse_over_grid? ** Processing line: ~ # The user is adding a wall from the second grid~ - Inside source: true *** True Line Result # The user is adding a wall from the second grid ** Processing line: ~ state.user_input = :heuristic_add_wall~ - Inside source: true *** True Line Result state.user_input = :heuristic_add_wall ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Processes click and drag based on what the user is currently dragging~ - Inside source: true *** True Line Result # Processes click and drag based on what the user is currently dragging ** Processing line: ~ def process_input~ - Inside source: true *** True Line Result def process_input ** Processing line: ~ if state.user_input == :slider~ - Inside source: true *** True Line Result if state.user_input == :slider ** Processing line: ~ process_input_slider~ - Inside source: true *** True Line Result process_input_slider ** Processing line: ~ elsif state.user_input == :bfs_star~ - Inside source: true *** True Line Result elsif state.user_input == :bfs_star ** Processing line: ~ process_input_bfs_star~ - Inside source: true *** True Line Result process_input_bfs_star ** Processing line: ~ elsif state.user_input == :heuristic_star~ - Inside source: true *** True Line Result elsif state.user_input == :heuristic_star ** Processing line: ~ process_input_heuristic_star~ - Inside source: true *** True Line Result process_input_heuristic_star ** Processing line: ~ elsif state.user_input == :bfs_target~ - Inside source: true *** True Line Result elsif state.user_input == :bfs_target ** Processing line: ~ process_input_bfs_target~ - Inside source: true *** True Line Result process_input_bfs_target ** Processing line: ~ elsif state.user_input == :heuristic_target~ - Inside source: true *** True Line Result elsif state.user_input == :heuristic_target ** Processing line: ~ process_input_heuristic_target~ - Inside source: true *** True Line Result process_input_heuristic_target ** Processing line: ~ elsif state.user_input == :bfs_remove_wall~ - Inside source: true *** True Line Result elsif state.user_input == :bfs_remove_wall ** Processing line: ~ process_input_bfs_remove_wall~ - Inside source: true *** True Line Result process_input_bfs_remove_wall ** Processing line: ~ elsif state.user_input == :heuristic_remove_wall~ - Inside source: true *** True Line Result elsif state.user_input == :heuristic_remove_wall ** Processing line: ~ process_input_heuristic_remove_wall~ - Inside source: true *** True Line Result process_input_heuristic_remove_wall ** Processing line: ~ elsif state.user_input == :bfs_add_wall~ - Inside source: true *** True Line Result elsif state.user_input == :bfs_add_wall ** Processing line: ~ process_input_bfs_add_wall~ - Inside source: true *** True Line Result process_input_bfs_add_wall ** Processing line: ~ elsif state.user_input == :heuristic_add_wall~ - Inside source: true *** True Line Result elsif state.user_input == :heuristic_add_wall ** Processing line: ~ process_input_heuristic_add_wall~ - Inside source: true *** True Line Result process_input_heuristic_add_wall ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_slider~ - Inside source: true *** True Line Result def render_slider ** Processing line: ~ # Using primitives hides the line under the white circle of the slider~ - Inside source: true *** True Line Result # Using primitives hides the line under the white circle of the slider ** Processing line: ~ # Draws the line~ - Inside source: true *** True Line Result # Draws the line ** Processing line: ~ outputs.primitives << [slider.x, slider.y, slider.x + slider.w, slider.y].line~ - Inside source: true *** True Line Result outputs.primitives << [slider.x, slider.y, slider.x + slider.w, slider.y].line ** Processing line: ~ # The circle needs to be offset so that the center of the circle~ - Inside source: true *** True Line Result # The circle needs to be offset so that the center of the circle ** Processing line: ~ # overlaps the line instead of the upper right corner of the circle~ - Inside source: true *** True Line Result # overlaps the line instead of the upper right corner of the circle ** Processing line: ~ # The circle's x value is also moved based on the current seach step~ - Inside source: true *** True Line Result # The circle's x value is also moved based on the current seach step ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.current_step * slider.spacing)~ - Inside source: true *** True Line Result circle_x = (slider.x - slider.offset) + (state.current_step * slider.spacing) ** Processing line: ~ circle_y = (slider.y - slider.offset)~ - Inside source: true *** True Line Result circle_y = (slider.y - slider.offset) ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ - Inside source: true *** True Line Result circle_rect = [circle_x, circle_y, 37, 37] ** Processing line: ~ outputs.primitives << [circle_rect, 'circle-white.png'].sprite~ - Inside source: true *** True Line Result outputs.primitives << [circle_rect, 'circle-white.png'].sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_labels~ - Inside source: true *** True Line Result def render_labels ** Processing line: ~ outputs.labels << [205, 625, "Breadth First Search"]~ - Inside source: true *** True Line Result outputs.labels << [205, 625, "Breadth First Search"] ** Processing line: ~ outputs.labels << [820, 625, "Heuristic Best-First Search"]~ - Inside source: true *** True Line Result outputs.labels << [820, 625, "Heuristic Best-First Search"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_left_button~ - Inside source: true *** True Line Result def render_left_button ** Processing line: ~ # Draws the button_color button, and a black border~ - Inside source: true *** True Line Result # Draws the button_color button, and a black border ** Processing line: ~ # The border separates the buttons visually~ - Inside source: true *** True Line Result # The border separates the buttons visually ** Processing line: ~ outputs.solids << [buttons.left, button_color]~ - Inside source: true *** True Line Result outputs.solids << [buttons.left, button_color] ** Processing line: ~ outputs.borders << [buttons.left]~ - Inside source: true *** True Line Result outputs.borders << [buttons.left] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders an explanatory label in the center of the button~ - Inside source: true *** True Line Result # Renders an explanatory label in the center of the button ** Processing line: ~ # Explains to the user what the button does~ - Inside source: true *** True Line Result # Explains to the user what the button does ** Processing line: ~ # If the button size is changed, the label might need to be edited as well~ - Inside source: true *** True Line Result # If the button size is changed, the label might need to be edited as well ** Processing line: ~ # to keep the label in the center of the button~ - Inside source: true *** True Line Result # to keep the label in the center of the button ** Processing line: ~ label_x = buttons.left.x + 20~ - Inside source: true *** True Line Result label_x = buttons.left.x + 20 ** Processing line: ~ label_y = buttons.left.y + 35~ - Inside source: true *** True Line Result label_y = buttons.left.y + 35 ** Processing line: ~ outputs.labels << [label_x, label_y, "<"]~ - Inside source: true *** True Line Result outputs.labels << [label_x, label_y, "<"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_center_button~ - Inside source: true *** True Line Result def render_center_button ** Processing line: ~ # Draws the button_color button, and a black border~ - Inside source: true *** True Line Result # Draws the button_color button, and a black border ** Processing line: ~ # The border separates the buttons visually~ - Inside source: true *** True Line Result # The border separates the buttons visually ** Processing line: ~ outputs.solids << [buttons.center, button_color]~ - Inside source: true *** True Line Result outputs.solids << [buttons.center, button_color] ** Processing line: ~ outputs.borders << [buttons.center]~ - Inside source: true *** True Line Result outputs.borders << [buttons.center] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders an explanatory label in the center of the button~ - Inside source: true *** True Line Result # Renders an explanatory label in the center of the button ** Processing line: ~ # Explains to the user what the button does~ - Inside source: true *** True Line Result # Explains to the user what the button does ** Processing line: ~ # If the button size is changed, the label might need to be edited as well~ - Inside source: true *** True Line Result # If the button size is changed, the label might need to be edited as well ** Processing line: ~ # to keep the label in the center of the button~ - Inside source: true *** True Line Result # to keep the label in the center of the button ** Processing line: ~ label_x = buttons.center.x + 37~ - Inside source: true *** True Line Result label_x = buttons.center.x + 37 ** Processing line: ~ label_y = buttons.center.y + 35~ - Inside source: true *** True Line Result label_y = buttons.center.y + 35 ** Processing line: ~ label_text = state.play ? "Pause Animation" : "Play Animation"~ - Inside source: true *** True Line Result label_text = state.play ? "Pause Animation" : "Play Animation" ** Processing line: ~ outputs.labels << [label_x, label_y, label_text]~ - Inside source: true *** True Line Result outputs.labels << [label_x, label_y, label_text] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_right_button~ - Inside source: true *** True Line Result def render_right_button ** Processing line: ~ # Draws the button_color button, and a black border~ - Inside source: true *** True Line Result # Draws the button_color button, and a black border ** Processing line: ~ # The border separates the buttons visually~ - Inside source: true *** True Line Result # The border separates the buttons visually ** Processing line: ~ outputs.solids << [buttons.right, button_color]~ - Inside source: true *** True Line Result outputs.solids << [buttons.right, button_color] ** Processing line: ~ outputs.borders << [buttons.right]~ - Inside source: true *** True Line Result outputs.borders << [buttons.right] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders an explanatory label in the center of the button~ - Inside source: true *** True Line Result # Renders an explanatory label in the center of the button ** Processing line: ~ # Explains to the user what the button does~ - Inside source: true *** True Line Result # Explains to the user what the button does ** Processing line: ~ label_x = buttons.right.x + 20~ - Inside source: true *** True Line Result label_x = buttons.right.x + 20 ** Processing line: ~ label_y = buttons.right.y + 35~ - Inside source: true *** True Line Result label_y = buttons.right.y + 35 ** Processing line: ~ outputs.labels << [label_x, label_y, ">"]~ - Inside source: true *** True Line Result outputs.labels << [label_x, label_y, ">"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_bfs_grid~ - Inside source: true *** True Line Result def render_bfs_grid ** Processing line: ~ # A large rect the size of the grid~ - Inside source: true *** True Line Result # A large rect the size of the grid ** Processing line: ~ outputs.solids << [bfs_scale_up(grid.rect), default_color]~ - Inside source: true *** True Line Result outputs.solids << [bfs_scale_up(grid.rect), default_color] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The vertical grid lines~ - Inside source: true *** True Line Result # The vertical grid lines ** Processing line: ~ for x in 0..grid.width~ - Inside source: true *** True Line Result for x in 0..grid.width ** Processing line: ~ outputs.lines << bfs_vertical_line(x)~ - Inside source: true *** True Line Result outputs.lines << bfs_vertical_line(x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The horizontal grid lines~ - Inside source: true *** True Line Result # The horizontal grid lines ** Processing line: ~ for y in 0..grid.height~ - Inside source: true *** True Line Result for y in 0..grid.height ** Processing line: ~ outputs.lines << bfs_horizontal_line(y)~ - Inside source: true *** True Line Result outputs.lines << bfs_horizontal_line(y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_heuristic_grid~ - Inside source: true *** True Line Result def render_heuristic_grid ** Processing line: ~ # A large rect the size of the grid~ - Inside source: true *** True Line Result # A large rect the size of the grid ** Processing line: ~ outputs.solids << [heuristic_scale_up(grid.rect), default_color]~ - Inside source: true *** True Line Result outputs.solids << [heuristic_scale_up(grid.rect), default_color] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The vertical grid lines~ - Inside source: true *** True Line Result # The vertical grid lines ** Processing line: ~ for x in 0..grid.width~ - Inside source: true *** True Line Result for x in 0..grid.width ** Processing line: ~ outputs.lines << heuristic_vertical_line(x)~ - Inside source: true *** True Line Result outputs.lines << heuristic_vertical_line(x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The horizontal grid lines~ - Inside source: true *** True Line Result # The horizontal grid lines ** Processing line: ~ for y in 0..grid.height~ - Inside source: true *** True Line Result for y in 0..grid.height ** Processing line: ~ outputs.lines << heuristic_horizontal_line(y)~ - Inside source: true *** True Line Result outputs.lines << heuristic_horizontal_line(y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a vertical line for a column of the first grid~ - Inside source: true *** True Line Result # Returns a vertical line for a column of the first grid ** Processing line: ~ def bfs_vertical_line column~ - Inside source: true *** True Line Result def bfs_vertical_line column ** Processing line: ~ bfs_scale_up([column, 0, column, grid.height])~ - Inside source: true *** True Line Result bfs_scale_up([column, 0, column, grid.height]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a horizontal line for a column of the first grid~ - Inside source: true *** True Line Result # Returns a horizontal line for a column of the first grid ** Processing line: ~ def bfs_horizontal_line row~ - Inside source: true *** True Line Result def bfs_horizontal_line row ** Processing line: ~ bfs_scale_up([0, row, grid.width, row])~ - Inside source: true *** True Line Result bfs_scale_up([0, row, grid.width, row]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a vertical line for a column of the second grid~ - Inside source: true *** True Line Result # Returns a vertical line for a column of the second grid ** Processing line: ~ def heuristic_vertical_line column~ - Inside source: true *** True Line Result def heuristic_vertical_line column ** Processing line: ~ bfs_scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height])~ - Inside source: true *** True Line Result bfs_scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a horizontal line for a column of the second grid~ - Inside source: true *** True Line Result # Returns a horizontal line for a column of the second grid ** Processing line: ~ def heuristic_horizontal_line row~ - Inside source: true *** True Line Result def heuristic_horizontal_line row ** Processing line: ~ bfs_scale_up([grid.width + 1, row, grid.width + grid.width + 1, row])~ - Inside source: true *** True Line Result bfs_scale_up([grid.width + 1, row, grid.width + grid.width + 1, row]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the star on the first grid~ - Inside source: true *** True Line Result # Renders the star on the first grid ** Processing line: ~ def render_bfs_star~ - Inside source: true *** True Line Result def render_bfs_star ** Processing line: ~ outputs.sprites << [bfs_scale_up(grid.star), 'star.png']~ - Inside source: true *** True Line Result outputs.sprites << [bfs_scale_up(grid.star), 'star.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the star on the second grid~ - Inside source: true *** True Line Result # Renders the star on the second grid ** Processing line: ~ def render_heuristic_star~ - Inside source: true *** True Line Result def render_heuristic_star ** Processing line: ~ outputs.sprites << [heuristic_scale_up(grid.star), 'star.png']~ - Inside source: true *** True Line Result outputs.sprites << [heuristic_scale_up(grid.star), 'star.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the target on the first grid~ - Inside source: true *** True Line Result # Renders the target on the first grid ** Processing line: ~ def render_bfs_target~ - Inside source: true *** True Line Result def render_bfs_target ** Processing line: ~ outputs.sprites << [bfs_scale_up(grid.target), 'target.png']~ - Inside source: true *** True Line Result outputs.sprites << [bfs_scale_up(grid.target), 'target.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the target on the second grid~ - Inside source: true *** True Line Result # Renders the target on the second grid ** Processing line: ~ def render_heuristic_target~ - Inside source: true *** True Line Result def render_heuristic_target ** Processing line: ~ outputs.sprites << [heuristic_scale_up(grid.target), 'target.png']~ - Inside source: true *** True Line Result outputs.sprites << [heuristic_scale_up(grid.target), 'target.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the walls on the first grid~ - Inside source: true *** True Line Result # Renders the walls on the first grid ** Processing line: ~ def render_bfs_walls~ - Inside source: true *** True Line Result def render_bfs_walls ** Processing line: ~ grid.walls.each_key do | wall |~ - Inside source: true *** True Line Result grid.walls.each_key do | wall | ** Processing line: ~ outputs.solids << [bfs_scale_up(wall), wall_color]~ - Inside source: true *** True Line Result outputs.solids << [bfs_scale_up(wall), wall_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the walls on the second grid~ - Inside source: true *** True Line Result # Renders the walls on the second grid ** Processing line: ~ def render_heuristic_walls~ - Inside source: true *** True Line Result def render_heuristic_walls ** Processing line: ~ grid.walls.each_key do | wall |~ - Inside source: true *** True Line Result grid.walls.each_key do | wall | ** Processing line: ~ outputs.solids << [heuristic_scale_up(wall), wall_color]~ - Inside source: true *** True Line Result outputs.solids << [heuristic_scale_up(wall), wall_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the visited cells on the first grid~ - Inside source: true *** True Line Result # Renders the visited cells on the first grid ** Processing line: ~ def render_bfs_visited~ - Inside source: true *** True Line Result def render_bfs_visited ** Processing line: ~ bfs.came_from.each_key do | visited_cell |~ - Inside source: true *** True Line Result bfs.came_from.each_key do | visited_cell | ** Processing line: ~ outputs.solids << [bfs_scale_up(visited_cell), visited_color]~ - Inside source: true *** True Line Result outputs.solids << [bfs_scale_up(visited_cell), visited_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the visited cells on the second grid~ - Inside source: true *** True Line Result # Renders the visited cells on the second grid ** Processing line: ~ def render_heuristic_visited~ - Inside source: true *** True Line Result def render_heuristic_visited ** Processing line: ~ heuristic.came_from.each_key do | visited_cell |~ - Inside source: true *** True Line Result heuristic.came_from.each_key do | visited_cell | ** Processing line: ~ outputs.solids << [heuristic_scale_up(visited_cell), visited_color]~ - Inside source: true *** True Line Result outputs.solids << [heuristic_scale_up(visited_cell), visited_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the frontier cells on the first grid~ - Inside source: true *** True Line Result # Renders the frontier cells on the first grid ** Processing line: ~ def render_bfs_frontier~ - Inside source: true *** True Line Result def render_bfs_frontier ** Processing line: ~ bfs.frontier.each do | frontier_cell |~ - Inside source: true *** True Line Result bfs.frontier.each do | frontier_cell | ** Processing line: ~ outputs.solids << [bfs_scale_up(frontier_cell), frontier_color, 200]~ - Inside source: true *** True Line Result outputs.solids << [bfs_scale_up(frontier_cell), frontier_color, 200] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the frontier cells on the second grid~ - Inside source: true *** True Line Result # Renders the frontier cells on the second grid ** Processing line: ~ def render_heuristic_frontier~ - Inside source: true *** True Line Result def render_heuristic_frontier ** Processing line: ~ heuristic.frontier.each do | frontier_cell |~ - Inside source: true *** True Line Result heuristic.frontier.each do | frontier_cell | ** Processing line: ~ outputs.solids << [heuristic_scale_up(frontier_cell), frontier_color, 200]~ - Inside source: true *** True Line Result outputs.solids << [heuristic_scale_up(frontier_cell), frontier_color, 200] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the path found by the breadth first search on the first grid~ - Inside source: true *** True Line Result # Renders the path found by the breadth first search on the first grid ** Processing line: ~ def render_bfs_path~ - Inside source: true *** True Line Result def render_bfs_path ** Processing line: ~ bfs.path.each do | path |~ - Inside source: true *** True Line Result bfs.path.each do | path | ** Processing line: ~ outputs.solids << [bfs_scale_up(path), path_color]~ - Inside source: true *** True Line Result outputs.solids << [bfs_scale_up(path), path_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the path found by the heuristic search on the second grid~ - Inside source: true *** True Line Result # Renders the path found by the heuristic search on the second grid ** Processing line: ~ def render_heuristic_path~ - Inside source: true *** True Line Result def render_heuristic_path ** Processing line: ~ heuristic.path.each do | path |~ - Inside source: true *** True Line Result heuristic.path.each do | path | ** Processing line: ~ outputs.solids << [heuristic_scale_up(path), path_color]~ - Inside source: true *** True Line Result outputs.solids << [heuristic_scale_up(path), path_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the rect for the path between two cells based on their relative positions~ - Inside source: true *** True Line Result # Returns the rect for the path between two cells based on their relative positions ** Processing line: ~ def get_path_between(cell_one, cell_two)~ - Inside source: true *** True Line Result def get_path_between(cell_one, cell_two) ** Processing line: ~ path = []~ - Inside source: true *** True Line Result path = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If cell one is above cell two~ - Inside source: true *** True Line Result # If cell one is above cell two ** Processing line: ~ if cell_one.x == cell_two.x and cell_one.y > cell_two.y~ - Inside source: true *** True Line Result if cell_one.x == cell_two.x and cell_one.y > cell_two.y ** Processing line: ~ # Path starts from the center of cell two and moves upward to the center of cell one~ - Inside source: true *** True Line Result # Path starts from the center of cell two and moves upward to the center of cell one ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 0.4, 1.4]~ - Inside source: true *** True Line Result path = [cell_two.x + 0.3, cell_two.y + 0.3, 0.4, 1.4] ** Processing line: ~ # If cell one is below cell two~ - Inside source: true *** True Line Result # If cell one is below cell two ** Processing line: ~ elsif cell_one.x == cell_two.x and cell_one.y < cell_two.y~ - Inside source: true *** True Line Result elsif cell_one.x == cell_two.x and cell_one.y < cell_two.y ** Processing line: ~ # Path starts from the center of cell one and moves upward to the center of cell two~ - Inside source: true *** True Line Result # Path starts from the center of cell one and moves upward to the center of cell two ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 0.4, 1.4]~ - Inside source: true *** True Line Result path = [cell_one.x + 0.3, cell_one.y + 0.3, 0.4, 1.4] ** Processing line: ~ # If cell one is to the left of cell two~ - Inside source: true *** True Line Result # If cell one is to the left of cell two ** Processing line: ~ elsif cell_one.x > cell_two.x and cell_one.y == cell_two.y~ - Inside source: true *** True Line Result elsif cell_one.x > cell_two.x and cell_one.y == cell_two.y ** Processing line: ~ # Path starts from the center of cell two and moves rightward to the center of cell one~ - Inside source: true *** True Line Result # Path starts from the center of cell two and moves rightward to the center of cell one ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 1.4, 0.4]~ - Inside source: true *** True Line Result path = [cell_two.x + 0.3, cell_two.y + 0.3, 1.4, 0.4] ** Processing line: ~ # If cell one is to the right of cell two~ - Inside source: true *** True Line Result # If cell one is to the right of cell two ** Processing line: ~ elsif cell_one.x < cell_two.x and cell_one.y == cell_two.y~ - Inside source: true *** True Line Result elsif cell_one.x < cell_two.x and cell_one.y == cell_two.y ** Processing line: ~ # Path starts from the center of cell one and moves rightward to the center of cell two~ - Inside source: true *** True Line Result # Path starts from the center of cell one and moves rightward to the center of cell two ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 1.4, 0.4]~ - Inside source: true *** True Line Result path = [cell_one.x + 0.3, cell_one.y + 0.3, 1.4, 0.4] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ path~ - Inside source: true *** True Line Result path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # In code, the cells are represented as 1x1 rectangles~ - Inside source: true *** True Line Result # In code, the cells are represented as 1x1 rectangles ** Processing line: ~ # When drawn, the cells are larger than 1x1 rectangles~ - Inside source: true *** True Line Result # When drawn, the cells are larger than 1x1 rectangles ** Processing line: ~ # This method is used to scale up cells, and lines~ - Inside source: true *** True Line Result # This method is used to scale up cells, and lines ** Processing line: ~ # Objects are scaled up according to the grid.cell_size variable~ - Inside source: true *** True Line Result # Objects are scaled up according to the grid.cell_size variable ** Processing line: ~ # This allows for easy customization of the visual scale of the grid~ - Inside source: true *** True Line Result # This allows for easy customization of the visual scale of the grid ** Processing line: ~ # This method scales up cells for the first grid~ - Inside source: true *** True Line Result # This method scales up cells for the first grid ** Processing line: ~ def bfs_scale_up(cell)~ - Inside source: true *** True Line Result def bfs_scale_up(cell) ** Processing line: ~ # Prevents the original value of cell from being edited~ - Inside source: true *** True Line Result # Prevents the original value of cell from being edited ** Processing line: ~ cell = cell.clone~ - Inside source: true *** True Line Result cell = cell.clone ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If cell is just an x and y coordinate~ - Inside source: true *** True Line Result # If cell is just an x and y coordinate ** Processing line: ~ if cell.size == 2~ - Inside source: true *** True Line Result if cell.size == 2 ** Processing line: ~ # Add a width and height of 1~ - Inside source: true *** True Line Result # Add a width and height of 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Scale all the values up~ - Inside source: true *** True Line Result # Scale all the values up ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ - Inside source: true *** True Line Result cell.map! { |value| value * grid.cell_size } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the scaled up cell~ - Inside source: true *** True Line Result # Returns the scaled up cell ** Processing line: ~ cell~ - Inside source: true *** True Line Result cell ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Translates the given cell grid.width + 1 to the right and then scales up~ - Inside source: true *** True Line Result # Translates the given cell grid.width + 1 to the right and then scales up ** Processing line: ~ # Used to draw cells for the second grid~ - Inside source: true *** True Line Result # Used to draw cells for the second grid ** Processing line: ~ # This method does not work for lines,~ - Inside source: true *** True Line Result # This method does not work for lines, ** Processing line: ~ # so separate methods exist for the grid lines~ - Inside source: true *** True Line Result # so separate methods exist for the grid lines ** Processing line: ~ def heuristic_scale_up(cell)~ - Inside source: true *** True Line Result def heuristic_scale_up(cell) ** Processing line: ~ # Prevents the original value of cell from being edited~ - Inside source: true *** True Line Result # Prevents the original value of cell from being edited ** Processing line: ~ cell = cell.clone~ - Inside source: true *** True Line Result cell = cell.clone ** Processing line: ~ # Translates the cell to the second grid equivalent~ - Inside source: true *** True Line Result # Translates the cell to the second grid equivalent ** Processing line: ~ cell.x += grid.width + 1~ - Inside source: true *** True Line Result cell.x += grid.width + 1 ** Processing line: ~ # Proceeds as if scaling up for the first grid~ - Inside source: true *** True Line Result # Proceeds as if scaling up for the first grid ** Processing line: ~ bfs_scale_up(cell)~ - Inside source: true *** True Line Result bfs_scale_up(cell) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks and handles input for the buttons~ - Inside source: true *** True Line Result # Checks and handles input for the buttons ** Processing line: ~ # Called when the mouse is lifted~ - Inside source: true *** True Line Result # Called when the mouse is lifted ** Processing line: ~ def input_buttons~ - Inside source: true *** True Line Result def input_buttons ** Processing line: ~ input_left_button~ - Inside source: true *** True Line Result input_left_button ** Processing line: ~ input_center_button~ - Inside source: true *** True Line Result input_center_button ** Processing line: ~ input_right_button~ - Inside source: true *** True Line Result input_right_button ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks if the previous step button is clicked~ - Inside source: true *** True Line Result # Checks if the previous step button is clicked ** Processing line: ~ # If it is, it pauses the animation and moves the search one step backward~ - Inside source: true *** True Line Result # If it is, it pauses the animation and moves the search one step backward ** Processing line: ~ def input_left_button~ - Inside source: true *** True Line Result def input_left_button ** Processing line: ~ if left_button_clicked?~ - Inside source: true *** True Line Result if left_button_clicked? ** Processing line: ~ state.play = false~ - Inside source: true *** True Line Result state.play = false ** Processing line: ~ state.current_step -= 1~ - Inside source: true *** True Line Result state.current_step -= 1 ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Controls the play/pause button~ - Inside source: true *** True Line Result # Controls the play/pause button ** Processing line: ~ # Inverses whether the animation is playing or not when clicked~ - Inside source: true *** True Line Result # Inverses whether the animation is playing or not when clicked ** Processing line: ~ def input_center_button~ - Inside source: true *** True Line Result def input_center_button ** Processing line: ~ if center_button_clicked? || inputs.keyboard.key_down.space~ - Inside source: true *** True Line Result if center_button_clicked? || inputs.keyboard.key_down.space ** Processing line: ~ state.play = !state.play~ - Inside source: true *** True Line Result state.play = !state.play ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks if the next step button is clicked~ - Inside source: true *** True Line Result # Checks if the next step button is clicked ** Processing line: ~ # If it is, it pauses the animation and moves the search one step forward~ - Inside source: true *** True Line Result # If it is, it pauses the animation and moves the search one step forward ** Processing line: ~ def input_right_button~ - Inside source: true *** True Line Result def input_right_button ** Processing line: ~ if right_button_clicked?~ - Inside source: true *** True Line Result if right_button_clicked? ** Processing line: ~ state.play = false~ - Inside source: true *** True Line Result state.play = false ** Processing line: ~ state.current_step += 1~ - Inside source: true *** True Line Result state.current_step += 1 ** Processing line: ~ move_searches_one_step_forward~ - Inside source: true *** True Line Result move_searches_one_step_forward ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These methods detect when the buttons are clicked~ - Inside source: true *** True Line Result # These methods detect when the buttons are clicked ** Processing line: ~ def left_button_clicked?~ - Inside source: true *** True Line Result def left_button_clicked? ** Processing line: ~ inputs.mouse.point.inside_rect?(buttons.left) && inputs.mouse.up~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(buttons.left) && inputs.mouse.up ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def center_button_clicked?~ - Inside source: true *** True Line Result def center_button_clicked? ** Processing line: ~ inputs.mouse.point.inside_rect?(buttons.center) && inputs.mouse.up~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(buttons.center) && inputs.mouse.up ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def right_button_clicked?~ - Inside source: true *** True Line Result def right_button_clicked? ** Processing line: ~ inputs.mouse.point.inside_rect?(buttons.right) && inputs.mouse.up~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(buttons.right) && inputs.mouse.up ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the slider~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the slider ** Processing line: ~ # Is the mouse over the circle of the slider?~ - Inside source: true *** True Line Result # Is the mouse over the circle of the slider? ** Processing line: ~ def mouse_over_slider?~ - Inside source: true *** True Line Result def mouse_over_slider? ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.current_step * slider.spacing)~ - Inside source: true *** True Line Result circle_x = (slider.x - slider.offset) + (state.current_step * slider.spacing) ** Processing line: ~ circle_y = (slider.y - slider.offset)~ - Inside source: true *** True Line Result circle_y = (slider.y - slider.offset) ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ - Inside source: true *** True Line Result circle_rect = [circle_x, circle_y, 37, 37] ** Processing line: ~ inputs.mouse.point.inside_rect?(circle_rect)~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(circle_rect) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the star from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the star from the first grid ** Processing line: ~ def bfs_mouse_over_star?~ - Inside source: true *** True Line Result def bfs_mouse_over_star? ** Processing line: ~ inputs.mouse.point.inside_rect?(bfs_scale_up(grid.star))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(bfs_scale_up(grid.star)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the star from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the star from the second grid ** Processing line: ~ def heuristic_mouse_over_star?~ - Inside source: true *** True Line Result def heuristic_mouse_over_star? ** Processing line: ~ inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.star))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.star)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the target from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the target from the first grid ** Processing line: ~ def bfs_mouse_over_target?~ - Inside source: true *** True Line Result def bfs_mouse_over_target? ** Processing line: ~ inputs.mouse.point.inside_rect?(bfs_scale_up(grid.target))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(bfs_scale_up(grid.target)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the target from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the target from the second grid ** Processing line: ~ def heuristic_mouse_over_target?~ - Inside source: true *** True Line Result def heuristic_mouse_over_target? ** Processing line: ~ inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.target))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.target)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing walls from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be removing walls from the first grid ** Processing line: ~ def bfs_mouse_over_wall?~ - Inside source: true *** True Line Result def bfs_mouse_over_wall? ** Processing line: ~ grid.walls.each_key do | wall |~ - Inside source: true *** True Line Result grid.walls.each_key do | wall | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(bfs_scale_up(wall))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(bfs_scale_up(wall)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing walls from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be removing walls from the second grid ** Processing line: ~ def heuristic_mouse_over_wall?~ - Inside source: true *** True Line Result def heuristic_mouse_over_wall? ** Processing line: ~ grid.walls.each_key do | wall |~ - Inside source: true *** True Line Result grid.walls.each_key do | wall | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(heuristic_scale_up(wall))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(heuristic_scale_up(wall)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be adding walls from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be adding walls from the first grid ** Processing line: ~ def bfs_mouse_over_grid?~ - Inside source: true *** True Line Result def bfs_mouse_over_grid? ** Processing line: ~ inputs.mouse.point.inside_rect?(bfs_scale_up(grid.rect))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(bfs_scale_up(grid.rect)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be adding walls from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be adding walls from the second grid ** Processing line: ~ def heuristic_mouse_over_grid?~ - Inside source: true *** True Line Result def heuristic_mouse_over_grid? ** Processing line: ~ inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.rect))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.rect)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method is called when the user is editing the slider~ - Inside source: true *** True Line Result # This method is called when the user is editing the slider ** Processing line: ~ # It pauses the animation and moves the white circle to the closest integer point~ - Inside source: true *** True Line Result # It pauses the animation and moves the white circle to the closest integer point ** Processing line: ~ # on the slider~ - Inside source: true *** True Line Result # on the slider ** Processing line: ~ # Changes the step of the search to be animated~ - Inside source: true *** True Line Result # Changes the step of the search to be animated ** Processing line: ~ def process_input_slider~ - Inside source: true *** True Line Result def process_input_slider ** Processing line: ~ state.play = false~ - Inside source: true *** True Line Result state.play = false ** Processing line: ~ mouse_x = inputs.mouse.point.x~ - Inside source: true *** True Line Result mouse_x = inputs.mouse.point.x ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Bounds the mouse_x to the closest x value on the slider line~ - Inside source: true *** True Line Result # Bounds the mouse_x to the closest x value on the slider line ** Processing line: ~ mouse_x = slider.x if mouse_x < slider.x~ - Inside source: true *** True Line Result mouse_x = slider.x if mouse_x < slider.x ** Processing line: ~ mouse_x = slider.x + slider.w if mouse_x > slider.x + slider.w~ - Inside source: true *** True Line Result mouse_x = slider.x + slider.w if mouse_x > slider.x + slider.w ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the current search step to the one represented by the mouse x value~ - Inside source: true *** True Line Result # Sets the current search step to the one represented by the mouse x value ** Processing line: ~ # The slider's circle moves due to the render_slider method using anim_steps~ - Inside source: true *** True Line Result # The slider's circle moves due to the render_slider method using anim_steps ** Processing line: ~ state.current_step = ((mouse_x - slider.x) / slider.spacing).to_i~ - Inside source: true *** True Line Result state.current_step = ((mouse_x - slider.x) / slider.spacing).to_i ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the star to the cell closest to the mouse in the first grid~ - Inside source: true *** True Line Result # Moves the star to the cell closest to the mouse in the first grid ** Processing line: ~ # Only resets the search if the star changes position~ - Inside source: true *** True Line Result # Only resets the search if the star changes position ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ - Inside source: true *** True Line Result # Called whenever the user is editing the star (puts mouse down on star) ** Processing line: ~ def process_input_bfs_star~ - Inside source: true *** True Line Result def process_input_bfs_star ** Processing line: ~ old_star = grid.star.clone~ - Inside source: true *** True Line Result old_star = grid.star.clone ** Processing line: ~ unless bfs_cell_closest_to_mouse == grid.target~ - Inside source: true *** True Line Result unless bfs_cell_closest_to_mouse == grid.target ** Processing line: ~ grid.star = bfs_cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.star = bfs_cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_star == grid.star~ - Inside source: true *** True Line Result unless old_star == grid.star ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the star to the cell closest to the mouse in the second grid~ - Inside source: true *** True Line Result # Moves the star to the cell closest to the mouse in the second grid ** Processing line: ~ # Only resets the search if the star changes position~ - Inside source: true *** True Line Result # Only resets the search if the star changes position ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ - Inside source: true *** True Line Result # Called whenever the user is editing the star (puts mouse down on star) ** Processing line: ~ def process_input_heuristic_star~ - Inside source: true *** True Line Result def process_input_heuristic_star ** Processing line: ~ old_star = grid.star.clone~ - Inside source: true *** True Line Result old_star = grid.star.clone ** Processing line: ~ unless heuristic_cell_closest_to_mouse == grid.target~ - Inside source: true *** True Line Result unless heuristic_cell_closest_to_mouse == grid.target ** Processing line: ~ grid.star = heuristic_cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.star = heuristic_cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_star == grid.star~ - Inside source: true *** True Line Result unless old_star == grid.star ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the target to the grid closest to the mouse in the first grid~ - Inside source: true *** True Line Result # Moves the target to the grid closest to the mouse in the first grid ** Processing line: ~ # Only recalculate_searchess the search if the target changes position~ - Inside source: true *** True Line Result # Only recalculate_searchess the search if the target changes position ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ - Inside source: true *** True Line Result # Called whenever the user is editing the target (puts mouse down on target) ** Processing line: ~ def process_input_bfs_target~ - Inside source: true *** True Line Result def process_input_bfs_target ** Processing line: ~ old_target = grid.target.clone~ - Inside source: true *** True Line Result old_target = grid.target.clone ** Processing line: ~ unless bfs_cell_closest_to_mouse == grid.star~ - Inside source: true *** True Line Result unless bfs_cell_closest_to_mouse == grid.star ** Processing line: ~ grid.target = bfs_cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.target = bfs_cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_target == grid.target~ - Inside source: true *** True Line Result unless old_target == grid.target ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the target to the cell closest to the mouse in the second grid~ - Inside source: true *** True Line Result # Moves the target to the cell closest to the mouse in the second grid ** Processing line: ~ # Only recalculate_searchess the search if the target changes position~ - Inside source: true *** True Line Result # Only recalculate_searchess the search if the target changes position ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ - Inside source: true *** True Line Result # Called whenever the user is editing the target (puts mouse down on target) ** Processing line: ~ def process_input_heuristic_target~ - Inside source: true *** True Line Result def process_input_heuristic_target ** Processing line: ~ old_target = grid.target.clone~ - Inside source: true *** True Line Result old_target = grid.target.clone ** Processing line: ~ unless heuristic_cell_closest_to_mouse == grid.star~ - Inside source: true *** True Line Result unless heuristic_cell_closest_to_mouse == grid.star ** Processing line: ~ grid.target = heuristic_cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.target = heuristic_cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_target == grid.target~ - Inside source: true *** True Line Result unless old_target == grid.target ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Removes walls in the first grid that are under the cursor~ - Inside source: true *** True Line Result # Removes walls in the first grid that are under the cursor ** Processing line: ~ def process_input_bfs_remove_wall~ - Inside source: true *** True Line Result def process_input_bfs_remove_wall ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ - Inside source: true *** True Line Result # The mouse needs to be inside the grid, because we only want to remove walls ** Processing line: ~ # the cursor is directly over~ - Inside source: true *** True Line Result # the cursor is directly over ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ - Inside source: true *** True Line Result # Recalculations should only occur when a wall is actually deleted ** Processing line: ~ if bfs_mouse_over_grid?~ - Inside source: true *** True Line Result if bfs_mouse_over_grid? ** Processing line: ~ if grid.walls.has_key?(bfs_cell_closest_to_mouse)~ - Inside source: true *** True Line Result if grid.walls.has_key?(bfs_cell_closest_to_mouse) ** Processing line: ~ grid.walls.delete(bfs_cell_closest_to_mouse)~ - Inside source: true *** True Line Result grid.walls.delete(bfs_cell_closest_to_mouse) ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Removes walls in the second grid that are under the cursor~ - Inside source: true *** True Line Result # Removes walls in the second grid that are under the cursor ** Processing line: ~ def process_input_heuristic_remove_wall~ - Inside source: true *** True Line Result def process_input_heuristic_remove_wall ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ - Inside source: true *** True Line Result # The mouse needs to be inside the grid, because we only want to remove walls ** Processing line: ~ # the cursor is directly over~ - Inside source: true *** True Line Result # the cursor is directly over ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ - Inside source: true *** True Line Result # Recalculations should only occur when a wall is actually deleted ** Processing line: ~ if heuristic_mouse_over_grid?~ - Inside source: true *** True Line Result if heuristic_mouse_over_grid? ** Processing line: ~ if grid.walls.has_key?(heuristic_cell_closest_to_mouse)~ - Inside source: true *** True Line Result if grid.walls.has_key?(heuristic_cell_closest_to_mouse) ** Processing line: ~ grid.walls.delete(heuristic_cell_closest_to_mouse)~ - Inside source: true *** True Line Result grid.walls.delete(heuristic_cell_closest_to_mouse) ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ # Adds a wall in the first grid in the cell the mouse is over~ - Inside source: true *** True Line Result # Adds a wall in the first grid in the cell the mouse is over ** Processing line: ~ def process_input_bfs_add_wall~ - Inside source: true *** True Line Result def process_input_bfs_add_wall ** Processing line: ~ if bfs_mouse_over_grid?~ - Inside source: true *** True Line Result if bfs_mouse_over_grid? ** Processing line: ~ unless grid.walls.has_key?(bfs_cell_closest_to_mouse)~ - Inside source: true *** True Line Result unless grid.walls.has_key?(bfs_cell_closest_to_mouse) ** Processing line: ~ grid.walls[bfs_cell_closest_to_mouse] = true~ - Inside source: true *** True Line Result grid.walls[bfs_cell_closest_to_mouse] = true ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds a wall in the second grid in the cell the mouse is over~ - Inside source: true *** True Line Result # Adds a wall in the second grid in the cell the mouse is over ** Processing line: ~ def process_input_heuristic_add_wall~ - Inside source: true *** True Line Result def process_input_heuristic_add_wall ** Processing line: ~ if heuristic_mouse_over_grid?~ - Inside source: true *** True Line Result if heuristic_mouse_over_grid? ** Processing line: ~ unless grid.walls.has_key?(heuristic_cell_closest_to_mouse)~ - Inside source: true *** True Line Result unless grid.walls.has_key?(heuristic_cell_closest_to_mouse) ** Processing line: ~ grid.walls[heuristic_cell_closest_to_mouse] = true~ - Inside source: true *** True Line Result grid.walls[heuristic_cell_closest_to_mouse] = true ** Processing line: ~ recalculate_searches~ - Inside source: true *** True Line Result recalculate_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ - Inside source: true *** True Line Result # When the user grabs the star and puts their cursor to the far right ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ - Inside source: true *** True Line Result # and moves up and down, the star is supposed to move along the grid as well ** Processing line: ~ # Finding the cell closest to the mouse helps with this~ - Inside source: true *** True Line Result # Finding the cell closest to the mouse helps with this ** Processing line: ~ def bfs_cell_closest_to_mouse~ - Inside source: true *** True Line Result def bfs_cell_closest_to_mouse ** Processing line: ~ # Closest cell to the mouse in the first grid~ - Inside source: true *** True Line Result # Closest cell to the mouse in the first grid ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ - Inside source: true *** True Line Result x = (inputs.mouse.point.x / grid.cell_size).to_i ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ - Inside source: true *** True Line Result y = (inputs.mouse.point.y / grid.cell_size).to_i ** Processing line: ~ # Bound x and y to the grid~ - Inside source: true *** True Line Result # Bound x and y to the grid ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ - Inside source: true *** True Line Result x = grid.width - 1 if x > grid.width - 1 ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ - Inside source: true *** True Line Result y = grid.height - 1 if y > grid.height - 1 ** Processing line: ~ # Return closest cell~ - Inside source: true *** True Line Result # Return closest cell ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ - Inside source: true *** True Line Result # When the user grabs the star and puts their cursor to the far right ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ - Inside source: true *** True Line Result # and moves up and down, the star is supposed to move along the grid as well ** Processing line: ~ # Finding the cell closest to the mouse in the second grid helps with this~ - Inside source: true *** True Line Result # Finding the cell closest to the mouse in the second grid helps with this ** Processing line: ~ def heuristic_cell_closest_to_mouse~ - Inside source: true *** True Line Result def heuristic_cell_closest_to_mouse ** Processing line: ~ # Closest cell grid to the mouse in the second~ - Inside source: true *** True Line Result # Closest cell grid to the mouse in the second ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ - Inside source: true *** True Line Result x = (inputs.mouse.point.x / grid.cell_size).to_i ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ - Inside source: true *** True Line Result y = (inputs.mouse.point.y / grid.cell_size).to_i ** Processing line: ~ # Translate the cell to the first grid~ - Inside source: true *** True Line Result # Translate the cell to the first grid ** Processing line: ~ x -= grid.width + 1~ - Inside source: true *** True Line Result x -= grid.width + 1 ** Processing line: ~ # Bound x and y to the first grid~ - Inside source: true *** True Line Result # Bound x and y to the first grid ** Processing line: ~ x = 0 if x < 0~ - Inside source: true *** True Line Result x = 0 if x < 0 ** Processing line: ~ y = 0 if y < 0~ - Inside source: true *** True Line Result y = 0 if y < 0 ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ - Inside source: true *** True Line Result x = grid.width - 1 if x > grid.width - 1 ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ - Inside source: true *** True Line Result y = grid.height - 1 if y > grid.height - 1 ** Processing line: ~ # Return closest cell~ - Inside source: true *** True Line Result # Return closest cell ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def recalculate_searches~ - Inside source: true *** True Line Result def recalculate_searches ** Processing line: ~ # Reset the searches~ - Inside source: true *** True Line Result # Reset the searches ** Processing line: ~ bfs.came_from = {}~ - Inside source: true *** True Line Result bfs.came_from = {} ** Processing line: ~ bfs.frontier = []~ - Inside source: true *** True Line Result bfs.frontier = [] ** Processing line: ~ bfs.path = []~ - Inside source: true *** True Line Result bfs.path = [] ** Processing line: ~ heuristic.came_from = {}~ - Inside source: true *** True Line Result heuristic.came_from = {} ** Processing line: ~ heuristic.frontier = []~ - Inside source: true *** True Line Result heuristic.frontier = [] ** Processing line: ~ heuristic.path = []~ - Inside source: true *** True Line Result heuristic.path = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Move the searches forward to the current step~ - Inside source: true *** True Line Result # Move the searches forward to the current step ** Processing line: ~ state.current_step.times { move_searches_one_step_forward }~ - Inside source: true *** True Line Result state.current_step.times { move_searches_one_step_forward } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_searches_one_step_forward~ - Inside source: true *** True Line Result def move_searches_one_step_forward ** Processing line: ~ bfs_one_step_forward~ - Inside source: true *** True Line Result bfs_one_step_forward ** Processing line: ~ heuristic_one_step_forward~ - Inside source: true *** True Line Result heuristic_one_step_forward ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bfs_one_step_forward~ - Inside source: true *** True Line Result def bfs_one_step_forward ** Processing line: ~ return if bfs.came_from.has_key?(grid.target)~ - Inside source: true *** True Line Result return if bfs.came_from.has_key?(grid.target) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Only runs at the beginning of the search as setup.~ - Inside source: true *** True Line Result # Only runs at the beginning of the search as setup. ** Processing line: ~ if bfs.came_from.empty?~ - Inside source: true *** True Line Result if bfs.came_from.empty? ** Processing line: ~ bfs.frontier << grid.star~ - Inside source: true *** True Line Result bfs.frontier << grid.star ** Processing line: ~ bfs.came_from[grid.star] = nil~ - Inside source: true *** True Line Result bfs.came_from[grid.star] = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # A step in the search~ - Inside source: true *** True Line Result # A step in the search ** Processing line: ~ unless bfs.frontier.empty?~ - Inside source: true *** True Line Result unless bfs.frontier.empty? ** Processing line: ~ # Takes the next frontier cell~ - Inside source: true *** True Line Result # Takes the next frontier cell ** Processing line: ~ new_frontier = bfs.frontier.shift~ - Inside source: true *** True Line Result new_frontier = bfs.frontier.shift ** Processing line: ~ # For each of its neighbors~ - Inside source: true *** True Line Result # For each of its neighbors ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ - Inside source: true *** True Line Result adjacent_neighbors(new_frontier).each do |neighbor| ** Processing line: ~ # That have not been visited and are not walls~ - Inside source: true *** True Line Result # That have not been visited and are not walls ** Processing line: ~ unless bfs.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor)~ - Inside source: true *** True Line Result unless bfs.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor) ** Processing line: ~ # Add them to the frontier and mark them as visited~ - Inside source: true *** True Line Result # Add them to the frontier and mark them as visited ** Processing line: ~ bfs.frontier << neighbor~ - Inside source: true *** True Line Result bfs.frontier << neighbor ** Processing line: ~ bfs.came_from[neighbor] = new_frontier~ - Inside source: true *** True Line Result bfs.came_from[neighbor] = new_frontier ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line~ - Inside source: true *** True Line Result # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line ** Processing line: ~ # Comment this line and let a path generate to see the difference~ - Inside source: true *** True Line Result # Comment this line and let a path generate to see the difference ** Processing line: ~ bfs.frontier = bfs.frontier.sort_by {| cell | proximity_to_star(cell) }~ - Inside source: true *** True Line Result bfs.frontier = bfs.frontier.sort_by {| cell | proximity_to_star(cell) } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the search found the target~ - Inside source: true *** True Line Result # If the search found the target ** Processing line: ~ if bfs.came_from.has_key?(grid.target)~ - Inside source: true *** True Line Result if bfs.came_from.has_key?(grid.target) ** Processing line: ~ # Calculate the path between the target and star~ - Inside source: true *** True Line Result # Calculate the path between the target and star ** Processing line: ~ bfs_calc_path~ - Inside source: true *** True Line Result bfs_calc_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the path between the target and star for the breadth first search~ - Inside source: true *** True Line Result # Calculates the path between the target and star for the breadth first search ** Processing line: ~ # Only called when the breadth first search finds the target~ - Inside source: true *** True Line Result # Only called when the breadth first search finds the target ** Processing line: ~ def bfs_calc_path~ - Inside source: true *** True Line Result def bfs_calc_path ** Processing line: ~ # Start from the target~ - Inside source: true *** True Line Result # Start from the target ** Processing line: ~ endpoint = grid.target~ - Inside source: true *** True Line Result endpoint = grid.target ** Processing line: ~ # And the cell it came from~ - Inside source: true *** True Line Result # And the cell it came from ** Processing line: ~ next_endpoint = bfs.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = bfs.came_from[endpoint] ** Processing line: ~ while endpoint and next_endpoint~ - Inside source: true *** True Line Result while endpoint and next_endpoint ** Processing line: ~ # Draw a path between these two cells and store it~ - Inside source: true *** True Line Result # Draw a path between these two cells and store it ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ - Inside source: true *** True Line Result path = get_path_between(endpoint, next_endpoint) ** Processing line: ~ bfs.path << path~ - Inside source: true *** True Line Result bfs.path << path ** Processing line: ~ # And get the next pair of cells~ - Inside source: true *** True Line Result # And get the next pair of cells ** Processing line: ~ endpoint = next_endpoint~ - Inside source: true *** True Line Result endpoint = next_endpoint ** Processing line: ~ next_endpoint = bfs.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = bfs.came_from[endpoint] ** Processing line: ~ # Continue till there are no more cells~ - Inside source: true *** True Line Result # Continue till there are no more cells ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the heuristic search forward one step~ - Inside source: true *** True Line Result # Moves the heuristic search forward one step ** Processing line: ~ # Can be called from tick while the animation is playing~ - Inside source: true *** True Line Result # Can be called from tick while the animation is playing ** Processing line: ~ # Can also be called when recalculating the searches after the user edited the grid~ - Inside source: true *** True Line Result # Can also be called when recalculating the searches after the user edited the grid ** Processing line: ~ def heuristic_one_step_forward~ - Inside source: true *** True Line Result def heuristic_one_step_forward ** Processing line: ~ # Stop the search if the target has been found~ - Inside source: true *** True Line Result # Stop the search if the target has been found ** Processing line: ~ return if heuristic.came_from.has_key?(grid.target)~ - Inside source: true *** True Line Result return if heuristic.came_from.has_key?(grid.target) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the search has not begun~ - Inside source: true *** True Line Result # If the search has not begun ** Processing line: ~ if heuristic.came_from.empty?~ - Inside source: true *** True Line Result if heuristic.came_from.empty? ** Processing line: ~ # Setup the search to begin from the star~ - Inside source: true *** True Line Result # Setup the search to begin from the star ** Processing line: ~ heuristic.frontier << grid.star~ - Inside source: true *** True Line Result heuristic.frontier << grid.star ** Processing line: ~ heuristic.came_from[grid.star] = nil~ - Inside source: true *** True Line Result heuristic.came_from[grid.star] = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # One step in the heuristic search~ - Inside source: true *** True Line Result # One step in the heuristic search ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Unless there are no more cells to explore from~ - Inside source: true *** True Line Result # Unless there are no more cells to explore from ** Processing line: ~ unless heuristic.frontier.empty?~ - Inside source: true *** True Line Result unless heuristic.frontier.empty? ** Processing line: ~ # Get the next cell to explore from~ - Inside source: true *** True Line Result # Get the next cell to explore from ** Processing line: ~ new_frontier = heuristic.frontier.shift~ - Inside source: true *** True Line Result new_frontier = heuristic.frontier.shift ** Processing line: ~ # For each of its neighbors~ - Inside source: true *** True Line Result # For each of its neighbors ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ - Inside source: true *** True Line Result adjacent_neighbors(new_frontier).each do |neighbor| ** Processing line: ~ # That have not been visited and are not walls~ - Inside source: true *** True Line Result # That have not been visited and are not walls ** Processing line: ~ unless heuristic.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor)~ - Inside source: true *** True Line Result unless heuristic.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor) ** Processing line: ~ # Add them to the frontier and mark them as visited~ - Inside source: true *** True Line Result # Add them to the frontier and mark them as visited ** Processing line: ~ heuristic.frontier << neighbor~ - Inside source: true *** True Line Result heuristic.frontier << neighbor ** Processing line: ~ heuristic.came_from[neighbor] = new_frontier~ - Inside source: true *** True Line Result heuristic.came_from[neighbor] = new_frontier ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line~ - Inside source: true *** True Line Result # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line ** Processing line: ~ heuristic.frontier = heuristic.frontier.sort_by {| cell | proximity_to_star(cell) }~ - Inside source: true *** True Line Result heuristic.frontier = heuristic.frontier.sort_by {| cell | proximity_to_star(cell) } ** Processing line: ~ # Sort the frontier so cells that are close to the target are then prioritized~ - Inside source: true *** True Line Result # Sort the frontier so cells that are close to the target are then prioritized ** Processing line: ~ heuristic.frontier = heuristic.frontier.sort_by {| cell | heuristic_heuristic(cell) }~ - Inside source: true *** True Line Result heuristic.frontier = heuristic.frontier.sort_by {| cell | heuristic_heuristic(cell) } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the search found the target~ - Inside source: true *** True Line Result # If the search found the target ** Processing line: ~ if heuristic.came_from.has_key?(grid.target)~ - Inside source: true *** True Line Result if heuristic.came_from.has_key?(grid.target) ** Processing line: ~ # Calculate the path between the target and star~ - Inside source: true *** True Line Result # Calculate the path between the target and star ** Processing line: ~ heuristic_calc_path~ - Inside source: true *** True Line Result heuristic_calc_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns one-dimensional absolute distance between cell and target~ - Inside source: true *** True Line Result # Returns one-dimensional absolute distance between cell and target ** Processing line: ~ # Returns a number to compare distances between cells and the target~ - Inside source: true *** True Line Result # Returns a number to compare distances between cells and the target ** Processing line: ~ def heuristic_heuristic(cell)~ - Inside source: true *** True Line Result def heuristic_heuristic(cell) ** Processing line: ~ (grid.target.x - cell.x).abs + (grid.target.y - cell.y).abs~ - Inside source: true *** True Line Result (grid.target.x - cell.x).abs + (grid.target.y - cell.y).abs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the path between the target and star for the heuristic search~ - Inside source: true *** True Line Result # Calculates the path between the target and star for the heuristic search ** Processing line: ~ # Only called when the heuristic search finds the target~ - Inside source: true *** True Line Result # Only called when the heuristic search finds the target ** Processing line: ~ def heuristic_calc_path~ - Inside source: true *** True Line Result def heuristic_calc_path ** Processing line: ~ # Start from the target~ - Inside source: true *** True Line Result # Start from the target ** Processing line: ~ endpoint = grid.target~ - Inside source: true *** True Line Result endpoint = grid.target ** Processing line: ~ # And the cell it came from~ - Inside source: true *** True Line Result # And the cell it came from ** Processing line: ~ next_endpoint = heuristic.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = heuristic.came_from[endpoint] ** Processing line: ~ while endpoint and next_endpoint~ - Inside source: true *** True Line Result while endpoint and next_endpoint ** Processing line: ~ # Draw a path between these two cells and store it~ - Inside source: true *** True Line Result # Draw a path between these two cells and store it ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ - Inside source: true *** True Line Result path = get_path_between(endpoint, next_endpoint) ** Processing line: ~ heuristic.path << path~ - Inside source: true *** True Line Result heuristic.path << path ** Processing line: ~ # And get the next pair of cells~ - Inside source: true *** True Line Result # And get the next pair of cells ** Processing line: ~ endpoint = next_endpoint~ - Inside source: true *** True Line Result endpoint = next_endpoint ** Processing line: ~ next_endpoint = heuristic.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = heuristic.came_from[endpoint] ** Processing line: ~ # Continue till there are no more cells~ - Inside source: true *** True Line Result # Continue till there are no more cells ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a list of adjacent cells~ - Inside source: true *** True Line Result # Returns a list of adjacent cells ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ - Inside source: true *** True Line Result # Used to determine what the next cells to be added to the frontier are ** Processing line: ~ def adjacent_neighbors(cell)~ - Inside source: true *** True Line Result def adjacent_neighbors(cell) ** Processing line: ~ neighbors = []~ - Inside source: true *** True Line Result neighbors = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Gets all the valid neighbors into the array~ - Inside source: true *** True Line Result # Gets all the valid neighbors into the array ** Processing line: ~ # From southern neighbor, clockwise~ - Inside source: true *** True Line Result # From southern neighbor, clockwise ** Processing line: ~ neighbors << [cell.x , cell.y - 1] unless cell.y == 0~ - Inside source: true *** True Line Result neighbors << [cell.x , cell.y - 1] unless cell.y == 0 ** Processing line: ~ neighbors << [cell.x - 1, cell.y ] unless cell.x == 0~ - Inside source: true *** True Line Result neighbors << [cell.x - 1, cell.y ] unless cell.x == 0 ** Processing line: ~ neighbors << [cell.x , cell.y + 1] unless cell.y == grid.height - 1~ - Inside source: true *** True Line Result neighbors << [cell.x , cell.y + 1] unless cell.y == grid.height - 1 ** Processing line: ~ neighbors << [cell.x + 1, cell.y ] unless cell.x == grid.width - 1~ - Inside source: true *** True Line Result neighbors << [cell.x + 1, cell.y ] unless cell.x == grid.width - 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ neighbors~ - Inside source: true *** True Line Result neighbors ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds the vertical and horizontal distance of a cell from the star~ - Inside source: true *** True Line Result # Finds the vertical and horizontal distance of a cell from the star ** Processing line: ~ # and returns the larger value~ - Inside source: true *** True Line Result # and returns the larger value ** Processing line: ~ # This method is used to have a zigzag pattern in the rendered path~ - Inside source: true *** True Line Result # This method is used to have a zigzag pattern in the rendered path ** Processing line: ~ # A cell that is [5, 5] from the star,~ - Inside source: true *** True Line Result # A cell that is [5, 5] from the star, ** Processing line: ~ # is explored before over a cell that is [0, 7] away.~ - Inside source: true *** True Line Result # is explored before over a cell that is [0, 7] away. ** Processing line: ~ # So, if possible, the search tries to go diagonal (zigzag) first~ - Inside source: true *** True Line Result # So, if possible, the search tries to go diagonal (zigzag) first ** Processing line: ~ def proximity_to_star(cell)~ - Inside source: true *** True Line Result def proximity_to_star(cell) ** Processing line: ~ distance_x = (grid.star.x - cell.x).abs~ - Inside source: true *** True Line Result distance_x = (grid.star.x - cell.x).abs ** Processing line: ~ distance_y = (grid.star.y - cell.y).abs~ - Inside source: true *** True Line Result distance_y = (grid.star.y - cell.y).abs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if distance_x > distance_y~ - Inside source: true *** True Line Result if distance_x > distance_y ** Processing line: ~ return distance_x~ - Inside source: true *** True Line Result return distance_x ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return distance_y~ - Inside source: true *** True Line Result return distance_y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Methods that allow code to be more concise. Subdivides args.state, which is where all variables are stored.~ - Inside source: true *** True Line Result # Methods that allow code to be more concise. Subdivides args.state, which is where all variables are stored. ** Processing line: ~ def grid~ - Inside source: true *** True Line Result def grid ** Processing line: ~ state.grid~ - Inside source: true *** True Line Result state.grid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def buttons~ - Inside source: true *** True Line Result def buttons ** Processing line: ~ state.buttons~ - Inside source: true *** True Line Result state.buttons ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def slider~ - Inside source: true *** True Line Result def slider ** Processing line: ~ state.slider~ - Inside source: true *** True Line Result state.slider ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bfs~ - Inside source: true *** True Line Result def bfs ** Processing line: ~ state.bfs~ - Inside source: true *** True Line Result state.bfs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def heuristic~ - Inside source: true *** True Line Result def heuristic ** Processing line: ~ state.heuristic~ - Inside source: true *** True Line Result state.heuristic ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Descriptive aliases for colors~ - Inside source: true *** True Line Result # Descriptive aliases for colors ** Processing line: ~ def default_color~ - Inside source: true *** True Line Result def default_color ** Processing line: ~ [221, 212, 213] # Light Brown~ - Inside source: true *** True Line Result [221, 212, 213] # Light Brown ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def wall_color~ - Inside source: true *** True Line Result def wall_color ** Processing line: ~ [134, 134, 120] # Camo Green~ - Inside source: true *** True Line Result [134, 134, 120] # Camo Green ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def visited_color~ - Inside source: true *** True Line Result def visited_color ** Processing line: ~ [204, 191, 179] # Dark Brown~ - Inside source: true *** True Line Result [204, 191, 179] # Dark Brown ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def frontier_color~ - Inside source: true *** True Line Result def frontier_color ** Processing line: ~ [103, 136, 204] # Blue~ - Inside source: true *** True Line Result [103, 136, 204] # Blue ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def path_color~ - Inside source: true *** True Line Result def path_color ** Processing line: ~ [231, 230, 228] # Pastel White~ - Inside source: true *** True Line Result [231, 230, 228] # Pastel White ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def button_color~ - Inside source: true *** True Line Result def button_color ** Processing line: ~ [190, 190, 190] # Gray~ - Inside source: true *** True Line Result [190, 190, 190] # Gray ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ # Method that is called by DragonRuby periodically~ - Inside source: true *** True Line Result # Method that is called by DragonRuby periodically ** Processing line: ~ # Used for updating animations and calculations~ - Inside source: true *** True Line Result # Used for updating animations and calculations ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Pressing r will reset the application~ - Inside source: true *** True Line Result # Pressing r will reset the application ** Processing line: ~ if args.inputs.keyboard.key_down.r~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.r ** Processing line: ~ args.gtk.reset~ - Inside source: true *** True Line Result args.gtk.reset ** Processing line: ~ reset~ - Inside source: true *** True Line Result reset ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Every tick, new args are passed, and the Breadth First Search tick is called~ - Inside source: true *** True Line Result # Every tick, new args are passed, and the Breadth First Search tick is called ** Processing line: ~ $heuristic ||= Heuristic.new~ - Inside source: true *** True Line Result $heuristic ||= Heuristic.new ** Processing line: ~ $heuristic.args = args~ - Inside source: true *** True Line Result $heuristic.args = args ** Processing line: ~ $heuristic.tick~ - Inside source: true *** True Line Result $heuristic.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset~ - Inside source: true *** True Line Result def reset ** Processing line: ~ $heuristic = nil~ - Inside source: true *** True Line Result $heuristic = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Path Finding Algorithms - A Star - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Path Finding Algorithms - A Star - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/13_path_finding_algorithms/08_a_star/app/main.rb~ - Inside source: true *** True Line Result # ./samples/13_path_finding_algorithms/08_a_star/app/main.rb ** Processing line: ~ # This program is inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html~ - Inside source: true *** True Line Result # This program is inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The A* Search works by incorporating both the distance from the starting point~ - Inside source: true *** True Line Result # The A* Search works by incorporating both the distance from the starting point ** Processing line: ~ # and the distance from the target in its heurisitic.~ - Inside source: true *** True Line Result # and the distance from the target in its heurisitic. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # It tends to find the correct (shortest) path even when the Greedy Best-First Search does not,~ - Inside source: true *** True Line Result # It tends to find the correct (shortest) path even when the Greedy Best-First Search does not, ** Processing line: ~ # and it explores less of the grid, and is therefore faster, than Dijkstra's Search.~ - Inside source: true *** True Line Result # and it explores less of the grid, and is therefore faster, than Dijkstra's Search. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class A_Star_Algorithm~ - Inside source: true *** True Line Result class A_Star_Algorithm ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if dijkstra.came_from.empty?~ - Inside source: true *** True Line Result if dijkstra.came_from.empty? ** Processing line: ~ calc_searches~ - Inside source: true *** True Line Result calc_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ # Variables to edit the size and appearance of the grid~ - Inside source: true *** True Line Result # Variables to edit the size and appearance of the grid ** Processing line: ~ # Freely customizable to user's liking~ - Inside source: true *** True Line Result # Freely customizable to user's liking ** Processing line: ~ grid.width ||= 15~ - Inside source: true *** True Line Result grid.width ||= 15 ** Processing line: ~ grid.height ||= 15~ - Inside source: true *** True Line Result grid.height ||= 15 ** Processing line: ~ grid.cell_size ||= 27~ - Inside source: true *** True Line Result grid.cell_size ||= 27 ** Processing line: ~ grid.rect ||= [0, 0, grid.width, grid.height]~ - Inside source: true *** True Line Result grid.rect ||= [0, 0, grid.width, grid.height] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ grid.star ||= [0, 2]~ - Inside source: true *** True Line Result grid.star ||= [0, 2] ** Processing line: ~ grid.target ||= [11, 13]~ - Inside source: true *** True Line Result grid.target ||= [11, 13] ** Processing line: ~ grid.walls ||= {~ - Inside source: true *** True Line Result grid.walls ||= { ** Processing line: ~ [2, 2] => true,~ - Inside source: true *** True Line Result [2, 2] => true, ** Processing line: ~ [3, 2] => true,~ - Inside source: true *** True Line Result [3, 2] => true, ** Processing line: ~ [4, 2] => true,~ - Inside source: true *** True Line Result [4, 2] => true, ** Processing line: ~ [5, 2] => true,~ - Inside source: true *** True Line Result [5, 2] => true, ** Processing line: ~ [6, 2] => true,~ - Inside source: true *** True Line Result [6, 2] => true, ** Processing line: ~ [7, 2] => true,~ - Inside source: true *** True Line Result [7, 2] => true, ** Processing line: ~ [8, 2] => true,~ - Inside source: true *** True Line Result [8, 2] => true, ** Processing line: ~ [9, 2] => true,~ - Inside source: true *** True Line Result [9, 2] => true, ** Processing line: ~ [10, 2] => true,~ - Inside source: true *** True Line Result [10, 2] => true, ** Processing line: ~ [11, 2] => true,~ - Inside source: true *** True Line Result [11, 2] => true, ** Processing line: ~ [12, 2] => true,~ - Inside source: true *** True Line Result [12, 2] => true, ** Processing line: ~ [12, 3] => true,~ - Inside source: true *** True Line Result [12, 3] => true, ** Processing line: ~ [12, 4] => true,~ - Inside source: true *** True Line Result [12, 4] => true, ** Processing line: ~ [12, 5] => true,~ - Inside source: true *** True Line Result [12, 5] => true, ** Processing line: ~ [12, 6] => true,~ - Inside source: true *** True Line Result [12, 6] => true, ** Processing line: ~ [12, 7] => true,~ - Inside source: true *** True Line Result [12, 7] => true, ** Processing line: ~ [12, 8] => true,~ - Inside source: true *** True Line Result [12, 8] => true, ** Processing line: ~ [12, 9] => true,~ - Inside source: true *** True Line Result [12, 9] => true, ** Processing line: ~ [12, 10] => true,~ - Inside source: true *** True Line Result [12, 10] => true, ** Processing line: ~ [12, 11] => true,~ - Inside source: true *** True Line Result [12, 11] => true, ** Processing line: ~ [12, 12] => true,~ - Inside source: true *** True Line Result [12, 12] => true, ** Processing line: ~ [5, 12] => true,~ - Inside source: true *** True Line Result [5, 12] => true, ** Processing line: ~ [6, 12] => true,~ - Inside source: true *** True Line Result [6, 12] => true, ** Processing line: ~ [7, 12] => true,~ - Inside source: true *** True Line Result [7, 12] => true, ** Processing line: ~ [8, 12] => true,~ - Inside source: true *** True Line Result [8, 12] => true, ** Processing line: ~ [9, 12] => true,~ - Inside source: true *** True Line Result [9, 12] => true, ** Processing line: ~ [10, 12] => true,~ - Inside source: true *** True Line Result [10, 12] => true, ** Processing line: ~ [11, 12] => true,~ - Inside source: true *** True Line Result [11, 12] => true, ** Processing line: ~ [12, 12] => true~ - Inside source: true *** True Line Result [12, 12] => true ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # What the user is currently editing on the grid~ - Inside source: true *** True Line Result # What the user is currently editing on the grid ** Processing line: ~ # We store this value, because we want to remember the value even when~ - Inside source: true *** True Line Result # We store this value, because we want to remember the value even when ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ - Inside source: true *** True Line Result # the user's cursor is no longer over what they're interacting with, but ** Processing line: ~ # they are still clicking down on the mouse.~ - Inside source: true *** True Line Result # they are still clicking down on the mouse. ** Processing line: ~ state.user_input ||= :none~ - Inside source: true *** True Line Result state.user_input ||= :none ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # These variables allow the breadth first search to take place~ - Inside source: true *** True Line Result # These variables allow the breadth first search to take place ** Processing line: ~ # Came_from is a hash with a key of a cell and a value of the cell that was expanded from to find the key.~ - Inside source: true *** True Line Result # Came_from is a hash with a key of a cell and a value of the cell that was expanded from to find the key. ** Processing line: ~ # Used to prevent searching cells that have already been found~ - Inside source: true *** True Line Result # Used to prevent searching cells that have already been found ** Processing line: ~ # and to trace a path from the target back to the starting point.~ - Inside source: true *** True Line Result # and to trace a path from the target back to the starting point. ** Processing line: ~ # Frontier is an array of cells to expand the search from.~ - Inside source: true *** True Line Result # Frontier is an array of cells to expand the search from. ** Processing line: ~ # The search is over when there are no more cells to search from.~ - Inside source: true *** True Line Result # The search is over when there are no more cells to search from. ** Processing line: ~ # Path stores the path from the target to the star, once the target has been found~ - Inside source: true *** True Line Result # Path stores the path from the target to the star, once the target has been found ** Processing line: ~ # It prevents calculating the path every tick.~ - Inside source: true *** True Line Result # It prevents calculating the path every tick. ** Processing line: ~ dijkstra.came_from ||= {}~ - Inside source: true *** True Line Result dijkstra.came_from ||= {} ** Processing line: ~ dijkstra.cost_so_far ||= {}~ - Inside source: true *** True Line Result dijkstra.cost_so_far ||= {} ** Processing line: ~ dijkstra.frontier ||= []~ - Inside source: true *** True Line Result dijkstra.frontier ||= [] ** Processing line: ~ dijkstra.path ||= []~ - Inside source: true *** True Line Result dijkstra.path ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ greedy.came_from ||= {}~ - Inside source: true *** True Line Result greedy.came_from ||= {} ** Processing line: ~ greedy.frontier ||= []~ - Inside source: true *** True Line Result greedy.frontier ||= [] ** Processing line: ~ greedy.path ||= []~ - Inside source: true *** True Line Result greedy.path ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ a_star.frontier ||= []~ - Inside source: true *** True Line Result a_star.frontier ||= [] ** Processing line: ~ a_star.came_from ||= {}~ - Inside source: true *** True Line Result a_star.came_from ||= {} ** Processing line: ~ a_star.path ||= []~ - Inside source: true *** True Line Result a_star.path ||= [] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # All methods with render draw stuff on the screen~ - Inside source: true *** True Line Result # All methods with render draw stuff on the screen ** Processing line: ~ # UI has buttons, the slider, and labels~ - Inside source: true *** True Line Result # UI has buttons, the slider, and labels ** Processing line: ~ # The search specific rendering occurs in the respective methods~ - Inside source: true *** True Line Result # The search specific rendering occurs in the respective methods ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ render_labels~ - Inside source: true *** True Line Result render_labels ** Processing line: ~ render_dijkstra~ - Inside source: true *** True Line Result render_dijkstra ** Processing line: ~ render_greedy~ - Inside source: true *** True Line Result render_greedy ** Processing line: ~ render_a_star~ - Inside source: true *** True Line Result render_a_star ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_labels~ - Inside source: true *** True Line Result def render_labels ** Processing line: ~ outputs.labels << [150, 450, "Dijkstra's"]~ - Inside source: true *** True Line Result outputs.labels << [150, 450, "Dijkstra's"] ** Processing line: ~ outputs.labels << [550, 450, "Greedy Best-First"]~ - Inside source: true *** True Line Result outputs.labels << [550, 450, "Greedy Best-First"] ** Processing line: ~ outputs.labels << [1025, 450, "A* Search"]~ - Inside source: true *** True Line Result outputs.labels << [1025, 450, "A* Search"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_dijkstra~ - Inside source: true *** True Line Result def render_dijkstra ** Processing line: ~ render_dijkstra_grid~ - Inside source: true *** True Line Result render_dijkstra_grid ** Processing line: ~ render_dijkstra_star~ - Inside source: true *** True Line Result render_dijkstra_star ** Processing line: ~ render_dijkstra_target~ - Inside source: true *** True Line Result render_dijkstra_target ** Processing line: ~ render_dijkstra_visited~ - Inside source: true *** True Line Result render_dijkstra_visited ** Processing line: ~ render_dijkstra_walls~ - Inside source: true *** True Line Result render_dijkstra_walls ** Processing line: ~ render_dijkstra_path~ - Inside source: true *** True Line Result render_dijkstra_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_greedy~ - Inside source: true *** True Line Result def render_greedy ** Processing line: ~ render_greedy_grid~ - Inside source: true *** True Line Result render_greedy_grid ** Processing line: ~ render_greedy_star~ - Inside source: true *** True Line Result render_greedy_star ** Processing line: ~ render_greedy_target~ - Inside source: true *** True Line Result render_greedy_target ** Processing line: ~ render_greedy_visited~ - Inside source: true *** True Line Result render_greedy_visited ** Processing line: ~ render_greedy_walls~ - Inside source: true *** True Line Result render_greedy_walls ** Processing line: ~ render_greedy_path~ - Inside source: true *** True Line Result render_greedy_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_a_star~ - Inside source: true *** True Line Result def render_a_star ** Processing line: ~ render_a_star_grid~ - Inside source: true *** True Line Result render_a_star_grid ** Processing line: ~ render_a_star_star~ - Inside source: true *** True Line Result render_a_star_star ** Processing line: ~ render_a_star_target~ - Inside source: true *** True Line Result render_a_star_target ** Processing line: ~ render_a_star_visited~ - Inside source: true *** True Line Result render_a_star_visited ** Processing line: ~ render_a_star_walls~ - Inside source: true *** True Line Result render_a_star_walls ** Processing line: ~ render_a_star_path~ - Inside source: true *** True Line Result render_a_star_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This method handles user input every tick~ - Inside source: true *** True Line Result # This method handles user input every tick ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ # If the mouse was lifted this tick~ - Inside source: true *** True Line Result # If the mouse was lifted this tick ** Processing line: ~ if inputs.mouse.up~ - Inside source: true *** True Line Result if inputs.mouse.up ** Processing line: ~ # Set current input to none~ - Inside source: true *** True Line Result # Set current input to none ** Processing line: ~ state.user_input = :none~ - Inside source: true *** True Line Result state.user_input = :none ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the mouse was clicked this tick~ - Inside source: true *** True Line Result # If the mouse was clicked this tick ** Processing line: ~ if inputs.mouse.down~ - Inside source: true *** True Line Result if inputs.mouse.down ** Processing line: ~ # Determine what the user is editing and appropriately edit the state.user_input variable~ - Inside source: true *** True Line Result # Determine what the user is editing and appropriately edit the state.user_input variable ** Processing line: ~ determine_input~ - Inside source: true *** True Line Result determine_input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Process user input based on user_input variable and current mouse position~ - Inside source: true *** True Line Result # Process user input based on user_input variable and current mouse position ** Processing line: ~ process_input~ - Inside source: true *** True Line Result process_input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Determines what the user is editing~ - Inside source: true *** True Line Result # Determines what the user is editing ** Processing line: ~ # This method is called when the mouse is clicked down~ - Inside source: true *** True Line Result # This method is called when the mouse is clicked down ** Processing line: ~ def determine_input~ - Inside source: true *** True Line Result def determine_input ** Processing line: ~ # If the mouse is over the star in the first grid~ - Inside source: true *** True Line Result # If the mouse is over the star in the first grid ** Processing line: ~ if dijkstra_mouse_over_star?~ - Inside source: true *** True Line Result if dijkstra_mouse_over_star? ** Processing line: ~ # The user is editing the star from the first grid~ - Inside source: true *** True Line Result # The user is editing the star from the first grid ** Processing line: ~ state.user_input = :dijkstra_star~ - Inside source: true *** True Line Result state.user_input = :dijkstra_star ** Processing line: ~ # If the mouse is over the star in the second grid~ - Inside source: true *** True Line Result # If the mouse is over the star in the second grid ** Processing line: ~ elsif greedy_mouse_over_star?~ - Inside source: true *** True Line Result elsif greedy_mouse_over_star? ** Processing line: ~ # The user is editing the star from the second grid~ - Inside source: true *** True Line Result # The user is editing the star from the second grid ** Processing line: ~ state.user_input = :greedy_star~ - Inside source: true *** True Line Result state.user_input = :greedy_star ** Processing line: ~ # If the mouse is over the star in the third grid~ - Inside source: true *** True Line Result # If the mouse is over the star in the third grid ** Processing line: ~ elsif a_star_mouse_over_star?~ - Inside source: true *** True Line Result elsif a_star_mouse_over_star? ** Processing line: ~ # The user is editing the star from the third grid~ - Inside source: true *** True Line Result # The user is editing the star from the third grid ** Processing line: ~ state.user_input = :a_star_star~ - Inside source: true *** True Line Result state.user_input = :a_star_star ** Processing line: ~ # If the mouse is over the target in the first grid~ - Inside source: true *** True Line Result # If the mouse is over the target in the first grid ** Processing line: ~ elsif dijkstra_mouse_over_target?~ - Inside source: true *** True Line Result elsif dijkstra_mouse_over_target? ** Processing line: ~ # The user is editing the target from the first grid~ - Inside source: true *** True Line Result # The user is editing the target from the first grid ** Processing line: ~ state.user_input = :dijkstra_target~ - Inside source: true *** True Line Result state.user_input = :dijkstra_target ** Processing line: ~ # If the mouse is over the target in the second grid~ - Inside source: true *** True Line Result # If the mouse is over the target in the second grid ** Processing line: ~ elsif greedy_mouse_over_target?~ - Inside source: true *** True Line Result elsif greedy_mouse_over_target? ** Processing line: ~ # The user is editing the target from the second grid~ - Inside source: true *** True Line Result # The user is editing the target from the second grid ** Processing line: ~ state.user_input = :greedy_target~ - Inside source: true *** True Line Result state.user_input = :greedy_target ** Processing line: ~ # If the mouse is over the target in the third grid~ - Inside source: true *** True Line Result # If the mouse is over the target in the third grid ** Processing line: ~ elsif a_star_mouse_over_target?~ - Inside source: true *** True Line Result elsif a_star_mouse_over_target? ** Processing line: ~ # The user is editing the target from the third grid~ - Inside source: true *** True Line Result # The user is editing the target from the third grid ** Processing line: ~ state.user_input = :a_star_target~ - Inside source: true *** True Line Result state.user_input = :a_star_target ** Processing line: ~ # If the mouse is over a wall in the first grid~ - Inside source: true *** True Line Result # If the mouse is over a wall in the first grid ** Processing line: ~ elsif dijkstra_mouse_over_wall?~ - Inside source: true *** True Line Result elsif dijkstra_mouse_over_wall? ** Processing line: ~ # The user is removing a wall from the first grid~ - Inside source: true *** True Line Result # The user is removing a wall from the first grid ** Processing line: ~ state.user_input = :dijkstra_remove_wall~ - Inside source: true *** True Line Result state.user_input = :dijkstra_remove_wall ** Processing line: ~ # If the mouse is over a wall in the second grid~ - Inside source: true *** True Line Result # If the mouse is over a wall in the second grid ** Processing line: ~ elsif greedy_mouse_over_wall?~ - Inside source: true *** True Line Result elsif greedy_mouse_over_wall? ** Processing line: ~ # The user is removing a wall from the second grid~ - Inside source: true *** True Line Result # The user is removing a wall from the second grid ** Processing line: ~ state.user_input = :greedy_remove_wall~ - Inside source: true *** True Line Result state.user_input = :greedy_remove_wall ** Processing line: ~ # If the mouse is over a wall in the third grid~ - Inside source: true *** True Line Result # If the mouse is over a wall in the third grid ** Processing line: ~ elsif a_star_mouse_over_wall?~ - Inside source: true *** True Line Result elsif a_star_mouse_over_wall? ** Processing line: ~ # The user is removing a wall from the third grid~ - Inside source: true *** True Line Result # The user is removing a wall from the third grid ** Processing line: ~ state.user_input = :a_star_remove_wall~ - Inside source: true *** True Line Result state.user_input = :a_star_remove_wall ** Processing line: ~ # If the mouse is over the first grid~ - Inside source: true *** True Line Result # If the mouse is over the first grid ** Processing line: ~ elsif dijkstra_mouse_over_grid?~ - Inside source: true *** True Line Result elsif dijkstra_mouse_over_grid? ** Processing line: ~ # The user is adding a wall from the first grid~ - Inside source: true *** True Line Result # The user is adding a wall from the first grid ** Processing line: ~ state.user_input = :dijkstra_add_wall~ - Inside source: true *** True Line Result state.user_input = :dijkstra_add_wall ** Processing line: ~ # If the mouse is over the second grid~ - Inside source: true *** True Line Result # If the mouse is over the second grid ** Processing line: ~ elsif greedy_mouse_over_grid?~ - Inside source: true *** True Line Result elsif greedy_mouse_over_grid? ** Processing line: ~ # The user is adding a wall from the second grid~ - Inside source: true *** True Line Result # The user is adding a wall from the second grid ** Processing line: ~ state.user_input = :greedy_add_wall~ - Inside source: true *** True Line Result state.user_input = :greedy_add_wall ** Processing line: ~ # If the mouse is over the third grid~ - Inside source: true *** True Line Result # If the mouse is over the third grid ** Processing line: ~ elsif a_star_mouse_over_grid?~ - Inside source: true *** True Line Result elsif a_star_mouse_over_grid? ** Processing line: ~ # The user is adding a wall from the third grid~ - Inside source: true *** True Line Result # The user is adding a wall from the third grid ** Processing line: ~ state.user_input = :a_star_add_wall~ - Inside source: true *** True Line Result state.user_input = :a_star_add_wall ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Processes click and drag based on what the user is currently dragging~ - Inside source: true *** True Line Result # Processes click and drag based on what the user is currently dragging ** Processing line: ~ def process_input~ - Inside source: true *** True Line Result def process_input ** Processing line: ~ if state.user_input == :dijkstra_star~ - Inside source: true *** True Line Result if state.user_input == :dijkstra_star ** Processing line: ~ process_input_dijkstra_star~ - Inside source: true *** True Line Result process_input_dijkstra_star ** Processing line: ~ elsif state.user_input == :greedy_star~ - Inside source: true *** True Line Result elsif state.user_input == :greedy_star ** Processing line: ~ process_input_greedy_star~ - Inside source: true *** True Line Result process_input_greedy_star ** Processing line: ~ elsif state.user_input == :a_star_star~ - Inside source: true *** True Line Result elsif state.user_input == :a_star_star ** Processing line: ~ process_input_a_star_star~ - Inside source: true *** True Line Result process_input_a_star_star ** Processing line: ~ elsif state.user_input == :dijkstra_target~ - Inside source: true *** True Line Result elsif state.user_input == :dijkstra_target ** Processing line: ~ process_input_dijkstra_target~ - Inside source: true *** True Line Result process_input_dijkstra_target ** Processing line: ~ elsif state.user_input == :greedy_target~ - Inside source: true *** True Line Result elsif state.user_input == :greedy_target ** Processing line: ~ process_input_greedy_target~ - Inside source: true *** True Line Result process_input_greedy_target ** Processing line: ~ elsif state.user_input == :a_star_target~ - Inside source: true *** True Line Result elsif state.user_input == :a_star_target ** Processing line: ~ process_input_a_star_target~ - Inside source: true *** True Line Result process_input_a_star_target ** Processing line: ~ elsif state.user_input == :dijkstra_remove_wall~ - Inside source: true *** True Line Result elsif state.user_input == :dijkstra_remove_wall ** Processing line: ~ process_input_dijkstra_remove_wall~ - Inside source: true *** True Line Result process_input_dijkstra_remove_wall ** Processing line: ~ elsif state.user_input == :greedy_remove_wall~ - Inside source: true *** True Line Result elsif state.user_input == :greedy_remove_wall ** Processing line: ~ process_input_greedy_remove_wall~ - Inside source: true *** True Line Result process_input_greedy_remove_wall ** Processing line: ~ elsif state.user_input == :a_star_remove_wall~ - Inside source: true *** True Line Result elsif state.user_input == :a_star_remove_wall ** Processing line: ~ process_input_a_star_remove_wall~ - Inside source: true *** True Line Result process_input_a_star_remove_wall ** Processing line: ~ elsif state.user_input == :dijkstra_add_wall~ - Inside source: true *** True Line Result elsif state.user_input == :dijkstra_add_wall ** Processing line: ~ process_input_dijkstra_add_wall~ - Inside source: true *** True Line Result process_input_dijkstra_add_wall ** Processing line: ~ elsif state.user_input == :greedy_add_wall~ - Inside source: true *** True Line Result elsif state.user_input == :greedy_add_wall ** Processing line: ~ process_input_greedy_add_wall~ - Inside source: true *** True Line Result process_input_greedy_add_wall ** Processing line: ~ elsif state.user_input == :a_star_add_wall~ - Inside source: true *** True Line Result elsif state.user_input == :a_star_add_wall ** Processing line: ~ process_input_a_star_add_wall~ - Inside source: true *** True Line Result process_input_a_star_add_wall ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_dijkstra_grid~ - Inside source: true *** True Line Result def render_dijkstra_grid ** Processing line: ~ # A large rect the size of the grid~ - Inside source: true *** True Line Result # A large rect the size of the grid ** Processing line: ~ outputs.solids << [dijkstra_scale_up(grid.rect), default_color]~ - Inside source: true *** True Line Result outputs.solids << [dijkstra_scale_up(grid.rect), default_color] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The vertical grid lines~ - Inside source: true *** True Line Result # The vertical grid lines ** Processing line: ~ for x in 0..grid.width~ - Inside source: true *** True Line Result for x in 0..grid.width ** Processing line: ~ outputs.lines << dijkstra_vertical_line(x)~ - Inside source: true *** True Line Result outputs.lines << dijkstra_vertical_line(x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The horizontal grid lines~ - Inside source: true *** True Line Result # The horizontal grid lines ** Processing line: ~ for y in 0..grid.height~ - Inside source: true *** True Line Result for y in 0..grid.height ** Processing line: ~ outputs.lines << dijkstra_horizontal_line(y)~ - Inside source: true *** True Line Result outputs.lines << dijkstra_horizontal_line(y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_greedy_grid~ - Inside source: true *** True Line Result def render_greedy_grid ** Processing line: ~ # A large rect the size of the grid~ - Inside source: true *** True Line Result # A large rect the size of the grid ** Processing line: ~ outputs.solids << [greedy_scale_up(grid.rect), default_color]~ - Inside source: true *** True Line Result outputs.solids << [greedy_scale_up(grid.rect), default_color] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The vertical grid lines~ - Inside source: true *** True Line Result # The vertical grid lines ** Processing line: ~ for x in 0..grid.width~ - Inside source: true *** True Line Result for x in 0..grid.width ** Processing line: ~ outputs.lines << greedy_vertical_line(x)~ - Inside source: true *** True Line Result outputs.lines << greedy_vertical_line(x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The horizontal grid lines~ - Inside source: true *** True Line Result # The horizontal grid lines ** Processing line: ~ for y in 0..grid.height~ - Inside source: true *** True Line Result for y in 0..grid.height ** Processing line: ~ outputs.lines << greedy_horizontal_line(y)~ - Inside source: true *** True Line Result outputs.lines << greedy_horizontal_line(y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_a_star_grid~ - Inside source: true *** True Line Result def render_a_star_grid ** Processing line: ~ # A large rect the size of the grid~ - Inside source: true *** True Line Result # A large rect the size of the grid ** Processing line: ~ outputs.solids << [a_star_scale_up(grid.rect), default_color]~ - Inside source: true *** True Line Result outputs.solids << [a_star_scale_up(grid.rect), default_color] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The vertical grid lines~ - Inside source: true *** True Line Result # The vertical grid lines ** Processing line: ~ for x in 0..grid.width~ - Inside source: true *** True Line Result for x in 0..grid.width ** Processing line: ~ outputs.lines << a_star_vertical_line(x)~ - Inside source: true *** True Line Result outputs.lines << a_star_vertical_line(x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The horizontal grid lines~ - Inside source: true *** True Line Result # The horizontal grid lines ** Processing line: ~ for y in 0..grid.height~ - Inside source: true *** True Line Result for y in 0..grid.height ** Processing line: ~ outputs.lines << a_star_horizontal_line(y)~ - Inside source: true *** True Line Result outputs.lines << a_star_horizontal_line(y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a vertical line for a column of the first grid~ - Inside source: true *** True Line Result # Returns a vertical line for a column of the first grid ** Processing line: ~ def dijkstra_vertical_line column~ - Inside source: true *** True Line Result def dijkstra_vertical_line column ** Processing line: ~ dijkstra_scale_up([column, 0, column, grid.height])~ - Inside source: true *** True Line Result dijkstra_scale_up([column, 0, column, grid.height]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a horizontal line for a column of the first grid~ - Inside source: true *** True Line Result # Returns a horizontal line for a column of the first grid ** Processing line: ~ def dijkstra_horizontal_line row~ - Inside source: true *** True Line Result def dijkstra_horizontal_line row ** Processing line: ~ dijkstra_scale_up([0, row, grid.width, row])~ - Inside source: true *** True Line Result dijkstra_scale_up([0, row, grid.width, row]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a vertical line for a column of the second grid~ - Inside source: true *** True Line Result # Returns a vertical line for a column of the second grid ** Processing line: ~ def greedy_vertical_line column~ - Inside source: true *** True Line Result def greedy_vertical_line column ** Processing line: ~ dijkstra_scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height])~ - Inside source: true *** True Line Result dijkstra_scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a horizontal line for a column of the second grid~ - Inside source: true *** True Line Result # Returns a horizontal line for a column of the second grid ** Processing line: ~ def greedy_horizontal_line row~ - Inside source: true *** True Line Result def greedy_horizontal_line row ** Processing line: ~ dijkstra_scale_up([grid.width + 1, row, grid.width + grid.width + 1, row])~ - Inside source: true *** True Line Result dijkstra_scale_up([grid.width + 1, row, grid.width + grid.width + 1, row]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a vertical line for a column of the third grid~ - Inside source: true *** True Line Result # Returns a vertical line for a column of the third grid ** Processing line: ~ def a_star_vertical_line column~ - Inside source: true *** True Line Result def a_star_vertical_line column ** Processing line: ~ dijkstra_scale_up([column + (grid.width * 2) + 2, 0, column + (grid.width * 2) + 2, grid.height])~ - Inside source: true *** True Line Result dijkstra_scale_up([column + (grid.width * 2) + 2, 0, column + (grid.width * 2) + 2, grid.height]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a horizontal line for a column of the third grid~ - Inside source: true *** True Line Result # Returns a horizontal line for a column of the third grid ** Processing line: ~ def a_star_horizontal_line row~ - Inside source: true *** True Line Result def a_star_horizontal_line row ** Processing line: ~ dijkstra_scale_up([(grid.width * 2) + 2, row, (grid.width * 2) + grid.width + 2, row])~ - Inside source: true *** True Line Result dijkstra_scale_up([(grid.width * 2) + 2, row, (grid.width * 2) + grid.width + 2, row]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the star on the first grid~ - Inside source: true *** True Line Result # Renders the star on the first grid ** Processing line: ~ def render_dijkstra_star~ - Inside source: true *** True Line Result def render_dijkstra_star ** Processing line: ~ outputs.sprites << [dijkstra_scale_up(grid.star), 'star.png']~ - Inside source: true *** True Line Result outputs.sprites << [dijkstra_scale_up(grid.star), 'star.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the star on the second grid~ - Inside source: true *** True Line Result # Renders the star on the second grid ** Processing line: ~ def render_greedy_star~ - Inside source: true *** True Line Result def render_greedy_star ** Processing line: ~ outputs.sprites << [greedy_scale_up(grid.star), 'star.png']~ - Inside source: true *** True Line Result outputs.sprites << [greedy_scale_up(grid.star), 'star.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the star on the third grid~ - Inside source: true *** True Line Result # Renders the star on the third grid ** Processing line: ~ def render_a_star_star~ - Inside source: true *** True Line Result def render_a_star_star ** Processing line: ~ outputs.sprites << [a_star_scale_up(grid.star), 'star.png']~ - Inside source: true *** True Line Result outputs.sprites << [a_star_scale_up(grid.star), 'star.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the target on the first grid~ - Inside source: true *** True Line Result # Renders the target on the first grid ** Processing line: ~ def render_dijkstra_target~ - Inside source: true *** True Line Result def render_dijkstra_target ** Processing line: ~ outputs.sprites << [dijkstra_scale_up(grid.target), 'target.png']~ - Inside source: true *** True Line Result outputs.sprites << [dijkstra_scale_up(grid.target), 'target.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the target on the second grid~ - Inside source: true *** True Line Result # Renders the target on the second grid ** Processing line: ~ def render_greedy_target~ - Inside source: true *** True Line Result def render_greedy_target ** Processing line: ~ outputs.sprites << [greedy_scale_up(grid.target), 'target.png']~ - Inside source: true *** True Line Result outputs.sprites << [greedy_scale_up(grid.target), 'target.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the target on the third grid~ - Inside source: true *** True Line Result # Renders the target on the third grid ** Processing line: ~ def render_a_star_target~ - Inside source: true *** True Line Result def render_a_star_target ** Processing line: ~ outputs.sprites << [a_star_scale_up(grid.target), 'target.png']~ - Inside source: true *** True Line Result outputs.sprites << [a_star_scale_up(grid.target), 'target.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the walls on the first grid~ - Inside source: true *** True Line Result # Renders the walls on the first grid ** Processing line: ~ def render_dijkstra_walls~ - Inside source: true *** True Line Result def render_dijkstra_walls ** Processing line: ~ grid.walls.each_key do | wall |~ - Inside source: true *** True Line Result grid.walls.each_key do | wall | ** Processing line: ~ outputs.solids << [dijkstra_scale_up(wall), wall_color]~ - Inside source: true *** True Line Result outputs.solids << [dijkstra_scale_up(wall), wall_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the walls on the second grid~ - Inside source: true *** True Line Result # Renders the walls on the second grid ** Processing line: ~ def render_greedy_walls~ - Inside source: true *** True Line Result def render_greedy_walls ** Processing line: ~ grid.walls.each_key do | wall |~ - Inside source: true *** True Line Result grid.walls.each_key do | wall | ** Processing line: ~ outputs.solids << [greedy_scale_up(wall), wall_color]~ - Inside source: true *** True Line Result outputs.solids << [greedy_scale_up(wall), wall_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the walls on the third grid~ - Inside source: true *** True Line Result # Renders the walls on the third grid ** Processing line: ~ def render_a_star_walls~ - Inside source: true *** True Line Result def render_a_star_walls ** Processing line: ~ grid.walls.each_key do | wall |~ - Inside source: true *** True Line Result grid.walls.each_key do | wall | ** Processing line: ~ outputs.solids << [a_star_scale_up(wall), wall_color]~ - Inside source: true *** True Line Result outputs.solids << [a_star_scale_up(wall), wall_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the visited cells on the first grid~ - Inside source: true *** True Line Result # Renders the visited cells on the first grid ** Processing line: ~ def render_dijkstra_visited~ - Inside source: true *** True Line Result def render_dijkstra_visited ** Processing line: ~ dijkstra.came_from.each_key do | visited_cell |~ - Inside source: true *** True Line Result dijkstra.came_from.each_key do | visited_cell | ** Processing line: ~ outputs.solids << [dijkstra_scale_up(visited_cell), visited_color]~ - Inside source: true *** True Line Result outputs.solids << [dijkstra_scale_up(visited_cell), visited_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the visited cells on the second grid~ - Inside source: true *** True Line Result # Renders the visited cells on the second grid ** Processing line: ~ def render_greedy_visited~ - Inside source: true *** True Line Result def render_greedy_visited ** Processing line: ~ greedy.came_from.each_key do | visited_cell |~ - Inside source: true *** True Line Result greedy.came_from.each_key do | visited_cell | ** Processing line: ~ outputs.solids << [greedy_scale_up(visited_cell), visited_color]~ - Inside source: true *** True Line Result outputs.solids << [greedy_scale_up(visited_cell), visited_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the visited cells on the third grid~ - Inside source: true *** True Line Result # Renders the visited cells on the third grid ** Processing line: ~ def render_a_star_visited~ - Inside source: true *** True Line Result def render_a_star_visited ** Processing line: ~ a_star.came_from.each_key do | visited_cell |~ - Inside source: true *** True Line Result a_star.came_from.each_key do | visited_cell | ** Processing line: ~ outputs.solids << [a_star_scale_up(visited_cell), visited_color]~ - Inside source: true *** True Line Result outputs.solids << [a_star_scale_up(visited_cell), visited_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the path found by the breadth first search on the first grid~ - Inside source: true *** True Line Result # Renders the path found by the breadth first search on the first grid ** Processing line: ~ def render_dijkstra_path~ - Inside source: true *** True Line Result def render_dijkstra_path ** Processing line: ~ dijkstra.path.each do | path |~ - Inside source: true *** True Line Result dijkstra.path.each do | path | ** Processing line: ~ outputs.solids << [dijkstra_scale_up(path), path_color]~ - Inside source: true *** True Line Result outputs.solids << [dijkstra_scale_up(path), path_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the path found by the greedy search on the second grid~ - Inside source: true *** True Line Result # Renders the path found by the greedy search on the second grid ** Processing line: ~ def render_greedy_path~ - Inside source: true *** True Line Result def render_greedy_path ** Processing line: ~ greedy.path.each do | path |~ - Inside source: true *** True Line Result greedy.path.each do | path | ** Processing line: ~ outputs.solids << [greedy_scale_up(path), path_color]~ - Inside source: true *** True Line Result outputs.solids << [greedy_scale_up(path), path_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Renders the path found by the a_star search on the third grid~ - Inside source: true *** True Line Result # Renders the path found by the a_star search on the third grid ** Processing line: ~ def render_a_star_path~ - Inside source: true *** True Line Result def render_a_star_path ** Processing line: ~ a_star.path.each do | path |~ - Inside source: true *** True Line Result a_star.path.each do | path | ** Processing line: ~ outputs.solids << [a_star_scale_up(path), path_color]~ - Inside source: true *** True Line Result outputs.solids << [a_star_scale_up(path), path_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the rect for the path between two cells based on their relative positions~ - Inside source: true *** True Line Result # Returns the rect for the path between two cells based on their relative positions ** Processing line: ~ def get_path_between(cell_one, cell_two)~ - Inside source: true *** True Line Result def get_path_between(cell_one, cell_two) ** Processing line: ~ path = []~ - Inside source: true *** True Line Result path = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If cell one is above cell two~ - Inside source: true *** True Line Result # If cell one is above cell two ** Processing line: ~ if cell_one.x == cell_two.x and cell_one.y > cell_two.y~ - Inside source: true *** True Line Result if cell_one.x == cell_two.x and cell_one.y > cell_two.y ** Processing line: ~ # Path starts from the center of cell two and moves upward to the center of cell one~ - Inside source: true *** True Line Result # Path starts from the center of cell two and moves upward to the center of cell one ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 0.4, 1.4]~ - Inside source: true *** True Line Result path = [cell_two.x + 0.3, cell_two.y + 0.3, 0.4, 1.4] ** Processing line: ~ # If cell one is below cell two~ - Inside source: true *** True Line Result # If cell one is below cell two ** Processing line: ~ elsif cell_one.x == cell_two.x and cell_one.y < cell_two.y~ - Inside source: true *** True Line Result elsif cell_one.x == cell_two.x and cell_one.y < cell_two.y ** Processing line: ~ # Path starts from the center of cell one and moves upward to the center of cell two~ - Inside source: true *** True Line Result # Path starts from the center of cell one and moves upward to the center of cell two ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 0.4, 1.4]~ - Inside source: true *** True Line Result path = [cell_one.x + 0.3, cell_one.y + 0.3, 0.4, 1.4] ** Processing line: ~ # If cell one is to the left of cell two~ - Inside source: true *** True Line Result # If cell one is to the left of cell two ** Processing line: ~ elsif cell_one.x > cell_two.x and cell_one.y == cell_two.y~ - Inside source: true *** True Line Result elsif cell_one.x > cell_two.x and cell_one.y == cell_two.y ** Processing line: ~ # Path starts from the center of cell two and moves rightward to the center of cell one~ - Inside source: true *** True Line Result # Path starts from the center of cell two and moves rightward to the center of cell one ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 1.4, 0.4]~ - Inside source: true *** True Line Result path = [cell_two.x + 0.3, cell_two.y + 0.3, 1.4, 0.4] ** Processing line: ~ # If cell one is to the right of cell two~ - Inside source: true *** True Line Result # If cell one is to the right of cell two ** Processing line: ~ elsif cell_one.x < cell_two.x and cell_one.y == cell_two.y~ - Inside source: true *** True Line Result elsif cell_one.x < cell_two.x and cell_one.y == cell_two.y ** Processing line: ~ # Path starts from the center of cell one and moves rightward to the center of cell two~ - Inside source: true *** True Line Result # Path starts from the center of cell one and moves rightward to the center of cell two ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 1.4, 0.4]~ - Inside source: true *** True Line Result path = [cell_one.x + 0.3, cell_one.y + 0.3, 1.4, 0.4] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ path~ - Inside source: true *** True Line Result path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # In code, the cells are represented as 1x1 rectangles~ - Inside source: true *** True Line Result # In code, the cells are represented as 1x1 rectangles ** Processing line: ~ # When drawn, the cells are larger than 1x1 rectangles~ - Inside source: true *** True Line Result # When drawn, the cells are larger than 1x1 rectangles ** Processing line: ~ # This method is used to scale up cells, and lines~ - Inside source: true *** True Line Result # This method is used to scale up cells, and lines ** Processing line: ~ # Objects are scaled up according to the grid.cell_size variable~ - Inside source: true *** True Line Result # Objects are scaled up according to the grid.cell_size variable ** Processing line: ~ # This allows for easy customization of the visual scale of the grid~ - Inside source: true *** True Line Result # This allows for easy customization of the visual scale of the grid ** Processing line: ~ # This method scales up cells for the first grid~ - Inside source: true *** True Line Result # This method scales up cells for the first grid ** Processing line: ~ def dijkstra_scale_up(cell)~ - Inside source: true *** True Line Result def dijkstra_scale_up(cell) ** Processing line: ~ # Prevents the original value of cell from being edited~ - Inside source: true *** True Line Result # Prevents the original value of cell from being edited ** Processing line: ~ cell = cell.clone~ - Inside source: true *** True Line Result cell = cell.clone ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If cell is just an x and y coordinate~ - Inside source: true *** True Line Result # If cell is just an x and y coordinate ** Processing line: ~ if cell.size == 2~ - Inside source: true *** True Line Result if cell.size == 2 ** Processing line: ~ # Add a width and height of 1~ - Inside source: true *** True Line Result # Add a width and height of 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ cell << 1~ - Inside source: true *** True Line Result cell << 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Scale all the values up~ - Inside source: true *** True Line Result # Scale all the values up ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ - Inside source: true *** True Line Result cell.map! { |value| value * grid.cell_size } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the scaled up cell~ - Inside source: true *** True Line Result # Returns the scaled up cell ** Processing line: ~ cell~ - Inside source: true *** True Line Result cell ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Translates the given cell grid.width + 1 to the right and then scales up~ - Inside source: true *** True Line Result # Translates the given cell grid.width + 1 to the right and then scales up ** Processing line: ~ # Used to draw cells for the second grid~ - Inside source: true *** True Line Result # Used to draw cells for the second grid ** Processing line: ~ # This method does not work for lines,~ - Inside source: true *** True Line Result # This method does not work for lines, ** Processing line: ~ # so separate methods exist for the grid lines~ - Inside source: true *** True Line Result # so separate methods exist for the grid lines ** Processing line: ~ def greedy_scale_up(cell)~ - Inside source: true *** True Line Result def greedy_scale_up(cell) ** Processing line: ~ # Prevents the original value of cell from being edited~ - Inside source: true *** True Line Result # Prevents the original value of cell from being edited ** Processing line: ~ cell = cell.clone~ - Inside source: true *** True Line Result cell = cell.clone ** Processing line: ~ # Translates the cell to the second grid equivalent~ - Inside source: true *** True Line Result # Translates the cell to the second grid equivalent ** Processing line: ~ cell.x += grid.width + 1~ - Inside source: true *** True Line Result cell.x += grid.width + 1 ** Processing line: ~ # Proceeds as if scaling up for the first grid~ - Inside source: true *** True Line Result # Proceeds as if scaling up for the first grid ** Processing line: ~ dijkstra_scale_up(cell)~ - Inside source: true *** True Line Result dijkstra_scale_up(cell) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Translates the given cell (grid.width + 1) * 2 to the right and then scales up~ - Inside source: true *** True Line Result # Translates the given cell (grid.width + 1) * 2 to the right and then scales up ** Processing line: ~ # Used to draw cells for the third grid~ - Inside source: true *** True Line Result # Used to draw cells for the third grid ** Processing line: ~ # This method does not work for lines,~ - Inside source: true *** True Line Result # This method does not work for lines, ** Processing line: ~ # so separate methods exist for the grid lines~ - Inside source: true *** True Line Result # so separate methods exist for the grid lines ** Processing line: ~ def a_star_scale_up(cell)~ - Inside source: true *** True Line Result def a_star_scale_up(cell) ** Processing line: ~ # Prevents the original value of cell from being edited~ - Inside source: true *** True Line Result # Prevents the original value of cell from being edited ** Processing line: ~ cell = cell.clone~ - Inside source: true *** True Line Result cell = cell.clone ** Processing line: ~ # Translates the cell to the second grid equivalent~ - Inside source: true *** True Line Result # Translates the cell to the second grid equivalent ** Processing line: ~ cell.x += grid.width + 1~ - Inside source: true *** True Line Result cell.x += grid.width + 1 ** Processing line: ~ # Translates the cell to the third grid equivalent~ - Inside source: true *** True Line Result # Translates the cell to the third grid equivalent ** Processing line: ~ cell.x += grid.width + 1~ - Inside source: true *** True Line Result cell.x += grid.width + 1 ** Processing line: ~ # Proceeds as if scaling up for the first grid~ - Inside source: true *** True Line Result # Proceeds as if scaling up for the first grid ** Processing line: ~ dijkstra_scale_up(cell)~ - Inside source: true *** True Line Result dijkstra_scale_up(cell) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the star from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the star from the first grid ** Processing line: ~ def dijkstra_mouse_over_star?~ - Inside source: true *** True Line Result def dijkstra_mouse_over_star? ** Processing line: ~ inputs.mouse.point.inside_rect?(dijkstra_scale_up(grid.star))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(dijkstra_scale_up(grid.star)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the star from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the star from the second grid ** Processing line: ~ def greedy_mouse_over_star?~ - Inside source: true *** True Line Result def greedy_mouse_over_star? ** Processing line: ~ inputs.mouse.point.inside_rect?(greedy_scale_up(grid.star))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(greedy_scale_up(grid.star)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the star from the third grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the star from the third grid ** Processing line: ~ def a_star_mouse_over_star?~ - Inside source: true *** True Line Result def a_star_mouse_over_star? ** Processing line: ~ inputs.mouse.point.inside_rect?(a_star_scale_up(grid.star))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(a_star_scale_up(grid.star)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the target from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the target from the first grid ** Processing line: ~ def dijkstra_mouse_over_target?~ - Inside source: true *** True Line Result def dijkstra_mouse_over_target? ** Processing line: ~ inputs.mouse.point.inside_rect?(dijkstra_scale_up(grid.target))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(dijkstra_scale_up(grid.target)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the target from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the target from the second grid ** Processing line: ~ def greedy_mouse_over_target?~ - Inside source: true *** True Line Result def greedy_mouse_over_target? ** Processing line: ~ inputs.mouse.point.inside_rect?(greedy_scale_up(grid.target))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(greedy_scale_up(grid.target)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be moving the target from the third grid~ - Inside source: true *** True Line Result # Signal that the user is going to be moving the target from the third grid ** Processing line: ~ def a_star_mouse_over_target?~ - Inside source: true *** True Line Result def a_star_mouse_over_target? ** Processing line: ~ inputs.mouse.point.inside_rect?(a_star_scale_up(grid.target))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(a_star_scale_up(grid.target)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing walls from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be removing walls from the first grid ** Processing line: ~ def dijkstra_mouse_over_wall?~ - Inside source: true *** True Line Result def dijkstra_mouse_over_wall? ** Processing line: ~ grid.walls.each_key do | wall |~ - Inside source: true *** True Line Result grid.walls.each_key do | wall | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(dijkstra_scale_up(wall))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(dijkstra_scale_up(wall)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing walls from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be removing walls from the second grid ** Processing line: ~ def greedy_mouse_over_wall?~ - Inside source: true *** True Line Result def greedy_mouse_over_wall? ** Processing line: ~ grid.walls.each_key do | wall |~ - Inside source: true *** True Line Result grid.walls.each_key do | wall | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(greedy_scale_up(wall))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(greedy_scale_up(wall)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be removing walls from the third grid~ - Inside source: true *** True Line Result # Signal that the user is going to be removing walls from the third grid ** Processing line: ~ def a_star_mouse_over_wall?~ - Inside source: true *** True Line Result def a_star_mouse_over_wall? ** Processing line: ~ grid.walls.each_key do | wall |~ - Inside source: true *** True Line Result grid.walls.each_key do | wall | ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(a_star_scale_up(wall))~ - Inside source: true *** True Line Result return true if inputs.mouse.point.inside_rect?(a_star_scale_up(wall)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be adding walls from the first grid~ - Inside source: true *** True Line Result # Signal that the user is going to be adding walls from the first grid ** Processing line: ~ def dijkstra_mouse_over_grid?~ - Inside source: true *** True Line Result def dijkstra_mouse_over_grid? ** Processing line: ~ inputs.mouse.point.inside_rect?(dijkstra_scale_up(grid.rect))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(dijkstra_scale_up(grid.rect)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be adding walls from the second grid~ - Inside source: true *** True Line Result # Signal that the user is going to be adding walls from the second grid ** Processing line: ~ def greedy_mouse_over_grid?~ - Inside source: true *** True Line Result def greedy_mouse_over_grid? ** Processing line: ~ inputs.mouse.point.inside_rect?(greedy_scale_up(grid.rect))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(greedy_scale_up(grid.rect)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Signal that the user is going to be adding walls from the third grid~ - Inside source: true *** True Line Result # Signal that the user is going to be adding walls from the third grid ** Processing line: ~ def a_star_mouse_over_grid?~ - Inside source: true *** True Line Result def a_star_mouse_over_grid? ** Processing line: ~ inputs.mouse.point.inside_rect?(a_star_scale_up(grid.rect))~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect?(a_star_scale_up(grid.rect)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the star to the cell closest to the mouse in the first grid~ - Inside source: true *** True Line Result # Moves the star to the cell closest to the mouse in the first grid ** Processing line: ~ # Only resets the search if the star changes position~ - Inside source: true *** True Line Result # Only resets the search if the star changes position ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ - Inside source: true *** True Line Result # Called whenever the user is editing the star (puts mouse down on star) ** Processing line: ~ def process_input_dijkstra_star~ - Inside source: true *** True Line Result def process_input_dijkstra_star ** Processing line: ~ old_star = grid.star.clone~ - Inside source: true *** True Line Result old_star = grid.star.clone ** Processing line: ~ unless dijkstra_cell_closest_to_mouse == grid.target~ - Inside source: true *** True Line Result unless dijkstra_cell_closest_to_mouse == grid.target ** Processing line: ~ grid.star = dijkstra_cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.star = dijkstra_cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_star == grid.star~ - Inside source: true *** True Line Result unless old_star == grid.star ** Processing line: ~ reset_searches~ - Inside source: true *** True Line Result reset_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the star to the cell closest to the mouse in the second grid~ - Inside source: true *** True Line Result # Moves the star to the cell closest to the mouse in the second grid ** Processing line: ~ # Only resets the search if the star changes position~ - Inside source: true *** True Line Result # Only resets the search if the star changes position ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ - Inside source: true *** True Line Result # Called whenever the user is editing the star (puts mouse down on star) ** Processing line: ~ def process_input_greedy_star~ - Inside source: true *** True Line Result def process_input_greedy_star ** Processing line: ~ old_star = grid.star.clone~ - Inside source: true *** True Line Result old_star = grid.star.clone ** Processing line: ~ unless greedy_cell_closest_to_mouse == grid.target~ - Inside source: true *** True Line Result unless greedy_cell_closest_to_mouse == grid.target ** Processing line: ~ grid.star = greedy_cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.star = greedy_cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_star == grid.star~ - Inside source: true *** True Line Result unless old_star == grid.star ** Processing line: ~ reset_searches~ - Inside source: true *** True Line Result reset_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the star to the cell closest to the mouse in the third grid~ - Inside source: true *** True Line Result # Moves the star to the cell closest to the mouse in the third grid ** Processing line: ~ # Only resets the search if the star changes position~ - Inside source: true *** True Line Result # Only resets the search if the star changes position ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ - Inside source: true *** True Line Result # Called whenever the user is editing the star (puts mouse down on star) ** Processing line: ~ def process_input_a_star_star~ - Inside source: true *** True Line Result def process_input_a_star_star ** Processing line: ~ old_star = grid.star.clone~ - Inside source: true *** True Line Result old_star = grid.star.clone ** Processing line: ~ unless a_star_cell_closest_to_mouse == grid.target~ - Inside source: true *** True Line Result unless a_star_cell_closest_to_mouse == grid.target ** Processing line: ~ grid.star = a_star_cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.star = a_star_cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_star == grid.star~ - Inside source: true *** True Line Result unless old_star == grid.star ** Processing line: ~ reset_searches~ - Inside source: true *** True Line Result reset_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the target to the grid closest to the mouse in the first grid~ - Inside source: true *** True Line Result # Moves the target to the grid closest to the mouse in the first grid ** Processing line: ~ # Only reset_searchess the search if the target changes position~ - Inside source: true *** True Line Result # Only reset_searchess the search if the target changes position ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ - Inside source: true *** True Line Result # Called whenever the user is editing the target (puts mouse down on target) ** Processing line: ~ def process_input_dijkstra_target~ - Inside source: true *** True Line Result def process_input_dijkstra_target ** Processing line: ~ old_target = grid.target.clone~ - Inside source: true *** True Line Result old_target = grid.target.clone ** Processing line: ~ unless dijkstra_cell_closest_to_mouse == grid.star~ - Inside source: true *** True Line Result unless dijkstra_cell_closest_to_mouse == grid.star ** Processing line: ~ grid.target = dijkstra_cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.target = dijkstra_cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_target == grid.target~ - Inside source: true *** True Line Result unless old_target == grid.target ** Processing line: ~ reset_searches~ - Inside source: true *** True Line Result reset_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the target to the cell closest to the mouse in the second grid~ - Inside source: true *** True Line Result # Moves the target to the cell closest to the mouse in the second grid ** Processing line: ~ # Only reset_searchess the search if the target changes position~ - Inside source: true *** True Line Result # Only reset_searchess the search if the target changes position ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ - Inside source: true *** True Line Result # Called whenever the user is editing the target (puts mouse down on target) ** Processing line: ~ def process_input_greedy_target~ - Inside source: true *** True Line Result def process_input_greedy_target ** Processing line: ~ old_target = grid.target.clone~ - Inside source: true *** True Line Result old_target = grid.target.clone ** Processing line: ~ unless greedy_cell_closest_to_mouse == grid.star~ - Inside source: true *** True Line Result unless greedy_cell_closest_to_mouse == grid.star ** Processing line: ~ grid.target = greedy_cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.target = greedy_cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_target == grid.target~ - Inside source: true *** True Line Result unless old_target == grid.target ** Processing line: ~ reset_searches~ - Inside source: true *** True Line Result reset_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves the target to the cell closest to the mouse in the third grid~ - Inside source: true *** True Line Result # Moves the target to the cell closest to the mouse in the third grid ** Processing line: ~ # Only reset_searchess the search if the target changes position~ - Inside source: true *** True Line Result # Only reset_searchess the search if the target changes position ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ - Inside source: true *** True Line Result # Called whenever the user is editing the target (puts mouse down on target) ** Processing line: ~ def process_input_a_star_target~ - Inside source: true *** True Line Result def process_input_a_star_target ** Processing line: ~ old_target = grid.target.clone~ - Inside source: true *** True Line Result old_target = grid.target.clone ** Processing line: ~ unless a_star_cell_closest_to_mouse == grid.star~ - Inside source: true *** True Line Result unless a_star_cell_closest_to_mouse == grid.star ** Processing line: ~ grid.target = a_star_cell_closest_to_mouse~ - Inside source: true *** True Line Result grid.target = a_star_cell_closest_to_mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless old_target == grid.target~ - Inside source: true *** True Line Result unless old_target == grid.target ** Processing line: ~ reset_searches~ - Inside source: true *** True Line Result reset_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Removes walls in the first grid that are under the cursor~ - Inside source: true *** True Line Result # Removes walls in the first grid that are under the cursor ** Processing line: ~ def process_input_dijkstra_remove_wall~ - Inside source: true *** True Line Result def process_input_dijkstra_remove_wall ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ - Inside source: true *** True Line Result # The mouse needs to be inside the grid, because we only want to remove walls ** Processing line: ~ # the cursor is directly over~ - Inside source: true *** True Line Result # the cursor is directly over ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ - Inside source: true *** True Line Result # Recalculations should only occur when a wall is actually deleted ** Processing line: ~ if dijkstra_mouse_over_grid?~ - Inside source: true *** True Line Result if dijkstra_mouse_over_grid? ** Processing line: ~ if grid.walls.has_key?(dijkstra_cell_closest_to_mouse)~ - Inside source: true *** True Line Result if grid.walls.has_key?(dijkstra_cell_closest_to_mouse) ** Processing line: ~ grid.walls.delete(dijkstra_cell_closest_to_mouse)~ - Inside source: true *** True Line Result grid.walls.delete(dijkstra_cell_closest_to_mouse) ** Processing line: ~ reset_searches~ - Inside source: true *** True Line Result reset_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Removes walls in the second grid that are under the cursor~ - Inside source: true *** True Line Result # Removes walls in the second grid that are under the cursor ** Processing line: ~ def process_input_greedy_remove_wall~ - Inside source: true *** True Line Result def process_input_greedy_remove_wall ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ - Inside source: true *** True Line Result # The mouse needs to be inside the grid, because we only want to remove walls ** Processing line: ~ # the cursor is directly over~ - Inside source: true *** True Line Result # the cursor is directly over ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ - Inside source: true *** True Line Result # Recalculations should only occur when a wall is actually deleted ** Processing line: ~ if greedy_mouse_over_grid?~ - Inside source: true *** True Line Result if greedy_mouse_over_grid? ** Processing line: ~ if grid.walls.has_key?(greedy_cell_closest_to_mouse)~ - Inside source: true *** True Line Result if grid.walls.has_key?(greedy_cell_closest_to_mouse) ** Processing line: ~ grid.walls.delete(greedy_cell_closest_to_mouse)~ - Inside source: true *** True Line Result grid.walls.delete(greedy_cell_closest_to_mouse) ** Processing line: ~ reset_searches~ - Inside source: true *** True Line Result reset_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Removes walls in the third grid that are under the cursor~ - Inside source: true *** True Line Result # Removes walls in the third grid that are under the cursor ** Processing line: ~ def process_input_a_star_remove_wall~ - Inside source: true *** True Line Result def process_input_a_star_remove_wall ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ - Inside source: true *** True Line Result # The mouse needs to be inside the grid, because we only want to remove walls ** Processing line: ~ # the cursor is directly over~ - Inside source: true *** True Line Result # the cursor is directly over ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ - Inside source: true *** True Line Result # Recalculations should only occur when a wall is actually deleted ** Processing line: ~ if a_star_mouse_over_grid?~ - Inside source: true *** True Line Result if a_star_mouse_over_grid? ** Processing line: ~ if grid.walls.has_key?(a_star_cell_closest_to_mouse)~ - Inside source: true *** True Line Result if grid.walls.has_key?(a_star_cell_closest_to_mouse) ** Processing line: ~ grid.walls.delete(a_star_cell_closest_to_mouse)~ - Inside source: true *** True Line Result grid.walls.delete(a_star_cell_closest_to_mouse) ** Processing line: ~ reset_searches~ - Inside source: true *** True Line Result reset_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds a wall in the first grid in the cell the mouse is over~ - Inside source: true *** True Line Result # Adds a wall in the first grid in the cell the mouse is over ** Processing line: ~ def process_input_dijkstra_add_wall~ - Inside source: true *** True Line Result def process_input_dijkstra_add_wall ** Processing line: ~ if dijkstra_mouse_over_grid?~ - Inside source: true *** True Line Result if dijkstra_mouse_over_grid? ** Processing line: ~ unless grid.walls.has_key?(dijkstra_cell_closest_to_mouse)~ - Inside source: true *** True Line Result unless grid.walls.has_key?(dijkstra_cell_closest_to_mouse) ** Processing line: ~ grid.walls[dijkstra_cell_closest_to_mouse] = true~ - Inside source: true *** True Line Result grid.walls[dijkstra_cell_closest_to_mouse] = true ** Processing line: ~ reset_searches~ - Inside source: true *** True Line Result reset_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds a wall in the second grid in the cell the mouse is over~ - Inside source: true *** True Line Result # Adds a wall in the second grid in the cell the mouse is over ** Processing line: ~ def process_input_greedy_add_wall~ - Inside source: true *** True Line Result def process_input_greedy_add_wall ** Processing line: ~ if greedy_mouse_over_grid?~ - Inside source: true *** True Line Result if greedy_mouse_over_grid? ** Processing line: ~ unless grid.walls.has_key?(greedy_cell_closest_to_mouse)~ - Inside source: true *** True Line Result unless grid.walls.has_key?(greedy_cell_closest_to_mouse) ** Processing line: ~ grid.walls[greedy_cell_closest_to_mouse] = true~ - Inside source: true *** True Line Result grid.walls[greedy_cell_closest_to_mouse] = true ** Processing line: ~ reset_searches~ - Inside source: true *** True Line Result reset_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds a wall in the third grid in the cell the mouse is over~ - Inside source: true *** True Line Result # Adds a wall in the third grid in the cell the mouse is over ** Processing line: ~ def process_input_a_star_add_wall~ - Inside source: true *** True Line Result def process_input_a_star_add_wall ** Processing line: ~ if a_star_mouse_over_grid?~ - Inside source: true *** True Line Result if a_star_mouse_over_grid? ** Processing line: ~ unless grid.walls.has_key?(a_star_cell_closest_to_mouse)~ - Inside source: true *** True Line Result unless grid.walls.has_key?(a_star_cell_closest_to_mouse) ** Processing line: ~ grid.walls[a_star_cell_closest_to_mouse] = true~ - Inside source: true *** True Line Result grid.walls[a_star_cell_closest_to_mouse] = true ** Processing line: ~ reset_searches~ - Inside source: true *** True Line Result reset_searches ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ - Inside source: true *** True Line Result # When the user grabs the star and puts their cursor to the far right ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ - Inside source: true *** True Line Result # and moves up and down, the star is supposed to move along the grid as well ** Processing line: ~ # Finding the cell closest to the mouse helps with this~ - Inside source: true *** True Line Result # Finding the cell closest to the mouse helps with this ** Processing line: ~ def dijkstra_cell_closest_to_mouse~ - Inside source: true *** True Line Result def dijkstra_cell_closest_to_mouse ** Processing line: ~ # Closest cell to the mouse in the first grid~ - Inside source: true *** True Line Result # Closest cell to the mouse in the first grid ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ - Inside source: true *** True Line Result x = (inputs.mouse.point.x / grid.cell_size).to_i ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ - Inside source: true *** True Line Result y = (inputs.mouse.point.y / grid.cell_size).to_i ** Processing line: ~ # Bound x and y to the grid~ - Inside source: true *** True Line Result # Bound x and y to the grid ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ - Inside source: true *** True Line Result x = grid.width - 1 if x > grid.width - 1 ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ - Inside source: true *** True Line Result y = grid.height - 1 if y > grid.height - 1 ** Processing line: ~ # Return closest cell~ - Inside source: true *** True Line Result # Return closest cell ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ - Inside source: true *** True Line Result # When the user grabs the star and puts their cursor to the far right ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ - Inside source: true *** True Line Result # and moves up and down, the star is supposed to move along the grid as well ** Processing line: ~ # Finding the cell closest to the mouse in the second grid helps with this~ - Inside source: true *** True Line Result # Finding the cell closest to the mouse in the second grid helps with this ** Processing line: ~ def greedy_cell_closest_to_mouse~ - Inside source: true *** True Line Result def greedy_cell_closest_to_mouse ** Processing line: ~ # Closest cell grid to the mouse in the second~ - Inside source: true *** True Line Result # Closest cell grid to the mouse in the second ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ - Inside source: true *** True Line Result x = (inputs.mouse.point.x / grid.cell_size).to_i ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ - Inside source: true *** True Line Result y = (inputs.mouse.point.y / grid.cell_size).to_i ** Processing line: ~ # Translate the cell to the first grid~ - Inside source: true *** True Line Result # Translate the cell to the first grid ** Processing line: ~ x -= grid.width + 1~ - Inside source: true *** True Line Result x -= grid.width + 1 ** Processing line: ~ # Bound x and y to the first grid~ - Inside source: true *** True Line Result # Bound x and y to the first grid ** Processing line: ~ x = 0 if x < 0~ - Inside source: true *** True Line Result x = 0 if x < 0 ** Processing line: ~ y = 0 if y < 0~ - Inside source: true *** True Line Result y = 0 if y < 0 ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ - Inside source: true *** True Line Result x = grid.width - 1 if x > grid.width - 1 ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ - Inside source: true *** True Line Result y = grid.height - 1 if y > grid.height - 1 ** Processing line: ~ # Return closest cell~ - Inside source: true *** True Line Result # Return closest cell ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ - Inside source: true *** True Line Result # When the user grabs the star and puts their cursor to the far right ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ - Inside source: true *** True Line Result # and moves up and down, the star is supposed to move along the grid as well ** Processing line: ~ # Finding the cell closest to the mouse in the third grid helps with this~ - Inside source: true *** True Line Result # Finding the cell closest to the mouse in the third grid helps with this ** Processing line: ~ def a_star_cell_closest_to_mouse~ - Inside source: true *** True Line Result def a_star_cell_closest_to_mouse ** Processing line: ~ # Closest cell grid to the mouse in the second~ - Inside source: true *** True Line Result # Closest cell grid to the mouse in the second ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ - Inside source: true *** True Line Result x = (inputs.mouse.point.x / grid.cell_size).to_i ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ - Inside source: true *** True Line Result y = (inputs.mouse.point.y / grid.cell_size).to_i ** Processing line: ~ # Translate the cell to the first grid~ - Inside source: true *** True Line Result # Translate the cell to the first grid ** Processing line: ~ x -= (grid.width + 1) * 2~ - Inside source: true *** True Line Result x -= (grid.width + 1) * 2 ** Processing line: ~ # Bound x and y to the first grid~ - Inside source: true *** True Line Result # Bound x and y to the first grid ** Processing line: ~ x = 0 if x < 0~ - Inside source: true *** True Line Result x = 0 if x < 0 ** Processing line: ~ y = 0 if y < 0~ - Inside source: true *** True Line Result y = 0 if y < 0 ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ - Inside source: true *** True Line Result x = grid.width - 1 if x > grid.width - 1 ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ - Inside source: true *** True Line Result y = grid.height - 1 if y > grid.height - 1 ** Processing line: ~ # Return closest cell~ - Inside source: true *** True Line Result # Return closest cell ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset_searches~ - Inside source: true *** True Line Result def reset_searches ** Processing line: ~ # Reset the searches~ - Inside source: true *** True Line Result # Reset the searches ** Processing line: ~ dijkstra.came_from = {}~ - Inside source: true *** True Line Result dijkstra.came_from = {} ** Processing line: ~ dijkstra.cost_so_far = {}~ - Inside source: true *** True Line Result dijkstra.cost_so_far = {} ** Processing line: ~ dijkstra.frontier = []~ - Inside source: true *** True Line Result dijkstra.frontier = [] ** Processing line: ~ dijkstra.path = []~ - Inside source: true *** True Line Result dijkstra.path = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ greedy.came_from = {}~ - Inside source: true *** True Line Result greedy.came_from = {} ** Processing line: ~ greedy.frontier = []~ - Inside source: true *** True Line Result greedy.frontier = [] ** Processing line: ~ greedy.path = []~ - Inside source: true *** True Line Result greedy.path = [] ** Processing line: ~ a_star.came_from = {}~ - Inside source: true *** True Line Result a_star.came_from = {} ** Processing line: ~ a_star.frontier = []~ - Inside source: true *** True Line Result a_star.frontier = [] ** Processing line: ~ a_star.path = []~ - Inside source: true *** True Line Result a_star.path = [] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_searches~ - Inside source: true *** True Line Result def calc_searches ** Processing line: ~ calc_dijkstra~ - Inside source: true *** True Line Result calc_dijkstra ** Processing line: ~ calc_greedy~ - Inside source: true *** True Line Result calc_greedy ** Processing line: ~ calc_a_star~ - Inside source: true *** True Line Result calc_a_star ** Processing line: ~ # Move the searches forward to the current step~ - Inside source: true *** True Line Result # Move the searches forward to the current step ** Processing line: ~ # state.current_step.times { move_searches_one_step_forward }~ - Inside source: true *** True Line Result # state.current_step.times { move_searches_one_step_forward } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_dijkstra~ - Inside source: true *** True Line Result def calc_dijkstra ** Processing line: ~ # Sets up the search to begin from the star~ - Inside source: true *** True Line Result # Sets up the search to begin from the star ** Processing line: ~ dijkstra.frontier << grid.star~ - Inside source: true *** True Line Result dijkstra.frontier << grid.star ** Processing line: ~ dijkstra.came_from[grid.star] = nil~ - Inside source: true *** True Line Result dijkstra.came_from[grid.star] = nil ** Processing line: ~ dijkstra.cost_so_far[grid.star] = 0~ - Inside source: true *** True Line Result dijkstra.cost_so_far[grid.star] = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Until the target is found or there are no more cells to explore from~ - Inside source: true *** True Line Result # Until the target is found or there are no more cells to explore from ** Processing line: ~ until dijkstra.came_from.has_key?(grid.target) or dijkstra.frontier.empty?~ - Inside source: true *** True Line Result until dijkstra.came_from.has_key?(grid.target) or dijkstra.frontier.empty? ** Processing line: ~ # Take the next frontier cell. The first element is the cell, the second is the priority.~ - Inside source: true *** True Line Result # Take the next frontier cell. The first element is the cell, the second is the priority. ** Processing line: ~ new_frontier = dijkstra.frontier.shift#[0]~ - Inside source: true *** True Line Result new_frontier = dijkstra.frontier.shift#[0] ** Processing line: ~ # For each of its neighbors~ - Inside source: true *** True Line Result # For each of its neighbors ** Processing line: ~ adjacent_neighbors(new_frontier).each do | neighbor |~ - Inside source: true *** True Line Result adjacent_neighbors(new_frontier).each do | neighbor | ** Processing line: ~ # That have not been visited and are not walls~ - Inside source: true *** True Line Result # That have not been visited and are not walls ** Processing line: ~ unless dijkstra.came_from.has_key?(neighbor) or grid.walls.has_key?(neighbor)~ - Inside source: true *** True Line Result unless dijkstra.came_from.has_key?(neighbor) or grid.walls.has_key?(neighbor) ** Processing line: ~ # Add them to the frontier and mark them as visited~ - Inside source: true *** True Line Result # Add them to the frontier and mark them as visited ** Processing line: ~ dijkstra.frontier << neighbor~ - Inside source: true *** True Line Result dijkstra.frontier << neighbor ** Processing line: ~ dijkstra.came_from[neighbor] = new_frontier~ - Inside source: true *** True Line Result dijkstra.came_from[neighbor] = new_frontier ** Processing line: ~ dijkstra.cost_so_far[neighbor] = dijkstra.cost_so_far[new_frontier] + 1~ - Inside source: true *** True Line Result dijkstra.cost_so_far[neighbor] = dijkstra.cost_so_far[new_frontier] + 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line~ - Inside source: true *** True Line Result # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line ** Processing line: ~ # Comment this line and let a path generate to see the difference~ - Inside source: true *** True Line Result # Comment this line and let a path generate to see the difference ** Processing line: ~ dijkstra.frontier = dijkstra.frontier.sort_by {| cell | proximity_to_star(cell) }~ - Inside source: true *** True Line Result dijkstra.frontier = dijkstra.frontier.sort_by {| cell | proximity_to_star(cell) } ** Processing line: ~ dijkstra.frontier = dijkstra.frontier.sort_by {| cell | dijkstra.cost_so_far[cell] }~ - Inside source: true *** True Line Result dijkstra.frontier = dijkstra.frontier.sort_by {| cell | dijkstra.cost_so_far[cell] } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the search found the target~ - Inside source: true *** True Line Result # If the search found the target ** Processing line: ~ if dijkstra.came_from.has_key?(grid.target)~ - Inside source: true *** True Line Result if dijkstra.came_from.has_key?(grid.target) ** Processing line: ~ # Calculate the path between the target and star~ - Inside source: true *** True Line Result # Calculate the path between the target and star ** Processing line: ~ dijkstra_calc_path~ - Inside source: true *** True Line Result dijkstra_calc_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_greedy~ - Inside source: true *** True Line Result def calc_greedy ** Processing line: ~ # Sets up the search to begin from the star~ - Inside source: true *** True Line Result # Sets up the search to begin from the star ** Processing line: ~ greedy.frontier << grid.star~ - Inside source: true *** True Line Result greedy.frontier << grid.star ** Processing line: ~ greedy.came_from[grid.star] = nil~ - Inside source: true *** True Line Result greedy.came_from[grid.star] = nil ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Until the target is found or there are no more cells to explore from~ - Inside source: true *** True Line Result # Until the target is found or there are no more cells to explore from ** Processing line: ~ until greedy.came_from.has_key?(grid.target) or greedy.frontier.empty?~ - Inside source: true *** True Line Result until greedy.came_from.has_key?(grid.target) or greedy.frontier.empty? ** Processing line: ~ # Take the next frontier cell~ - Inside source: true *** True Line Result # Take the next frontier cell ** Processing line: ~ new_frontier = greedy.frontier.shift~ - Inside source: true *** True Line Result new_frontier = greedy.frontier.shift ** Processing line: ~ # For each of its neighbors~ - Inside source: true *** True Line Result # For each of its neighbors ** Processing line: ~ adjacent_neighbors(new_frontier).each do | neighbor |~ - Inside source: true *** True Line Result adjacent_neighbors(new_frontier).each do | neighbor | ** Processing line: ~ # That have not been visited and are not walls~ - Inside source: true *** True Line Result # That have not been visited and are not walls ** Processing line: ~ unless greedy.came_from.has_key?(neighbor) or grid.walls.has_key?(neighbor)~ - Inside source: true *** True Line Result unless greedy.came_from.has_key?(neighbor) or grid.walls.has_key?(neighbor) ** Processing line: ~ # Add them to the frontier and mark them as visited~ - Inside source: true *** True Line Result # Add them to the frontier and mark them as visited ** Processing line: ~ greedy.frontier << neighbor~ - Inside source: true *** True Line Result greedy.frontier << neighbor ** Processing line: ~ greedy.came_from[neighbor] = new_frontier~ - Inside source: true *** True Line Result greedy.came_from[neighbor] = new_frontier ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line~ - Inside source: true *** True Line Result # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line ** Processing line: ~ # Comment this line and let a path generate to see the difference~ - Inside source: true *** True Line Result # Comment this line and let a path generate to see the difference ** Processing line: ~ greedy.frontier = greedy.frontier.sort_by {| cell | proximity_to_star(cell) }~ - Inside source: true *** True Line Result greedy.frontier = greedy.frontier.sort_by {| cell | proximity_to_star(cell) } ** Processing line: ~ # Sort the frontier so cells that are close to the target are then prioritized~ - Inside source: true *** True Line Result # Sort the frontier so cells that are close to the target are then prioritized ** Processing line: ~ greedy.frontier = greedy.frontier.sort_by {| cell | greedy_heuristic(cell) }~ - Inside source: true *** True Line Result greedy.frontier = greedy.frontier.sort_by {| cell | greedy_heuristic(cell) } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the search found the target~ - Inside source: true *** True Line Result # If the search found the target ** Processing line: ~ if greedy.came_from.has_key?(grid.target)~ - Inside source: true *** True Line Result if greedy.came_from.has_key?(grid.target) ** Processing line: ~ # Calculate the path between the target and star~ - Inside source: true *** True Line Result # Calculate the path between the target and star ** Processing line: ~ greedy_calc_path~ - Inside source: true *** True Line Result greedy_calc_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_a_star~ - Inside source: true *** True Line Result def calc_a_star ** Processing line: ~ # Setup the search to start from the star~ - Inside source: true *** True Line Result # Setup the search to start from the star ** Processing line: ~ a_star.came_from[grid.star] = nil~ - Inside source: true *** True Line Result a_star.came_from[grid.star] = nil ** Processing line: ~ a_star.cost_so_far[grid.star] = 0~ - Inside source: true *** True Line Result a_star.cost_so_far[grid.star] = 0 ** Processing line: ~ a_star.frontier << grid.star~ - Inside source: true *** True Line Result a_star.frontier << grid.star ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Until there are no more cells to explore from or the search has found the target~ - Inside source: true *** True Line Result # Until there are no more cells to explore from or the search has found the target ** Processing line: ~ until a_star.frontier.empty? or a_star.came_from.has_key?(grid.target)~ - Inside source: true *** True Line Result until a_star.frontier.empty? or a_star.came_from.has_key?(grid.target) ** Processing line: ~ # Get the next cell to expand from~ - Inside source: true *** True Line Result # Get the next cell to expand from ** Processing line: ~ current_frontier = a_star.frontier.shift~ - Inside source: true *** True Line Result current_frontier = a_star.frontier.shift ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # For each of that cells neighbors~ - Inside source: true *** True Line Result # For each of that cells neighbors ** Processing line: ~ adjacent_neighbors(current_frontier).each do | neighbor |~ - Inside source: true *** True Line Result adjacent_neighbors(current_frontier).each do | neighbor | ** Processing line: ~ # That have not been visited and are not walls~ - Inside source: true *** True Line Result # That have not been visited and are not walls ** Processing line: ~ unless a_star.came_from.has_key?(neighbor) or grid.walls.has_key?(neighbor)~ - Inside source: true *** True Line Result unless a_star.came_from.has_key?(neighbor) or grid.walls.has_key?(neighbor) ** Processing line: ~ # Add them to the frontier and mark them as visited~ - Inside source: true *** True Line Result # Add them to the frontier and mark them as visited ** Processing line: ~ a_star.frontier << neighbor~ - Inside source: true *** True Line Result a_star.frontier << neighbor ** Processing line: ~ a_star.came_from[neighbor] = current_frontier~ - Inside source: true *** True Line Result a_star.came_from[neighbor] = current_frontier ** Processing line: ~ a_star.cost_so_far[neighbor] = a_star.cost_so_far[current_frontier] + 1~ - Inside source: true *** True Line Result a_star.cost_so_far[neighbor] = a_star.cost_so_far[current_frontier] + 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line~ - Inside source: true *** True Line Result # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line ** Processing line: ~ # Comment this line and let a path generate to see the difference~ - Inside source: true *** True Line Result # Comment this line and let a path generate to see the difference ** Processing line: ~ a_star.frontier = a_star.frontier.sort_by {| cell | proximity_to_star(cell) }~ - Inside source: true *** True Line Result a_star.frontier = a_star.frontier.sort_by {| cell | proximity_to_star(cell) } ** Processing line: ~ a_star.frontier = a_star.frontier.sort_by {| cell | a_star.cost_so_far[cell] + greedy_heuristic(cell) }~ - Inside source: true *** True Line Result a_star.frontier = a_star.frontier.sort_by {| cell | a_star.cost_so_far[cell] + greedy_heuristic(cell) } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the search found the target~ - Inside source: true *** True Line Result # If the search found the target ** Processing line: ~ if a_star.came_from.has_key?(grid.target)~ - Inside source: true *** True Line Result if a_star.came_from.has_key?(grid.target) ** Processing line: ~ # Calculate the path between the target and star~ - Inside source: true *** True Line Result # Calculate the path between the target and star ** Processing line: ~ a_star_calc_path~ - Inside source: true *** True Line Result a_star_calc_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the path between the target and star for the breadth first search~ - Inside source: true *** True Line Result # Calculates the path between the target and star for the breadth first search ** Processing line: ~ # Only called when the breadth first search finds the target~ - Inside source: true *** True Line Result # Only called when the breadth first search finds the target ** Processing line: ~ def dijkstra_calc_path~ - Inside source: true *** True Line Result def dijkstra_calc_path ** Processing line: ~ # Start from the target~ - Inside source: true *** True Line Result # Start from the target ** Processing line: ~ endpoint = grid.target~ - Inside source: true *** True Line Result endpoint = grid.target ** Processing line: ~ # And the cell it came from~ - Inside source: true *** True Line Result # And the cell it came from ** Processing line: ~ next_endpoint = dijkstra.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = dijkstra.came_from[endpoint] ** Processing line: ~ while endpoint and next_endpoint~ - Inside source: true *** True Line Result while endpoint and next_endpoint ** Processing line: ~ # Draw a path between these two cells and store it~ - Inside source: true *** True Line Result # Draw a path between these two cells and store it ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ - Inside source: true *** True Line Result path = get_path_between(endpoint, next_endpoint) ** Processing line: ~ dijkstra.path << path~ - Inside source: true *** True Line Result dijkstra.path << path ** Processing line: ~ # And get the next pair of cells~ - Inside source: true *** True Line Result # And get the next pair of cells ** Processing line: ~ endpoint = next_endpoint~ - Inside source: true *** True Line Result endpoint = next_endpoint ** Processing line: ~ next_endpoint = dijkstra.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = dijkstra.came_from[endpoint] ** Processing line: ~ # Continue till there are no more cells~ - Inside source: true *** True Line Result # Continue till there are no more cells ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns one-dimensional absolute distance between cell and target~ - Inside source: true *** True Line Result # Returns one-dimensional absolute distance between cell and target ** Processing line: ~ # Returns a number to compare distances between cells and the target~ - Inside source: true *** True Line Result # Returns a number to compare distances between cells and the target ** Processing line: ~ def greedy_heuristic(cell)~ - Inside source: true *** True Line Result def greedy_heuristic(cell) ** Processing line: ~ (grid.target.x - cell.x).abs + (grid.target.y - cell.y).abs~ - Inside source: true *** True Line Result (grid.target.x - cell.x).abs + (grid.target.y - cell.y).abs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the path between the target and star for the greedy search~ - Inside source: true *** True Line Result # Calculates the path between the target and star for the greedy search ** Processing line: ~ # Only called when the greedy search finds the target~ - Inside source: true *** True Line Result # Only called when the greedy search finds the target ** Processing line: ~ def greedy_calc_path~ - Inside source: true *** True Line Result def greedy_calc_path ** Processing line: ~ # Start from the target~ - Inside source: true *** True Line Result # Start from the target ** Processing line: ~ endpoint = grid.target~ - Inside source: true *** True Line Result endpoint = grid.target ** Processing line: ~ # And the cell it came from~ - Inside source: true *** True Line Result # And the cell it came from ** Processing line: ~ next_endpoint = greedy.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = greedy.came_from[endpoint] ** Processing line: ~ while endpoint and next_endpoint~ - Inside source: true *** True Line Result while endpoint and next_endpoint ** Processing line: ~ # Draw a path between these two cells and store it~ - Inside source: true *** True Line Result # Draw a path between these two cells and store it ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ - Inside source: true *** True Line Result path = get_path_between(endpoint, next_endpoint) ** Processing line: ~ greedy.path << path~ - Inside source: true *** True Line Result greedy.path << path ** Processing line: ~ # And get the next pair of cells~ - Inside source: true *** True Line Result # And get the next pair of cells ** Processing line: ~ endpoint = next_endpoint~ - Inside source: true *** True Line Result endpoint = next_endpoint ** Processing line: ~ next_endpoint = greedy.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = greedy.came_from[endpoint] ** Processing line: ~ # Continue till there are no more cells~ - Inside source: true *** True Line Result # Continue till there are no more cells ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the path between the target and star for the a_star search~ - Inside source: true *** True Line Result # Calculates the path between the target and star for the a_star search ** Processing line: ~ # Only called when the a_star search finds the target~ - Inside source: true *** True Line Result # Only called when the a_star search finds the target ** Processing line: ~ def a_star_calc_path~ - Inside source: true *** True Line Result def a_star_calc_path ** Processing line: ~ # Start from the target~ - Inside source: true *** True Line Result # Start from the target ** Processing line: ~ endpoint = grid.target~ - Inside source: true *** True Line Result endpoint = grid.target ** Processing line: ~ # And the cell it came from~ - Inside source: true *** True Line Result # And the cell it came from ** Processing line: ~ next_endpoint = a_star.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = a_star.came_from[endpoint] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ while endpoint and next_endpoint~ - Inside source: true *** True Line Result while endpoint and next_endpoint ** Processing line: ~ # Draw a path between these two cells and store it~ - Inside source: true *** True Line Result # Draw a path between these two cells and store it ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ - Inside source: true *** True Line Result path = get_path_between(endpoint, next_endpoint) ** Processing line: ~ a_star.path << path~ - Inside source: true *** True Line Result a_star.path << path ** Processing line: ~ # And get the next pair of cells~ - Inside source: true *** True Line Result # And get the next pair of cells ** Processing line: ~ endpoint = next_endpoint~ - Inside source: true *** True Line Result endpoint = next_endpoint ** Processing line: ~ next_endpoint = a_star.came_from[endpoint]~ - Inside source: true *** True Line Result next_endpoint = a_star.came_from[endpoint] ** Processing line: ~ # Continue till there are no more cells~ - Inside source: true *** True Line Result # Continue till there are no more cells ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a list of adjacent cells~ - Inside source: true *** True Line Result # Returns a list of adjacent cells ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ - Inside source: true *** True Line Result # Used to determine what the next cells to be added to the frontier are ** Processing line: ~ def adjacent_neighbors(cell)~ - Inside source: true *** True Line Result def adjacent_neighbors(cell) ** Processing line: ~ neighbors = []~ - Inside source: true *** True Line Result neighbors = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Gets all the valid neighbors into the array~ - Inside source: true *** True Line Result # Gets all the valid neighbors into the array ** Processing line: ~ # From southern neighbor, clockwise~ - Inside source: true *** True Line Result # From southern neighbor, clockwise ** Processing line: ~ neighbors << [cell.x , cell.y - 1] unless cell.y == 0~ - Inside source: true *** True Line Result neighbors << [cell.x , cell.y - 1] unless cell.y == 0 ** Processing line: ~ neighbors << [cell.x - 1, cell.y ] unless cell.x == 0~ - Inside source: true *** True Line Result neighbors << [cell.x - 1, cell.y ] unless cell.x == 0 ** Processing line: ~ neighbors << [cell.x , cell.y + 1] unless cell.y == grid.height - 1~ - Inside source: true *** True Line Result neighbors << [cell.x , cell.y + 1] unless cell.y == grid.height - 1 ** Processing line: ~ neighbors << [cell.x + 1, cell.y ] unless cell.x == grid.width - 1~ - Inside source: true *** True Line Result neighbors << [cell.x + 1, cell.y ] unless cell.x == grid.width - 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ neighbors~ - Inside source: true *** True Line Result neighbors ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds the vertical and horizontal distance of a cell from the star~ - Inside source: true *** True Line Result # Finds the vertical and horizontal distance of a cell from the star ** Processing line: ~ # and returns the larger value~ - Inside source: true *** True Line Result # and returns the larger value ** Processing line: ~ # This method is used to have a zigzag pattern in the rendered path~ - Inside source: true *** True Line Result # This method is used to have a zigzag pattern in the rendered path ** Processing line: ~ # A cell that is [5, 5] from the star,~ - Inside source: true *** True Line Result # A cell that is [5, 5] from the star, ** Processing line: ~ # is explored before over a cell that is [0, 7] away.~ - Inside source: true *** True Line Result # is explored before over a cell that is [0, 7] away. ** Processing line: ~ # So, if possible, the search tries to go diagonal (zigzag) first~ - Inside source: true *** True Line Result # So, if possible, the search tries to go diagonal (zigzag) first ** Processing line: ~ def proximity_to_star(cell)~ - Inside source: true *** True Line Result def proximity_to_star(cell) ** Processing line: ~ distance_x = (grid.star.x - cell.x).abs~ - Inside source: true *** True Line Result distance_x = (grid.star.x - cell.x).abs ** Processing line: ~ distance_y = (grid.star.y - cell.y).abs~ - Inside source: true *** True Line Result distance_y = (grid.star.y - cell.y).abs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if distance_x > distance_y~ - Inside source: true *** True Line Result if distance_x > distance_y ** Processing line: ~ return distance_x~ - Inside source: true *** True Line Result return distance_x ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return distance_y~ - Inside source: true *** True Line Result return distance_y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Methods that allow code to be more concise. Subdivides args.state, which is where all variables are stored.~ - Inside source: true *** True Line Result # Methods that allow code to be more concise. Subdivides args.state, which is where all variables are stored. ** Processing line: ~ def grid~ - Inside source: true *** True Line Result def grid ** Processing line: ~ state.grid~ - Inside source: true *** True Line Result state.grid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def dijkstra~ - Inside source: true *** True Line Result def dijkstra ** Processing line: ~ state.dijkstra~ - Inside source: true *** True Line Result state.dijkstra ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def greedy~ - Inside source: true *** True Line Result def greedy ** Processing line: ~ state.greedy~ - Inside source: true *** True Line Result state.greedy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def a_star~ - Inside source: true *** True Line Result def a_star ** Processing line: ~ state.a_star~ - Inside source: true *** True Line Result state.a_star ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Descriptive aliases for colors~ - Inside source: true *** True Line Result # Descriptive aliases for colors ** Processing line: ~ def default_color~ - Inside source: true *** True Line Result def default_color ** Processing line: ~ [221, 212, 213] # Light Brown~ - Inside source: true *** True Line Result [221, 212, 213] # Light Brown ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def wall_color~ - Inside source: true *** True Line Result def wall_color ** Processing line: ~ [134, 134, 120] # Camo Green~ - Inside source: true *** True Line Result [134, 134, 120] # Camo Green ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def visited_color~ - Inside source: true *** True Line Result def visited_color ** Processing line: ~ [204, 191, 179] # Dark Brown~ - Inside source: true *** True Line Result [204, 191, 179] # Dark Brown ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def path_color~ - Inside source: true *** True Line Result def path_color ** Processing line: ~ [231, 230, 228] # Pastel White~ - Inside source: true *** True Line Result [231, 230, 228] # Pastel White ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def button_color~ - Inside source: true *** True Line Result def button_color ** Processing line: ~ [190, 190, 190] # Gray~ - Inside source: true *** True Line Result [190, 190, 190] # Gray ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Method that is called by DragonRuby periodically~ - Inside source: true *** True Line Result # Method that is called by DragonRuby periodically ** Processing line: ~ # Used for updating animations and calculations~ - Inside source: true *** True Line Result # Used for updating animations and calculations ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Pressing r will reset the application~ - Inside source: true *** True Line Result # Pressing r will reset the application ** Processing line: ~ if args.inputs.keyboard.key_down.r~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.r ** Processing line: ~ args.gtk.reset~ - Inside source: true *** True Line Result args.gtk.reset ** Processing line: ~ reset~ - Inside source: true *** True Line Result reset ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Every tick, new args are passed, and the Breadth First Search tick is called~ - Inside source: true *** True Line Result # Every tick, new args are passed, and the Breadth First Search tick is called ** Processing line: ~ $a_star_algorithm ||= A_Star_Algorithm.new~ - Inside source: true *** True Line Result $a_star_algorithm ||= A_Star_Algorithm.new ** Processing line: ~ $a_star_algorithm.args = args~ - Inside source: true *** True Line Result $a_star_algorithm.args = args ** Processing line: ~ $a_star_algorithm.tick~ - Inside source: true *** True Line Result $a_star_algorithm.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset~ - Inside source: true *** True Line Result def reset ** Processing line: ~ $a_star_algorithm = nil~ - Inside source: true *** True Line Result $a_star_algorithm = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Path Finding Algorithms - Tower Defense - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Path Finding Algorithms - Tower Defense - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/13_path_finding_algorithms/09_tower_defense/app/main.rb~ - Inside source: true *** True Line Result # ./samples/13_path_finding_algorithms/09_tower_defense/app/main.rb ** Processing line: ~ # An example of some major components in a tower defence game~ - Inside source: true *** True Line Result # An example of some major components in a tower defence game ** Processing line: ~ # The pathing of the tanks is determined by A* algorithm -- try editing the walls~ - Inside source: true *** True Line Result # The pathing of the tanks is determined by A* algorithm -- try editing the walls ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The turrets shoot bullets at the closest tank. The bullets are heat-seeking~ - Inside source: true *** True Line Result # The turrets shoot bullets at the closest tank. The bullets are heat-seeking ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $gtk.reset if args.inputs.keyboard.key_down.r~ - Inside source: true *** True Line Result $gtk.reset if args.inputs.keyboard.key_down.r ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ args.outputs.background_color = wall_color~ - Inside source: true *** True Line Result args.outputs.background_color = wall_color ** Processing line: ~ args.state.grid_size = 5~ - Inside source: true *** True Line Result args.state.grid_size = 5 ** Processing line: ~ args.state.tile_size = 50~ - Inside source: true *** True Line Result args.state.tile_size = 50 ** Processing line: ~ args.state.grid_start ||= [0, 0]~ - Inside source: true *** True Line Result args.state.grid_start ||= [0, 0] ** Processing line: ~ args.state.grid_goal ||= [4, 4]~ - Inside source: true *** True Line Result args.state.grid_goal ||= [4, 4] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Try editing these walls to see the path change!~ - Inside source: true *** True Line Result # Try editing these walls to see the path change! ** Processing line: ~ args.state.walls ||= {~ - Inside source: true *** True Line Result args.state.walls ||= { ** Processing line: ~ [0, 4] => true,~ - Inside source: true *** True Line Result [0, 4] => true, ** Processing line: ~ [1, 3] => true,~ - Inside source: true *** True Line Result [1, 3] => true, ** Processing line: ~ [3, 1] => true,~ - Inside source: true *** True Line Result [3, 1] => true, ** Processing line: ~ # [4, 0] => true,~ - Inside source: true *** True Line Result # [4, 0] => true, ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.a_star.frontier ||= []~ - Inside source: true *** True Line Result args.state.a_star.frontier ||= [] ** Processing line: ~ args.state.a_star.came_from ||= {}~ - Inside source: true *** True Line Result args.state.a_star.came_from ||= {} ** Processing line: ~ args.state.a_star.path ||= []~ - Inside source: true *** True Line Result args.state.a_star.path ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.tanks ||= []~ - Inside source: true *** True Line Result args.state.tanks ||= [] ** Processing line: ~ args.state.tank_spawn_period ||= 60~ - Inside source: true *** True Line Result args.state.tank_spawn_period ||= 60 ** Processing line: ~ args.state.tank_sprite_path ||= 'sprites/circle/white.png'~ - Inside source: true *** True Line Result args.state.tank_sprite_path ||= 'sprites/circle/white.png' ** Processing line: ~ args.state.tank_speed ||= 1~ - Inside source: true *** True Line Result args.state.tank_speed ||= 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.turret_shoot_period = 10~ - Inside source: true *** True Line Result args.state.turret_shoot_period = 10 ** Processing line: ~ # Turrets can be entered as [x, y] but are immediately mapped to hashes~ - Inside source: true *** True Line Result # Turrets can be entered as [x, y] but are immediately mapped to hashes ** Processing line: ~ # Walls are also added where the turrets are to prevent tanks from pathing over them~ - Inside source: true *** True Line Result # Walls are also added where the turrets are to prevent tanks from pathing over them ** Processing line: ~ args.state.turrets ||= [~ - Inside source: true *** True Line Result args.state.turrets ||= [ ** Processing line: ~ [2, 2]~ - Inside source: true *** True Line Result [2, 2] ** Processing line: ~ ].each { |turret| args.state.walls[turret] = true}.map do |x, y|~ - Inside source: true *** True Line Result ].each { |turret| args.state.walls[turret] = true}.map do |x, y| ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: x * args.state.tile_size,~ - Inside source: true *** True Line Result x: x * args.state.tile_size, ** Processing line: ~ y: y * args.state.tile_size,~ - Inside source: true *** True Line Result y: y * args.state.tile_size, ** Processing line: ~ w: args.state.tile_size,~ - Inside source: true *** True Line Result w: args.state.tile_size, ** Processing line: ~ h: args.state.tile_size,~ - Inside source: true *** True Line Result h: args.state.tile_size, ** Processing line: ~ path: 'sprites/circle/gray.png',~ - Inside source: true *** True Line Result path: 'sprites/circle/gray.png', ** Processing line: ~ range: 100~ - Inside source: true *** True Line Result range: 100 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.bullet_size ||= 25~ - Inside source: true *** True Line Result args.state.bullet_size ||= 25 ** Processing line: ~ args.state.bullets ||= []~ - Inside source: true *** True Line Result args.state.bullets ||= [] ** Processing line: ~ args.state.bullet_path ||= 'sprites/circle/orange.png'~ - Inside source: true *** True Line Result args.state.bullet_path ||= 'sprites/circle/orange.png' ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ render_grid args~ - Inside source: true *** True Line Result render_grid args ** Processing line: ~ render_a_star args~ - Inside source: true *** True Line Result render_a_star args ** Processing line: ~ args.outputs.sprites << args.state.tanks~ - Inside source: true *** True Line Result args.outputs.sprites << args.state.tanks ** Processing line: ~ args.outputs.sprites << args.state.turrets~ - Inside source: true *** True Line Result args.outputs.sprites << args.state.turrets ** Processing line: ~ args.outputs.sprites << args.state.bullets~ - Inside source: true *** True Line Result args.outputs.sprites << args.state.bullets ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_grid args~ - Inside source: true *** True Line Result def render_grid args ** Processing line: ~ # Draw a square the size and color of the grid~ - Inside source: true *** True Line Result # Draw a square the size and color of the grid ** Processing line: ~ args.outputs.solids << [~ - Inside source: true *** True Line Result args.outputs.solids << [ ** Processing line: ~ 0,~ - Inside source: true *** True Line Result 0, ** Processing line: ~ 0,~ - Inside source: true *** True Line Result 0, ** Processing line: ~ args.state.grid_size * args.state.tile_size,~ - Inside source: true *** True Line Result args.state.grid_size * args.state.tile_size, ** Processing line: ~ args.state.grid_size * args.state.tile_size,~ - Inside source: true *** True Line Result args.state.grid_size * args.state.tile_size, ** Processing line: ~ grid_color~ - Inside source: true *** True Line Result grid_color ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Draw lines across the grid to show tiles~ - Inside source: true *** True Line Result # Draw lines across the grid to show tiles ** Processing line: ~ (args.state.grid_size + 1).times do | value |~ - Inside source: true *** True Line Result (args.state.grid_size + 1).times do | value | ** Processing line: ~ render_horizontal_line(args, value)~ - Inside source: true *** True Line Result render_horizontal_line(args, value) ** Processing line: ~ render_vertical_line(args, value)~ - Inside source: true *** True Line Result render_vertical_line(args, value) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render special tiles~ - Inside source: true *** True Line Result # Render special tiles ** Processing line: ~ render_tile(args, args.state.grid_start, start_color)~ - Inside source: true *** True Line Result render_tile(args, args.state.grid_start, start_color) ** Processing line: ~ render_tile(args, args.state.grid_goal, goal_color)~ - Inside source: true *** True Line Result render_tile(args, args.state.grid_goal, goal_color) ** Processing line: ~ args.state.walls.keys.each { |wall| render_tile(args, wall, wall_color) }~ - Inside source: true *** True Line Result args.state.walls.keys.each { |wall| render_tile(args, wall, wall_color) } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_vertical_line args, x~ - Inside source: true *** True Line Result def render_vertical_line args, x ** Processing line: ~ args.outputs.lines << [~ - Inside source: true *** True Line Result args.outputs.lines << [ ** Processing line: ~ x * args.state.tile_size,~ - Inside source: true *** True Line Result x * args.state.tile_size, ** Processing line: ~ 0,~ - Inside source: true *** True Line Result 0, ** Processing line: ~ x * args.state.tile_size,~ - Inside source: true *** True Line Result x * args.state.tile_size, ** Processing line: ~ args.state.tile_size * args.state.grid_size,~ - Inside source: true *** True Line Result args.state.tile_size * args.state.grid_size, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_horizontal_line args, y~ - Inside source: true *** True Line Result def render_horizontal_line args, y ** Processing line: ~ args.outputs.lines << [~ - Inside source: true *** True Line Result args.outputs.lines << [ ** Processing line: ~ 0,~ - Inside source: true *** True Line Result 0, ** Processing line: ~ y * args.state.tile_size,~ - Inside source: true *** True Line Result y * args.state.tile_size, ** Processing line: ~ args.state.tile_size * args.state.grid_size,~ - Inside source: true *** True Line Result args.state.tile_size * args.state.grid_size, ** Processing line: ~ y * args.state.tile_size,~ - Inside source: true *** True Line Result y * args.state.tile_size, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_tile args, tile, color~ - Inside source: true *** True Line Result def render_tile args, tile, color ** Processing line: ~ args.outputs.solids << [~ - Inside source: true *** True Line Result args.outputs.solids << [ ** Processing line: ~ tile.x * args.state.tile_size,~ - Inside source: true *** True Line Result tile.x * args.state.tile_size, ** Processing line: ~ tile.y * args.state.tile_size,~ - Inside source: true *** True Line Result tile.y * args.state.tile_size, ** Processing line: ~ args.state.tile_size,~ - Inside source: true *** True Line Result args.state.tile_size, ** Processing line: ~ args.state.tile_size,~ - Inside source: true *** True Line Result args.state.tile_size, ** Processing line: ~ color~ - Inside source: true *** True Line Result color ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ calc_a_star args~ - Inside source: true *** True Line Result calc_a_star args ** Processing line: ~ calc_tanks args~ - Inside source: true *** True Line Result calc_tanks args ** Processing line: ~ calc_turrets args~ - Inside source: true *** True Line Result calc_turrets args ** Processing line: ~ calc_bullets args~ - Inside source: true *** True Line Result calc_bullets args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_a_star args~ - Inside source: true *** True Line Result def calc_a_star args ** Processing line: ~ # Only does this one time~ - Inside source: true *** True Line Result # Only does this one time ** Processing line: ~ return unless args.state.a_star.path.empty?~ - Inside source: true *** True Line Result return unless args.state.a_star.path.empty? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Start the search from the grid start~ - Inside source: true *** True Line Result # Start the search from the grid start ** Processing line: ~ args.state.a_star.frontier << args.state.grid_start~ - Inside source: true *** True Line Result args.state.a_star.frontier << args.state.grid_start ** Processing line: ~ args.state.a_star.came_from[args.state.grid_start] = nil~ - Inside source: true *** True Line Result args.state.a_star.came_from[args.state.grid_start] = nil ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Until a path to the goal has been found or there are no more tiles to explore~ - Inside source: true *** True Line Result # Until a path to the goal has been found or there are no more tiles to explore ** Processing line: ~ until (args.state.a_star.came_from.has_key?(args.state.grid_goal)|| args.state.a_star.frontier.empty?)~ - Inside source: true *** True Line Result until (args.state.a_star.came_from.has_key?(args.state.grid_goal)|| args.state.a_star.frontier.empty?) ** Processing line: ~ # For the first tile in the frontier~ - Inside source: true *** True Line Result # For the first tile in the frontier ** Processing line: ~ tile_to_expand_from = args.state.a_star.frontier.shift~ - Inside source: true *** True Line Result tile_to_expand_from = args.state.a_star.frontier.shift ** Processing line: ~ # Add each of its neighbors to the frontier~ - Inside source: true *** True Line Result # Add each of its neighbors to the frontier ** Processing line: ~ neighbors(args, tile_to_expand_from).each do | tile |~ - Inside source: true *** True Line Result neighbors(args, tile_to_expand_from).each do | tile | ** Processing line: ~ args.state.a_star.frontier << tile~ - Inside source: true *** True Line Result args.state.a_star.frontier << tile ** Processing line: ~ args.state.a_star.came_from[tile] = tile_to_expand_from~ - Inside source: true *** True Line Result args.state.a_star.came_from[tile] = tile_to_expand_from ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Stop calculating a path if the goal was never reached~ - Inside source: true *** True Line Result # Stop calculating a path if the goal was never reached ** Processing line: ~ return unless args.state.a_star.came_from.has_key? args.state.grid_goal~ - Inside source: true *** True Line Result return unless args.state.a_star.came_from.has_key? args.state.grid_goal ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Fill path by tracing back from the goal~ - Inside source: true *** True Line Result # Fill path by tracing back from the goal ** Processing line: ~ current_cell = args.state.grid_goal~ - Inside source: true *** True Line Result current_cell = args.state.grid_goal ** Processing line: ~ while current_cell~ - Inside source: true *** True Line Result while current_cell ** Processing line: ~ args.state.a_star.path.unshift current_cell~ - Inside source: true *** True Line Result args.state.a_star.path.unshift current_cell ** Processing line: ~ current_cell = args.state.a_star.came_from[current_cell]~ - Inside source: true *** True Line Result current_cell = args.state.a_star.came_from[current_cell] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts "The path has been calculated"~ - Inside source: true *** True Line Result puts "The path has been calculated" ** Processing line: ~ puts args.state.a_star.path~ - Inside source: true *** True Line Result puts args.state.a_star.path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_tanks args~ - Inside source: true *** True Line Result def calc_tanks args ** Processing line: ~ spawn_tank args~ - Inside source: true *** True Line Result spawn_tank args ** Processing line: ~ move_tanks args~ - Inside source: true *** True Line Result move_tanks args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_tanks args~ - Inside source: true *** True Line Result def move_tanks args ** Processing line: ~ # Remove tanks that have reached the end of their path~ - Inside source: true *** True Line Result # Remove tanks that have reached the end of their path ** Processing line: ~ args.state.tanks.reject! { |tank| tank[:a_star].empty? }~ - Inside source: true *** True Line Result args.state.tanks.reject! { |tank| tank[:a_star].empty? } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Tanks have an array that has each tile it has to go to in order from a* path~ - Inside source: true *** True Line Result # Tanks have an array that has each tile it has to go to in order from a* path ** Processing line: ~ args.state.tanks.each do | tank |~ - Inside source: true *** True Line Result args.state.tanks.each do | tank | ** Processing line: ~ destination = tank[:a_star][0]~ - Inside source: true *** True Line Result destination = tank[:a_star][0] ** Processing line: ~ # Move the tank towards the destination~ - Inside source: true *** True Line Result # Move the tank towards the destination ** Processing line: ~ tank[:x] += copy_sign(args.state.tank_speed, ((destination.x * args.state.tile_size) - tank[:x]))~ - Inside source: true *** True Line Result tank[:x] += copy_sign(args.state.tank_speed, ((destination.x * args.state.tile_size) - tank[:x])) ** Processing line: ~ tank[:y] += copy_sign(args.state.tank_speed, ((destination.y * args.state.tile_size) - tank[:y]))~ - Inside source: true *** True Line Result tank[:y] += copy_sign(args.state.tank_speed, ((destination.y * args.state.tile_size) - tank[:y])) ** Processing line: ~ # If the tank has reached its destination~ - Inside source: true *** True Line Result # If the tank has reached its destination ** Processing line: ~ if (destination.x * args.state.tile_size) == tank[:x] and~ - Inside source: true *** True Line Result if (destination.x * args.state.tile_size) == tank[:x] and ** Processing line: ~ (destination.y * args.state.tile_size) == tank[:y]~ - Inside source: true *** True Line Result (destination.y * args.state.tile_size) == tank[:y] ** Processing line: ~ # Set the destination to the next point in the path~ - Inside source: true *** True Line Result # Set the destination to the next point in the path ** Processing line: ~ tank[:a_star].shift~ - Inside source: true *** True Line Result tank[:a_star].shift ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_turrets args~ - Inside source: true *** True Line Result def calc_turrets args ** Processing line: ~ return unless args.state.tick_count.mod_zero? args.state.turret_shoot_period~ - Inside source: true *** True Line Result return unless args.state.tick_count.mod_zero? args.state.turret_shoot_period ** Processing line: ~ args.state.turrets.each do | turret |~ - Inside source: true *** True Line Result args.state.turrets.each do | turret | ** Processing line: ~ # Finds the closest tank~ - Inside source: true *** True Line Result # Finds the closest tank ** Processing line: ~ target = nil~ - Inside source: true *** True Line Result target = nil ** Processing line: ~ shortest_distance = turret[:range] + 1~ - Inside source: true *** True Line Result shortest_distance = turret[:range] + 1 ** Processing line: ~ args.state.tanks.each do | tank |~ - Inside source: true *** True Line Result args.state.tanks.each do | tank | ** Processing line: ~ distance = distance_between(turret[:x], turret[:y], tank[:x], tank[:y])~ - Inside source: true *** True Line Result distance = distance_between(turret[:x], turret[:y], tank[:x], tank[:y]) ** Processing line: ~ if distance < shortest_distance~ - Inside source: true *** True Line Result if distance < shortest_distance ** Processing line: ~ target = tank~ - Inside source: true *** True Line Result target = tank ** Processing line: ~ shortest_distance = distance~ - Inside source: true *** True Line Result shortest_distance = distance ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ # If there is a tank in range, fires a bullet~ - Inside source: true *** True Line Result # If there is a tank in range, fires a bullet ** Processing line: ~ if target~ - Inside source: true *** True Line Result if target ** Processing line: ~ args.state.bullets << {~ - Inside source: true *** True Line Result args.state.bullets << { ** Processing line: ~ x: turret[:x],~ - Inside source: true *** True Line Result x: turret[:x], ** Processing line: ~ y: turret[:y],~ - Inside source: true *** True Line Result y: turret[:y], ** Processing line: ~ w: args.state.bullet_size,~ - Inside source: true *** True Line Result w: args.state.bullet_size, ** Processing line: ~ h: args.state.bullet_size,~ - Inside source: true *** True Line Result h: args.state.bullet_size, ** Processing line: ~ path: args.state.bullet_path,~ - Inside source: true *** True Line Result path: args.state.bullet_path, ** Processing line: ~ # Note that this makes it heat-seeking, because target is passed by reference~ - Inside source: true *** True Line Result # Note that this makes it heat-seeking, because target is passed by reference ** Processing line: ~ # Could do target.clone to make the bullet go to where the tank initially was~ - Inside source: true *** True Line Result # Could do target.clone to make the bullet go to where the tank initially was ** Processing line: ~ target: target~ - Inside source: true *** True Line Result target: target ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_bullets args~ - Inside source: true *** True Line Result def calc_bullets args ** Processing line: ~ # Bullets aim for the center of their targets~ - Inside source: true *** True Line Result # Bullets aim for the center of their targets ** Processing line: ~ args.state.bullets.each { |bullet| move bullet, center_of(bullet[:target])}~ - Inside source: true *** True Line Result args.state.bullets.each { |bullet| move bullet, center_of(bullet[:target])} ** Processing line: ~ args.state.bullets.reject! { |b| b.intersect_rect? b[:target] }~ - Inside source: true *** True Line Result args.state.bullets.reject! { |b| b.intersect_rect? b[:target] } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def center_of object~ - Inside source: true *** True Line Result def center_of object ** Processing line: ~ object = object.clone~ - Inside source: true *** True Line Result object = object.clone ** Processing line: ~ object[:x] += 0.5~ - Inside source: true *** True Line Result object[:x] += 0.5 ** Processing line: ~ object[:y] += 0.5~ - Inside source: true *** True Line Result object[:y] += 0.5 ** Processing line: ~ object~ - Inside source: true *** True Line Result object ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_a_star args~ - Inside source: true *** True Line Result def render_a_star args ** Processing line: ~ args.state.a_star.path.map do |tile|~ - Inside source: true *** True Line Result args.state.a_star.path.map do |tile| ** Processing line: ~ # Map each x, y coordinate to the center of the tile and scale up~ - Inside source: true *** True Line Result # Map each x, y coordinate to the center of the tile and scale up ** Processing line: ~ [(tile.x + 0.5) * args.state.tile_size, (tile.y + 0.5) * args.state.tile_size]~ - Inside source: true *** True Line Result [(tile.x + 0.5) * args.state.tile_size, (tile.y + 0.5) * args.state.tile_size] ** Processing line: ~ end.inject do | point_a, point_b |~ - Inside source: true *** True Line Result end.inject do | point_a, point_b | ** Processing line: ~ # Render the line between each point~ - Inside source: true *** True Line Result # Render the line between each point ** Processing line: ~ args.outputs.lines << [point_a.x, point_a.y, point_b.x, point_b.y, a_star_color]~ - Inside source: true *** True Line Result args.outputs.lines << [point_a.x, point_a.y, point_b.x, point_b.y, a_star_color] ** Processing line: ~ point_b~ - Inside source: true *** True Line Result point_b ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Moves object to target at speed~ - Inside source: true *** True Line Result # Moves object to target at speed ** Processing line: ~ def move object, target, speed = 1~ - Inside source: true *** True Line Result def move object, target, speed = 1 ** Processing line: ~ if target.is_a? Hash~ - Inside source: true *** True Line Result if target.is_a? Hash ** Processing line: ~ object[:x] += copy_sign(speed, target[:x] - object[:x])~ - Inside source: true *** True Line Result object[:x] += copy_sign(speed, target[:x] - object[:x]) ** Processing line: ~ object[:y] += copy_sign(speed, target[:y] - object[:y])~ - Inside source: true *** True Line Result object[:y] += copy_sign(speed, target[:y] - object[:y]) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ object[:x] += copy_sign(speed, target.x - object[:x])~ - Inside source: true *** True Line Result object[:x] += copy_sign(speed, target.x - object[:x]) ** Processing line: ~ object[:y] += copy_sign(speed, target.y - object[:y])~ - Inside source: true *** True Line Result object[:y] += copy_sign(speed, target.y - object[:y]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ def distance_between a_x, a_y, b_x, b_y~ - Inside source: true *** True Line Result def distance_between a_x, a_y, b_x, b_y ** Processing line: ~ (((b_x - a_x) ** 2) + ((b_y - a_y) ** 2)) ** 0.5~ - Inside source: true *** True Line Result (((b_x - a_x) ** 2) + ((b_y - a_y) ** 2)) ** 0.5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def copy_sign value, sign~ - Inside source: true *** True Line Result def copy_sign value, sign ** Processing line: ~ return 0 if sign == 0~ - Inside source: true *** True Line Result return 0 if sign == 0 ** Processing line: ~ return value if sign > 0~ - Inside source: true *** True Line Result return value if sign > 0 ** Processing line: ~ -value~ - Inside source: true *** True Line Result -value ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ def spawn_tank args~ - Inside source: true *** True Line Result def spawn_tank args ** Processing line: ~ return unless args.state.tick_count.mod_zero? args.state.tank_spawn_period~ - Inside source: true *** True Line Result return unless args.state.tick_count.mod_zero? args.state.tank_spawn_period ** Processing line: ~ args.state.tanks << {~ - Inside source: true *** True Line Result args.state.tanks << { ** Processing line: ~ x: args.state.grid_start.x,~ - Inside source: true *** True Line Result x: args.state.grid_start.x, ** Processing line: ~ y: args.state.grid_start.y,~ - Inside source: true *** True Line Result y: args.state.grid_start.y, ** Processing line: ~ w: args.state.tile_size,~ - Inside source: true *** True Line Result w: args.state.tile_size, ** Processing line: ~ h: args.state.tile_size,~ - Inside source: true *** True Line Result h: args.state.tile_size, ** Processing line: ~ path: args.state.tank_sprite_path,~ - Inside source: true *** True Line Result path: args.state.tank_sprite_path, ** Processing line: ~ a_star: args.state.a_star.path.clone~ - Inside source: true *** True Line Result a_star: args.state.a_star.path.clone ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def neighbors args, tile~ - Inside source: true *** True Line Result def neighbors args, tile ** Processing line: ~ [[tile.x, tile.y - 1],~ - Inside source: true *** True Line Result [[tile.x, tile.y - 1], ** Processing line: ~ [tile.x, tile.y + 1],~ - Inside source: true *** True Line Result [tile.x, tile.y + 1], ** Processing line: ~ [tile.x + 1, tile.y],~ - Inside source: true *** True Line Result [tile.x + 1, tile.y], ** Processing line: ~ [tile.x - 1, tile.y]].reject do | neighbor |~ - Inside source: true *** True Line Result [tile.x - 1, tile.y]].reject do | neighbor | ** Processing line: ~ args.state.a_star.came_from.has_key?(neighbor) or~ - Inside source: true *** True Line Result args.state.a_star.came_from.has_key?(neighbor) or ** Processing line: ~ tile_out_of_bounds?(args, neighbor) or~ - Inside source: true *** True Line Result tile_out_of_bounds?(args, neighbor) or ** Processing line: ~ args.state.walls.has_key? neighbor~ - Inside source: true *** True Line Result args.state.walls.has_key? neighbor ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tile_out_of_bounds? args, tile~ - Inside source: true *** True Line Result def tile_out_of_bounds? args, tile ** Processing line: ~ tile.x < 0 or tile.y < 0 or tile.x >= args.state.grid_size or tile.y >= args.state.grid_size~ - Inside source: true *** True Line Result tile.x < 0 or tile.y < 0 or tile.x >= args.state.grid_size or tile.y >= args.state.grid_size ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def grid_color~ - Inside source: true *** True Line Result def grid_color ** Processing line: ~ [133, 226, 144]~ - Inside source: true *** True Line Result [133, 226, 144] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def start_color~ - Inside source: true *** True Line Result def start_color ** Processing line: ~ [226, 144, 133]~ - Inside source: true *** True Line Result [226, 144, 133] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def goal_color~ - Inside source: true *** True Line Result def goal_color ** Processing line: ~ [226, 133, 144]~ - Inside source: true *** True Line Result [226, 133, 144] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def wall_color~ - Inside source: true *** True Line Result def wall_color ** Processing line: ~ [133, 144, 226]~ - Inside source: true *** True Line Result [133, 144, 226] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def a_star_color~ - Inside source: true *** True Line Result def a_star_color ** Processing line: ~ [0, 0, 255]~ - Inside source: true *** True Line Result [0, 0, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** 3d - 3d Cube - main.rb~ - Header detected. *** True Line Result *** True Line Result *** 3d - 3d Cube - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_3d/01_3d_cube/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_3d/01_3d_cube/app/main.rb ** Processing line: ~ STARTX = 0.0~ - Inside source: true *** True Line Result STARTX = 0.0 ** Processing line: ~ STARTY = 0.0~ - Inside source: true *** True Line Result STARTY = 0.0 ** Processing line: ~ ENDY = 20.0~ - Inside source: true *** True Line Result ENDY = 20.0 ** Processing line: ~ ENDX = 20.0~ - Inside source: true *** True Line Result ENDX = 20.0 ** Processing line: ~ SPINPOINT = 10~ - Inside source: true *** True Line Result SPINPOINT = 10 ** Processing line: ~ SPINDURATION = 400~ - Inside source: true *** True Line Result SPINDURATION = 400 ** Processing line: ~ POINTSIZE = 8~ - Inside source: true *** True Line Result POINTSIZE = 8 ** Processing line: ~ BOXDEPTH = 40~ - Inside source: true *** True Line Result BOXDEPTH = 40 ** Processing line: ~ YAW = 1~ - Inside source: true *** True Line Result YAW = 1 ** Processing line: ~ DISTANCE = 10~ - Inside source: true *** True Line Result DISTANCE = 10 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ a = Math.sin(args.state.tick_count / SPINDURATION) * Math.tan(args.state.tick_count / SPINDURATION)~ - Inside source: true *** True Line Result a = Math.sin(args.state.tick_count / SPINDURATION) * Math.tan(args.state.tick_count / SPINDURATION) ** Processing line: ~ s = Math.sin(a)~ - Inside source: true *** True Line Result s = Math.sin(a) ** Processing line: ~ c = Math.cos(a)~ - Inside source: true *** True Line Result c = Math.cos(a) ** Processing line: ~ x = STARTX~ - Inside source: true *** True Line Result x = STARTX ** Processing line: ~ y = STARTY~ - Inside source: true *** True Line Result y = STARTY ** Processing line: ~ offset_x = (1280 - (ENDX - STARTX)) / 2~ - Inside source: true *** True Line Result offset_x = (1280 - (ENDX - STARTX)) / 2 ** Processing line: ~ offset_y = (360 - (ENDY - STARTY)) / 2~ - Inside source: true *** True Line Result offset_y = (360 - (ENDY - STARTY)) / 2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ srand(1)~ - Inside source: true *** True Line Result srand(1) ** Processing line: ~ while y < ENDY do~ - Inside source: true *** True Line Result while y < ENDY do ** Processing line: ~ while x < ENDX do~ - Inside source: true *** True Line Result while x < ENDX do ** Processing line: ~ if (y == STARTY ||~ - Inside source: true *** True Line Result if (y == STARTY || ** Processing line: ~ y == (ENDY / 0.5) * 2 ||~ - Inside source: true *** True Line Result y == (ENDY / 0.5) * 2 || ** Processing line: ~ y == (ENDY / 0.5) * 2 + 0.5 ||~ - Inside source: true *** True Line Result y == (ENDY / 0.5) * 2 + 0.5 || ** Processing line: ~ y == ENDY - 0.5 ||~ - Inside source: true *** True Line Result y == ENDY - 0.5 || ** Processing line: ~ x == STARTX ||~ - Inside source: true *** True Line Result x == STARTX || ** Processing line: ~ x == ENDX - 0.5)~ - Inside source: true *** True Line Result x == ENDX - 0.5) ** Processing line: ~ z = rand(BOXDEPTH)~ - Inside source: true *** True Line Result z = rand(BOXDEPTH) ** Processing line: ~ z *= Math.sin(a / 2)~ - Inside source: true *** True Line Result z *= Math.sin(a / 2) ** Processing line: ~ x -= SPINPOINT~ - Inside source: true *** True Line Result x -= SPINPOINT ** Processing line: ~ u = (x * c) - (z * s)~ - Inside source: true *** True Line Result u = (x * c) - (z * s) ** Processing line: ~ v = (x * s) + (z * c)~ - Inside source: true *** True Line Result v = (x * s) + (z * c) ** Processing line: ~ k = DISTANCE.fdiv(100) + (v / 500 * YAW)~ - Inside source: true *** True Line Result k = DISTANCE.fdiv(100) + (v / 500 * YAW) ** Processing line: ~ u = u / k~ - Inside source: true *** True Line Result u = u / k ** Processing line: ~ v = y / k~ - Inside source: true *** True Line Result v = y / k ** Processing line: ~ w = POINTSIZE / 10 / k~ - Inside source: true *** True Line Result w = POINTSIZE / 10 / k ** Processing line: ~ args.outputs.sprites << { x: offset_x + u - w, y: offset_y + v - w, w: w, h: w, path: 'sprites/square-blue.png'}~ - Inside source: true *** True Line Result args.outputs.sprites << { x: offset_x + u - w, y: offset_y + v - w, w: w, h: w, path: 'sprites/square-blue.png'} ** Processing line: ~ x += SPINPOINT~ - Inside source: true *** True Line Result x += SPINPOINT ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ x += 0.5~ - Inside source: true *** True Line Result x += 0.5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ y += 0.5~ - Inside source: true *** True Line Result y += 0.5 ** Processing line: ~ x = STARTX~ - Inside source: true *** True Line Result x = STARTX ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** 3d - Wireframe - main.rb~ - Header detected. *** True Line Result *** True Line Result *** 3d - Wireframe - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_3d/02_wireframe/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_3d/02_wireframe/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.model ||= Object3D.new('data/shuttle.off')~ - Inside source: true *** True Line Result args.state.model ||= Object3D.new('data/shuttle.off') ** Processing line: ~ args.state.mtx ||= rotate3D(0, 0, 0)~ - Inside source: true *** True Line Result args.state.mtx ||= rotate3D(0, 0, 0) ** Processing line: ~ args.state.inv_mtx ||= rotate3D(0, 0, 0)~ - Inside source: true *** True Line Result args.state.inv_mtx ||= rotate3D(0, 0, 0) ** Processing line: ~ delta_mtx = rotate3D(args.inputs.up_down * 0.01, input_roll(args) * 0.01, args.inputs.left_right * 0.01)~ - Inside source: true *** True Line Result delta_mtx = rotate3D(args.inputs.up_down * 0.01, input_roll(args) * 0.01, args.inputs.left_right * 0.01) ** Processing line: ~ args.outputs.lines << args.state.model.edges~ - Inside source: true *** True Line Result args.outputs.lines << args.state.model.edges ** Processing line: ~ args.state.model.fast_3x3_transform! args.state.inv_mtx~ - Inside source: true *** True Line Result args.state.model.fast_3x3_transform! args.state.inv_mtx ** Processing line: ~ args.state.inv_mtx = mtx_mul(delta_mtx.transpose, args.state.inv_mtx)~ - Inside source: true *** True Line Result args.state.inv_mtx = mtx_mul(delta_mtx.transpose, args.state.inv_mtx) ** Processing line: ~ args.state.mtx = mtx_mul(args.state.mtx, delta_mtx)~ - Inside source: true *** True Line Result args.state.mtx = mtx_mul(args.state.mtx, delta_mtx) ** Processing line: ~ args.state.model.fast_3x3_transform! args.state.mtx~ - Inside source: true *** True Line Result args.state.model.fast_3x3_transform! args.state.mtx ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ args.outputs.debug << args.gtk.framerate_diagnostics_primitives~ - Inside source: true *** True Line Result args.outputs.debug << args.gtk.framerate_diagnostics_primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_roll args~ - Inside source: true *** True Line Result def input_roll args ** Processing line: ~ roll = 0~ - Inside source: true *** True Line Result roll = 0 ** Processing line: ~ roll += 1 if args.inputs.keyboard.e~ - Inside source: true *** True Line Result roll += 1 if args.inputs.keyboard.e ** Processing line: ~ roll -= 1 if args.inputs.keyboard.q~ - Inside source: true *** True Line Result roll -= 1 if args.inputs.keyboard.q ** Processing line: ~ roll~ - Inside source: true *** True Line Result roll ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rotate3D(theta_x = 0.1, theta_y = 0.1, theta_z = 0.1)~ - Inside source: true *** True Line Result def rotate3D(theta_x = 0.1, theta_y = 0.1, theta_z = 0.1) ** Processing line: ~ c_x, s_x = Math.cos(theta_x), Math.sin(theta_x)~ - Inside source: true *** True Line Result c_x, s_x = Math.cos(theta_x), Math.sin(theta_x) ** Processing line: ~ c_y, s_y = Math.cos(theta_y), Math.sin(theta_y)~ - Inside source: true *** True Line Result c_y, s_y = Math.cos(theta_y), Math.sin(theta_y) ** Processing line: ~ c_z, s_z = Math.cos(theta_z), Math.sin(theta_z)~ - Inside source: true *** True Line Result c_z, s_z = Math.cos(theta_z), Math.sin(theta_z) ** Processing line: ~ rot_x = [[1, 0, 0], [0, c_x, -s_x], [0, s_x, c_x]]~ - Inside source: true *** True Line Result rot_x = [[1, 0, 0], [0, c_x, -s_x], [0, s_x, c_x]] ** Processing line: ~ rot_y = [[c_y, 0, s_y], [0, 1, 0], [-s_y, 0, c_y]]~ - Inside source: true *** True Line Result rot_y = [[c_y, 0, s_y], [0, 1, 0], [-s_y, 0, c_y]] ** Processing line: ~ rot_z = [[c_z, -s_z, 0], [s_z, c_z, 0], [0, 0, 1]]~ - Inside source: true *** True Line Result rot_z = [[c_z, -s_z, 0], [s_z, c_z, 0], [0, 0, 1]] ** Processing line: ~ mtx_mul(mtx_mul(rot_x, rot_y), rot_z)~ - Inside source: true *** True Line Result mtx_mul(mtx_mul(rot_x, rot_y), rot_z) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mtx_mul(a, b)~ - Inside source: true *** True Line Result def mtx_mul(a, b) ** Processing line: ~ is = (0...a.length)~ - Inside source: true *** True Line Result is = (0...a.length) ** Processing line: ~ js = (0...b[0].length)~ - Inside source: true *** True Line Result js = (0...b[0].length) ** Processing line: ~ ks = (0...b.length)~ - Inside source: true *** True Line Result ks = (0...b.length) ** Processing line: ~ is.map do |i|~ - Inside source: true *** True Line Result is.map do |i| ** Processing line: ~ js.map do |j|~ - Inside source: true *** True Line Result js.map do |j| ** Processing line: ~ ks.map do |k|~ - Inside source: true *** True Line Result ks.map do |k| ** Processing line: ~ a[i][k] * b[k][j]~ - Inside source: true *** True Line Result a[i][k] * b[k][j] ** Processing line: ~ end.reduce(&:plus)~ - Inside source: true *** True Line Result end.reduce(&:plus) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Object3D~ - Inside source: true *** True Line Result class Object3D ** Processing line: ~ attr_reader :vert_count, :face_count, :edge_count, :verts, :faces, :edges~ - Inside source: true *** True Line Result attr_reader :vert_count, :face_count, :edge_count, :verts, :faces, :edges ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize(path)~ - Inside source: true *** True Line Result def initialize(path) ** Processing line: ~ @vert_count = 0~ - Inside source: true *** True Line Result @vert_count = 0 ** Processing line: ~ @face_count = 0~ - Inside source: true *** True Line Result @face_count = 0 ** Processing line: ~ @edge_count = 0~ - Inside source: true *** True Line Result @edge_count = 0 ** Processing line: ~ @verts = []~ - Inside source: true *** True Line Result @verts = [] ** Processing line: ~ @faces = []~ - Inside source: true *** True Line Result @faces = [] ** Processing line: ~ @edges = []~ - Inside source: true *** True Line Result @edges = [] ** Processing line: ~ _init_from_file path~ - Inside source: true *** True Line Result _init_from_file path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def _init_from_file path~ - Inside source: true *** True Line Result def _init_from_file path ** Processing line: ~ file_lines = $gtk.read_file(path).split("\n")~ - Inside source: true *** True Line Result file_lines = $gtk.read_file(path).split("\n") ** Processing line: ~ .reject { |line| line.start_with?('#') || line.split(' ').length == 0 } # Strip out simple comments and blank lines~ - Inside source: true *** True Line Result .reject { |line| line.start_with?('#') || line.split(' ').length == 0 } # Strip out simple comments and blank lines ** Processing line: ~ .map { |line| line.split('#')[0] } # Strip out end of line comments~ - Inside source: true *** True Line Result .map { |line| line.split('#')[0] } # Strip out end of line comments ** Processing line: ~ .map { |line| line.split(' ') } # Tokenize by splitting on whitespace~ - Inside source: true *** True Line Result .map { |line| line.split(' ') } # Tokenize by splitting on whitespace ** Processing line: ~ raise "OFF file did not start with OFF." if file_lines.shift != ["OFF"] # OFF meshes are supposed to begin with "OFF" as the first line.~ - Inside source: true *** True Line Result raise "OFF file did not start with OFF." if file_lines.shift != ["OFF"] # OFF meshes are supposed to begin with "OFF" as the first line. ** Processing line: ~ raise " line malformed" if file_lines[0].length != 3 # The second line needs to have 3 numbers. Raise an error if it doesn't.~ - Inside source: true *** True Line Result raise " line malformed" if file_lines[0].length != 3 # The second line needs to have 3 numbers. Raise an error if it doesn't. ** Processing line: ~ @vert_count, @face_count, @edge_count = file_lines.shift&.map(&:to_i) # Update the counts~ - Inside source: true *** True Line Result @vert_count, @face_count, @edge_count = file_lines.shift&.map(&:to_i) # Update the counts ** Processing line: ~ # Only the vertex and face counts need to be accurate. Raise an error if they are inaccurate.~ - Inside source: true *** True Line Result # Only the vertex and face counts need to be accurate. Raise an error if they are inaccurate. ** Processing line: ~ raise "Incorrect number of vertices and/or faces (Parsed VFE header: #{@vert_count} #{@face_count} #{@edge_count})" if file_lines.length != @vert_count + @face_count~ - Inside source: true *** True Line Result raise "Incorrect number of vertices and/or faces (Parsed VFE header: #{@vert_count} #{@face_count} #{@edge_count})" if file_lines.length != @vert_count + @face_count ** Processing line: ~ # Grab all the lines describing vertices.~ - Inside source: true *** True Line Result # Grab all the lines describing vertices. ** Processing line: ~ vert_lines = file_lines[0, @vert_count]~ - Inside source: true *** True Line Result vert_lines = file_lines[0, @vert_count] ** Processing line: ~ # Grab all the lines describing faces.~ - Inside source: true *** True Line Result # Grab all the lines describing faces. ** Processing line: ~ face_lines = file_lines[@vert_count, @face_count]~ - Inside source: true *** True Line Result face_lines = file_lines[@vert_count, @face_count] ** Processing line: ~ # Create all the vertices~ - Inside source: true *** True Line Result # Create all the vertices ** Processing line: ~ @verts = vert_lines.map_with_index { |line, id| Vertex.new(line, id) }~ - Inside source: true *** True Line Result @verts = vert_lines.map_with_index { |line, id| Vertex.new(line, id) } ** Processing line: ~ # Create all the faces~ - Inside source: true *** True Line Result # Create all the faces ** Processing line: ~ @faces = face_lines.map { |line| Face.new(line, @verts) }~ - Inside source: true *** True Line Result @faces = face_lines.map { |line| Face.new(line, @verts) } ** Processing line: ~ # Create all the edges~ - Inside source: true *** True Line Result # Create all the edges ** Processing line: ~ @edges = @faces.flat_map(&:edges).uniq do |edge|~ - Inside source: true *** True Line Result @edges = @faces.flat_map(&:edges).uniq do |edge| ** Processing line: ~ sorted = edge.sorted~ - Inside source: true *** True Line Result sorted = edge.sorted ** Processing line: ~ [sorted.point_a, sorted.point_b]~ - Inside source: true *** True Line Result [sorted.point_a, sorted.point_b] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def fast_3x3_transform! mtx~ - Inside source: true *** True Line Result def fast_3x3_transform! mtx ** Processing line: ~ @verts.each { |vert| vert.fast_3x3_transform! mtx }~ - Inside source: true *** True Line Result @verts.each { |vert| vert.fast_3x3_transform! mtx } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Face~ - Inside source: true *** True Line Result class Face ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ attr_reader :verts, :edges~ - Inside source: true *** True Line Result attr_reader :verts, :edges ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize(data, verts)~ - Inside source: true *** True Line Result def initialize(data, verts) ** Processing line: ~ vert_count = data[0].to_i~ - Inside source: true *** True Line Result vert_count = data[0].to_i ** Processing line: ~ vert_ids = data[1, vert_count].map(&:to_i)~ - Inside source: true *** True Line Result vert_ids = data[1, vert_count].map(&:to_i) ** Processing line: ~ @verts = vert_ids.map { |i| verts[i] }~ - Inside source: true *** True Line Result @verts = vert_ids.map { |i| verts[i] } ** Processing line: ~ @edges = []~ - Inside source: true *** True Line Result @edges = [] ** Processing line: ~ (0...vert_count).each { |i| @edges[i] = Edge.new(verts[vert_ids[i - 1]], verts[vert_ids[i]]) }~ - Inside source: true *** True Line Result (0...vert_count).each { |i| @edges[i] = Edge.new(verts[vert_ids[i - 1]], verts[vert_ids[i]]) } ** Processing line: ~ @edges.rotate! 1~ - Inside source: true *** True Line Result @edges.rotate! 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Edge~ - Inside source: true *** True Line Result class Edge ** Processing line: ~ attr_reader :point_a, :point_b~ - Inside source: true *** True Line Result attr_reader :point_a, :point_b ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize(point_a, point_b)~ - Inside source: true *** True Line Result def initialize(point_a, point_b) ** Processing line: ~ @point_a = point_a~ - Inside source: true *** True Line Result @point_a = point_a ** Processing line: ~ @point_b = point_b~ - Inside source: true *** True Line Result @point_b = point_b ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def sorted~ - Inside source: true *** True Line Result def sorted ** Processing line: ~ @point_a.id < @point_b.id ? self : Edge.new(@point_b, @point_a)~ - Inside source: true *** True Line Result @point_a.id < @point_b.id ? self : Edge.new(@point_b, @point_a) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw_override ffi~ - Inside source: true *** True Line Result def draw_override ffi ** Processing line: ~ ffi.draw_line(@point_a.render_x, @point_a.render_y, @point_b.render_x, @point_b.render_y, 255, 0, 0, 128)~ - Inside source: true *** True Line Result ffi.draw_line(@point_a.render_x, @point_a.render_y, @point_b.render_x, @point_b.render_y, 255, 0, 0, 128) ** Processing line: ~ ffi.draw_line(@point_a.render_x+1, @point_a.render_y, @point_b.render_x+1, @point_b.render_y, 255, 0, 0, 128)~ - Inside source: true *** True Line Result ffi.draw_line(@point_a.render_x+1, @point_a.render_y, @point_b.render_x+1, @point_b.render_y, 255, 0, 0, 128) ** Processing line: ~ ffi.draw_line(@point_a.render_x, @point_a.render_y+1, @point_b.render_x, @point_b.render_y+1, 255, 0, 0, 128)~ - Inside source: true *** True Line Result ffi.draw_line(@point_a.render_x, @point_a.render_y+1, @point_b.render_x, @point_b.render_y+1, 255, 0, 0, 128) ** Processing line: ~ ffi.draw_line(@point_a.render_x+1, @point_a.render_y+1, @point_b.render_x+1, @point_b.render_y+1, 255, 0, 0, 128)~ - Inside source: true *** True Line Result ffi.draw_line(@point_a.render_x+1, @point_a.render_y+1, @point_b.render_x+1, @point_b.render_y+1, 255, 0, 0, 128) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def primitive_marker~ - Inside source: true *** True Line Result def primitive_marker ** Processing line: ~ :line~ - Inside source: true *** True Line Result :line ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Vertex~ - Inside source: true *** True Line Result class Vertex ** Processing line: ~ attr_accessor :x, :y, :z, :id~ - Inside source: true *** True Line Result attr_accessor :x, :y, :z, :id ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize(data, id)~ - Inside source: true *** True Line Result def initialize(data, id) ** Processing line: ~ @x = data[0].to_f~ - Inside source: true *** True Line Result @x = data[0].to_f ** Processing line: ~ @y = data[1].to_f~ - Inside source: true *** True Line Result @y = data[1].to_f ** Processing line: ~ @z = data[2].to_f~ - Inside source: true *** True Line Result @z = data[2].to_f ** Processing line: ~ @id = id~ - Inside source: true *** True Line Result @id = id ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def fast_3x3_transform! mtx~ - Inside source: true *** True Line Result def fast_3x3_transform! mtx ** Processing line: ~ _x, _y, _z = @x, @y, @z~ - Inside source: true *** True Line Result _x, _y, _z = @x, @y, @z ** Processing line: ~ @x = mtx[0][0] * _x + mtx[0][1] * _y + mtx[0][2] * _z~ - Inside source: true *** True Line Result @x = mtx[0][0] * _x + mtx[0][1] * _y + mtx[0][2] * _z ** Processing line: ~ @y = mtx[1][0] * _x + mtx[1][1] * _y + mtx[1][2] * _z~ - Inside source: true *** True Line Result @y = mtx[1][0] * _x + mtx[1][1] * _y + mtx[1][2] * _z ** Processing line: ~ @z = mtx[2][0] * _x + mtx[2][1] * _y + mtx[2][2] * _z~ - Inside source: true *** True Line Result @z = mtx[2][0] * _x + mtx[2][1] * _y + mtx[2][2] * _z ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_x~ - Inside source: true *** True Line Result def render_x ** Processing line: ~ @x * (10 / (5 - @y)) * 170 + 640~ - Inside source: true *** True Line Result @x * (10 / (5 - @y)) * 170 + 640 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_y~ - Inside source: true *** True Line Result def render_y ** Processing line: ~ @z * (10 / (5 - @y)) * 170 + 360~ - Inside source: true *** True Line Result @z * (10 / (5 - @y)) * 170 + 360 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** 3d - Wireframe - Data - what-is-this.txt~ - Header detected. *** True Line Result *** True Line Result *** 3d - Wireframe - Data - what-is-this.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_3d/02_wireframe/data/what-is-this.txt~ - Inside source: true *** True Line Result # ./samples/99_genre_3d/02_wireframe/data/what-is-this.txt ** Processing line: ~ https://en.wikipedia.org/wiki/OFF_(file_format)~ - Inside source: true *** True Line Result https://en.wikipedia.org/wiki/OFF_(file_format) ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** 3d - Yaw Pitch Roll - main.rb~ - Header detected. *** True Line Result *** True Line Result *** 3d - Yaw Pitch Roll - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_3d/03_yaw_pitch_roll/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_3d/03_yaw_pitch_roll/app/main.rb ** Processing line: ~ class Game~ - Inside source: true *** True Line Result class Game ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def matrix_mul m, v~ - Inside source: true *** True Line Result def matrix_mul m, v ** Processing line: ~ (hmap x: ((m.x.x * v.x) + (m.x.y * v.y) + (m.x.z * v.z) + (m.x.w * v.w)),~ - Inside source: true *** True Line Result (hmap x: ((m.x.x * v.x) + (m.x.y * v.y) + (m.x.z * v.z) + (m.x.w * v.w)), ** Processing line: ~ y: ((m.y.x * v.x) + (m.y.y * v.y) + (m.y.z * v.z) + (m.y.w * v.w)),~ - Inside source: true *** True Line Result y: ((m.y.x * v.x) + (m.y.y * v.y) + (m.y.z * v.z) + (m.y.w * v.w)), ** Processing line: ~ z: ((m.z.x * v.x) + (m.z.y * v.y) + (m.z.z * v.z) + (m.z.w * v.w)),~ - Inside source: true *** True Line Result z: ((m.z.x * v.x) + (m.z.y * v.y) + (m.z.z * v.z) + (m.z.w * v.w)), ** Processing line: ~ w: ((m.w.x * v.x) + (m.w.y * v.y) + (m.w.z * v.z) + (m.w.w * v.w)))~ - Inside source: true *** True Line Result w: ((m.w.x * v.x) + (m.w.y * v.y) + (m.w.z * v.z) + (m.w.w * v.w))) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_ship~ - Inside source: true *** True Line Result def player_ship ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ # engine back~ - Inside source: true *** True Line Result # engine back ** Processing line: ~ { x: -1, y: -1, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: -1, z: 1, w: 0 }, ** Processing line: ~ { x: -1, y: 1, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: 1, z: 1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -1, y: 1, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: 1, z: 1, w: 0 }, ** Processing line: ~ { x: 1, y: 1, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: 1, z: 1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 1, y: 1, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: 1, z: 1, w: 0 }, ** Processing line: ~ { x: 1, y: -1, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: -1, z: 1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 1, y: -1, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: -1, z: 1, w: 0 }, ** Processing line: ~ { x: -1, y: -1, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: -1, z: 1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # engine front~ - Inside source: true *** True Line Result # engine front ** Processing line: ~ { x: -1, y: -1, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: -1, z: -1, w: 0 }, ** Processing line: ~ { x: -1, y: 1, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: 1, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -1, y: 1, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: 1, z: -1, w: 0 }, ** Processing line: ~ { x: 1, y: 1, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: 1, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 1, y: 1, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: 1, z: -1, w: 0 }, ** Processing line: ~ { x: 1, y: -1, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: -1, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 1, y: -1, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: -1, z: -1, w: 0 }, ** Processing line: ~ { x: -1, y: -1, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: -1, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # engine left~ - Inside source: true *** True Line Result # engine left ** Processing line: ~ { x: -1, z: -1, y: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, z: -1, y: -1, w: 0 }, ** Processing line: ~ { x: -1, z: -1, y: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, z: -1, y: 1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -1, z: -1, y: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, z: -1, y: 1, w: 0 }, ** Processing line: ~ { x: -1, z: 1, y: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, z: 1, y: 1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -1, z: 1, y: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, z: 1, y: 1, w: 0 }, ** Processing line: ~ { x: -1, z: 1, y: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, z: 1, y: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -1, z: 1, y: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, z: 1, y: -1, w: 0 }, ** Processing line: ~ { x: -1, z: -1, y: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, z: -1, y: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # engine right~ - Inside source: true *** True Line Result # engine right ** Processing line: ~ { x: 1, z: -1, y: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, z: -1, y: -1, w: 0 }, ** Processing line: ~ { x: 1, z: -1, y: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, z: -1, y: 1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 1, z: -1, y: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, z: -1, y: 1, w: 0 }, ** Processing line: ~ { x: 1, z: 1, y: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, z: 1, y: 1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 1, z: 1, y: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, z: 1, y: 1, w: 0 }, ** Processing line: ~ { x: 1, z: 1, y: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, z: 1, y: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 1, z: 1, y: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, z: 1, y: -1, w: 0 }, ** Processing line: ~ { x: 1, z: -1, y: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, z: -1, y: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # top front of engine to front of ship~ - Inside source: true *** True Line Result # top front of engine to front of ship ** Processing line: ~ { x: 1, y: 1, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: 1, z: 1, w: 0 }, ** Processing line: ~ { x: 0, y: -1, z: 9, w: 0 },~ - Inside source: true *** True Line Result { x: 0, y: -1, z: 9, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 0, y: -1, z: 9, w: 0 },~ - Inside source: true *** True Line Result { x: 0, y: -1, z: 9, w: 0 }, ** Processing line: ~ { x: -1, y: 1, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: 1, z: 1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # bottom front of engine~ - Inside source: true *** True Line Result # bottom front of engine ** Processing line: ~ { x: 1, y: -1, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: -1, z: 1, w: 0 }, ** Processing line: ~ { x: 0, y: -1, z: 9, w: 0 },~ - Inside source: true *** True Line Result { x: 0, y: -1, z: 9, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -1, y: -1, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: -1, z: 1, w: 0 }, ** Processing line: ~ { x: 0, y: -1, z: 9, w: 0 },~ - Inside source: true *** True Line Result { x: 0, y: -1, z: 9, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # right wing~ - Inside source: true *** True Line Result # right wing ** Processing line: ~ # front of wing~ - Inside source: true *** True Line Result # front of wing ** Processing line: ~ { x: 1, y: 0.10, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: 0.10, z: 1, w: 0 }, ** Processing line: ~ { x: 9, y: 0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 9, y: 0.10, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 9, y: 0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 9, y: 0.10, z: -1, w: 0 }, ** Processing line: ~ { x: 10, y: 0.10, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: 10, y: 0.10, z: -2, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # back of wing~ - Inside source: true *** True Line Result # back of wing ** Processing line: ~ { x: 1, y: 0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: 0.10, z: -1, w: 0 }, ** Processing line: ~ { x: 9, y: 0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 9, y: 0.10, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 10, y: 0.10, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: 10, y: 0.10, z: -2, w: 0 }, ** Processing line: ~ { x: 8, y: 0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 8, y: 0.10, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # front of wing~ - Inside source: true *** True Line Result # front of wing ** Processing line: ~ { x: 1, y: -0.10, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: -0.10, z: 1, w: 0 }, ** Processing line: ~ { x: 9, y: -0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 9, y: -0.10, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 9, y: -0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 9, y: -0.10, z: -1, w: 0 }, ** Processing line: ~ { x: 10, y: -0.10, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: 10, y: -0.10, z: -2, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # back of wing~ - Inside source: true *** True Line Result # back of wing ** Processing line: ~ { x: 1, y: -0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: -0.10, z: -1, w: 0 }, ** Processing line: ~ { x: 9, y: -0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 9, y: -0.10, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 10, y: -0.10, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: 10, y: -0.10, z: -2, w: 0 }, ** Processing line: ~ { x: 8, y: -0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 8, y: -0.10, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # left wing~ - Inside source: true *** True Line Result # left wing ** Processing line: ~ # front of wing~ - Inside source: true *** True Line Result # front of wing ** Processing line: ~ { x: -1, y: 0.10, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: 0.10, z: 1, w: 0 }, ** Processing line: ~ { x: -9, y: 0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -9, y: 0.10, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -9, y: 0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -9, y: 0.10, z: -1, w: 0 }, ** Processing line: ~ { x: -10, y: 0.10, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: -10, y: 0.10, z: -2, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # back of wing~ - Inside source: true *** True Line Result # back of wing ** Processing line: ~ { x: -1, y: 0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: 0.10, z: -1, w: 0 }, ** Processing line: ~ { x: -9, y: 0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -9, y: 0.10, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -10, y: 0.10, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: -10, y: 0.10, z: -2, w: 0 }, ** Processing line: ~ { x: -8, y: 0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -8, y: 0.10, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # front of wing~ - Inside source: true *** True Line Result # front of wing ** Processing line: ~ { x: -1, y: -0.10, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: -0.10, z: 1, w: 0 }, ** Processing line: ~ { x: -9, y: -0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -9, y: -0.10, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -9, y: -0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -9, y: -0.10, z: -1, w: 0 }, ** Processing line: ~ { x: -10, y: -0.10, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: -10, y: -0.10, z: -2, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # back of wing~ - Inside source: true *** True Line Result # back of wing ** Processing line: ~ { x: -1, y: -0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: -0.10, z: -1, w: 0 }, ** Processing line: ~ { x: -9, y: -0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -9, y: -0.10, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -10, y: -0.10, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: -10, y: -0.10, z: -2, w: 0 }, ** Processing line: ~ { x: -8, y: -0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -8, y: -0.10, z: -1, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # left fin~ - Inside source: true *** True Line Result # left fin ** Processing line: ~ # top~ - Inside source: true *** True Line Result # top ** Processing line: ~ { x: -1, y: 0.10, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: 0.10, z: 1, w: 0 }, ** Processing line: ~ { x: -1, y: 3, z: -3, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: 3, z: -3, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -1, y: 0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: 0.10, z: -1, w: 0 }, ** Processing line: ~ { x: -1, y: 3, z: -3, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: 3, z: -3, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -1.1, y: 0.10, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1.1, y: 0.10, z: 1, w: 0 }, ** Processing line: ~ { x: -1.1, y: 3, z: -3, w: 0 },~ - Inside source: true *** True Line Result { x: -1.1, y: 3, z: -3, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -1.1, y: 0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -1.1, y: 0.10, z: -1, w: 0 }, ** Processing line: ~ { x: -1.1, y: 3, z: -3, w: 0 },~ - Inside source: true *** True Line Result { x: -1.1, y: 3, z: -3, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # bottom~ - Inside source: true *** True Line Result # bottom ** Processing line: ~ { x: -1, y: -0.10, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: -0.10, z: 1, w: 0 }, ** Processing line: ~ { x: -1, y: -2, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: -2, z: -2, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -1, y: -0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: -0.10, z: -1, w: 0 }, ** Processing line: ~ { x: -1, y: -2, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: -1, y: -2, z: -2, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -1.1, y: -0.10, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: -1.1, y: -0.10, z: 1, w: 0 }, ** Processing line: ~ { x: -1.1, y: -2, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: -1.1, y: -2, z: -2, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: -1.1, y: -0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: -1.1, y: -0.10, z: -1, w: 0 }, ** Processing line: ~ { x: -1.1, y: -2, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: -1.1, y: -2, z: -2, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # right fin~ - Inside source: true *** True Line Result # right fin ** Processing line: ~ { x: 1, y: 0.10, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: 0.10, z: 1, w: 0 }, ** Processing line: ~ { x: 1, y: 3, z: -3, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: 3, z: -3, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 1, y: 0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: 0.10, z: -1, w: 0 }, ** Processing line: ~ { x: 1, y: 3, z: -3, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: 3, z: -3, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 1.1, y: 0.10, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1.1, y: 0.10, z: 1, w: 0 }, ** Processing line: ~ { x: 1.1, y: 3, z: -3, w: 0 },~ - Inside source: true *** True Line Result { x: 1.1, y: 3, z: -3, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 1.1, y: 0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 1.1, y: 0.10, z: -1, w: 0 }, ** Processing line: ~ { x: 1.1, y: 3, z: -3, w: 0 },~ - Inside source: true *** True Line Result { x: 1.1, y: 3, z: -3, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # bottom~ - Inside source: true *** True Line Result # bottom ** Processing line: ~ { x: 1, y: -0.10, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: -0.10, z: 1, w: 0 }, ** Processing line: ~ { x: 1, y: -2, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: -2, z: -2, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 1, y: -0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: -0.10, z: -1, w: 0 }, ** Processing line: ~ { x: 1, y: -2, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: 1, y: -2, z: -2, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 1.1, y: -0.10, z: 1, w: 0 },~ - Inside source: true *** True Line Result { x: 1.1, y: -0.10, z: 1, w: 0 }, ** Processing line: ~ { x: 1.1, y: -2, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: 1.1, y: -2, z: -2, w: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: 1.1, y: -0.10, z: -1, w: 0 },~ - Inside source: true *** True Line Result { x: 1.1, y: -0.10, z: -1, w: 0 }, ** Processing line: ~ { x: 1.1, y: -2, z: -2, w: 0 },~ - Inside source: true *** True Line Result { x: 1.1, y: -2, z: -2, w: 0 }, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ state.points ||= player_ship~ - Inside source: true *** True Line Result state.points ||= player_ship ** Processing line: ~ state.shifted_points ||= state.points.map { |point| point }~ - Inside source: true *** True Line Result state.shifted_points ||= state.points.map { |point| point } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.scale ||= 1~ - Inside source: true *** True Line Result state.scale ||= 1 ** Processing line: ~ state.angle_x ||= 0~ - Inside source: true *** True Line Result state.angle_x ||= 0 ** Processing line: ~ state.angle_y ||= 0~ - Inside source: true *** True Line Result state.angle_y ||= 0 ** Processing line: ~ state.angle_z ||= 0~ - Inside source: true *** True Line Result state.angle_z ||= 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def matrix_new x0, y0, z0, w0, x1, y1, z1, w1, x2, y2, z2, w2, x3, y3, z3, w3~ - Inside source: true *** True Line Result def matrix_new x0, y0, z0, w0, x1, y1, z1, w1, x2, y2, z2, w2, x3, y3, z3, w3 ** Processing line: ~ (hmap x: (hmap x: x0, y: y0, z: z0, w: w0),~ - Inside source: true *** True Line Result (hmap x: (hmap x: x0, y: y0, z: z0, w: w0), ** Processing line: ~ y: (hmap x: x1, y: y1, z: z1, w: w1),~ - Inside source: true *** True Line Result y: (hmap x: x1, y: y1, z: z1, w: w1), ** Processing line: ~ z: (hmap x: x2, y: y2, z: z2, w: w2),~ - Inside source: true *** True Line Result z: (hmap x: x2, y: y2, z: z2, w: w2), ** Processing line: ~ w: (hmap x: x3, y: y3, z: z3, w: w3))~ - Inside source: true *** True Line Result w: (hmap x: x3, y: y3, z: z3, w: w3)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def angle_z_matrix degrees~ - Inside source: true *** True Line Result def angle_z_matrix degrees ** Processing line: ~ cos_t = Math.cos degrees.to_radians~ - Inside source: true *** True Line Result cos_t = Math.cos degrees.to_radians ** Processing line: ~ sin_t = Math.sin degrees.to_radians~ - Inside source: true *** True Line Result sin_t = Math.sin degrees.to_radians ** Processing line: ~ (matrix_new cos_t, -sin_t, 0, 0,~ - Inside source: true *** True Line Result (matrix_new cos_t, -sin_t, 0, 0, ** Processing line: ~ sin_t, cos_t, 0, 0,~ - Inside source: true *** True Line Result sin_t, cos_t, 0, 0, ** Processing line: ~ 0, 0, 1, 0,~ - Inside source: true *** True Line Result 0, 0, 1, 0, ** Processing line: ~ 0, 0, 0, 1)~ - Inside source: true *** True Line Result 0, 0, 0, 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def angle_y_matrix degrees~ - Inside source: true *** True Line Result def angle_y_matrix degrees ** Processing line: ~ cos_t = Math.cos degrees.to_radians~ - Inside source: true *** True Line Result cos_t = Math.cos degrees.to_radians ** Processing line: ~ sin_t = Math.sin degrees.to_radians~ - Inside source: true *** True Line Result sin_t = Math.sin degrees.to_radians ** Processing line: ~ (matrix_new cos_t, 0, sin_t, 0,~ - Inside source: true *** True Line Result (matrix_new cos_t, 0, sin_t, 0, ** Processing line: ~ 0, 1, 0, 0,~ - Inside source: true *** True Line Result 0, 1, 0, 0, ** Processing line: ~ -sin_t, 0, cos_t, 0,~ - Inside source: true *** True Line Result -sin_t, 0, cos_t, 0, ** Processing line: ~ 0, 0, 0, 1)~ - Inside source: true *** True Line Result 0, 0, 0, 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def angle_x_matrix degrees~ - Inside source: true *** True Line Result def angle_x_matrix degrees ** Processing line: ~ cos_t = Math.cos degrees.to_radians~ - Inside source: true *** True Line Result cos_t = Math.cos degrees.to_radians ** Processing line: ~ sin_t = Math.sin degrees.to_radians~ - Inside source: true *** True Line Result sin_t = Math.sin degrees.to_radians ** Processing line: ~ (matrix_new 1, 0, 0, 0,~ - Inside source: true *** True Line Result (matrix_new 1, 0, 0, 0, ** Processing line: ~ 0, cos_t, -sin_t, 0,~ - Inside source: true *** True Line Result 0, cos_t, -sin_t, 0, ** Processing line: ~ 0, sin_t, cos_t, 0,~ - Inside source: true *** True Line Result 0, sin_t, cos_t, 0, ** Processing line: ~ 0, 0, 0, 1)~ - Inside source: true *** True Line Result 0, 0, 0, 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def scale_matrix factor~ - Inside source: true *** True Line Result def scale_matrix factor ** Processing line: ~ (matrix_new factor, 0, 0, 0,~ - Inside source: true *** True Line Result (matrix_new factor, 0, 0, 0, ** Processing line: ~ 0, factor, 0, 0,~ - Inside source: true *** True Line Result 0, factor, 0, 0, ** Processing line: ~ 0, 0, factor, 0,~ - Inside source: true *** True Line Result 0, 0, factor, 0, ** Processing line: ~ 0, 0, 0, 1)~ - Inside source: true *** True Line Result 0, 0, 0, 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ if (inputs.keyboard.shift && inputs.keyboard.p)~ - Inside source: true *** True Line Result if (inputs.keyboard.shift && inputs.keyboard.p) ** Processing line: ~ state.scale -= 0.1~ - Inside source: true *** True Line Result state.scale -= 0.1 ** Processing line: ~ elsif inputs.keyboard.p~ - Inside source: true *** True Line Result elsif inputs.keyboard.p ** Processing line: ~ state.scale += 0.1~ - Inside source: true *** True Line Result state.scale += 0.1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.mouse.wheel~ - Inside source: true *** True Line Result if inputs.mouse.wheel ** Processing line: ~ state.scale += inputs.mouse.wheel.y~ - Inside source: true *** True Line Result state.scale += inputs.mouse.wheel.y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.scale = state.scale.clamp(0.1, 1000)~ - Inside source: true *** True Line Result state.scale = state.scale.clamp(0.1, 1000) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (inputs.keyboard.shift && inputs.keyboard.y) || inputs.keyboard.right~ - Inside source: true *** True Line Result if (inputs.keyboard.shift && inputs.keyboard.y) || inputs.keyboard.right ** Processing line: ~ state.angle_y += 1~ - Inside source: true *** True Line Result state.angle_y += 1 ** Processing line: ~ elsif (inputs.keyboard.y) || inputs.keyboard.left~ - Inside source: true *** True Line Result elsif (inputs.keyboard.y) || inputs.keyboard.left ** Processing line: ~ state.angle_y -= 1~ - Inside source: true *** True Line Result state.angle_y -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (inputs.keyboard.shift && inputs.keyboard.x) || inputs.keyboard.down~ - Inside source: true *** True Line Result if (inputs.keyboard.shift && inputs.keyboard.x) || inputs.keyboard.down ** Processing line: ~ state.angle_x -= 1~ - Inside source: true *** True Line Result state.angle_x -= 1 ** Processing line: ~ elsif (inputs.keyboard.x || inputs.keyboard.up)~ - Inside source: true *** True Line Result elsif (inputs.keyboard.x || inputs.keyboard.up) ** Processing line: ~ state.angle_x += 1~ - Inside source: true *** True Line Result state.angle_x += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.shift && inputs.keyboard.z~ - Inside source: true *** True Line Result if inputs.keyboard.shift && inputs.keyboard.z ** Processing line: ~ state.angle_z += 1~ - Inside source: true *** True Line Result state.angle_z += 1 ** Processing line: ~ elsif inputs.keyboard.z~ - Inside source: true *** True Line Result elsif inputs.keyboard.z ** Processing line: ~ state.angle_z -= 1~ - Inside source: true *** True Line Result state.angle_z -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.zero~ - Inside source: true *** True Line Result if inputs.keyboard.zero ** Processing line: ~ state.angle_x = 0~ - Inside source: true *** True Line Result state.angle_x = 0 ** Processing line: ~ state.angle_y = 0~ - Inside source: true *** True Line Result state.angle_y = 0 ** Processing line: ~ state.angle_z = 0~ - Inside source: true *** True Line Result state.angle_z = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ angle_x = state.angle_x~ - Inside source: true *** True Line Result angle_x = state.angle_x ** Processing line: ~ angle_y = state.angle_y~ - Inside source: true *** True Line Result angle_y = state.angle_y ** Processing line: ~ angle_z = state.angle_z~ - Inside source: true *** True Line Result angle_z = state.angle_z ** Processing line: ~ scale = state.scale~ - Inside source: true *** True Line Result scale = state.scale ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ s_matrix = scale_matrix state.scale~ - Inside source: true *** True Line Result s_matrix = scale_matrix state.scale ** Processing line: ~ x_matrix = angle_z_matrix angle_z~ - Inside source: true *** True Line Result x_matrix = angle_z_matrix angle_z ** Processing line: ~ y_matrix = angle_y_matrix angle_y~ - Inside source: true *** True Line Result y_matrix = angle_y_matrix angle_y ** Processing line: ~ z_matrix = angle_x_matrix angle_x~ - Inside source: true *** True Line Result z_matrix = angle_x_matrix angle_x ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.shifted_points = state.points.map do |point|~ - Inside source: true *** True Line Result state.shifted_points = state.points.map do |point| ** Processing line: ~ (matrix_mul s_matrix,~ - Inside source: true *** True Line Result (matrix_mul s_matrix, ** Processing line: ~ (matrix_mul z_matrix,~ - Inside source: true *** True Line Result (matrix_mul z_matrix, ** Processing line: ~ (matrix_mul x_matrix,~ - Inside source: true *** True Line Result (matrix_mul x_matrix, ** Processing line: ~ (matrix_mul y_matrix, point)))).merge(original: point)~ - Inside source: true *** True Line Result (matrix_mul y_matrix, point)))).merge(original: point) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def thick_line line~ - Inside source: true *** True Line Result def thick_line line ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ line.merge(y: line.y - 1, y2: line.y2 - 1, r: 0, g: 0, b: 0),~ - Inside source: true *** True Line Result line.merge(y: line.y - 1, y2: line.y2 - 1, r: 0, g: 0, b: 0), ** Processing line: ~ line.merge(x: line.x - 1, x2: line.x2 - 1, r: 0, g: 0, b: 0),~ - Inside source: true *** True Line Result line.merge(x: line.x - 1, x2: line.x2 - 1, r: 0, g: 0, b: 0), ** Processing line: ~ line.merge(x: line.x - 0, x2: line.x2 - 0, r: 0, g: 0, b: 0),~ - Inside source: true *** True Line Result line.merge(x: line.x - 0, x2: line.x2 - 0, r: 0, g: 0, b: 0), ** Processing line: ~ line.merge(y: line.y + 1, y2: line.y2 + 1, r: 0, g: 0, b: 0),~ - Inside source: true *** True Line Result line.merge(y: line.y + 1, y2: line.y2 + 1, r: 0, g: 0, b: 0), ** Processing line: ~ line.merge(x: line.x + 1, x2: line.x2 + 1, r: 0, g: 0, b: 0)~ - Inside source: true *** True Line Result line.merge(x: line.x + 1, x2: line.x2 + 1, r: 0, g: 0, b: 0) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ outputs.lines << state.shifted_points.each_slice(2).map do |(p1, p2)|~ - Inside source: true *** True Line Result outputs.lines << state.shifted_points.each_slice(2).map do |(p1, p2)| ** Processing line: ~ perc = 0~ - Inside source: true *** True Line Result perc = 0 ** Processing line: ~ thick_line({ x: p1.x.*(10) + 640, y: p1.y.*(10) + 320,~ - Inside source: true *** True Line Result thick_line({ x: p1.x.*(10) + 640, y: p1.y.*(10) + 320, ** Processing line: ~ x2: p2.x.*(10) + 640, y2: p2.y.*(10) + 320,~ - Inside source: true *** True Line Result x2: p2.x.*(10) + 640, y2: p2.y.*(10) + 320, ** Processing line: ~ r: 255 * perc,~ - Inside source: true *** True Line Result r: 255 * perc, ** Processing line: ~ g: 255 * perc,~ - Inside source: true *** True Line Result g: 255 * perc, ** Processing line: ~ b: 255 * perc })~ - Inside source: true *** True Line Result b: 255 * perc }) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [ 10, 700, "angle_x: #{state.angle_x.to_sf}", 0]~ - Inside source: true *** True Line Result outputs.labels << [ 10, 700, "angle_x: #{state.angle_x.to_sf}", 0] ** Processing line: ~ outputs.labels << [ 10, 670, "x, shift+x", 0]~ - Inside source: true *** True Line Result outputs.labels << [ 10, 670, "x, shift+x", 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [210, 700, "angle_y: #{state.angle_y.to_sf}", 0]~ - Inside source: true *** True Line Result outputs.labels << [210, 700, "angle_y: #{state.angle_y.to_sf}", 0] ** Processing line: ~ outputs.labels << [210, 670, "y, shift+y", 0]~ - Inside source: true *** True Line Result outputs.labels << [210, 670, "y, shift+y", 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [410, 700, "angle_z: #{state.angle_z.to_sf}", 0]~ - Inside source: true *** True Line Result outputs.labels << [410, 700, "angle_z: #{state.angle_z.to_sf}", 0] ** Processing line: ~ outputs.labels << [410, 670, "z, shift+z", 0]~ - Inside source: true *** True Line Result outputs.labels << [410, 670, "z, shift+z", 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [610, 700, "scale: #{state.scale.to_sf}", 0]~ - Inside source: true *** True Line Result outputs.labels << [610, 700, "scale: #{state.scale.to_sf}", 0] ** Processing line: ~ outputs.labels << [610, 670, "p, shift+p", 0]~ - Inside source: true *** True Line Result outputs.labels << [610, 670, "p, shift+p", 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $game = Game.new~ - Inside source: true *** True Line Result $game = Game.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $game.args = args~ - Inside source: true *** True Line Result $game.args = args ** Processing line: ~ $game.tick~ - Inside source: true *** True Line Result $game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_angles x, y, z~ - Inside source: true *** True Line Result def set_angles x, y, z ** Processing line: ~ $game.state.angle_x = x~ - Inside source: true *** True Line Result $game.state.angle_x = x ** Processing line: ~ $game.state.angle_y = y~ - Inside source: true *** True Line Result $game.state.angle_y = y ** Processing line: ~ $game.state.angle_z = z~ - Inside source: true *** True Line Result $game.state.angle_z = z ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Arcade - Bullet Hell - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Arcade - Bullet Hell - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_arcade/bullet_hell/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_arcade/bullet_hell/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.base_columns ||= 10.times.map { |n| 50 * n + 1280 / 2 - 5 * 50 + 5 }~ - Inside source: true *** True Line Result args.state.base_columns ||= 10.times.map { |n| 50 * n + 1280 / 2 - 5 * 50 + 5 } ** Processing line: ~ args.state.base_rows ||= 5.times.map { |n| 50 * n + 720 - 5 * 50 }~ - Inside source: true *** True Line Result args.state.base_rows ||= 5.times.map { |n| 50 * n + 720 - 5 * 50 } ** Processing line: ~ args.state.offset_columns = 10.times.map { |n| (n - 4.5) * Math.sin(Kernel.tick_count.to_radians) * 12 }~ - Inside source: true *** True Line Result args.state.offset_columns = 10.times.map { |n| (n - 4.5) * Math.sin(Kernel.tick_count.to_radians) * 12 } ** Processing line: ~ args.state.offset_rows = 5.map { 0 }~ - Inside source: true *** True Line Result args.state.offset_rows = 5.map { 0 } ** Processing line: ~ args.state.columns = 10.times.map { |i| args.state.base_columns[i] + args.state.offset_columns[i] }~ - Inside source: true *** True Line Result args.state.columns = 10.times.map { |i| args.state.base_columns[i] + args.state.offset_columns[i] } ** Processing line: ~ args.state.rows = 5.times.map { |i| args.state.base_rows[i] + args.state.offset_rows[i] }~ - Inside source: true *** True Line Result args.state.rows = 5.times.map { |i| args.state.base_rows[i] + args.state.offset_rows[i] } ** Processing line: ~ args.state.explosions ||= []~ - Inside source: true *** True Line Result args.state.explosions ||= [] ** Processing line: ~ args.state.enemies ||= []~ - Inside source: true *** True Line Result args.state.enemies ||= [] ** Processing line: ~ args.state.score ||= 0~ - Inside source: true *** True Line Result args.state.score ||= 0 ** Processing line: ~ args.state.wave ||= 0~ - Inside source: true *** True Line Result args.state.wave ||= 0 ** Processing line: ~ if args.state.enemies.empty?~ - Inside source: true *** True Line Result if args.state.enemies.empty? ** Processing line: ~ args.state.wave += 1~ - Inside source: true *** True Line Result args.state.wave += 1 ** Processing line: ~ args.state.wave_root = Math.sqrt(args.state.wave)~ - Inside source: true *** True Line Result args.state.wave_root = Math.sqrt(args.state.wave) ** Processing line: ~ args.state.enemies = make_enemies~ - Inside source: true *** True Line Result args.state.enemies = make_enemies ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.player ||= {x: 620, y: 80, w: 40, h: 40, path: 'sprites/circle-gray.png', angle: 90, cooldown: 0, alive: true}~ - Inside source: true *** True Line Result args.state.player ||= {x: 620, y: 80, w: 40, h: 40, path: 'sprites/circle-gray.png', angle: 90, cooldown: 0, alive: true} ** Processing line: ~ args.state.enemy_bullets ||= []~ - Inside source: true *** True Line Result args.state.enemy_bullets ||= [] ** Processing line: ~ args.state.player_bullets ||= []~ - Inside source: true *** True Line Result args.state.player_bullets ||= [] ** Processing line: ~ args.state.lives ||= 3~ - Inside source: true *** True Line Result args.state.lives ||= 3 ** Processing line: ~ args.state.missed_shots ||= 0~ - Inside source: true *** True Line Result args.state.missed_shots ||= 0 ** Processing line: ~ args.state.fired_shots ||= 0~ - Inside source: true *** True Line Result args.state.fired_shots ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ update_explosions args~ - Inside source: true *** True Line Result update_explosions args ** Processing line: ~ update_enemy_positions args~ - Inside source: true *** True Line Result update_enemy_positions args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.left && args.state.player[:x] > (300 + 5)~ - Inside source: true *** True Line Result if args.inputs.left && args.state.player[:x] > (300 + 5) ** Processing line: ~ args.state.player[:x] -= 5~ - Inside source: true *** True Line Result args.state.player[:x] -= 5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if args.inputs.right && args.state.player[:x] < (1280 - args.state.player[:w] - 300 - 5)~ - Inside source: true *** True Line Result if args.inputs.right && args.state.player[:x] < (1280 - args.state.player[:w] - 300 - 5) ** Processing line: ~ args.state.player[:x] += 5~ - Inside source: true *** True Line Result args.state.player[:x] += 5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.enemy_bullets.each do |bullet|~ - Inside source: true *** True Line Result args.state.enemy_bullets.each do |bullet| ** Processing line: ~ bullet[:x] += bullet[:dx]~ - Inside source: true *** True Line Result bullet[:x] += bullet[:dx] ** Processing line: ~ bullet[:y] += bullet[:dy]~ - Inside source: true *** True Line Result bullet[:y] += bullet[:dy] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.player_bullets.each do |bullet|~ - Inside source: true *** True Line Result args.state.player_bullets.each do |bullet| ** Processing line: ~ bullet[:x] += bullet[:dx]~ - Inside source: true *** True Line Result bullet[:x] += bullet[:dx] ** Processing line: ~ bullet[:y] += bullet[:dy]~ - Inside source: true *** True Line Result bullet[:y] += bullet[:dy] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.enemy_bullets = args.state.enemy_bullets.find_all { |bullet| bullet[:y].between?(-16, 736) }~ - Inside source: true *** True Line Result args.state.enemy_bullets = args.state.enemy_bullets.find_all { |bullet| bullet[:y].between?(-16, 736) } ** Processing line: ~ args.state.player_bullets = args.state.player_bullets.find_all do |bullet|~ - Inside source: true *** True Line Result args.state.player_bullets = args.state.player_bullets.find_all do |bullet| ** Processing line: ~ if bullet[:y].between?(-16, 736)~ - Inside source: true *** True Line Result if bullet[:y].between?(-16, 736) ** Processing line: ~ true~ - Inside source: true *** True Line Result true ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.missed_shots += 1~ - Inside source: true *** True Line Result args.state.missed_shots += 1 ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.enemies = args.state.enemies.reject do |enemy|~ - Inside source: true *** True Line Result args.state.enemies = args.state.enemies.reject do |enemy| ** Processing line: ~ if args.state.player[:alive] && 1500 > (args.state.player[:x] - enemy[:x]) ** 2 + (args.state.player[:y] - enemy[:y]) ** 2~ - Inside source: true *** True Line Result if args.state.player[:alive] && 1500 > (args.state.player[:x] - enemy[:x]) ** 2 + (args.state.player[:y] - enemy[:y]) ** 2 ** Processing line: ~ args.state.explosions << {x: enemy[:x] + 4, y: enemy[:y] + 4, w: 32, h: 32, path: 'sprites/explosion-0.png', age: 0}~ - Inside source: true *** True Line Result args.state.explosions << {x: enemy[:x] + 4, y: enemy[:y] + 4, w: 32, h: 32, path: 'sprites/explosion-0.png', age: 0} ** Processing line: ~ args.state.explosions << {x: args.state.player[:x] + 4, y: args.state.player[:y] + 4, w: 32, h: 32, path: 'sprites/explosion-0.png', age: 0}~ - Inside source: true *** True Line Result args.state.explosions << {x: args.state.player[:x] + 4, y: args.state.player[:y] + 4, w: 32, h: 32, path: 'sprites/explosion-0.png', age: 0} ** Processing line: ~ args.state.player[:alive] = false~ - Inside source: true *** True Line Result args.state.player[:alive] = false ** Processing line: ~ true~ - Inside source: true *** True Line Result true ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.enemy_bullets.each do |bullet|~ - Inside source: true *** True Line Result args.state.enemy_bullets.each do |bullet| ** Processing line: ~ if args.state.player[:alive] && 400 > (args.state.player[:x] - bullet[:x] + 12) ** 2 + (args.state.player[:y] - bullet[:y] + 12) ** 2~ - Inside source: true *** True Line Result if args.state.player[:alive] && 400 > (args.state.player[:x] - bullet[:x] + 12) ** 2 + (args.state.player[:y] - bullet[:y] + 12) ** 2 ** Processing line: ~ args.state.explosions << {x: args.state.player[:x] + 4, y: args.state.player[:y] + 4, w: 32, h: 32, path: 'sprites/explosion-0.png', age: 0}~ - Inside source: true *** True Line Result args.state.explosions << {x: args.state.player[:x] + 4, y: args.state.player[:y] + 4, w: 32, h: 32, path: 'sprites/explosion-0.png', age: 0} ** Processing line: ~ args.state.player[:alive] = false~ - Inside source: true *** True Line Result args.state.player[:alive] = false ** Processing line: ~ bullet[:despawn] = true~ - Inside source: true *** True Line Result bullet[:despawn] = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.enemies = args.state.enemies.reject do |enemy|~ - Inside source: true *** True Line Result args.state.enemies = args.state.enemies.reject do |enemy| ** Processing line: ~ args.state.player_bullets.any? do |bullet|~ - Inside source: true *** True Line Result args.state.player_bullets.any? do |bullet| ** Processing line: ~ if 400 > (enemy[:x] - bullet[:x] + 12) ** 2 + (enemy[:y] - bullet[:y] + 12) ** 2~ - Inside source: true *** True Line Result if 400 > (enemy[:x] - bullet[:x] + 12) ** 2 + (enemy[:y] - bullet[:y] + 12) ** 2 ** Processing line: ~ args.state.explosions << {x: enemy[:x] + 4, y: enemy[:y] + 4, w: 32, h: 32, path: 'sprites/explosion-0.png', age: 0}~ - Inside source: true *** True Line Result args.state.explosions << {x: enemy[:x] + 4, y: enemy[:y] + 4, w: 32, h: 32, path: 'sprites/explosion-0.png', age: 0} ** Processing line: ~ bullet[:despawn] = true~ - Inside source: true *** True Line Result bullet[:despawn] = true ** Processing line: ~ args.state.score += 1000 * args.state.wave~ - Inside source: true *** True Line Result args.state.score += 1000 * args.state.wave ** Processing line: ~ true~ - Inside source: true *** True Line Result true ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.player_bullets = args.state.player_bullets.reject { |bullet| bullet[:despawn] }~ - Inside source: true *** True Line Result args.state.player_bullets = args.state.player_bullets.reject { |bullet| bullet[:despawn] } ** Processing line: ~ args.state.enemy_bullets = args.state.enemy_bullets.reject { |bullet| bullet[:despawn] }~ - Inside source: true *** True Line Result args.state.enemy_bullets = args.state.enemy_bullets.reject { |bullet| bullet[:despawn] } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.player[:cooldown] -= 1~ - Inside source: true *** True Line Result args.state.player[:cooldown] -= 1 ** Processing line: ~ if args.inputs.keyboard.key_held.space && args.state.player[:cooldown] <= 0 && args.state.player[:alive]~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_held.space && args.state.player[:cooldown] <= 0 && args.state.player[:alive] ** Processing line: ~ args.state.player_bullets << {x: args.state.player[:x] + 12, y: args.state.player[:y] + 28, w: 16, h: 16, path: 'sprites/star.png', dx: 0, dy: 8}.sprite~ - Inside source: true *** True Line Result args.state.player_bullets << {x: args.state.player[:x] + 12, y: args.state.player[:y] + 28, w: 16, h: 16, path: 'sprites/star.png', dx: 0, dy: 8}.sprite ** Processing line: ~ args.state.fired_shots += 1~ - Inside source: true *** True Line Result args.state.fired_shots += 1 ** Processing line: ~ args.state.player[:cooldown] = 10 + 20 / args.state.wave~ - Inside source: true *** True Line Result args.state.player[:cooldown] = 10 + 20 / args.state.wave ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.enemies.each do |enemy|~ - Inside source: true *** True Line Result args.state.enemies.each do |enemy| ** Processing line: ~ if Math.rand < 0.0005 + 0.0005 * args.state.wave && args.state.player[:alive] && enemy[:move_state] == :normal~ - Inside source: true *** True Line Result if Math.rand < 0.0005 + 0.0005 * args.state.wave && args.state.player[:alive] && enemy[:move_state] == :normal ** Processing line: ~ args.state.enemy_bullets << {x: enemy[:x] + 12, y: enemy[:y] - 8, w: 16, h: 16, path: 'sprites/star.png', dx: 0, dy: -3 - args.state.wave_root}.sprite~ - Inside source: true *** True Line Result args.state.enemy_bullets << {x: enemy[:x] + 12, y: enemy[:y] - 8, w: 16, h: 16, path: 'sprites/star.png', dx: 0, dy: -3 - args.state.wave_root}.sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ args.outputs.primitives << args.state.enemies.map do |enemy|~ - Inside source: true *** True Line Result args.outputs.primitives << args.state.enemies.map do |enemy| ** Processing line: ~ [enemy[:x], enemy[:y], 40, 40, enemy[:path], -90].sprite~ - Inside source: true *** True Line Result [enemy[:x], enemy[:y], 40, 40, enemy[:path], -90].sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.outputs.primitives << args.state.player if args.state.player[:alive]~ - Inside source: true *** True Line Result args.outputs.primitives << args.state.player if args.state.player[:alive] ** Processing line: ~ args.outputs.primitives << args.state.explosions~ - Inside source: true *** True Line Result args.outputs.primitives << args.state.explosions ** Processing line: ~ args.outputs.primitives << args.state.player_bullets~ - Inside source: true *** True Line Result args.outputs.primitives << args.state.player_bullets ** Processing line: ~ args.outputs.primitives << args.state.enemy_bullets~ - Inside source: true *** True Line Result args.outputs.primitives << args.state.enemy_bullets ** Processing line: ~ accuracy = args.state.fired_shots.zero? ? 1 : (args.state.fired_shots - args.state.missed_shots) / args.state.fired_shots~ - Inside source: true *** True Line Result accuracy = args.state.fired_shots.zero? ? 1 : (args.state.fired_shots - args.state.missed_shots) / args.state.fired_shots ** Processing line: ~ args.outputs.primitives << [~ - Inside source: true *** True Line Result args.outputs.primitives << [ ** Processing line: ~ [0, 0, 300, 720, 96, 0, 0].solid,~ - Inside source: true *** True Line Result [0, 0, 300, 720, 96, 0, 0].solid, ** Processing line: ~ [1280 - 300, 0, 300, 720, 96, 0, 0].solid,~ - Inside source: true *** True Line Result [1280 - 300, 0, 300, 720, 96, 0, 0].solid, ** Processing line: ~ [1280 - 290, 60, "Wave #{args.state.wave}", 255, 255, 255].label,~ - Inside source: true *** True Line Result [1280 - 290, 60, "Wave #{args.state.wave}", 255, 255, 255].label, ** Processing line: ~ [1280 - 290, 40, "Accuracy #{(accuracy * 100).floor}%", 255, 255, 255].label,~ - Inside source: true *** True Line Result [1280 - 290, 40, "Accuracy #{(accuracy * 100).floor}%", 255, 255, 255].label, ** Processing line: ~ [1280 - 290, 20, "Score #{(args.state.score * accuracy).floor}", 255, 255, 255].label,~ - Inside source: true *** True Line Result [1280 - 290, 20, "Score #{(args.state.score * accuracy).floor}", 255, 255, 255].label, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ args.outputs.primitives << args.state.lives.times.map do |n|~ - Inside source: true *** True Line Result args.outputs.primitives << args.state.lives.times.map do |n| ** Processing line: ~ [1280 - 290 + 50 * n, 80, 40, 40, 'sprites/circle-gray.png', 90].sprite~ - Inside source: true *** True Line Result [1280 - 290 + 50 * n, 80, 40, 40, 'sprites/circle-gray.png', 90].sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ #args.outputs.debug << args.gtk.framerate_diagnostics_primitives~ - Inside source: true *** True Line Result #args.outputs.debug << args.gtk.framerate_diagnostics_primitives ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (!args.state.player[:alive]) && args.state.enemy_bullets.empty? && args.state.explosions.empty? && args.state.enemies.all? { |enemy| enemy[:move_state] == :normal }~ - Inside source: true *** True Line Result if (!args.state.player[:alive]) && args.state.enemy_bullets.empty? && args.state.explosions.empty? && args.state.enemies.all? { |enemy| enemy[:move_state] == :normal } ** Processing line: ~ args.state.player[:alive] = true~ - Inside source: true *** True Line Result args.state.player[:alive] = true ** Processing line: ~ args.state.player[:x] = 624~ - Inside source: true *** True Line Result args.state.player[:x] = 624 ** Processing line: ~ args.state.player[:y] = 80~ - Inside source: true *** True Line Result args.state.player[:y] = 80 ** Processing line: ~ args.state.lives -= 1~ - Inside source: true *** True Line Result args.state.lives -= 1 ** Processing line: ~ if args.state.lives == -1~ - Inside source: true *** True Line Result if args.state.lives == -1 ** Processing line: ~ args.state.clear!~ - Inside source: true *** True Line Result args.state.clear! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def make_enemies~ - Inside source: true *** True Line Result def make_enemies ** Processing line: ~ enemies = []~ - Inside source: true *** True Line Result enemies = [] ** Processing line: ~ enemies += 10.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 0, col: n, path: 'sprites/circle-orange.png', move_state: :retreat} }~ - Inside source: true *** True Line Result enemies += 10.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 0, col: n, path: 'sprites/circle-orange.png', move_state: :retreat} } ** Processing line: ~ enemies += 10.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 1, col: n, path: 'sprites/circle-orange.png', move_state: :retreat} }~ - Inside source: true *** True Line Result enemies += 10.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 1, col: n, path: 'sprites/circle-orange.png', move_state: :retreat} } ** Processing line: ~ enemies += 8.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 2, col: n + 1, path: 'sprites/circle-blue.png', move_state: :retreat} }~ - Inside source: true *** True Line Result enemies += 8.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 2, col: n + 1, path: 'sprites/circle-blue.png', move_state: :retreat} } ** Processing line: ~ enemies += 8.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 3, col: n + 1, path: 'sprites/circle-blue.png', move_state: :retreat} }~ - Inside source: true *** True Line Result enemies += 8.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 3, col: n + 1, path: 'sprites/circle-blue.png', move_state: :retreat} } ** Processing line: ~ enemies += 4.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 4, col: n + 3, path: 'sprites/circle-green.png', move_state: :retreat} }~ - Inside source: true *** True Line Result enemies += 4.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 4, col: n + 3, path: 'sprites/circle-green.png', move_state: :retreat} } ** Processing line: ~ enemies~ - Inside source: true *** True Line Result enemies ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def update_explosions args~ - Inside source: true *** True Line Result def update_explosions args ** Processing line: ~ args.state.explosions.each do |explosion|~ - Inside source: true *** True Line Result args.state.explosions.each do |explosion| ** Processing line: ~ explosion[:age] += 0.5~ - Inside source: true *** True Line Result explosion[:age] += 0.5 ** Processing line: ~ explosion[:path] = "sprites/explosion-#{explosion[:age].floor}.png"~ - Inside source: true *** True Line Result explosion[:path] = "sprites/explosion-#{explosion[:age].floor}.png" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.explosions = args.state.explosions.reject { |explosion| explosion[:age] >= 7 }~ - Inside source: true *** True Line Result args.state.explosions = args.state.explosions.reject { |explosion| explosion[:age] >= 7 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def update_enemy_positions args~ - Inside source: true *** True Line Result def update_enemy_positions args ** Processing line: ~ args.state.enemies.each do |enemy|~ - Inside source: true *** True Line Result args.state.enemies.each do |enemy| ** Processing line: ~ if enemy[:move_state] == :normal~ - Inside source: true *** True Line Result if enemy[:move_state] == :normal ** Processing line: ~ enemy[:x] = args.state.columns[enemy[:col]]~ - Inside source: true *** True Line Result enemy[:x] = args.state.columns[enemy[:col]] ** Processing line: ~ enemy[:y] = args.state.rows[enemy[:row]]~ - Inside source: true *** True Line Result enemy[:y] = args.state.rows[enemy[:row]] ** Processing line: ~ enemy[:move_state] = :dive if Math.rand < 0.0002 + 0.00005 * args.state.wave && args.state.player[:alive]~ - Inside source: true *** True Line Result enemy[:move_state] = :dive if Math.rand < 0.0002 + 0.00005 * args.state.wave && args.state.player[:alive] ** Processing line: ~ elsif enemy[:move_state] == :dive~ - Inside source: true *** True Line Result elsif enemy[:move_state] == :dive ** Processing line: ~ enemy[:target_x] ||= args.state.player[:x]~ - Inside source: true *** True Line Result enemy[:target_x] ||= args.state.player[:x] ** Processing line: ~ enemy[:target_y] ||= args.state.player[:y]~ - Inside source: true *** True Line Result enemy[:target_y] ||= args.state.player[:y] ** Processing line: ~ dx = enemy[:target_x] - enemy[:x]~ - Inside source: true *** True Line Result dx = enemy[:target_x] - enemy[:x] ** Processing line: ~ dy = enemy[:target_y] - enemy[:y]~ - Inside source: true *** True Line Result dy = enemy[:target_y] - enemy[:y] ** Processing line: ~ vel = Math.sqrt(dx * dx + dy * dy)~ - Inside source: true *** True Line Result vel = Math.sqrt(dx * dx + dy * dy) ** Processing line: ~ speed_limit = 2 + args.state.wave_root~ - Inside source: true *** True Line Result speed_limit = 2 + args.state.wave_root ** Processing line: ~ if vel > speed_limit~ - Inside source: true *** True Line Result if vel > speed_limit ** Processing line: ~ dx /= vel / speed_limit~ - Inside source: true *** True Line Result dx /= vel / speed_limit ** Processing line: ~ dy /= vel / speed_limit~ - Inside source: true *** True Line Result dy /= vel / speed_limit ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if vel < 1 || !args.state.player[:alive]~ - Inside source: true *** True Line Result if vel < 1 || !args.state.player[:alive] ** Processing line: ~ enemy[:move_state] = :retreat~ - Inside source: true *** True Line Result enemy[:move_state] = :retreat ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ enemy[:x] += dx~ - Inside source: true *** True Line Result enemy[:x] += dx ** Processing line: ~ enemy[:y] += dy~ - Inside source: true *** True Line Result enemy[:y] += dy ** Processing line: ~ elsif enemy[:move_state] == :retreat~ - Inside source: true *** True Line Result elsif enemy[:move_state] == :retreat ** Processing line: ~ enemy[:target_x] = args.state.columns[enemy[:col]]~ - Inside source: true *** True Line Result enemy[:target_x] = args.state.columns[enemy[:col]] ** Processing line: ~ enemy[:target_y] = args.state.rows[enemy[:row]]~ - Inside source: true *** True Line Result enemy[:target_y] = args.state.rows[enemy[:row]] ** Processing line: ~ dx = enemy[:target_x] - enemy[:x]~ - Inside source: true *** True Line Result dx = enemy[:target_x] - enemy[:x] ** Processing line: ~ dy = enemy[:target_y] - enemy[:y]~ - Inside source: true *** True Line Result dy = enemy[:target_y] - enemy[:y] ** Processing line: ~ vel = Math.sqrt(dx * dx + dy * dy)~ - Inside source: true *** True Line Result vel = Math.sqrt(dx * dx + dy * dy) ** Processing line: ~ speed_limit = 2 + args.state.wave_root~ - Inside source: true *** True Line Result speed_limit = 2 + args.state.wave_root ** Processing line: ~ if vel > speed_limit~ - Inside source: true *** True Line Result if vel > speed_limit ** Processing line: ~ dx /= vel / speed_limit~ - Inside source: true *** True Line Result dx /= vel / speed_limit ** Processing line: ~ dy /= vel / speed_limit~ - Inside source: true *** True Line Result dy /= vel / speed_limit ** Processing line: ~ elsif vel < 1~ - Inside source: true *** True Line Result elsif vel < 1 ** Processing line: ~ enemy[:move_state] = :normal~ - Inside source: true *** True Line Result enemy[:move_state] = :normal ** Processing line: ~ enemy[:target_x] = nil~ - Inside source: true *** True Line Result enemy[:target_x] = nil ** Processing line: ~ enemy[:target_y] = nil~ - Inside source: true *** True Line Result enemy[:target_y] = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ enemy[:x] += dx~ - Inside source: true *** True Line Result enemy[:x] += dx ** Processing line: ~ enemy[:y] += dy~ - Inside source: true *** True Line Result enemy[:y] += dy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Arcade - Dueling Starships - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Arcade - Dueling Starships - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_arcade/dueling_starships/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_arcade/dueling_starships/app/main.rb ** Processing line: ~ class DuelingSpaceships~ - Inside source: true *** True Line Result class DuelingSpaceships ** Processing line: ~ attr_accessor :state, :inputs, :outputs, :grid~ - Inside source: true *** True Line Result attr_accessor :state, :inputs, :outputs, :grid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result outputs.background_color = [0, 0, 0] ** Processing line: ~ state.ship_blue ||= new_blue_ship~ - Inside source: true *** True Line Result state.ship_blue ||= new_blue_ship ** Processing line: ~ state.ship_red ||= new_red_ship~ - Inside source: true *** True Line Result state.ship_red ||= new_red_ship ** Processing line: ~ state.flames ||= []~ - Inside source: true *** True Line Result state.flames ||= [] ** Processing line: ~ state.bullets ||= []~ - Inside source: true *** True Line Result state.bullets ||= [] ** Processing line: ~ state.ship_blue_score ||= 0~ - Inside source: true *** True Line Result state.ship_blue_score ||= 0 ** Processing line: ~ state.ship_red_score ||= 0~ - Inside source: true *** True Line Result state.ship_red_score ||= 0 ** Processing line: ~ state.stars ||= 100.map do~ - Inside source: true *** True Line Result state.stars ||= 100.map do ** Processing line: ~ [rand.add(2).to_square(grid.w_half.randomize(:sign, :ratio),~ - Inside source: true *** True Line Result [rand.add(2).to_square(grid.w_half.randomize(:sign, :ratio), ** Processing line: ~ grid.h_half.randomize(:sign, :ratio)),~ - Inside source: true *** True Line Result grid.h_half.randomize(:sign, :ratio)), ** Processing line: ~ 128 + 128.randomize(:ratio), 255, 255]~ - Inside source: true *** True Line Result 128 + 128.randomize(:ratio), 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def default_ship x, y, angle, sprite_path, bullet_sprite_path, color~ - Inside source: true *** True Line Result def default_ship x, y, angle, sprite_path, bullet_sprite_path, color ** Processing line: ~ state.new_entity(:ship,~ - Inside source: true *** True Line Result state.new_entity(:ship, ** Processing line: ~ { x: x,~ - Inside source: true *** True Line Result { x: x, ** Processing line: ~ y: y,~ - Inside source: true *** True Line Result y: y, ** Processing line: ~ dy: 0,~ - Inside source: true *** True Line Result dy: 0, ** Processing line: ~ dx: 0,~ - Inside source: true *** True Line Result dx: 0, ** Processing line: ~ damage: 0,~ - Inside source: true *** True Line Result damage: 0, ** Processing line: ~ dead: false,~ - Inside source: true *** True Line Result dead: false, ** Processing line: ~ angle: angle,~ - Inside source: true *** True Line Result angle: angle, ** Processing line: ~ max_alpha: 255,~ - Inside source: true *** True Line Result max_alpha: 255, ** Processing line: ~ sprite_path: sprite_path,~ - Inside source: true *** True Line Result sprite_path: sprite_path, ** Processing line: ~ bullet_sprite_path: bullet_sprite_path,~ - Inside source: true *** True Line Result bullet_sprite_path: bullet_sprite_path, ** Processing line: ~ color: color })~ - Inside source: true *** True Line Result color: color }) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_red_ship~ - Inside source: true *** True Line Result def new_red_ship ** Processing line: ~ default_ship(400, 250.randomize(:sign, :ratio),~ - Inside source: true *** True Line Result default_ship(400, 250.randomize(:sign, :ratio), ** Processing line: ~ 180, 'sprites/ship_red.png', 'sprites/red_bullet.png',~ - Inside source: true *** True Line Result 180, 'sprites/ship_red.png', 'sprites/red_bullet.png', ** Processing line: ~ [255, 90, 90])~ - Inside source: true *** True Line Result [255, 90, 90]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_blue_ship~ - Inside source: true *** True Line Result def new_blue_ship ** Processing line: ~ default_ship(-400, 250.randomize(:sign, :ratio),~ - Inside source: true *** True Line Result default_ship(-400, 250.randomize(:sign, :ratio), ** Processing line: ~ 0, 'sprites/ship_blue.png', 'sprites/blue_bullet.png',~ - Inside source: true *** True Line Result 0, 'sprites/ship_blue.png', 'sprites/blue_bullet.png', ** Processing line: ~ [110, 140, 255])~ - Inside source: true *** True Line Result [110, 140, 255]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ render_instructions~ - Inside source: true *** True Line Result render_instructions ** Processing line: ~ render_score~ - Inside source: true *** True Line Result render_score ** Processing line: ~ render_universe~ - Inside source: true *** True Line Result render_universe ** Processing line: ~ render_flames~ - Inside source: true *** True Line Result render_flames ** Processing line: ~ render_ships~ - Inside source: true *** True Line Result render_ships ** Processing line: ~ render_bullets~ - Inside source: true *** True Line Result render_bullets ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_ships~ - Inside source: true *** True Line Result def render_ships ** Processing line: ~ update_ship_outputs(state.ship_blue)~ - Inside source: true *** True Line Result update_ship_outputs(state.ship_blue) ** Processing line: ~ update_ship_outputs(state.ship_red)~ - Inside source: true *** True Line Result update_ship_outputs(state.ship_red) ** Processing line: ~ outputs.sprites << [state.ship_blue.sprite, state.ship_red.sprite]~ - Inside source: true *** True Line Result outputs.sprites << [state.ship_blue.sprite, state.ship_red.sprite] ** Processing line: ~ outputs.labels << [state.ship_blue.label, state.ship_red.label]~ - Inside source: true *** True Line Result outputs.labels << [state.ship_blue.label, state.ship_red.label] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_instructions~ - Inside source: true *** True Line Result def render_instructions ** Processing line: ~ return if state.ship_blue.dx > 0 || state.ship_blue.dy > 0 ||~ - Inside source: true *** True Line Result return if state.ship_blue.dx > 0 || state.ship_blue.dy > 0 || ** Processing line: ~ state.ship_red.dx > 0 || state.ship_red.dy > 0 ||~ - Inside source: true *** True Line Result state.ship_red.dx > 0 || state.ship_red.dy > 0 || ** Processing line: ~ state.flames.length > 0~ - Inside source: true *** True Line Result state.flames.length > 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [grid.left.shift_right(30),~ - Inside source: true *** True Line Result outputs.labels << [grid.left.shift_right(30), ** Processing line: ~ grid.bottom.shift_up(30),~ - Inside source: true *** True Line Result grid.bottom.shift_up(30), ** Processing line: ~ "Two gamepads needed to play. R1 to accelerate. Left and right on D-PAD to turn ship. Hold A to shoot. Press B to drop mines.",~ - Inside source: true *** True Line Result "Two gamepads needed to play. R1 to accelerate. Left and right on D-PAD to turn ship. Hold A to shoot. Press B to drop mines.", ** Processing line: ~ 0, 0, 255, 255, 255]~ - Inside source: true *** True Line Result 0, 0, 255, 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ calc_thrusts~ - Inside source: true *** True Line Result calc_thrusts ** Processing line: ~ calc_ships~ - Inside source: true *** True Line Result calc_ships ** Processing line: ~ calc_bullets~ - Inside source: true *** True Line Result calc_bullets ** Processing line: ~ calc_winner~ - Inside source: true *** True Line Result calc_winner ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ input_accelerate~ - Inside source: true *** True Line Result input_accelerate ** Processing line: ~ input_turn~ - Inside source: true *** True Line Result input_turn ** Processing line: ~ input_bullets_and_mines~ - Inside source: true *** True Line Result input_bullets_and_mines ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_score~ - Inside source: true *** True Line Result def render_score ** Processing line: ~ outputs.labels << [grid.left.shift_right(80),~ - Inside source: true *** True Line Result outputs.labels << [grid.left.shift_right(80), ** Processing line: ~ grid.top.shift_down(40),~ - Inside source: true *** True Line Result grid.top.shift_down(40), ** Processing line: ~ state.ship_blue_score, 30, 1, state.ship_blue.color]~ - Inside source: true *** True Line Result state.ship_blue_score, 30, 1, state.ship_blue.color] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [grid.right.shift_left(80),~ - Inside source: true *** True Line Result outputs.labels << [grid.right.shift_left(80), ** Processing line: ~ grid.top.shift_down(40),~ - Inside source: true *** True Line Result grid.top.shift_down(40), ** Processing line: ~ state.ship_red_score, 30, 1, state.ship_red.color]~ - Inside source: true *** True Line Result state.ship_red_score, 30, 1, state.ship_red.color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_universe~ - Inside source: true *** True Line Result def render_universe ** Processing line: ~ return if outputs.static_solids.any?~ - Inside source: true *** True Line Result return if outputs.static_solids.any? ** Processing line: ~ outputs.static_solids << grid.rect~ - Inside source: true *** True Line Result outputs.static_solids << grid.rect ** Processing line: ~ outputs.static_solids << state.stars~ - Inside source: true *** True Line Result outputs.static_solids << state.stars ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def apply_round_finished_alpha entity~ - Inside source: true *** True Line Result def apply_round_finished_alpha entity ** Processing line: ~ return entity unless state.round_finished_debounce~ - Inside source: true *** True Line Result return entity unless state.round_finished_debounce ** Processing line: ~ entity.a *= state.round_finished_debounce.percentage_of(2.seconds)~ - Inside source: true *** True Line Result entity.a *= state.round_finished_debounce.percentage_of(2.seconds) ** Processing line: ~ return entity~ - Inside source: true *** True Line Result return entity ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def update_ship_outputs ship, sprite_size = 66~ - Inside source: true *** True Line Result def update_ship_outputs ship, sprite_size = 66 ** Processing line: ~ ship.sprite =~ - Inside source: true *** True Line Result ship.sprite = ** Processing line: ~ apply_round_finished_alpha [sprite_size.to_square(ship.x, ship.y),~ - Inside source: true *** True Line Result apply_round_finished_alpha [sprite_size.to_square(ship.x, ship.y), ** Processing line: ~ ship.sprite_path,~ - Inside source: true *** True Line Result ship.sprite_path, ** Processing line: ~ ship.angle,~ - Inside source: true *** True Line Result ship.angle, ** Processing line: ~ ship.dead ? 0 : 255 * ship.created_at.ease(2.seconds)].sprite~ - Inside source: true *** True Line Result ship.dead ? 0 : 255 * ship.created_at.ease(2.seconds)].sprite ** Processing line: ~ ship.label =~ - Inside source: true *** True Line Result ship.label = ** Processing line: ~ apply_round_finished_alpha [ship.x,~ - Inside source: true *** True Line Result apply_round_finished_alpha [ship.x, ** Processing line: ~ ship.y + 100,~ - Inside source: true *** True Line Result ship.y + 100, ** Processing line: ~ "." * 5.minus(ship.damage).greater(0), 20, 1, ship.color, 255].label~ - Inside source: true *** True Line Result "." * 5.minus(ship.damage).greater(0), 20, 1, ship.color, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_flames sprite_size = 6~ - Inside source: true *** True Line Result def render_flames sprite_size = 6 ** Processing line: ~ outputs.sprites << state.flames.map do |p|~ - Inside source: true *** True Line Result outputs.sprites << state.flames.map do |p| ** Processing line: ~ apply_round_finished_alpha [sprite_size.to_square(p.x, p.y),~ - Inside source: true *** True Line Result apply_round_finished_alpha [sprite_size.to_square(p.x, p.y), ** Processing line: ~ 'sprites/flame.png', 0,~ - Inside source: true *** True Line Result 'sprites/flame.png', 0, ** Processing line: ~ p.max_alpha * p.created_at.ease(p.lifetime, :flip)].sprite~ - Inside source: true *** True Line Result p.max_alpha * p.created_at.ease(p.lifetime, :flip)].sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_bullets sprite_size = 10~ - Inside source: true *** True Line Result def render_bullets sprite_size = 10 ** Processing line: ~ outputs.sprites << state.bullets.map do |b|~ - Inside source: true *** True Line Result outputs.sprites << state.bullets.map do |b| ** Processing line: ~ apply_round_finished_alpha [b.sprite_size.to_square(b.x, b.y),~ - Inside source: true *** True Line Result apply_round_finished_alpha [b.sprite_size.to_square(b.x, b.y), ** Processing line: ~ b.owner.bullet_sprite_path,~ - Inside source: true *** True Line Result b.owner.bullet_sprite_path, ** Processing line: ~ 0, b.max_alpha].sprite~ - Inside source: true *** True Line Result 0, b.max_alpha].sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def wrap_location! location~ - Inside source: true *** True Line Result def wrap_location! location ** Processing line: ~ location.x = grid.left if location.x > grid.right~ - Inside source: true *** True Line Result location.x = grid.left if location.x > grid.right ** Processing line: ~ location.x = grid.right if location.x < grid.left~ - Inside source: true *** True Line Result location.x = grid.right if location.x < grid.left ** Processing line: ~ location.y = grid.top if location.y < grid.bottom~ - Inside source: true *** True Line Result location.y = grid.top if location.y < grid.bottom ** Processing line: ~ location.y = grid.bottom if location.y > grid.top~ - Inside source: true *** True Line Result location.y = grid.bottom if location.y > grid.top ** Processing line: ~ location~ - Inside source: true *** True Line Result location ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_thrusts~ - Inside source: true *** True Line Result def calc_thrusts ** Processing line: ~ state.flames =~ - Inside source: true *** True Line Result state.flames = ** Processing line: ~ state.flames~ - Inside source: true *** True Line Result state.flames ** Processing line: ~ .reject(&:old?)~ - Inside source: true *** True Line Result .reject(&:old?) ** Processing line: ~ .map do |p|~ - Inside source: true *** True Line Result .map do |p| ** Processing line: ~ p.speed *= 0.9~ - Inside source: true *** True Line Result p.speed *= 0.9 ** Processing line: ~ p.y += p.angle.vector_y(p.speed)~ - Inside source: true *** True Line Result p.y += p.angle.vector_y(p.speed) ** Processing line: ~ p.x += p.angle.vector_x(p.speed)~ - Inside source: true *** True Line Result p.x += p.angle.vector_x(p.speed) ** Processing line: ~ wrap_location! p~ - Inside source: true *** True Line Result wrap_location! p ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def all_ships~ - Inside source: true *** True Line Result def all_ships ** Processing line: ~ [state.ship_blue, state.ship_red]~ - Inside source: true *** True Line Result [state.ship_blue, state.ship_red] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def alive_ships~ - Inside source: true *** True Line Result def alive_ships ** Processing line: ~ all_ships.reject { |s| s.dead }~ - Inside source: true *** True Line Result all_ships.reject { |s| s.dead } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_bullet bullet~ - Inside source: true *** True Line Result def calc_bullet bullet ** Processing line: ~ bullet.y += bullet.angle.vector_y(bullet.speed)~ - Inside source: true *** True Line Result bullet.y += bullet.angle.vector_y(bullet.speed) ** Processing line: ~ bullet.x += bullet.angle.vector_x(bullet.speed)~ - Inside source: true *** True Line Result bullet.x += bullet.angle.vector_x(bullet.speed) ** Processing line: ~ wrap_location! bullet~ - Inside source: true *** True Line Result wrap_location! bullet ** Processing line: ~ explode_bullet! bullet if bullet.old?~ - Inside source: true *** True Line Result explode_bullet! bullet if bullet.old? ** Processing line: ~ return if bullet.exploded~ - Inside source: true *** True Line Result return if bullet.exploded ** Processing line: ~ return if state.round_finished~ - Inside source: true *** True Line Result return if state.round_finished ** Processing line: ~ alive_ships.each do |s|~ - Inside source: true *** True Line Result alive_ships.each do |s| ** Processing line: ~ if s != bullet.owner &&~ - Inside source: true *** True Line Result if s != bullet.owner && ** Processing line: ~ s.sprite.intersect_rect?(bullet.sprite_size.to_square(bullet.x, bullet.y))~ - Inside source: true *** True Line Result s.sprite.intersect_rect?(bullet.sprite_size.to_square(bullet.x, bullet.y)) ** Processing line: ~ explode_bullet! bullet, 10, 5, 30~ - Inside source: true *** True Line Result explode_bullet! bullet, 10, 5, 30 ** Processing line: ~ s.damage += 1~ - Inside source: true *** True Line Result s.damage += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_bullets~ - Inside source: true *** True Line Result def calc_bullets ** Processing line: ~ state.bullets.each { |b| calc_bullet b }~ - Inside source: true *** True Line Result state.bullets.each { |b| calc_bullet b } ** Processing line: ~ state.bullets.reject! { |b| b.exploded }~ - Inside source: true *** True Line Result state.bullets.reject! { |b| b.exploded } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def create_explosion! type, entity, flame_count, max_speed, lifetime, max_alpha = 255~ - Inside source: true *** True Line Result def create_explosion! type, entity, flame_count, max_speed, lifetime, max_alpha = 255 ** Processing line: ~ flame_count.times do~ - Inside source: true *** True Line Result flame_count.times do ** Processing line: ~ state.flames << state.new_entity(type,~ - Inside source: true *** True Line Result state.flames << state.new_entity(type, ** Processing line: ~ { angle: 360.randomize(:ratio),~ - Inside source: true *** True Line Result { angle: 360.randomize(:ratio), ** Processing line: ~ speed: max_speed.randomize(:ratio),~ - Inside source: true *** True Line Result speed: max_speed.randomize(:ratio), ** Processing line: ~ lifetime: lifetime,~ - Inside source: true *** True Line Result lifetime: lifetime, ** Processing line: ~ x: entity.x,~ - Inside source: true *** True Line Result x: entity.x, ** Processing line: ~ y: entity.y,~ - Inside source: true *** True Line Result y: entity.y, ** Processing line: ~ max_alpha: max_alpha })~ - Inside source: true *** True Line Result max_alpha: max_alpha }) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def explode_bullet! bullet, flame_override = 5, max_speed = 5, lifetime = 10~ - Inside source: true *** True Line Result def explode_bullet! bullet, flame_override = 5, max_speed = 5, lifetime = 10 ** Processing line: ~ bullet.exploded = true~ - Inside source: true *** True Line Result bullet.exploded = true ** Processing line: ~ create_explosion! :bullet_explosion,~ - Inside source: true *** True Line Result create_explosion! :bullet_explosion, ** Processing line: ~ bullet,~ - Inside source: true *** True Line Result bullet, ** Processing line: ~ flame_override,~ - Inside source: true *** True Line Result flame_override, ** Processing line: ~ max_speed,~ - Inside source: true *** True Line Result max_speed, ** Processing line: ~ lifetime,~ - Inside source: true *** True Line Result lifetime, ** Processing line: ~ bullet.max_alpha~ - Inside source: true *** True Line Result bullet.max_alpha ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_ship ship~ - Inside source: true *** True Line Result def calc_ship ship ** Processing line: ~ ship.x += ship.dx~ - Inside source: true *** True Line Result ship.x += ship.dx ** Processing line: ~ ship.y += ship.dy~ - Inside source: true *** True Line Result ship.y += ship.dy ** Processing line: ~ wrap_location! ship~ - Inside source: true *** True Line Result wrap_location! ship ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_ships~ - Inside source: true *** True Line Result def calc_ships ** Processing line: ~ all_ships.each { |s| calc_ship s }~ - Inside source: true *** True Line Result all_ships.each { |s| calc_ship s } ** Processing line: ~ return if all_ships.any? { |s| s.dead }~ - Inside source: true *** True Line Result return if all_ships.any? { |s| s.dead } ** Processing line: ~ return if state.round_finished~ - Inside source: true *** True Line Result return if state.round_finished ** Processing line: ~ return unless state.ship_blue.sprite.intersect_rect?(state.ship_red.sprite)~ - Inside source: true *** True Line Result return unless state.ship_blue.sprite.intersect_rect?(state.ship_red.sprite) ** Processing line: ~ state.ship_blue.damage = 5~ - Inside source: true *** True Line Result state.ship_blue.damage = 5 ** Processing line: ~ state.ship_red.damage = 5~ - Inside source: true *** True Line Result state.ship_red.damage = 5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def create_thruster_flames! ship~ - Inside source: true *** True Line Result def create_thruster_flames! ship ** Processing line: ~ state.flames << state.new_entity(:ship_thruster,~ - Inside source: true *** True Line Result state.flames << state.new_entity(:ship_thruster, ** Processing line: ~ { angle: ship.angle + 180 + 60.randomize(:sign, :ratio),~ - Inside source: true *** True Line Result { angle: ship.angle + 180 + 60.randomize(:sign, :ratio), ** Processing line: ~ speed: 5.randomize(:ratio),~ - Inside source: true *** True Line Result speed: 5.randomize(:ratio), ** Processing line: ~ max_alpha: 255 * ship.created_at_elapsed.percentage_of(2.seconds),~ - Inside source: true *** True Line Result max_alpha: 255 * ship.created_at_elapsed.percentage_of(2.seconds), ** Processing line: ~ lifetime: 30,~ - Inside source: true *** True Line Result lifetime: 30, ** Processing line: ~ x: ship.x - ship.angle.vector_x(40) + 5.randomize(:sign, :ratio),~ - Inside source: true *** True Line Result x: ship.x - ship.angle.vector_x(40) + 5.randomize(:sign, :ratio), ** Processing line: ~ y: ship.y - ship.angle.vector_y(40) + 5.randomize(:sign, :ratio) })~ - Inside source: true *** True Line Result y: ship.y - ship.angle.vector_y(40) + 5.randomize(:sign, :ratio) }) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_accelerate_ship should_move_ship, ship~ - Inside source: true *** True Line Result def input_accelerate_ship should_move_ship, ship ** Processing line: ~ return if ship.dead~ - Inside source: true *** True Line Result return if ship.dead ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ should_move_ship &&= (ship.dx + ship.dy).abs < 5~ - Inside source: true *** True Line Result should_move_ship &&= (ship.dx + ship.dy).abs < 5 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if should_move_ship~ - Inside source: true *** True Line Result if should_move_ship ** Processing line: ~ create_thruster_flames! ship~ - Inside source: true *** True Line Result create_thruster_flames! ship ** Processing line: ~ ship.dx += ship.angle.vector_x 0.050~ - Inside source: true *** True Line Result ship.dx += ship.angle.vector_x 0.050 ** Processing line: ~ ship.dy += ship.angle.vector_y 0.050~ - Inside source: true *** True Line Result ship.dy += ship.angle.vector_y 0.050 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ ship.dx *= 0.99~ - Inside source: true *** True Line Result ship.dx *= 0.99 ** Processing line: ~ ship.dy *= 0.99~ - Inside source: true *** True Line Result ship.dy *= 0.99 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_accelerate~ - Inside source: true *** True Line Result def input_accelerate ** Processing line: ~ input_accelerate_ship inputs.controller_one.key_held.r1 || inputs.keyboard.up, state.ship_blue~ - Inside source: true *** True Line Result input_accelerate_ship inputs.controller_one.key_held.r1 || inputs.keyboard.up, state.ship_blue ** Processing line: ~ input_accelerate_ship inputs.controller_two.key_held.r1, state.ship_red~ - Inside source: true *** True Line Result input_accelerate_ship inputs.controller_two.key_held.r1, state.ship_red ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_turn_ship direction, ship~ - Inside source: true *** True Line Result def input_turn_ship direction, ship ** Processing line: ~ ship.angle -= 3 * direction~ - Inside source: true *** True Line Result ship.angle -= 3 * direction ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_turn~ - Inside source: true *** True Line Result def input_turn ** Processing line: ~ input_turn_ship inputs.controller_one.left_right + inputs.keyboard.left_right, state.ship_blue~ - Inside source: true *** True Line Result input_turn_ship inputs.controller_one.left_right + inputs.keyboard.left_right, state.ship_blue ** Processing line: ~ input_turn_ship inputs.controller_two.left_right, state.ship_red~ - Inside source: true *** True Line Result input_turn_ship inputs.controller_two.left_right, state.ship_red ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_bullet create_bullet, ship~ - Inside source: true *** True Line Result def input_bullet create_bullet, ship ** Processing line: ~ return unless create_bullet~ - Inside source: true *** True Line Result return unless create_bullet ** Processing line: ~ return if ship.dead~ - Inside source: true *** True Line Result return if ship.dead ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.bullets << state.new_entity(:ship_bullet,~ - Inside source: true *** True Line Result state.bullets << state.new_entity(:ship_bullet, ** Processing line: ~ { owner: ship,~ - Inside source: true *** True Line Result { owner: ship, ** Processing line: ~ angle: ship.angle,~ - Inside source: true *** True Line Result angle: ship.angle, ** Processing line: ~ max_alpha: 255 * ship.created_at_elapsed.percentage_of(2.seconds),~ - Inside source: true *** True Line Result max_alpha: 255 * ship.created_at_elapsed.percentage_of(2.seconds), ** Processing line: ~ speed: 5 + ship.dx.mult(ship.angle.vector_x) + ship.dy.mult(ship.angle.vector_y),~ - Inside source: true *** True Line Result speed: 5 + ship.dx.mult(ship.angle.vector_x) + ship.dy.mult(ship.angle.vector_y), ** Processing line: ~ lifetime: 120,~ - Inside source: true *** True Line Result lifetime: 120, ** Processing line: ~ sprite_size: 10,~ - Inside source: true *** True Line Result sprite_size: 10, ** Processing line: ~ x: ship.x + ship.angle.vector_x * 32,~ - Inside source: true *** True Line Result x: ship.x + ship.angle.vector_x * 32, ** Processing line: ~ y: ship.y + ship.angle.vector_y * 32 })~ - Inside source: true *** True Line Result y: ship.y + ship.angle.vector_y * 32 }) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_mine create_mine, ship~ - Inside source: true *** True Line Result def input_mine create_mine, ship ** Processing line: ~ return unless create_mine~ - Inside source: true *** True Line Result return unless create_mine ** Processing line: ~ return if ship.dead~ - Inside source: true *** True Line Result return if ship.dead ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.bullets << state.new_entity(:ship_bullet,~ - Inside source: true *** True Line Result state.bullets << state.new_entity(:ship_bullet, ** Processing line: ~ { owner: ship,~ - Inside source: true *** True Line Result { owner: ship, ** Processing line: ~ angle: 360.randomize(:sign, :ratio),~ - Inside source: true *** True Line Result angle: 360.randomize(:sign, :ratio), ** Processing line: ~ max_alpha: 255 * ship.created_at_elapsed.percentage_of(2.seconds),~ - Inside source: true *** True Line Result max_alpha: 255 * ship.created_at_elapsed.percentage_of(2.seconds), ** Processing line: ~ speed: 0.02,~ - Inside source: true *** True Line Result speed: 0.02, ** Processing line: ~ sprite_size: 10,~ - Inside source: true *** True Line Result sprite_size: 10, ** Processing line: ~ lifetime: 600,~ - Inside source: true *** True Line Result lifetime: 600, ** Processing line: ~ x: ship.x + ship.angle.vector_x * -50,~ - Inside source: true *** True Line Result x: ship.x + ship.angle.vector_x * -50, ** Processing line: ~ y: ship.y + ship.angle.vector_y * -50 })~ - Inside source: true *** True Line Result y: ship.y + ship.angle.vector_y * -50 }) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_bullets_and_mines~ - Inside source: true *** True Line Result def input_bullets_and_mines ** Processing line: ~ return if state.bullets.length > 100~ - Inside source: true *** True Line Result return if state.bullets.length > 100 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [inputs.controller_one.key_held.a || inputs.keyboard.key_held.space,~ - Inside source: true *** True Line Result [inputs.controller_one.key_held.a || inputs.keyboard.key_held.space, ** Processing line: ~ inputs.controller_one.key_down.b || inputs.keyboard.key_down.down,~ - Inside source: true *** True Line Result inputs.controller_one.key_down.b || inputs.keyboard.key_down.down, ** Processing line: ~ state.ship_blue],~ - Inside source: true *** True Line Result state.ship_blue], ** Processing line: ~ [inputs.controller_two.key_held.a, inputs.controller_two.key_down.b, state.ship_red]~ - Inside source: true *** True Line Result [inputs.controller_two.key_held.a, inputs.controller_two.key_down.b, state.ship_red] ** Processing line: ~ ].each do |a_held, b_down, ship|~ - Inside source: true *** True Line Result ].each do |a_held, b_down, ship| ** Processing line: ~ input_bullet(a_held && state.tick_count.mod_zero?(10).or(a_held == 0), ship)~ - Inside source: true *** True Line Result input_bullet(a_held && state.tick_count.mod_zero?(10).or(a_held == 0), ship) ** Processing line: ~ input_mine(b_down, ship)~ - Inside source: true *** True Line Result input_mine(b_down, ship) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_kill_ships~ - Inside source: true *** True Line Result def calc_kill_ships ** Processing line: ~ alive_ships.find_all { |s| s.damage >= 5 }.each do |s|~ - Inside source: true *** True Line Result alive_ships.find_all { |s| s.damage >= 5 }.each do |s| ** Processing line: ~ s.dead = true~ - Inside source: true *** True Line Result s.dead = true ** Processing line: ~ create_explosion! :ship_explosion, s, 20, 20, 30, s.max_alpha~ - Inside source: true *** True Line Result create_explosion! :ship_explosion, s, 20, 20, 30, s.max_alpha ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_score~ - Inside source: true *** True Line Result def calc_score ** Processing line: ~ return if state.round_finished~ - Inside source: true *** True Line Result return if state.round_finished ** Processing line: ~ return if alive_ships.length > 1~ - Inside source: true *** True Line Result return if alive_ships.length > 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if alive_ships.first == state.ship_red~ - Inside source: true *** True Line Result if alive_ships.first == state.ship_red ** Processing line: ~ state.ship_red_score += 1~ - Inside source: true *** True Line Result state.ship_red_score += 1 ** Processing line: ~ elsif alive_ships.first == state.ship_blue~ - Inside source: true *** True Line Result elsif alive_ships.first == state.ship_blue ** Processing line: ~ state.ship_blue_score += 1~ - Inside source: true *** True Line Result state.ship_blue_score += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.round_finished = true~ - Inside source: true *** True Line Result state.round_finished = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_reset_ships~ - Inside source: true *** True Line Result def calc_reset_ships ** Processing line: ~ return unless state.round_finished~ - Inside source: true *** True Line Result return unless state.round_finished ** Processing line: ~ state.round_finished_debounce ||= 2.seconds~ - Inside source: true *** True Line Result state.round_finished_debounce ||= 2.seconds ** Processing line: ~ state.round_finished_debounce -= 1~ - Inside source: true *** True Line Result state.round_finished_debounce -= 1 ** Processing line: ~ return if state.round_finished_debounce > 0~ - Inside source: true *** True Line Result return if state.round_finished_debounce > 0 ** Processing line: ~ start_new_round!~ - Inside source: true *** True Line Result start_new_round! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def start_new_round!~ - Inside source: true *** True Line Result def start_new_round! ** Processing line: ~ state.ship_blue = new_blue_ship~ - Inside source: true *** True Line Result state.ship_blue = new_blue_ship ** Processing line: ~ state.ship_red = new_red_ship~ - Inside source: true *** True Line Result state.ship_red = new_red_ship ** Processing line: ~ state.round_finished = false~ - Inside source: true *** True Line Result state.round_finished = false ** Processing line: ~ state.round_finished_debounce = nil~ - Inside source: true *** True Line Result state.round_finished_debounce = nil ** Processing line: ~ state.flames.clear~ - Inside source: true *** True Line Result state.flames.clear ** Processing line: ~ state.bullets.clear~ - Inside source: true *** True Line Result state.bullets.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_winner~ - Inside source: true *** True Line Result def calc_winner ** Processing line: ~ calc_kill_ships~ - Inside source: true *** True Line Result calc_kill_ships ** Processing line: ~ calc_score~ - Inside source: true *** True Line Result calc_score ** Processing line: ~ calc_reset_ships~ - Inside source: true *** True Line Result calc_reset_ships ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $dueling_spaceship = DuelingSpaceships.new~ - Inside source: true *** True Line Result $dueling_spaceship = DuelingSpaceships.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.grid.origin_center!~ - Inside source: true *** True Line Result args.grid.origin_center! ** Processing line: ~ $dueling_spaceship.inputs = args.inputs~ - Inside source: true *** True Line Result $dueling_spaceship.inputs = args.inputs ** Processing line: ~ $dueling_spaceship.outputs = args.outputs~ - Inside source: true *** True Line Result $dueling_spaceship.outputs = args.outputs ** Processing line: ~ $dueling_spaceship.state = args.state~ - Inside source: true *** True Line Result $dueling_spaceship.state = args.state ** Processing line: ~ $dueling_spaceship.grid = args.grid~ - Inside source: true *** True Line Result $dueling_spaceship.grid = args.grid ** Processing line: ~ $dueling_spaceship.tick~ - Inside source: true *** True Line Result $dueling_spaceship.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** arcade/flappy dragon/credits.txt~ - Header detected. *** True Line Result *** True Line Result *** arcade/flappy dragon/credits.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_arcade/flappy_dragon/CREDITS.txt~ - Inside source: true *** True Line Result # ./samples/99_genre_arcade/flappy_dragon/CREDITS.txt ** Processing line: ~ code: Amir Rajan, https://twitter.com/amirrajan~ - Inside source: true *** True Line Result code: Amir Rajan, https://twitter.com/amirrajan ** Processing line: ~ graphics and audio: Nick Culbertson, https://twitter.com/MobyPixel~ - Inside source: true *** True Line Result graphics and audio: Nick Culbertson, https://twitter.com/MobyPixel ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** arcade/flappy dragon/main.rb~ - Header detected. *** True Line Result *** True Line Result *** arcade/flappy dragon/main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_arcade/flappy_dragon/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_arcade/flappy_dragon/app/main.rb ** Processing line: ~ class FlappyDragon~ - Inside source: true *** True Line Result class FlappyDragon ** Processing line: ~ attr_accessor :grid, :inputs, :state, :outputs~ - Inside source: true *** True Line Result attr_accessor :grid, :inputs, :state, :outputs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ process_inputs~ - Inside source: true *** True Line Result process_inputs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ state.flap_power = 11~ - Inside source: true *** True Line Result state.flap_power = 11 ** Processing line: ~ state.gravity = 0.9~ - Inside source: true *** True Line Result state.gravity = 0.9 ** Processing line: ~ state.ceiling = 600~ - Inside source: true *** True Line Result state.ceiling = 600 ** Processing line: ~ state.ceiling_flap_power = 6~ - Inside source: true *** True Line Result state.ceiling_flap_power = 6 ** Processing line: ~ state.wall_countdown_length = 100~ - Inside source: true *** True Line Result state.wall_countdown_length = 100 ** Processing line: ~ state.wall_gap_size = 100~ - Inside source: true *** True Line Result state.wall_gap_size = 100 ** Processing line: ~ state.wall_countdown ||= 0~ - Inside source: true *** True Line Result state.wall_countdown ||= 0 ** Processing line: ~ state.hi_score ||= 0~ - Inside source: true *** True Line Result state.hi_score ||= 0 ** Processing line: ~ state.score ||= 0~ - Inside source: true *** True Line Result state.score ||= 0 ** Processing line: ~ state.walls ||= []~ - Inside source: true *** True Line Result state.walls ||= [] ** Processing line: ~ state.x ||= 50~ - Inside source: true *** True Line Result state.x ||= 50 ** Processing line: ~ state.y ||= 500~ - Inside source: true *** True Line Result state.y ||= 500 ** Processing line: ~ state.dy ||= 0~ - Inside source: true *** True Line Result state.dy ||= 0 ** Processing line: ~ state.scene ||= :menu~ - Inside source: true *** True Line Result state.scene ||= :menu ** Processing line: ~ state.scene_at ||= 0~ - Inside source: true *** True Line Result state.scene_at ||= 0 ** Processing line: ~ state.difficulty ||= :normal~ - Inside source: true *** True Line Result state.difficulty ||= :normal ** Processing line: ~ state.new_difficulty ||= :normal~ - Inside source: true *** True Line Result state.new_difficulty ||= :normal ** Processing line: ~ state.countdown ||= 4.seconds~ - Inside source: true *** True Line Result state.countdown ||= 4.seconds ** Processing line: ~ state.flash_at ||= 0~ - Inside source: true *** True Line Result state.flash_at ||= 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ outputs.sounds << "sounds/flappy-song.ogg" if state.tick_count == 1~ - Inside source: true *** True Line Result outputs.sounds << "sounds/flappy-song.ogg" if state.tick_count == 1 ** Processing line: ~ render_score~ - Inside source: true *** True Line Result render_score ** Processing line: ~ render_menu~ - Inside source: true *** True Line Result render_menu ** Processing line: ~ render_game~ - Inside source: true *** True Line Result render_game ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_score~ - Inside source: true *** True Line Result def render_score ** Processing line: ~ outputs.primitives << { x: 10, y: 710, text: "HI SCORE: #{state.hi_score}", **large_white_typeset }~ - Inside source: true *** True Line Result outputs.primitives << { x: 10, y: 710, text: "HI SCORE: #{state.hi_score}", **large_white_typeset } ** Processing line: ~ outputs.primitives << { x: 10, y: 680, text: "SCORE: #{state.score}", **large_white_typeset }~ - Inside source: true *** True Line Result outputs.primitives << { x: 10, y: 680, text: "SCORE: #{state.score}", **large_white_typeset } ** Processing line: ~ outputs.primitives << { x: 10, y: 650, text: "DIFFICULTY: #{state.difficulty.upcase}", **large_white_typeset }~ - Inside source: true *** True Line Result outputs.primitives << { x: 10, y: 650, text: "DIFFICULTY: #{state.difficulty.upcase}", **large_white_typeset } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_menu~ - Inside source: true *** True Line Result def render_menu ** Processing line: ~ return unless state.scene == :menu~ - Inside source: true *** True Line Result return unless state.scene == :menu ** Processing line: ~ render_overlay~ - Inside source: true *** True Line Result render_overlay ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << { x: 640, y: 700, text: "Flappy Dragon", size_enum: 50, alignment_enum: 1, **white }~ - Inside source: true *** True Line Result outputs.labels << { x: 640, y: 700, text: "Flappy Dragon", size_enum: 50, alignment_enum: 1, **white } ** Processing line: ~ outputs.labels << { x: 640, y: 500, text: "Instructions: Press Spacebar to flap. Don't die.", size_enum: 4, alignment_enum: 1, **white }~ - Inside source: true *** True Line Result outputs.labels << { x: 640, y: 500, text: "Instructions: Press Spacebar to flap. Don't die.", size_enum: 4, alignment_enum: 1, **white } ** Processing line: ~ outputs.labels << { x: 430, y: 430, text: "[Tab] Change difficulty", size_enum: 4, alignment_enum: 0, **white }~ - Inside source: true *** True Line Result outputs.labels << { x: 430, y: 430, text: "[Tab] Change difficulty", size_enum: 4, alignment_enum: 0, **white } ** Processing line: ~ outputs.labels << { x: 430, y: 400, text: "[Enter] Start at New Difficulty ", size_enum: 4, alignment_enum: 0, **white }~ - Inside source: true *** True Line Result outputs.labels << { x: 430, y: 400, text: "[Enter] Start at New Difficulty ", size_enum: 4, alignment_enum: 0, **white } ** Processing line: ~ outputs.labels << { x: 430, y: 370, text: "[Escape] Cancel/Resume ", size_enum: 4, alignment_enum: 0, **white }~ - Inside source: true *** True Line Result outputs.labels << { x: 430, y: 370, text: "[Escape] Cancel/Resume ", size_enum: 4, alignment_enum: 0, **white } ** Processing line: ~ outputs.labels << { x: 640, y: 300, text: "(mouse, touch, and game controllers work, too!) ", size_enum: 4, alignment_enum: 1, **white }~ - Inside source: true *** True Line Result outputs.labels << { x: 640, y: 300, text: "(mouse, touch, and game controllers work, too!) ", size_enum: 4, alignment_enum: 1, **white } ** Processing line: ~ outputs.labels << { x: 640, y: 200, text: "Difficulty: #{state.new_difficulty.capitalize}", size_enum: 4, alignment_enum: 1, **white }~ - Inside source: true *** True Line Result outputs.labels << { x: 640, y: 200, text: "Difficulty: #{state.new_difficulty.capitalize}", size_enum: 4, alignment_enum: 1, **white } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << { x: 10, y: 100, text: "Code: @amirrajan", **white }~ - Inside source: true *** True Line Result outputs.labels << { x: 10, y: 100, text: "Code: @amirrajan", **white } ** Processing line: ~ outputs.labels << { x: 10, y: 80, text: "Art: @mobypixel", **white }~ - Inside source: true *** True Line Result outputs.labels << { x: 10, y: 80, text: "Art: @mobypixel", **white } ** Processing line: ~ outputs.labels << { x: 10, y: 60, text: "Music: @mobypixel", **white }~ - Inside source: true *** True Line Result outputs.labels << { x: 10, y: 60, text: "Music: @mobypixel", **white } ** Processing line: ~ outputs.labels << { x: 10, y: 40, text: "Engine: DragonRuby GTK", **white }~ - Inside source: true *** True Line Result outputs.labels << { x: 10, y: 40, text: "Engine: DragonRuby GTK", **white } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_overlay~ - Inside source: true *** True Line Result def render_overlay ** Processing line: ~ overlay_rect = grid.rect.scale_rect(1.1, 0, 0)~ - Inside source: true *** True Line Result overlay_rect = grid.rect.scale_rect(1.1, 0, 0) ** Processing line: ~ outputs.primitives << { x: overlay_rect.x,~ - Inside source: true *** True Line Result outputs.primitives << { x: overlay_rect.x, ** Processing line: ~ y: overlay_rect.y,~ - Inside source: true *** True Line Result y: overlay_rect.y, ** Processing line: ~ w: overlay_rect.w,~ - Inside source: true *** True Line Result w: overlay_rect.w, ** Processing line: ~ h: overlay_rect.h,~ - Inside source: true *** True Line Result h: overlay_rect.h, ** Processing line: ~ r: 0, g: 0, b: 0, a: 230 }.solid!~ - Inside source: true *** True Line Result r: 0, g: 0, b: 0, a: 230 }.solid! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_game~ - Inside source: true *** True Line Result def render_game ** Processing line: ~ render_game_over~ - Inside source: true *** True Line Result render_game_over ** Processing line: ~ render_background~ - Inside source: true *** True Line Result render_background ** Processing line: ~ render_walls~ - Inside source: true *** True Line Result render_walls ** Processing line: ~ render_dragon~ - Inside source: true *** True Line Result render_dragon ** Processing line: ~ render_flash~ - Inside source: true *** True Line Result render_flash ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_game_over~ - Inside source: true *** True Line Result def render_game_over ** Processing line: ~ return unless state.scene == :game~ - Inside source: true *** True Line Result return unless state.scene == :game ** Processing line: ~ outputs.labels << { x: 638, y: 358, text: score_text, size_enum: 20, alignment_enum: 1 }~ - Inside source: true *** True Line Result outputs.labels << { x: 638, y: 358, text: score_text, size_enum: 20, alignment_enum: 1 } ** Processing line: ~ outputs.labels << { x: 635, y: 360, text: score_text, size_enum: 20, alignment_enum: 1, r: 255, g: 255, b: 255 }~ - Inside source: true *** True Line Result outputs.labels << { x: 635, y: 360, text: score_text, size_enum: 20, alignment_enum: 1, r: 255, g: 255, b: 255 } ** Processing line: ~ outputs.labels << { x: 638, y: 428, text: countdown_text, size_enum: 20, alignment_enum: 1 }~ - Inside source: true *** True Line Result outputs.labels << { x: 638, y: 428, text: countdown_text, size_enum: 20, alignment_enum: 1 } ** Processing line: ~ outputs.labels << { x: 635, y: 430, text: countdown_text, size_enum: 20, alignment_enum: 1, r: 255, g: 255, b: 255 }~ - Inside source: true *** True Line Result outputs.labels << { x: 635, y: 430, text: countdown_text, size_enum: 20, alignment_enum: 1, r: 255, g: 255, b: 255 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_background~ - Inside source: true *** True Line Result def render_background ** Processing line: ~ outputs.sprites << { x: 0, y: 0, w: 1280, h: 720, path: 'sprites/background.png' }~ - Inside source: true *** True Line Result outputs.sprites << { x: 0, y: 0, w: 1280, h: 720, path: 'sprites/background.png' } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ scroll_point_at = state.tick_count~ - Inside source: true *** True Line Result scroll_point_at = state.tick_count ** Processing line: ~ scroll_point_at = state.scene_at if state.scene == :menu~ - Inside source: true *** True Line Result scroll_point_at = state.scene_at if state.scene == :menu ** Processing line: ~ scroll_point_at = state.death_at if state.countdown > 0~ - Inside source: true *** True Line Result scroll_point_at = state.death_at if state.countdown > 0 ** Processing line: ~ scroll_point_at ||= 0~ - Inside source: true *** True Line Result scroll_point_at ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_back.png', 0.25)~ - Inside source: true *** True Line Result outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_back.png', 0.25) ** Processing line: ~ outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_middle.png', 0.50)~ - Inside source: true *** True Line Result outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_middle.png', 0.50) ** Processing line: ~ outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_front.png', 1.00, -80)~ - Inside source: true *** True Line Result outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_front.png', 1.00, -80) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def scrolling_background at, path, rate, y = 0~ - Inside source: true *** True Line Result def scrolling_background at, path, rate, y = 0 ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ { x: 0 - at.*(rate) % 1440, y: y, w: 1440, h: 720, path: path },~ - Inside source: true *** True Line Result { x: 0 - at.*(rate) % 1440, y: y, w: 1440, h: 720, path: path }, ** Processing line: ~ { x: 1440 - at.*(rate) % 1440, y: y, w: 1440, h: 720, path: path }~ - Inside source: true *** True Line Result { x: 1440 - at.*(rate) % 1440, y: y, w: 1440, h: 720, path: path } ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_walls~ - Inside source: true *** True Line Result def render_walls ** Processing line: ~ state.walls.each do |w|~ - Inside source: true *** True Line Result state.walls.each do |w| ** Processing line: ~ w.sprites = [~ - Inside source: true *** True Line Result w.sprites = [ ** Processing line: ~ { x: w.x, y: w.bottom_height - 720, w: 100, h: 720, path: 'sprites/wall.png', angle: 180 },~ - Inside source: true *** True Line Result { x: w.x, y: w.bottom_height - 720, w: 100, h: 720, path: 'sprites/wall.png', angle: 180 }, ** Processing line: ~ { x: w.x, y: w.top_y, w: 100, h: 720, path: 'sprites/wallbottom.png', angle: 0 }~ - Inside source: true *** True Line Result { x: w.x, y: w.top_y, w: 100, h: 720, path: 'sprites/wallbottom.png', angle: 0 } ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ outputs.sprites << state.walls.map(&:sprites)~ - Inside source: true *** True Line Result outputs.sprites << state.walls.map(&:sprites) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_dragon~ - Inside source: true *** True Line Result def render_dragon ** Processing line: ~ state.show_death = true if state.countdown == 3.seconds~ - Inside source: true *** True Line Result state.show_death = true if state.countdown == 3.seconds ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.show_death == false || !state.death_at~ - Inside source: true *** True Line Result if state.show_death == false || !state.death_at ** Processing line: ~ animation_index = state.flapped_at.frame_index 6, 2, false if state.flapped_at~ - Inside source: true *** True Line Result animation_index = state.flapped_at.frame_index 6, 2, false if state.flapped_at ** Processing line: ~ sprite_name = "sprites/dragon_fly#{animation_index.or(0) + 1}.png"~ - Inside source: true *** True Line Result sprite_name = "sprites/dragon_fly#{animation_index.or(0) + 1}.png" ** Processing line: ~ state.dragon_sprite = { x: state.x, y: state.y, w: 100, h: 80, path: sprite_name, angle: state.dy * 1.2 }~ - Inside source: true *** True Line Result state.dragon_sprite = { x: state.x, y: state.y, w: 100, h: 80, path: sprite_name, angle: state.dy * 1.2 } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ sprite_name = "sprites/dragon_die.png"~ - Inside source: true *** True Line Result sprite_name = "sprites/dragon_die.png" ** Processing line: ~ state.dragon_sprite = { x: state.x, y: state.y, w: 100, h: 80, path: sprite_name, angle: state.dy * 1.2 }~ - Inside source: true *** True Line Result state.dragon_sprite = { x: state.x, y: state.y, w: 100, h: 80, path: sprite_name, angle: state.dy * 1.2 } ** Processing line: ~ sprite_changed_elapsed = state.death_at.elapsed_time - 1.seconds~ - Inside source: true *** True Line Result sprite_changed_elapsed = state.death_at.elapsed_time - 1.seconds ** Processing line: ~ state.dragon_sprite.angle += (sprite_changed_elapsed ** 1.3) * state.death_fall_direction * -1~ - Inside source: true *** True Line Result state.dragon_sprite.angle += (sprite_changed_elapsed ** 1.3) * state.death_fall_direction * -1 ** Processing line: ~ state.dragon_sprite.x += (sprite_changed_elapsed ** 1.2) * state.death_fall_direction~ - Inside source: true *** True Line Result state.dragon_sprite.x += (sprite_changed_elapsed ** 1.2) * state.death_fall_direction ** Processing line: ~ state.dragon_sprite.y += (sprite_changed_elapsed * 14 - sprite_changed_elapsed ** 1.6)~ - Inside source: true *** True Line Result state.dragon_sprite.y += (sprite_changed_elapsed * 14 - sprite_changed_elapsed ** 1.6) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.sprites << state.dragon_sprite~ - Inside source: true *** True Line Result outputs.sprites << state.dragon_sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_flash~ - Inside source: true *** True Line Result def render_flash ** Processing line: ~ return unless state.flash_at~ - Inside source: true *** True Line Result return unless state.flash_at ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.primitives << { **grid.rect.to_hash,~ - Inside source: true *** True Line Result outputs.primitives << { **grid.rect.to_hash, ** Processing line: ~ **white,~ - Inside source: true *** True Line Result **white, ** Processing line: ~ a: 255 * state.flash_at.ease(20, :flip) }.solid!~ - Inside source: true *** True Line Result a: 255 * state.flash_at.ease(20, :flip) }.solid! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.flash_at = 0 if state.flash_at.elapsed_time > 20~ - Inside source: true *** True Line Result state.flash_at = 0 if state.flash_at.elapsed_time > 20 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ return unless state.scene == :game~ - Inside source: true *** True Line Result return unless state.scene == :game ** Processing line: ~ reset_game if state.countdown == 1~ - Inside source: true *** True Line Result reset_game if state.countdown == 1 ** Processing line: ~ state.countdown -= 1 and return if state.countdown > 0~ - Inside source: true *** True Line Result state.countdown -= 1 and return if state.countdown > 0 ** Processing line: ~ calc_walls~ - Inside source: true *** True Line Result calc_walls ** Processing line: ~ calc_flap~ - Inside source: true *** True Line Result calc_flap ** Processing line: ~ calc_game_over~ - Inside source: true *** True Line Result calc_game_over ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_walls~ - Inside source: true *** True Line Result def calc_walls ** Processing line: ~ state.walls.each { |w| w.x -= 8 }~ - Inside source: true *** True Line Result state.walls.each { |w| w.x -= 8 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ walls_count_before_removal = state.walls.length~ - Inside source: true *** True Line Result walls_count_before_removal = state.walls.length ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.walls.reject! { |w| w.x < -100 }~ - Inside source: true *** True Line Result state.walls.reject! { |w| w.x < -100 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.score += 1 if state.walls.count < walls_count_before_removal~ - Inside source: true *** True Line Result state.score += 1 if state.walls.count < walls_count_before_removal ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.wall_countdown -= 1 and return if state.wall_countdown > 0~ - Inside source: true *** True Line Result state.wall_countdown -= 1 and return if state.wall_countdown > 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.walls << state.new_entity(:wall) do |w|~ - Inside source: true *** True Line Result state.walls << state.new_entity(:wall) do |w| ** Processing line: ~ w.x = grid.right~ - Inside source: true *** True Line Result w.x = grid.right ** Processing line: ~ w.opening = grid.top~ - Inside source: true *** True Line Result w.opening = grid.top ** Processing line: ~ .randomize(:ratio)~ - Inside source: true *** True Line Result .randomize(:ratio) ** Processing line: ~ .greater(200)~ - Inside source: true *** True Line Result .greater(200) ** Processing line: ~ .lesser(520)~ - Inside source: true *** True Line Result .lesser(520) ** Processing line: ~ w.bottom_height = w.opening - state.wall_gap_size~ - Inside source: true *** True Line Result w.bottom_height = w.opening - state.wall_gap_size ** Processing line: ~ w.top_y = w.opening + state.wall_gap_size~ - Inside source: true *** True Line Result w.top_y = w.opening + state.wall_gap_size ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.wall_countdown = state.wall_countdown_length~ - Inside source: true *** True Line Result state.wall_countdown = state.wall_countdown_length ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_flap~ - Inside source: true *** True Line Result def calc_flap ** Processing line: ~ state.y += state.dy~ - Inside source: true *** True Line Result state.y += state.dy ** Processing line: ~ state.dy = state.dy.lesser state.flap_power~ - Inside source: true *** True Line Result state.dy = state.dy.lesser state.flap_power ** Processing line: ~ state.dy -= state.gravity~ - Inside source: true *** True Line Result state.dy -= state.gravity ** Processing line: ~ return if state.y < state.ceiling~ - Inside source: true *** True Line Result return if state.y < state.ceiling ** Processing line: ~ state.y = state.ceiling~ - Inside source: true *** True Line Result state.y = state.ceiling ** Processing line: ~ state.dy = state.dy.lesser state.ceiling_flap_power~ - Inside source: true *** True Line Result state.dy = state.dy.lesser state.ceiling_flap_power ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_game_over~ - Inside source: true *** True Line Result def calc_game_over ** Processing line: ~ return unless game_over?~ - Inside source: true *** True Line Result return unless game_over? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.death_at = state.tick_count~ - Inside source: true *** True Line Result state.death_at = state.tick_count ** Processing line: ~ state.death_from = state.walls.first~ - Inside source: true *** True Line Result state.death_from = state.walls.first ** Processing line: ~ state.death_fall_direction = -1~ - Inside source: true *** True Line Result state.death_fall_direction = -1 ** Processing line: ~ state.death_fall_direction = 1 if state.x > state.death_from.x~ - Inside source: true *** True Line Result state.death_fall_direction = 1 if state.x > state.death_from.x ** Processing line: ~ outputs.sounds << "sounds/hit-sound.wav"~ - Inside source: true *** True Line Result outputs.sounds << "sounds/hit-sound.wav" ** Processing line: ~ begin_countdown~ - Inside source: true *** True Line Result begin_countdown ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_inputs~ - Inside source: true *** True Line Result def process_inputs ** Processing line: ~ process_inputs_menu~ - Inside source: true *** True Line Result process_inputs_menu ** Processing line: ~ process_inputs_game~ - Inside source: true *** True Line Result process_inputs_game ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_inputs_menu~ - Inside source: true *** True Line Result def process_inputs_menu ** Processing line: ~ return unless state.scene == :menu~ - Inside source: true *** True Line Result return unless state.scene == :menu ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ changediff = inputs.keyboard.key_down.tab || inputs.controller_one.key_down.select~ - Inside source: true *** True Line Result changediff = inputs.keyboard.key_down.tab || inputs.controller_one.key_down.select ** Processing line: ~ if inputs.mouse.click~ - Inside source: true *** True Line Result if inputs.mouse.click ** Processing line: ~ p = inputs.mouse.click.point~ - Inside source: true *** True Line Result p = inputs.mouse.click.point ** Processing line: ~ if (p.y >= 165) && (p.y < 200) && (p.x >= 500) && (p.x < 800)~ - Inside source: true *** True Line Result if (p.y >= 165) && (p.y < 200) && (p.x >= 500) && (p.x < 800) ** Processing line: ~ changediff = true~ - Inside source: true *** True Line Result changediff = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if changediff~ - Inside source: true *** True Line Result if changediff ** Processing line: ~ case state.new_difficulty~ - Inside source: true *** True Line Result case state.new_difficulty ** Processing line: ~ when :easy~ - Inside source: true *** True Line Result when :easy ** Processing line: ~ state.new_difficulty = :normal~ - Inside source: true *** True Line Result state.new_difficulty = :normal ** Processing line: ~ when :normal~ - Inside source: true *** True Line Result when :normal ** Processing line: ~ state.new_difficulty = :hard~ - Inside source: true *** True Line Result state.new_difficulty = :hard ** Processing line: ~ when :hard~ - Inside source: true *** True Line Result when :hard ** Processing line: ~ state.new_difficulty = :flappy~ - Inside source: true *** True Line Result state.new_difficulty = :flappy ** Processing line: ~ when :flappy~ - Inside source: true *** True Line Result when :flappy ** Processing line: ~ state.new_difficulty = :easy~ - Inside source: true *** True Line Result state.new_difficulty = :easy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.key_down.enter || inputs.controller_one.key_down.start || inputs.controller_one.key_down.a~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.enter || inputs.controller_one.key_down.start || inputs.controller_one.key_down.a ** Processing line: ~ state.difficulty = state.new_difficulty~ - Inside source: true *** True Line Result state.difficulty = state.new_difficulty ** Processing line: ~ change_to_scene :game~ - Inside source: true *** True Line Result change_to_scene :game ** Processing line: ~ reset_game false~ - Inside source: true *** True Line Result reset_game false ** Processing line: ~ state.hi_score = 0~ - Inside source: true *** True Line Result state.hi_score = 0 ** Processing line: ~ begin_countdown~ - Inside source: true *** True Line Result begin_countdown ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.key_down.escape || (inputs.mouse.click && !changediff) || inputs.controller_one.key_down.b~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.escape || (inputs.mouse.click && !changediff) || inputs.controller_one.key_down.b ** Processing line: ~ state.new_difficulty = state.difficulty~ - Inside source: true *** True Line Result state.new_difficulty = state.difficulty ** Processing line: ~ change_to_scene :game~ - Inside source: true *** True Line Result change_to_scene :game ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_inputs_game~ - Inside source: true *** True Line Result def process_inputs_game ** Processing line: ~ return unless state.scene == :game~ - Inside source: true *** True Line Result return unless state.scene == :game ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ clicked_menu = false~ - Inside source: true *** True Line Result clicked_menu = false ** Processing line: ~ if inputs.mouse.click~ - Inside source: true *** True Line Result if inputs.mouse.click ** Processing line: ~ p = inputs.mouse.click.point~ - Inside source: true *** True Line Result p = inputs.mouse.click.point ** Processing line: ~ clicked_menu = (p.y >= 620) && (p.x < 275)~ - Inside source: true *** True Line Result clicked_menu = (p.y >= 620) && (p.x < 275) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if clicked_menu || inputs.keyboard.key_down.escape || inputs.keyboard.key_down.enter || inputs.controller_one.key_down.start~ - Inside source: true *** True Line Result if clicked_menu || inputs.keyboard.key_down.escape || inputs.keyboard.key_down.enter || inputs.controller_one.key_down.start ** Processing line: ~ change_to_scene :menu~ - Inside source: true *** True Line Result change_to_scene :menu ** Processing line: ~ elsif (inputs.mouse.down || inputs.mouse.click || inputs.keyboard.key_down.space || inputs.controller_one.key_down.a) && state.countdown == 0~ - Inside source: true *** True Line Result elsif (inputs.mouse.down || inputs.mouse.click || inputs.keyboard.key_down.space || inputs.controller_one.key_down.a) && state.countdown == 0 ** Processing line: ~ state.dy = 0~ - Inside source: true *** True Line Result state.dy = 0 ** Processing line: ~ state.dy += state.flap_power~ - Inside source: true *** True Line Result state.dy += state.flap_power ** Processing line: ~ state.flapped_at = state.tick_count~ - Inside source: true *** True Line Result state.flapped_at = state.tick_count ** Processing line: ~ outputs.sounds << "sounds/fly-sound.wav"~ - Inside source: true *** True Line Result outputs.sounds << "sounds/fly-sound.wav" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def white~ - Inside source: true *** True Line Result def white ** Processing line: ~ { r: 255, g: 255, b: 255 }~ - Inside source: true *** True Line Result { r: 255, g: 255, b: 255 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def large_white_typeset~ - Inside source: true *** True Line Result def large_white_typeset ** Processing line: ~ { size_enum: 5, alignment_enum: 0, r: 255, g: 255, b: 255 }~ - Inside source: true *** True Line Result { size_enum: 5, alignment_enum: 0, r: 255, g: 255, b: 255 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def at_beginning?~ - Inside source: true *** True Line Result def at_beginning? ** Processing line: ~ state.walls.count == 0~ - Inside source: true *** True Line Result state.walls.count == 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def dragon_collision_box~ - Inside source: true *** True Line Result def dragon_collision_box ** Processing line: ~ state.dragon_sprite~ - Inside source: true *** True Line Result state.dragon_sprite ** Processing line: ~ .scale_rect(1.0 - collision_forgiveness, 0.5, 0.5)~ - Inside source: true *** True Line Result .scale_rect(1.0 - collision_forgiveness, 0.5, 0.5) ** Processing line: ~ .rect_shift_right(10)~ - Inside source: true *** True Line Result .rect_shift_right(10) ** Processing line: ~ .rect_shift_up(state.dy * 2)~ - Inside source: true *** True Line Result .rect_shift_up(state.dy * 2) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def game_over?~ - Inside source: true *** True Line Result def game_over? ** Processing line: ~ return true if state.y <= 0.-(500 * collision_forgiveness) && !at_beginning?~ - Inside source: true *** True Line Result return true if state.y <= 0.-(500 * collision_forgiveness) && !at_beginning? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.walls~ - Inside source: true *** True Line Result state.walls ** Processing line: ~ .flat_map { |w| w.sprites }~ - Inside source: true *** True Line Result .flat_map { |w| w.sprites } ** Processing line: ~ .any? do |s|~ - Inside source: true *** True Line Result .any? do |s| ** Processing line: ~ s && s.intersect_rect?(dragon_collision_box)~ - Inside source: true *** True Line Result s && s.intersect_rect?(dragon_collision_box) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def collision_forgiveness~ - Inside source: true *** True Line Result def collision_forgiveness ** Processing line: ~ case state.difficulty~ - Inside source: true *** True Line Result case state.difficulty ** Processing line: ~ when :easy~ - Inside source: true *** True Line Result when :easy ** Processing line: ~ 0.9~ - Inside source: true *** True Line Result 0.9 ** Processing line: ~ when :normal~ - Inside source: true *** True Line Result when :normal ** Processing line: ~ 0.7~ - Inside source: true *** True Line Result 0.7 ** Processing line: ~ when :hard~ - Inside source: true *** True Line Result when :hard ** Processing line: ~ 0.5~ - Inside source: true *** True Line Result 0.5 ** Processing line: ~ when :flappy~ - Inside source: true *** True Line Result when :flappy ** Processing line: ~ 0.3~ - Inside source: true *** True Line Result 0.3 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ 0.9~ - Inside source: true *** True Line Result 0.9 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def countdown_text~ - Inside source: true *** True Line Result def countdown_text ** Processing line: ~ state.countdown ||= -1~ - Inside source: true *** True Line Result state.countdown ||= -1 ** Processing line: ~ return "" if state.countdown == 0~ - Inside source: true *** True Line Result return "" if state.countdown == 0 ** Processing line: ~ return "GO!" if state.countdown.idiv(60) == 0~ - Inside source: true *** True Line Result return "GO!" if state.countdown.idiv(60) == 0 ** Processing line: ~ return "GAME OVER" if state.death_at~ - Inside source: true *** True Line Result return "GAME OVER" if state.death_at ** Processing line: ~ return "READY?"~ - Inside source: true *** True Line Result return "READY?" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def begin_countdown~ - Inside source: true *** True Line Result def begin_countdown ** Processing line: ~ state.countdown = 4.seconds~ - Inside source: true *** True Line Result state.countdown = 4.seconds ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def score_text~ - Inside source: true *** True Line Result def score_text ** Processing line: ~ return "" unless state.countdown > 1.seconds~ - Inside source: true *** True Line Result return "" unless state.countdown > 1.seconds ** Processing line: ~ return "" unless state.death_at~ - Inside source: true *** True Line Result return "" unless state.death_at ** Processing line: ~ return "SCORE: 0 (LOL)" if state.score == 0~ - Inside source: true *** True Line Result return "SCORE: 0 (LOL)" if state.score == 0 ** Processing line: ~ return "HI SCORE: #{state.score}" if state.score == state.hi_score~ - Inside source: true *** True Line Result return "HI SCORE: #{state.score}" if state.score == state.hi_score ** Processing line: ~ return "SCORE: #{state.score}"~ - Inside source: true *** True Line Result return "SCORE: #{state.score}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset_game set_flash = true~ - Inside source: true *** True Line Result def reset_game set_flash = true ** Processing line: ~ state.flash_at = state.tick_count if set_flash~ - Inside source: true *** True Line Result state.flash_at = state.tick_count if set_flash ** Processing line: ~ state.walls = []~ - Inside source: true *** True Line Result state.walls = [] ** Processing line: ~ state.y = 500~ - Inside source: true *** True Line Result state.y = 500 ** Processing line: ~ state.dy = 0~ - Inside source: true *** True Line Result state.dy = 0 ** Processing line: ~ state.hi_score = state.hi_score.greater(state.score)~ - Inside source: true *** True Line Result state.hi_score = state.hi_score.greater(state.score) ** Processing line: ~ state.score = 0~ - Inside source: true *** True Line Result state.score = 0 ** Processing line: ~ state.wall_countdown = state.wall_countdown_length.fdiv(2)~ - Inside source: true *** True Line Result state.wall_countdown = state.wall_countdown_length.fdiv(2) ** Processing line: ~ state.show_death = false~ - Inside source: true *** True Line Result state.show_death = false ** Processing line: ~ state.death_at = nil~ - Inside source: true *** True Line Result state.death_at = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def change_to_scene scene~ - Inside source: true *** True Line Result def change_to_scene scene ** Processing line: ~ state.scene = scene~ - Inside source: true *** True Line Result state.scene = scene ** Processing line: ~ state.scene_at = state.tick_count~ - Inside source: true *** True Line Result state.scene_at = state.tick_count ** Processing line: ~ inputs.keyboard.clear~ - Inside source: true *** True Line Result inputs.keyboard.clear ** Processing line: ~ inputs.controller_one.clear~ - Inside source: true *** True Line Result inputs.controller_one.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $flappy_dragon = FlappyDragon.new~ - Inside source: true *** True Line Result $flappy_dragon = FlappyDragon.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $flappy_dragon.grid = args.grid~ - Inside source: true *** True Line Result $flappy_dragon.grid = args.grid ** Processing line: ~ $flappy_dragon.inputs = args.inputs~ - Inside source: true *** True Line Result $flappy_dragon.inputs = args.inputs ** Processing line: ~ $flappy_dragon.state = args.state~ - Inside source: true *** True Line Result $flappy_dragon.state = args.state ** Processing line: ~ $flappy_dragon.outputs = args.outputs~ - Inside source: true *** True Line Result $flappy_dragon.outputs = args.outputs ** Processing line: ~ $flappy_dragon.tick~ - Inside source: true *** True Line Result $flappy_dragon.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Arcade - Pong - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Arcade - Pong - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_arcade/pong/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_arcade/pong/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~ input args~ - Inside source: true *** True Line Result input args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ args.state.ball.debounce ||= 3 * 60~ - Inside source: true *** True Line Result args.state.ball.debounce ||= 3 * 60 ** Processing line: ~ args.state.ball.size ||= 10~ - Inside source: true *** True Line Result args.state.ball.size ||= 10 ** Processing line: ~ args.state.ball.size_half ||= args.state.ball.size / 2~ - Inside source: true *** True Line Result args.state.ball.size_half ||= args.state.ball.size / 2 ** Processing line: ~ args.state.ball.x ||= 640~ - Inside source: true *** True Line Result args.state.ball.x ||= 640 ** Processing line: ~ args.state.ball.y ||= 360~ - Inside source: true *** True Line Result args.state.ball.y ||= 360 ** Processing line: ~ args.state.ball.dx ||= 5.randomize(:sign)~ - Inside source: true *** True Line Result args.state.ball.dx ||= 5.randomize(:sign) ** Processing line: ~ args.state.ball.dy ||= 5.randomize(:sign)~ - Inside source: true *** True Line Result args.state.ball.dy ||= 5.randomize(:sign) ** Processing line: ~ args.state.left_paddle.y ||= 360~ - Inside source: true *** True Line Result args.state.left_paddle.y ||= 360 ** Processing line: ~ args.state.right_paddle.y ||= 360~ - Inside source: true *** True Line Result args.state.right_paddle.y ||= 360 ** Processing line: ~ args.state.paddle.h ||= 120~ - Inside source: true *** True Line Result args.state.paddle.h ||= 120 ** Processing line: ~ args.state.paddle.w ||= 10~ - Inside source: true *** True Line Result args.state.paddle.w ||= 10 ** Processing line: ~ args.state.left_paddle.score ||= 0~ - Inside source: true *** True Line Result args.state.left_paddle.score ||= 0 ** Processing line: ~ args.state.right_paddle.score ||= 0~ - Inside source: true *** True Line Result args.state.right_paddle.score ||= 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ render_center_line args~ - Inside source: true *** True Line Result render_center_line args ** Processing line: ~ render_scores args~ - Inside source: true *** True Line Result render_scores args ** Processing line: ~ render_countdown args~ - Inside source: true *** True Line Result render_countdown args ** Processing line: ~ render_ball args~ - Inside source: true *** True Line Result render_ball args ** Processing line: ~ render_paddles args~ - Inside source: true *** True Line Result render_paddles args ** Processing line: ~ render_instructions args~ - Inside source: true *** True Line Result render_instructions args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :render_methods~ - Inside source: true *** True Line Result begin :render_methods ** Processing line: ~ def render_center_line args~ - Inside source: true *** True Line Result def render_center_line args ** Processing line: ~ args.outputs.lines << [640, 0, 640, 720]~ - Inside source: true *** True Line Result args.outputs.lines << [640, 0, 640, 720] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_scores args~ - Inside source: true *** True Line Result def render_scores args ** Processing line: ~ args.outputs.labels << [~ - Inside source: true *** True Line Result args.outputs.labels << [ ** Processing line: ~ [320, 650, args.state.left_paddle.score, 10, 1],~ - Inside source: true *** True Line Result [320, 650, args.state.left_paddle.score, 10, 1], ** Processing line: ~ [960, 650, args.state.right_paddle.score, 10, 1]~ - Inside source: true *** True Line Result [960, 650, args.state.right_paddle.score, 10, 1] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_countdown args~ - Inside source: true *** True Line Result def render_countdown args ** Processing line: ~ return unless args.state.ball.debounce > 0~ - Inside source: true *** True Line Result return unless args.state.ball.debounce > 0 ** Processing line: ~ args.outputs.labels << [640, 360, "%.2f" % args.state.ball.debounce.fdiv(60), 10, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [640, 360, "%.2f" % args.state.ball.debounce.fdiv(60), 10, 1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_ball args~ - Inside source: true *** True Line Result def render_ball args ** Processing line: ~ args.outputs.solids << solid_ball(args)~ - Inside source: true *** True Line Result args.outputs.solids << solid_ball(args) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_paddles args~ - Inside source: true *** True Line Result def render_paddles args ** Processing line: ~ args.outputs.solids << solid_left_paddle(args)~ - Inside source: true *** True Line Result args.outputs.solids << solid_left_paddle(args) ** Processing line: ~ args.outputs.solids << solid_right_paddle(args)~ - Inside source: true *** True Line Result args.outputs.solids << solid_right_paddle(args) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_instructions args~ - Inside source: true *** True Line Result def render_instructions args ** Processing line: ~ args.outputs.labels << [320, 30, "W and S keys to move left paddle.", 0, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [320, 30, "W and S keys to move left paddle.", 0, 1] ** Processing line: ~ args.outputs.labels << [920, 30, "O and L keys to move right paddle.", 0, 1]~ - Inside source: true *** True Line Result args.outputs.labels << [920, 30, "O and L keys to move right paddle.", 0, 1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ args.state.ball.debounce -= 1 and return if args.state.ball.debounce > 0~ - Inside source: true *** True Line Result args.state.ball.debounce -= 1 and return if args.state.ball.debounce > 0 ** Processing line: ~ calc_move_ball args~ - Inside source: true *** True Line Result calc_move_ball args ** Processing line: ~ calc_collision_with_left_paddle args~ - Inside source: true *** True Line Result calc_collision_with_left_paddle args ** Processing line: ~ calc_collision_with_right_paddle args~ - Inside source: true *** True Line Result calc_collision_with_right_paddle args ** Processing line: ~ calc_collision_with_walls args~ - Inside source: true *** True Line Result calc_collision_with_walls args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :calc_methods~ - Inside source: true *** True Line Result begin :calc_methods ** Processing line: ~ def calc_move_ball args~ - Inside source: true *** True Line Result def calc_move_ball args ** Processing line: ~ args.state.ball.x += args.state.ball.dx~ - Inside source: true *** True Line Result args.state.ball.x += args.state.ball.dx ** Processing line: ~ args.state.ball.y += args.state.ball.dy~ - Inside source: true *** True Line Result args.state.ball.y += args.state.ball.dy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_collision_with_left_paddle args~ - Inside source: true *** True Line Result def calc_collision_with_left_paddle args ** Processing line: ~ if solid_left_paddle(args).intersect_rect? solid_ball(args)~ - Inside source: true *** True Line Result if solid_left_paddle(args).intersect_rect? solid_ball(args) ** Processing line: ~ args.state.ball.dx *= -1~ - Inside source: true *** True Line Result args.state.ball.dx *= -1 ** Processing line: ~ elsif args.state.ball.x < 0~ - Inside source: true *** True Line Result elsif args.state.ball.x < 0 ** Processing line: ~ args.state.right_paddle.score += 1~ - Inside source: true *** True Line Result args.state.right_paddle.score += 1 ** Processing line: ~ calc_reset_round args~ - Inside source: true *** True Line Result calc_reset_round args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_collision_with_right_paddle args~ - Inside source: true *** True Line Result def calc_collision_with_right_paddle args ** Processing line: ~ if solid_right_paddle(args).intersect_rect? solid_ball(args)~ - Inside source: true *** True Line Result if solid_right_paddle(args).intersect_rect? solid_ball(args) ** Processing line: ~ args.state.ball.dx *= -1~ - Inside source: true *** True Line Result args.state.ball.dx *= -1 ** Processing line: ~ elsif args.state.ball.x > 1280~ - Inside source: true *** True Line Result elsif args.state.ball.x > 1280 ** Processing line: ~ args.state.left_paddle.score += 1~ - Inside source: true *** True Line Result args.state.left_paddle.score += 1 ** Processing line: ~ calc_reset_round args~ - Inside source: true *** True Line Result calc_reset_round args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_collision_with_walls args~ - Inside source: true *** True Line Result def calc_collision_with_walls args ** Processing line: ~ if args.state.ball.y + args.state.ball.size_half > 720~ - Inside source: true *** True Line Result if args.state.ball.y + args.state.ball.size_half > 720 ** Processing line: ~ args.state.ball.y = 720 - args.state.ball.size_half~ - Inside source: true *** True Line Result args.state.ball.y = 720 - args.state.ball.size_half ** Processing line: ~ args.state.ball.dy *= -1~ - Inside source: true *** True Line Result args.state.ball.dy *= -1 ** Processing line: ~ elsif args.state.ball.y - args.state.ball.size_half < 0~ - Inside source: true *** True Line Result elsif args.state.ball.y - args.state.ball.size_half < 0 ** Processing line: ~ args.state.ball.y = args.state.ball.size_half~ - Inside source: true *** True Line Result args.state.ball.y = args.state.ball.size_half ** Processing line: ~ args.state.ball.dy *= -1~ - Inside source: true *** True Line Result args.state.ball.dy *= -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_reset_round args~ - Inside source: true *** True Line Result def calc_reset_round args ** Processing line: ~ args.state.ball.x = 640~ - Inside source: true *** True Line Result args.state.ball.x = 640 ** Processing line: ~ args.state.ball.y = 360~ - Inside source: true *** True Line Result args.state.ball.y = 360 ** Processing line: ~ args.state.ball.dx = 5.randomize(:sign)~ - Inside source: true *** True Line Result args.state.ball.dx = 5.randomize(:sign) ** Processing line: ~ args.state.ball.dy = 5.randomize(:sign)~ - Inside source: true *** True Line Result args.state.ball.dy = 5.randomize(:sign) ** Processing line: ~ args.state.ball.debounce = 3 * 60~ - Inside source: true *** True Line Result args.state.ball.debounce = 3 * 60 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input args~ - Inside source: true *** True Line Result def input args ** Processing line: ~ input_left_paddle args~ - Inside source: true *** True Line Result input_left_paddle args ** Processing line: ~ input_right_paddle args~ - Inside source: true *** True Line Result input_right_paddle args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :input_methods~ - Inside source: true *** True Line Result begin :input_methods ** Processing line: ~ def input_left_paddle args~ - Inside source: true *** True Line Result def input_left_paddle args ** Processing line: ~ if args.inputs.controller_one.key_down.down || args.inputs.keyboard.key_down.s~ - Inside source: true *** True Line Result if args.inputs.controller_one.key_down.down || args.inputs.keyboard.key_down.s ** Processing line: ~ args.state.left_paddle.y -= 40~ - Inside source: true *** True Line Result args.state.left_paddle.y -= 40 ** Processing line: ~ elsif args.inputs.controller_one.key_down.up || args.inputs.keyboard.key_down.w~ - Inside source: true *** True Line Result elsif args.inputs.controller_one.key_down.up || args.inputs.keyboard.key_down.w ** Processing line: ~ args.state.left_paddle.y += 40~ - Inside source: true *** True Line Result args.state.left_paddle.y += 40 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_right_paddle args~ - Inside source: true *** True Line Result def input_right_paddle args ** Processing line: ~ if args.inputs.controller_two.key_down.down || args.inputs.keyboard.key_down.l~ - Inside source: true *** True Line Result if args.inputs.controller_two.key_down.down || args.inputs.keyboard.key_down.l ** Processing line: ~ args.state.right_paddle.y -= 40~ - Inside source: true *** True Line Result args.state.right_paddle.y -= 40 ** Processing line: ~ elsif args.inputs.controller_two.key_down.up || args.inputs.keyboard.key_down.o~ - Inside source: true *** True Line Result elsif args.inputs.controller_two.key_down.up || args.inputs.keyboard.key_down.o ** Processing line: ~ args.state.right_paddle.y += 40~ - Inside source: true *** True Line Result args.state.right_paddle.y += 40 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin :assets~ - Inside source: true *** True Line Result begin :assets ** Processing line: ~ def solid_ball args~ - Inside source: true *** True Line Result def solid_ball args ** Processing line: ~ centered_rect args.state.ball.x, args.state.ball.y, args.state.ball.size, args.state.ball.size~ - Inside source: true *** True Line Result centered_rect args.state.ball.x, args.state.ball.y, args.state.ball.size, args.state.ball.size ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def solid_left_paddle args~ - Inside source: true *** True Line Result def solid_left_paddle args ** Processing line: ~ centered_rect_vertically 0, args.state.left_paddle.y, args.state.paddle.w, args.state.paddle.h~ - Inside source: true *** True Line Result centered_rect_vertically 0, args.state.left_paddle.y, args.state.paddle.w, args.state.paddle.h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def solid_right_paddle args~ - Inside source: true *** True Line Result def solid_right_paddle args ** Processing line: ~ centered_rect_vertically 1280 - args.state.paddle.w, args.state.right_paddle.y, args.state.paddle.w, args.state.paddle.h~ - Inside source: true *** True Line Result centered_rect_vertically 1280 - args.state.paddle.w, args.state.right_paddle.y, args.state.paddle.w, args.state.paddle.h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def centered_rect x, y, w, h~ - Inside source: true *** True Line Result def centered_rect x, y, w, h ** Processing line: ~ [x - w / 2, y - h / 2, w, h]~ - Inside source: true *** True Line Result [x - w / 2, y - h / 2, w, h] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def centered_rect_vertically x, y, w, h~ - Inside source: true *** True Line Result def centered_rect_vertically x, y, w, h ** Processing line: ~ [x, y - h / 2, w, h]~ - Inside source: true *** True Line Result [x, y - h / 2, w, h] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Arcade - Snakemoji - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Arcade - Snakemoji - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_arcade/snakemoji/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_arcade/snakemoji/app/main.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ ################################~ - Inside source: true *** True Line Result ################################ ** Processing line: ~ # So I was working on a snake game while~ - Inside source: true *** True Line Result # So I was working on a snake game while ** Processing line: ~ # learning DragonRuby, and at some point I had a thought~ - Inside source: true *** True Line Result # learning DragonRuby, and at some point I had a thought ** Processing line: ~ # what if I use "😀" as a function name, surely it wont work right...?~ - Inside source: true *** True Line Result # what if I use "😀" as a function name, surely it wont work right...? ** Processing line: ~ # RIGHT....?~ - Inside source: true *** True Line Result # RIGHT....? ** Processing line: ~ # BUT IT DID, IT WORKED~ - Inside source: true *** True Line Result # BUT IT DID, IT WORKED ** Processing line: ~ # it all went downhill from then~ - Inside source: true *** True Line Result # it all went downhill from then ** Processing line: ~ # Created by Anton K. (ai Doge)~ - Inside source: true *** True Line Result # Created by Anton K. (ai Doge) ** Processing line: ~ # https://gist.github.com/scorp200~ - Inside source: true *** True Line Result # https://gist.github.com/scorp200 ** Processing line: ~ #############LICENSE############~ - Inside source: true *** True Line Result #############LICENSE############ ** Processing line: ~ # Feel free to use this anywhere and however you want~ - Inside source: true *** True Line Result # Feel free to use this anywhere and however you want ** Processing line: ~ # You can sell this to EA for $1,000,000 if you want, its completely free.~ - Inside source: true *** True Line Result # You can sell this to EA for $1,000,000 if you want, its completely free. ** Processing line: ~ # Just rememeber you are helping this... thing... to spread...~ - Inside source: true *** True Line Result # Just rememeber you are helping this... thing... to spread... ** Processing line: ~ # ALSO! I am not liable for any mental, physical or financial damage caused.~ - Inside source: true *** True Line Result # ALSO! I am not liable for any mental, physical or financial damage caused. ** Processing line: ~ #############LICENSE############~ - Inside source: true *** True Line Result #############LICENSE############ ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Array~ - Inside source: true *** True Line Result class Array ** Processing line: ~ #Helper function~ - Inside source: true *** True Line Result #Helper function ** Processing line: ~ def move! vector~ - Inside source: true *** True Line Result def move! vector ** Processing line: ~ self.x += vector.x~ - Inside source: true *** True Line Result self.x += vector.x ** Processing line: ~ self.y += vector.y~ - Inside source: true *** True Line Result self.y += vector.y ** Processing line: ~ return self~ - Inside source: true *** True Line Result return self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Helper function to draw snake body~ - Inside source: true *** True Line Result #Helper function to draw snake body ** Processing line: ~ def draw! 🎮, 📺, color~ - Inside source: true *** True Line Result def draw! 🎮, 📺, color ** Processing line: ~ translate 📺.solids, 🎮.⛓, [self.x * 🎮.⚖️ + 🎮.🛶 / 2, self.y * 🎮.⚖️ + 🎮.🛶 / 2, 🎮.⚖️ - 🎮.🛶, 🎮.⚖️ - 🎮.🛶, color]~ - Inside source: true *** True Line Result translate 📺.solids, 🎮.⛓, [self.x * 🎮.⚖️ + 🎮.🛶 / 2, self.y * 🎮.⚖️ + 🎮.🛶 / 2, 🎮.⚖️ - 🎮.🛶, 🎮.⚖️ - 🎮.🛶, color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #This is where it all started, I was trying to find good way to multiply a map by a number, * is already used so is **~ - Inside source: true *** True Line Result #This is where it all started, I was trying to find good way to multiply a map by a number, * is already used so is ** ** Processing line: ~ #I kept trying different combinations of symbols, when suddenly...~ - Inside source: true *** True Line Result #I kept trying different combinations of symbols, when suddenly... ** Processing line: ~ def 😀 value~ - Inside source: true *** True Line Result def 😀 value ** Processing line: ~ self.map {|d| d * value}~ - Inside source: true *** True Line Result self.map {|d| d * value} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Draw stuff with an offset~ - Inside source: true *** True Line Result #Draw stuff with an offset ** Processing line: ~ def translate output_collection, ⛓, what~ - Inside source: true *** True Line Result def translate output_collection, ⛓, what ** Processing line: ~ what.x += ⛓.x~ - Inside source: true *** True Line Result what.x += ⛓.x ** Processing line: ~ what.y += ⛓.y~ - Inside source: true *** True Line Result what.y += ⛓.y ** Processing line: ~ output_collection << what~ - Inside source: true *** True Line Result output_collection << what ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ BLUE = [33, 150, 243]~ - Inside source: true *** True Line Result BLUE = [33, 150, 243] ** Processing line: ~ RED = [244, 67, 54]~ - Inside source: true *** True Line Result RED = [244, 67, 54] ** Processing line: ~ GOLD = [255, 193, 7]~ - Inside source: true *** True Line Result GOLD = [255, 193, 7] ** Processing line: ~ LAST = 0~ - Inside source: true *** True Line Result LAST = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ defaults args.state~ - Inside source: true *** True Line Result defaults args.state ** Processing line: ~ render args.state, args.outputs~ - Inside source: true *** True Line Result render args.state, args.outputs ** Processing line: ~ input args.state, args.inputs~ - Inside source: true *** True Line Result input args.state, args.inputs ** Processing line: ~ update args.state~ - Inside source: true *** True Line Result update args.state ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def update 🎮~ - Inside source: true *** True Line Result def update 🎮 ** Processing line: ~ #Update every 10 frames~ - Inside source: true *** True Line Result #Update every 10 frames ** Processing line: ~ if 🎮.tick_count.mod_zero? 10~ - Inside source: true *** True Line Result if 🎮.tick_count.mod_zero? 10 ** Processing line: ~ #Add new snake body piece at head's location~ - Inside source: true *** True Line Result #Add new snake body piece at head's location ** Processing line: ~ 🎮.🐍 << [*🎮.🤖]~ - Inside source: true *** True Line Result 🎮.🐍 << [*🎮.🤖] ** Processing line: ~ #Assign Next Direction to Direction~ - Inside source: true *** True Line Result #Assign Next Direction to Direction ** Processing line: ~ 🎮.🚗 = *🎮.🚦~ - Inside source: true *** True Line Result 🎮.🚗 = *🎮.🚦 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Trim the snake a bit if its longer than current size~ - Inside source: true *** True Line Result #Trim the snake a bit if its longer than current size ** Processing line: ~ if 🎮.🐍.length > 🎮.🛒~ - Inside source: true *** True Line Result if 🎮.🐍.length > 🎮.🛒 ** Processing line: ~ 🎮.🐍 = 🎮.🐍[-🎮.🛒..-1]~ - Inside source: true *** True Line Result 🎮.🐍 = 🎮.🐍[-🎮.🛒..-1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Move the head in the Direction~ - Inside source: true *** True Line Result #Move the head in the Direction ** Processing line: ~ 🎮.🤖.move! 🎮.🚗~ - Inside source: true *** True Line Result 🎮.🤖.move! 🎮.🚗 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #If Head is outside the playing field, or inside snake's body restart game~ - Inside source: true *** True Line Result #If Head is outside the playing field, or inside snake's body restart game ** Processing line: ~ if 🎮.🤖.x < 0 || 🎮.🤖.x >= 🎮.🗺.x || 🎮.🤖.y < 0 || 🎮.🤖.y >= 🎮.🗺.y || 🎮.🚗 != [0, 0] && 🎮.🐍.any? {|s| s == 🎮.🤖}~ - Inside source: true *** True Line Result if 🎮.🤖.x < 0 || 🎮.🤖.x >= 🎮.🗺.x || 🎮.🤖.y < 0 || 🎮.🤖.y >= 🎮.🗺.y || 🎮.🚗 != [0, 0] && 🎮.🐍.any? {|s| s == 🎮.🤖} ** Processing line: ~ LAST = 🎮.💰~ - Inside source: true *** True Line Result LAST = 🎮.💰 ** Processing line: ~ 🎮.as_hash.clear~ - Inside source: true *** True Line Result 🎮.as_hash.clear ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #If head lands on food add size and score~ - Inside source: true *** True Line Result #If head lands on food add size and score ** Processing line: ~ if 🎮.🤖 == 🎮.🍎~ - Inside source: true *** True Line Result if 🎮.🤖 == 🎮.🍎 ** Processing line: ~ 🎮.🛒 += 1~ - Inside source: true *** True Line Result 🎮.🛒 += 1 ** Processing line: ~ 🎮.💰 += (🎮.🛒 * 0.8).floor.to_i + 5~ - Inside source: true *** True Line Result 🎮.💰 += (🎮.🛒 * 0.8).floor.to_i + 5 ** Processing line: ~ spawn_🍎 🎮~ - Inside source: true *** True Line Result spawn_🍎 🎮 ** Processing line: ~ puts 🎮.🍎~ - Inside source: true *** True Line Result puts 🎮.🍎 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Every second remove 1 point~ - Inside source: true *** True Line Result #Every second remove 1 point ** Processing line: ~ if 🎮.💰 > 0 && 🎮.tick_count.mod_zero?(60)~ - Inside source: true *** True Line Result if 🎮.💰 > 0 && 🎮.tick_count.mod_zero?(60) ** Processing line: ~ 🎮.💰 -= 1~ - Inside source: true *** True Line Result 🎮.💰 -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def spawn_🍎 🎮~ - Inside source: true *** True Line Result def spawn_🍎 🎮 ** Processing line: ~ #Food~ - Inside source: true *** True Line Result #Food ** Processing line: ~ 🎮.🍎 ||= [*🎮.🤖]~ - Inside source: true *** True Line Result 🎮.🍎 ||= [*🎮.🤖] ** Processing line: ~ #Randomly spawns food inside the playing field, keep doing this if the food keeps landing on the snake's body~ - Inside source: true *** True Line Result #Randomly spawns food inside the playing field, keep doing this if the food keeps landing on the snake's body ** Processing line: ~ while 🎮.🐍.any? {|s| s == 🎮.🍎} || 🎮.🍎 == 🎮.🤖 do~ - Inside source: true *** True Line Result while 🎮.🐍.any? {|s| s == 🎮.🍎} || 🎮.🍎 == 🎮.🤖 do ** Processing line: ~ 🎮.🍎 = [rand(🎮.🗺.x), rand(🎮.🗺.y)]~ - Inside source: true *** True Line Result 🎮.🍎 = [rand(🎮.🗺.x), rand(🎮.🗺.y)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render 🎮, 📺~ - Inside source: true *** True Line Result def render 🎮, 📺 ** Processing line: ~ #Paint the background black~ - Inside source: true *** True Line Result #Paint the background black ** Processing line: ~ 📺.solids << [0, 0, 1280, 720, 0, 0, 0, 255]~ - Inside source: true *** True Line Result 📺.solids << [0, 0, 1280, 720, 0, 0, 0, 255] ** Processing line: ~ #Draw a border for the playing field~ - Inside source: true *** True Line Result #Draw a border for the playing field ** Processing line: ~ translate 📺.borders, 🎮.⛓, [0, 0, 🎮.🗺.x * 🎮.⚖️, 🎮.🗺.y * 🎮.⚖️, 255, 255, 255]~ - Inside source: true *** True Line Result translate 📺.borders, 🎮.⛓, [0, 0, 🎮.🗺.x * 🎮.⚖️, 🎮.🗺.y * 🎮.⚖️, 255, 255, 255] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Draw the snake's body~ - Inside source: true *** True Line Result #Draw the snake's body ** Processing line: ~ 🎮.🐍.map do |🐍| 🐍.draw! 🎮, 📺, BLUE end~ - Inside source: true *** True Line Result 🎮.🐍.map do |🐍| 🐍.draw! 🎮, 📺, BLUE end ** Processing line: ~ #Draw the head~ - Inside source: true *** True Line Result #Draw the head ** Processing line: ~ 🎮.🤖.draw! 🎮, 📺, BLUE~ - Inside source: true *** True Line Result 🎮.🤖.draw! 🎮, 📺, BLUE ** Processing line: ~ #Draw the food~ - Inside source: true *** True Line Result #Draw the food ** Processing line: ~ 🎮.🍎.draw! 🎮, 📺, RED~ - Inside source: true *** True Line Result 🎮.🍎.draw! 🎮, 📺, RED ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Draw current score~ - Inside source: true *** True Line Result #Draw current score ** Processing line: ~ translate 📺.labels, 🎮.⛓, [5, 715, "Score: #{🎮.💰}", GOLD]~ - Inside source: true *** True Line Result translate 📺.labels, 🎮.⛓, [5, 715, "Score: #{🎮.💰}", GOLD] ** Processing line: ~ #Draw your last score, if any~ - Inside source: true *** True Line Result #Draw your last score, if any ** Processing line: ~ translate 📺.labels, 🎮.⛓, [[*🎮.🤖.😀(🎮.⚖️)].move!([0, 🎮.⚖️ * 2]), "Your Last score is #{LAST}", 0, 1, GOLD] unless LAST == 0 || 🎮.🚗 != [0, 0]~ - Inside source: true *** True Line Result translate 📺.labels, 🎮.⛓, [[*🎮.🤖.😀(🎮.⚖️)].move!([0, 🎮.⚖️ * 2]), "Your Last score is #{LAST}", 0, 1, GOLD] unless LAST == 0 || 🎮.🚗 != [0, 0] ** Processing line: ~ #Draw starting message, only if Direction is 0~ - Inside source: true *** True Line Result #Draw starting message, only if Direction is 0 ** Processing line: ~ translate 📺.labels, 🎮.⛓, [🎮.🤖.😀(🎮.⚖️), "Press any Arrow key to start", 0, 1, GOLD] unless 🎮.🚗 != [0, 0]~ - Inside source: true *** True Line Result translate 📺.labels, 🎮.⛓, [🎮.🤖.😀(🎮.⚖️), "Press any Arrow key to start", 0, 1, GOLD] unless 🎮.🚗 != [0, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input 🎮, 🕹~ - Inside source: true *** True Line Result def input 🎮, 🕹 ** Processing line: ~ #Left and Right keyboard input, only change if X direction is 0~ - Inside source: true *** True Line Result #Left and Right keyboard input, only change if X direction is 0 ** Processing line: ~ if 🕹.keyboard.key_held.left && 🎮.🚗.x == 0~ - Inside source: true *** True Line Result if 🕹.keyboard.key_held.left && 🎮.🚗.x == 0 ** Processing line: ~ 🎮.🚦 = [-1, 0]~ - Inside source: true *** True Line Result 🎮.🚦 = [-1, 0] ** Processing line: ~ elsif 🕹.keyboard.key_held.right && 🎮.🚗.x == 0~ - Inside source: true *** True Line Result elsif 🕹.keyboard.key_held.right && 🎮.🚗.x == 0 ** Processing line: ~ 🎮.🚦 = [1, 0]~ - Inside source: true *** True Line Result 🎮.🚦 = [1, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Up and Down keyboard input, only change if Y direction is 0~ - Inside source: true *** True Line Result #Up and Down keyboard input, only change if Y direction is 0 ** Processing line: ~ if 🕹.keyboard.key_held.up && 🎮.🚗.y == 0~ - Inside source: true *** True Line Result if 🕹.keyboard.key_held.up && 🎮.🚗.y == 0 ** Processing line: ~ 🎮.🚦 = [0, 1]~ - Inside source: true *** True Line Result 🎮.🚦 = [0, 1] ** Processing line: ~ elsif 🕹.keyboard.key_held.down && 🎮.🚗.y == 0~ - Inside source: true *** True Line Result elsif 🕹.keyboard.key_held.down && 🎮.🚗.y == 0 ** Processing line: ~ 🎮.🚦 = [0, -1]~ - Inside source: true *** True Line Result 🎮.🚦 = [0, -1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults 🎮~ - Inside source: true *** True Line Result def defaults 🎮 ** Processing line: ~ #Playing field size~ - Inside source: true *** True Line Result #Playing field size ** Processing line: ~ 🎮.🗺 ||= [20, 20]~ - Inside source: true *** True Line Result 🎮.🗺 ||= [20, 20] ** Processing line: ~ #Scale for drawing, screen height / Field height~ - Inside source: true *** True Line Result #Scale for drawing, screen height / Field height ** Processing line: ~ 🎮.⚖️ ||= 720 / 🎮.🗺.y~ - Inside source: true *** True Line Result 🎮.⚖️ ||= 720 / 🎮.🗺.y ** Processing line: ~ #Offset, offset all rendering to the center of the screen~ - Inside source: true *** True Line Result #Offset, offset all rendering to the center of the screen ** Processing line: ~ 🎮.⛓ ||= [(1280 - 720).fdiv(2), 0]~ - Inside source: true *** True Line Result 🎮.⛓ ||= [(1280 - 720).fdiv(2), 0] ** Processing line: ~ #Padding, make the snake body slightly smaller than the scale~ - Inside source: true *** True Line Result #Padding, make the snake body slightly smaller than the scale ** Processing line: ~ 🎮.🛶 ||= (🎮.⚖️ * 0.2).to_i~ - Inside source: true *** True Line Result 🎮.🛶 ||= (🎮.⚖️ * 0.2).to_i ** Processing line: ~ #Snake Size~ - Inside source: true *** True Line Result #Snake Size ** Processing line: ~ 🎮.🛒 ||= 3~ - Inside source: true *** True Line Result 🎮.🛒 ||= 3 ** Processing line: ~ #Snake head, the only part we are actually controlling~ - Inside source: true *** True Line Result #Snake head, the only part we are actually controlling ** Processing line: ~ 🎮.🤖 ||= [🎮.🗺.x / 2, 🎮.🗺.y / 2]~ - Inside source: true *** True Line Result 🎮.🤖 ||= [🎮.🗺.x / 2, 🎮.🗺.y / 2] ** Processing line: ~ #Snake body map, follows the head~ - Inside source: true *** True Line Result #Snake body map, follows the head ** Processing line: ~ 🎮.🐍 ||= []~ - Inside source: true *** True Line Result 🎮.🐍 ||= [] ** Processing line: ~ #Direction the head moves to~ - Inside source: true *** True Line Result #Direction the head moves to ** Processing line: ~ 🎮.🚗 ||= [0, 0]~ - Inside source: true *** True Line Result 🎮.🚗 ||= [0, 0] ** Processing line: ~ #Next_Direction, during input check only change this variable and then when game updates asign this to Direction~ - Inside source: true *** True Line Result #Next_Direction, during input check only change this variable and then when game updates asign this to Direction ** Processing line: ~ 🎮.🚦 ||= [*🎮.🚗]~ - Inside source: true *** True Line Result 🎮.🚦 ||= [*🎮.🚗] ** Processing line: ~ #Your score~ - Inside source: true *** True Line Result #Your score ** Processing line: ~ 🎮.💰 ||= 0~ - Inside source: true *** True Line Result 🎮.💰 ||= 0 ** Processing line: ~ #Spawns Food randomly~ - Inside source: true *** True Line Result #Spawns Food randomly ** Processing line: ~ spawn_🍎(🎮) unless 🎮.🍎?~ - Inside source: true *** True Line Result spawn_🍎(🎮) unless 🎮.🍎? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Arcade - Solar System - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Arcade - Solar System - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_arcade/solar_system/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_arcade/solar_system/app/main.rb ** Processing line: ~ # Focused tutorial video: https://s3.amazonaws.com/s3.dragonruby.org/dragonruby-nddnug-workshop.mp4~ - Inside source: true *** True Line Result # Focused tutorial video: https://s3.amazonaws.com/s3.dragonruby.org/dragonruby-nddnug-workshop.mp4 ** Processing line: ~ # Workshop/Presentation which provides motivation for creating a game engine: https://www.youtube.com/watch?v=S3CFce1arC8~ - Inside source: true *** True Line Result # Workshop/Presentation which provides motivation for creating a game engine: https://www.youtube.com/watch?v=S3CFce1arC8 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ args.state.x ||= 640~ - Inside source: true *** True Line Result args.state.x ||= 640 ** Processing line: ~ args.state.y ||= 360~ - Inside source: true *** True Line Result args.state.y ||= 360 ** Processing line: ~ args.state.stars ||= 100.map do~ - Inside source: true *** True Line Result args.state.stars ||= 100.map do ** Processing line: ~ [1280 * rand, 720 * rand, rand.fdiv(10), 255 * rand, 255 * rand, 255 * rand]~ - Inside source: true *** True Line Result [1280 * rand, 720 * rand, rand.fdiv(10), 255 * rand, 255 * rand, 255 * rand] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.sun ||= args.state.new_entity(:sun) do |s|~ - Inside source: true *** True Line Result args.state.sun ||= args.state.new_entity(:sun) do |s| ** Processing line: ~ s.s = 100~ - Inside source: true *** True Line Result s.s = 100 ** Processing line: ~ s.path = 'sprites/sun.png'~ - Inside source: true *** True Line Result s.path = 'sprites/sun.png' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.planets = [~ - Inside source: true *** True Line Result args.state.planets = [ ** Processing line: ~ [:mercury, 65, 5, 88],~ - Inside source: true *** True Line Result [:mercury, 65, 5, 88], ** Processing line: ~ [:venus, 100, 10, 225],~ - Inside source: true *** True Line Result [:venus, 100, 10, 225], ** Processing line: ~ [:earth, 120, 10, 365],~ - Inside source: true *** True Line Result [:earth, 120, 10, 365], ** Processing line: ~ [:mars, 140, 8, 687],~ - Inside source: true *** True Line Result [:mars, 140, 8, 687], ** Processing line: ~ [:jupiter, 280, 30, 365 * 11.8],~ - Inside source: true *** True Line Result [:jupiter, 280, 30, 365 * 11.8], ** Processing line: ~ [:saturn, 350, 20, 365 * 29.5],~ - Inside source: true *** True Line Result [:saturn, 350, 20, 365 * 29.5], ** Processing line: ~ [:uranus, 400, 15, 365 * 84],~ - Inside source: true *** True Line Result [:uranus, 400, 15, 365 * 84], ** Processing line: ~ [:neptune, 440, 15, 365 * 164.8],~ - Inside source: true *** True Line Result [:neptune, 440, 15, 365 * 164.8], ** Processing line: ~ [:pluto, 480, 5, 365 * 247.8],~ - Inside source: true *** True Line Result [:pluto, 480, 5, 365 * 247.8], ** Processing line: ~ ].map do |name, distance, size, year_in_days|~ - Inside source: true *** True Line Result ].map do |name, distance, size, year_in_days| ** Processing line: ~ args.state.new_entity(name) do |p|~ - Inside source: true *** True Line Result args.state.new_entity(name) do |p| ** Processing line: ~ p.path = "sprites/#{name}.png"~ - Inside source: true *** True Line Result p.path = "sprites/#{name}.png" ** Processing line: ~ p.distance = distance * 0.7~ - Inside source: true *** True Line Result p.distance = distance * 0.7 ** Processing line: ~ p.s = size * 0.7~ - Inside source: true *** True Line Result p.s = size * 0.7 ** Processing line: ~ p.year_in_days = year_in_days~ - Inside source: true *** True Line Result p.year_in_days = year_in_days ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.ship ||= args.state.new_entity(:ship) do |s|~ - Inside source: true *** True Line Result args.state.ship ||= args.state.new_entity(:ship) do |s| ** Processing line: ~ s.x = 1280 * rand~ - Inside source: true *** True Line Result s.x = 1280 * rand ** Processing line: ~ s.y = 720 * rand~ - Inside source: true *** True Line Result s.y = 720 * rand ** Processing line: ~ s.angle = 0~ - Inside source: true *** True Line Result s.angle = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_sprite args, entity~ - Inside source: true *** True Line Result def to_sprite args, entity ** Processing line: ~ x = 0~ - Inside source: true *** True Line Result x = 0 ** Processing line: ~ y = 0~ - Inside source: true *** True Line Result y = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if entity.year_in_days~ - Inside source: true *** True Line Result if entity.year_in_days ** Processing line: ~ day = args.state.tick_count~ - Inside source: true *** True Line Result day = args.state.tick_count ** Processing line: ~ day_in_year = day % entity.year_in_days~ - Inside source: true *** True Line Result day_in_year = day % entity.year_in_days ** Processing line: ~ entity.random_start_day ||= day_in_year * rand~ - Inside source: true *** True Line Result entity.random_start_day ||= day_in_year * rand ** Processing line: ~ percentage_of_year = day_in_year.fdiv(entity.year_in_days)~ - Inside source: true *** True Line Result percentage_of_year = day_in_year.fdiv(entity.year_in_days) ** Processing line: ~ angle = 365 * percentage_of_year~ - Inside source: true *** True Line Result angle = 365 * percentage_of_year ** Processing line: ~ x = angle.vector_x(entity.distance)~ - Inside source: true *** True Line Result x = angle.vector_x(entity.distance) ** Processing line: ~ y = angle.vector_y(entity.distance)~ - Inside source: true *** True Line Result y = angle.vector_y(entity.distance) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [640 + x - entity.s.half, 360 + y - entity.s.half, entity.s, entity.s, entity.path]~ - Inside source: true *** True Line Result [640 + x - entity.s.half, 360 + y - entity.s.half, entity.s, entity.s, entity.path] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ args.outputs.solids << [0, 0, 1280, 720]~ - Inside source: true *** True Line Result args.outputs.solids << [0, 0, 1280, 720] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.sprites << args.state.stars.map do |x, y, _, r, g, b|~ - Inside source: true *** True Line Result args.outputs.sprites << args.state.stars.map do |x, y, _, r, g, b| ** Processing line: ~ [x, y, 10, 10, 'sprites/star.png', 0, 100, r, g, b]~ - Inside source: true *** True Line Result [x, y, 10, 10, 'sprites/star.png', 0, 100, r, g, b] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.sprites << to_sprite(args, args.state.sun)~ - Inside source: true *** True Line Result args.outputs.sprites << to_sprite(args, args.state.sun) ** Processing line: ~ args.outputs.sprites << args.state.planets.map { |p| to_sprite args, p }~ - Inside source: true *** True Line Result args.outputs.sprites << args.state.planets.map { |p| to_sprite args, p } ** Processing line: ~ args.outputs.sprites << [args.state.ship.x, args.state.ship.y, 20, 20, 'sprites/ship.png', args.state.ship.angle]~ - Inside source: true *** True Line Result args.outputs.sprites << [args.state.ship.x, args.state.ship.y, 20, 20, 'sprites/ship.png', args.state.ship.angle] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ args.state.stars = args.state.stars.map do |x, y, speed, r, g, b|~ - Inside source: true *** True Line Result args.state.stars = args.state.stars.map do |x, y, speed, r, g, b| ** Processing line: ~ x += speed~ - Inside source: true *** True Line Result x += speed ** Processing line: ~ y += speed~ - Inside source: true *** True Line Result y += speed ** Processing line: ~ x = 0 if x > 1280~ - Inside source: true *** True Line Result x = 0 if x > 1280 ** Processing line: ~ y = 0 if y > 720~ - Inside source: true *** True Line Result y = 0 if y > 720 ** Processing line: ~ [x, y, speed, r, g, b]~ - Inside source: true *** True Line Result [x, y, speed, r, g, b] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.outputs.sounds << 'sounds/bg.ogg'~ - Inside source: true *** True Line Result args.outputs.sounds << 'sounds/bg.ogg' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_inputs args~ - Inside source: true *** True Line Result def process_inputs args ** Processing line: ~ if args.inputs.keyboard.left || args.inputs.controller_one.key_held.left~ - Inside source: true *** True Line Result if args.inputs.keyboard.left || args.inputs.controller_one.key_held.left ** Processing line: ~ args.state.ship.angle += 1~ - Inside source: true *** True Line Result args.state.ship.angle += 1 ** Processing line: ~ elsif args.inputs.keyboard.right || args.inputs.controller_one.key_held.right~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.right || args.inputs.controller_one.key_held.right ** Processing line: ~ args.state.ship.angle -= 1~ - Inside source: true *** True Line Result args.state.ship.angle -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.keyboard.up || args.inputs.controller_one.key_held.a~ - Inside source: true *** True Line Result if args.inputs.keyboard.up || args.inputs.controller_one.key_held.a ** Processing line: ~ args.state.ship.x += args.state.ship.angle.x_vector~ - Inside source: true *** True Line Result args.state.ship.x += args.state.ship.angle.x_vector ** Processing line: ~ args.state.ship.y += args.state.ship.angle.y_vector~ - Inside source: true *** True Line Result args.state.ship.y += args.state.ship.angle.y_vector ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~ process_inputs args~ - Inside source: true *** True Line Result process_inputs args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def r~ - Inside source: true *** True Line Result def r ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Arcade - Sound Golf - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Arcade - Sound Golf - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_arcade/sound_golf/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_arcade/sound_golf/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs Listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs Listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - sample: Chooses random element from array.~ - Inside source: true *** True Line Result - sample: Chooses random element from array. ** Processing line: ~ In this sample app, the target note is set by taking a sample from the collection~ - Inside source: true *** True Line Result In this sample app, the target note is set by taking a sample from the collection ** Processing line: ~ of available notes.~ - Inside source: true *** True Line Result of available notes. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~ - args.grid.(left|right|top|bottom): Pixel value for the boundaries of the virtual~ - Inside source: true *** True Line Result - args.grid.(left|right|top|bottom): Pixel value for the boundaries of the virtual ** Processing line: ~ 720 p screen (Dragon Ruby Game Toolkits's virtual resolution is always 1280x720).~ - Inside source: true *** True Line Result 720 p screen (Dragon Ruby Game Toolkits's virtual resolution is always 1280x720). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.state.new_entity: Used when we want to create a new object, like a sprite or button.~ - Inside source: true *** True Line Result - args.state.new_entity: Used when we want to create a new object, like a sprite or button. ** Processing line: ~ For example, if we want to create a new button, we would declare it as a new entity and~ - Inside source: true *** True Line Result For example, if we want to create a new button, we would declare it as a new entity and ** Processing line: ~ then define its properties.~ - Inside source: true *** True Line Result then define its properties. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated~ - Inside source: true *** True Line Result - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ - Inside source: true *** True Line Result as Ruby code, and the placeholder is replaced with its corresponding value or result. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ - Inside source: true *** True Line Result - args.outputs.labels: An array. The values generate a label. ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ - Inside source: true *** True Line Result For more information about labels, go to mygame/documentation/02-labels.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - find_all: Finds all elements from a collection that meet a certain requirements (and excludes the ones that don't).~ - Inside source: true *** True Line Result - find_all: Finds all elements from a collection that meet a certain requirements (and excludes the ones that don't). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - first: Returns the first element of an array.~ - Inside source: true *** True Line Result - first: Returns the first element of an array. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - inside_rect: Returns true or false depending on if the point is inside the rect.~ - Inside source: true *** True Line Result - inside_rect: Returns true or false depending on if the point is inside the rect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - to_sym: Returns symbol corresponding to string. Will create a symbol if it does~ - Inside source: true *** True Line Result - to_sym: Returns symbol corresponding to string. Will create a symbol if it does ** Processing line: ~ not already exist.~ - Inside source: true *** True Line Result not already exist. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app allows users to test their musical skills by matching the piano sound that plays in each~ - Inside source: true *** True Line Result # This sample app allows users to test their musical skills by matching the piano sound that plays in each ** Processing line: ~ # level to the correct note.~ - Inside source: true *** True Line Result # level to the correct note. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Runs all the methods necessary for the game to function properly.~ - Inside source: true *** True Line Result # Runs all the methods necessary for the game to function properly. ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~ input_mouse args~ - Inside source: true *** True Line Result input_mouse args ** Processing line: ~ tick_instructions args, "Sample app shows how to play sounds. args.outputs.sounds << \"path_to_wav.wav\""~ - Inside source: true *** True Line Result tick_instructions args, "Sample app shows how to play sounds. args.outputs.sounds << \"path_to_wav.wav\"" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets default values and creates empty collections~ - Inside source: true *** True Line Result # Sets default values and creates empty collections ** Processing line: ~ # Initialization happens in the first frame only~ - Inside source: true *** True Line Result # Initialization happens in the first frame only ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ args.state.notes ||= []~ - Inside source: true *** True Line Result args.state.notes ||= [] ** Processing line: ~ args.state.click_feedbacks ||= []~ - Inside source: true *** True Line Result args.state.click_feedbacks ||= [] ** Processing line: ~ args.state.current_level ||= 1~ - Inside source: true *** True Line Result args.state.current_level ||= 1 ** Processing line: ~ args.state.times_wrong ||= 0 # when game starts, user hasn't guessed wrong yet~ - Inside source: true *** True Line Result args.state.times_wrong ||= 0 # when game starts, user hasn't guessed wrong yet ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Uses a label to display current level, and shows the score~ - Inside source: true *** True Line Result # Uses a label to display current level, and shows the score ** Processing line: ~ # Creates a button to play the sample note, and displays the available notes that could be a potential match~ - Inside source: true *** True Line Result # Creates a button to play the sample note, and displays the available notes that could be a potential match ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # grid.w_half positions the label in the horizontal center of the screen.~ - Inside source: true *** True Line Result # grid.w_half positions the label in the horizontal center of the screen. ** Processing line: ~ args.outputs.labels << [args.grid.w_half, args.grid.top.shift_down(40), "Hole #{args.state.current_level} of 9", 0, 1, 0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.labels << [args.grid.w_half, args.grid.top.shift_down(40), "Hole #{args.state.current_level} of 9", 0, 1, 0, 0, 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_score args # shows score on screen~ - Inside source: true *** True Line Result render_score args # shows score on screen ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.play_again_button ||= { x: 560, y: args.grid.h * 3 / 4 - 40, w: 160, h: 60, label: 'again' } # array definition, text/title~ - Inside source: true *** True Line Result args.state.play_again_button ||= { x: 560, y: args.grid.h * 3 / 4 - 40, w: 160, h: 60, label: 'again' } # array definition, text/title ** Processing line: ~ args.state.play_note_button ||= { x: 560, y: args.grid.h * 3 / 4 - 40, w: 160, h: 60, label: 'play' }~ - Inside source: true *** True Line Result args.state.play_note_button ||= { x: 560, y: args.grid.h * 3 / 4 - 40, w: 160, h: 60, label: 'play' } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.game_over # if game is over, a "play again" button is shown~ - Inside source: true *** True Line Result if args.state.game_over # if game is over, a "play again" button is shown ** Processing line: ~ # Calculations ensure that Play Again label is displayed in center of border~ - Inside source: true *** True Line Result # Calculations ensure that Play Again label is displayed in center of border ** Processing line: ~ # Remove calculations from y parameters and see what happens to border and label placement~ - Inside source: true *** True Line Result # Remove calculations from y parameters and see what happens to border and label placement ** Processing line: ~ args.outputs.labels << [args.grid.w_half, args.grid.h * 3 / 4, "Play Again", 0, 1, 0, 0, 0] # outputs label~ - Inside source: true *** True Line Result args.outputs.labels << [args.grid.w_half, args.grid.h * 3 / 4, "Play Again", 0, 1, 0, 0, 0] # outputs label ** Processing line: ~ args.outputs.borders << args.state.play_again_button # outputs border~ - Inside source: true *** True Line Result args.outputs.borders << args.state.play_again_button # outputs border ** Processing line: ~ else # otherwise, if game is not over~ - Inside source: true *** True Line Result else # otherwise, if game is not over ** Processing line: ~ # Calculations ensure that label appears in center of border~ - Inside source: true *** True Line Result # Calculations ensure that label appears in center of border ** Processing line: ~ args.outputs.labels << [args.grid.w_half, args.grid.h * 3 / 4, "Play Note ##{args.state.current_level}", 0, 1, 0, 0, 0] # outputs label~ - Inside source: true *** True Line Result args.outputs.labels << [args.grid.w_half, args.grid.h * 3 / 4, "Play Note ##{args.state.current_level}", 0, 1, 0, 0, 0] # outputs label ** Processing line: ~ args.outputs.borders << args.state.play_note_button # outputs border~ - Inside source: true *** True Line Result args.outputs.borders << args.state.play_note_button # outputs border ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return if args.state.game_over # return if game is over~ - Inside source: true *** True Line Result return if args.state.game_over # return if game is over ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << [args.grid.w_half, 400, "I think the note is a(n)...", 0, 1, 0, 0, 0] # outputs label~ - Inside source: true *** True Line Result args.outputs.labels << [args.grid.w_half, 400, "I think the note is a(n)...", 0, 1, 0, 0, 0] # outputs label ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Shows all of the available notes that can be potential matches.~ - Inside source: true *** True Line Result # Shows all of the available notes that can be potential matches. ** Processing line: ~ available_notes.each_with_index do |note, i|~ - Inside source: true *** True Line Result available_notes.each_with_index do |note, i| ** Processing line: ~ args.state.notes[i] ||= piano_button(args, note, i + 1) # calls piano_button method on each note (creates label and border)~ - Inside source: true *** True Line Result args.state.notes[i] ||= piano_button(args, note, i + 1) # calls piano_button method on each note (creates label and border) ** Processing line: ~ args.outputs.labels << args.state.notes[i].label # outputs note on screen with a label and a border~ - Inside source: true *** True Line Result args.outputs.labels << args.state.notes[i].label # outputs note on screen with a label and a border ** Processing line: ~ args.outputs.borders << args.state.notes[i].border~ - Inside source: true *** True Line Result args.outputs.borders << args.state.notes[i].border ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Shows whether or not the user is correct by filling the screen with either red or green~ - Inside source: true *** True Line Result # Shows whether or not the user is correct by filling the screen with either red or green ** Processing line: ~ args.outputs.solids << args.state.click_feedbacks.map { |c| c.solid }~ - Inside source: true *** True Line Result args.outputs.solids << args.state.click_feedbacks.map { |c| c.solid } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Shows the score (number of times the user guesses wrong) onto the screen using labels.~ - Inside source: true *** True Line Result # Shows the score (number of times the user guesses wrong) onto the screen using labels. ** Processing line: ~ def render_score args~ - Inside source: true *** True Line Result def render_score args ** Processing line: ~ if args.state.times_wrong == 0 # if the user has guessed wrong zero times, the score is par~ - Inside source: true *** True Line Result if args.state.times_wrong == 0 # if the user has guessed wrong zero times, the score is par ** Processing line: ~ args.outputs.labels << [args.grid.w_half, args.grid.top.shift_down(80), "Score: PAR", 0, 1, 0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.labels << [args.grid.w_half, args.grid.top.shift_down(80), "Score: PAR", 0, 1, 0, 0, 0] ** Processing line: ~ else # otherwise, number of times the user has guessed wrong is shown~ - Inside source: true *** True Line Result else # otherwise, number of times the user has guessed wrong is shown ** Processing line: ~ args.outputs.labels << [args.grid.w_half, args.grid.top.shift_down(80), "Score: +#{args.state.times_wrong}", 0, 1, 0, 0, 0] # shows score using string interpolation~ - Inside source: true *** True Line Result args.outputs.labels << [args.grid.w_half, args.grid.top.shift_down(80), "Score: +#{args.state.times_wrong}", 0, 1, 0, 0, 0] # shows score using string interpolation ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the target note for the level and performs calculations on click_feedbacks.~ - Inside source: true *** True Line Result # Sets the target note for the level and performs calculations on click_feedbacks. ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ args.state.target_note ||= available_notes.sample # chooses a note from available_notes collection as target note~ - Inside source: true *** True Line Result args.state.target_note ||= available_notes.sample # chooses a note from available_notes collection as target note ** Processing line: ~ args.state.click_feedbacks.each { |c| c.solid[-1] -= 5 } # remove this line and solid color will remain on screen indefinitely~ - Inside source: true *** True Line Result args.state.click_feedbacks.each { |c| c.solid[-1] -= 5 } # remove this line and solid color will remain on screen indefinitely ** Processing line: ~ # comment this line out and the solid color will keep flashing on screen instead of being removed from click_feedbacks collection~ - Inside source: true *** True Line Result # comment this line out and the solid color will keep flashing on screen instead of being removed from click_feedbacks collection ** Processing line: ~ args.state.click_feedbacks.reject! { |c| c.solid[-1] <= 0 }~ - Inside source: true *** True Line Result args.state.click_feedbacks.reject! { |c| c.solid[-1] <= 0 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Uses input from the user to play the target note, as well as the other notes that could be a potential match.~ - Inside source: true *** True Line Result # Uses input from the user to play the target note, as well as the other notes that could be a potential match. ** Processing line: ~ def input_mouse args~ - Inside source: true *** True Line Result def input_mouse args ** Processing line: ~ return unless args.inputs.mouse.click # return unless the mouse is clicked~ - Inside source: true *** True Line Result return unless args.inputs.mouse.click # return unless the mouse is clicked ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # finds button that was clicked by user~ - Inside source: true *** True Line Result # finds button that was clicked by user ** Processing line: ~ button_clicked = args.outputs.borders.find_all do |b| # go through borders collection to find all borders that meet requirements~ - Inside source: true *** True Line Result button_clicked = args.outputs.borders.find_all do |b| # go through borders collection to find all borders that meet requirements ** Processing line: ~ args.inputs.mouse.click.point.inside_rect? b # find button border that mouse was clicked inside of~ - Inside source: true *** True Line Result args.inputs.mouse.click.point.inside_rect? b # find button border that mouse was clicked inside of ** Processing line: ~ end.find_all { |b| b.is_a? Hash }.first # reject, return first element~ - Inside source: true *** True Line Result end.find_all { |b| b.is_a? Hash }.first # reject, return first element ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless button_clicked # return unless button_clicked as a value (a button was clicked)~ - Inside source: true *** True Line Result return unless button_clicked # return unless button_clicked as a value (a button was clicked) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ queue_click_feedback args, # calls queue_click_feedback method on the button that was clicked~ - Inside source: true *** True Line Result queue_click_feedback args, # calls queue_click_feedback method on the button that was clicked ** Processing line: ~ button_clicked.x,~ - Inside source: true *** True Line Result button_clicked.x, ** Processing line: ~ button_clicked.y,~ - Inside source: true *** True Line Result button_clicked.y, ** Processing line: ~ button_clicked.w,~ - Inside source: true *** True Line Result button_clicked.w, ** Processing line: ~ button_clicked.h,~ - Inside source: true *** True Line Result button_clicked.h, ** Processing line: ~ 150, 100, 200 # sets color of button to shade of purple~ - Inside source: true *** True Line Result 150, 100, 200 # sets color of button to shade of purple ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if button_clicked[:label] == 'play' # if "play note" button is pressed~ - Inside source: true *** True Line Result if button_clicked[:label] == 'play' # if "play note" button is pressed ** Processing line: ~ args.outputs.sounds << "sounds/#{args.state.target_note}.wav" # sound of target note is output~ - Inside source: true *** True Line Result args.outputs.sounds << "sounds/#{args.state.target_note}.wav" # sound of target note is output ** Processing line: ~ elsif button_clicked[:label] == 'again' # if "play game again" button is pressed~ - Inside source: true *** True Line Result elsif button_clicked[:label] == 'again' # if "play game again" button is pressed ** Processing line: ~ args.state.target_note = nil # no target note~ - Inside source: true *** True Line Result args.state.target_note = nil # no target note ** Processing line: ~ args.state.current_level = 1 # starts at level 1 again~ - Inside source: true *** True Line Result args.state.current_level = 1 # starts at level 1 again ** Processing line: ~ args.state.times_wrong = 0 # starts off with 0 wrong guesses~ - Inside source: true *** True Line Result args.state.times_wrong = 0 # starts off with 0 wrong guesses ** Processing line: ~ args.state.game_over = false # the game is not over (because it has just been restarted)~ - Inside source: true *** True Line Result args.state.game_over = false # the game is not over (because it has just been restarted) ** Processing line: ~ else # otherwise if neither of those buttons were pressed~ - Inside source: true *** True Line Result else # otherwise if neither of those buttons were pressed ** Processing line: ~ args.outputs.sounds << "sounds/#{button_clicked[:label]}.wav" # sound of clicked note is played~ - Inside source: true *** True Line Result args.outputs.sounds << "sounds/#{button_clicked[:label]}.wav" # sound of clicked note is played ** Processing line: ~ if button_clicked[:label] == args.state.target_note # if clicked note is target note~ - Inside source: true *** True Line Result if button_clicked[:label] == args.state.target_note # if clicked note is target note ** Processing line: ~ args.state.target_note = nil # target note is emptied~ - Inside source: true *** True Line Result args.state.target_note = nil # target note is emptied ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.current_level < 9 # if game hasn't reached level 9~ - Inside source: true *** True Line Result if args.state.current_level < 9 # if game hasn't reached level 9 ** Processing line: ~ args.state.current_level += 1 # game goes to next level~ - Inside source: true *** True Line Result args.state.current_level += 1 # game goes to next level ** Processing line: ~ else # otherwise, if game has reached level 9~ - Inside source: true *** True Line Result else # otherwise, if game has reached level 9 ** Processing line: ~ args.state.game_over = true # the game is over~ - Inside source: true *** True Line Result args.state.game_over = true # the game is over ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ queue_click_feedback args, 0, 0, args.grid.w, args.grid.h, 100, 200, 100 # green shown if user guesses correctly~ - Inside source: true *** True Line Result queue_click_feedback args, 0, 0, args.grid.w, args.grid.h, 100, 200, 100 # green shown if user guesses correctly ** Processing line: ~ else # otherwise, if clicked note is not target note~ - Inside source: true *** True Line Result else # otherwise, if clicked note is not target note ** Processing line: ~ args.state.times_wrong += 1 # increments times user guessed wrong~ - Inside source: true *** True Line Result args.state.times_wrong += 1 # increments times user guessed wrong ** Processing line: ~ queue_click_feedback args, 0, 0, args.grid.w, args.grid.h, 200, 100, 100 # red shown is user guesses wrong~ - Inside source: true *** True Line Result queue_click_feedback args, 0, 0, args.grid.w, args.grid.h, 200, 100, 100 # red shown is user guesses wrong ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates a collection of all of the available notes as symbols~ - Inside source: true *** True Line Result # Creates a collection of all of the available notes as symbols ** Processing line: ~ def available_notes~ - Inside source: true *** True Line Result def available_notes ** Processing line: ~ [:C3, :D3, :E3, :F3, :G3, :A3, :B3, :C4]~ - Inside source: true *** True Line Result [:C3, :D3, :E3, :F3, :G3, :A3, :B3, :C4] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates buttons for each note, and sets a label (the note's name) and border for each note's button.~ - Inside source: true *** True Line Result # Creates buttons for each note, and sets a label (the note's name) and border for each note's button. ** Processing line: ~ def piano_button args, note, position~ - Inside source: true *** True Line Result def piano_button args, note, position ** Processing line: ~ args.state.new_entity(:button) do |b| # declares button as new entity~ - Inside source: true *** True Line Result args.state.new_entity(:button) do |b| # declares button as new entity ** Processing line: ~ b.label = [460 + 40.mult(position), args.grid.h * 0.4, "#{note}", 0, 1, 0, 0, 0] # label definition~ - Inside source: true *** True Line Result b.label = [460 + 40.mult(position), args.grid.h * 0.4, "#{note}", 0, 1, 0, 0, 0] # label definition ** Processing line: ~ b.border = { x: 460 + 40.mult(position) - 20, y: args.grid.h * 0.4 - 32, w: 40, h: 40, label: note } # border definition, text/title; 20 subtracted so label is in center of border~ - Inside source: true *** True Line Result b.border = { x: 460 + 40.mult(position) - 20, y: args.grid.h * 0.4 - 32, w: 40, h: 40, label: note } # border definition, text/title; 20 subtracted so label is in center of border ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Color of click feedback changes depending on what button was clicked, and whether the guess is right or wrong~ - Inside source: true *** True Line Result # Color of click feedback changes depending on what button was clicked, and whether the guess is right or wrong ** Processing line: ~ # If a button is clicked, the inside of button is purple (see input_mouse method)~ - Inside source: true *** True Line Result # If a button is clicked, the inside of button is purple (see input_mouse method) ** Processing line: ~ # If correct note is clicked, screen turns green~ - Inside source: true *** True Line Result # If correct note is clicked, screen turns green ** Processing line: ~ # If incorrect note is clicked, screen turns red (again, see input_mouse method)~ - Inside source: true *** True Line Result # If incorrect note is clicked, screen turns red (again, see input_mouse method) ** Processing line: ~ def queue_click_feedback args, x, y, w, h, *color~ - Inside source: true *** True Line Result def queue_click_feedback args, x, y, w, h, *color ** Processing line: ~ args.state.click_feedbacks << args.state.new_entity(:click_feedback) do |c| # declares feedback as new entity~ - Inside source: true *** True Line Result args.state.click_feedbacks << args.state.new_entity(:click_feedback) do |c| # declares feedback as new entity ** Processing line: ~ c.solid = [x, y, w, h, *color, 255] # sets color~ - Inside source: true *** True Line Result c.solid = [x, y, w, h, *color, 255] # sets color ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Arcade - Twinstick - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Arcade - Twinstick - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_arcade/twinstick/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_arcade/twinstick/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.player ||= {x: 600, y: 320, w: 80, h: 80, path: 'sprites/circle-white.png', vx: 0, vy: 0, health: 10, cooldown: 0, score: 0}~ - Inside source: true *** True Line Result args.state.player ||= {x: 600, y: 320, w: 80, h: 80, path: 'sprites/circle-white.png', vx: 0, vy: 0, health: 10, cooldown: 0, score: 0} ** Processing line: ~ args.state.enemies ||= []~ - Inside source: true *** True Line Result args.state.enemies ||= [] ** Processing line: ~ args.state.player_bullets ||= []~ - Inside source: true *** True Line Result args.state.player_bullets ||= [] ** Processing line: ~ args.state.tick_count ||= -1~ - Inside source: true *** True Line Result args.state.tick_count ||= -1 ** Processing line: ~ args.state.tick_count += 1~ - Inside source: true *** True Line Result args.state.tick_count += 1 ** Processing line: ~ spawn_enemies args~ - Inside source: true *** True Line Result spawn_enemies args ** Processing line: ~ kill_enemies args~ - Inside source: true *** True Line Result kill_enemies args ** Processing line: ~ move_enemies args~ - Inside source: true *** True Line Result move_enemies args ** Processing line: ~ move_bullets args~ - Inside source: true *** True Line Result move_bullets args ** Processing line: ~ move_player args~ - Inside source: true *** True Line Result move_player args ** Processing line: ~ fire_player args~ - Inside source: true *** True Line Result fire_player args ** Processing line: ~ args.state.player[:r] = args.state.player[:g] = args.state.player[:b] = (args.state.player[:health] * 25.5).clamp(0, 255)~ - Inside source: true *** True Line Result args.state.player[:r] = args.state.player[:g] = args.state.player[:b] = (args.state.player[:health] * 25.5).clamp(0, 255) ** Processing line: ~ label_color = args.state.player[:health] <= 5 ? 255 : 0~ - Inside source: true *** True Line Result label_color = args.state.player[:health] <= 5 ? 255 : 0 ** Processing line: ~ args.outputs.labels << [~ - Inside source: true *** True Line Result args.outputs.labels << [ ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: args.state.player.x + 40, y: args.state.player.y + 60, alignment_enum: 1, text: "#{args.state.player[:health]} HP",~ - Inside source: true *** True Line Result x: args.state.player.x + 40, y: args.state.player.y + 60, alignment_enum: 1, text: "#{args.state.player[:health]} HP", ** Processing line: ~ r: label_color, g: label_color, b: label_color~ - Inside source: true *** True Line Result r: label_color, g: label_color, b: label_color ** Processing line: ~ }, {~ - Inside source: true *** True Line Result }, { ** Processing line: ~ x: args.state.player.x + 40, y: args.state.player.y + 40, alignment_enum: 1, text: "#{args.state.player[:score]} PTS",~ - Inside source: true *** True Line Result x: args.state.player.x + 40, y: args.state.player.y + 40, alignment_enum: 1, text: "#{args.state.player[:score]} PTS", ** Processing line: ~ r: label_color, g: label_color, b: label_color, size_enum: 2 - args.state.player[:score].to_s.length,~ - Inside source: true *** True Line Result r: label_color, g: label_color, b: label_color, size_enum: 2 - args.state.player[:score].to_s.length, ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ args.outputs.sprites << [args.state.player, args.state.enemies, args.state.player_bullets]~ - Inside source: true *** True Line Result args.outputs.sprites << [args.state.player, args.state.enemies, args.state.player_bullets] ** Processing line: ~ args.state.clear! if args.state.player[:health] < 0 # Reset the game if the player's health drops below zero~ - Inside source: true *** True Line Result args.state.clear! if args.state.player[:health] < 0 # Reset the game if the player's health drops below zero ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def spawn_enemies args~ - Inside source: true *** True Line Result def spawn_enemies args ** Processing line: ~ # Spawn enemies more frequently as the player's score increases.~ - Inside source: true *** True Line Result # Spawn enemies more frequently as the player's score increases. ** Processing line: ~ if rand < (100+args.state.player[:score])/(10000 + args.state.player[:score]) || args.state.tick_count.zero?~ - Inside source: true *** True Line Result if rand < (100+args.state.player[:score])/(10000 + args.state.player[:score]) || args.state.tick_count.zero? ** Processing line: ~ theta = rand * Math::PI * 2~ - Inside source: true *** True Line Result theta = rand * Math::PI * 2 ** Processing line: ~ args.state.enemies << {~ - Inside source: true *** True Line Result args.state.enemies << { ** Processing line: ~ x: 600 + Math.cos(theta) * 800, y: 320 + Math.sin(theta) * 800, w: 80, h: 80, path: 'sprites/circle-white.png',~ - Inside source: true *** True Line Result x: 600 + Math.cos(theta) * 800, y: 320 + Math.sin(theta) * 800, w: 80, h: 80, path: 'sprites/circle-white.png', ** Processing line: ~ r: (256 * rand).floor, g: (256 * rand).floor, b: (256 * rand).floor~ - Inside source: true *** True Line Result r: (256 * rand).floor, g: (256 * rand).floor, b: (256 * rand).floor ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def kill_enemies args~ - Inside source: true *** True Line Result def kill_enemies args ** Processing line: ~ args.state.enemies.reject! do |enemy|~ - Inside source: true *** True Line Result args.state.enemies.reject! do |enemy| ** Processing line: ~ # Check if enemy and player are within 80 pixels of each other (i.e. overlapping)~ - Inside source: true *** True Line Result # Check if enemy and player are within 80 pixels of each other (i.e. overlapping) ** Processing line: ~ if 6400 > (enemy.x - args.state.player.x) ** 2 + (enemy.y - args.state.player.y) ** 2~ - Inside source: true *** True Line Result if 6400 > (enemy.x - args.state.player.x) ** 2 + (enemy.y - args.state.player.y) ** 2 ** Processing line: ~ # Enemy is touching player. Kill enemy, and reduce player HP by 1.~ - Inside source: true *** True Line Result # Enemy is touching player. Kill enemy, and reduce player HP by 1. ** Processing line: ~ args.state.player[:health] -= 1~ - Inside source: true *** True Line Result args.state.player[:health] -= 1 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.player_bullets.any? do |bullet|~ - Inside source: true *** True Line Result args.state.player_bullets.any? do |bullet| ** Processing line: ~ # Check if enemy and bullet are within 50 pixels of each other (i.e. overlapping)~ - Inside source: true *** True Line Result # Check if enemy and bullet are within 50 pixels of each other (i.e. overlapping) ** Processing line: ~ if 2500 > (enemy.x - bullet.x + 30) ** 2 + (enemy.y - bullet.y + 30) ** 2~ - Inside source: true *** True Line Result if 2500 > (enemy.x - bullet.x + 30) ** 2 + (enemy.y - bullet.y + 30) ** 2 ** Processing line: ~ # Increase player health by one for each enemy killed by a bullet after the first enemy, up to a maximum of 10 HP~ - Inside source: true *** True Line Result # Increase player health by one for each enemy killed by a bullet after the first enemy, up to a maximum of 10 HP ** Processing line: ~ args.state.player[:health] += 1 if args.state.player[:health] < 10 && bullet[:kills] > 0~ - Inside source: true *** True Line Result args.state.player[:health] += 1 if args.state.player[:health] < 10 && bullet[:kills] > 0 ** Processing line: ~ # Keep track of how many enemies have been killed by this particular bullet~ - Inside source: true *** True Line Result # Keep track of how many enemies have been killed by this particular bullet ** Processing line: ~ bullet[:kills] += 1~ - Inside source: true *** True Line Result bullet[:kills] += 1 ** Processing line: ~ # Earn more points by killing multiple enemies with one shot.~ - Inside source: true *** True Line Result # Earn more points by killing multiple enemies with one shot. ** Processing line: ~ args.state.player[:score] += bullet[:kills]~ - Inside source: true *** True Line Result args.state.player[:score] += bullet[:kills] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_enemies args~ - Inside source: true *** True Line Result def move_enemies args ** Processing line: ~ args.state.enemies.each do |enemy|~ - Inside source: true *** True Line Result args.state.enemies.each do |enemy| ** Processing line: ~ # Get the angle from the enemy to the player~ - Inside source: true *** True Line Result # Get the angle from the enemy to the player ** Processing line: ~ theta = Math.atan2(enemy.y - args.state.player.y, enemy.x - args.state.player.x)~ - Inside source: true *** True Line Result theta = Math.atan2(enemy.y - args.state.player.y, enemy.x - args.state.player.x) ** Processing line: ~ # Convert the angle to a vector pointing at the player~ - Inside source: true *** True Line Result # Convert the angle to a vector pointing at the player ** Processing line: ~ dx, dy = theta.to_degrees.vector 5~ - Inside source: true *** True Line Result dx, dy = theta.to_degrees.vector 5 ** Processing line: ~ # Move the enemy towards thr player~ - Inside source: true *** True Line Result # Move the enemy towards thr player ** Processing line: ~ enemy.x -= dx~ - Inside source: true *** True Line Result enemy.x -= dx ** Processing line: ~ enemy.y -= dy~ - Inside source: true *** True Line Result enemy.y -= dy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_bullets args~ - Inside source: true *** True Line Result def move_bullets args ** Processing line: ~ args.state.player_bullets.each do |bullet|~ - Inside source: true *** True Line Result args.state.player_bullets.each do |bullet| ** Processing line: ~ # Move the bullets according to the bullet's velocity~ - Inside source: true *** True Line Result # Move the bullets according to the bullet's velocity ** Processing line: ~ bullet.x += bullet[:vx]~ - Inside source: true *** True Line Result bullet.x += bullet[:vx] ** Processing line: ~ bullet.y += bullet[:vy]~ - Inside source: true *** True Line Result bullet.y += bullet[:vy] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.player_bullets.reject! do |bullet|~ - Inside source: true *** True Line Result args.state.player_bullets.reject! do |bullet| ** Processing line: ~ # Despawn bullets that are outside the screen area~ - Inside source: true *** True Line Result # Despawn bullets that are outside the screen area ** Processing line: ~ bullet.x < -20 || bullet.y < -20 || bullet.x > 1300 || bullet.y > 740~ - Inside source: true *** True Line Result bullet.x < -20 || bullet.y < -20 || bullet.x > 1300 || bullet.y > 740 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_player args~ - Inside source: true *** True Line Result def move_player args ** Processing line: ~ # Get the currently held direction.~ - Inside source: true *** True Line Result # Get the currently held direction. ** Processing line: ~ dx, dy = move_directional_vector args~ - Inside source: true *** True Line Result dx, dy = move_directional_vector args ** Processing line: ~ # Take the weighted average of the old velocities and the desired velocities.~ - Inside source: true *** True Line Result # Take the weighted average of the old velocities and the desired velocities. ** Processing line: ~ # Since move_directional_vector returns values between -1 and 1,~ - Inside source: true *** True Line Result # Since move_directional_vector returns values between -1 and 1, ** Processing line: ~ # and we want to limit the speed to 7.5, we multiply dx and dy by 7.5*0.1 to get 0.75~ - Inside source: true *** True Line Result # and we want to limit the speed to 7.5, we multiply dx and dy by 7.5*0.1 to get 0.75 ** Processing line: ~ args.state.player[:vx] = args.state.player[:vx] * 0.9 + dx * 0.75~ - Inside source: true *** True Line Result args.state.player[:vx] = args.state.player[:vx] * 0.9 + dx * 0.75 ** Processing line: ~ args.state.player[:vy] = args.state.player[:vy] * 0.9 + dy * 0.75~ - Inside source: true *** True Line Result args.state.player[:vy] = args.state.player[:vy] * 0.9 + dy * 0.75 ** Processing line: ~ # Move the player~ - Inside source: true *** True Line Result # Move the player ** Processing line: ~ args.state.player.x += args.state.player[:vx]~ - Inside source: true *** True Line Result args.state.player.x += args.state.player[:vx] ** Processing line: ~ args.state.player.y += args.state.player[:vy]~ - Inside source: true *** True Line Result args.state.player.y += args.state.player[:vy] ** Processing line: ~ # If the player is about to go out of bounds, put them back in bounds.~ - Inside source: true *** True Line Result # If the player is about to go out of bounds, put them back in bounds. ** Processing line: ~ args.state.player.x = args.state.player.x.clamp(0, 1201)~ - Inside source: true *** True Line Result args.state.player.x = args.state.player.x.clamp(0, 1201) ** Processing line: ~ args.state.player.y = args.state.player.y.clamp(0, 640)~ - Inside source: true *** True Line Result args.state.player.y = args.state.player.y.clamp(0, 640) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def fire_player args~ - Inside source: true *** True Line Result def fire_player args ** Processing line: ~ # Reduce the firing cooldown each tick~ - Inside source: true *** True Line Result # Reduce the firing cooldown each tick ** Processing line: ~ args.state.player[:cooldown] -= 1~ - Inside source: true *** True Line Result args.state.player[:cooldown] -= 1 ** Processing line: ~ # If the player is allowed to fire~ - Inside source: true *** True Line Result # If the player is allowed to fire ** Processing line: ~ if args.state.player[:cooldown] <= 0~ - Inside source: true *** True Line Result if args.state.player[:cooldown] <= 0 ** Processing line: ~ dx, dy = shoot_directional_vector args # Get the bullet velocity~ - Inside source: true *** True Line Result dx, dy = shoot_directional_vector args # Get the bullet velocity ** Processing line: ~ return if dx == 0 && dy == 0 # If the velocity is zero, the player doesn't want to fire. Therefore, we just return early.~ - Inside source: true *** True Line Result return if dx == 0 && dy == 0 # If the velocity is zero, the player doesn't want to fire. Therefore, we just return early. ** Processing line: ~ # Add a new bullet to the list of player bullets.~ - Inside source: true *** True Line Result # Add a new bullet to the list of player bullets. ** Processing line: ~ args.state.player_bullets << {~ - Inside source: true *** True Line Result args.state.player_bullets << { ** Processing line: ~ x: args.state.player.x + 30 + 40 * dx,~ - Inside source: true *** True Line Result x: args.state.player.x + 30 + 40 * dx, ** Processing line: ~ y: args.state.player.y + 30 + 40 * dy,~ - Inside source: true *** True Line Result y: args.state.player.y + 30 + 40 * dy, ** Processing line: ~ w: 20, h: 20,~ - Inside source: true *** True Line Result w: 20, h: 20, ** Processing line: ~ path: 'sprites/circle-white.png',~ - Inside source: true *** True Line Result path: 'sprites/circle-white.png', ** Processing line: ~ r: 0, g: 0, b: 0,~ - Inside source: true *** True Line Result r: 0, g: 0, b: 0, ** Processing line: ~ vx: 10 * dx + args.state.player[:vx] / 7.5, vy: 10 * dy + args.state.player[:vy] / 7.5, # Factor in a bit of the player's velocity~ - Inside source: true *** True Line Result vx: 10 * dx + args.state.player[:vx] / 7.5, vy: 10 * dy + args.state.player[:vy] / 7.5, # Factor in a bit of the player's velocity ** Processing line: ~ kills: 0~ - Inside source: true *** True Line Result kills: 0 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ args.state.player[:cooldown] = 30 # Reset the cooldown~ - Inside source: true *** True Line Result args.state.player[:cooldown] = 30 # Reset the cooldown ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Custom function for getting a directional vector just for movement using WASD~ - Inside source: true *** True Line Result # Custom function for getting a directional vector just for movement using WASD ** Processing line: ~ def move_directional_vector args~ - Inside source: true *** True Line Result def move_directional_vector args ** Processing line: ~ dx = 0~ - Inside source: true *** True Line Result dx = 0 ** Processing line: ~ dx += 1 if args.inputs.keyboard.d~ - Inside source: true *** True Line Result dx += 1 if args.inputs.keyboard.d ** Processing line: ~ dx -= 1 if args.inputs.keyboard.a~ - Inside source: true *** True Line Result dx -= 1 if args.inputs.keyboard.a ** Processing line: ~ dy = 0~ - Inside source: true *** True Line Result dy = 0 ** Processing line: ~ dy += 1 if args.inputs.keyboard.w~ - Inside source: true *** True Line Result dy += 1 if args.inputs.keyboard.w ** Processing line: ~ dy -= 1 if args.inputs.keyboard.s~ - Inside source: true *** True Line Result dy -= 1 if args.inputs.keyboard.s ** Processing line: ~ if dx != 0 && dy != 0~ - Inside source: true *** True Line Result if dx != 0 && dy != 0 ** Processing line: ~ dx *= 0.7071~ - Inside source: true *** True Line Result dx *= 0.7071 ** Processing line: ~ dy *= 0.7071~ - Inside source: true *** True Line Result dy *= 0.7071 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ [dx, dy]~ - Inside source: true *** True Line Result [dx, dy] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Custom function for getting a directional vector just for shooting using the arrow keys~ - Inside source: true *** True Line Result # Custom function for getting a directional vector just for shooting using the arrow keys ** Processing line: ~ def shoot_directional_vector args~ - Inside source: true *** True Line Result def shoot_directional_vector args ** Processing line: ~ dx = 0~ - Inside source: true *** True Line Result dx = 0 ** Processing line: ~ dx += 1 if args.inputs.keyboard.key_down.right || args.inputs.keyboard.key_held.right~ - Inside source: true *** True Line Result dx += 1 if args.inputs.keyboard.key_down.right || args.inputs.keyboard.key_held.right ** Processing line: ~ dx -= 1 if args.inputs.keyboard.key_down.left || args.inputs.keyboard.key_held.left~ - Inside source: true *** True Line Result dx -= 1 if args.inputs.keyboard.key_down.left || args.inputs.keyboard.key_held.left ** Processing line: ~ dy = 0~ - Inside source: true *** True Line Result dy = 0 ** Processing line: ~ dy += 1 if args.inputs.keyboard.key_down.up || args.inputs.keyboard.key_held.up~ - Inside source: true *** True Line Result dy += 1 if args.inputs.keyboard.key_down.up || args.inputs.keyboard.key_held.up ** Processing line: ~ dy -= 1 if args.inputs.keyboard.key_down.down || args.inputs.keyboard.key_held.down~ - Inside source: true *** True Line Result dy -= 1 if args.inputs.keyboard.key_down.down || args.inputs.keyboard.key_held.down ** Processing line: ~ if dx != 0 && dy != 0~ - Inside source: true *** True Line Result if dx != 0 && dy != 0 ** Processing line: ~ dx *= 0.7071~ - Inside source: true *** True Line Result dx *= 0.7071 ** Processing line: ~ dy *= 0.7071~ - Inside source: true *** True Line Result dy *= 0.7071 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ [dx, dy]~ - Inside source: true *** True Line Result [dx, dy] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Crafting - Craft Game Starting Point - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Crafting - Craft Game Starting Point - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_crafting/craft_game_starting_point/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_crafting/craft_game_starting_point/app/main.rb ** Processing line: ~ # ==================================================~ - Inside source: true *** True Line Result # ================================================== ** Processing line: ~ # A NOTE TO JAM CRAFT PARTICIPANTS:~ - Inside source: true *** True Line Result # A NOTE TO JAM CRAFT PARTICIPANTS: ** Processing line: ~ # The comments and code in here are just as small piece of DragonRuby's capabilities.~ - Inside source: true *** True Line Result # The comments and code in here are just as small piece of DragonRuby's capabilities. ** Processing line: ~ # Be sure to check out the rest of the sample apps. Start with README.txt and go from there!~ - Inside source: true *** True Line Result # Be sure to check out the rest of the sample apps. Start with README.txt and go from there! ** Processing line: ~ # ==================================================~ - Inside source: true *** True Line Result # ================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # def tick args is the entry point into your game. This function is called at~ - Inside source: true *** True Line Result # def tick args is the entry point into your game. This function is called at ** Processing line: ~ # a fixed update time of 60hz (60 fps).~ - Inside source: true *** True Line Result # a fixed update time of 60hz (60 fps). ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # The defaults function intitializes the game.~ - Inside source: true *** True Line Result # The defaults function intitializes the game. ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # After the game is initialized, render it.~ - Inside source: true *** True Line Result # After the game is initialized, render it. ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # After rendering the player should be able to respond to input.~ - Inside source: true *** True Line Result # After rendering the player should be able to respond to input. ** Processing line: ~ input args~ - Inside source: true *** True Line Result input args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # After responding to input, the game performs any additional calculations.~ - Inside source: true *** True Line Result # After responding to input, the game performs any additional calculations. ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ # hide the mouse cursor for this game, we are going to render our own cursor~ - Inside source: true *** True Line Result # hide the mouse cursor for this game, we are going to render our own cursor ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.gtk.hide_cursor~ - Inside source: true *** True Line Result args.gtk.hide_cursor ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.click_ripples ||= []~ - Inside source: true *** True Line Result args.state.click_ripples ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # everything is on a 1280x720 virtual canvas, so you can~ - Inside source: true *** True Line Result # everything is on a 1280x720 virtual canvas, so you can ** Processing line: ~ # hardcode locations~ - Inside source: true *** True Line Result # hardcode locations ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # define the borders for where the inventory is located~ - Inside source: true *** True Line Result # define the borders for where the inventory is located ** Processing line: ~ # args.state is a data structure that accepts any arbitrary parameters~ - Inside source: true *** True Line Result # args.state is a data structure that accepts any arbitrary parameters ** Processing line: ~ # so you can create an object graph without having to create any classes.~ - Inside source: true *** True Line Result # so you can create an object graph without having to create any classes. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Bottom left is 0, 0. Top right is 1280, 720.~ - Inside source: true *** True Line Result # Bottom left is 0, 0. Top right is 1280, 720. ** Processing line: ~ # The inventory area is at the top of the screen~ - Inside source: true *** True Line Result # The inventory area is at the top of the screen ** Processing line: ~ # the number 80 is the size of all the sprites, so that is what is being~ - Inside source: true *** True Line Result # the number 80 is the size of all the sprites, so that is what is being ** Processing line: ~ # used to decide the with and height~ - Inside source: true *** True Line Result # used to decide the with and height ** Processing line: ~ args.state.sprite_size = 80~ - Inside source: true *** True Line Result args.state.sprite_size = 80 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.inventory_border.w = args.state.sprite_size * 10~ - Inside source: true *** True Line Result args.state.inventory_border.w = args.state.sprite_size * 10 ** Processing line: ~ args.state.inventory_border.h = args.state.sprite_size * 3~ - Inside source: true *** True Line Result args.state.inventory_border.h = args.state.sprite_size * 3 ** Processing line: ~ args.state.inventory_border.x = 10~ - Inside source: true *** True Line Result args.state.inventory_border.x = 10 ** Processing line: ~ args.state.inventory_border.y = 710 - args.state.inventory_border.h~ - Inside source: true *** True Line Result args.state.inventory_border.y = 710 - args.state.inventory_border.h ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # define the borders for where the crafting area is located~ - Inside source: true *** True Line Result # define the borders for where the crafting area is located ** Processing line: ~ # the crafting area is below the inventory area~ - Inside source: true *** True Line Result # the crafting area is below the inventory area ** Processing line: ~ # the number 80 is the size of all the sprites, so that is what is being~ - Inside source: true *** True Line Result # the number 80 is the size of all the sprites, so that is what is being ** Processing line: ~ # used to decide the with and height~ - Inside source: true *** True Line Result # used to decide the with and height ** Processing line: ~ args.state.craft_border.x = 10~ - Inside source: true *** True Line Result args.state.craft_border.x = 10 ** Processing line: ~ args.state.craft_border.y = 220~ - Inside source: true *** True Line Result args.state.craft_border.y = 220 ** Processing line: ~ args.state.craft_border.w = args.state.sprite_size * 3~ - Inside source: true *** True Line Result args.state.craft_border.w = args.state.sprite_size * 3 ** Processing line: ~ args.state.craft_border.h = args.state.sprite_size * 3~ - Inside source: true *** True Line Result args.state.craft_border.h = args.state.sprite_size * 3 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # define the area where results are located~ - Inside source: true *** True Line Result # define the area where results are located ** Processing line: ~ # the crafting result is to the right of the craft area~ - Inside source: true *** True Line Result # the crafting result is to the right of the craft area ** Processing line: ~ args.state.result_border.x = 10 + args.state.sprite_size * 3 + args.state.sprite_size~ - Inside source: true *** True Line Result args.state.result_border.x = 10 + args.state.sprite_size * 3 + args.state.sprite_size ** Processing line: ~ args.state.result_border.y = 220 + args.state.sprite_size~ - Inside source: true *** True Line Result args.state.result_border.y = 220 + args.state.sprite_size ** Processing line: ~ args.state.result_border.w = args.state.sprite_size~ - Inside source: true *** True Line Result args.state.result_border.w = args.state.sprite_size ** Processing line: ~ args.state.result_border.h = args.state.sprite_size~ - Inside source: true *** True Line Result args.state.result_border.h = args.state.sprite_size ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # initialize items for the first time if they are nil~ - Inside source: true *** True Line Result # initialize items for the first time if they are nil ** Processing line: ~ # you start with 15 wood, 1 chest, and 5 plank~ - Inside source: true *** True Line Result # you start with 15 wood, 1 chest, and 5 plank ** Processing line: ~ # Ruby has built in syntax for dictionaries (they look a lot like json objects).~ - Inside source: true *** True Line Result # Ruby has built in syntax for dictionaries (they look a lot like json objects). ** Processing line: ~ # Ruby also has a special type called a Symbol denoted with a : followed by a word.~ - Inside source: true *** True Line Result # Ruby also has a special type called a Symbol denoted with a : followed by a word. ** Processing line: ~ # Symbols are nice because they remove the need for magic strings.~ - Inside source: true *** True Line Result # Symbols are nice because they remove the need for magic strings. ** Processing line: ~ if !args.state.items~ - Inside source: true *** True Line Result if !args.state.items ** Processing line: ~ args.state.items = [~ - Inside source: true *** True Line Result args.state.items = [ ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ id: :wood, # :wood is a Symbol, this is better than using "wood" for the id~ - Inside source: true *** True Line Result id: :wood, # :wood is a Symbol, this is better than using "wood" for the id ** Processing line: ~ quantity: 15,~ - Inside source: true *** True Line Result quantity: 15, ** Processing line: ~ path: 'sprites/wood.png',~ - Inside source: true *** True Line Result path: 'sprites/wood.png', ** Processing line: ~ location: :inventory,~ - Inside source: true *** True Line Result location: :inventory, ** Processing line: ~ ordinal_x: 0, ordinal_y: 0~ - Inside source: true *** True Line Result ordinal_x: 0, ordinal_y: 0 ** Processing line: ~ },~ - Inside source: true *** True Line Result }, ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ id: :chest,~ - Inside source: true *** True Line Result id: :chest, ** Processing line: ~ quantity: 1,~ - Inside source: true *** True Line Result quantity: 1, ** Processing line: ~ path: 'sprites/chest.png',~ - Inside source: true *** True Line Result path: 'sprites/chest.png', ** Processing line: ~ location: :inventory,~ - Inside source: true *** True Line Result location: :inventory, ** Processing line: ~ ordinal_x: 1, ordinal_y: 0~ - Inside source: true *** True Line Result ordinal_x: 1, ordinal_y: 0 ** Processing line: ~ },~ - Inside source: true *** True Line Result }, ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ id: :plank,~ - Inside source: true *** True Line Result id: :plank, ** Processing line: ~ quantity: 5,~ - Inside source: true *** True Line Result quantity: 5, ** Processing line: ~ path: 'sprites/plank.png',~ - Inside source: true *** True Line Result path: 'sprites/plank.png', ** Processing line: ~ location: :inventory,~ - Inside source: true *** True Line Result location: :inventory, ** Processing line: ~ ordinal_x: 2, ordinal_y: 0~ - Inside source: true *** True Line Result ordinal_x: 2, ordinal_y: 0 ** Processing line: ~ },~ - Inside source: true *** True Line Result }, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # after initializing the oridinal positions, derive the pixel~ - Inside source: true *** True Line Result # after initializing the oridinal positions, derive the pixel ** Processing line: ~ # locations assuming that the width and height are 80~ - Inside source: true *** True Line Result # locations assuming that the width and height are 80 ** Processing line: ~ args.state.items.each { |item| set_inventory_position args, item }~ - Inside source: true *** True Line Result args.state.items.each { |item| set_inventory_position args, item } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # define all the oridinal positions of the inventory slots~ - Inside source: true *** True Line Result # define all the oridinal positions of the inventory slots ** Processing line: ~ if !args.state.inventory_area~ - Inside source: true *** True Line Result if !args.state.inventory_area ** Processing line: ~ args.state.inventory_area = [~ - Inside source: true *** True Line Result args.state.inventory_area = [ ** Processing line: ~ { ordinal_x: 0, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 0, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 1, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 1, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 2, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 2, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 3, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 3, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 4, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 4, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 5, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 5, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 6, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 6, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 7, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 7, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 8, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 8, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 9, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 9, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 0, ordinal_y: 1 },~ - Inside source: true *** True Line Result { ordinal_x: 0, ordinal_y: 1 }, ** Processing line: ~ { ordinal_x: 1, ordinal_y: 1 },~ - Inside source: true *** True Line Result { ordinal_x: 1, ordinal_y: 1 }, ** Processing line: ~ { ordinal_x: 2, ordinal_y: 1 },~ - Inside source: true *** True Line Result { ordinal_x: 2, ordinal_y: 1 }, ** Processing line: ~ { ordinal_x: 3, ordinal_y: 1 },~ - Inside source: true *** True Line Result { ordinal_x: 3, ordinal_y: 1 }, ** Processing line: ~ { ordinal_x: 4, ordinal_y: 1 },~ - Inside source: true *** True Line Result { ordinal_x: 4, ordinal_y: 1 }, ** Processing line: ~ { ordinal_x: 5, ordinal_y: 1 },~ - Inside source: true *** True Line Result { ordinal_x: 5, ordinal_y: 1 }, ** Processing line: ~ { ordinal_x: 6, ordinal_y: 1 },~ - Inside source: true *** True Line Result { ordinal_x: 6, ordinal_y: 1 }, ** Processing line: ~ { ordinal_x: 7, ordinal_y: 1 },~ - Inside source: true *** True Line Result { ordinal_x: 7, ordinal_y: 1 }, ** Processing line: ~ { ordinal_x: 8, ordinal_y: 1 },~ - Inside source: true *** True Line Result { ordinal_x: 8, ordinal_y: 1 }, ** Processing line: ~ { ordinal_x: 9, ordinal_y: 1 },~ - Inside source: true *** True Line Result { ordinal_x: 9, ordinal_y: 1 }, ** Processing line: ~ { ordinal_x: 0, ordinal_y: 2 },~ - Inside source: true *** True Line Result { ordinal_x: 0, ordinal_y: 2 }, ** Processing line: ~ { ordinal_x: 1, ordinal_y: 2 },~ - Inside source: true *** True Line Result { ordinal_x: 1, ordinal_y: 2 }, ** Processing line: ~ { ordinal_x: 2, ordinal_y: 2 },~ - Inside source: true *** True Line Result { ordinal_x: 2, ordinal_y: 2 }, ** Processing line: ~ { ordinal_x: 3, ordinal_y: 2 },~ - Inside source: true *** True Line Result { ordinal_x: 3, ordinal_y: 2 }, ** Processing line: ~ { ordinal_x: 4, ordinal_y: 2 },~ - Inside source: true *** True Line Result { ordinal_x: 4, ordinal_y: 2 }, ** Processing line: ~ { ordinal_x: 5, ordinal_y: 2 },~ - Inside source: true *** True Line Result { ordinal_x: 5, ordinal_y: 2 }, ** Processing line: ~ { ordinal_x: 6, ordinal_y: 2 },~ - Inside source: true *** True Line Result { ordinal_x: 6, ordinal_y: 2 }, ** Processing line: ~ { ordinal_x: 7, ordinal_y: 2 },~ - Inside source: true *** True Line Result { ordinal_x: 7, ordinal_y: 2 }, ** Processing line: ~ { ordinal_x: 8, ordinal_y: 2 },~ - Inside source: true *** True Line Result { ordinal_x: 8, ordinal_y: 2 }, ** Processing line: ~ { ordinal_x: 9, ordinal_y: 2 },~ - Inside source: true *** True Line Result { ordinal_x: 9, ordinal_y: 2 }, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # after initializing the oridinal positions, derive the pixel~ - Inside source: true *** True Line Result # after initializing the oridinal positions, derive the pixel ** Processing line: ~ # locations assuming that the width and height are 80~ - Inside source: true *** True Line Result # locations assuming that the width and height are 80 ** Processing line: ~ args.state.inventory_area.each { |i| set_inventory_position args, i }~ - Inside source: true *** True Line Result args.state.inventory_area.each { |i| set_inventory_position args, i } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if you want to see the result you can use the Ruby function called "puts".~ - Inside source: true *** True Line Result # if you want to see the result you can use the Ruby function called "puts". ** Processing line: ~ # Uncomment this line to see the value.~ - Inside source: true *** True Line Result # Uncomment this line to see the value. ** Processing line: ~ # puts args.state.inventory_area~ - Inside source: true *** True Line Result # puts args.state.inventory_area ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # You can see all things written via puts in DragonRuby's Console, or under logs/log.txt.~ - Inside source: true *** True Line Result # You can see all things written via puts in DragonRuby's Console, or under logs/log.txt. ** Processing line: ~ # To bring up DragonRuby's Console, press the ~ key within the game.~ - Inside source: true *** True Line Result # To bring up DragonRuby's Console, press the ~ key within the game. ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # define all the oridinal positions of the craft slots~ - Inside source: true *** True Line Result # define all the oridinal positions of the craft slots ** Processing line: ~ if !args.state.craft_area~ - Inside source: true *** True Line Result if !args.state.craft_area ** Processing line: ~ args.state.craft_area = [~ - Inside source: true *** True Line Result args.state.craft_area = [ ** Processing line: ~ { ordinal_x: 0, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 0, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 0, ordinal_y: 1 },~ - Inside source: true *** True Line Result { ordinal_x: 0, ordinal_y: 1 }, ** Processing line: ~ { ordinal_x: 0, ordinal_y: 2 },~ - Inside source: true *** True Line Result { ordinal_x: 0, ordinal_y: 2 }, ** Processing line: ~ { ordinal_x: 1, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 1, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 1, ordinal_y: 1 },~ - Inside source: true *** True Line Result { ordinal_x: 1, ordinal_y: 1 }, ** Processing line: ~ { ordinal_x: 1, ordinal_y: 2 },~ - Inside source: true *** True Line Result { ordinal_x: 1, ordinal_y: 2 }, ** Processing line: ~ { ordinal_x: 2, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 2, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 2, ordinal_y: 1 },~ - Inside source: true *** True Line Result { ordinal_x: 2, ordinal_y: 1 }, ** Processing line: ~ { ordinal_x: 2, ordinal_y: 2 },~ - Inside source: true *** True Line Result { ordinal_x: 2, ordinal_y: 2 }, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # after initializing the oridinal positions, derive the pixel~ - Inside source: true *** True Line Result # after initializing the oridinal positions, derive the pixel ** Processing line: ~ # locations assuming that the width and height are 80~ - Inside source: true *** True Line Result # locations assuming that the width and height are 80 ** Processing line: ~ args.state.craft_area.each { |c| set_craft_position args, c }~ - Inside source: true *** True Line Result args.state.craft_area.each { |c| set_craft_position args, c } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ # for the results area, create a sprite that show its boundaries~ - Inside source: true *** True Line Result # for the results area, create a sprite that show its boundaries ** Processing line: ~ args.outputs.primitives << { x: args.state.result_border.x,~ - Inside source: true *** True Line Result args.outputs.primitives << { x: args.state.result_border.x, ** Processing line: ~ y: args.state.result_border.y,~ - Inside source: true *** True Line Result y: args.state.result_border.y, ** Processing line: ~ w: args.state.result_border.w,~ - Inside source: true *** True Line Result w: args.state.result_border.w, ** Processing line: ~ h: args.state.result_border.h,~ - Inside source: true *** True Line Result h: args.state.result_border.h, ** Processing line: ~ path: 'sprites/border-black.png' }~ - Inside source: true *** True Line Result path: 'sprites/border-black.png' } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # for each inventory spot, create a sprite~ - Inside source: true *** True Line Result # for each inventory spot, create a sprite ** Processing line: ~ # args.outputs.primitives is how DragonRuby performs a render.~ - Inside source: true *** True Line Result # args.outputs.primitives is how DragonRuby performs a render. ** Processing line: ~ # Adding a single hash or multiple hashes to this array will tell~ - Inside source: true *** True Line Result # Adding a single hash or multiple hashes to this array will tell ** Processing line: ~ # DragonRuby to render those primitives on that frame.~ - Inside source: true *** True Line Result # DragonRuby to render those primitives on that frame. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The .map function on Array is used instead of any kind of looping.~ - Inside source: true *** True Line Result # The .map function on Array is used instead of any kind of looping. ** Processing line: ~ # .map returns a new object for every object within an Array.~ - Inside source: true *** True Line Result # .map returns a new object for every object within an Array. ** Processing line: ~ args.outputs.primitives << args.state.inventory_area.map do |a|~ - Inside source: true *** True Line Result args.outputs.primitives << args.state.inventory_area.map do |a| ** Processing line: ~ { x: a.x, y: a.y, w: a.w, h: a.h, path: 'sprites/border-black.png' }~ - Inside source: true *** True Line Result { x: a.x, y: a.y, w: a.w, h: a.h, path: 'sprites/border-black.png' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # for each craft spot, create a sprite~ - Inside source: true *** True Line Result # for each craft spot, create a sprite ** Processing line: ~ args.outputs.primitives << args.state.craft_area.map do |a|~ - Inside source: true *** True Line Result args.outputs.primitives << args.state.craft_area.map do |a| ** Processing line: ~ { x: a.x, y: a.y, w: a.w, h: a.h, path: 'sprites/border-black.png' }~ - Inside source: true *** True Line Result { x: a.x, y: a.y, w: a.w, h: a.h, path: 'sprites/border-black.png' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # after the borders have been rendered, render the~ - Inside source: true *** True Line Result # after the borders have been rendered, render the ** Processing line: ~ # items within those slots (and allow for highlighting)~ - Inside source: true *** True Line Result # items within those slots (and allow for highlighting) ** Processing line: ~ # if an item isn't currently being held~ - Inside source: true *** True Line Result # if an item isn't currently being held ** Processing line: ~ allow_inventory_highlighting = !args.state.held_item~ - Inside source: true *** True Line Result allow_inventory_highlighting = !args.state.held_item ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # go through each item and render them~ - Inside source: true *** True Line Result # go through each item and render them ** Processing line: ~ # use Array's find_all method to remove any items that are currently being held~ - Inside source: true *** True Line Result # use Array's find_all method to remove any items that are currently being held ** Processing line: ~ args.state.items.find_all { |item| item[:location] != :held }.map do |item|~ - Inside source: true *** True Line Result args.state.items.find_all { |item| item[:location] != :held }.map do |item| ** Processing line: ~ # if an item is currently being held, don't render it in it's spot within the~ - Inside source: true *** True Line Result # if an item is currently being held, don't render it in it's spot within the ** Processing line: ~ # inventory or craft area (this is handled via the find_all method).~ - Inside source: true *** True Line Result # inventory or craft area (this is handled via the find_all method). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # the item_prefab returns a hash containing all the visual components of an item.~ - Inside source: true *** True Line Result # the item_prefab returns a hash containing all the visual components of an item. ** Processing line: ~ # the main sprite, the black background, the quantity text, and a hover indication~ - Inside source: true *** True Line Result # the main sprite, the black background, the quantity text, and a hover indication ** Processing line: ~ # if the mouse is currently hovering over the item.~ - Inside source: true *** True Line Result # if the mouse is currently hovering over the item. ** Processing line: ~ args.outputs.primitives << item_prefab(args, item, allow_inventory_highlighting, args.inputs.mouse)~ - Inside source: true *** True Line Result args.outputs.primitives << item_prefab(args, item, allow_inventory_highlighting, args.inputs.mouse) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The last thing we want to render is the item currently being held.~ - Inside source: true *** True Line Result # The last thing we want to render is the item currently being held. ** Processing line: ~ args.outputs.primitives << item_prefab(args, args.state.held_item, allow_inventory_highlighting, args.inputs.mouse)~ - Inside source: true *** True Line Result args.outputs.primitives << item_prefab(args, args.state.held_item, allow_inventory_highlighting, args.inputs.mouse) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.primitives << args.state.click_ripples~ - Inside source: true *** True Line Result args.outputs.primitives << args.state.click_ripples ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render a mouse cursor since we have the OS cursor hidden~ - Inside source: true *** True Line Result # render a mouse cursor since we have the OS cursor hidden ** Processing line: ~ args.outputs.primitives << { x: args.inputs.mouse.x - 5, y: args.inputs.mouse.y - 5, w: 10, h: 10, path: 'sprites/circle-gray.png', a: 128 }~ - Inside source: true *** True Line Result args.outputs.primitives << { x: args.inputs.mouse.x - 5, y: args.inputs.mouse.y - 5, w: 10, h: 10, path: 'sprites/circle-gray.png', a: 128 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Alrighty! This is where all the fun happens~ - Inside source: true *** True Line Result # Alrighty! This is where all the fun happens ** Processing line: ~ def input args~ - Inside source: true *** True Line Result def input args ** Processing line: ~ # if the mouse is clicked and not item is currently being held~ - Inside source: true *** True Line Result # if the mouse is clicked and not item is currently being held ** Processing line: ~ # args.state.held_item is nil when the game starts.~ - Inside source: true *** True Line Result # args.state.held_item is nil when the game starts. ** Processing line: ~ # If the player clicks, the property args.inputs.mouse.click will~ - Inside source: true *** True Line Result # If the player clicks, the property args.inputs.mouse.click will ** Processing line: ~ # be a non nil value, we don't want to process any of the code here~ - Inside source: true *** True Line Result # be a non nil value, we don't want to process any of the code here ** Processing line: ~ # if the mouse hasn't been clicked~ - Inside source: true *** True Line Result # if the mouse hasn't been clicked ** Processing line: ~ return if !args.inputs.mouse.click~ - Inside source: true *** True Line Result return if !args.inputs.mouse.click ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if a click occurred, add a ripple to the ripple queue~ - Inside source: true *** True Line Result # if a click occurred, add a ripple to the ripple queue ** Processing line: ~ args.state.click_ripples << { x: args.inputs.mouse.x - 5, y: args.inputs.mouse.y - 5, w: 10, h: 10, path: 'sprites/circle-gray.png', a: 128 }~ - Inside source: true *** True Line Result args.state.click_ripples << { x: args.inputs.mouse.x - 5, y: args.inputs.mouse.y - 5, w: 10, h: 10, path: 'sprites/circle-gray.png', a: 128 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the mouse has been clicked, and no item is currently held...~ - Inside source: true *** True Line Result # if the mouse has been clicked, and no item is currently held... ** Processing line: ~ if !args.state.held_item~ - Inside source: true *** True Line Result if !args.state.held_item ** Processing line: ~ # see if any of the items intersect the pointer using the inside_rect? method~ - Inside source: true *** True Line Result # see if any of the items intersect the pointer using the inside_rect? method ** Processing line: ~ # the find method will either return the first object that returns true~ - Inside source: true *** True Line Result # the find method will either return the first object that returns true ** Processing line: ~ # for the match clause, or it'll return nil if nothing matches the match clause~ - Inside source: true *** True Line Result # for the match clause, or it'll return nil if nothing matches the match clause ** Processing line: ~ found = args.state.items.find do |item|~ - Inside source: true *** True Line Result found = args.state.items.find do |item| ** Processing line: ~ # for each item in args.state.items, run the following boolean check~ - Inside source: true *** True Line Result # for each item in args.state.items, run the following boolean check ** Processing line: ~ args.inputs.mouse.click.point.inside_rect?(item)~ - Inside source: true *** True Line Result args.inputs.mouse.click.point.inside_rect?(item) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if an item intersects the mouse pointer, then set the item's location to :held and~ - Inside source: true *** True Line Result # if an item intersects the mouse pointer, then set the item's location to :held and ** Processing line: ~ # set args.state.held_item to the item for later reference~ - Inside source: true *** True Line Result # set args.state.held_item to the item for later reference ** Processing line: ~ if found~ - Inside source: true *** True Line Result if found ** Processing line: ~ args.state.held_item = found~ - Inside source: true *** True Line Result args.state.held_item = found ** Processing line: ~ found[:location] = :held~ - Inside source: true *** True Line Result found[:location] = :held ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the mouse is clicked and an item is currently beign held....~ - Inside source: true *** True Line Result # if the mouse is clicked and an item is currently beign held.... ** Processing line: ~ elsif args.state.held_item~ - Inside source: true *** True Line Result elsif args.state.held_item ** Processing line: ~ # determine if a slot within the craft area was clicked~ - Inside source: true *** True Line Result # determine if a slot within the craft area was clicked ** Processing line: ~ craft_area = args.state.craft_area.find { |a| args.inputs.mouse.click.point.inside_rect? a }~ - Inside source: true *** True Line Result craft_area = args.state.craft_area.find { |a| args.inputs.mouse.click.point.inside_rect? a } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # also determine if a slot within the inventory area was clicked~ - Inside source: true *** True Line Result # also determine if a slot within the inventory area was clicked ** Processing line: ~ inventory_area = args.state.inventory_area.find { |a| args.inputs.mouse.click.point.inside_rect? a }~ - Inside source: true *** True Line Result inventory_area = args.state.inventory_area.find { |a| args.inputs.mouse.click.point.inside_rect? a } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the click was within a craft area~ - Inside source: true *** True Line Result # if the click was within a craft area ** Processing line: ~ if craft_area~ - Inside source: true *** True Line Result if craft_area ** Processing line: ~ # check to see if an item is already there and ignore the click if an item is found~ - Inside source: true *** True Line Result # check to see if an item is already there and ignore the click if an item is found ** Processing line: ~ # item_at_craft_slot is a helper method that returns an item or nil for a given oridinal~ - Inside source: true *** True Line Result # item_at_craft_slot is a helper method that returns an item or nil for a given oridinal ** Processing line: ~ # position~ - Inside source: true *** True Line Result # position ** Processing line: ~ item_already_there = item_at_craft_slot args, craft_area[:ordinal_x], craft_area[:ordinal_y]~ - Inside source: true *** True Line Result item_already_there = item_at_craft_slot args, craft_area[:ordinal_x], craft_area[:ordinal_y] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if an item *doesn't* exist in the craft area~ - Inside source: true *** True Line Result # if an item *doesn't* exist in the craft area ** Processing line: ~ if !item_already_there~ - Inside source: true *** True Line Result if !item_already_there ** Processing line: ~ # if the quantity they are currently holding is greater than 1~ - Inside source: true *** True Line Result # if the quantity they are currently holding is greater than 1 ** Processing line: ~ if args.state.held_item[:quantity] > 1~ - Inside source: true *** True Line Result if args.state.held_item[:quantity] > 1 ** Processing line: ~ # remove one item (creating a seperate item of the same type), and place it~ - Inside source: true *** True Line Result # remove one item (creating a seperate item of the same type), and place it ** Processing line: ~ # at the oridinal position and location of the craft area~ - Inside source: true *** True Line Result # at the oridinal position and location of the craft area ** Processing line: ~ # the .merge method on Hash creates a new Hash, but updates any values~ - Inside source: true *** True Line Result # the .merge method on Hash creates a new Hash, but updates any values ** Processing line: ~ # passed as arguments to merge~ - Inside source: true *** True Line Result # passed as arguments to merge ** Processing line: ~ new_item = args.state.held_item.merge(quantity: 1,~ - Inside source: true *** True Line Result new_item = args.state.held_item.merge(quantity: 1, ** Processing line: ~ location: :craft,~ - Inside source: true *** True Line Result location: :craft, ** Processing line: ~ ordinal_x: craft_area[:ordinal_x],~ - Inside source: true *** True Line Result ordinal_x: craft_area[:ordinal_x], ** Processing line: ~ ordinal_y: craft_area[:ordinal_y])~ - Inside source: true *** True Line Result ordinal_y: craft_area[:ordinal_y]) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # after the item is crated, place it into the args.state.items collection~ - Inside source: true *** True Line Result # after the item is crated, place it into the args.state.items collection ** Processing line: ~ args.state.items << new_item~ - Inside source: true *** True Line Result args.state.items << new_item ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # then subtract one from the held item~ - Inside source: true *** True Line Result # then subtract one from the held item ** Processing line: ~ args.state.held_item[:quantity] -= 1~ - Inside source: true *** True Line Result args.state.held_item[:quantity] -= 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the craft area is available and there is only one item being held~ - Inside source: true *** True Line Result # if the craft area is available and there is only one item being held ** Processing line: ~ elsif args.state.held_item[:quantity] == 1~ - Inside source: true *** True Line Result elsif args.state.held_item[:quantity] == 1 ** Processing line: ~ # instead of creating any new items just set the location of the held item~ - Inside source: true *** True Line Result # instead of creating any new items just set the location of the held item ** Processing line: ~ # to the oridinal position of the craft area, and then nil out the~ - Inside source: true *** True Line Result # to the oridinal position of the craft area, and then nil out the ** Processing line: ~ # held item state so that a new item can be picked up~ - Inside source: true *** True Line Result # held item state so that a new item can be picked up ** Processing line: ~ args.state.held_item[:location] = :craft~ - Inside source: true *** True Line Result args.state.held_item[:location] = :craft ** Processing line: ~ args.state.held_item[:ordinal_x] = craft_area[:ordinal_x]~ - Inside source: true *** True Line Result args.state.held_item[:ordinal_x] = craft_area[:ordinal_x] ** Processing line: ~ args.state.held_item[:ordinal_y] = craft_area[:ordinal_y]~ - Inside source: true *** True Line Result args.state.held_item[:ordinal_y] = craft_area[:ordinal_y] ** Processing line: ~ args.state.held_item = nil~ - Inside source: true *** True Line Result args.state.held_item = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the selected area is an inventory area (as opposed to within the craft area)~ - Inside source: true *** True Line Result # if the selected area is an inventory area (as opposed to within the craft area) ** Processing line: ~ elsif inventory_area~ - Inside source: true *** True Line Result elsif inventory_area ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # check to see if there is already an item in that inventory slot~ - Inside source: true *** True Line Result # check to see if there is already an item in that inventory slot ** Processing line: ~ # the item_at_inventory_slot helper method returns an item or nil~ - Inside source: true *** True Line Result # the item_at_inventory_slot helper method returns an item or nil ** Processing line: ~ item_already_there = item_at_inventory_slot args, inventory_area[:ordinal_x], inventory_area[:ordinal_y]~ - Inside source: true *** True Line Result item_already_there = item_at_inventory_slot args, inventory_area[:ordinal_x], inventory_area[:ordinal_y] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if there is already an item there, and the item types/id match~ - Inside source: true *** True Line Result # if there is already an item there, and the item types/id match ** Processing line: ~ if item_already_there && item_already_there[:id] == args.state.held_item[:id]~ - Inside source: true *** True Line Result if item_already_there && item_already_there[:id] == args.state.held_item[:id] ** Processing line: ~ # then merge the item quantities~ - Inside source: true *** True Line Result # then merge the item quantities ** Processing line: ~ held_quantity = args.state.held_item[:quantity]~ - Inside source: true *** True Line Result held_quantity = args.state.held_item[:quantity] ** Processing line: ~ item_already_there[:quantity] += held_quantity~ - Inside source: true *** True Line Result item_already_there[:quantity] += held_quantity ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # remove the item being held from the items collection (since it's quantity is now 0)~ - Inside source: true *** True Line Result # remove the item being held from the items collection (since it's quantity is now 0) ** Processing line: ~ args.state.items.reject! { |i| i[:location] == :held }~ - Inside source: true *** True Line Result args.state.items.reject! { |i| i[:location] == :held } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # nil out the held_item so a new item can be picked up~ - Inside source: true *** True Line Result # nil out the held_item so a new item can be picked up ** Processing line: ~ args.state.held_item = nil~ - Inside source: true *** True Line Result args.state.held_item = nil ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if there currently isn't an item there, then put the held item in the slot~ - Inside source: true *** True Line Result # if there currently isn't an item there, then put the held item in the slot ** Processing line: ~ elsif !item_already_there~ - Inside source: true *** True Line Result elsif !item_already_there ** Processing line: ~ args.state.held_item[:location] = :inventory~ - Inside source: true *** True Line Result args.state.held_item[:location] = :inventory ** Processing line: ~ args.state.held_item[:ordinal_x] = inventory_area[:ordinal_x]~ - Inside source: true *** True Line Result args.state.held_item[:ordinal_x] = inventory_area[:ordinal_x] ** Processing line: ~ args.state.held_item[:ordinal_y] = inventory_area[:ordinal_y]~ - Inside source: true *** True Line Result args.state.held_item[:ordinal_y] = inventory_area[:ordinal_y] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # nil out the held_item so a new item can be picked up~ - Inside source: true *** True Line Result # nil out the held_item so a new item can be picked up ** Processing line: ~ args.state.held_item = nil~ - Inside source: true *** True Line Result args.state.held_item = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # the calc method is executed after input~ - Inside source: true *** True Line Result # the calc method is executed after input ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ # make sure that the real position of the inventory~ - Inside source: true *** True Line Result # make sure that the real position of the inventory ** Processing line: ~ # items are updated every frame to ensure that they~ - Inside source: true *** True Line Result # items are updated every frame to ensure that they ** Processing line: ~ # are placed correctly given their location and oridinal positions~ - Inside source: true *** True Line Result # are placed correctly given their location and oridinal positions ** Processing line: ~ # instead of using .map, here we use .each (since we are not returning a new item and just updating the items in place)~ - Inside source: true *** True Line Result # instead of using .map, here we use .each (since we are not returning a new item and just updating the items in place) ** Processing line: ~ args.state.items.each do |item|~ - Inside source: true *** True Line Result args.state.items.each do |item| ** Processing line: ~ # based on the location of the item, invoke the correct pixel conversion method~ - Inside source: true *** True Line Result # based on the location of the item, invoke the correct pixel conversion method ** Processing line: ~ if item[:location] == :inventory~ - Inside source: true *** True Line Result if item[:location] == :inventory ** Processing line: ~ set_inventory_position args, item~ - Inside source: true *** True Line Result set_inventory_position args, item ** Processing line: ~ elsif item[:location] == :craft~ - Inside source: true *** True Line Result elsif item[:location] == :craft ** Processing line: ~ set_craft_position args, item~ - Inside source: true *** True Line Result set_craft_position args, item ** Processing line: ~ elsif item[:location] == :held~ - Inside source: true *** True Line Result elsif item[:location] == :held ** Processing line: ~ # if the item is held, center the item around the mouse pointer~ - Inside source: true *** True Line Result # if the item is held, center the item around the mouse pointer ** Processing line: ~ args.state.held_item.x = args.inputs.mouse.x - args.state.held_item.w.half~ - Inside source: true *** True Line Result args.state.held_item.x = args.inputs.mouse.x - args.state.held_item.w.half ** Processing line: ~ args.state.held_item.y = args.inputs.mouse.y - args.state.held_item.h.half~ - Inside source: true *** True Line Result args.state.held_item.y = args.inputs.mouse.y - args.state.held_item.h.half ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # for each hash/sprite in the click ripples queue,~ - Inside source: true *** True Line Result # for each hash/sprite in the click ripples queue, ** Processing line: ~ # expand its size by 20 percent and decrease its alpha~ - Inside source: true *** True Line Result # expand its size by 20 percent and decrease its alpha ** Processing line: ~ # by 10.~ - Inside source: true *** True Line Result # by 10. ** Processing line: ~ args.state.click_ripples.each do |ripple|~ - Inside source: true *** True Line Result args.state.click_ripples.each do |ripple| ** Processing line: ~ delta_w = ripple.w * 1.2 - ripple.w~ - Inside source: true *** True Line Result delta_w = ripple.w * 1.2 - ripple.w ** Processing line: ~ delta_h = ripple.h * 1.2 - ripple.h~ - Inside source: true *** True Line Result delta_h = ripple.h * 1.2 - ripple.h ** Processing line: ~ ripple.x -= delta_w.half~ - Inside source: true *** True Line Result ripple.x -= delta_w.half ** Processing line: ~ ripple.y -= delta_h.half~ - Inside source: true *** True Line Result ripple.y -= delta_h.half ** Processing line: ~ ripple.w += delta_w~ - Inside source: true *** True Line Result ripple.w += delta_w ** Processing line: ~ ripple.h += delta_h~ - Inside source: true *** True Line Result ripple.h += delta_h ** Processing line: ~ ripple.a -= 10~ - Inside source: true *** True Line Result ripple.a -= 10 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # remove any items from the collection where the alpha value is less than equal to~ - Inside source: true *** True Line Result # remove any items from the collection where the alpha value is less than equal to ** Processing line: ~ # zero using the reject! method (reject with an exclamation point at the end changes the~ - Inside source: true *** True Line Result # zero using the reject! method (reject with an exclamation point at the end changes the ** Processing line: ~ # array value in place, while reject without the exclamation point returns a new array).~ - Inside source: true *** True Line Result # array value in place, while reject without the exclamation point returns a new array). ** Processing line: ~ args.state.click_ripples.reject! { |ripple| ripple.a <= 0 }~ - Inside source: true *** True Line Result args.state.click_ripples.reject! { |ripple| ripple.a <= 0 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # helper function for finding an item at a craft slot~ - Inside source: true *** True Line Result # helper function for finding an item at a craft slot ** Processing line: ~ def item_at_craft_slot args, ordinal_x, ordinal_y~ - Inside source: true *** True Line Result def item_at_craft_slot args, ordinal_x, ordinal_y ** Processing line: ~ args.state.items.find { |i| i[:location] == :craft && i[:ordinal_x] == ordinal_x && i[:ordinal_y] == ordinal_y }~ - Inside source: true *** True Line Result args.state.items.find { |i| i[:location] == :craft && i[:ordinal_x] == ordinal_x && i[:ordinal_y] == ordinal_y } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # helper function for finding an item at an inventory slot~ - Inside source: true *** True Line Result # helper function for finding an item at an inventory slot ** Processing line: ~ def item_at_inventory_slot args, ordinal_x, ordinal_y~ - Inside source: true *** True Line Result def item_at_inventory_slot args, ordinal_x, ordinal_y ** Processing line: ~ args.state.items.find { |i| i[:location] == :inventory && i[:ordinal_x] == ordinal_x && i[:ordinal_y] == ordinal_y }~ - Inside source: true *** True Line Result args.state.items.find { |i| i[:location] == :inventory && i[:ordinal_x] == ordinal_x && i[:ordinal_y] == ordinal_y } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # helper function that creates a visual representation of an item~ - Inside source: true *** True Line Result # helper function that creates a visual representation of an item ** Processing line: ~ def item_prefab args, item, should_highlight, mouse~ - Inside source: true *** True Line Result def item_prefab args, item, should_highlight, mouse ** Processing line: ~ return nil unless item~ - Inside source: true *** True Line Result return nil unless item ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ overlay = nil~ - Inside source: true *** True Line Result overlay = nil ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ x = item.x~ - Inside source: true *** True Line Result x = item.x ** Processing line: ~ y = item.y~ - Inside source: true *** True Line Result y = item.y ** Processing line: ~ w = item.w~ - Inside source: true *** True Line Result w = item.w ** Processing line: ~ h = item.h~ - Inside source: true *** True Line Result h = item.h ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if should_highlight && mouse.point.inside_rect?(item)~ - Inside source: true *** True Line Result if should_highlight && mouse.point.inside_rect?(item) ** Processing line: ~ overlay = { x: x, y: y, w: w, h: h, path: "sprites/square-blue.png", a: 130, }~ - Inside source: true *** True Line Result overlay = { x: x, y: y, w: w, h: h, path: "sprites/square-blue.png", a: 130, } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ # sprites are hashes with a path property, this is the main sprite~ - Inside source: true *** True Line Result # sprites are hashes with a path property, this is the main sprite ** Processing line: ~ { x: x, y: y, w: args.state.sprite_size, h: args.state.sprite_size, path: item[:path], },~ - Inside source: true *** True Line Result { x: x, y: y, w: args.state.sprite_size, h: args.state.sprite_size, path: item[:path], }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # this represents the black area in the bottom right corner of the main sprite so that the~ - Inside source: true *** True Line Result # this represents the black area in the bottom right corner of the main sprite so that the ** Processing line: ~ # quantity is visible~ - Inside source: true *** True Line Result # quantity is visible ** Processing line: ~ { x: x + 55, y: y, w: 25, h: 25, path: "sprites/square-black.png", }, # sprites are hashes with a path property~ - Inside source: true *** True Line Result { x: x + 55, y: y, w: 25, h: 25, path: "sprites/square-black.png", }, # sprites are hashes with a path property ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # labels are hashes with a text property~ - Inside source: true *** True Line Result # labels are hashes with a text property ** Processing line: ~ { x: x + 56, y: y + 22, text: "#{item[:quantity]}", r: 255, g: 255, b: 255, },~ - Inside source: true *** True Line Result { x: x + 56, y: y + 22, text: "#{item[:quantity]}", r: 255, g: 255, b: 255, }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # this is the mouse overlay, if the overlay isn't applicable, then this value will be nil (nil values will not be rendered)~ - Inside source: true *** True Line Result # this is the mouse overlay, if the overlay isn't applicable, then this value will be nil (nil values will not be rendered) ** Processing line: ~ overlay~ - Inside source: true *** True Line Result overlay ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # helper function for deriving the position of an item within inventory~ - Inside source: true *** True Line Result # helper function for deriving the position of an item within inventory ** Processing line: ~ def set_inventory_position args, item~ - Inside source: true *** True Line Result def set_inventory_position args, item ** Processing line: ~ item.x = args.state.inventory_border.x + item[:ordinal_x] * 80~ - Inside source: true *** True Line Result item.x = args.state.inventory_border.x + item[:ordinal_x] * 80 ** Processing line: ~ item.y = (args.state.inventory_border.y + args.state.inventory_border.h - 80) - item[:ordinal_y] * 80~ - Inside source: true *** True Line Result item.y = (args.state.inventory_border.y + args.state.inventory_border.h - 80) - item[:ordinal_y] * 80 ** Processing line: ~ item.w = 80~ - Inside source: true *** True Line Result item.w = 80 ** Processing line: ~ item.h = 80~ - Inside source: true *** True Line Result item.h = 80 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # helper function for deriving the position of an item within the craft area~ - Inside source: true *** True Line Result # helper function for deriving the position of an item within the craft area ** Processing line: ~ def set_craft_position args, item~ - Inside source: true *** True Line Result def set_craft_position args, item ** Processing line: ~ item.x = args.state.craft_border.x + item[:ordinal_x] * 80~ - Inside source: true *** True Line Result item.x = args.state.craft_border.x + item[:ordinal_x] * 80 ** Processing line: ~ item.y = (args.state.craft_border.y + args.state.inventory_border.h - 80) - item[:ordinal_y] * 80~ - Inside source: true *** True Line Result item.y = (args.state.craft_border.y + args.state.inventory_border.h - 80) - item[:ordinal_y] * 80 ** Processing line: ~ item.w = 80~ - Inside source: true *** True Line Result item.w = 80 ** Processing line: ~ item.h = 80~ - Inside source: true *** True Line Result item.h = 80 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Any lines outside of a function will be executed when the file is reloaded.~ - Inside source: true *** True Line Result # Any lines outside of a function will be executed when the file is reloaded. ** Processing line: ~ # So every time you save main.rb, the game will be reset.~ - Inside source: true *** True Line Result # So every time you save main.rb, the game will be reset. ** Processing line: ~ # Comment out the line below if you don't want this to happen.~ - Inside source: true *** True Line Result # Comment out the line below if you don't want this to happen. ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Crafting - Farming Game Starting Point - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Crafting - Farming Game Starting Point - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_crafting/farming_game_starting_point/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_crafting/farming_game_starting_point/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.tile_size = 80~ - Inside source: true *** True Line Result args.state.tile_size = 80 ** Processing line: ~ args.state.player_speed = 4~ - Inside source: true *** True Line Result args.state.player_speed = 4 ** Processing line: ~ args.state.player ||= tile(args, 7, 3, 0, 128, 180)~ - Inside source: true *** True Line Result args.state.player ||= tile(args, 7, 3, 0, 128, 180) ** Processing line: ~ generate_map args~ - Inside source: true *** True Line Result generate_map args ** Processing line: ~ #press j to plant a green onion~ - Inside source: true *** True Line Result #press j to plant a green onion ** Processing line: ~ if args.inputs.keyboard.j~ - Inside source: true *** True Line Result if args.inputs.keyboard.j ** Processing line: ~ #change this part you can change what you want to plant~ - Inside source: true *** True Line Result #change this part you can change what you want to plant ** Processing line: ~ args.state.walls << tile(args, ((args.state.player.x+80)/args.state.tile_size), ((args.state.player.y)/args.state.tile_size), 255, 255, 255)~ - Inside source: true *** True Line Result args.state.walls << tile(args, ((args.state.player.x+80)/args.state.tile_size), ((args.state.player.y)/args.state.tile_size), 255, 255, 255) ** Processing line: ~ args.state.plants << tile(args, ((args.state.player.x+80)/args.state.tile_size), ((args.state.player.y+80)/args.state.tile_size), 0, 160, 0)~ - Inside source: true *** True Line Result args.state.plants << tile(args, ((args.state.player.x+80)/args.state.tile_size), ((args.state.player.y+80)/args.state.tile_size), 0, 160, 0) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ # Adds walls, background, and player to args.outputs.solids so they appear on screen~ - Inside source: true *** True Line Result # Adds walls, background, and player to args.outputs.solids so they appear on screen ** Processing line: ~ args.outputs.solids << [0,0,1280,720, 237,189,101]~ - Inside source: true *** True Line Result args.outputs.solids << [0,0,1280,720, 237,189,101] ** Processing line: ~ args.outputs.sprites << [0, 0, 1280, 720, 'sprites/background.png']~ - Inside source: true *** True Line Result args.outputs.sprites << [0, 0, 1280, 720, 'sprites/background.png'] ** Processing line: ~ args.outputs.solids << args.state.walls~ - Inside source: true *** True Line Result args.outputs.solids << args.state.walls ** Processing line: ~ args.outputs.solids << args.state.player~ - Inside source: true *** True Line Result args.outputs.solids << args.state.player ** Processing line: ~ args.outputs.solids << args.state.plants~ - Inside source: true *** True Line Result args.outputs.solids << args.state.plants ** Processing line: ~ args.outputs.labels << [320, 640, "press J to plant", 3, 1, 255, 0, 0, 200]~ - Inside source: true *** True Line Result args.outputs.labels << [320, 640, "press J to plant", 3, 1, 255, 0, 0, 200] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ move_player args, -1, 0 if args.inputs.keyboard.left # x position decreases by 1 if left key is pressed~ - Inside source: true *** True Line Result move_player args, -1, 0 if args.inputs.keyboard.left # x position decreases by 1 if left key is pressed ** Processing line: ~ move_player args, 1, 0 if args.inputs.keyboard.right # x position increases by 1 if right key is pressed~ - Inside source: true *** True Line Result move_player args, 1, 0 if args.inputs.keyboard.right # x position increases by 1 if right key is pressed ** Processing line: ~ move_player args, 0, 1 if args.inputs.keyboard.up # y position increases by 1 if up is pressed~ - Inside source: true *** True Line Result move_player args, 0, 1 if args.inputs.keyboard.up # y position increases by 1 if up is pressed ** Processing line: ~ move_player args, 0, -1 if args.inputs.keyboard.down # y position decreases by 1 if down is pressed~ - Inside source: true *** True Line Result move_player args, 0, -1 if args.inputs.keyboard.down # y position decreases by 1 if down is pressed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets position, size, and color of the tile~ - Inside source: true *** True Line Result # Sets position, size, and color of the tile ** Processing line: ~ def tile args, x, y, *color~ - Inside source: true *** True Line Result def tile args, x, y, *color ** Processing line: ~ [x * args.state.tile_size, # sets definition for array using method parameters~ - Inside source: true *** True Line Result [x * args.state.tile_size, # sets definition for array using method parameters ** Processing line: ~ y * args.state.tile_size, # multiplying by tile_size sets x and y to correct position using pixel values~ - Inside source: true *** True Line Result y * args.state.tile_size, # multiplying by tile_size sets x and y to correct position using pixel values ** Processing line: ~ args.state.tile_size,~ - Inside source: true *** True Line Result args.state.tile_size, ** Processing line: ~ args.state.tile_size,~ - Inside source: true *** True Line Result args.state.tile_size, ** Processing line: ~ *color]~ - Inside source: true *** True Line Result *color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates map by adding tiles to the wall, as well as a goal (that the player needs to reach)~ - Inside source: true *** True Line Result # Creates map by adding tiles to the wall, as well as a goal (that the player needs to reach) ** Processing line: ~ def generate_map args~ - Inside source: true *** True Line Result def generate_map args ** Processing line: ~ return if args.state.area~ - Inside source: true *** True Line Result return if args.state.area ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates the area of the map. There are 9 rows running horizontally across the screen~ - Inside source: true *** True Line Result # Creates the area of the map. There are 9 rows running horizontally across the screen ** Processing line: ~ # and 16 columns running vertically on the screen. Any spot with a "1" is not~ - Inside source: true *** True Line Result # and 16 columns running vertically on the screen. Any spot with a "1" is not ** Processing line: ~ # open for the player to move into (and is green), and any spot with a "0" is available~ - Inside source: true *** True Line Result # open for the player to move into (and is green), and any spot with a "0" is available ** Processing line: ~ # for the player to move in.~ - Inside source: true *** True Line Result # for the player to move in. ** Processing line: ~ args.state.area = [~ - Inside source: true *** True Line Result args.state.area = [ ** Processing line: ~ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,],~ - Inside source: true *** True Line Result [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,], ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,],~ - Inside source: true *** True Line Result [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,], ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,],~ - Inside source: true *** True Line Result [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,], ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,],~ - Inside source: true *** True Line Result [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,], ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,],~ - Inside source: true *** True Line Result [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,], ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,],~ - Inside source: true *** True Line Result [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,], ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,],~ - Inside source: true *** True Line Result [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,], ** Processing line: ~ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,],~ - Inside source: true *** True Line Result [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,], ** Processing line: ~ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],~ - Inside source: true *** True Line Result [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], ** Processing line: ~ ].reverse # reverses the order of the area collection~ - Inside source: true *** True Line Result ].reverse # reverses the order of the area collection ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # By reversing the order, the way that the area appears above is how it appears~ - Inside source: true *** True Line Result # By reversing the order, the way that the area appears above is how it appears ** Processing line: ~ # on the screen in the game. If we did not reverse, the map would appear inverted.~ - Inside source: true *** True Line Result # on the screen in the game. If we did not reverse, the map would appear inverted. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #The wall starts off with no tiles.~ - Inside source: true *** True Line Result #The wall starts off with no tiles. ** Processing line: ~ args.state.walls = []~ - Inside source: true *** True Line Result args.state.walls = [] ** Processing line: ~ args.state.plants = []~ - Inside source: true *** True Line Result args.state.plants = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If v is 1, a green tile is added to args.state.walls.~ - Inside source: true *** True Line Result # If v is 1, a green tile is added to args.state.walls. ** Processing line: ~ # If v is 2, a black tile is created as the goal.~ - Inside source: true *** True Line Result # If v is 2, a black tile is created as the goal. ** Processing line: ~ args.state.area.map_2d do |y, x, v|~ - Inside source: true *** True Line Result args.state.area.map_2d do |y, x, v| ** Processing line: ~ if v == 1~ - Inside source: true *** True Line Result if v == 1 ** Processing line: ~ args.state.walls << tile(args, x, y, 255, 160, 156) # green tile~ - Inside source: true *** True Line Result args.state.walls << tile(args, x, y, 255, 160, 156) # green tile ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Allows the player to move their box around the screen~ - Inside source: true *** True Line Result # Allows the player to move their box around the screen ** Processing line: ~ def move_player args, *vector~ - Inside source: true *** True Line Result def move_player args, *vector ** Processing line: ~ box = args.state.player.shift_rect(vector) # box is able to move at an angle~ - Inside source: true *** True Line Result box = args.state.player.shift_rect(vector) # box is able to move at an angle ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the player's box hits a wall, it is not able to move further in that direction~ - Inside source: true *** True Line Result # If the player's box hits a wall, it is not able to move further in that direction ** Processing line: ~ return if args.state.walls~ - Inside source: true *** True Line Result return if args.state.walls ** Processing line: ~ .any_intersect_rect?(box)~ - Inside source: true *** True Line Result .any_intersect_rect?(box) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Player's box is able to move at angles (not just the four general directions) fast~ - Inside source: true *** True Line Result # Player's box is able to move at angles (not just the four general directions) fast ** Processing line: ~ args.state.player =~ - Inside source: true *** True Line Result args.state.player = ** Processing line: ~ args.state.player~ - Inside source: true *** True Line Result args.state.player ** Processing line: ~ .shift_rect(vector.x * args.state.player_speed, # if we don't multiply by speed, then~ - Inside source: true *** True Line Result .shift_rect(vector.x * args.state.player_speed, # if we don't multiply by speed, then ** Processing line: ~ vector.y * args.state.player_speed) # the box will move extremely slow~ - Inside source: true *** True Line Result vector.y * args.state.player_speed) # the box will move extremely slow ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Crafting - Farming Game Starting Point - tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Crafting - Farming Game Starting Point - tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_crafting/farming_game_starting_point/app/tests.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_crafting/farming_game_starting_point/app/tests.rb ** Processing line: ~ # For advanced users:~ - Inside source: true *** True Line Result # For advanced users: ** Processing line: ~ # You can put some quick verification tests here, any method~ - Inside source: true *** True Line Result # You can put some quick verification tests here, any method ** Processing line: ~ # that starts with the `test_` will be run when you save this file.~ - Inside source: true *** True Line Result # that starts with the `test_` will be run when you save this file. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Here is an example test and game~ - Inside source: true *** True Line Result # Here is an example test and game ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # To run the test: ./dragonruby mygame --eval app/tests.rb --no-tick~ - Inside source: true *** True Line Result # To run the test: ./dragonruby mygame --eval app/tests.rb --no-tick ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class MySuperHappyFunGame~ - Inside source: true *** True Line Result class MySuperHappyFunGame ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ outputs.solids << [100, 100, 300, 300]~ - Inside source: true *** True Line Result outputs.solids << [100, 100, 300, 300] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_universe args, assert~ - Inside source: true *** True Line Result def test_universe args, assert ** Processing line: ~ game = MySuperHappyFunGame.new~ - Inside source: true *** True Line Result game = MySuperHappyFunGame.new ** Processing line: ~ game.args = args~ - Inside source: true *** True Line Result game.args = args ** Processing line: ~ game.tick~ - Inside source: true *** True Line Result game.tick ** Processing line: ~ assert.true! args.outputs.solids.length == 1, "failure: a solid was not added after tick"~ - Inside source: true *** True Line Result assert.true! args.outputs.solids.length == 1, "failure: a solid was not added after tick" ** Processing line: ~ assert.false! 1 == 2, "failure: some how, 1 equals 2, the world is ending"~ - Inside source: true *** True Line Result assert.false! 1 == 2, "failure: some how, 1 equals 2, the world is ending" ** Processing line: ~ puts "test_universe completed successfully"~ - Inside source: true *** True Line Result puts "test_universe completed successfully" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts "running tests"~ - Inside source: true *** True Line Result puts "running tests" ** Processing line: ~ $gtk.reset 100~ - Inside source: true *** True Line Result $gtk.reset 100 ** Processing line: ~ $gtk.log_level = :off~ - Inside source: true *** True Line Result $gtk.log_level = :off ** Processing line: ~ $gtk.tests.start~ - Inside source: true *** True Line Result $gtk.tests.start ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Dev Tools - Add Buttons To Console - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Dev Tools - Add Buttons To Console - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_dev_tools/add_buttons_to_console/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_dev_tools/add_buttons_to_console/app/main.rb ** Processing line: ~ # You can customize the buttons that show up in the Console.~ - Inside source: true *** True Line Result # You can customize the buttons that show up in the Console. ** Processing line: ~ class GTK::Console::Menu~ - Inside source: true *** True Line Result class GTK::Console::Menu ** Processing line: ~ # STEP 1: Override the custom_buttons function.~ - Inside source: true *** True Line Result # STEP 1: Override the custom_buttons function. ** Processing line: ~ def custom_buttons~ - Inside source: true *** True Line Result def custom_buttons ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ (button id: :yay,~ - Inside source: true *** True Line Result (button id: :yay, ** Processing line: ~ # row for button~ - Inside source: true *** True Line Result # row for button ** Processing line: ~ row: 3,~ - Inside source: true *** True Line Result row: 3, ** Processing line: ~ # column for button~ - Inside source: true *** True Line Result # column for button ** Processing line: ~ col: 10,~ - Inside source: true *** True Line Result col: 10, ** Processing line: ~ # text~ - Inside source: true *** True Line Result # text ** Processing line: ~ text: "I AM CUSTOM",~ - Inside source: true *** True Line Result text: "I AM CUSTOM", ** Processing line: ~ # when clicked call the custom_button_clicked function~ - Inside source: true *** True Line Result # when clicked call the custom_button_clicked function ** Processing line: ~ method: :custom_button_clicked),~ - Inside source: true *** True Line Result method: :custom_button_clicked), ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ (button id: :yay,~ - Inside source: true *** True Line Result (button id: :yay, ** Processing line: ~ # row for button~ - Inside source: true *** True Line Result # row for button ** Processing line: ~ row: 3,~ - Inside source: true *** True Line Result row: 3, ** Processing line: ~ # column for button~ - Inside source: true *** True Line Result # column for button ** Processing line: ~ col: 9,~ - Inside source: true *** True Line Result col: 9, ** Processing line: ~ # text~ - Inside source: true *** True Line Result # text ** Processing line: ~ text: "CUSTOM ALSO",~ - Inside source: true *** True Line Result text: "CUSTOM ALSO", ** Processing line: ~ # when clicked call the custom_button_also_clicked function~ - Inside source: true *** True Line Result # when clicked call the custom_button_also_clicked function ** Processing line: ~ method: :custom_button_also_clicked)~ - Inside source: true *** True Line Result method: :custom_button_also_clicked) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # STEP 2: Define the function that should be called.~ - Inside source: true *** True Line Result # STEP 2: Define the function that should be called. ** Processing line: ~ def custom_button_clicked~ - Inside source: true *** True Line Result def custom_button_clicked ** Processing line: ~ log "* INFO: I AM CUSTOM was clicked!"~ - Inside source: true *** True Line Result log "* INFO: I AM CUSTOM was clicked!" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def custom_button_also_clicked~ - Inside source: true *** True Line Result def custom_button_also_clicked ** Processing line: ~ log "* INFO: Custom Button Clicked at #{Kernel.global_tick_count}!"~ - Inside source: true *** True Line Result log "* INFO: Custom Button Clicked at #{Kernel.global_tick_count}!" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ all_buttons_as_string = $gtk.console.menu.buttons.map do |b|~ - Inside source: true *** True Line Result all_buttons_as_string = $gtk.console.menu.buttons.map do |b| ** Processing line: ~ <<-S.strip~ - Inside source: true *** True Line Result <<-S.strip ** Processing line: ~ ** id: #{b[:id]}~ - Inside source: true *** True Line Result ** id: #{b[:id]} ** Processing line: ~ :PROPERTIES:~ - Inside source: true *** True Line Result :PROPERTIES: ** Processing line: ~ :id: :#{b[:id]}~ - Inside source: true *** True Line Result :id: :#{b[:id]} ** Processing line: ~ :method: :#{b[:method]}~ - Inside source: true *** True Line Result :method: :#{b[:method]} ** Processing line: ~ :text: #{b[:text]}~ - Inside source: true *** True Line Result :text: #{b[:text]} ** Processing line: ~ :END:~ - Inside source: true *** True Line Result :END: ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end.join("\n")~ - Inside source: true *** True Line Result end.join("\n") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ log <<-S~ - Inside source: true *** True Line Result log <<-S ** Processing line: ~ * INFO: Here are all the buttons:~ - Inside source: true *** True Line Result * INFO: Here are all the buttons: ** Processing line: ~ #{all_buttons_as_string}~ - Inside source: true *** True Line Result #{all_buttons_as_string} ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.labels << [args.grid.center.x, args.grid.center.y,~ - Inside source: true *** True Line Result args.outputs.labels << [args.grid.center.x, args.grid.center.y, ** Processing line: ~ "Open the DragonRuby Console to see the custom menu items.",~ - Inside source: true *** True Line Result "Open the DragonRuby Console to see the custom menu items.", ** Processing line: ~ 0, 1]~ - Inside source: true *** True Line Result 0, 1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Dev Tools - Animation Creator Starting Point - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Dev Tools - Animation Creator Starting Point - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_dev_tools/animation_creator_starting_point/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_dev_tools/animation_creator_starting_point/app/main.rb ** Processing line: ~ class OneBitLowrezPaint~ - Inside source: true *** True Line Result class OneBitLowrezPaint ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result outputs.background_color = [0, 0, 0] ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render_instructions~ - Inside source: true *** True Line Result render_instructions ** Processing line: ~ render_canvas~ - Inside source: true *** True Line Result render_canvas ** Processing line: ~ render_buttons_frame_selection~ - Inside source: true *** True Line Result render_buttons_frame_selection ** Processing line: ~ render_animation_frame_thumbnails~ - Inside source: true *** True Line Result render_animation_frame_thumbnails ** Processing line: ~ render_animation~ - Inside source: true *** True Line Result render_animation ** Processing line: ~ input_mouse_click~ - Inside source: true *** True Line Result input_mouse_click ** Processing line: ~ input_keyboard~ - Inside source: true *** True Line Result input_keyboard ** Processing line: ~ calc_auto_export~ - Inside source: true *** True Line Result calc_auto_export ** Processing line: ~ calc_buttons_frame_selection~ - Inside source: true *** True Line Result calc_buttons_frame_selection ** Processing line: ~ calc_animation_frames~ - Inside source: true *** True Line Result calc_animation_frames ** Processing line: ~ process_queue_create_sprite~ - Inside source: true *** True Line Result process_queue_create_sprite ** Processing line: ~ process_queue_reset_sprite~ - Inside source: true *** True Line Result process_queue_reset_sprite ** Processing line: ~ process_queue_update_rt_animation_frame~ - Inside source: true *** True Line Result process_queue_update_rt_animation_frame ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ state.animation_frames_per_second = 12~ - Inside source: true *** True Line Result state.animation_frames_per_second = 12 ** Processing line: ~ queues.create_sprite ||= []~ - Inside source: true *** True Line Result queues.create_sprite ||= [] ** Processing line: ~ queues.reset_sprite ||= []~ - Inside source: true *** True Line Result queues.reset_sprite ||= [] ** Processing line: ~ queues.update_rt_animation_frame ||= []~ - Inside source: true *** True Line Result queues.update_rt_animation_frame ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !state.animation_frames~ - Inside source: true *** True Line Result if !state.animation_frames ** Processing line: ~ state.animation_frames ||= []~ - Inside source: true *** True Line Result state.animation_frames ||= [] ** Processing line: ~ add_animation_frame_to_end~ - Inside source: true *** True Line Result add_animation_frame_to_end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.last_mouse_down ||= 0~ - Inside source: true *** True Line Result state.last_mouse_down ||= 0 ** Processing line: ~ state.last_mouse_up ||= 0~ - Inside source: true *** True Line Result state.last_mouse_up ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.buttons_frame_selection.left = 10~ - Inside source: true *** True Line Result state.buttons_frame_selection.left = 10 ** Processing line: ~ state.buttons_frame_selection.top = grid.top - 10~ - Inside source: true *** True Line Result state.buttons_frame_selection.top = grid.top - 10 ** Processing line: ~ state.buttons_frame_selection.size = 20~ - Inside source: true *** True Line Result state.buttons_frame_selection.size = 20 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ defaults_canvas_sprite~ - Inside source: true *** True Line Result defaults_canvas_sprite ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.edit_mode ||= :drawing~ - Inside source: true *** True Line Result state.edit_mode ||= :drawing ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults_canvas_sprite~ - Inside source: true *** True Line Result def defaults_canvas_sprite ** Processing line: ~ rt_canvas.size = 16~ - Inside source: true *** True Line Result rt_canvas.size = 16 ** Processing line: ~ rt_canvas.zoom = 30~ - Inside source: true *** True Line Result rt_canvas.zoom = 30 ** Processing line: ~ rt_canvas.width = rt_canvas.size * rt_canvas.zoom~ - Inside source: true *** True Line Result rt_canvas.width = rt_canvas.size * rt_canvas.zoom ** Processing line: ~ rt_canvas.height = rt_canvas.size * rt_canvas.zoom~ - Inside source: true *** True Line Result rt_canvas.height = rt_canvas.size * rt_canvas.zoom ** Processing line: ~ rt_canvas.sprite = { x: 0,~ - Inside source: true *** True Line Result rt_canvas.sprite = { x: 0, ** Processing line: ~ y: 0,~ - Inside source: true *** True Line Result y: 0, ** Processing line: ~ w: rt_canvas.width,~ - Inside source: true *** True Line Result w: rt_canvas.width, ** Processing line: ~ h: rt_canvas.height,~ - Inside source: true *** True Line Result h: rt_canvas.height, ** Processing line: ~ path: :rt_canvas }.center_inside_rect(x: 0, y: 0, w: 640, h: 720)~ - Inside source: true *** True Line Result path: :rt_canvas }.center_inside_rect(x: 0, y: 0, w: 640, h: 720) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless state.tick_count == 1~ - Inside source: true *** True Line Result return unless state.tick_count == 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs[:rt_canvas].width = rt_canvas.width~ - Inside source: true *** True Line Result outputs[:rt_canvas].width = rt_canvas.width ** Processing line: ~ outputs[:rt_canvas].height = rt_canvas.height~ - Inside source: true *** True Line Result outputs[:rt_canvas].height = rt_canvas.height ** Processing line: ~ outputs[:rt_canvas].sprites << (rt_canvas.size + 1).map_with_index do |x|~ - Inside source: true *** True Line Result outputs[:rt_canvas].sprites << (rt_canvas.size + 1).map_with_index do |x| ** Processing line: ~ (rt_canvas.size + 1).map_with_index do |y|~ - Inside source: true *** True Line Result (rt_canvas.size + 1).map_with_index do |y| ** Processing line: ~ path = 'sprites/square-white.png'~ - Inside source: true *** True Line Result path = 'sprites/square-white.png' ** Processing line: ~ path = 'sprites/square-blue.png' if x == 7 || x == 8~ - Inside source: true *** True Line Result path = 'sprites/square-blue.png' if x == 7 || x == 8 ** Processing line: ~ { x: x * rt_canvas.zoom,~ - Inside source: true *** True Line Result { x: x * rt_canvas.zoom, ** Processing line: ~ y: y * rt_canvas.zoom,~ - Inside source: true *** True Line Result y: y * rt_canvas.zoom, ** Processing line: ~ w: rt_canvas.zoom,~ - Inside source: true *** True Line Result w: rt_canvas.zoom, ** Processing line: ~ h: rt_canvas.zoom,~ - Inside source: true *** True Line Result h: rt_canvas.zoom, ** Processing line: ~ path: path,~ - Inside source: true *** True Line Result path: path, ** Processing line: ~ a: 50 }~ - Inside source: true *** True Line Result a: 50 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_instructions~ - Inside source: true *** True Line Result def render_instructions ** Processing line: ~ instructions = [~ - Inside source: true *** True Line Result instructions = [ ** Processing line: ~ "* Hotkeys:",~ - Inside source: true *** True Line Result "* Hotkeys:", ** Processing line: ~ "- d: hold to erase, release to draw.",~ - Inside source: true *** True Line Result "- d: hold to erase, release to draw.", ** Processing line: ~ "- a: add frame.",~ - Inside source: true *** True Line Result "- a: add frame.", ** Processing line: ~ "- c: copy frame.",~ - Inside source: true *** True Line Result "- c: copy frame.", ** Processing line: ~ "- v: paste frame.",~ - Inside source: true *** True Line Result "- v: paste frame.", ** Processing line: ~ "- x: delete frame.",~ - Inside source: true *** True Line Result "- x: delete frame.", ** Processing line: ~ "- b: go to previous frame.",~ - Inside source: true *** True Line Result "- b: go to previous frame.", ** Processing line: ~ "- f: go to next frame.",~ - Inside source: true *** True Line Result "- f: go to next frame.", ** Processing line: ~ "- w: save to ./canvas directory.",~ - Inside source: true *** True Line Result "- w: save to ./canvas directory.", ** Processing line: ~ "- l: load from ./canvas."~ - Inside source: true *** True Line Result "- l: load from ./canvas." ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ instructions.each.with_index do |l, i|~ - Inside source: true *** True Line Result instructions.each.with_index do |l, i| ** Processing line: ~ outputs.labels << { x: 840, y: 500 - (i * 20), text: "#{l}",~ - Inside source: true *** True Line Result outputs.labels << { x: 840, y: 500 - (i * 20), text: "#{l}", ** Processing line: ~ r: 180, g: 180, b: 180, size_enum: 0 }~ - Inside source: true *** True Line Result r: 180, g: 180, b: 180, size_enum: 0 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_canvas~ - Inside source: true *** True Line Result def render_canvas ** Processing line: ~ return if state.tick_count.zero?~ - Inside source: true *** True Line Result return if state.tick_count.zero? ** Processing line: ~ outputs.sprites << rt_canvas.sprite~ - Inside source: true *** True Line Result outputs.sprites << rt_canvas.sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_buttons_frame_selection~ - Inside source: true *** True Line Result def render_buttons_frame_selection ** Processing line: ~ args.outputs.primitives << state.buttons_frame_selection.items.map_with_index do |b, i|~ - Inside source: true *** True Line Result args.outputs.primitives << state.buttons_frame_selection.items.map_with_index do |b, i| ** Processing line: ~ label = { x: b.x + state.buttons_frame_selection.size.half,~ - Inside source: true *** True Line Result label = { x: b.x + state.buttons_frame_selection.size.half, ** Processing line: ~ y: b.y,~ - Inside source: true *** True Line Result y: b.y, ** Processing line: ~ text: "#{i + 1}", r: 180, g: 180, b: 180,~ - Inside source: true *** True Line Result text: "#{i + 1}", r: 180, g: 180, b: 180, ** Processing line: ~ size_enum: -4, alignment_enum: 1 }.label!~ - Inside source: true *** True Line Result size_enum: -4, alignment_enum: 1 }.label! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ selection_border = b.merge(r: 40, g: 40, b: 40).border!~ - Inside source: true *** True Line Result selection_border = b.merge(r: 40, g: 40, b: 40).border! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if i == state.animation_frames_selected_index~ - Inside source: true *** True Line Result if i == state.animation_frames_selected_index ** Processing line: ~ selection_border = b.merge(r: 40, g: 230, b: 200).border!~ - Inside source: true *** True Line Result selection_border = b.merge(r: 40, g: 230, b: 200).border! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [selection_border, label]~ - Inside source: true *** True Line Result [selection_border, label] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_animation_frame_thumbnails~ - Inside source: true *** True Line Result def render_animation_frame_thumbnails ** Processing line: ~ return if state.tick_count.zero?~ - Inside source: true *** True Line Result return if state.tick_count.zero? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs[:current_animation_frame].width = rt_canvas.size~ - Inside source: true *** True Line Result outputs[:current_animation_frame].width = rt_canvas.size ** Processing line: ~ outputs[:current_animation_frame].height = rt_canvas.size~ - Inside source: true *** True Line Result outputs[:current_animation_frame].height = rt_canvas.size ** Processing line: ~ outputs[:current_animation_frame].solids << selected_animation_frame[:pixels].map_with_index do |f, i|~ - Inside source: true *** True Line Result outputs[:current_animation_frame].solids << selected_animation_frame[:pixels].map_with_index do |f, i| ** Processing line: ~ { x: f.x,~ - Inside source: true *** True Line Result { x: f.x, ** Processing line: ~ y: f.y,~ - Inside source: true *** True Line Result y: f.y, ** Processing line: ~ w: 1,~ - Inside source: true *** True Line Result w: 1, ** Processing line: ~ h: 1, r: 255, g: 255, b: 255 }~ - Inside source: true *** True Line Result h: 1, r: 255, g: 255, b: 255 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.sprites << rt_canvas.sprite.merge(path: :current_animation_frame)~ - Inside source: true *** True Line Result outputs.sprites << rt_canvas.sprite.merge(path: :current_animation_frame) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.animation_frames.map_with_index do |animation_frame, animation_frame_index|~ - Inside source: true *** True Line Result state.animation_frames.map_with_index do |animation_frame, animation_frame_index| ** Processing line: ~ outputs.sprites << state.buttons_frame_selection[:items][animation_frame_index][:inner_rect]~ - Inside source: true *** True Line Result outputs.sprites << state.buttons_frame_selection[:items][animation_frame_index][:inner_rect] ** Processing line: ~ .merge(path: animation_frame[:rt_name])~ - Inside source: true *** True Line Result .merge(path: animation_frame[:rt_name]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_animation~ - Inside source: true *** True Line Result def render_animation ** Processing line: ~ sprite_index = 0.frame_index count: state.animation_frames.length,~ - Inside source: true *** True Line Result sprite_index = 0.frame_index count: state.animation_frames.length, ** Processing line: ~ hold_for: 60 / state.animation_frames_per_second,~ - Inside source: true *** True Line Result hold_for: 60 / state.animation_frames_per_second, ** Processing line: ~ repeat: true~ - Inside source: true *** True Line Result repeat: true ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.sprites << { x: 700 - 8,~ - Inside source: true *** True Line Result args.outputs.sprites << { x: 700 - 8, ** Processing line: ~ y: 120,~ - Inside source: true *** True Line Result y: 120, ** Processing line: ~ w: 16,~ - Inside source: true *** True Line Result w: 16, ** Processing line: ~ h: 16,~ - Inside source: true *** True Line Result h: 16, ** Processing line: ~ path: (sprite_path sprite_index) }~ - Inside source: true *** True Line Result path: (sprite_path sprite_index) } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.sprites << { x: 700 - 16,~ - Inside source: true *** True Line Result args.outputs.sprites << { x: 700 - 16, ** Processing line: ~ y: 230,~ - Inside source: true *** True Line Result y: 230, ** Processing line: ~ w: 32,~ - Inside source: true *** True Line Result w: 32, ** Processing line: ~ h: 32,~ - Inside source: true *** True Line Result h: 32, ** Processing line: ~ path: (sprite_path sprite_index) }~ - Inside source: true *** True Line Result path: (sprite_path sprite_index) } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.sprites << { x: 700 - 32,~ - Inside source: true *** True Line Result args.outputs.sprites << { x: 700 - 32, ** Processing line: ~ y: 360,~ - Inside source: true *** True Line Result y: 360, ** Processing line: ~ w: 64,~ - Inside source: true *** True Line Result w: 64, ** Processing line: ~ h: 64,~ - Inside source: true *** True Line Result h: 64, ** Processing line: ~ path: (sprite_path sprite_index) }~ - Inside source: true *** True Line Result path: (sprite_path sprite_index) } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.sprites << { x: 700 - 64,~ - Inside source: true *** True Line Result args.outputs.sprites << { x: 700 - 64, ** Processing line: ~ y: 520,~ - Inside source: true *** True Line Result y: 520, ** Processing line: ~ w: 128,~ - Inside source: true *** True Line Result w: 128, ** Processing line: ~ h: 128,~ - Inside source: true *** True Line Result h: 128, ** Processing line: ~ path: (sprite_path sprite_index) }~ - Inside source: true *** True Line Result path: (sprite_path sprite_index) } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_mouse_click~ - Inside source: true *** True Line Result def input_mouse_click ** Processing line: ~ if inputs.mouse.up~ - Inside source: true *** True Line Result if inputs.mouse.up ** Processing line: ~ state.last_mouse_up = state.tick_count~ - Inside source: true *** True Line Result state.last_mouse_up = state.tick_count ** Processing line: ~ elsif inputs.mouse.moved && user_is_editing?~ - Inside source: true *** True Line Result elsif inputs.mouse.moved && user_is_editing? ** Processing line: ~ edit_current_animation_frame inputs.mouse.point~ - Inside source: true *** True Line Result edit_current_animation_frame inputs.mouse.point ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless inputs.mouse.click~ - Inside source: true *** True Line Result return unless inputs.mouse.click ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ clicked_frame_button = state.buttons_frame_selection.items.find do |b|~ - Inside source: true *** True Line Result clicked_frame_button = state.buttons_frame_selection.items.find do |b| ** Processing line: ~ inputs.mouse.point.inside_rect? b~ - Inside source: true *** True Line Result inputs.mouse.point.inside_rect? b ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (clicked_frame_button)~ - Inside source: true *** True Line Result if (clicked_frame_button) ** Processing line: ~ state.animation_frames_selected_index = clicked_frame_button[:index]~ - Inside source: true *** True Line Result state.animation_frames_selected_index = clicked_frame_button[:index] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (inputs.mouse.point.inside_rect? rt_canvas.sprite)~ - Inside source: true *** True Line Result if (inputs.mouse.point.inside_rect? rt_canvas.sprite) ** Processing line: ~ state.last_mouse_down = state.tick_count~ - Inside source: true *** True Line Result state.last_mouse_down = state.tick_count ** Processing line: ~ edit_current_animation_frame inputs.mouse.point~ - Inside source: true *** True Line Result edit_current_animation_frame inputs.mouse.point ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_keyboard~ - Inside source: true *** True Line Result def input_keyboard ** Processing line: ~ # w to save~ - Inside source: true *** True Line Result # w to save ** Processing line: ~ if inputs.keyboard.key_down.w~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.w ** Processing line: ~ t = Time.now~ - Inside source: true *** True Line Result t = Time.now ** Processing line: ~ state.save_description = "Time: #{t} (#{t.to_i})"~ - Inside source: true *** True Line Result state.save_description = "Time: #{t} (#{t.to_i})" ** Processing line: ~ gtk.serialize_state 'canvas/state.txt', state~ - Inside source: true *** True Line Result gtk.serialize_state 'canvas/state.txt', state ** Processing line: ~ gtk.serialize_state "tmp/canvas_backups/#{t.to_i}/state.txt", state~ - Inside source: true *** True Line Result gtk.serialize_state "tmp/canvas_backups/#{t.to_i}/state.txt", state ** Processing line: ~ animation_frames.each_with_index do |animation_frame, i|~ - Inside source: true *** True Line Result animation_frames.each_with_index do |animation_frame, i| ** Processing line: ~ queues.update_rt_animation_frame << { index: i,~ - Inside source: true *** True Line Result queues.update_rt_animation_frame << { index: i, ** Processing line: ~ at: state.tick_count + i,~ - Inside source: true *** True Line Result at: state.tick_count + i, ** Processing line: ~ queue_sprite_creation: true }~ - Inside source: true *** True Line Result queue_sprite_creation: true } ** Processing line: ~ queues.create_sprite << { index: i,~ - Inside source: true *** True Line Result queues.create_sprite << { index: i, ** Processing line: ~ at: state.tick_count + animation_frames.length + i,~ - Inside source: true *** True Line Result at: state.tick_count + animation_frames.length + i, ** Processing line: ~ path_override: "tmp/canvas_backups/#{t.to_i}/sprite-#{i}.png" }~ - Inside source: true *** True Line Result path_override: "tmp/canvas_backups/#{t.to_i}/sprite-#{i}.png" } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ gtk.notify! "Canvas saved."~ - Inside source: true *** True Line Result gtk.notify! "Canvas saved." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # l to load~ - Inside source: true *** True Line Result # l to load ** Processing line: ~ if inputs.keyboard.key_down.l~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.l ** Processing line: ~ args.state = gtk.deserialize_state 'canvas/state.txt'~ - Inside source: true *** True Line Result args.state = gtk.deserialize_state 'canvas/state.txt' ** Processing line: ~ animation_frames.each_with_index do |a, i|~ - Inside source: true *** True Line Result animation_frames.each_with_index do |a, i| ** Processing line: ~ queues.update_rt_animation_frame << { index: i,~ - Inside source: true *** True Line Result queues.update_rt_animation_frame << { index: i, ** Processing line: ~ at: state.tick_count + i,~ - Inside source: true *** True Line Result at: state.tick_count + i, ** Processing line: ~ queue_sprite_creation: true }~ - Inside source: true *** True Line Result queue_sprite_creation: true } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ gtk.notify! "Canvas loaded."~ - Inside source: true *** True Line Result gtk.notify! "Canvas loaded." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # d to go into delete mode, release to paint~ - Inside source: true *** True Line Result # d to go into delete mode, release to paint ** Processing line: ~ if inputs.keyboard.key_held.d~ - Inside source: true *** True Line Result if inputs.keyboard.key_held.d ** Processing line: ~ state.edit_mode = :erasing~ - Inside source: true *** True Line Result state.edit_mode = :erasing ** Processing line: ~ gtk.notify! "Erasing." if inputs.keyboard.key_held.d == (state.tick_count - 1)~ - Inside source: true *** True Line Result gtk.notify! "Erasing." if inputs.keyboard.key_held.d == (state.tick_count - 1) ** Processing line: ~ elsif inputs.keyboard.key_up.d~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_up.d ** Processing line: ~ state.edit_mode = :drawing~ - Inside source: true *** True Line Result state.edit_mode = :drawing ** Processing line: ~ gtk.notify! "Drawing."~ - Inside source: true *** True Line Result gtk.notify! "Drawing." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # a to add a frame to the end~ - Inside source: true *** True Line Result # a to add a frame to the end ** Processing line: ~ if inputs.keyboard.key_down.a~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.a ** Processing line: ~ queues.create_sprite << { index: state.animation_frames_selected_index,~ - Inside source: true *** True Line Result queues.create_sprite << { index: state.animation_frames_selected_index, ** Processing line: ~ at: state.tick_count }~ - Inside source: true *** True Line Result at: state.tick_count } ** Processing line: ~ queues.create_sprite << { index: state.animation_frames_selected_index + 1,~ - Inside source: true *** True Line Result queues.create_sprite << { index: state.animation_frames_selected_index + 1, ** Processing line: ~ at: state.tick_count }~ - Inside source: true *** True Line Result at: state.tick_count } ** Processing line: ~ add_animation_frame_to_end~ - Inside source: true *** True Line Result add_animation_frame_to_end ** Processing line: ~ gtk.notify! "Frame added to end."~ - Inside source: true *** True Line Result gtk.notify! "Frame added to end." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # c or t to copy~ - Inside source: true *** True Line Result # c or t to copy ** Processing line: ~ if (inputs.keyboard.key_down.c || inputs.keyboard.key_down.t)~ - Inside source: true *** True Line Result if (inputs.keyboard.key_down.c || inputs.keyboard.key_down.t) ** Processing line: ~ state.clipboard = [selected_animation_frame[:pixels]].flatten~ - Inside source: true *** True Line Result state.clipboard = [selected_animation_frame[:pixels]].flatten ** Processing line: ~ gtk.notify! "Current frame copied."~ - Inside source: true *** True Line Result gtk.notify! "Current frame copied." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # v or q to paste~ - Inside source: true *** True Line Result # v or q to paste ** Processing line: ~ if (inputs.keyboard.key_down.v || inputs.keyboard.key_down.q) && state.clipboard~ - Inside source: true *** True Line Result if (inputs.keyboard.key_down.v || inputs.keyboard.key_down.q) && state.clipboard ** Processing line: ~ selected_animation_frame[:pixels] = [state.clipboard].flatten~ - Inside source: true *** True Line Result selected_animation_frame[:pixels] = [state.clipboard].flatten ** Processing line: ~ queues.update_rt_animation_frame << { index: state.animation_frames_selected_index,~ - Inside source: true *** True Line Result queues.update_rt_animation_frame << { index: state.animation_frames_selected_index, ** Processing line: ~ at: state.tick_count,~ - Inside source: true *** True Line Result at: state.tick_count, ** Processing line: ~ queue_sprite_creation: true }~ - Inside source: true *** True Line Result queue_sprite_creation: true } ** Processing line: ~ gtk.notify! "Pasted."~ - Inside source: true *** True Line Result gtk.notify! "Pasted." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # f to go forward/next frame~ - Inside source: true *** True Line Result # f to go forward/next frame ** Processing line: ~ if (inputs.keyboard.key_down.f)~ - Inside source: true *** True Line Result if (inputs.keyboard.key_down.f) ** Processing line: ~ if (state.animation_frames_selected_index == (state.animation_frames.length - 1))~ - Inside source: true *** True Line Result if (state.animation_frames_selected_index == (state.animation_frames.length - 1)) ** Processing line: ~ state.animation_frames_selected_index = 0~ - Inside source: true *** True Line Result state.animation_frames_selected_index = 0 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.animation_frames_selected_index += 1~ - Inside source: true *** True Line Result state.animation_frames_selected_index += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ gtk.notify! "Next frame."~ - Inside source: true *** True Line Result gtk.notify! "Next frame." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # b to go back/previous frame~ - Inside source: true *** True Line Result # b to go back/previous frame ** Processing line: ~ if (inputs.keyboard.key_down.b)~ - Inside source: true *** True Line Result if (inputs.keyboard.key_down.b) ** Processing line: ~ if (state.animation_frames_selected_index == 0)~ - Inside source: true *** True Line Result if (state.animation_frames_selected_index == 0) ** Processing line: ~ state.animation_frames_selected_index = state.animation_frames.length - 1~ - Inside source: true *** True Line Result state.animation_frames_selected_index = state.animation_frames.length - 1 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.animation_frames_selected_index -= 1~ - Inside source: true *** True Line Result state.animation_frames_selected_index -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ gtk.notify! "Previous frame."~ - Inside source: true *** True Line Result gtk.notify! "Previous frame." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # x to delete frame~ - Inside source: true *** True Line Result # x to delete frame ** Processing line: ~ if (inputs.keyboard.key_down.x) && animation_frames.length > 1~ - Inside source: true *** True Line Result if (inputs.keyboard.key_down.x) && animation_frames.length > 1 ** Processing line: ~ state.clipboard = selected_animation_frame[:pixels]~ - Inside source: true *** True Line Result state.clipboard = selected_animation_frame[:pixels] ** Processing line: ~ state.animation_frames = animation_frames.find_all { |v| v[:index] != state.animation_frames_selected_index }~ - Inside source: true *** True Line Result state.animation_frames = animation_frames.find_all { |v| v[:index] != state.animation_frames_selected_index } ** Processing line: ~ if state.animation_frames_selected_index >= state.animation_frames.length~ - Inside source: true *** True Line Result if state.animation_frames_selected_index >= state.animation_frames.length ** Processing line: ~ state.animation_frames_selected_index = state.animation_frames.length - 1~ - Inside source: true *** True Line Result state.animation_frames_selected_index = state.animation_frames.length - 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ gtk.notify! "Frame deleted."~ - Inside source: true *** True Line Result gtk.notify! "Frame deleted." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_auto_export~ - Inside source: true *** True Line Result def calc_auto_export ** Processing line: ~ return if user_is_editing?~ - Inside source: true *** True Line Result return if user_is_editing? ** Processing line: ~ return if state.last_mouse_up.elapsed_time != 30~ - Inside source: true *** True Line Result return if state.last_mouse_up.elapsed_time != 30 ** Processing line: ~ # auto export current animation frame if there is no editing for 30 ticks~ - Inside source: true *** True Line Result # auto export current animation frame if there is no editing for 30 ticks ** Processing line: ~ queues.create_sprite << { index: state.animation_frames_selected_index,~ - Inside source: true *** True Line Result queues.create_sprite << { index: state.animation_frames_selected_index, ** Processing line: ~ at: state.tick_count }~ - Inside source: true *** True Line Result at: state.tick_count } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_buttons_frame_selection~ - Inside source: true *** True Line Result def calc_buttons_frame_selection ** Processing line: ~ state.buttons_frame_selection.items = animation_frames.length.map_with_index do |i|~ - Inside source: true *** True Line Result state.buttons_frame_selection.items = animation_frames.length.map_with_index do |i| ** Processing line: ~ { x: state.buttons_frame_selection.left + i * state.buttons_frame_selection.size,~ - Inside source: true *** True Line Result { x: state.buttons_frame_selection.left + i * state.buttons_frame_selection.size, ** Processing line: ~ y: state.buttons_frame_selection.top - state.buttons_frame_selection.size,~ - Inside source: true *** True Line Result y: state.buttons_frame_selection.top - state.buttons_frame_selection.size, ** Processing line: ~ inner_rect: {~ - Inside source: true *** True Line Result inner_rect: { ** Processing line: ~ x: (state.buttons_frame_selection.left + 2) + i * state.buttons_frame_selection.size,~ - Inside source: true *** True Line Result x: (state.buttons_frame_selection.left + 2) + i * state.buttons_frame_selection.size, ** Processing line: ~ y: (state.buttons_frame_selection.top - state.buttons_frame_selection.size + 2),~ - Inside source: true *** True Line Result y: (state.buttons_frame_selection.top - state.buttons_frame_selection.size + 2), ** Processing line: ~ w: 16,~ - Inside source: true *** True Line Result w: 16, ** Processing line: ~ h: 16,~ - Inside source: true *** True Line Result h: 16, ** Processing line: ~ },~ - Inside source: true *** True Line Result }, ** Processing line: ~ w: state.buttons_frame_selection.size,~ - Inside source: true *** True Line Result w: state.buttons_frame_selection.size, ** Processing line: ~ h: state.buttons_frame_selection.size,~ - Inside source: true *** True Line Result h: state.buttons_frame_selection.size, ** Processing line: ~ index: i }~ - Inside source: true *** True Line Result index: i } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_animation_frames~ - Inside source: true *** True Line Result def calc_animation_frames ** Processing line: ~ animation_frames.each_with_index do |animation_frame, i|~ - Inside source: true *** True Line Result animation_frames.each_with_index do |animation_frame, i| ** Processing line: ~ animation_frame[:index] = i~ - Inside source: true *** True Line Result animation_frame[:index] = i ** Processing line: ~ animation_frame[:rt_name] = "animation_frame_#{i}"~ - Inside source: true *** True Line Result animation_frame[:rt_name] = "animation_frame_#{i}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_queue_create_sprite~ - Inside source: true *** True Line Result def process_queue_create_sprite ** Processing line: ~ sprites_to_create = queues.create_sprite~ - Inside source: true *** True Line Result sprites_to_create = queues.create_sprite ** Processing line: ~ .find_all { |h| h[:at].elapsed? }~ - Inside source: true *** True Line Result .find_all { |h| h[:at].elapsed? } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ queues.create_sprite = queues.create_sprite - sprites_to_create~ - Inside source: true *** True Line Result queues.create_sprite = queues.create_sprite - sprites_to_create ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sprites_to_create.each do |h|~ - Inside source: true *** True Line Result sprites_to_create.each do |h| ** Processing line: ~ export_animation_frame h[:index], h[:path_override]~ - Inside source: true *** True Line Result export_animation_frame h[:index], h[:path_override] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_queue_reset_sprite~ - Inside source: true *** True Line Result def process_queue_reset_sprite ** Processing line: ~ sprites_to_reset = queues.reset_sprite~ - Inside source: true *** True Line Result sprites_to_reset = queues.reset_sprite ** Processing line: ~ .find_all { |h| h[:at].elapsed? }~ - Inside source: true *** True Line Result .find_all { |h| h[:at].elapsed? } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ queues.reset_sprite -= sprites_to_reset~ - Inside source: true *** True Line Result queues.reset_sprite -= sprites_to_reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sprites_to_reset.each { |h| gtk.reset_sprite (sprite_path h[:index]) }~ - Inside source: true *** True Line Result sprites_to_reset.each { |h| gtk.reset_sprite (sprite_path h[:index]) } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_queue_update_rt_animation_frame~ - Inside source: true *** True Line Result def process_queue_update_rt_animation_frame ** Processing line: ~ animation_frames_to_update = queues.update_rt_animation_frame~ - Inside source: true *** True Line Result animation_frames_to_update = queues.update_rt_animation_frame ** Processing line: ~ .find_all { |h| h[:at].elapsed? }~ - Inside source: true *** True Line Result .find_all { |h| h[:at].elapsed? } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ queues.update_rt_animation_frame -= animation_frames_to_update~ - Inside source: true *** True Line Result queues.update_rt_animation_frame -= animation_frames_to_update ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ animation_frames_to_update.each do |h|~ - Inside source: true *** True Line Result animation_frames_to_update.each do |h| ** Processing line: ~ update_animation_frame_render_target animation_frames[h[:index]]~ - Inside source: true *** True Line Result update_animation_frame_render_target animation_frames[h[:index]] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if h[:queue_sprite_creation]~ - Inside source: true *** True Line Result if h[:queue_sprite_creation] ** Processing line: ~ queues.create_sprite << { index: h[:index],~ - Inside source: true *** True Line Result queues.create_sprite << { index: h[:index], ** Processing line: ~ at: state.tick_count + 1 }~ - Inside source: true *** True Line Result at: state.tick_count + 1 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def update_animation_frame_render_target animation_frame~ - Inside source: true *** True Line Result def update_animation_frame_render_target animation_frame ** Processing line: ~ return if !animation_frame~ - Inside source: true *** True Line Result return if !animation_frame ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs[animation_frame[:rt_name]].width = state.rt_canvas.size~ - Inside source: true *** True Line Result outputs[animation_frame[:rt_name]].width = state.rt_canvas.size ** Processing line: ~ outputs[animation_frame[:rt_name]].height = state.rt_canvas.size~ - Inside source: true *** True Line Result outputs[animation_frame[:rt_name]].height = state.rt_canvas.size ** Processing line: ~ outputs[animation_frame[:rt_name]].solids << animation_frame[:pixels].map do |f|~ - Inside source: true *** True Line Result outputs[animation_frame[:rt_name]].solids << animation_frame[:pixels].map do |f| ** Processing line: ~ { x: f.x,~ - Inside source: true *** True Line Result { x: f.x, ** Processing line: ~ y: f.y,~ - Inside source: true *** True Line Result y: f.y, ** Processing line: ~ w: 1,~ - Inside source: true *** True Line Result w: 1, ** Processing line: ~ h: 1, r: 255, g: 255, b: 255 }~ - Inside source: true *** True Line Result h: 1, r: 255, g: 255, b: 255 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def animation_frames~ - Inside source: true *** True Line Result def animation_frames ** Processing line: ~ state.animation_frames~ - Inside source: true *** True Line Result state.animation_frames ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def add_animation_frame_to_end~ - Inside source: true *** True Line Result def add_animation_frame_to_end ** Processing line: ~ animation_frames << {~ - Inside source: true *** True Line Result animation_frames << { ** Processing line: ~ index: animation_frames.length,~ - Inside source: true *** True Line Result index: animation_frames.length, ** Processing line: ~ pixels: [],~ - Inside source: true *** True Line Result pixels: [], ** Processing line: ~ rt_name: "animation_frame_#{animation_frames.length}"~ - Inside source: true *** True Line Result rt_name: "animation_frame_#{animation_frames.length}" ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.animation_frames_selected_index = (animation_frames.length - 1)~ - Inside source: true *** True Line Result state.animation_frames_selected_index = (animation_frames.length - 1) ** Processing line: ~ queues.update_rt_animation_frame << { index: state.animation_frames_selected_index,~ - Inside source: true *** True Line Result queues.update_rt_animation_frame << { index: state.animation_frames_selected_index, ** Processing line: ~ at: state.tick_count,~ - Inside source: true *** True Line Result at: state.tick_count, ** Processing line: ~ queue_sprite_creation: true }~ - Inside source: true *** True Line Result queue_sprite_creation: true } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def sprite_path i~ - Inside source: true *** True Line Result def sprite_path i ** Processing line: ~ "canvas/sprite-#{i}.png"~ - Inside source: true *** True Line Result "canvas/sprite-#{i}.png" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def export_animation_frame i, path_override = nil~ - Inside source: true *** True Line Result def export_animation_frame i, path_override = nil ** Processing line: ~ return if !state.animation_frames[i]~ - Inside source: true *** True Line Result return if !state.animation_frames[i] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.screenshots << state.buttons_frame_selection~ - Inside source: true *** True Line Result outputs.screenshots << state.buttons_frame_selection ** Processing line: ~ .items[i][:inner_rect]~ - Inside source: true *** True Line Result .items[i][:inner_rect] ** Processing line: ~ .merge(path: path_override || (sprite_path i))~ - Inside source: true *** True Line Result .merge(path: path_override || (sprite_path i)) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.screenshots << state.buttons_frame_selection~ - Inside source: true *** True Line Result outputs.screenshots << state.buttons_frame_selection ** Processing line: ~ .items[i][:inner_rect]~ - Inside source: true *** True Line Result .items[i][:inner_rect] ** Processing line: ~ .merge(path: "tmp/sprite_backups/#{Time.now.to_i}-sprite-#{i}.png")~ - Inside source: true *** True Line Result .merge(path: "tmp/sprite_backups/#{Time.now.to_i}-sprite-#{i}.png") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ queues.reset_sprite << { index: i, at: state.tick_count }~ - Inside source: true *** True Line Result queues.reset_sprite << { index: i, at: state.tick_count } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def selected_animation_frame~ - Inside source: true *** True Line Result def selected_animation_frame ** Processing line: ~ state.animation_frames[state.animation_frames_selected_index]~ - Inside source: true *** True Line Result state.animation_frames[state.animation_frames_selected_index] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def edit_current_animation_frame point~ - Inside source: true *** True Line Result def edit_current_animation_frame point ** Processing line: ~ draw_area_point = (to_draw_area point)~ - Inside source: true *** True Line Result draw_area_point = (to_draw_area point) ** Processing line: ~ if state.edit_mode == :drawing && (!selected_animation_frame[:pixels].include? draw_area_point)~ - Inside source: true *** True Line Result if state.edit_mode == :drawing && (!selected_animation_frame[:pixels].include? draw_area_point) ** Processing line: ~ selected_animation_frame[:pixels] << draw_area_point~ - Inside source: true *** True Line Result selected_animation_frame[:pixels] << draw_area_point ** Processing line: ~ queues.update_rt_animation_frame << { index: state.animation_frames_selected_index,~ - Inside source: true *** True Line Result queues.update_rt_animation_frame << { index: state.animation_frames_selected_index, ** Processing line: ~ at: state.tick_count,~ - Inside source: true *** True Line Result at: state.tick_count, ** Processing line: ~ queue_sprite_creation: !user_is_editing? }~ - Inside source: true *** True Line Result queue_sprite_creation: !user_is_editing? } ** Processing line: ~ elsif state.edit_mode == :erasing && (selected_animation_frame[:pixels].include? draw_area_point)~ - Inside source: true *** True Line Result elsif state.edit_mode == :erasing && (selected_animation_frame[:pixels].include? draw_area_point) ** Processing line: ~ selected_animation_frame[:pixels] = selected_animation_frame[:pixels].reject { |p| p == draw_area_point }~ - Inside source: true *** True Line Result selected_animation_frame[:pixels] = selected_animation_frame[:pixels].reject { |p| p == draw_area_point } ** Processing line: ~ queues.update_rt_animation_frame << { index: state.animation_frames_selected_index,~ - Inside source: true *** True Line Result queues.update_rt_animation_frame << { index: state.animation_frames_selected_index, ** Processing line: ~ at: state.tick_count,~ - Inside source: true *** True Line Result at: state.tick_count, ** Processing line: ~ queue_sprite_creation: !user_is_editing? }~ - Inside source: true *** True Line Result queue_sprite_creation: !user_is_editing? } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def user_is_editing?~ - Inside source: true *** True Line Result def user_is_editing? ** Processing line: ~ state.last_mouse_down > state.last_mouse_up~ - Inside source: true *** True Line Result state.last_mouse_down > state.last_mouse_up ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_draw_area point~ - Inside source: true *** True Line Result def to_draw_area point ** Processing line: ~ x, y = point~ - Inside source: true *** True Line Result x, y = point ** Processing line: ~ x -= rt_canvas.sprite.x~ - Inside source: true *** True Line Result x -= rt_canvas.sprite.x ** Processing line: ~ y -= rt_canvas.sprite.y~ - Inside source: true *** True Line Result y -= rt_canvas.sprite.y ** Processing line: ~ { x: x.idiv(rt_canvas.zoom),~ - Inside source: true *** True Line Result { x: x.idiv(rt_canvas.zoom), ** Processing line: ~ y: y.idiv(rt_canvas.zoom) }~ - Inside source: true *** True Line Result y: y.idiv(rt_canvas.zoom) } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rt_canvas~ - Inside source: true *** True Line Result def rt_canvas ** Processing line: ~ state.rt_canvas ||= state.new_entity(:rt_canvas)~ - Inside source: true *** True Line Result state.rt_canvas ||= state.new_entity(:rt_canvas) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def queues~ - Inside source: true *** True Line Result def queues ** Processing line: ~ state.queues ||= state.new_entity(:queues)~ - Inside source: true *** True Line Result state.queues ||= state.new_entity(:queues) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $game = OneBitLowrezPaint.new~ - Inside source: true *** True Line Result $game = OneBitLowrezPaint.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $game.args = args~ - Inside source: true *** True Line Result $game.args = args ** Processing line: ~ $game.tick~ - Inside source: true *** True Line Result $game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # $gtk.reset~ - Inside source: true *** True Line Result # $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Dev Tools - Tile Editor Starting Point - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Dev Tools - Tile Editor Starting Point - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_dev_tools/tile_editor_starting_point/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_dev_tools/tile_editor_starting_point/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - to_s: Returns a string representation of an object.~ - Inside source: true *** True Line Result - to_s: Returns a string representation of an object. ** Processing line: ~ For example, if we had~ - Inside source: true *** True Line Result For example, if we had ** Processing line: ~ 500.to_s~ - Inside source: true *** True Line Result 500.to_s ** Processing line: ~ the string "500" would be returned.~ - Inside source: true *** True Line Result the string "500" would be returned. ** Processing line: ~ Similar to to_i, which returns an integer representation of an object.~ - Inside source: true *** True Line Result Similar to to_i, which returns an integer representation of an object. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - Ceil: Returns an integer number greater than or equal to the original~ - Inside source: true *** True Line Result - Ceil: Returns an integer number greater than or equal to the original ** Processing line: ~ with no decimal.~ - Inside source: true *** True Line Result with no decimal. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - ARRAY#inside_rect?: Returns true or false depending on if the point is inside a rect.~ - Inside source: true *** True Line Result - ARRAY#inside_rect?: Returns true or false depending on if the point is inside a rect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ - Inside source: true *** True Line Result - args.outputs.labels: An array. The values generate a label. ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ - Inside source: true *** True Line Result For more information about labels, go to mygame/documentation/02-labels.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.sprites: An array. The values generate a sprite.~ - Inside source: true *** True Line Result - args.outputs.sprites: An array. The values generate a sprite. ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, IMAGE PATH]~ - Inside source: true *** True Line Result The parameters are [X, Y, WIDTH, HEIGHT, IMAGE PATH] ** Processing line: ~ For more information about sprites, go to mygame/documentation/05-sprites.md.~ - Inside source: true *** True Line Result For more information about sprites, go to mygame/documentation/05-sprites.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.solids: An array. The values generate a solid.~ - Inside source: true *** True Line Result - args.outputs.solids: An array. The values generate a solid. ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE]~ - Inside source: true *** True Line Result The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE] ** Processing line: ~ For more information about solids, go to mygame/documentation/03-solids-and-borders.md.~ - Inside source: true *** True Line Result For more information about solids, go to mygame/documentation/03-solids-and-borders.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.lines: An array. The values generate a line.~ - Inside source: true *** True Line Result - args.outputs.lines: An array. The values generate a line. ** Processing line: ~ The parameters are [X1, Y1, X2, Y2, RED, GREEN, BLUE]~ - Inside source: true *** True Line Result The parameters are [X1, Y1, X2, Y2, RED, GREEN, BLUE] ** Processing line: ~ For more information about lines, go to mygame/documentation/04-lines.md.~ - Inside source: true *** True Line Result For more information about lines, go to mygame/documentation/04-lines.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.state.new_entity: Used when we want to create a new object, like a sprite or button.~ - Inside source: true *** True Line Result - args.state.new_entity: Used when we want to create a new object, like a sprite or button. ** Processing line: ~ In this sample app, new_entity is used to create a new button that clears the grid.~ - Inside source: true *** True Line Result In this sample app, new_entity is used to create a new button that clears the grid. ** Processing line: ~ (Remember, you can use state to define ANY property and it will be retained across frames.)~ - Inside source: true *** True Line Result (Remember, you can use state to define ANY property and it will be retained across frames.) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app shows an empty grid that the user can paint in. There are different image tiles that~ - Inside source: true *** True Line Result # This sample app shows an empty grid that the user can paint in. There are different image tiles that ** Processing line: ~ # the user can use to fill the grid, and the "Clear" button can be pressed to clear the grid boxes.~ - Inside source: true *** True Line Result # the user can use to fill the grid, and the "Clear" button can be pressed to clear the grid boxes. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class TileEditor~ - Inside source: true *** True Line Result class TileEditor ** Processing line: ~ attr_accessor :inputs, :state, :outputs, :grid, :args~ - Inside source: true *** True Line Result attr_accessor :inputs, :state, :outputs, :grid, :args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Runs all the methods necessary for the game to function properly.~ - Inside source: true *** True Line Result # Runs all the methods necessary for the game to function properly. ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ check_click~ - Inside source: true *** True Line Result check_click ** Processing line: ~ draw_buttons~ - Inside source: true *** True Line Result draw_buttons ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets default values~ - Inside source: true *** True Line Result # Sets default values ** Processing line: ~ # Initialization only happens in the first frame~ - Inside source: true *** True Line Result # Initialization only happens in the first frame ** Processing line: ~ # NOTE: The values of some of these variables may seem confusingly large at first.~ - Inside source: true *** True Line Result # NOTE: The values of some of these variables may seem confusingly large at first. ** Processing line: ~ # The gridSize is 1600 but it seems a lot smaller on the screen, for example.~ - Inside source: true *** True Line Result # The gridSize is 1600 but it seems a lot smaller on the screen, for example. ** Processing line: ~ # But keep in mind that by using the "W", "A", "S", and "D" keys, you can~ - Inside source: true *** True Line Result # But keep in mind that by using the "W", "A", "S", and "D" keys, you can ** Processing line: ~ # move the grid's view in all four directions for more grid spaces.~ - Inside source: true *** True Line Result # move the grid's view in all four directions for more grid spaces. ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ state.tileCords ||= []~ - Inside source: true *** True Line Result state.tileCords ||= [] ** Processing line: ~ state.tileQuantity ||= 6~ - Inside source: true *** True Line Result state.tileQuantity ||= 6 ** Processing line: ~ state.tileSize ||= 50~ - Inside source: true *** True Line Result state.tileSize ||= 50 ** Processing line: ~ state.tileSelected ||= 1~ - Inside source: true *** True Line Result state.tileSelected ||= 1 ** Processing line: ~ state.tempX ||= 50~ - Inside source: true *** True Line Result state.tempX ||= 50 ** Processing line: ~ state.tempY ||= 500~ - Inside source: true *** True Line Result state.tempY ||= 500 ** Processing line: ~ state.speed ||= 4~ - Inside source: true *** True Line Result state.speed ||= 4 ** Processing line: ~ state.centerX ||= 4000~ - Inside source: true *** True Line Result state.centerX ||= 4000 ** Processing line: ~ state.centerY ||= 4000~ - Inside source: true *** True Line Result state.centerY ||= 4000 ** Processing line: ~ state.originalCenter ||= [state.centerX, state.centerY]~ - Inside source: true *** True Line Result state.originalCenter ||= [state.centerX, state.centerY] ** Processing line: ~ state.gridSize ||= 1600~ - Inside source: true *** True Line Result state.gridSize ||= 1600 ** Processing line: ~ state.lineQuantity ||= 50~ - Inside source: true *** True Line Result state.lineQuantity ||= 50 ** Processing line: ~ state.increment ||= state.gridSize / state.lineQuantity~ - Inside source: true *** True Line Result state.increment ||= state.gridSize / state.lineQuantity ** Processing line: ~ state.gridX ||= []~ - Inside source: true *** True Line Result state.gridX ||= [] ** Processing line: ~ state.gridY ||= []~ - Inside source: true *** True Line Result state.gridY ||= [] ** Processing line: ~ state.filled_squares ||= []~ - Inside source: true *** True Line Result state.filled_squares ||= [] ** Processing line: ~ state.grid_border ||= [390, 140, 500, 500]~ - Inside source: true *** True Line Result state.grid_border ||= [390, 140, 500, 500] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ get_grid unless state.tempX == 0 # calls get_grid in the first frame only~ - Inside source: true *** True Line Result get_grid unless state.tempX == 0 # calls get_grid in the first frame only ** Processing line: ~ determineTileCords unless state.tempX == 0 # calls determineTileCords in first frame~ - Inside source: true *** True Line Result determineTileCords unless state.tempX == 0 # calls determineTileCords in first frame ** Processing line: ~ state.tempX = 0 # sets tempX to 0; the two methods aren't called again~ - Inside source: true *** True Line Result state.tempX = 0 # sets tempX to 0; the two methods aren't called again ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the placement of lines or separators in the grid~ - Inside source: true *** True Line Result # Calculates the placement of lines or separators in the grid ** Processing line: ~ def get_grid~ - Inside source: true *** True Line Result def get_grid ** Processing line: ~ curr_x = state.centerX - (state.gridSize / 2) # starts at left of grid~ - Inside source: true *** True Line Result curr_x = state.centerX - (state.gridSize / 2) # starts at left of grid ** Processing line: ~ deltaX = state.gridSize / state.lineQuantity # finds distance to place vertical lines evenly through width of grid~ - Inside source: true *** True Line Result deltaX = state.gridSize / state.lineQuantity # finds distance to place vertical lines evenly through width of grid ** Processing line: ~ (state.lineQuantity + 2).times do~ - Inside source: true *** True Line Result (state.lineQuantity + 2).times do ** Processing line: ~ state.gridX << curr_x # adds curr_x to gridX collection~ - Inside source: true *** True Line Result state.gridX << curr_x # adds curr_x to gridX collection ** Processing line: ~ curr_x += deltaX # increment curr_x by the distance between vertical lines~ - Inside source: true *** True Line Result curr_x += deltaX # increment curr_x by the distance between vertical lines ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ curr_y = state.centerY - (state.gridSize / 2) # starts at bottom of grid~ - Inside source: true *** True Line Result curr_y = state.centerY - (state.gridSize / 2) # starts at bottom of grid ** Processing line: ~ deltaY = state.gridSize / state.lineQuantity # finds distance to place horizontal lines evenly through height of grid~ - Inside source: true *** True Line Result deltaY = state.gridSize / state.lineQuantity # finds distance to place horizontal lines evenly through height of grid ** Processing line: ~ (state.lineQuantity + 2).times do~ - Inside source: true *** True Line Result (state.lineQuantity + 2).times do ** Processing line: ~ state.gridY << curr_y # adds curr_y to gridY collection~ - Inside source: true *** True Line Result state.gridY << curr_y # adds curr_y to gridY collection ** Processing line: ~ curr_y += deltaY # increments curr_y to distance between horizontal lines~ - Inside source: true *** True Line Result curr_y += deltaY # increments curr_y to distance between horizontal lines ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Determines coordinate positions of patterned tiles (on the left side of the grid)~ - Inside source: true *** True Line Result # Determines coordinate positions of patterned tiles (on the left side of the grid) ** Processing line: ~ def determineTileCords~ - Inside source: true *** True Line Result def determineTileCords ** Processing line: ~ state.tempCounter ||= 1 # initializes tempCounter to 1~ - Inside source: true *** True Line Result state.tempCounter ||= 1 # initializes tempCounter to 1 ** Processing line: ~ state.tileQuantity.times do # there are 6 different kinds of tiles~ - Inside source: true *** True Line Result state.tileQuantity.times do # there are 6 different kinds of tiles ** Processing line: ~ state.tileCords += [[state.tempX, state.tempY, state.tempCounter]] # adds tile definition to collection~ - Inside source: true *** True Line Result state.tileCords += [[state.tempX, state.tempY, state.tempCounter]] # adds tile definition to collection ** Processing line: ~ state.tempX += 75 # increments tempX to put horizontal space between the patterned tiles~ - Inside source: true *** True Line Result state.tempX += 75 # increments tempX to put horizontal space between the patterned tiles ** Processing line: ~ state.tempCounter += 1 # increments tempCounter~ - Inside source: true *** True Line Result state.tempCounter += 1 # increments tempCounter ** Processing line: ~ if state.tempX > 200 # if tempX exceeds 200 pixels~ - Inside source: true *** True Line Result if state.tempX > 200 # if tempX exceeds 200 pixels ** Processing line: ~ state.tempX = 50 # a new row of patterned tiles begins~ - Inside source: true *** True Line Result state.tempX = 50 # a new row of patterned tiles begins ** Processing line: ~ state.tempY -= 75 # the new row is 75 pixels lower than the previous row~ - Inside source: true *** True Line Result state.tempY -= 75 # the new row is 75 pixels lower than the previous row ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs objects (grid, tiles, etc) onto the screen~ - Inside source: true *** True Line Result # Outputs objects (grid, tiles, etc) onto the screen ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ outputs.sprites << state.tileCords.map do # outputs tileCords collection using images in sprites folder~ - Inside source: true *** True Line Result outputs.sprites << state.tileCords.map do # outputs tileCords collection using images in sprites folder ** Processing line: ~ |x, y, order|~ - Inside source: true *** True Line Result |x, y, order| ** Processing line: ~ [x, y, state.tileSize, state.tileSize, 'sprites/image' + order.to_s + ".png"]~ - Inside source: true *** True Line Result [x, y, state.tileSize, state.tileSize, 'sprites/image' + order.to_s + ".png"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ outputs.solids << [0, 0, 1280, 720, 255, 255, 255] # outputs white background~ - Inside source: true *** True Line Result outputs.solids << [0, 0, 1280, 720, 255, 255, 255] # outputs white background ** Processing line: ~ add_grid # outputs grid~ - Inside source: true *** True Line Result add_grid # outputs grid ** Processing line: ~ print_title # outputs title and current tile pattern~ - Inside source: true *** True Line Result print_title # outputs title and current tile pattern ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates a grid by outputting vertical and horizontal grid lines onto the screen.~ - Inside source: true *** True Line Result # Creates a grid by outputting vertical and horizontal grid lines onto the screen. ** Processing line: ~ # Outputs sprites for the filled_squares collection onto the screen.~ - Inside source: true *** True Line Result # Outputs sprites for the filled_squares collection onto the screen. ** Processing line: ~ def add_grid~ - Inside source: true *** True Line Result def add_grid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs the grid's border.~ - Inside source: true *** True Line Result # Outputs the grid's border. ** Processing line: ~ outputs.borders << state.grid_border~ - Inside source: true *** True Line Result outputs.borders << state.grid_border ** Processing line: ~ temp = 0~ - Inside source: true *** True Line Result temp = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Before looking at the code that outputs the vertical and horizontal lines in the~ - Inside source: true *** True Line Result # Before looking at the code that outputs the vertical and horizontal lines in the ** Processing line: ~ # grid, take note of the fact that:~ - Inside source: true *** True Line Result # grid, take note of the fact that: ** Processing line: ~ # grid_border[1] refers to the border's bottom line (running horizontally),~ - Inside source: true *** True Line Result # grid_border[1] refers to the border's bottom line (running horizontally), ** Processing line: ~ # grid_border[2] refers to the border's top line (running (horizontally),~ - Inside source: true *** True Line Result # grid_border[2] refers to the border's top line (running (horizontally), ** Processing line: ~ # grid_border[0] refers to the border's left line (running vertically),~ - Inside source: true *** True Line Result # grid_border[0] refers to the border's left line (running vertically), ** Processing line: ~ # and grid_border[3] refers to the border's right line (running vertically).~ - Inside source: true *** True Line Result # and grid_border[3] refers to the border's right line (running vertically). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # [2]~ - Inside source: true *** True Line Result # [2] ** Processing line: ~ # ----------~ - Inside source: true *** True Line Result # ---------- ** Processing line: ~ # | |~ - Inside source: true *** True Line Result # | | ** Processing line: ~ # [0] | | [3]~ - Inside source: true *** True Line Result # [0] | | [3] ** Processing line: ~ # | |~ - Inside source: true *** True Line Result # | | ** Processing line: ~ # ----------~ - Inside source: true *** True Line Result # ---------- ** Processing line: ~ # [1]~ - Inside source: true *** True Line Result # [1] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the positions and outputs the x grid lines in the color gray.~ - Inside source: true *** True Line Result # Calculates the positions and outputs the x grid lines in the color gray. ** Processing line: ~ state.gridX.map do # perform an action on all elements of the gridX collection~ - Inside source: true *** True Line Result state.gridX.map do # perform an action on all elements of the gridX collection ** Processing line: ~ |x|~ - Inside source: true *** True Line Result |x| ** Processing line: ~ temp += 1 # increment temp~ - Inside source: true *** True Line Result temp += 1 # increment temp ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if x's value is greater than (or equal to) the x value of the border's left side~ - Inside source: true *** True Line Result # if x's value is greater than (or equal to) the x value of the border's left side ** Processing line: ~ # and less than (or equal to) the x value of the border's right side~ - Inside source: true *** True Line Result # and less than (or equal to) the x value of the border's right side ** Processing line: ~ if x >= state.centerX - (state.grid_border[2] / 2) && x <= state.centerX + (state.grid_border[2] / 2)~ - Inside source: true *** True Line Result if x >= state.centerX - (state.grid_border[2] / 2) && x <= state.centerX + (state.grid_border[2] / 2) ** Processing line: ~ delta = state.centerX - 640~ - Inside source: true *** True Line Result delta = state.centerX - 640 ** Processing line: ~ # vertical lines have the same starting and ending x positions~ - Inside source: true *** True Line Result # vertical lines have the same starting and ending x positions ** Processing line: ~ # starting y and ending y positions lead from the bottom of the border to the top of the border~ - Inside source: true *** True Line Result # starting y and ending y positions lead from the bottom of the border to the top of the border ** Processing line: ~ outputs.lines << [x - delta, state.grid_border[1], x - delta, state.grid_border[1] + state.grid_border[2], 150, 150, 150] # sets definition of vertical line and outputs it~ - Inside source: true *** True Line Result outputs.lines << [x - delta, state.grid_border[1], x - delta, state.grid_border[1] + state.grid_border[2], 150, 150, 150] # sets definition of vertical line and outputs it ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ temp = 0~ - Inside source: true *** True Line Result temp = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calculates the positions and outputs the y grid lines in the color gray.~ - Inside source: true *** True Line Result # Calculates the positions and outputs the y grid lines in the color gray. ** Processing line: ~ state.gridY.map do # perform an action on all elements of the gridY collection~ - Inside source: true *** True Line Result state.gridY.map do # perform an action on all elements of the gridY collection ** Processing line: ~ |y|~ - Inside source: true *** True Line Result |y| ** Processing line: ~ temp += 1 # increment temp~ - Inside source: true *** True Line Result temp += 1 # increment temp ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if y's value is greater than (or equal to) the y value of the border's bottom side~ - Inside source: true *** True Line Result # if y's value is greater than (or equal to) the y value of the border's bottom side ** Processing line: ~ # and less than (or equal to) the y value of the border's top side~ - Inside source: true *** True Line Result # and less than (or equal to) the y value of the border's top side ** Processing line: ~ if y >= state.centerY - (state.grid_border[3] / 2) && y <= state.centerY + (state.grid_border[3] / 2)~ - Inside source: true *** True Line Result if y >= state.centerY - (state.grid_border[3] / 2) && y <= state.centerY + (state.grid_border[3] / 2) ** Processing line: ~ delta = state.centerY - 393~ - Inside source: true *** True Line Result delta = state.centerY - 393 ** Processing line: ~ # horizontal lines have the same starting and ending y positions~ - Inside source: true *** True Line Result # horizontal lines have the same starting and ending y positions ** Processing line: ~ # starting x and ending x positions lead from the left side of the border to the right side of the border~ - Inside source: true *** True Line Result # starting x and ending x positions lead from the left side of the border to the right side of the border ** Processing line: ~ outputs.lines << [state.grid_border[0], y - delta, state.grid_border[0] + state.grid_border[3], y - delta, 150, 150, 150] # sets definition of horizontal line and outputs it~ - Inside source: true *** True Line Result outputs.lines << [state.grid_border[0], y - delta, state.grid_border[0] + state.grid_border[3], y - delta, 150, 150, 150] # sets definition of horizontal line and outputs it ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets values and outputs sprites for the filled_squares collection.~ - Inside source: true *** True Line Result # Sets values and outputs sprites for the filled_squares collection. ** Processing line: ~ state.filled_squares.map do # perform an action on every element of the filled_squares collection~ - Inside source: true *** True Line Result state.filled_squares.map do # perform an action on every element of the filled_squares collection ** Processing line: ~ |x, y, w, h, sprite|~ - Inside source: true *** True Line Result |x, y, w, h, sprite| ** Processing line: ~ # if x's value is greater than (or equal to) the x value of 17 pixels to the left of the border's left side~ - Inside source: true *** True Line Result # if x's value is greater than (or equal to) the x value of 17 pixels to the left of the border's left side ** Processing line: ~ # and less than (or equal to) the x value of the border's right side~ - Inside source: true *** True Line Result # and less than (or equal to) the x value of the border's right side ** Processing line: ~ # and y's value is greater than (or equal to) the y value of the border's bottom side~ - Inside source: true *** True Line Result # and y's value is greater than (or equal to) the y value of the border's bottom side ** Processing line: ~ # and less than (or equal to) the y value of 25 pixels above the border's top side~ - Inside source: true *** True Line Result # and less than (or equal to) the y value of 25 pixels above the border's top side ** Processing line: ~ # NOTE: The allowance of 17 pixels and 25 pixels is due to the fact that a grid box may be slightly cut off or~ - Inside source: true *** True Line Result # NOTE: The allowance of 17 pixels and 25 pixels is due to the fact that a grid box may be slightly cut off or ** Processing line: ~ # not entirely visible in the grid's view (until it is moved using "W", "A", "S", "D")~ - Inside source: true *** True Line Result # not entirely visible in the grid's view (until it is moved using "W", "A", "S", "D") ** Processing line: ~ if x >= state.centerX - (state.grid_border[2] / 2) - 17 && x <= state.centerX + (state.grid_border[2] / 2) &&~ - Inside source: true *** True Line Result if x >= state.centerX - (state.grid_border[2] / 2) - 17 && x <= state.centerX + (state.grid_border[2] / 2) && ** Processing line: ~ y >= state.centerY - (state.grid_border[3] / 2) && y <= state.centerY + (state.grid_border[3] / 2) + 25~ - Inside source: true *** True Line Result y >= state.centerY - (state.grid_border[3] / 2) && y <= state.centerY + (state.grid_border[3] / 2) + 25 ** Processing line: ~ # calculations done to place sprites in grid spaces that are meant to filled in~ - Inside source: true *** True Line Result # calculations done to place sprites in grid spaces that are meant to filled in ** Processing line: ~ # mess around with the x and y values and see how the sprite placement changes~ - Inside source: true *** True Line Result # mess around with the x and y values and see how the sprite placement changes ** Processing line: ~ outputs.sprites << [x - state.centerX + 630, y - state.centerY + 360, w, h, sprite]~ - Inside source: true *** True Line Result outputs.sprites << [x - state.centerX + 630, y - state.centerY + 360, w, h, sprite] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # outputs a white solid along the left side of the grid (change the color and you'll be able to see it against the white background)~ - Inside source: true *** True Line Result # outputs a white solid along the left side of the grid (change the color and you'll be able to see it against the white background) ** Processing line: ~ # state.increment subtracted in x parameter because solid's position is denoted by bottom left corner~ - Inside source: true *** True Line Result # state.increment subtracted in x parameter because solid's position is denoted by bottom left corner ** Processing line: ~ # state.increment subtracted in y parameter to avoid covering the title label~ - Inside source: true *** True Line Result # state.increment subtracted in y parameter to avoid covering the title label ** Processing line: ~ outputs.primitives << [state.grid_border[0] - state.increment,~ - Inside source: true *** True Line Result outputs.primitives << [state.grid_border[0] - state.increment, ** Processing line: ~ state.grid_border[1] - state.increment, state.increment, state.grid_border[3] + (state.increment * 2),~ - Inside source: true *** True Line Result state.grid_border[1] - state.increment, state.increment, state.grid_border[3] + (state.increment * 2), ** Processing line: ~ 255, 255, 255].solid~ - Inside source: true *** True Line Result 255, 255, 255].solid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # outputs a white solid along the right side of the grid~ - Inside source: true *** True Line Result # outputs a white solid along the right side of the grid ** Processing line: ~ # state.increment subtracted from y parameter to avoid covering title label~ - Inside source: true *** True Line Result # state.increment subtracted from y parameter to avoid covering title label ** Processing line: ~ outputs.primitives << [state.grid_border[0] + state.grid_border[2],~ - Inside source: true *** True Line Result outputs.primitives << [state.grid_border[0] + state.grid_border[2], ** Processing line: ~ state.grid_border[1] - state.increment, state.increment, state.grid_border[3] + (state.increment * 2),~ - Inside source: true *** True Line Result state.grid_border[1] - state.increment, state.increment, state.grid_border[3] + (state.increment * 2), ** Processing line: ~ 255, 255, 255].solid~ - Inside source: true *** True Line Result 255, 255, 255].solid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # outputs a white solid along the bottom of the grid~ - Inside source: true *** True Line Result # outputs a white solid along the bottom of the grid ** Processing line: ~ # state.increment subtracted from y parameter to avoid covering last row of grid boxes~ - Inside source: true *** True Line Result # state.increment subtracted from y parameter to avoid covering last row of grid boxes ** Processing line: ~ outputs.primitives << [state.grid_border[0] - state.increment, state.grid_border[1] - state.increment,~ - Inside source: true *** True Line Result outputs.primitives << [state.grid_border[0] - state.increment, state.grid_border[1] - state.increment, ** Processing line: ~ state.grid_border[2] + (2 * state.increment), state.increment, 255, 255, 255].solid~ - Inside source: true *** True Line Result state.grid_border[2] + (2 * state.increment), state.increment, 255, 255, 255].solid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # outputs a white solid along the top of the grid~ - Inside source: true *** True Line Result # outputs a white solid along the top of the grid ** Processing line: ~ outputs.primitives << [state.grid_border[0] - state.increment, state.grid_border[1] + state.grid_border[3],~ - Inside source: true *** True Line Result outputs.primitives << [state.grid_border[0] - state.increment, state.grid_border[1] + state.grid_border[3], ** Processing line: ~ state.grid_border[2] + (2 * state.increment), state.increment, 255, 255, 255].solid~ - Inside source: true *** True Line Result state.grid_border[2] + (2 * state.increment), state.increment, 255, 255, 255].solid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs title and current tile pattern~ - Inside source: true *** True Line Result # Outputs title and current tile pattern ** Processing line: ~ def print_title~ - Inside source: true *** True Line Result def print_title ** Processing line: ~ outputs.labels << [640, 700, 'Mouse to Place Tile, WASD to Move Around', 7, 1] # title label~ - Inside source: true *** True Line Result outputs.labels << [640, 700, 'Mouse to Place Tile, WASD to Move Around', 7, 1] # title label ** Processing line: ~ outputs.lines << horizontal_separator(660, 0, 1280) # outputs horizontal separator~ - Inside source: true *** True Line Result outputs.lines << horizontal_separator(660, 0, 1280) # outputs horizontal separator ** Processing line: ~ outputs.labels << [1050, 500, 'Current:', 3, 1] # outputs Current label~ - Inside source: true *** True Line Result outputs.labels << [1050, 500, 'Current:', 3, 1] # outputs Current label ** Processing line: ~ outputs.sprites << [1110, 474, state.tileSize / 2, state.tileSize / 2, 'sprites/image' + state.tileSelected.to_s + ".png"] # outputs sprite of current tile pattern using images in sprites folder; output is half the size of a tile~ - Inside source: true *** True Line Result outputs.sprites << [1110, 474, state.tileSize / 2, state.tileSize / 2, 'sprites/image' + state.tileSelected.to_s + ".png"] # outputs sprite of current tile pattern using images in sprites folder; output is half the size of a tile ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the starting position, ending position, and color for the horizontal separator.~ - Inside source: true *** True Line Result # Sets the starting position, ending position, and color for the horizontal separator. ** Processing line: ~ def horizontal_separator y, x, x2~ - Inside source: true *** True Line Result def horizontal_separator y, x, x2 ** Processing line: ~ [x, y, x2, y, 150, 150, 150] # definition of separator; horizontal line means same starting/ending y~ - Inside source: true *** True Line Result [x, y, x2, y, 150, 150, 150] # definition of separator; horizontal line means same starting/ending y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Checks if the mouse is being clicked or dragged~ - Inside source: true *** True Line Result # Checks if the mouse is being clicked or dragged ** Processing line: ~ def check_click~ - Inside source: true *** True Line Result def check_click ** Processing line: ~ if inputs.keyboard.key_down.r # if the "r" key is pressed down~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.r # if the "r" key is pressed down ** Processing line: ~ $dragon.reset~ - Inside source: true *** True Line Result $dragon.reset ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.mouse.down #is mouse up or down?~ - Inside source: true *** True Line Result if inputs.mouse.down #is mouse up or down? ** Processing line: ~ state.mouse_held = true~ - Inside source: true *** True Line Result state.mouse_held = true ** Processing line: ~ if inputs.mouse.position.x < state.grid_border[0] # if mouse's x position is inside the grid's borders~ - Inside source: true *** True Line Result if inputs.mouse.position.x < state.grid_border[0] # if mouse's x position is inside the grid's borders ** Processing line: ~ state.tileCords.map do # perform action on all elements of tileCords collection~ - Inside source: true *** True Line Result state.tileCords.map do # perform action on all elements of tileCords collection ** Processing line: ~ |x, y, order|~ - Inside source: true *** True Line Result |x, y, order| ** Processing line: ~ # if mouse's x position is greater than (or equal to) the starting x position of a tile~ - Inside source: true *** True Line Result # if mouse's x position is greater than (or equal to) the starting x position of a tile ** Processing line: ~ # and the mouse's x position is also less than (or equal to) the ending x position of that tile,~ - Inside source: true *** True Line Result # and the mouse's x position is also less than (or equal to) the ending x position of that tile, ** Processing line: ~ # and the mouse's y position is greater than (or equal to) the starting y position of that tile,~ - Inside source: true *** True Line Result # and the mouse's y position is greater than (or equal to) the starting y position of that tile, ** Processing line: ~ # and the mouse's y position is also less than (or equal to) the ending y position of that tile,~ - Inside source: true *** True Line Result # and the mouse's y position is also less than (or equal to) the ending y position of that tile, ** Processing line: ~ # (BASICALLY, IF THE MOUSE'S POSITION IS WITHIN THE STARTING AND ENDING POSITIONS OF A TILE)~ - Inside source: true *** True Line Result # (BASICALLY, IF THE MOUSE'S POSITION IS WITHIN THE STARTING AND ENDING POSITIONS OF A TILE) ** Processing line: ~ if inputs.mouse.position.x >= x && inputs.mouse.position.x <= x + state.tileSize &&~ - Inside source: true *** True Line Result if inputs.mouse.position.x >= x && inputs.mouse.position.x <= x + state.tileSize && ** Processing line: ~ inputs.mouse.position.y >= y && inputs.mouse.position.y <= y + state.tileSize~ - Inside source: true *** True Line Result inputs.mouse.position.y >= y && inputs.mouse.position.y <= y + state.tileSize ** Processing line: ~ state.tileSelected = order # that tile is selected~ - Inside source: true *** True Line Result state.tileSelected = order # that tile is selected ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif inputs.mouse.up # otherwise, if the mouse is in the "up" state~ - Inside source: true *** True Line Result elsif inputs.mouse.up # otherwise, if the mouse is in the "up" state ** Processing line: ~ state.mouse_held = false # mouse is not held down or dragged~ - Inside source: true *** True Line Result state.mouse_held = false # mouse is not held down or dragged ** Processing line: ~ state.mouse_dragging = false~ - Inside source: true *** True Line Result state.mouse_dragging = false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.mouse_held && # mouse needs to be down~ - Inside source: true *** True Line Result if state.mouse_held && # mouse needs to be down ** Processing line: ~ !inputs.mouse.click && # must not be first click~ - Inside source: true *** True Line Result !inputs.mouse.click && # must not be first click ** Processing line: ~ ((inputs.mouse.previous_click.point.x - inputs.mouse.position.x).abs > 15 ||~ - Inside source: true *** True Line Result ((inputs.mouse.previous_click.point.x - inputs.mouse.position.x).abs > 15 || ** Processing line: ~ (inputs.mouse.previous_click.point.y - inputs.mouse.position.y).abs > 15) # Need to move 15 pixels before "drag"~ - Inside source: true *** True Line Result (inputs.mouse.previous_click.point.y - inputs.mouse.position.y).abs > 15) # Need to move 15 pixels before "drag" ** Processing line: ~ state.mouse_dragging = true~ - Inside source: true *** True Line Result state.mouse_dragging = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if mouse is clicked inside grid's border, search_lines method is called with click input type~ - Inside source: true *** True Line Result # if mouse is clicked inside grid's border, search_lines method is called with click input type ** Processing line: ~ if ((inputs.mouse.click) && (inputs.mouse.click.point.inside_rect? state.grid_border))~ - Inside source: true *** True Line Result if ((inputs.mouse.click) && (inputs.mouse.click.point.inside_rect? state.grid_border)) ** Processing line: ~ search_lines(inputs.mouse.click.point, :click)~ - Inside source: true *** True Line Result search_lines(inputs.mouse.click.point, :click) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if mouse is dragged inside grid's border, search_lines method is called with drag input type~ - Inside source: true *** True Line Result # if mouse is dragged inside grid's border, search_lines method is called with drag input type ** Processing line: ~ elsif ((state.mouse_dragging) && (inputs.mouse.position.inside_rect? state.grid_border))~ - Inside source: true *** True Line Result elsif ((state.mouse_dragging) && (inputs.mouse.position.inside_rect? state.grid_border)) ** Processing line: ~ search_lines(inputs.mouse.position, :drag)~ - Inside source: true *** True Line Result search_lines(inputs.mouse.position, :drag) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Changes grid's position on screen by moving it up, down, left, or right.~ - Inside source: true *** True Line Result # Changes grid's position on screen by moving it up, down, left, or right. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # centerX is incremented by speed if the "d" key is pressed and if that sum is less than~ - Inside source: true *** True Line Result # centerX is incremented by speed if the "d" key is pressed and if that sum is less than ** Processing line: ~ # the original left side of the center plus half the grid, minus half the top border of grid.~ - Inside source: true *** True Line Result # the original left side of the center plus half the grid, minus half the top border of grid. ** Processing line: ~ # MOVES GRID RIGHT (increasing x)~ - Inside source: true *** True Line Result # MOVES GRID RIGHT (increasing x) ** Processing line: ~ state.centerX += state.speed if inputs.keyboard.key_held.d &&~ - Inside source: true *** True Line Result state.centerX += state.speed if inputs.keyboard.key_held.d && ** Processing line: ~ (state.centerX + state.speed) < state.originalCenter[0] + (state.gridSize / 2) - (state.grid_border[2] / 2)~ - Inside source: true *** True Line Result (state.centerX + state.speed) < state.originalCenter[0] + (state.gridSize / 2) - (state.grid_border[2] / 2) ** Processing line: ~ # centerX is decremented by speed if the "a" key is pressed and if that difference is greater than~ - Inside source: true *** True Line Result # centerX is decremented by speed if the "a" key is pressed and if that difference is greater than ** Processing line: ~ # the original left side of the center minus half the grid, plus half the top border of grid.~ - Inside source: true *** True Line Result # the original left side of the center minus half the grid, plus half the top border of grid. ** Processing line: ~ # MOVES GRID LEFT (decreasing x)~ - Inside source: true *** True Line Result # MOVES GRID LEFT (decreasing x) ** Processing line: ~ state.centerX -= state.speed if inputs.keyboard.key_held.a &&~ - Inside source: true *** True Line Result state.centerX -= state.speed if inputs.keyboard.key_held.a && ** Processing line: ~ (state.centerX - state.speed) > state.originalCenter[0] - (state.gridSize / 2) + (state.grid_border[2] / 2)~ - Inside source: true *** True Line Result (state.centerX - state.speed) > state.originalCenter[0] - (state.gridSize / 2) + (state.grid_border[2] / 2) ** Processing line: ~ # centerY is incremented by speed if the "w" key is pressed and if that sum is less than~ - Inside source: true *** True Line Result # centerY is incremented by speed if the "w" key is pressed and if that sum is less than ** Processing line: ~ # the original bottom of the center plus half the grid, minus half the right border of grid.~ - Inside source: true *** True Line Result # the original bottom of the center plus half the grid, minus half the right border of grid. ** Processing line: ~ # MOVES GRID UP (increasing y)~ - Inside source: true *** True Line Result # MOVES GRID UP (increasing y) ** Processing line: ~ state.centerY += state.speed if inputs.keyboard.key_held.w &&~ - Inside source: true *** True Line Result state.centerY += state.speed if inputs.keyboard.key_held.w && ** Processing line: ~ (state.centerY + state.speed) < state.originalCenter[1] + (state.gridSize / 2) - (state.grid_border[3] / 2)~ - Inside source: true *** True Line Result (state.centerY + state.speed) < state.originalCenter[1] + (state.gridSize / 2) - (state.grid_border[3] / 2) ** Processing line: ~ # centerY is decremented by speed if the "s" key is pressed and if the difference is greater than~ - Inside source: true *** True Line Result # centerY is decremented by speed if the "s" key is pressed and if the difference is greater than ** Processing line: ~ # the original bottom of the center minus half the grid, plus half the right border of grid.~ - Inside source: true *** True Line Result # the original bottom of the center minus half the grid, plus half the right border of grid. ** Processing line: ~ # MOVES GRID DOWN (decreasing y)~ - Inside source: true *** True Line Result # MOVES GRID DOWN (decreasing y) ** Processing line: ~ state.centerY -= state.speed if inputs.keyboard.key_held.s &&~ - Inside source: true *** True Line Result state.centerY -= state.speed if inputs.keyboard.key_held.s && ** Processing line: ~ (state.centerY - state.speed) > state.originalCenter[1] - (state.gridSize / 2) + (state.grid_border[3] / 2)~ - Inside source: true *** True Line Result (state.centerY - state.speed) > state.originalCenter[1] - (state.gridSize / 2) + (state.grid_border[3] / 2) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Performs calculations on the gridX and gridY collections, and sets values.~ - Inside source: true *** True Line Result # Performs calculations on the gridX and gridY collections, and sets values. ** Processing line: ~ # Sets the definition of a grid box, including the image that it is filled with.~ - Inside source: true *** True Line Result # Sets the definition of a grid box, including the image that it is filled with. ** Processing line: ~ def search_lines (point, input_type)~ - Inside source: true *** True Line Result def search_lines (point, input_type) ** Processing line: ~ point.x += state.centerX - 630 # increments x and y~ - Inside source: true *** True Line Result point.x += state.centerX - 630 # increments x and y ** Processing line: ~ point.y += state.centerY - 360~ - Inside source: true *** True Line Result point.y += state.centerY - 360 ** Processing line: ~ findX = 0~ - Inside source: true *** True Line Result findX = 0 ** Processing line: ~ findY = 0~ - Inside source: true *** True Line Result findY = 0 ** Processing line: ~ increment = state.gridSize / state.lineQuantity # divides grid by number of separators~ - Inside source: true *** True Line Result increment = state.gridSize / state.lineQuantity # divides grid by number of separators ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.gridX.map do # perform an action on every element of collection~ - Inside source: true *** True Line Result state.gridX.map do # perform an action on every element of collection ** Processing line: ~ |x|~ - Inside source: true *** True Line Result |x| ** Processing line: ~ # findX increments x by 10 if point.x is less than that sum and findX is currently 0~ - Inside source: true *** True Line Result # findX increments x by 10 if point.x is less than that sum and findX is currently 0 ** Processing line: ~ findX = x + 10 if point.x < (x + 10) && findX == 0~ - Inside source: true *** True Line Result findX = x + 10 if point.x < (x + 10) && findX == 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.gridY.map do~ - Inside source: true *** True Line Result state.gridY.map do ** Processing line: ~ |y|~ - Inside source: true *** True Line Result |y| ** Processing line: ~ # findY is set to y if point.y is less than that value and findY is currently 0~ - Inside source: true *** True Line Result # findY is set to y if point.y is less than that value and findY is currently 0 ** Processing line: ~ findY = y if point.y < (y) && findY == 0~ - Inside source: true *** True Line Result findY = y if point.y < (y) && findY == 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ # position of a box is denoted by bottom left corner, which is why the increment is being subtracted~ - Inside source: true *** True Line Result # position of a box is denoted by bottom left corner, which is why the increment is being subtracted ** Processing line: ~ grid_box = [findX - (increment.ceil), findY - (increment.ceil), increment.ceil, increment.ceil,~ - Inside source: true *** True Line Result grid_box = [findX - (increment.ceil), findY - (increment.ceil), increment.ceil, increment.ceil, ** Processing line: ~ "sprites/image" + state.tileSelected.to_s + ".png"] # sets sprite definition~ - Inside source: true *** True Line Result "sprites/image" + state.tileSelected.to_s + ".png"] # sets sprite definition ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if input_type == :click # if user clicks their mouse~ - Inside source: true *** True Line Result if input_type == :click # if user clicks their mouse ** Processing line: ~ if state.filled_squares.include? grid_box # if grid box is already filled in~ - Inside source: true *** True Line Result if state.filled_squares.include? grid_box # if grid box is already filled in ** Processing line: ~ state.filled_squares.delete grid_box # box is cleared and removed from filled_squares~ - Inside source: true *** True Line Result state.filled_squares.delete grid_box # box is cleared and removed from filled_squares ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.filled_squares << grid_box # otherwise, box is filled in and added to filled_squares~ - Inside source: true *** True Line Result state.filled_squares << grid_box # otherwise, box is filled in and added to filled_squares ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif input_type == :drag # if user drags mouse~ - Inside source: true *** True Line Result elsif input_type == :drag # if user drags mouse ** Processing line: ~ unless state.filled_squares.include? grid_box # unless grid box dragged over is already filled in~ - Inside source: true *** True Line Result unless state.filled_squares.include? grid_box # unless grid box dragged over is already filled in ** Processing line: ~ state.filled_squares << grid_box # box is filled in and added to filled_squares~ - Inside source: true *** True Line Result state.filled_squares << grid_box # box is filled in and added to filled_squares ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates a "Clear" button using labels and borders.~ - Inside source: true *** True Line Result # Creates a "Clear" button using labels and borders. ** Processing line: ~ def draw_buttons~ - Inside source: true *** True Line Result def draw_buttons ** Processing line: ~ x, y, w, h = 390, 50, 240, 50~ - Inside source: true *** True Line Result x, y, w, h = 390, 50, 240, 50 ** Processing line: ~ state.clear_button ||= state.new_entity(:button_with_fade)~ - Inside source: true *** True Line Result state.clear_button ||= state.new_entity(:button_with_fade) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # x and y positions are set to display "Clear" label in center of the button~ - Inside source: true *** True Line Result # x and y positions are set to display "Clear" label in center of the button ** Processing line: ~ # Try changing first two parameters to simply x, y and see what happens to the text placement~ - Inside source: true *** True Line Result # Try changing first two parameters to simply x, y and see what happens to the text placement ** Processing line: ~ state.clear_button.label ||= [x + w.half, y + h.half + 10, "Clear", 0, 1]~ - Inside source: true *** True Line Result state.clear_button.label ||= [x + w.half, y + h.half + 10, "Clear", 0, 1] ** Processing line: ~ state.clear_button.border ||= [x, y, w, h] # definition of button's border~ - Inside source: true *** True Line Result state.clear_button.border ||= [x, y, w, h] # definition of button's border ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the mouse is clicked inside the borders of the clear button~ - Inside source: true *** True Line Result # If the mouse is clicked inside the borders of the clear button ** Processing line: ~ if inputs.mouse.click && inputs.mouse.click.point.inside_rect?(state.clear_button.border)~ - Inside source: true *** True Line Result if inputs.mouse.click && inputs.mouse.click.point.inside_rect?(state.clear_button.border) ** Processing line: ~ state.clear_button.clicked_at = inputs.mouse.click.created_at # value is frame of mouse click~ - Inside source: true *** True Line Result state.clear_button.clicked_at = inputs.mouse.click.created_at # value is frame of mouse click ** Processing line: ~ state.filled_squares.clear # filled squares collection is emptied (squares are cleared)~ - Inside source: true *** True Line Result state.filled_squares.clear # filled squares collection is emptied (squares are cleared) ** Processing line: ~ inputs.mouse.previous_click = nil # no previous click~ - Inside source: true *** True Line Result inputs.mouse.previous_click = nil # no previous click ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << state.clear_button.label # outputs clear button~ - Inside source: true *** True Line Result outputs.labels << state.clear_button.label # outputs clear button ** Processing line: ~ outputs.borders << state.clear_button.border~ - Inside source: true *** True Line Result outputs.borders << state.clear_button.border ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # When the clear button is clicked, the color of the button changes~ - Inside source: true *** True Line Result # When the clear button is clicked, the color of the button changes ** Processing line: ~ # and the transparency changes, as well. If you change the time from~ - Inside source: true *** True Line Result # and the transparency changes, as well. If you change the time from ** Processing line: ~ # 0.25.seconds to 1.25.seconds or more, the change will last longer.~ - Inside source: true *** True Line Result # 0.25.seconds to 1.25.seconds or more, the change will last longer. ** Processing line: ~ if state.clear_button.clicked_at~ - Inside source: true *** True Line Result if state.clear_button.clicked_at ** Processing line: ~ outputs.solids << [x, y, w, h, 0, 180, 80, 255 * state.clear_button.clicked_at.ease(0.25.seconds, :flip)]~ - Inside source: true *** True Line Result outputs.solids << [x, y, w, h, 0, 180, 80, 255 * state.clear_button.clicked_at.ease(0.25.seconds, :flip)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $tile_editor = TileEditor.new~ - Inside source: true *** True Line Result $tile_editor = TileEditor.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $tile_editor.inputs = args.inputs~ - Inside source: true *** True Line Result $tile_editor.inputs = args.inputs ** Processing line: ~ $tile_editor.grid = args.grid~ - Inside source: true *** True Line Result $tile_editor.grid = args.grid ** Processing line: ~ $tile_editor.args = args~ - Inside source: true *** True Line Result $tile_editor.args = args ** Processing line: ~ $tile_editor.outputs = args.outputs~ - Inside source: true *** True Line Result $tile_editor.outputs = args.outputs ** Processing line: ~ $tile_editor.state = args.state~ - Inside source: true *** True Line Result $tile_editor.state = args.state ** Processing line: ~ $tile_editor.tick~ - Inside source: true *** True Line Result $tile_editor.tick ** Processing line: ~ tick_instructions args, "Roll your own tile editor. CLICK to select a sprite. CLICK in grid to place sprite. WASD to move around."~ - Inside source: true *** True Line Result tick_instructions args, "Roll your own tile editor. CLICK to select a sprite. CLICK in grid to place sprite. WASD to move around." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Dungeon Crawl - Classics Jam - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Dungeon Crawl - Classics Jam - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_dungeon_crawl/classics_jam/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_dungeon_crawl/classics_jam/app/main.rb ** Processing line: ~ class Game~ - Inside source: true *** True Line Result class Game ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ player.x ||= 640~ - Inside source: true *** True Line Result player.x ||= 640 ** Processing line: ~ player.y ||= 360~ - Inside source: true *** True Line Result player.y ||= 360 ** Processing line: ~ player.w ||= 16~ - Inside source: true *** True Line Result player.w ||= 16 ** Processing line: ~ player.h ||= 16~ - Inside source: true *** True Line Result player.h ||= 16 ** Processing line: ~ player.attacked_at ||= -1~ - Inside source: true *** True Line Result player.attacked_at ||= -1 ** Processing line: ~ player.angle ||= 0~ - Inside source: true *** True Line Result player.angle ||= 0 ** Processing line: ~ player.future_player ||= future_player_position 0, 0~ - Inside source: true *** True Line Result player.future_player ||= future_player_position 0, 0 ** Processing line: ~ player.projectiles ||= []~ - Inside source: true *** True Line Result player.projectiles ||= [] ** Processing line: ~ player.damage ||= 0~ - Inside source: true *** True Line Result player.damage ||= 0 ** Processing line: ~ state.level ||= create_level level_one_template~ - Inside source: true *** True Line Result state.level ||= create_level level_one_template ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ outputs.sprites << level.walls.map do |w|~ - Inside source: true *** True Line Result outputs.sprites << level.walls.map do |w| ** Processing line: ~ w.merge(path: 'sprites/square/gray.png')~ - Inside source: true *** True Line Result w.merge(path: 'sprites/square/gray.png') ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.sprites << level.spawn_locations.map do |s|~ - Inside source: true *** True Line Result outputs.sprites << level.spawn_locations.map do |s| ** Processing line: ~ s.merge(path: 'sprites/square/blue.png')~ - Inside source: true *** True Line Result s.merge(path: 'sprites/square/blue.png') ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.sprites << player.projectiles.map do |p|~ - Inside source: true *** True Line Result outputs.sprites << player.projectiles.map do |p| ** Processing line: ~ p.merge(path: 'sprites/square/blue.png')~ - Inside source: true *** True Line Result p.merge(path: 'sprites/square/blue.png') ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.sprites << level.enemies.map do |e|~ - Inside source: true *** True Line Result outputs.sprites << level.enemies.map do |e| ** Processing line: ~ e.merge(path: 'sprites/square/red.png')~ - Inside source: true *** True Line Result e.merge(path: 'sprites/square/red.png') ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.sprites << player.merge(path: 'sprites/circle/green.png', angle: player.angle)~ - Inside source: true *** True Line Result outputs.sprites << player.merge(path: 'sprites/circle/green.png', angle: player.angle) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << { x: 30, y: 30.from_top, text: "damage: #{player.damage || 0}" }~ - Inside source: true *** True Line Result outputs.labels << { x: 30, y: 30.from_top, text: "damage: #{player.damage || 0}" } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ player.angle = inputs.directional_angle || player.angle~ - Inside source: true *** True Line Result player.angle = inputs.directional_angle || player.angle ** Processing line: ~ if inputs.controller_one.key_down.a || inputs.keyboard.key_down.space~ - Inside source: true *** True Line Result if inputs.controller_one.key_down.a || inputs.keyboard.key_down.space ** Processing line: ~ player.attacked_at = state.tick_count~ - Inside source: true *** True Line Result player.attacked_at = state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ calc_player~ - Inside source: true *** True Line Result calc_player ** Processing line: ~ calc_projectiles~ - Inside source: true *** True Line Result calc_projectiles ** Processing line: ~ calc_enemies~ - Inside source: true *** True Line Result calc_enemies ** Processing line: ~ calc_spawn_locations~ - Inside source: true *** True Line Result calc_spawn_locations ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_player~ - Inside source: true *** True Line Result def calc_player ** Processing line: ~ if player.attacked_at == state.tick_count~ - Inside source: true *** True Line Result if player.attacked_at == state.tick_count ** Processing line: ~ player.projectiles << { at: state.tick_count,~ - Inside source: true *** True Line Result player.projectiles << { at: state.tick_count, ** Processing line: ~ x: player.x,~ - Inside source: true *** True Line Result x: player.x, ** Processing line: ~ y: player.y,~ - Inside source: true *** True Line Result y: player.y, ** Processing line: ~ angle: player.angle,~ - Inside source: true *** True Line Result angle: player.angle, ** Processing line: ~ w: 4,~ - Inside source: true *** True Line Result w: 4, ** Processing line: ~ h: 4 }.center_inside_rect(player)~ - Inside source: true *** True Line Result h: 4 }.center_inside_rect(player) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if player.attacked_at.elapsed_time > 5~ - Inside source: true *** True Line Result if player.attacked_at.elapsed_time > 5 ** Processing line: ~ future_player = future_player_position inputs.left_right * 2, inputs.up_down * 2~ - Inside source: true *** True Line Result future_player = future_player_position inputs.left_right * 2, inputs.up_down * 2 ** Processing line: ~ future_player_collision = future_collision player, future_player, level.walls~ - Inside source: true *** True Line Result future_player_collision = future_collision player, future_player, level.walls ** Processing line: ~ player.x = future_player_collision.x if !future_player_collision.dx_collision~ - Inside source: true *** True Line Result player.x = future_player_collision.x if !future_player_collision.dx_collision ** Processing line: ~ player.y = future_player_collision.y if !future_player_collision.dy_collision~ - Inside source: true *** True Line Result player.y = future_player_collision.y if !future_player_collision.dy_collision ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_projectile_collisions entities~ - Inside source: true *** True Line Result def calc_projectile_collisions entities ** Processing line: ~ entities.each do |e|~ - Inside source: true *** True Line Result entities.each do |e| ** Processing line: ~ e.damage ||= 0~ - Inside source: true *** True Line Result e.damage ||= 0 ** Processing line: ~ player.projectiles.each do |p|~ - Inside source: true *** True Line Result player.projectiles.each do |p| ** Processing line: ~ if !p.collided && (p.intersect_rect? e)~ - Inside source: true *** True Line Result if !p.collided && (p.intersect_rect? e) ** Processing line: ~ p.collided = true~ - Inside source: true *** True Line Result p.collided = true ** Processing line: ~ e.damage += 1~ - Inside source: true *** True Line Result e.damage += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_projectiles~ - Inside source: true *** True Line Result def calc_projectiles ** Processing line: ~ player.projectiles.map! do |p|~ - Inside source: true *** True Line Result player.projectiles.map! do |p| ** Processing line: ~ dx, dy = p.angle.vector 10~ - Inside source: true *** True Line Result dx, dy = p.angle.vector 10 ** Processing line: ~ p.merge(x: p.x + dx, y: p.y + dy)~ - Inside source: true *** True Line Result p.merge(x: p.x + dx, y: p.y + dy) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ calc_projectile_collisions level.walls + level.enemies + level.spawn_locations~ - Inside source: true *** True Line Result calc_projectile_collisions level.walls + level.enemies + level.spawn_locations ** Processing line: ~ player.projectiles.reject! { |p| p.at.elapsed_time > 10000 }~ - Inside source: true *** True Line Result player.projectiles.reject! { |p| p.at.elapsed_time > 10000 } ** Processing line: ~ player.projectiles.reject! { |p| p.collided }~ - Inside source: true *** True Line Result player.projectiles.reject! { |p| p.collided } ** Processing line: ~ level.enemies.reject! { |e| e.damage > e.hp }~ - Inside source: true *** True Line Result level.enemies.reject! { |e| e.damage > e.hp } ** Processing line: ~ level.spawn_locations.reject! { |s| s.damage > s.hp }~ - Inside source: true *** True Line Result level.spawn_locations.reject! { |s| s.damage > s.hp } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_enemies~ - Inside source: true *** True Line Result def calc_enemies ** Processing line: ~ level.enemies.map! do |e|~ - Inside source: true *** True Line Result level.enemies.map! do |e| ** Processing line: ~ dx = 0~ - Inside source: true *** True Line Result dx = 0 ** Processing line: ~ dx = 1 if e.x < player.x~ - Inside source: true *** True Line Result dx = 1 if e.x < player.x ** Processing line: ~ dx = -1 if e.x > player.x~ - Inside source: true *** True Line Result dx = -1 if e.x > player.x ** Processing line: ~ dy = 0~ - Inside source: true *** True Line Result dy = 0 ** Processing line: ~ dy = 1 if e.y < player.y~ - Inside source: true *** True Line Result dy = 1 if e.y < player.y ** Processing line: ~ dy = -1 if e.y > player.y~ - Inside source: true *** True Line Result dy = -1 if e.y > player.y ** Processing line: ~ future_e = future_entity_position dx, dy, e~ - Inside source: true *** True Line Result future_e = future_entity_position dx, dy, e ** Processing line: ~ future_e_collision = future_collision e, future_e, level.enemies + level.walls~ - Inside source: true *** True Line Result future_e_collision = future_collision e, future_e, level.enemies + level.walls ** Processing line: ~ e.next_x = e.x~ - Inside source: true *** True Line Result e.next_x = e.x ** Processing line: ~ e.next_y = e.y~ - Inside source: true *** True Line Result e.next_y = e.y ** Processing line: ~ e.next_x = future_e_collision.x if !future_e_collision.dx_collision~ - Inside source: true *** True Line Result e.next_x = future_e_collision.x if !future_e_collision.dx_collision ** Processing line: ~ e.next_y = future_e_collision.y if !future_e_collision.dy_collision~ - Inside source: true *** True Line Result e.next_y = future_e_collision.y if !future_e_collision.dy_collision ** Processing line: ~ e~ - Inside source: true *** True Line Result e ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ level.enemies.map! do |e|~ - Inside source: true *** True Line Result level.enemies.map! do |e| ** Processing line: ~ e.x = e.next_x~ - Inside source: true *** True Line Result e.x = e.next_x ** Processing line: ~ e.y = e.next_y~ - Inside source: true *** True Line Result e.y = e.next_y ** Processing line: ~ e~ - Inside source: true *** True Line Result e ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ level.enemies.each do |e|~ - Inside source: true *** True Line Result level.enemies.each do |e| ** Processing line: ~ player.damage += 1 if e.intersect_rect? player~ - Inside source: true *** True Line Result player.damage += 1 if e.intersect_rect? player ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_spawn_locations~ - Inside source: true *** True Line Result def calc_spawn_locations ** Processing line: ~ level.spawn_locations.map! do |s|~ - Inside source: true *** True Line Result level.spawn_locations.map! do |s| ** Processing line: ~ s.merge(countdown: s.countdown - 1)~ - Inside source: true *** True Line Result s.merge(countdown: s.countdown - 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ level.spawn_locations~ - Inside source: true *** True Line Result level.spawn_locations ** Processing line: ~ .find_all { |s| s.countdown.neg? }~ - Inside source: true *** True Line Result .find_all { |s| s.countdown.neg? } ** Processing line: ~ .each do |s|~ - Inside source: true *** True Line Result .each do |s| ** Processing line: ~ s.countdown = s.rate~ - Inside source: true *** True Line Result s.countdown = s.rate ** Processing line: ~ s.merge(countdown: s.rate)~ - Inside source: true *** True Line Result s.merge(countdown: s.rate) ** Processing line: ~ new_enemy = create_enemy s~ - Inside source: true *** True Line Result new_enemy = create_enemy s ** Processing line: ~ if !(level.enemies.find { |e| e.intersect_rect? new_enemy })~ - Inside source: true *** True Line Result if !(level.enemies.find { |e| e.intersect_rect? new_enemy }) ** Processing line: ~ level.enemies << new_enemy~ - Inside source: true *** True Line Result level.enemies << new_enemy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def create_enemy spawn_location~ - Inside source: true *** True Line Result def create_enemy spawn_location ** Processing line: ~ to_cell(spawn_location.ordinal_x, spawn_location.ordinal_y).merge hp: 2~ - Inside source: true *** True Line Result to_cell(spawn_location.ordinal_x, spawn_location.ordinal_y).merge hp: 2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def create_level level_template~ - Inside source: true *** True Line Result def create_level level_template ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ walls: level_template.walls.map { |w| to_cell(w.ordinal_x, w.ordinal_y).merge(w) },~ - Inside source: true *** True Line Result walls: level_template.walls.map { |w| to_cell(w.ordinal_x, w.ordinal_y).merge(w) }, ** Processing line: ~ enemies: [],~ - Inside source: true *** True Line Result enemies: [], ** Processing line: ~ spawn_locations: level_template.spawn_locations.map { |s| to_cell(s.ordinal_x, s.ordinal_y).merge(s) }~ - Inside source: true *** True Line Result spawn_locations: level_template.spawn_locations.map { |s| to_cell(s.ordinal_x, s.ordinal_y).merge(s) } ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def level_one_template~ - Inside source: true *** True Line Result def level_one_template ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ walls: [{ ordinal_x: 25, ordinal_y: 20},~ - Inside source: true *** True Line Result walls: [{ ordinal_x: 25, ordinal_y: 20}, ** Processing line: ~ { ordinal_x: 25, ordinal_y: 21},~ - Inside source: true *** True Line Result { ordinal_x: 25, ordinal_y: 21}, ** Processing line: ~ { ordinal_x: 25, ordinal_y: 22},~ - Inside source: true *** True Line Result { ordinal_x: 25, ordinal_y: 22}, ** Processing line: ~ { ordinal_x: 25, ordinal_y: 23}],~ - Inside source: true *** True Line Result { ordinal_x: 25, ordinal_y: 23}], ** Processing line: ~ spawn_locations: [{ ordinal_x: 10, ordinal_y: 10, rate: 120, countdown: 0, hp: 5 }]~ - Inside source: true *** True Line Result spawn_locations: [{ ordinal_x: 10, ordinal_y: 10, rate: 120, countdown: 0, hp: 5 }] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player~ - Inside source: true *** True Line Result def player ** Processing line: ~ state.player ||= {}~ - Inside source: true *** True Line Result state.player ||= {} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def level~ - Inside source: true *** True Line Result def level ** Processing line: ~ state.level ||= {}~ - Inside source: true *** True Line Result state.level ||= {} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def future_collision entity, future_entity, others~ - Inside source: true *** True Line Result def future_collision entity, future_entity, others ** Processing line: ~ dx_collision = others.find { |o| o != entity && (o.intersect_rect? future_entity.dx) }~ - Inside source: true *** True Line Result dx_collision = others.find { |o| o != entity && (o.intersect_rect? future_entity.dx) } ** Processing line: ~ dy_collision = others.find { |o| o != entity && (o.intersect_rect? future_entity.dy) }~ - Inside source: true *** True Line Result dy_collision = others.find { |o| o != entity && (o.intersect_rect? future_entity.dy) } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ dx_collision: dx_collision,~ - Inside source: true *** True Line Result dx_collision: dx_collision, ** Processing line: ~ x: future_entity.dx.x,~ - Inside source: true *** True Line Result x: future_entity.dx.x, ** Processing line: ~ dy_collision: dy_collision,~ - Inside source: true *** True Line Result dy_collision: dy_collision, ** Processing line: ~ y: future_entity.dy.y~ - Inside source: true *** True Line Result y: future_entity.dy.y ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def future_entity_position dx, dy, entity~ - Inside source: true *** True Line Result def future_entity_position dx, dy, entity ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ dx: entity.merge(x: entity.x + dx),~ - Inside source: true *** True Line Result dx: entity.merge(x: entity.x + dx), ** Processing line: ~ dy: entity.merge(y: entity.y + dy),~ - Inside source: true *** True Line Result dy: entity.merge(y: entity.y + dy), ** Processing line: ~ both: entity.merge(x: entity.x + dx, y: entity.y + dy)~ - Inside source: true *** True Line Result both: entity.merge(x: entity.x + dx, y: entity.y + dy) ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def future_player_position dx, dy~ - Inside source: true *** True Line Result def future_player_position dx, dy ** Processing line: ~ future_entity_position dx, dy, player~ - Inside source: true *** True Line Result future_entity_position dx, dy, player ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_cell ordinal_x, ordinal_y~ - Inside source: true *** True Line Result def to_cell ordinal_x, ordinal_y ** Processing line: ~ { x: ordinal_x * 16, y: ordinal_y * 16, w: 16, h: 16 }~ - Inside source: true *** True Line Result { x: ordinal_x * 16, y: ordinal_y * 16, w: 16, h: 16 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $game ||= Game.new~ - Inside source: true *** True Line Result $game ||= Game.new ** Processing line: ~ $game.args = args~ - Inside source: true *** True Line Result $game.args = args ** Processing line: ~ $game.tick~ - Inside source: true *** True Line Result $game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ $game = nil~ - Inside source: true *** True Line Result $game = nil ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Fighting - Special Move Inputs - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Fighting - Special Move Inputs - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_fighting/01_special_move_inputs/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_fighting/01_special_move_inputs/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ #tick_instructions args, "Use LEFT and RIGHT arrow keys to move and SPACE to jump."~ - Inside source: true *** True Line Result #tick_instructions args, "Use LEFT and RIGHT arrow keys to move and SPACE to jump." ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ input args~ - Inside source: true *** True Line Result input args ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # sets default values and creates empty collections~ - Inside source: true *** True Line Result # sets default values and creates empty collections ** Processing line: ~ # initialization only happens in the first frame~ - Inside source: true *** True Line Result # initialization only happens in the first frame ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ fiddle args~ - Inside source: true *** True Line Result fiddle args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.tick_count = args.state.tick_count~ - Inside source: true *** True Line Result args.state.tick_count = args.state.tick_count ** Processing line: ~ args.state.bridge_top = 128~ - Inside source: true *** True Line Result args.state.bridge_top = 128 ** Processing line: ~ args.state.player.x ||= 0 # initializes player's properties~ - Inside source: true *** True Line Result args.state.player.x ||= 0 # initializes player's properties ** Processing line: ~ args.state.player.y ||= args.state.bridge_top~ - Inside source: true *** True Line Result args.state.player.y ||= args.state.bridge_top ** Processing line: ~ args.state.player.w ||= 64~ - Inside source: true *** True Line Result args.state.player.w ||= 64 ** Processing line: ~ args.state.player.h ||= 64~ - Inside source: true *** True Line Result args.state.player.h ||= 64 ** Processing line: ~ args.state.player.dy ||= 0~ - Inside source: true *** True Line Result args.state.player.dy ||= 0 ** Processing line: ~ args.state.player.dx ||= 0~ - Inside source: true *** True Line Result args.state.player.dx ||= 0 ** Processing line: ~ args.state.player.r ||= 0~ - Inside source: true *** True Line Result args.state.player.r ||= 0 ** Processing line: ~ args.state.game_over_at ||= 0~ - Inside source: true *** True Line Result args.state.game_over_at ||= 0 ** Processing line: ~ args.state.animation_time ||=0~ - Inside source: true *** True Line Result args.state.animation_time ||=0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.timeleft ||=0~ - Inside source: true *** True Line Result args.state.timeleft ||=0 ** Processing line: ~ args.state.timeright ||=0~ - Inside source: true *** True Line Result args.state.timeright ||=0 ** Processing line: ~ args.state.lastpush ||=0~ - Inside source: true *** True Line Result args.state.lastpush ||=0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.inputlist ||= ["j","k","l"]~ - Inside source: true *** True Line Result args.state.inputlist ||= ["j","k","l"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # sets enemy, player, hammer values~ - Inside source: true *** True Line Result # sets enemy, player, hammer values ** Processing line: ~ def fiddle args~ - Inside source: true *** True Line Result def fiddle args ** Processing line: ~ args.state.gravity = -0.5~ - Inside source: true *** True Line Result args.state.gravity = -0.5 ** Processing line: ~ args.state.player_jump_power = 10 # sets player values~ - Inside source: true *** True Line Result args.state.player_jump_power = 10 # sets player values ** Processing line: ~ args.state.player_jump_power_duration = 5~ - Inside source: true *** True Line Result args.state.player_jump_power_duration = 5 ** Processing line: ~ args.state.player_max_run_speed = 20~ - Inside source: true *** True Line Result args.state.player_max_run_speed = 20 ** Processing line: ~ args.state.player_speed_slowdown_rate = 0.9~ - Inside source: true *** True Line Result args.state.player_speed_slowdown_rate = 0.9 ** Processing line: ~ args.state.player_acceleration = 0.9~ - Inside source: true *** True Line Result args.state.player_acceleration = 0.9 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # outputs objects onto the screen~ - Inside source: true *** True Line Result # outputs objects onto the screen ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ if (args.state.player.dx < 0.01) && (args.state.player.dx > -0.01)~ - Inside source: true *** True Line Result if (args.state.player.dx < 0.01) && (args.state.player.dx > -0.01) ** Processing line: ~ args.state.player.dx = 0~ - Inside source: true *** True Line Result args.state.player.dx = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #move list~ - Inside source: true *** True Line Result #move list ** Processing line: ~ (args.layout.rect_group row: 0, col_from_right: 8, drow: 0.3,~ - Inside source: true *** True Line Result (args.layout.rect_group row: 0, col_from_right: 8, drow: 0.3, ** Processing line: ~ merge: { vertical_alignment_enum: 0, size_enum: -2 },~ - Inside source: true *** True Line Result merge: { vertical_alignment_enum: 0, size_enum: -2 }, ** Processing line: ~ group: [~ - Inside source: true *** True Line Result group: [ ** Processing line: ~ { text: "move: WASD" },~ - Inside source: true *** True Line Result { text: "move: WASD" }, ** Processing line: ~ { text: "jump: Space" },~ - Inside source: true *** True Line Result { text: "jump: Space" }, ** Processing line: ~ { text: "attack forwards: J (while on ground" },~ - Inside source: true *** True Line Result { text: "attack forwards: J (while on ground" }, ** Processing line: ~ { text: "attack upwards: K (while on groud)" },~ - Inside source: true *** True Line Result { text: "attack upwards: K (while on groud)" }, ** Processing line: ~ { text: "attack backwards: J (while on ground and holding A)" },~ - Inside source: true *** True Line Result { text: "attack backwards: J (while on ground and holding A)" }, ** Processing line: ~ { text: "attack downwards: K (while in air)" },~ - Inside source: true *** True Line Result { text: "attack downwards: K (while in air)" }, ** Processing line: ~ { text: "dash attack: J, K in quick succession." },~ - Inside source: true *** True Line Result { text: "dash attack: J, K in quick succession." }, ** Processing line: ~ { text: "shield: hold J, K at the same time." },~ - Inside source: true *** True Line Result { text: "shield: hold J, K at the same time." }, ** Processing line: ~ { text: "dash backwards: A, A in quick succession." },~ - Inside source: true *** True Line Result { text: "dash backwards: A, A in quick succession." }, ** Processing line: ~ ]).into args.outputs.labels~ - Inside source: true *** True Line Result ]).into args.outputs.labels ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # registered moves~ - Inside source: true *** True Line Result # registered moves ** Processing line: ~ args.outputs.labels << { x: 0.to_layout_col,~ - Inside source: true *** True Line Result args.outputs.labels << { x: 0.to_layout_col, ** Processing line: ~ y: 0.to_layout_row,~ - Inside source: true *** True Line Result y: 0.to_layout_row, ** Processing line: ~ text: "input history",~ - Inside source: true *** True Line Result text: "input history", ** Processing line: ~ size_enum: -2,~ - Inside source: true *** True Line Result size_enum: -2, ** Processing line: ~ vertical_alignment_enum: 0 }~ - Inside source: true *** True Line Result vertical_alignment_enum: 0 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ (args.state.inputlist.take(5)).map do |s|~ - Inside source: true *** True Line Result (args.state.inputlist.take(5)).map do |s| ** Processing line: ~ { text: s, size_enum: -2, vertical_alignment_enum: 0 }~ - Inside source: true *** True Line Result { text: s, size_enum: -2, vertical_alignment_enum: 0 } ** Processing line: ~ end.yield_self do |group|~ - Inside source: true *** True Line Result end.yield_self do |group| ** Processing line: ~ (args.layout.rect_group row: 0.3, col: 0, drow: 0.3, group: group).into args.outputs.labels~ - Inside source: true *** True Line Result (args.layout.rect_group row: 0.3, col: 0, drow: 0.3, group: group).into args.outputs.labels ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #sprites~ - Inside source: true *** True Line Result #sprites ** Processing line: ~ player = [args.state.player.x, args.state.player.y,~ - Inside source: true *** True Line Result player = [args.state.player.x, args.state.player.y, ** Processing line: ~ args.state.player.w, args.state.player.h,~ - Inside source: true *** True Line Result args.state.player.w, args.state.player.h, ** Processing line: ~ "sprites/square/white.png",~ - Inside source: true *** True Line Result "sprites/square/white.png", ** Processing line: ~ args.state.player.r]~ - Inside source: true *** True Line Result args.state.player.r] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ playershield = [args.state.player.x - 20, args.state.player.y - 10,~ - Inside source: true *** True Line Result playershield = [args.state.player.x - 20, args.state.player.y - 10, ** Processing line: ~ args.state.player.w + 20, args.state.player.h + 20,~ - Inside source: true *** True Line Result args.state.player.w + 20, args.state.player.h + 20, ** Processing line: ~ "sprites/square/blue.png",~ - Inside source: true *** True Line Result "sprites/square/blue.png", ** Processing line: ~ args.state.player.r,~ - Inside source: true *** True Line Result args.state.player.r, ** Processing line: ~ 0]~ - Inside source: true *** True Line Result 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ playerjab = [args.state.player.x + 32, args.state.player.y,~ - Inside source: true *** True Line Result playerjab = [args.state.player.x + 32, args.state.player.y, ** Processing line: ~ args.state.player.w, args.state.player.h,~ - Inside source: true *** True Line Result args.state.player.w, args.state.player.h, ** Processing line: ~ "sprites/isometric/indigo.png",~ - Inside source: true *** True Line Result "sprites/isometric/indigo.png", ** Processing line: ~ args.state.player.r,~ - Inside source: true *** True Line Result args.state.player.r, ** Processing line: ~ 0]~ - Inside source: true *** True Line Result 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ playerupper = [args.state.player.x, args.state.player.y + 32,~ - Inside source: true *** True Line Result playerupper = [args.state.player.x, args.state.player.y + 32, ** Processing line: ~ args.state.player.w, args.state.player.h,~ - Inside source: true *** True Line Result args.state.player.w, args.state.player.h, ** Processing line: ~ "sprites/isometric/indigo.png",~ - Inside source: true *** True Line Result "sprites/isometric/indigo.png", ** Processing line: ~ args.state.player.r+90,~ - Inside source: true *** True Line Result args.state.player.r+90, ** Processing line: ~ 0]~ - Inside source: true *** True Line Result 0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if ((args.state.tick_count - args.state.lastpush) <= 15)~ - Inside source: true *** True Line Result if ((args.state.tick_count - args.state.lastpush) <= 15) ** Processing line: ~ if (args.state.inputlist[0] == "<<")~ - Inside source: true *** True Line Result if (args.state.inputlist[0] == "<<") ** Processing line: ~ player = [args.state.player.x, args.state.player.y,~ - Inside source: true *** True Line Result player = [args.state.player.x, args.state.player.y, ** Processing line: ~ args.state.player.w, args.state.player.h,~ - Inside source: true *** True Line Result args.state.player.w, args.state.player.h, ** Processing line: ~ "sprites/square/yellow.png", args.state.player.r]~ - Inside source: true *** True Line Result "sprites/square/yellow.png", args.state.player.r] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (args.state.inputlist[0] == "shield")~ - Inside source: true *** True Line Result if (args.state.inputlist[0] == "shield") ** Processing line: ~ player = [args.state.player.x, args.state.player.y,~ - Inside source: true *** True Line Result player = [args.state.player.x, args.state.player.y, ** Processing line: ~ args.state.player.w, args.state.player.h,~ - Inside source: true *** True Line Result args.state.player.w, args.state.player.h, ** Processing line: ~ "sprites/square/indigo.png", args.state.player.r]~ - Inside source: true *** True Line Result "sprites/square/indigo.png", args.state.player.r] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ playershield = [args.state.player.x - 10, args.state.player.y - 10,~ - Inside source: true *** True Line Result playershield = [args.state.player.x - 10, args.state.player.y - 10, ** Processing line: ~ args.state.player.w + 20, args.state.player.h + 20,~ - Inside source: true *** True Line Result args.state.player.w + 20, args.state.player.h + 20, ** Processing line: ~ "sprites/square/blue.png", args.state.player.r, 50]~ - Inside source: true *** True Line Result "sprites/square/blue.png", args.state.player.r, 50] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (args.state.inputlist[0] == "back-attack")~ - Inside source: true *** True Line Result if (args.state.inputlist[0] == "back-attack") ** Processing line: ~ playerjab = [args.state.player.x - 20, args.state.player.y,~ - Inside source: true *** True Line Result playerjab = [args.state.player.x - 20, args.state.player.y, ** Processing line: ~ args.state.player.w - 10, args.state.player.h,~ - Inside source: true *** True Line Result args.state.player.w - 10, args.state.player.h, ** Processing line: ~ "sprites/isometric/indigo.png", args.state.player.r, 255]~ - Inside source: true *** True Line Result "sprites/isometric/indigo.png", args.state.player.r, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (args.state.inputlist[0] == "forward-attack")~ - Inside source: true *** True Line Result if (args.state.inputlist[0] == "forward-attack") ** Processing line: ~ playerjab = [args.state.player.x + 32, args.state.player.y,~ - Inside source: true *** True Line Result playerjab = [args.state.player.x + 32, args.state.player.y, ** Processing line: ~ args.state.player.w, args.state.player.h,~ - Inside source: true *** True Line Result args.state.player.w, args.state.player.h, ** Processing line: ~ "sprites/isometric/indigo.png", args.state.player.r, 255]~ - Inside source: true *** True Line Result "sprites/isometric/indigo.png", args.state.player.r, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (args.state.inputlist[0] == "up-attack")~ - Inside source: true *** True Line Result if (args.state.inputlist[0] == "up-attack") ** Processing line: ~ playerupper = [args.state.player.x, args.state.player.y + 32,~ - Inside source: true *** True Line Result playerupper = [args.state.player.x, args.state.player.y + 32, ** Processing line: ~ args.state.player.w, args.state.player.h,~ - Inside source: true *** True Line Result args.state.player.w, args.state.player.h, ** Processing line: ~ "sprites/isometric/indigo.png", args.state.player.r + 90, 255]~ - Inside source: true *** True Line Result "sprites/isometric/indigo.png", args.state.player.r + 90, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (args.state.inputlist[0] == "dair")~ - Inside source: true *** True Line Result if (args.state.inputlist[0] == "dair") ** Processing line: ~ playerupper = [args.state.player.x, args.state.player.y - 32,~ - Inside source: true *** True Line Result playerupper = [args.state.player.x, args.state.player.y - 32, ** Processing line: ~ args.state.player.w, args.state.player.h,~ - Inside source: true *** True Line Result args.state.player.w, args.state.player.h, ** Processing line: ~ "sprites/isometric/indigo.png", args.state.player.r + 90, 255]~ - Inside source: true *** True Line Result "sprites/isometric/indigo.png", args.state.player.r + 90, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (args.state.inputlist[0] == "dash-attack")~ - Inside source: true *** True Line Result if (args.state.inputlist[0] == "dash-attack") ** Processing line: ~ playerupper = [args.state.player.x, args.state.player.y + 32,~ - Inside source: true *** True Line Result playerupper = [args.state.player.x, args.state.player.y + 32, ** Processing line: ~ args.state.player.w, args.state.player.h,~ - Inside source: true *** True Line Result args.state.player.w, args.state.player.h, ** Processing line: ~ "sprites/isometric/violet.png", args.state.player.r + 90, 255]~ - Inside source: true *** True Line Result "sprites/isometric/violet.png", args.state.player.r + 90, 255] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ playerjab = [args.state.player.x + 32, args.state.player.y,~ - Inside source: true *** True Line Result playerjab = [args.state.player.x + 32, args.state.player.y, ** Processing line: ~ args.state.player.w, args.state.player.h,~ - Inside source: true *** True Line Result args.state.player.w, args.state.player.h, ** Processing line: ~ "sprites/isometric/violet.png", args.state.player.r, 255]~ - Inside source: true *** True Line Result "sprites/isometric/violet.png", args.state.player.r, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.sprites << playerjab~ - Inside source: true *** True Line Result args.outputs.sprites << playerjab ** Processing line: ~ args.outputs.sprites << playerupper~ - Inside source: true *** True Line Result args.outputs.sprites << playerupper ** Processing line: ~ args.outputs.sprites << player~ - Inside source: true *** True Line Result args.outputs.sprites << player ** Processing line: ~ args.outputs.sprites << playershield~ - Inside source: true *** True Line Result args.outputs.sprites << playershield ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.solids << 20.map_with_index do |i| # uses 20 squares to form bridge~ - Inside source: true *** True Line Result args.outputs.solids << 20.map_with_index do |i| # uses 20 squares to form bridge ** Processing line: ~ [i * 64, args.state.bridge_top - 64, 64, 64]~ - Inside source: true *** True Line Result [i * 64, args.state.bridge_top - 64, 64, 64] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Performs calculations to move objects on the screen~ - Inside source: true *** True Line Result # Performs calculations to move objects on the screen ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ # Since velocity is the change in position, the change in x increases by dx. Same with y and dy.~ - Inside source: true *** True Line Result # Since velocity is the change in position, the change in x increases by dx. Same with y and dy. ** Processing line: ~ args.state.player.x += args.state.player.dx~ - Inside source: true *** True Line Result args.state.player.x += args.state.player.dx ** Processing line: ~ args.state.player.y += args.state.player.dy~ - Inside source: true *** True Line Result args.state.player.y += args.state.player.dy ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Since acceleration is the change in velocity, the change in y (dy) increases every frame~ - Inside source: true *** True Line Result # Since acceleration is the change in velocity, the change in y (dy) increases every frame ** Processing line: ~ args.state.player.dy += args.state.gravity~ - Inside source: true *** True Line Result args.state.player.dy += args.state.gravity ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # player's y position is either current y position or y position of top of~ - Inside source: true *** True Line Result # player's y position is either current y position or y position of top of ** Processing line: ~ # bridge, whichever has a greater value~ - Inside source: true *** True Line Result # bridge, whichever has a greater value ** Processing line: ~ # ensures that the player never goes below the bridge~ - Inside source: true *** True Line Result # ensures that the player never goes below the bridge ** Processing line: ~ args.state.player.y = args.state.player.y.greater(args.state.bridge_top)~ - Inside source: true *** True Line Result args.state.player.y = args.state.player.y.greater(args.state.bridge_top) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # player's x position is either the current x position or 0, whichever has a greater value~ - Inside source: true *** True Line Result # player's x position is either the current x position or 0, whichever has a greater value ** Processing line: ~ # ensures that the player doesn't go too far left (out of the screen's scope)~ - Inside source: true *** True Line Result # ensures that the player doesn't go too far left (out of the screen's scope) ** Processing line: ~ args.state.player.x = args.state.player.x.greater(0)~ - Inside source: true *** True Line Result args.state.player.x = args.state.player.x.greater(0) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # player is not falling if it is located on the top of the bridge~ - Inside source: true *** True Line Result # player is not falling if it is located on the top of the bridge ** Processing line: ~ args.state.player.falling = false if args.state.player.y == args.state.bridge_top~ - Inside source: true *** True Line Result args.state.player.falling = false if args.state.player.y == args.state.bridge_top ** Processing line: ~ #args.state.player.rect = [args.state.player.x, args.state.player.y, args.state.player.h, args.state.player.w] # sets definition for player~ - Inside source: true *** True Line Result #args.state.player.rect = [args.state.player.x, args.state.player.y, args.state.player.h, args.state.player.w] # sets definition for player ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Resets the player by changing its properties back to the values they had at initialization~ - Inside source: true *** True Line Result # Resets the player by changing its properties back to the values they had at initialization ** Processing line: ~ def reset_player args~ - Inside source: true *** True Line Result def reset_player args ** Processing line: ~ args.state.player.x = 0~ - Inside source: true *** True Line Result args.state.player.x = 0 ** Processing line: ~ args.state.player.y = args.state.bridge_top~ - Inside source: true *** True Line Result args.state.player.y = args.state.bridge_top ** Processing line: ~ args.state.player.dy = 0~ - Inside source: true *** True Line Result args.state.player.dy = 0 ** Processing line: ~ args.state.player.dx = 0~ - Inside source: true *** True Line Result args.state.player.dx = 0 ** Processing line: ~ args.state.enemy.hammers.clear # empties hammer collection~ - Inside source: true *** True Line Result args.state.enemy.hammers.clear # empties hammer collection ** Processing line: ~ args.state.enemy.hammer_queue.clear # empties hammer_queue~ - Inside source: true *** True Line Result args.state.enemy.hammer_queue.clear # empties hammer_queue ** Processing line: ~ args.state.game_over_at = args.state.tick_count # game_over_at set to current frame (or passage of time)~ - Inside source: true *** True Line Result args.state.game_over_at = args.state.tick_count # game_over_at set to current frame (or passage of time) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Processes input from the user to move the player~ - Inside source: true *** True Line Result # Processes input from the user to move the player ** Processing line: ~ def input args~ - Inside source: true *** True Line Result def input args ** Processing line: ~ if args.state.inputlist.length > 5~ - Inside source: true *** True Line Result if args.state.inputlist.length > 5 ** Processing line: ~ args.state.inputlist.pop~ - Inside source: true *** True Line Result args.state.inputlist.pop ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ should_process_special_move = (args.inputs.keyboard.key_down.j) ||~ - Inside source: true *** True Line Result should_process_special_move = (args.inputs.keyboard.key_down.j) || ** Processing line: ~ (args.inputs.keyboard.key_down.k) ||~ - Inside source: true *** True Line Result (args.inputs.keyboard.key_down.k) || ** Processing line: ~ (args.inputs.keyboard.key_down.a) ||~ - Inside source: true *** True Line Result (args.inputs.keyboard.key_down.a) || ** Processing line: ~ (args.inputs.keyboard.key_down.d) ||~ - Inside source: true *** True Line Result (args.inputs.keyboard.key_down.d) || ** Processing line: ~ (args.inputs.controller_one.key_down.y) ||~ - Inside source: true *** True Line Result (args.inputs.controller_one.key_down.y) || ** Processing line: ~ (args.inputs.controller_one.key_down.x) ||~ - Inside source: true *** True Line Result (args.inputs.controller_one.key_down.x) || ** Processing line: ~ (args.inputs.controller_one.key_down.left) ||~ - Inside source: true *** True Line Result (args.inputs.controller_one.key_down.left) || ** Processing line: ~ (args.inputs.controller_one.key_down.right)~ - Inside source: true *** True Line Result (args.inputs.controller_one.key_down.right) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (should_process_special_move)~ - Inside source: true *** True Line Result if (should_process_special_move) ** Processing line: ~ if (args.inputs.keyboard.key_down.j && args.inputs.keyboard.key_down.k) ||~ - Inside source: true *** True Line Result if (args.inputs.keyboard.key_down.j && args.inputs.keyboard.key_down.k) || ** Processing line: ~ (args.inputs.controller_one.key_down.x && args.inputs.controller_one.key_down.y)~ - Inside source: true *** True Line Result (args.inputs.controller_one.key_down.x && args.inputs.controller_one.key_down.y) ** Processing line: ~ args.state.inputlist.unshift("shield")~ - Inside source: true *** True Line Result args.state.inputlist.unshift("shield") ** Processing line: ~ elsif (args.inputs.keyboard.key_down.k || args.inputs.controller_one.key_down.y) &&~ - Inside source: true *** True Line Result elsif (args.inputs.keyboard.key_down.k || args.inputs.controller_one.key_down.y) && ** Processing line: ~ (args.state.inputlist[0] == "forward-attack") && ((args.state.tick_count - args.state.lastpush) <= 15)~ - Inside source: true *** True Line Result (args.state.inputlist[0] == "forward-attack") && ((args.state.tick_count - args.state.lastpush) <= 15) ** Processing line: ~ args.state.inputlist.unshift("dash-attack")~ - Inside source: true *** True Line Result args.state.inputlist.unshift("dash-attack") ** Processing line: ~ args.state.player.dx = 20~ - Inside source: true *** True Line Result args.state.player.dx = 20 ** Processing line: ~ elsif (args.inputs.keyboard.key_down.j && args.inputs.keyboard.a) ||~ - Inside source: true *** True Line Result elsif (args.inputs.keyboard.key_down.j && args.inputs.keyboard.a) || ** Processing line: ~ (args.inputs.controller_one.key_down.x && args.inputs.controller_one.key_down.left)~ - Inside source: true *** True Line Result (args.inputs.controller_one.key_down.x && args.inputs.controller_one.key_down.left) ** Processing line: ~ args.state.inputlist.unshift("back-attack")~ - Inside source: true *** True Line Result args.state.inputlist.unshift("back-attack") ** Processing line: ~ elsif ( args.inputs.controller_one.key_down.x || args.inputs.keyboard.key_down.j)~ - Inside source: true *** True Line Result elsif ( args.inputs.controller_one.key_down.x || args.inputs.keyboard.key_down.j) ** Processing line: ~ args.state.inputlist.unshift("forward-attack")~ - Inside source: true *** True Line Result args.state.inputlist.unshift("forward-attack") ** Processing line: ~ elsif (args.inputs.keyboard.key_down.k || args.inputs.controller_one.key_down.y) &&~ - Inside source: true *** True Line Result elsif (args.inputs.keyboard.key_down.k || args.inputs.controller_one.key_down.y) && ** Processing line: ~ (args.state.player.y > 128)~ - Inside source: true *** True Line Result (args.state.player.y > 128) ** Processing line: ~ args.state.inputlist.unshift("dair")~ - Inside source: true *** True Line Result args.state.inputlist.unshift("dair") ** Processing line: ~ elsif (args.inputs.keyboard.key_down.k || args.inputs.controller_one.key_down.y)~ - Inside source: true *** True Line Result elsif (args.inputs.keyboard.key_down.k || args.inputs.controller_one.key_down.y) ** Processing line: ~ args.state.inputlist.unshift("up-attack")~ - Inside source: true *** True Line Result args.state.inputlist.unshift("up-attack") ** Processing line: ~ elsif (args.inputs.controller_one.key_down.left || args.inputs.keyboard.key_down.a) &&~ - Inside source: true *** True Line Result elsif (args.inputs.controller_one.key_down.left || args.inputs.keyboard.key_down.a) && ** Processing line: ~ (args.state.inputlist[0] == "<") &&~ - Inside source: true *** True Line Result (args.state.inputlist[0] == "<") && ** Processing line: ~ ((args.state.tick_count - args.state.lastpush) <= 10)~ - Inside source: true *** True Line Result ((args.state.tick_count - args.state.lastpush) <= 10) ** Processing line: ~ args.state.inputlist.unshift("<<")~ - Inside source: true *** True Line Result args.state.inputlist.unshift("<<") ** Processing line: ~ args.state.player.dx = -15~ - Inside source: true *** True Line Result args.state.player.dx = -15 ** Processing line: ~ elsif (args.inputs.controller_one.key_down.left || args.inputs.keyboard.key_down.a)~ - Inside source: true *** True Line Result elsif (args.inputs.controller_one.key_down.left || args.inputs.keyboard.key_down.a) ** Processing line: ~ args.state.inputlist.unshift("<")~ - Inside source: true *** True Line Result args.state.inputlist.unshift("<") ** Processing line: ~ args.state.timeleft = args.state.tick_count~ - Inside source: true *** True Line Result args.state.timeleft = args.state.tick_count ** Processing line: ~ elsif (args.inputs.controller_one.key_down.right || args.inputs.keyboard.key_down.d)~ - Inside source: true *** True Line Result elsif (args.inputs.controller_one.key_down.right || args.inputs.keyboard.key_down.d) ** Processing line: ~ args.state.inputlist.unshift(">")~ - Inside source: true *** True Line Result args.state.inputlist.unshift(">") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.lastpush = args.state.tick_count~ - Inside source: true *** True Line Result args.state.lastpush = args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.keyboard.space || args.inputs.controller_one.r2 # if the user presses the space bar~ - Inside source: true *** True Line Result if args.inputs.keyboard.space || args.inputs.controller_one.r2 # if the user presses the space bar ** Processing line: ~ args.state.player.jumped_at ||= args.state.tick_count # jumped_at is set to current frame~ - Inside source: true *** True Line Result args.state.player.jumped_at ||= args.state.tick_count # jumped_at is set to current frame ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the time that has passed since the jump is less than the player's jump duration and~ - Inside source: true *** True Line Result # if the time that has passed since the jump is less than the player's jump duration and ** Processing line: ~ # the player is not falling~ - Inside source: true *** True Line Result # the player is not falling ** Processing line: ~ if args.state.player.jumped_at.elapsed_time < args.state.player_jump_power_duration && !args.state.player.falling~ - Inside source: true *** True Line Result if args.state.player.jumped_at.elapsed_time < args.state.player_jump_power_duration && !args.state.player.falling ** Processing line: ~ args.state.player.dy = args.state.player_jump_power # change in y is set to power of player's jump~ - Inside source: true *** True Line Result args.state.player.dy = args.state.player_jump_power # change in y is set to power of player's jump ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the space bar is in the "up" state (or not being pressed down)~ - Inside source: true *** True Line Result # if the space bar is in the "up" state (or not being pressed down) ** Processing line: ~ if args.inputs.keyboard.key_up.space || args.inputs.controller_one.key_up.r2~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_up.space || args.inputs.controller_one.key_up.r2 ** Processing line: ~ args.state.player.jumped_at = nil # jumped_at is empty~ - Inside source: true *** True Line Result args.state.player.jumped_at = nil # jumped_at is empty ** Processing line: ~ args.state.player.falling = true # the player is falling~ - Inside source: true *** True Line Result args.state.player.falling = true # the player is falling ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.left # if left key is pressed~ - Inside source: true *** True Line Result if args.inputs.left # if left key is pressed ** Processing line: ~ if args.state.player.dx < -5~ - Inside source: true *** True Line Result if args.state.player.dx < -5 ** Processing line: ~ args.state.player.dx = args.state.player.dx~ - Inside source: true *** True Line Result args.state.player.dx = args.state.player.dx ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.player.dx = -5~ - Inside source: true *** True Line Result args.state.player.dx = -5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ elsif args.inputs.right # if right key is pressed~ - Inside source: true *** True Line Result elsif args.inputs.right # if right key is pressed ** Processing line: ~ if args.state.player.dx > 5~ - Inside source: true *** True Line Result if args.state.player.dx > 5 ** Processing line: ~ args.state.player.dx = args.state.player.dx~ - Inside source: true *** True Line Result args.state.player.dx = args.state.player.dx ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.player.dx = 5~ - Inside source: true *** True Line Result args.state.player.dx = 5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.player.dx *= args.state.player_speed_slowdown_rate # dx is scaled down~ - Inside source: true *** True Line Result args.state.player.dx *= args.state.player_speed_slowdown_rate # dx is scaled down ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if ((args.state.player.dx).abs > 5) #&& ((args.state.tick_count - args.state.lastpush) <= 10)~ - Inside source: true *** True Line Result if ((args.state.player.dx).abs > 5) #&& ((args.state.tick_count - args.state.lastpush) <= 10) ** Processing line: ~ args.state.player.dx *= 0.95~ - Inside source: true *** True Line Result args.state.player.dx *= 0.95 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.mouse.click ||~ - Inside source: true *** True Line Result if args.inputs.mouse.click || ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ - Inside source: true *** True Line Result args.inputs.keyboard.directional_vector || ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.enter || ** Processing line: ~ args.inputs.keyboard.key_down.space ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.space || ** Processing line: ~ args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.escape ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Lowrez - Nokia 3310 - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Lowrez - Nokia 3310 - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_lowrez/nokia_3310/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_lowrez/nokia_3310/app/main.rb ** Processing line: ~ require 'app/nokia.rb'~ - Inside source: true *** True Line Result require 'app/nokia.rb' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HELLO WORLD ======================================================~ - Inside source: true *** True Line Result # ==== HELLO WORLD ====================================================== ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # Steps to get started:~ - Inside source: true *** True Line Result # Steps to get started: ** Processing line: ~ # 1. ~def tick args~ is the entry point for your game.~ - Inside source: true *** True Line Result # 1. ~def tick args~ is the entry point for your game. ** Processing line: ~ # 2. There are quite a few code samples below, remove the "##"~ - Inside source: true *** True Line Result # 2. There are quite a few code samples below, remove the "##" ** Processing line: ~ # before each line and save the file to see the changes.~ - Inside source: true *** True Line Result # before each line and save the file to see the changes. ** Processing line: ~ # 3. 0, 0 is in bottom left and 83, 47 is in top right corner.~ - Inside source: true *** True Line Result # 3. 0, 0 is in bottom left and 83, 47 is in top right corner. ** Processing line: ~ # 4. Be sure to come to the discord channel if you need~ - Inside source: true *** True Line Result # 4. Be sure to come to the discord channel if you need ** Processing line: ~ # more help: [[http://discord.dragonruby.org]].~ - Inside source: true *** True Line Result # more help: [[http://discord.dragonruby.org]]. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Commenting and uncommenting code:~ - Inside source: true *** True Line Result # Commenting and uncommenting code: ** Processing line: ~ # - Add a "#" infront of lines to comment out code~ - Inside source: true *** True Line Result # - Add a "#" infront of lines to comment out code ** Processing line: ~ # - Remove the "#" infront of lines to comment out code~ - Inside source: true *** True Line Result # - Remove the "#" infront of lines to comment out code ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Invoke the hello_world subroutine/method~ - Inside source: true *** True Line Result # Invoke the hello_world subroutine/method ** Processing line: ~ hello_world args # <---- add a "#" to the beginning of the line to stop running this subroutine/method.~ - Inside source: true *** True Line Result hello_world args # <---- add a "#" to the beginning of the line to stop running this subroutine/method. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HOW TO RENDER A LABEL ============================================~ - Inside source: true *** True Line Result # ==== HOW TO RENDER A LABEL ============================================ ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Uncomment the line below to invoke the how_to_render_a_label subroutine/method.~ - Inside source: true *** True Line Result # Uncomment the line below to invoke the how_to_render_a_label subroutine/method. ** Processing line: ~ # Note: The method is defined in this file with the signature ~def how_to_render_a_label args~~ - Inside source: true *** True Line Result # Note: The method is defined in this file with the signature ~def how_to_render_a_label args~ ** Processing line: ~ # Scroll down to the method to see the details.~ - Inside source: true *** True Line Result # Scroll down to the method to see the details. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_render_a_label args # <---- remove the "#" at the beginning of this line to run the method~ - Inside source: true *** True Line Result # how_to_render_a_label args # <---- remove the "#" at the beginning of this line to run the method ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HOW TO RENDER A FILLED SQUARE (SOLID) ============================~ - Inside source: true *** True Line Result # ==== HOW TO RENDER A FILLED SQUARE (SOLID) ============================ ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_render_solids args~ - Inside source: true *** True Line Result # how_to_render_solids args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HOW TO RENDER AN UNFILLED SQUARE (BORDER) ========================~ - Inside source: true *** True Line Result # ==== HOW TO RENDER AN UNFILLED SQUARE (BORDER) ======================== ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_render_borders args~ - Inside source: true *** True Line Result # how_to_render_borders args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HOW TO RENDER A LINE =============================================~ - Inside source: true *** True Line Result # ==== HOW TO RENDER A LINE ============================================= ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_render_lines args~ - Inside source: true *** True Line Result # how_to_render_lines args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # == HOW TO RENDER A SPRITE =============================================~ - Inside source: true *** True Line Result # == HOW TO RENDER A SPRITE ============================================= ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_render_sprites args~ - Inside source: true *** True Line Result # how_to_render_sprites args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HOW TO MOVE A SPRITE BASED OFF OF USER INPUT =====================~ - Inside source: true *** True Line Result # ==== HOW TO MOVE A SPRITE BASED OFF OF USER INPUT ===================== ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_move_a_sprite args~ - Inside source: true *** True Line Result # how_to_move_a_sprite args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HOW TO ANIMATE A SPRITE (SEPERATE PNGS) ==========================~ - Inside source: true *** True Line Result # ==== HOW TO ANIMATE A SPRITE (SEPERATE PNGS) ========================== ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_animate_a_sprite args~ - Inside source: true *** True Line Result # how_to_animate_a_sprite args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HOW TO ANIMATE A SPRITE (SPRITE SHEET) ===========================~ - Inside source: true *** True Line Result # ==== HOW TO ANIMATE A SPRITE (SPRITE SHEET) =========================== ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_animate_a_sprite_sheet args~ - Inside source: true *** True Line Result # how_to_animate_a_sprite_sheet args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HOW TO DETERMINE COLLISION =============================================~ - Inside source: true *** True Line Result # ==== HOW TO DETERMINE COLLISION ============================================= ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_determine_collision args~ - Inside source: true *** True Line Result # how_to_determine_collision args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HOW TO CREATE BUTTONS ==================================================~ - Inside source: true *** True Line Result # ==== HOW TO CREATE BUTTONS ================================================== ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_create_buttons args~ - Inside source: true *** True Line Result # how_to_create_buttons args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ==== The line below renders a debug grid, mouse information, and current tick~ - Inside source: true *** True Line Result # ==== The line below renders a debug grid, mouse information, and current tick ** Processing line: ~ # render_debug args~ - Inside source: true *** True Line Result # render_debug args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HELLO WORLD ======================================================~ - Inside source: true *** True Line Result # ==== HELLO WORLD ====================================================== ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ def hello_world args~ - Inside source: true *** True Line Result def hello_world args ** Processing line: ~ args.nokia.solids << { x: 0, y: 64, w: 10, h: 10, r: 255 }~ - Inside source: true *** True Line Result args.nokia.solids << { x: 0, y: 64, w: 10, h: 10, r: 255 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.nokia.labels << {~ - Inside source: true *** True Line Result args.nokia.labels << { ** Processing line: ~ x: 42,~ - Inside source: true *** True Line Result x: 42, ** Processing line: ~ y: 46,~ - Inside source: true *** True Line Result y: 46, ** Processing line: ~ text: "nokia 3310 jam 3",~ - Inside source: true *** True Line Result text: "nokia 3310 jam 3", ** Processing line: ~ size_enum: NOKIA_FONT_SM,~ - Inside source: true *** True Line Result size_enum: NOKIA_FONT_SM, ** Processing line: ~ alignment_enum: 1,~ - Inside source: true *** True Line Result alignment_enum: 1, ** Processing line: ~ r: 0,~ - Inside source: true *** True Line Result r: 0, ** Processing line: ~ g: 0,~ - Inside source: true *** True Line Result g: 0, ** Processing line: ~ b: 0,~ - Inside source: true *** True Line Result b: 0, ** Processing line: ~ a: 255,~ - Inside source: true *** True Line Result a: 255, ** Processing line: ~ font: NOKIA_FONT_PATH~ - Inside source: true *** True Line Result font: NOKIA_FONT_PATH ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.nokia.sprites << {~ - Inside source: true *** True Line Result args.nokia.sprites << { ** Processing line: ~ x: 42 - 10,~ - Inside source: true *** True Line Result x: 42 - 10, ** Processing line: ~ y: 26 - 10,~ - Inside source: true *** True Line Result y: 26 - 10, ** Processing line: ~ w: 20,~ - Inside source: true *** True Line Result w: 20, ** Processing line: ~ h: 20,~ - Inside source: true *** True Line Result h: 20, ** Processing line: ~ path: 'sprites/monochrome-ship.png',~ - Inside source: true *** True Line Result path: 'sprites/monochrome-ship.png', ** Processing line: ~ a: 255,~ - Inside source: true *** True Line Result a: 255, ** Processing line: ~ angle: args.state.tick_count % 360~ - Inside source: true *** True Line Result angle: args.state.tick_count % 360 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HOW TO RENDER A LABEL ============================================~ - Inside source: true *** True Line Result # ==== HOW TO RENDER A LABEL ============================================ ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ def how_to_render_a_label args~ - Inside source: true *** True Line Result def how_to_render_a_label args ** Processing line: ~ # NOTE: Text is aligned from the TOP LEFT corner~ - Inside source: true *** True Line Result # NOTE: Text is aligned from the TOP LEFT corner ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render an EXTRA LARGE/XL label (remove the "#" in front of each line below)~ - Inside source: true *** True Line Result # Render an EXTRA LARGE/XL label (remove the "#" in front of each line below) ** Processing line: ~ args.nokia.labels << { x: 0, y: 46, text: "Hello World",~ - Inside source: true *** True Line Result args.nokia.labels << { x: 0, y: 46, text: "Hello World", ** Processing line: ~ size_enum: NOKIA_FONT_XL,~ - Inside source: true *** True Line Result size_enum: NOKIA_FONT_XL, ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ - Inside source: true *** True Line Result r: 0, g: 0, b: 0, a: 255, ** Processing line: ~ font: NOKIA_FONT_PATH }~ - Inside source: true *** True Line Result font: NOKIA_FONT_PATH } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a LARGE/LG label (remove the "#" in front of each line below)~ - Inside source: true *** True Line Result # Render a LARGE/LG label (remove the "#" in front of each line below) ** Processing line: ~ args.nokia.labels << { x: 0, y: 29, text: "Hello World",~ - Inside source: true *** True Line Result args.nokia.labels << { x: 0, y: 29, text: "Hello World", ** Processing line: ~ size_enum: NOKIA_FONT_LG,~ - Inside source: true *** True Line Result size_enum: NOKIA_FONT_LG, ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ - Inside source: true *** True Line Result r: 0, g: 0, b: 0, a: 255, ** Processing line: ~ font: NOKIA_FONT_PATH }~ - Inside source: true *** True Line Result font: NOKIA_FONT_PATH } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a MEDIUM/MD label (remove the "#" in front of each line below)~ - Inside source: true *** True Line Result # Render a MEDIUM/MD label (remove the "#" in front of each line below) ** Processing line: ~ args.nokia.labels << { x: 0, y: 16, text: "Hello World",~ - Inside source: true *** True Line Result args.nokia.labels << { x: 0, y: 16, text: "Hello World", ** Processing line: ~ size_enum: NOKIA_FONT_MD,~ - Inside source: true *** True Line Result size_enum: NOKIA_FONT_MD, ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ - Inside source: true *** True Line Result r: 0, g: 0, b: 0, a: 255, ** Processing line: ~ font: NOKIA_FONT_PATH }~ - Inside source: true *** True Line Result font: NOKIA_FONT_PATH } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a SMALL/SM label (remove the "#" in front of each line below)~ - Inside source: true *** True Line Result # Render a SMALL/SM label (remove the "#" in front of each line below) ** Processing line: ~ args.nokia.labels << { x: 0, y: 7, text: "Hello World",~ - Inside source: true *** True Line Result args.nokia.labels << { x: 0, y: 7, text: "Hello World", ** Processing line: ~ size_enum: NOKIA_FONT_SM,~ - Inside source: true *** True Line Result size_enum: NOKIA_FONT_SM, ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ - Inside source: true *** True Line Result r: 0, g: 0, b: 0, a: 255, ** Processing line: ~ font: NOKIA_FONT_PATH }~ - Inside source: true *** True Line Result font: NOKIA_FONT_PATH } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # You are provided args.nokia.default_label which returns a Hash that you~ - Inside source: true *** True Line Result # You are provided args.nokia.default_label which returns a Hash that you ** Processing line: ~ # can ~merge~ properties with~ - Inside source: true *** True Line Result # can ~merge~ properties with ** Processing line: ~ # Example 1~ - Inside source: true *** True Line Result # Example 1 ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(text: "Default")~ - Inside source: true *** True Line Result .merge(text: "Default") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Example 2~ - Inside source: true *** True Line Result # Example 2 ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 31,~ - Inside source: true *** True Line Result .merge(x: 31, ** Processing line: ~ text: "Default")~ - Inside source: true *** True Line Result text: "Default") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ # ==== HOW TO RENDER FILLED SQUARES (SOLIDS) ==================================~ - Inside source: true *** True Line Result # ==== HOW TO RENDER FILLED SQUARES (SOLIDS) ================================== ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ def how_to_render_solids args~ - Inside source: true *** True Line Result def how_to_render_solids args ** Processing line: ~ # Render a square at 0, 0 with a width and height of 1~ - Inside source: true *** True Line Result # Render a square at 0, 0 with a width and height of 1 ** Processing line: ~ args.nokia.solids << { x: 0, y: 0, w: 1, h: 1 }~ - Inside source: true *** True Line Result args.nokia.solids << { x: 0, y: 0, w: 1, h: 1 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a square at 1, 1 with a width and height of 2~ - Inside source: true *** True Line Result # Render a square at 1, 1 with a width and height of 2 ** Processing line: ~ args.nokia.solids << { x: 1, y: 1, w: 2, h: 2 }~ - Inside source: true *** True Line Result args.nokia.solids << { x: 1, y: 1, w: 2, h: 2 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a square at 3, 3 with a width and height of 3~ - Inside source: true *** True Line Result # Render a square at 3, 3 with a width and height of 3 ** Processing line: ~ args.nokia.solids << { x: 3, y: 3, w: 3, h: 3 }~ - Inside source: true *** True Line Result args.nokia.solids << { x: 3, y: 3, w: 3, h: 3 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a square at 6, 6 with a width and height of 4~ - Inside source: true *** True Line Result # Render a square at 6, 6 with a width and height of 4 ** Processing line: ~ args.nokia.solids << { x: 6, y: 6, w: 4, h: 4 }~ - Inside source: true *** True Line Result args.nokia.solids << { x: 6, y: 6, w: 4, h: 4 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ # ==== HOW TO RENDER UNFILLED SQUARES (BORDERS) ===============================~ - Inside source: true *** True Line Result # ==== HOW TO RENDER UNFILLED SQUARES (BORDERS) =============================== ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ def how_to_render_borders args~ - Inside source: true *** True Line Result def how_to_render_borders args ** Processing line: ~ # Render a square at 0, 0 with a width and height of 3~ - Inside source: true *** True Line Result # Render a square at 0, 0 with a width and height of 3 ** Processing line: ~ args.nokia.borders << { x: 0, y: 0, w: 3, h: 3, a: 255 }~ - Inside source: true *** True Line Result args.nokia.borders << { x: 0, y: 0, w: 3, h: 3, a: 255 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a square at 3, 3 with a width and height of 3~ - Inside source: true *** True Line Result # Render a square at 3, 3 with a width and height of 3 ** Processing line: ~ args.nokia.borders << { x: 3, y: 3, w: 4, h: 4, a: 255 }~ - Inside source: true *** True Line Result args.nokia.borders << { x: 3, y: 3, w: 4, h: 4, a: 255 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a square at 5, 5 with a width and height of 4~ - Inside source: true *** True Line Result # Render a square at 5, 5 with a width and height of 4 ** Processing line: ~ args.nokia.borders << { x: 7, y: 7, w: 5, h: 5, a: 255 }~ - Inside source: true *** True Line Result args.nokia.borders << { x: 7, y: 7, w: 5, h: 5, a: 255 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ # ==== HOW TO RENDER A LINE ===================================================~ - Inside source: true *** True Line Result # ==== HOW TO RENDER A LINE =================================================== ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ def how_to_render_lines args~ - Inside source: true *** True Line Result def how_to_render_lines args ** Processing line: ~ # Render a horizontal line at the bottom~ - Inside source: true *** True Line Result # Render a horizontal line at the bottom ** Processing line: ~ args.nokia.lines << { x: 0, y: 0, x2: 83, y2: 0 }~ - Inside source: true *** True Line Result args.nokia.lines << { x: 0, y: 0, x2: 83, y2: 0 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a vertical line at the left~ - Inside source: true *** True Line Result # Render a vertical line at the left ** Processing line: ~ args.nokia.lines << { x: 0, y: 0, x2: 0, y2: 47 }~ - Inside source: true *** True Line Result args.nokia.lines << { x: 0, y: 0, x2: 0, y2: 47 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a diagonal line starting from the bottom left and going to the top right~ - Inside source: true *** True Line Result # Render a diagonal line starting from the bottom left and going to the top right ** Processing line: ~ args.nokia.lines << { x: 0, y: 0, x2: 83, y2: 47 }~ - Inside source: true *** True Line Result args.nokia.lines << { x: 0, y: 0, x2: 83, y2: 47 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ # == HOW TO RENDER A SPRITE ===================================================~ - Inside source: true *** True Line Result # == HOW TO RENDER A SPRITE =================================================== ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ def how_to_render_sprites args~ - Inside source: true *** True Line Result def how_to_render_sprites args ** Processing line: ~ # Loop 10 times and create 10 sprites in 10 positions~ - Inside source: true *** True Line Result # Loop 10 times and create 10 sprites in 10 positions ** Processing line: ~ # Render a sprite at the bottom left with a width and height of 5 and a path of 'sprites/monochrome-ship.png'~ - Inside source: true *** True Line Result # Render a sprite at the bottom left with a width and height of 5 and a path of 'sprites/monochrome-ship.png' ** Processing line: ~ 10.times do |i|~ - Inside source: true *** True Line Result 10.times do |i| ** Processing line: ~ args.nokia.sprites << {~ - Inside source: true *** True Line Result args.nokia.sprites << { ** Processing line: ~ x: i * 8.4,~ - Inside source: true *** True Line Result x: i * 8.4, ** Processing line: ~ y: i * 4.8,~ - Inside source: true *** True Line Result y: i * 4.8, ** Processing line: ~ w: 5,~ - Inside source: true *** True Line Result w: 5, ** Processing line: ~ h: 5,~ - Inside source: true *** True Line Result h: 5, ** Processing line: ~ path: 'sprites/monochrome-ship.png'~ - Inside source: true *** True Line Result path: 'sprites/monochrome-ship.png' ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Given an array of positions create sprites~ - Inside source: true *** True Line Result # Given an array of positions create sprites ** Processing line: ~ positions = [~ - Inside source: true *** True Line Result positions = [ ** Processing line: ~ { x: 20, y: 32 },~ - Inside source: true *** True Line Result { x: 20, y: 32 }, ** Processing line: ~ { x: 45, y: 15 },~ - Inside source: true *** True Line Result { x: 45, y: 15 }, ** Processing line: ~ { x: 72, y: 23 },~ - Inside source: true *** True Line Result { x: 72, y: 23 }, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ positions.each do |position|~ - Inside source: true *** True Line Result positions.each do |position| ** Processing line: ~ # use Ruby's ~Hash#merge~ function to create a sprite~ - Inside source: true *** True Line Result # use Ruby's ~Hash#merge~ function to create a sprite ** Processing line: ~ args.nokia.sprites << position.merge(path: 'sprites/monochrome-ship.png',~ - Inside source: true *** True Line Result args.nokia.sprites << position.merge(path: 'sprites/monochrome-ship.png', ** Processing line: ~ w: 5,~ - Inside source: true *** True Line Result w: 5, ** Processing line: ~ h: 5)~ - Inside source: true *** True Line Result h: 5) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ # ==== HOW TO ANIMATE A SPRITE (SEPERATE PNGS) ==========================~ - Inside source: true *** True Line Result # ==== HOW TO ANIMATE A SPRITE (SEPERATE PNGS) ========================== ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ def how_to_animate_a_sprite args~ - Inside source: true *** True Line Result def how_to_animate_a_sprite args ** Processing line: ~ # STEP 1: Define when you want the animation to start. The animation in this case will start in 3 seconds~ - Inside source: true *** True Line Result # STEP 1: Define when you want the animation to start. The animation in this case will start in 3 seconds ** Processing line: ~ start_animation_on_tick = 180~ - Inside source: true *** True Line Result start_animation_on_tick = 180 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # STEP 2: Get the frame_index given the start tick.~ - Inside source: true *** True Line Result # STEP 2: Get the frame_index given the start tick. ** Processing line: ~ sprite_index = start_animation_on_tick.frame_index count: 7, # how many sprites?~ - Inside source: true *** True Line Result sprite_index = start_animation_on_tick.frame_index count: 7, # how many sprites? ** Processing line: ~ hold_for: 8, # how long to hold each sprite?~ - Inside source: true *** True Line Result hold_for: 8, # how long to hold each sprite? ** Processing line: ~ repeat: true # should it repeat?~ - Inside source: true *** True Line Result repeat: true # should it repeat? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # STEP 3: frame_index will return nil if the frame hasn't arrived yet~ - Inside source: true *** True Line Result # STEP 3: frame_index will return nil if the frame hasn't arrived yet ** Processing line: ~ if sprite_index~ - Inside source: true *** True Line Result if sprite_index ** Processing line: ~ # if the sprite_index is populated, use it to determine the sprite path and render it~ - Inside source: true *** True Line Result # if the sprite_index is populated, use it to determine the sprite path and render it ** Processing line: ~ sprite_path = "sprites/explosion-#{sprite_index}.png"~ - Inside source: true *** True Line Result sprite_path = "sprites/explosion-#{sprite_index}.png" ** Processing line: ~ args.nokia.sprites << { x: 42 - 16,~ - Inside source: true *** True Line Result args.nokia.sprites << { x: 42 - 16, ** Processing line: ~ y: 47 - 32,~ - Inside source: true *** True Line Result y: 47 - 32, ** Processing line: ~ w: 32,~ - Inside source: true *** True Line Result w: 32, ** Processing line: ~ h: 32,~ - Inside source: true *** True Line Result h: 32, ** Processing line: ~ path: sprite_path }~ - Inside source: true *** True Line Result path: sprite_path } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ # if the sprite_index is nil, render a countdown instead~ - Inside source: true *** True Line Result # if the sprite_index is nil, render a countdown instead ** Processing line: ~ countdown_in_seconds = ((start_animation_on_tick - args.state.tick_count) / 60).round(1)~ - Inside source: true *** True Line Result countdown_in_seconds = ((start_animation_on_tick - args.state.tick_count) / 60).round(1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 0,~ - Inside source: true *** True Line Result .merge(x: 0, ** Processing line: ~ y: 18,~ - Inside source: true *** True Line Result y: 18, ** Processing line: ~ text: "Count Down: #{countdown_in_seconds.to_sf}",~ - Inside source: true *** True Line Result text: "Count Down: #{countdown_in_seconds.to_sf}", ** Processing line: ~ alignment_enum: 0)~ - Inside source: true *** True Line Result alignment_enum: 0) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render the current tick and the resolved sprite index~ - Inside source: true *** True Line Result # render the current tick and the resolved sprite index ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 0,~ - Inside source: true *** True Line Result .merge(x: 0, ** Processing line: ~ y: 11,~ - Inside source: true *** True Line Result y: 11, ** Processing line: ~ text: "Tick: #{args.state.tick_count}")~ - Inside source: true *** True Line Result text: "Tick: #{args.state.tick_count}") ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 0,~ - Inside source: true *** True Line Result .merge(x: 0, ** Processing line: ~ y: 5,~ - Inside source: true *** True Line Result y: 5, ** Processing line: ~ text: "sprite_index: #{sprite_index}")~ - Inside source: true *** True Line Result text: "sprite_index: #{sprite_index}") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ # ==== HOW TO ANIMATE A SPRITE (SPRITE SHEET) =================================~ - Inside source: true *** True Line Result # ==== HOW TO ANIMATE A SPRITE (SPRITE SHEET) ================================= ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ def how_to_animate_a_sprite_sheet args~ - Inside source: true *** True Line Result def how_to_animate_a_sprite_sheet args ** Processing line: ~ # STEP 1: Define when you want the animation to start. The animation in this case will start in 3 seconds~ - Inside source: true *** True Line Result # STEP 1: Define when you want the animation to start. The animation in this case will start in 3 seconds ** Processing line: ~ start_animation_on_tick = 180~ - Inside source: true *** True Line Result start_animation_on_tick = 180 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # STEP 2: Get the frame_index given the start tick.~ - Inside source: true *** True Line Result # STEP 2: Get the frame_index given the start tick. ** Processing line: ~ sprite_index = start_animation_on_tick.frame_index count: 7, # how many sprites?~ - Inside source: true *** True Line Result sprite_index = start_animation_on_tick.frame_index count: 7, # how many sprites? ** Processing line: ~ hold_for: 8, # how long to hold each sprite?~ - Inside source: true *** True Line Result hold_for: 8, # how long to hold each sprite? ** Processing line: ~ repeat: true # should it repeat?~ - Inside source: true *** True Line Result repeat: true # should it repeat? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # STEP 3: frame_index will return nil if the frame hasn't arrived yet~ - Inside source: true *** True Line Result # STEP 3: frame_index will return nil if the frame hasn't arrived yet ** Processing line: ~ if sprite_index~ - Inside source: true *** True Line Result if sprite_index ** Processing line: ~ # if the sprite_index is populated, use it to determine the source rectangle and render it~ - Inside source: true *** True Line Result # if the sprite_index is populated, use it to determine the source rectangle and render it ** Processing line: ~ args.nokia.sprites << {~ - Inside source: true *** True Line Result args.nokia.sprites << { ** Processing line: ~ x: 42 - 16,~ - Inside source: true *** True Line Result x: 42 - 16, ** Processing line: ~ y: 47 - 32,~ - Inside source: true *** True Line Result y: 47 - 32, ** Processing line: ~ w: 32,~ - Inside source: true *** True Line Result w: 32, ** Processing line: ~ h: 32,~ - Inside source: true *** True Line Result h: 32, ** Processing line: ~ path: "sprites/explosion-sheet.png",~ - Inside source: true *** True Line Result path: "sprites/explosion-sheet.png", ** Processing line: ~ source_x: 32 * sprite_index,~ - Inside source: true *** True Line Result source_x: 32 * sprite_index, ** Processing line: ~ source_y: 0,~ - Inside source: true *** True Line Result source_y: 0, ** Processing line: ~ source_w: 32,~ - Inside source: true *** True Line Result source_w: 32, ** Processing line: ~ source_h: 32~ - Inside source: true *** True Line Result source_h: 32 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ # if the sprite_index is nil, render a countdown instead~ - Inside source: true *** True Line Result # if the sprite_index is nil, render a countdown instead ** Processing line: ~ countdown_in_seconds = ((start_animation_on_tick - args.state.tick_count) / 60).round(1)~ - Inside source: true *** True Line Result countdown_in_seconds = ((start_animation_on_tick - args.state.tick_count) / 60).round(1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 0,~ - Inside source: true *** True Line Result .merge(x: 0, ** Processing line: ~ y: 18,~ - Inside source: true *** True Line Result y: 18, ** Processing line: ~ text: "Count Down: #{countdown_in_seconds.to_sf}",~ - Inside source: true *** True Line Result text: "Count Down: #{countdown_in_seconds.to_sf}", ** Processing line: ~ alignment_enum: 0)~ - Inside source: true *** True Line Result alignment_enum: 0) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render the current tick and the resolved sprite index~ - Inside source: true *** True Line Result # render the current tick and the resolved sprite index ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 0,~ - Inside source: true *** True Line Result .merge(x: 0, ** Processing line: ~ y: 11,~ - Inside source: true *** True Line Result y: 11, ** Processing line: ~ text: "tick: #{args.state.tick_count}")~ - Inside source: true *** True Line Result text: "tick: #{args.state.tick_count}") ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 0,~ - Inside source: true *** True Line Result .merge(x: 0, ** Processing line: ~ y: 5,~ - Inside source: true *** True Line Result y: 5, ** Processing line: ~ text: "sprite_index: #{sprite_index}")~ - Inside source: true *** True Line Result text: "sprite_index: #{sprite_index}") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ # ==== HOW TO STORE STATE, ACCEPT INPUT, AND RENDER SPRITE BASED OFF OF STATE =~ - Inside source: true *** True Line Result # ==== HOW TO STORE STATE, ACCEPT INPUT, AND RENDER SPRITE BASED OFF OF STATE = ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ def how_to_move_a_sprite args~ - Inside source: true *** True Line Result def how_to_move_a_sprite args ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 42,~ - Inside source: true *** True Line Result .merge(x: 42, ** Processing line: ~ y: 46, text: "Use Arrow Keys",~ - Inside source: true *** True Line Result y: 46, text: "Use Arrow Keys", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 42,~ - Inside source: true *** True Line Result .merge(x: 42, ** Processing line: ~ y: 41, text: "Or WASD",~ - Inside source: true *** True Line Result y: 41, text: "Or WASD", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 42,~ - Inside source: true *** True Line Result .merge(x: 42, ** Processing line: ~ y: 36, text: "Or Click",~ - Inside source: true *** True Line Result y: 36, text: "Or Click", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # set the initial values for x and y using ||= ("or equal operator")~ - Inside source: true *** True Line Result # set the initial values for x and y using ||= ("or equal operator") ** Processing line: ~ args.state.ship.x ||= 0~ - Inside source: true *** True Line Result args.state.ship.x ||= 0 ** Processing line: ~ args.state.ship.y ||= 0~ - Inside source: true *** True Line Result args.state.ship.y ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if a mouse click occurs, update the ship's x and y to be the location of the click~ - Inside source: true *** True Line Result # if a mouse click occurs, update the ship's x and y to be the location of the click ** Processing line: ~ if args.nokia.mouse_click~ - Inside source: true *** True Line Result if args.nokia.mouse_click ** Processing line: ~ args.state.ship.x = args.nokia.mouse_click.x~ - Inside source: true *** True Line Result args.state.ship.x = args.nokia.mouse_click.x ** Processing line: ~ args.state.ship.y = args.nokia.mouse_click.y~ - Inside source: true *** True Line Result args.state.ship.y = args.nokia.mouse_click.y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if a or left arrow is pressed/held, decrement the ships x position~ - Inside source: true *** True Line Result # if a or left arrow is pressed/held, decrement the ships x position ** Processing line: ~ if args.nokia.keyboard.left~ - Inside source: true *** True Line Result if args.nokia.keyboard.left ** Processing line: ~ args.state.ship.x -= 1~ - Inside source: true *** True Line Result args.state.ship.x -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if d or right arrow is pressed/held, increment the ships x position~ - Inside source: true *** True Line Result # if d or right arrow is pressed/held, increment the ships x position ** Processing line: ~ if args.nokia.keyboard.right~ - Inside source: true *** True Line Result if args.nokia.keyboard.right ** Processing line: ~ args.state.ship.x += 1~ - Inside source: true *** True Line Result args.state.ship.x += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if s or down arrow is pressed/held, decrement the ships y position~ - Inside source: true *** True Line Result # if s or down arrow is pressed/held, decrement the ships y position ** Processing line: ~ if args.nokia.keyboard.down~ - Inside source: true *** True Line Result if args.nokia.keyboard.down ** Processing line: ~ args.state.ship.y -= 1~ - Inside source: true *** True Line Result args.state.ship.y -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if w or up arrow is pressed/held, increment the ships y position~ - Inside source: true *** True Line Result # if w or up arrow is pressed/held, increment the ships y position ** Processing line: ~ if args.nokia.keyboard.up~ - Inside source: true *** True Line Result if args.nokia.keyboard.up ** Processing line: ~ args.state.ship.y += 1~ - Inside source: true *** True Line Result args.state.ship.y += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render the sprite to the screen using the position stored in args.state.ship~ - Inside source: true *** True Line Result # render the sprite to the screen using the position stored in args.state.ship ** Processing line: ~ args.nokia.sprites << {~ - Inside source: true *** True Line Result args.nokia.sprites << { ** Processing line: ~ x: args.state.ship.x,~ - Inside source: true *** True Line Result x: args.state.ship.x, ** Processing line: ~ y: args.state.ship.y,~ - Inside source: true *** True Line Result y: args.state.ship.y, ** Processing line: ~ w: 5,~ - Inside source: true *** True Line Result w: 5, ** Processing line: ~ h: 5,~ - Inside source: true *** True Line Result h: 5, ** Processing line: ~ path: 'sprites/monochrome-ship.png',~ - Inside source: true *** True Line Result path: 'sprites/monochrome-ship.png', ** Processing line: ~ # parameters beyond this point are optional~ - Inside source: true *** True Line Result # parameters beyond this point are optional ** Processing line: ~ angle: 0, # Note: rotation angle is denoted in degrees NOT radians~ - Inside source: true *** True Line Result angle: 0, # Note: rotation angle is denoted in degrees NOT radians ** Processing line: ~ r: 255,~ - Inside source: true *** True Line Result r: 255, ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 255,~ - Inside source: true *** True Line Result b: 255, ** Processing line: ~ a: 255~ - Inside source: true *** True Line Result a: 255 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HOW TO DETERMINE COLLISION =======================================~ - Inside source: true *** True Line Result # ==== HOW TO DETERMINE COLLISION ======================================= ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ def how_to_determine_collision args~ - Inside source: true *** True Line Result def how_to_determine_collision args ** Processing line: ~ # Render the instructions~ - Inside source: true *** True Line Result # Render the instructions ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 42,~ - Inside source: true *** True Line Result .merge(x: 42, ** Processing line: ~ y: 46, text: "Click Anywhere",~ - Inside source: true *** True Line Result y: 46, text: "Click Anywhere", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if a mouse click occurs:~ - Inside source: true *** True Line Result # if a mouse click occurs: ** Processing line: ~ # - set ship_one if it isn't set~ - Inside source: true *** True Line Result # - set ship_one if it isn't set ** Processing line: ~ # - set ship_two if it isn't set~ - Inside source: true *** True Line Result # - set ship_two if it isn't set ** Processing line: ~ # - otherwise reset ship one and ship two~ - Inside source: true *** True Line Result # - otherwise reset ship one and ship two ** Processing line: ~ if args.nokia.mouse_click~ - Inside source: true *** True Line Result if args.nokia.mouse_click ** Processing line: ~ # is ship_one set?~ - Inside source: true *** True Line Result # is ship_one set? ** Processing line: ~ if !args.state.ship_one~ - Inside source: true *** True Line Result if !args.state.ship_one ** Processing line: ~ args.state.ship_one = { x: args.nokia.mouse_click.x - 5,~ - Inside source: true *** True Line Result args.state.ship_one = { x: args.nokia.mouse_click.x - 5, ** Processing line: ~ y: args.nokia.mouse_click.y - 5,~ - Inside source: true *** True Line Result y: args.nokia.mouse_click.y - 5, ** Processing line: ~ w: 10,~ - Inside source: true *** True Line Result w: 10, ** Processing line: ~ h: 10 }~ - Inside source: true *** True Line Result h: 10 } ** Processing line: ~ # is ship_one set?~ - Inside source: true *** True Line Result # is ship_one set? ** Processing line: ~ elsif !args.state.ship_two~ - Inside source: true *** True Line Result elsif !args.state.ship_two ** Processing line: ~ args.state.ship_two = { x: args.nokia.mouse_click.x - 5,~ - Inside source: true *** True Line Result args.state.ship_two = { x: args.nokia.mouse_click.x - 5, ** Processing line: ~ y: args.nokia.mouse_click.y - 5,~ - Inside source: true *** True Line Result y: args.nokia.mouse_click.y - 5, ** Processing line: ~ w: 10,~ - Inside source: true *** True Line Result w: 10, ** Processing line: ~ h: 10 }~ - Inside source: true *** True Line Result h: 10 } ** Processing line: ~ # should we reset?~ - Inside source: true *** True Line Result # should we reset? ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.ship_one = nil~ - Inside source: true *** True Line Result args.state.ship_one = nil ** Processing line: ~ args.state.ship_two = nil~ - Inside source: true *** True Line Result args.state.ship_two = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render ship one if it's set~ - Inside source: true *** True Line Result # render ship one if it's set ** Processing line: ~ if args.state.ship_one~ - Inside source: true *** True Line Result if args.state.ship_one ** Processing line: ~ # use Ruby's .merge method which is available on ~Hash~ to set the sprite and alpha~ - Inside source: true *** True Line Result # use Ruby's .merge method which is available on ~Hash~ to set the sprite and alpha ** Processing line: ~ # render ship one~ - Inside source: true *** True Line Result # render ship one ** Processing line: ~ args.nokia.sprites << args.state.ship_one.merge(path: 'sprites/monochrome-ship.png')~ - Inside source: true *** True Line Result args.nokia.sprites << args.state.ship_one.merge(path: 'sprites/monochrome-ship.png') ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.ship_two~ - Inside source: true *** True Line Result if args.state.ship_two ** Processing line: ~ # use Ruby's .merge method which is available on ~Hash~ to set the sprite and alpha~ - Inside source: true *** True Line Result # use Ruby's .merge method which is available on ~Hash~ to set the sprite and alpha ** Processing line: ~ # render ship two~ - Inside source: true *** True Line Result # render ship two ** Processing line: ~ args.nokia.sprites << args.state.ship_two.merge(path: 'sprites/monochrome-ship.png')~ - Inside source: true *** True Line Result args.nokia.sprites << args.state.ship_two.merge(path: 'sprites/monochrome-ship.png') ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if both ship one and ship two are set, then determine collision~ - Inside source: true *** True Line Result # if both ship one and ship two are set, then determine collision ** Processing line: ~ if args.state.ship_one && args.state.ship_two~ - Inside source: true *** True Line Result if args.state.ship_one && args.state.ship_two ** Processing line: ~ # collision is determined using the intersect_rect? method~ - Inside source: true *** True Line Result # collision is determined using the intersect_rect? method ** Processing line: ~ if args.state.ship_one.intersect_rect? args.state.ship_two~ - Inside source: true *** True Line Result if args.state.ship_one.intersect_rect? args.state.ship_two ** Processing line: ~ # if collision occurred, render the words collision!~ - Inside source: true *** True Line Result # if collision occurred, render the words collision! ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 42,~ - Inside source: true *** True Line Result .merge(x: 42, ** Processing line: ~ y: 5,~ - Inside source: true *** True Line Result y: 5, ** Processing line: ~ text: "Collision!",~ - Inside source: true *** True Line Result text: "Collision!", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ # if collision occurred, render the words no collision.~ - Inside source: true *** True Line Result # if collision occurred, render the words no collision. ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 42,~ - Inside source: true *** True Line Result .merge(x: 42, ** Processing line: ~ y: 5,~ - Inside source: true *** True Line Result y: 5, ** Processing line: ~ text: "No Collision.",~ - Inside source: true *** True Line Result text: "No Collision.", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ # if both ship one and ship two aren't set, then render --~ - Inside source: true *** True Line Result # if both ship one and ship two aren't set, then render -- ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 42,~ - Inside source: true *** True Line Result .merge(x: 42, ** Processing line: ~ y: 6,~ - Inside source: true *** True Line Result y: 6, ** Processing line: ~ text: "--",~ - Inside source: true *** True Line Result text: "--", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ # ==== HOW TO CREATE BUTTONS ==================================================~ - Inside source: true *** True Line Result # ==== HOW TO CREATE BUTTONS ================================================== ** Processing line: ~ # =============================================================================~ - Inside source: true *** True Line Result # ============================================================================= ** Processing line: ~ def how_to_create_buttons args~ - Inside source: true *** True Line Result def how_to_create_buttons args ** Processing line: ~ # Define a button style~ - Inside source: true *** True Line Result # Define a button style ** Processing line: ~ args.state.button_style = { w: 82, h: 10, }~ - Inside source: true *** True Line Result args.state.button_style = { w: 82, h: 10, } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render instructions~ - Inside source: true *** True Line Result # Render instructions ** Processing line: ~ args.state.button_message ||= "Press a Button!"~ - Inside source: true *** True Line Result args.state.button_message ||= "Press a Button!" ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 42,~ - Inside source: true *** True Line Result .merge(x: 42, ** Processing line: ~ y: 82,~ - Inside source: true *** True Line Result y: 82, ** Processing line: ~ text: args.state.button_message,~ - Inside source: true *** True Line Result text: args.state.button_message, ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates button one using a border and a label~ - Inside source: true *** True Line Result # Creates button one using a border and a label ** Processing line: ~ args.state.button_one_border = args.state.button_style.merge( x: 1, y: 32)~ - Inside source: true *** True Line Result args.state.button_one_border = args.state.button_style.merge( x: 1, y: 32) ** Processing line: ~ args.nokia.borders << args.state.button_one_border~ - Inside source: true *** True Line Result args.nokia.borders << args.state.button_one_border ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: args.state.button_one_border.x + 2,~ - Inside source: true *** True Line Result .merge(x: args.state.button_one_border.x + 2, ** Processing line: ~ y: args.state.button_one_border.y + NOKIA_FONT_SM_HEIGHT + 2,~ - Inside source: true *** True Line Result y: args.state.button_one_border.y + NOKIA_FONT_SM_HEIGHT + 2, ** Processing line: ~ text: "Button One")~ - Inside source: true *** True Line Result text: "Button One") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates button two using a border and a label~ - Inside source: true *** True Line Result # Creates button two using a border and a label ** Processing line: ~ args.state.button_two_border = args.state.button_style.merge( x: 1, y: 20)~ - Inside source: true *** True Line Result args.state.button_two_border = args.state.button_style.merge( x: 1, y: 20) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.nokia.borders << args.state.button_two_border~ - Inside source: true *** True Line Result args.nokia.borders << args.state.button_two_border ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: args.state.button_two_border.x + 2,~ - Inside source: true *** True Line Result .merge(x: args.state.button_two_border.x + 2, ** Processing line: ~ y: args.state.button_two_border.y + NOKIA_FONT_SM_HEIGHT + 2,~ - Inside source: true *** True Line Result y: args.state.button_two_border.y + NOKIA_FONT_SM_HEIGHT + 2, ** Processing line: ~ text: "Button Two")~ - Inside source: true *** True Line Result text: "Button Two") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Initialize the state variable that tracks which button was clicked to "" (empty stringI~ - Inside source: true *** True Line Result # Initialize the state variable that tracks which button was clicked to "" (empty stringI ** Processing line: ~ args.state.last_button_clicked ||= "--"~ - Inside source: true *** True Line Result args.state.last_button_clicked ||= "--" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If a click occurs, check to see if either button one, or button two was clicked~ - Inside source: true *** True Line Result # If a click occurs, check to see if either button one, or button two was clicked ** Processing line: ~ # using the inside_rect? method of the mouse~ - Inside source: true *** True Line Result # using the inside_rect? method of the mouse ** Processing line: ~ # set args.state.last_button_clicked accordingly~ - Inside source: true *** True Line Result # set args.state.last_button_clicked accordingly ** Processing line: ~ if args.nokia.mouse_click~ - Inside source: true *** True Line Result if args.nokia.mouse_click ** Processing line: ~ if args.nokia.mouse_click.inside_rect? args.state.button_one_border~ - Inside source: true *** True Line Result if args.nokia.mouse_click.inside_rect? args.state.button_one_border ** Processing line: ~ args.state.last_button_clicked = "One Clicked!"~ - Inside source: true *** True Line Result args.state.last_button_clicked = "One Clicked!" ** Processing line: ~ elsif args.nokia.mouse_click.inside_rect? args.state.button_two_border~ - Inside source: true *** True Line Result elsif args.nokia.mouse_click.inside_rect? args.state.button_two_border ** Processing line: ~ args.state.last_button_clicked = "Two Clicked!"~ - Inside source: true *** True Line Result args.state.last_button_clicked = "Two Clicked!" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.last_button_clicked = "--"~ - Inside source: true *** True Line Result args.state.last_button_clicked = "--" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render the current value of args.state.last_button_clicked~ - Inside source: true *** True Line Result # Render the current value of args.state.last_button_clicked ** Processing line: ~ args.nokia.labels << args.nokia~ - Inside source: true *** True Line Result args.nokia.labels << args.nokia ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 42,~ - Inside source: true *** True Line Result .merge(x: 42, ** Processing line: ~ y: 5,~ - Inside source: true *** True Line Result y: 5, ** Processing line: ~ text: args.state.last_button_clicked,~ - Inside source: true *** True Line Result text: args.state.last_button_clicked, ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_debug args~ - Inside source: true *** True Line Result def render_debug args ** Processing line: ~ if !args.state.grid_rendered~ - Inside source: true *** True Line Result if !args.state.grid_rendered ** Processing line: ~ (NOKIA_HEIGHT + 1).map_with_index do |i|~ - Inside source: true *** True Line Result (NOKIA_HEIGHT + 1).map_with_index do |i| ** Processing line: ~ args.outputs.static_debug << {~ - Inside source: true *** True Line Result args.outputs.static_debug << { ** Processing line: ~ x: NOKIA_X_OFFSET,~ - Inside source: true *** True Line Result x: NOKIA_X_OFFSET, ** Processing line: ~ y: NOKIA_Y_OFFSET + (i * NOKIA_ZOOM),~ - Inside source: true *** True Line Result y: NOKIA_Y_OFFSET + (i * NOKIA_ZOOM), ** Processing line: ~ x2: NOKIA_X_OFFSET + NOKIA_ZOOMED_WIDTH,~ - Inside source: true *** True Line Result x2: NOKIA_X_OFFSET + NOKIA_ZOOMED_WIDTH, ** Processing line: ~ y2: NOKIA_Y_OFFSET + (i * NOKIA_ZOOM),~ - Inside source: true *** True Line Result y2: NOKIA_Y_OFFSET + (i * NOKIA_ZOOM), ** Processing line: ~ r: 128,~ - Inside source: true *** True Line Result r: 128, ** Processing line: ~ g: 128,~ - Inside source: true *** True Line Result g: 128, ** Processing line: ~ b: 128,~ - Inside source: true *** True Line Result b: 128, ** Processing line: ~ a: 80~ - Inside source: true *** True Line Result a: 80 ** Processing line: ~ }.line~ - Inside source: true *** True Line Result }.line ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ (NOKIA_WIDTH + 1).map_with_index do |i|~ - Inside source: true *** True Line Result (NOKIA_WIDTH + 1).map_with_index do |i| ** Processing line: ~ args.outputs.static_debug << {~ - Inside source: true *** True Line Result args.outputs.static_debug << { ** Processing line: ~ x: NOKIA_X_OFFSET + (i * NOKIA_ZOOM),~ - Inside source: true *** True Line Result x: NOKIA_X_OFFSET + (i * NOKIA_ZOOM), ** Processing line: ~ y: NOKIA_Y_OFFSET,~ - Inside source: true *** True Line Result y: NOKIA_Y_OFFSET, ** Processing line: ~ x2: NOKIA_X_OFFSET + (i * NOKIA_ZOOM),~ - Inside source: true *** True Line Result x2: NOKIA_X_OFFSET + (i * NOKIA_ZOOM), ** Processing line: ~ y2: NOKIA_Y_OFFSET + NOKIA_ZOOMED_HEIGHT,~ - Inside source: true *** True Line Result y2: NOKIA_Y_OFFSET + NOKIA_ZOOMED_HEIGHT, ** Processing line: ~ r: 128,~ - Inside source: true *** True Line Result r: 128, ** Processing line: ~ g: 128,~ - Inside source: true *** True Line Result g: 128, ** Processing line: ~ b: 128,~ - Inside source: true *** True Line Result b: 128, ** Processing line: ~ a: 80~ - Inside source: true *** True Line Result a: 80 ** Processing line: ~ }.line~ - Inside source: true *** True Line Result }.line ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.grid_rendered = true~ - Inside source: true *** True Line Result args.state.grid_rendered = true ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.last_click ||= 0~ - Inside source: true *** True Line Result args.state.last_click ||= 0 ** Processing line: ~ args.state.last_up ||= 0~ - Inside source: true *** True Line Result args.state.last_up ||= 0 ** Processing line: ~ args.state.last_click = args.state.tick_count if args.nokia.mouse_down # you can also use args.nokia.click~ - Inside source: true *** True Line Result args.state.last_click = args.state.tick_count if args.nokia.mouse_down # you can also use args.nokia.click ** Processing line: ~ args.state.last_up = args.state.tick_count if args.nokia.mouse_up~ - Inside source: true *** True Line Result args.state.last_up = args.state.tick_count if args.nokia.mouse_up ** Processing line: ~ args.state.label_style = { size_enum: -1.5 }~ - Inside source: true *** True Line Result args.state.label_style = { size_enum: -1.5 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.watch_list = [~ - Inside source: true *** True Line Result args.state.watch_list = [ ** Processing line: ~ "args.state.tick_count is: #{args.state.tick_count}",~ - Inside source: true *** True Line Result "args.state.tick_count is: #{args.state.tick_count}", ** Processing line: ~ "args.nokia.mouse_position is: #{args.nokia.mouse_position.x}, #{args.nokia.mouse_position.y}",~ - Inside source: true *** True Line Result "args.nokia.mouse_position is: #{args.nokia.mouse_position.x}, #{args.nokia.mouse_position.y}", ** Processing line: ~ "args.nokia.mouse_down tick: #{args.state.last_click || "never"}",~ - Inside source: true *** True Line Result "args.nokia.mouse_down tick: #{args.state.last_click || "never"}", ** Processing line: ~ "args.nokia.mouse_up tick: #{args.state.last_up || "false"}",~ - Inside source: true *** True Line Result "args.nokia.mouse_up tick: #{args.state.last_up || "false"}", ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << args.state~ - Inside source: true *** True Line Result args.outputs.debug << args.state ** Processing line: ~ .watch_list~ - Inside source: true *** True Line Result .watch_list ** Processing line: ~ .map_with_index do |text, i|~ - Inside source: true *** True Line Result .map_with_index do |text, i| ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: 5,~ - Inside source: true *** True Line Result x: 5, ** Processing line: ~ y: 720 - (i * 18),~ - Inside source: true *** True Line Result y: 720 - (i * 18), ** Processing line: ~ text: text,~ - Inside source: true *** True Line Result text: text, ** Processing line: ~ size_enum: -1.5,~ - Inside source: true *** True Line Result size_enum: -1.5, ** Processing line: ~ r: 255, g: 255, b: 255~ - Inside source: true *** True Line Result r: 255, g: 255, b: 255 ** Processing line: ~ }.label!~ - Inside source: true *** True Line Result }.label! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << {~ - Inside source: true *** True Line Result args.outputs.debug << { ** Processing line: ~ x: 640,~ - Inside source: true *** True Line Result x: 640, ** Processing line: ~ y: 25,~ - Inside source: true *** True Line Result y: 25, ** Processing line: ~ text: "INFO: dev mode is currently enabled. Comment out the invocation of ~render_debug~ within the ~tick~ method to hide the debug layer.",~ - Inside source: true *** True Line Result text: "INFO: dev mode is currently enabled. Comment out the invocation of ~render_debug~ within the ~tick~ method to hide the debug layer.", ** Processing line: ~ size_enum: -0.5,~ - Inside source: true *** True Line Result size_enum: -0.5, ** Processing line: ~ alignment_enum: 1,~ - Inside source: true *** True Line Result alignment_enum: 1, ** Processing line: ~ r: 255, g: 255, b: 255~ - Inside source: true *** True Line Result r: 255, g: 255, b: 255 ** Processing line: ~ }.label!~ - Inside source: true *** True Line Result }.label! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def snake_demo args~ - Inside source: true *** True Line Result def snake_demo args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Lowrez - Nokia 3310 - nokia.rb~ - Header detected. *** True Line Result *** True Line Result *** Lowrez - Nokia 3310 - nokia.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_lowrez/nokia_3310/app/nokia.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_lowrez/nokia_3310/app/nokia.rb ** Processing line: ~ # Emulation of a 64x64 canvas. Don't change this file unless you know what you're doing :-)~ - Inside source: true *** True Line Result # Emulation of a 64x64 canvas. Don't change this file unless you know what you're doing :-) ** Processing line: ~ # Head over to main.rb and study the code there.~ - Inside source: true *** True Line Result # Head over to main.rb and study the code there. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ NOKIA_WIDTH = 84~ - Inside source: true *** True Line Result NOKIA_WIDTH = 84 ** Processing line: ~ NOKIA_HEIGHT = 48~ - Inside source: true *** True Line Result NOKIA_HEIGHT = 48 ** Processing line: ~ NOKIA_ZOOM = 12~ - Inside source: true *** True Line Result NOKIA_ZOOM = 12 ** Processing line: ~ NOKIA_ZOOMED_WIDTH = NOKIA_WIDTH * NOKIA_ZOOM~ - Inside source: true *** True Line Result NOKIA_ZOOMED_WIDTH = NOKIA_WIDTH * NOKIA_ZOOM ** Processing line: ~ NOKIA_ZOOMED_HEIGHT = NOKIA_HEIGHT * NOKIA_ZOOM~ - Inside source: true *** True Line Result NOKIA_ZOOMED_HEIGHT = NOKIA_HEIGHT * NOKIA_ZOOM ** Processing line: ~ NOKIA_X_OFFSET = (1280 - NOKIA_ZOOMED_WIDTH).half~ - Inside source: true *** True Line Result NOKIA_X_OFFSET = (1280 - NOKIA_ZOOMED_WIDTH).half ** Processing line: ~ NOKIA_Y_OFFSET = ( 720 - NOKIA_ZOOMED_HEIGHT).half~ - Inside source: true *** True Line Result NOKIA_Y_OFFSET = ( 720 - NOKIA_ZOOMED_HEIGHT).half ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ NOKIA_FONT_XL = -1~ - Inside source: true *** True Line Result NOKIA_FONT_XL = -1 ** Processing line: ~ NOKIA_FONT_XL_HEIGHT = 20~ - Inside source: true *** True Line Result NOKIA_FONT_XL_HEIGHT = 20 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ NOKIA_FONT_LG = -3.5~ - Inside source: true *** True Line Result NOKIA_FONT_LG = -3.5 ** Processing line: ~ NOKIA_FONT_LG_HEIGHT = 15~ - Inside source: true *** True Line Result NOKIA_FONT_LG_HEIGHT = 15 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ NOKIA_FONT_MD = -6~ - Inside source: true *** True Line Result NOKIA_FONT_MD = -6 ** Processing line: ~ NOKIA_FONT_MD_HEIGHT = 10~ - Inside source: true *** True Line Result NOKIA_FONT_MD_HEIGHT = 10 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ NOKIA_FONT_SM = -8.5~ - Inside source: true *** True Line Result NOKIA_FONT_SM = -8.5 ** Processing line: ~ NOKIA_FONT_SM_HEIGHT = 5~ - Inside source: true *** True Line Result NOKIA_FONT_SM_HEIGHT = 5 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ NOKIA_FONT_PATH = 'fonts/lowrez.ttf'~ - Inside source: true *** True Line Result NOKIA_FONT_PATH = 'fonts/lowrez.ttf' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class NokiaOutputs~ - Inside source: true *** True Line Result class NokiaOutputs ** Processing line: ~ attr_accessor :width, :height~ - Inside source: true *** True Line Result attr_accessor :width, :height ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize args~ - Inside source: true *** True Line Result def initialize args ** Processing line: ~ @args = args~ - Inside source: true *** True Line Result @args = args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def outputs_nokia~ - Inside source: true *** True Line Result def outputs_nokia ** Processing line: ~ return @args.outputs if @args.state.tick_count <= 0~ - Inside source: true *** True Line Result return @args.outputs if @args.state.tick_count <= 0 ** Processing line: ~ return @args.outputs[:nokia]~ - Inside source: true *** True Line Result return @args.outputs[:nokia] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def solids~ - Inside source: true *** True Line Result def solids ** Processing line: ~ outputs_nokia.solids~ - Inside source: true *** True Line Result outputs_nokia.solids ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def borders~ - Inside source: true *** True Line Result def borders ** Processing line: ~ outputs_nokia.borders~ - Inside source: true *** True Line Result outputs_nokia.borders ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def sprites~ - Inside source: true *** True Line Result def sprites ** Processing line: ~ outputs_nokia.sprites~ - Inside source: true *** True Line Result outputs_nokia.sprites ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def labels~ - Inside source: true *** True Line Result def labels ** Processing line: ~ outputs_nokia.labels~ - Inside source: true *** True Line Result outputs_nokia.labels ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def default_label~ - Inside source: true *** True Line Result def default_label ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: 0,~ - Inside source: true *** True Line Result x: 0, ** Processing line: ~ y: 63,~ - Inside source: true *** True Line Result y: 63, ** Processing line: ~ text: "",~ - Inside source: true *** True Line Result text: "", ** Processing line: ~ size_enum: NOKIA_FONT_SM,~ - Inside source: true *** True Line Result size_enum: NOKIA_FONT_SM, ** Processing line: ~ alignment_enum: 0,~ - Inside source: true *** True Line Result alignment_enum: 0, ** Processing line: ~ r: 0,~ - Inside source: true *** True Line Result r: 0, ** Processing line: ~ g: 0,~ - Inside source: true *** True Line Result g: 0, ** Processing line: ~ b: 0,~ - Inside source: true *** True Line Result b: 0, ** Processing line: ~ a: 255,~ - Inside source: true *** True Line Result a: 255, ** Processing line: ~ font: NOKIA_FONT_PATH~ - Inside source: true *** True Line Result font: NOKIA_FONT_PATH ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def lines~ - Inside source: true *** True Line Result def lines ** Processing line: ~ outputs_nokia.lines~ - Inside source: true *** True Line Result outputs_nokia.lines ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def primitives~ - Inside source: true *** True Line Result def primitives ** Processing line: ~ outputs_nokia.primitives~ - Inside source: true *** True Line Result outputs_nokia.primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def click~ - Inside source: true *** True Line Result def click ** Processing line: ~ return nil unless @args.inputs.mouse.click~ - Inside source: true *** True Line Result return nil unless @args.inputs.mouse.click ** Processing line: ~ mouse~ - Inside source: true *** True Line Result mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mouse_click~ - Inside source: true *** True Line Result def mouse_click ** Processing line: ~ click~ - Inside source: true *** True Line Result click ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mouse_down~ - Inside source: true *** True Line Result def mouse_down ** Processing line: ~ @args.inputs.mouse.down~ - Inside source: true *** True Line Result @args.inputs.mouse.down ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mouse_up~ - Inside source: true *** True Line Result def mouse_up ** Processing line: ~ @args.inputs.mouse.up~ - Inside source: true *** True Line Result @args.inputs.mouse.up ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mouse~ - Inside source: true *** True Line Result def mouse ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ ((@args.inputs.mouse.x - NOKIA_X_OFFSET).idiv(NOKIA_ZOOM)),~ - Inside source: true *** True Line Result ((@args.inputs.mouse.x - NOKIA_X_OFFSET).idiv(NOKIA_ZOOM)), ** Processing line: ~ ((@args.inputs.mouse.y - NOKIA_Y_OFFSET).idiv(NOKIA_ZOOM))~ - Inside source: true *** True Line Result ((@args.inputs.mouse.y - NOKIA_Y_OFFSET).idiv(NOKIA_ZOOM)) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mouse_position~ - Inside source: true *** True Line Result def mouse_position ** Processing line: ~ mouse~ - Inside source: true *** True Line Result mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def keyboard~ - Inside source: true *** True Line Result def keyboard ** Processing line: ~ @args.inputs.keyboard~ - Inside source: true *** True Line Result @args.inputs.keyboard ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class GTK::Args~ - Inside source: true *** True Line Result class GTK::Args ** Processing line: ~ def init_nokia~ - Inside source: true *** True Line Result def init_nokia ** Processing line: ~ return if @nokia~ - Inside source: true *** True Line Result return if @nokia ** Processing line: ~ @nokia = NokiaOutputs.new self~ - Inside source: true *** True Line Result @nokia = NokiaOutputs.new self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def nokia~ - Inside source: true *** True Line Result def nokia ** Processing line: ~ @nokia~ - Inside source: true *** True Line Result @nokia ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Runtime~ - Inside source: true *** True Line Result class Runtime ** Processing line: ~ alias_method :__original_tick_core__, :tick_core unless Runtime.instance_methods.include?(:__original_tick_core__)~ - Inside source: true *** True Line Result alias_method :__original_tick_core__, :tick_core unless Runtime.instance_methods.include?(:__original_tick_core__) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_core~ - Inside source: true *** True Line Result def tick_core ** Processing line: ~ @args.init_nokia~ - Inside source: true *** True Line Result @args.init_nokia ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ __original_tick_core__~ - Inside source: true *** True Line Result __original_tick_core__ ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return if @args.state.tick_count <= 0~ - Inside source: true *** True Line Result return if @args.state.tick_count <= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.render_target(:nokia)~ - Inside source: true *** True Line Result @args.render_target(:nokia) ** Processing line: ~ .labels~ - Inside source: true *** True Line Result .labels ** Processing line: ~ .each do |l|~ - Inside source: true *** True Line Result .each do |l| ** Processing line: ~ l.y += 1~ - Inside source: true *** True Line Result l.y += 1 ** Processing line: ~ if (l.a || 255) > 128~ - Inside source: true *** True Line Result if (l.a || 255) > 128 ** Processing line: ~ l.r = 67~ - Inside source: true *** True Line Result l.r = 67 ** Processing line: ~ l.g = 82~ - Inside source: true *** True Line Result l.g = 82 ** Processing line: ~ l.b = 61~ - Inside source: true *** True Line Result l.b = 61 ** Processing line: ~ l.a = 255~ - Inside source: true *** True Line Result l.a = 255 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ l.a = 0~ - Inside source: true *** True Line Result l.a = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.render_target(:nokia)~ - Inside source: true *** True Line Result @args.render_target(:nokia) ** Processing line: ~ .sprites~ - Inside source: true *** True Line Result .sprites ** Processing line: ~ .each do |s|~ - Inside source: true *** True Line Result .each do |s| ** Processing line: ~ if (s.a || 255) > 128~ - Inside source: true *** True Line Result if (s.a || 255) > 128 ** Processing line: ~ s.a = 255~ - Inside source: true *** True Line Result s.a = 255 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ s.a = 0~ - Inside source: true *** True Line Result s.a = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.render_target(:nokia)~ - Inside source: true *** True Line Result @args.render_target(:nokia) ** Processing line: ~ .solids~ - Inside source: true *** True Line Result .solids ** Processing line: ~ .each do |s|~ - Inside source: true *** True Line Result .each do |s| ** Processing line: ~ if (s.a || 255) > 128~ - Inside source: true *** True Line Result if (s.a || 255) > 128 ** Processing line: ~ s.r = 67~ - Inside source: true *** True Line Result s.r = 67 ** Processing line: ~ s.g = 82~ - Inside source: true *** True Line Result s.g = 82 ** Processing line: ~ s.b = 61~ - Inside source: true *** True Line Result s.b = 61 ** Processing line: ~ s.a = 255~ - Inside source: true *** True Line Result s.a = 255 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ s.a = 0~ - Inside source: true *** True Line Result s.a = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.render_target(:nokia)~ - Inside source: true *** True Line Result @args.render_target(:nokia) ** Processing line: ~ .borders~ - Inside source: true *** True Line Result .borders ** Processing line: ~ .each do |s|~ - Inside source: true *** True Line Result .each do |s| ** Processing line: ~ if (s.a || 255) > 128~ - Inside source: true *** True Line Result if (s.a || 255) > 128 ** Processing line: ~ s.r = 67~ - Inside source: true *** True Line Result s.r = 67 ** Processing line: ~ s.g = 82~ - Inside source: true *** True Line Result s.g = 82 ** Processing line: ~ s.b = 61~ - Inside source: true *** True Line Result s.b = 61 ** Processing line: ~ s.a = 255~ - Inside source: true *** True Line Result s.a = 255 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ s.a = 0~ - Inside source: true *** True Line Result s.a = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.render_target(:nokia)~ - Inside source: true *** True Line Result @args.render_target(:nokia) ** Processing line: ~ .lines~ - Inside source: true *** True Line Result .lines ** Processing line: ~ .each do |l|~ - Inside source: true *** True Line Result .each do |l| ** Processing line: ~ l.y += 1~ - Inside source: true *** True Line Result l.y += 1 ** Processing line: ~ l.y2 += 1~ - Inside source: true *** True Line Result l.y2 += 1 ** Processing line: ~ l.y2 += 1 if l.y1 != l.y2~ - Inside source: true *** True Line Result l.y2 += 1 if l.y1 != l.y2 ** Processing line: ~ l.x2 += 1 if l.x1 != l.x2~ - Inside source: true *** True Line Result l.x2 += 1 if l.x1 != l.x2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (l.a || 255) > 128~ - Inside source: true *** True Line Result if (l.a || 255) > 128 ** Processing line: ~ l.r = 67~ - Inside source: true *** True Line Result l.r = 67 ** Processing line: ~ l.g = 82~ - Inside source: true *** True Line Result l.g = 82 ** Processing line: ~ l.b = 61~ - Inside source: true *** True Line Result l.b = 61 ** Processing line: ~ l.a = 255~ - Inside source: true *** True Line Result l.a = 255 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ l.a = 0~ - Inside source: true *** True Line Result l.a = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.outputs.borders << {~ - Inside source: true *** True Line Result @args.outputs.borders << { ** Processing line: ~ x: NOKIA_X_OFFSET - 1,~ - Inside source: true *** True Line Result x: NOKIA_X_OFFSET - 1, ** Processing line: ~ y: NOKIA_Y_OFFSET - 1,~ - Inside source: true *** True Line Result y: NOKIA_Y_OFFSET - 1, ** Processing line: ~ w: NOKIA_ZOOMED_WIDTH + 2,~ - Inside source: true *** True Line Result w: NOKIA_ZOOMED_WIDTH + 2, ** Processing line: ~ h: NOKIA_ZOOMED_HEIGHT + 2,~ - Inside source: true *** True Line Result h: NOKIA_ZOOMED_HEIGHT + 2, ** Processing line: ~ r: 128, g: 128, b: 128~ - Inside source: true *** True Line Result r: 128, g: 128, b: 128 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.outputs.background_color = [199, 240, 216]~ - Inside source: true *** True Line Result @args.outputs.background_color = [199, 240, 216] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.outputs.solids << [0, 0, NOKIA_X_OFFSET, 720]~ - Inside source: true *** True Line Result @args.outputs.solids << [0, 0, NOKIA_X_OFFSET, 720] ** Processing line: ~ @args.outputs.solids << [0, 0, 1280, NOKIA_Y_OFFSET]~ - Inside source: true *** True Line Result @args.outputs.solids << [0, 0, 1280, NOKIA_Y_OFFSET] ** Processing line: ~ @args.outputs.solids << [NOKIA_X_OFFSET + NOKIA_ZOOMED_WIDTH, 0, NOKIA_X_OFFSET, 720]~ - Inside source: true *** True Line Result @args.outputs.solids << [NOKIA_X_OFFSET + NOKIA_ZOOMED_WIDTH, 0, NOKIA_X_OFFSET, 720] ** Processing line: ~ @args.outputs.solids << [0, NOKIA_Y_OFFSET.from_top, 1280, NOKIA_Y_OFFSET]~ - Inside source: true *** True Line Result @args.outputs.solids << [0, NOKIA_Y_OFFSET.from_top, 1280, NOKIA_Y_OFFSET] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.outputs~ - Inside source: true *** True Line Result @args.outputs ** Processing line: ~ .sprites << { x: NOKIA_X_OFFSET,~ - Inside source: true *** True Line Result .sprites << { x: NOKIA_X_OFFSET, ** Processing line: ~ y: NOKIA_Y_OFFSET,~ - Inside source: true *** True Line Result y: NOKIA_Y_OFFSET, ** Processing line: ~ w: NOKIA_ZOOMED_WIDTH,~ - Inside source: true *** True Line Result w: NOKIA_ZOOMED_WIDTH, ** Processing line: ~ h: NOKIA_ZOOMED_HEIGHT,~ - Inside source: true *** True Line Result h: NOKIA_ZOOMED_HEIGHT, ** Processing line: ~ source_x: 0,~ - Inside source: true *** True Line Result source_x: 0, ** Processing line: ~ source_y: 0,~ - Inside source: true *** True Line Result source_y: 0, ** Processing line: ~ source_w: NOKIA_WIDTH,~ - Inside source: true *** True Line Result source_w: NOKIA_WIDTH, ** Processing line: ~ source_h: NOKIA_HEIGHT,~ - Inside source: true *** True Line Result source_h: NOKIA_HEIGHT, ** Processing line: ~ path: :nokia }~ - Inside source: true *** True Line Result path: :nokia } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !@args.state.overlay_rendered~ - Inside source: true *** True Line Result if !@args.state.overlay_rendered ** Processing line: ~ (NOKIA_HEIGHT + 1).map_with_index do |i|~ - Inside source: true *** True Line Result (NOKIA_HEIGHT + 1).map_with_index do |i| ** Processing line: ~ @args.outputs.static_lines << {~ - Inside source: true *** True Line Result @args.outputs.static_lines << { ** Processing line: ~ x: NOKIA_X_OFFSET,~ - Inside source: true *** True Line Result x: NOKIA_X_OFFSET, ** Processing line: ~ y: NOKIA_Y_OFFSET + (i * NOKIA_ZOOM),~ - Inside source: true *** True Line Result y: NOKIA_Y_OFFSET + (i * NOKIA_ZOOM), ** Processing line: ~ x2: NOKIA_X_OFFSET + NOKIA_ZOOMED_WIDTH,~ - Inside source: true *** True Line Result x2: NOKIA_X_OFFSET + NOKIA_ZOOMED_WIDTH, ** Processing line: ~ y2: NOKIA_Y_OFFSET + (i * NOKIA_ZOOM),~ - Inside source: true *** True Line Result y2: NOKIA_Y_OFFSET + (i * NOKIA_ZOOM), ** Processing line: ~ r: 199,~ - Inside source: true *** True Line Result r: 199, ** Processing line: ~ g: 240,~ - Inside source: true *** True Line Result g: 240, ** Processing line: ~ b: 216,~ - Inside source: true *** True Line Result b: 216, ** Processing line: ~ a: 100~ - Inside source: true *** True Line Result a: 100 ** Processing line: ~ }.line!~ - Inside source: true *** True Line Result }.line! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ (NOKIA_WIDTH + 1).map_with_index do |i|~ - Inside source: true *** True Line Result (NOKIA_WIDTH + 1).map_with_index do |i| ** Processing line: ~ @args.outputs.static_lines << {~ - Inside source: true *** True Line Result @args.outputs.static_lines << { ** Processing line: ~ x: NOKIA_X_OFFSET + (i * NOKIA_ZOOM),~ - Inside source: true *** True Line Result x: NOKIA_X_OFFSET + (i * NOKIA_ZOOM), ** Processing line: ~ y: NOKIA_Y_OFFSET,~ - Inside source: true *** True Line Result y: NOKIA_Y_OFFSET, ** Processing line: ~ x2: NOKIA_X_OFFSET + (i * NOKIA_ZOOM),~ - Inside source: true *** True Line Result x2: NOKIA_X_OFFSET + (i * NOKIA_ZOOM), ** Processing line: ~ y2: NOKIA_Y_OFFSET + NOKIA_ZOOMED_HEIGHT,~ - Inside source: true *** True Line Result y2: NOKIA_Y_OFFSET + NOKIA_ZOOMED_HEIGHT, ** Processing line: ~ r: 199,~ - Inside source: true *** True Line Result r: 199, ** Processing line: ~ g: 240,~ - Inside source: true *** True Line Result g: 240, ** Processing line: ~ b: 216,~ - Inside source: true *** True Line Result b: 216, ** Processing line: ~ a: 100~ - Inside source: true *** True Line Result a: 100 ** Processing line: ~ }.line!~ - Inside source: true *** True Line Result }.line! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.state.overlay_rendered = true~ - Inside source: true *** True Line Result @args.state.overlay_rendered = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Lowrez - Resolution 64x64 - lowrez.rb~ - Header detected. *** True Line Result *** True Line Result *** Lowrez - Resolution 64x64 - lowrez.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_lowrez/resolution_64x64/app/lowrez.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_lowrez/resolution_64x64/app/lowrez.rb ** Processing line: ~ # Emulation of a 64x64 canvas. Don't change this file unless you know what you're doing :-)~ - Inside source: true *** True Line Result # Emulation of a 64x64 canvas. Don't change this file unless you know what you're doing :-) ** Processing line: ~ # Head over to main.rb and study the code there.~ - Inside source: true *** True Line Result # Head over to main.rb and study the code there. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ LOWREZ_SIZE = 64~ - Inside source: true *** True Line Result LOWREZ_SIZE = 64 ** Processing line: ~ LOWREZ_ZOOM = 10~ - Inside source: true *** True Line Result LOWREZ_ZOOM = 10 ** Processing line: ~ LOWREZ_ZOOMED_SIZE = LOWREZ_SIZE * LOWREZ_ZOOM~ - Inside source: true *** True Line Result LOWREZ_ZOOMED_SIZE = LOWREZ_SIZE * LOWREZ_ZOOM ** Processing line: ~ LOWREZ_X_OFFSET = (1280 - LOWREZ_ZOOMED_SIZE).half~ - Inside source: true *** True Line Result LOWREZ_X_OFFSET = (1280 - LOWREZ_ZOOMED_SIZE).half ** Processing line: ~ LOWREZ_Y_OFFSET = ( 720 - LOWREZ_ZOOMED_SIZE).half~ - Inside source: true *** True Line Result LOWREZ_Y_OFFSET = ( 720 - LOWREZ_ZOOMED_SIZE).half ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ LOWREZ_FONT_XL = -1~ - Inside source: true *** True Line Result LOWREZ_FONT_XL = -1 ** Processing line: ~ LOWREZ_FONT_XL_HEIGHT = 20~ - Inside source: true *** True Line Result LOWREZ_FONT_XL_HEIGHT = 20 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ LOWREZ_FONT_LG = -3.5~ - Inside source: true *** True Line Result LOWREZ_FONT_LG = -3.5 ** Processing line: ~ LOWREZ_FONT_LG_HEIGHT = 15~ - Inside source: true *** True Line Result LOWREZ_FONT_LG_HEIGHT = 15 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ LOWREZ_FONT_MD = -6~ - Inside source: true *** True Line Result LOWREZ_FONT_MD = -6 ** Processing line: ~ LOWREZ_FONT_MD_HEIGHT = 10~ - Inside source: true *** True Line Result LOWREZ_FONT_MD_HEIGHT = 10 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ LOWREZ_FONT_SM = -8.5~ - Inside source: true *** True Line Result LOWREZ_FONT_SM = -8.5 ** Processing line: ~ LOWREZ_FONT_SM_HEIGHT = 5~ - Inside source: true *** True Line Result LOWREZ_FONT_SM_HEIGHT = 5 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ LOWREZ_FONT_PATH = 'fonts/lowrez.ttf'~ - Inside source: true *** True Line Result LOWREZ_FONT_PATH = 'fonts/lowrez.ttf' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class LowrezOutputs~ - Inside source: true *** True Line Result class LowrezOutputs ** Processing line: ~ attr_accessor :width, :height~ - Inside source: true *** True Line Result attr_accessor :width, :height ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize args~ - Inside source: true *** True Line Result def initialize args ** Processing line: ~ @args = args~ - Inside source: true *** True Line Result @args = args ** Processing line: ~ @background_color ||= [0, 0, 0]~ - Inside source: true *** True Line Result @background_color ||= [0, 0, 0] ** Processing line: ~ @args.outputs.background_color = @background_color~ - Inside source: true *** True Line Result @args.outputs.background_color = @background_color ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def background_color~ - Inside source: true *** True Line Result def background_color ** Processing line: ~ @background_color ||= [0, 0, 0]~ - Inside source: true *** True Line Result @background_color ||= [0, 0, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def background_color= opts~ - Inside source: true *** True Line Result def background_color= opts ** Processing line: ~ @background_color = opts~ - Inside source: true *** True Line Result @background_color = opts ** Processing line: ~ @args.outputs.background_color = @background_color~ - Inside source: true *** True Line Result @args.outputs.background_color = @background_color ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs_lowrez.solids << [0, 0, LOWREZ_SIZE, LOWREZ_SIZE, @background_color]~ - Inside source: true *** True Line Result outputs_lowrez.solids << [0, 0, LOWREZ_SIZE, LOWREZ_SIZE, @background_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def outputs_lowrez~ - Inside source: true *** True Line Result def outputs_lowrez ** Processing line: ~ return @args.outputs if @args.state.tick_count <= 0~ - Inside source: true *** True Line Result return @args.outputs if @args.state.tick_count <= 0 ** Processing line: ~ return @args.outputs[:lowrez]~ - Inside source: true *** True Line Result return @args.outputs[:lowrez] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def solids~ - Inside source: true *** True Line Result def solids ** Processing line: ~ outputs_lowrez.solids~ - Inside source: true *** True Line Result outputs_lowrez.solids ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def borders~ - Inside source: true *** True Line Result def borders ** Processing line: ~ outputs_lowrez.borders~ - Inside source: true *** True Line Result outputs_lowrez.borders ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def sprites~ - Inside source: true *** True Line Result def sprites ** Processing line: ~ outputs_lowrez.sprites~ - Inside source: true *** True Line Result outputs_lowrez.sprites ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def labels~ - Inside source: true *** True Line Result def labels ** Processing line: ~ outputs_lowrez.labels~ - Inside source: true *** True Line Result outputs_lowrez.labels ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def default_label~ - Inside source: true *** True Line Result def default_label ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: 0,~ - Inside source: true *** True Line Result x: 0, ** Processing line: ~ y: 63,~ - Inside source: true *** True Line Result y: 63, ** Processing line: ~ text: "",~ - Inside source: true *** True Line Result text: "", ** Processing line: ~ size_enum: LOWREZ_FONT_SM,~ - Inside source: true *** True Line Result size_enum: LOWREZ_FONT_SM, ** Processing line: ~ alignment_enum: 0,~ - Inside source: true *** True Line Result alignment_enum: 0, ** Processing line: ~ r: 0,~ - Inside source: true *** True Line Result r: 0, ** Processing line: ~ g: 0,~ - Inside source: true *** True Line Result g: 0, ** Processing line: ~ b: 0,~ - Inside source: true *** True Line Result b: 0, ** Processing line: ~ a: 255,~ - Inside source: true *** True Line Result a: 255, ** Processing line: ~ font: LOWREZ_FONT_PATH~ - Inside source: true *** True Line Result font: LOWREZ_FONT_PATH ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def lines~ - Inside source: true *** True Line Result def lines ** Processing line: ~ outputs_lowrez.lines~ - Inside source: true *** True Line Result outputs_lowrez.lines ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def primitives~ - Inside source: true *** True Line Result def primitives ** Processing line: ~ outputs_lowrez.primitives~ - Inside source: true *** True Line Result outputs_lowrez.primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def click~ - Inside source: true *** True Line Result def click ** Processing line: ~ return nil unless @args.inputs.mouse.click~ - Inside source: true *** True Line Result return nil unless @args.inputs.mouse.click ** Processing line: ~ mouse~ - Inside source: true *** True Line Result mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mouse_click~ - Inside source: true *** True Line Result def mouse_click ** Processing line: ~ click~ - Inside source: true *** True Line Result click ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mouse_down~ - Inside source: true *** True Line Result def mouse_down ** Processing line: ~ @args.inputs.mouse.down~ - Inside source: true *** True Line Result @args.inputs.mouse.down ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mouse_up~ - Inside source: true *** True Line Result def mouse_up ** Processing line: ~ @args.inputs.mouse.up~ - Inside source: true *** True Line Result @args.inputs.mouse.up ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mouse~ - Inside source: true *** True Line Result def mouse ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ ((@args.inputs.mouse.x - LOWREZ_X_OFFSET).idiv(LOWREZ_ZOOM)),~ - Inside source: true *** True Line Result ((@args.inputs.mouse.x - LOWREZ_X_OFFSET).idiv(LOWREZ_ZOOM)), ** Processing line: ~ ((@args.inputs.mouse.y - LOWREZ_Y_OFFSET).idiv(LOWREZ_ZOOM))~ - Inside source: true *** True Line Result ((@args.inputs.mouse.y - LOWREZ_Y_OFFSET).idiv(LOWREZ_ZOOM)) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mouse_position~ - Inside source: true *** True Line Result def mouse_position ** Processing line: ~ mouse~ - Inside source: true *** True Line Result mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def keyboard~ - Inside source: true *** True Line Result def keyboard ** Processing line: ~ @args.inputs.keyboard~ - Inside source: true *** True Line Result @args.inputs.keyboard ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class GTK::Args~ - Inside source: true *** True Line Result class GTK::Args ** Processing line: ~ def init_lowrez~ - Inside source: true *** True Line Result def init_lowrez ** Processing line: ~ return if @lowrez~ - Inside source: true *** True Line Result return if @lowrez ** Processing line: ~ @lowrez = LowrezOutputs.new self~ - Inside source: true *** True Line Result @lowrez = LowrezOutputs.new self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def lowrez~ - Inside source: true *** True Line Result def lowrez ** Processing line: ~ @lowrez~ - Inside source: true *** True Line Result @lowrez ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Runtime~ - Inside source: true *** True Line Result class Runtime ** Processing line: ~ alias_method :__original_tick_core__, :tick_core unless Runtime.instance_methods.include?(:__original_tick_core__)~ - Inside source: true *** True Line Result alias_method :__original_tick_core__, :tick_core unless Runtime.instance_methods.include?(:__original_tick_core__) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_core~ - Inside source: true *** True Line Result def tick_core ** Processing line: ~ @args.init_lowrez~ - Inside source: true *** True Line Result @args.init_lowrez ** Processing line: ~ __original_tick_core__~ - Inside source: true *** True Line Result __original_tick_core__ ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return if @args.state.tick_count <= 0~ - Inside source: true *** True Line Result return if @args.state.tick_count <= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.render_target(:lowrez)~ - Inside source: true *** True Line Result @args.render_target(:lowrez) ** Processing line: ~ .labels~ - Inside source: true *** True Line Result .labels ** Processing line: ~ .each do |l|~ - Inside source: true *** True Line Result .each do |l| ** Processing line: ~ l.y += 1~ - Inside source: true *** True Line Result l.y += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.render_target(:lowrez)~ - Inside source: true *** True Line Result @args.render_target(:lowrez) ** Processing line: ~ .lines~ - Inside source: true *** True Line Result .lines ** Processing line: ~ .each do |l|~ - Inside source: true *** True Line Result .each do |l| ** Processing line: ~ l.y += 1~ - Inside source: true *** True Line Result l.y += 1 ** Processing line: ~ l.y2 += 1~ - Inside source: true *** True Line Result l.y2 += 1 ** Processing line: ~ l.y2 += 1 if l.y1 != l.y2~ - Inside source: true *** True Line Result l.y2 += 1 if l.y1 != l.y2 ** Processing line: ~ l.x2 += 1 if l.x1 != l.x2~ - Inside source: true *** True Line Result l.x2 += 1 if l.x1 != l.x2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.outputs~ - Inside source: true *** True Line Result @args.outputs ** Processing line: ~ .sprites << { x: 320,~ - Inside source: true *** True Line Result .sprites << { x: 320, ** Processing line: ~ y: 40,~ - Inside source: true *** True Line Result y: 40, ** Processing line: ~ w: 640,~ - Inside source: true *** True Line Result w: 640, ** Processing line: ~ h: 640,~ - Inside source: true *** True Line Result h: 640, ** Processing line: ~ source_x: 0,~ - Inside source: true *** True Line Result source_x: 0, ** Processing line: ~ source_y: 0,~ - Inside source: true *** True Line Result source_y: 0, ** Processing line: ~ source_w: 64,~ - Inside source: true *** True Line Result source_w: 64, ** Processing line: ~ source_h: 64,~ - Inside source: true *** True Line Result source_h: 64, ** Processing line: ~ path: :lowrez }~ - Inside source: true *** True Line Result path: :lowrez } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Lowrez - Resolution 64x64 - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Lowrez - Resolution 64x64 - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_lowrez/resolution_64x64/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_lowrez/resolution_64x64/app/main.rb ** Processing line: ~ require 'app/lowrez.rb'~ - Inside source: true *** True Line Result require 'app/lowrez.rb' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # How to set the background color~ - Inside source: true *** True Line Result # How to set the background color ** Processing line: ~ args.lowrez.background_color = [255, 255, 255]~ - Inside source: true *** True Line Result args.lowrez.background_color = [255, 255, 255] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ==== HELLO WORLD ======================================================~ - Inside source: true *** True Line Result # ==== HELLO WORLD ====================================================== ** Processing line: ~ # Steps to get started:~ - Inside source: true *** True Line Result # Steps to get started: ** Processing line: ~ # 1. ~def tick args~ is the entry point for your game.~ - Inside source: true *** True Line Result # 1. ~def tick args~ is the entry point for your game. ** Processing line: ~ # 2. There are quite a few code samples below, remove the "##"~ - Inside source: true *** True Line Result # 2. There are quite a few code samples below, remove the "##" ** Processing line: ~ # before each line and save the file to see the changes.~ - Inside source: true *** True Line Result # before each line and save the file to see the changes. ** Processing line: ~ # 3. 0, 0 is in bottom left and 63, 63 is in top right corner.~ - Inside source: true *** True Line Result # 3. 0, 0 is in bottom left and 63, 63 is in top right corner. ** Processing line: ~ # 4. Be sure to come to the discord channel if you need~ - Inside source: true *** True Line Result # 4. Be sure to come to the discord channel if you need ** Processing line: ~ # more help: [[http://discord.dragonruby.org]].~ - Inside source: true *** True Line Result # more help: [[http://discord.dragonruby.org]]. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Commenting and uncommenting code:~ - Inside source: true *** True Line Result # Commenting and uncommenting code: ** Processing line: ~ # - Add a "#" infront of lines to comment out code~ - Inside source: true *** True Line Result # - Add a "#" infront of lines to comment out code ** Processing line: ~ # - Remove the "#" infront of lines to comment out code~ - Inside source: true *** True Line Result # - Remove the "#" infront of lines to comment out code ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Invoke the hello_world subroutine/method~ - Inside source: true *** True Line Result # Invoke the hello_world subroutine/method ** Processing line: ~ hello_world args # <---- add a "#" to the beginning of the line to stop running this subroutine/method.~ - Inside source: true *** True Line Result hello_world args # <---- add a "#" to the beginning of the line to stop running this subroutine/method. ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ==== HOW TO RENDER A LABEL ============================================~ - Inside source: true *** True Line Result # ==== HOW TO RENDER A LABEL ============================================ ** Processing line: ~ # Uncomment the line below to invoke the how_to_render_a_label subroutine/method.~ - Inside source: true *** True Line Result # Uncomment the line below to invoke the how_to_render_a_label subroutine/method. ** Processing line: ~ # Note: The method is defined in this file with the signature ~def how_to_render_a_label args~~ - Inside source: true *** True Line Result # Note: The method is defined in this file with the signature ~def how_to_render_a_label args~ ** Processing line: ~ # Scroll down to the method to see the details.~ - Inside source: true *** True Line Result # Scroll down to the method to see the details. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_render_a_label args # <---- remove the "#" at the begging of this line to run the method~ - Inside source: true *** True Line Result # how_to_render_a_label args # <---- remove the "#" at the begging of this line to run the method ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ==== HOW TO RENDER A FILLED SQUARE (SOLID) ============================~ - Inside source: true *** True Line Result # ==== HOW TO RENDER A FILLED SQUARE (SOLID) ============================ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_render_solids args~ - Inside source: true *** True Line Result # how_to_render_solids args ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ==== HOW TO RENDER AN UNFILLED SQUARE (BORDER) ========================~ - Inside source: true *** True Line Result # ==== HOW TO RENDER AN UNFILLED SQUARE (BORDER) ======================== ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_render_borders args~ - Inside source: true *** True Line Result # how_to_render_borders args ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ==== HOW TO RENDER A LINE =============================================~ - Inside source: true *** True Line Result # ==== HOW TO RENDER A LINE ============================================= ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_render_lines args~ - Inside source: true *** True Line Result # how_to_render_lines args ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # == HOW TO RENDER A SPRITE =============================================~ - Inside source: true *** True Line Result # == HOW TO RENDER A SPRITE ============================================= ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_render_sprites args~ - Inside source: true *** True Line Result # how_to_render_sprites args ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ==== HOW TO MOVE A SPRITE BASED OFF OF USER INPUT =====================~ - Inside source: true *** True Line Result # ==== HOW TO MOVE A SPRITE BASED OFF OF USER INPUT ===================== ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_move_a_sprite args~ - Inside source: true *** True Line Result # how_to_move_a_sprite args ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ==== HOW TO ANIMATE A SPRITE (SEPERATE PNGS) ==========================~ - Inside source: true *** True Line Result # ==== HOW TO ANIMATE A SPRITE (SEPERATE PNGS) ========================== ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_animate_a_sprite args~ - Inside source: true *** True Line Result # how_to_animate_a_sprite args ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ==== HOW TO ANIMATE A SPRITE (SPRITE SHEET) ===========================~ - Inside source: true *** True Line Result # ==== HOW TO ANIMATE A SPRITE (SPRITE SHEET) =========================== ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_animate_a_sprite_sheet args~ - Inside source: true *** True Line Result # how_to_animate_a_sprite_sheet args ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ==== HOW TO DETERMINE COLLISION =============================================~ - Inside source: true *** True Line Result # ==== HOW TO DETERMINE COLLISION ============================================= ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_determine_collision args~ - Inside source: true *** True Line Result # how_to_determine_collision args ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ==== HOW TO CREATE BUTTONS ==================================================~ - Inside source: true *** True Line Result # ==== HOW TO CREATE BUTTONS ================================================== ** Processing line: ~ # Remove the "#" at the beginning of the line below~ - Inside source: true *** True Line Result # Remove the "#" at the beginning of the line below ** Processing line: ~ # how_to_create_buttons args~ - Inside source: true *** True Line Result # how_to_create_buttons args ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ==== The line below renders a debug grid, mouse information, and current tick~ - Inside source: true *** True Line Result # ==== The line below renders a debug grid, mouse information, and current tick ** Processing line: ~ render_debug args~ - Inside source: true *** True Line Result render_debug args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def hello_world args~ - Inside source: true *** True Line Result def hello_world args ** Processing line: ~ args.lowrez.solids << { x: 0, y: 64, w: 10, h: 10, r: 255 }~ - Inside source: true *** True Line Result args.lowrez.solids << { x: 0, y: 64, w: 10, h: 10, r: 255 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.lowrez.labels << {~ - Inside source: true *** True Line Result args.lowrez.labels << { ** Processing line: ~ x: 32,~ - Inside source: true *** True Line Result x: 32, ** Processing line: ~ y: 63,~ - Inside source: true *** True Line Result y: 63, ** Processing line: ~ text: "lowrezjam 2020",~ - Inside source: true *** True Line Result text: "lowrezjam 2020", ** Processing line: ~ size_enum: LOWREZ_FONT_SM,~ - Inside source: true *** True Line Result size_enum: LOWREZ_FONT_SM, ** Processing line: ~ alignment_enum: 1,~ - Inside source: true *** True Line Result alignment_enum: 1, ** Processing line: ~ r: 0,~ - Inside source: true *** True Line Result r: 0, ** Processing line: ~ g: 0,~ - Inside source: true *** True Line Result g: 0, ** Processing line: ~ b: 0,~ - Inside source: true *** True Line Result b: 0, ** Processing line: ~ a: 255,~ - Inside source: true *** True Line Result a: 255, ** Processing line: ~ font: LOWREZ_FONT_PATH~ - Inside source: true *** True Line Result font: LOWREZ_FONT_PATH ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.lowrez.sprites << {~ - Inside source: true *** True Line Result args.lowrez.sprites << { ** Processing line: ~ x: 32 - 10,~ - Inside source: true *** True Line Result x: 32 - 10, ** Processing line: ~ y: 32 - 10,~ - Inside source: true *** True Line Result y: 32 - 10, ** Processing line: ~ w: 20,~ - Inside source: true *** True Line Result w: 20, ** Processing line: ~ h: 20,~ - Inside source: true *** True Line Result h: 20, ** Processing line: ~ path: 'sprites/lowrez-ship-blue.png',~ - Inside source: true *** True Line Result path: 'sprites/lowrez-ship-blue.png', ** Processing line: ~ a: args.state.tick_count % 255,~ - Inside source: true *** True Line Result a: args.state.tick_count % 255, ** Processing line: ~ angle: args.state.tick_count % 360~ - Inside source: true *** True Line Result angle: args.state.tick_count % 360 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HOW TO RENDER A LABEL ============================================~ - Inside source: true *** True Line Result # ==== HOW TO RENDER A LABEL ============================================ ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ def how_to_render_a_label args~ - Inside source: true *** True Line Result def how_to_render_a_label args ** Processing line: ~ # NOTE: Text is aligned from the TOP LEFT corner~ - Inside source: true *** True Line Result # NOTE: Text is aligned from the TOP LEFT corner ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render an EXTRA LARGE/XL label (remove the "#" in front of each line below)~ - Inside source: true *** True Line Result # Render an EXTRA LARGE/XL label (remove the "#" in front of each line below) ** Processing line: ~ args.lowrez.labels << { x: 0, y: 57, text: "Hello World",~ - Inside source: true *** True Line Result args.lowrez.labels << { x: 0, y: 57, text: "Hello World", ** Processing line: ~ size_enum: LOWREZ_FONT_XL,~ - Inside source: true *** True Line Result size_enum: LOWREZ_FONT_XL, ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ - Inside source: true *** True Line Result r: 0, g: 0, b: 0, a: 255, ** Processing line: ~ font: LOWREZ_FONT_PATH }~ - Inside source: true *** True Line Result font: LOWREZ_FONT_PATH } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a LARGE/LG label (remove the "#" in front of each line below)~ - Inside source: true *** True Line Result # Render a LARGE/LG label (remove the "#" in front of each line below) ** Processing line: ~ args.lowrez.labels << { x: 0, y: 36, text: "Hello World",~ - Inside source: true *** True Line Result args.lowrez.labels << { x: 0, y: 36, text: "Hello World", ** Processing line: ~ size_enum: LOWREZ_FONT_LG,~ - Inside source: true *** True Line Result size_enum: LOWREZ_FONT_LG, ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ - Inside source: true *** True Line Result r: 0, g: 0, b: 0, a: 255, ** Processing line: ~ font: LOWREZ_FONT_PATH }~ - Inside source: true *** True Line Result font: LOWREZ_FONT_PATH } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a MEDIUM/MD label (remove the "#" in front of each line below)~ - Inside source: true *** True Line Result # Render a MEDIUM/MD label (remove the "#" in front of each line below) ** Processing line: ~ args.lowrez.labels << { x: 0, y: 20, text: "Hello World",~ - Inside source: true *** True Line Result args.lowrez.labels << { x: 0, y: 20, text: "Hello World", ** Processing line: ~ size_enum: LOWREZ_FONT_MD,~ - Inside source: true *** True Line Result size_enum: LOWREZ_FONT_MD, ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ - Inside source: true *** True Line Result r: 0, g: 0, b: 0, a: 255, ** Processing line: ~ font: LOWREZ_FONT_PATH }~ - Inside source: true *** True Line Result font: LOWREZ_FONT_PATH } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a SMALL/SM label (remove the "#" in front of each line below)~ - Inside source: true *** True Line Result # Render a SMALL/SM label (remove the "#" in front of each line below) ** Processing line: ~ args.lowrez.labels << { x: 0, y: 9, text: "Hello World",~ - Inside source: true *** True Line Result args.lowrez.labels << { x: 0, y: 9, text: "Hello World", ** Processing line: ~ size_enum: LOWREZ_FONT_SM,~ - Inside source: true *** True Line Result size_enum: LOWREZ_FONT_SM, ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ - Inside source: true *** True Line Result r: 0, g: 0, b: 0, a: 255, ** Processing line: ~ font: LOWREZ_FONT_PATH }~ - Inside source: true *** True Line Result font: LOWREZ_FONT_PATH } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # You are provided args.lowrez.default_label which returns a Hash that you~ - Inside source: true *** True Line Result # You are provided args.lowrez.default_label which returns a Hash that you ** Processing line: ~ # can ~merge~ properties with~ - Inside source: true *** True Line Result # can ~merge~ properties with ** Processing line: ~ # Example 1~ - Inside source: true *** True Line Result # Example 1 ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(text: "Default")~ - Inside source: true *** True Line Result .merge(text: "Default") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Example 2~ - Inside source: true *** True Line Result # Example 2 ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 31,~ - Inside source: true *** True Line Result .merge(x: 31, ** Processing line: ~ text: "Default",~ - Inside source: true *** True Line Result text: "Default", ** Processing line: ~ r: 128,~ - Inside source: true *** True Line Result r: 128, ** Processing line: ~ g: 128,~ - Inside source: true *** True Line Result g: 128, ** Processing line: ~ b: 128)~ - Inside source: true *** True Line Result b: 128) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ ## # ==== HOW TO RENDER FILLED SQUARES (SOLIDS) ==================================~ - Inside source: true *** True Line Result ## # ==== HOW TO RENDER FILLED SQUARES (SOLIDS) ================================== ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ def how_to_render_solids args~ - Inside source: true *** True Line Result def how_to_render_solids args ** Processing line: ~ # Render a red square at 0, 0 with a width and height of 1~ - Inside source: true *** True Line Result # Render a red square at 0, 0 with a width and height of 1 ** Processing line: ~ args.lowrez.solids << { x: 0, y: 0, w: 1, h: 1, r: 255, g: 0, b: 0, a: 255 }~ - Inside source: true *** True Line Result args.lowrez.solids << { x: 0, y: 0, w: 1, h: 1, r: 255, g: 0, b: 0, a: 255 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a red square at 1, 1 with a width and height of 2~ - Inside source: true *** True Line Result # Render a red square at 1, 1 with a width and height of 2 ** Processing line: ~ args.lowrez.solids << { x: 1, y: 1, w: 2, h: 2, r: 255, g: 0, b: 0, a: 255 }~ - Inside source: true *** True Line Result args.lowrez.solids << { x: 1, y: 1, w: 2, h: 2, r: 255, g: 0, b: 0, a: 255 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a red square at 3, 3 with a width and height of 3~ - Inside source: true *** True Line Result # Render a red square at 3, 3 with a width and height of 3 ** Processing line: ~ args.lowrez.solids << { x: 3, y: 3, w: 3, h: 3, r: 255, g: 0, b: 0 }~ - Inside source: true *** True Line Result args.lowrez.solids << { x: 3, y: 3, w: 3, h: 3, r: 255, g: 0, b: 0 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a red square at 6, 6 with a width and height of 4~ - Inside source: true *** True Line Result # Render a red square at 6, 6 with a width and height of 4 ** Processing line: ~ args.lowrez.solids << { x: 6, y: 6, w: 4, h: 4, r: 255, g: 0, b: 0 }~ - Inside source: true *** True Line Result args.lowrez.solids << { x: 6, y: 6, w: 4, h: 4, r: 255, g: 0, b: 0 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ ## # ==== HOW TO RENDER UNFILLED SQUARES (BORDERS) ===============================~ - Inside source: true *** True Line Result ## # ==== HOW TO RENDER UNFILLED SQUARES (BORDERS) =============================== ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ def how_to_render_borders args~ - Inside source: true *** True Line Result def how_to_render_borders args ** Processing line: ~ # Render a red square at 0, 0 with a width and height of 3~ - Inside source: true *** True Line Result # Render a red square at 0, 0 with a width and height of 3 ** Processing line: ~ args.lowrez.borders << { x: 0, y: 0, w: 3, h: 3, r: 255, g: 0, b: 0, a: 255 }~ - Inside source: true *** True Line Result args.lowrez.borders << { x: 0, y: 0, w: 3, h: 3, r: 255, g: 0, b: 0, a: 255 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a red square at 3, 3 with a width and height of 3~ - Inside source: true *** True Line Result # Render a red square at 3, 3 with a width and height of 3 ** Processing line: ~ args.lowrez.borders << { x: 3, y: 3, w: 4, h: 4, r: 255, g: 0, b: 0, a: 255 }~ - Inside source: true *** True Line Result args.lowrez.borders << { x: 3, y: 3, w: 4, h: 4, r: 255, g: 0, b: 0, a: 255 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a red square at 5, 5 with a width and height of 4~ - Inside source: true *** True Line Result # Render a red square at 5, 5 with a width and height of 4 ** Processing line: ~ args.lowrez.borders << { x: 7, y: 7, w: 5, h: 5, r: 255, g: 0, b: 0, a: 255 }~ - Inside source: true *** True Line Result args.lowrez.borders << { x: 7, y: 7, w: 5, h: 5, r: 255, g: 0, b: 0, a: 255 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ ## # ==== HOW TO RENDER A LINE ===================================================~ - Inside source: true *** True Line Result ## # ==== HOW TO RENDER A LINE =================================================== ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ def how_to_render_lines args~ - Inside source: true *** True Line Result def how_to_render_lines args ** Processing line: ~ # Render a horizontal line at the bottom~ - Inside source: true *** True Line Result # Render a horizontal line at the bottom ** Processing line: ~ args.lowrez.lines << { x: 0, y: 0, x2: 63, y2: 0, r: 255 }~ - Inside source: true *** True Line Result args.lowrez.lines << { x: 0, y: 0, x2: 63, y2: 0, r: 255 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a vertical line at the left~ - Inside source: true *** True Line Result # Render a vertical line at the left ** Processing line: ~ args.lowrez.lines << { x: 0, y: 0, x2: 0, y2: 63, r: 255 }~ - Inside source: true *** True Line Result args.lowrez.lines << { x: 0, y: 0, x2: 0, y2: 63, r: 255 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render a diagonal line starting from the bottom left and going to the top right~ - Inside source: true *** True Line Result # Render a diagonal line starting from the bottom left and going to the top right ** Processing line: ~ args.lowrez.lines << { x: 0, y: 0, x2: 63, y2: 63, r: 255 }~ - Inside source: true *** True Line Result args.lowrez.lines << { x: 0, y: 0, x2: 63, y2: 63, r: 255 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ ## # == HOW TO RENDER A SPRITE ===================================================~ - Inside source: true *** True Line Result ## # == HOW TO RENDER A SPRITE =================================================== ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ def how_to_render_sprites args~ - Inside source: true *** True Line Result def how_to_render_sprites args ** Processing line: ~ # Loop 10 times and create 10 sprites in 10 positions~ - Inside source: true *** True Line Result # Loop 10 times and create 10 sprites in 10 positions ** Processing line: ~ # Render a sprite at the bottom left with a width and height of 5 and a path of 'sprites/lowrez-ship-blue.png'~ - Inside source: true *** True Line Result # Render a sprite at the bottom left with a width and height of 5 and a path of 'sprites/lowrez-ship-blue.png' ** Processing line: ~ 10.times do |i|~ - Inside source: true *** True Line Result 10.times do |i| ** Processing line: ~ args.lowrez.sprites << {~ - Inside source: true *** True Line Result args.lowrez.sprites << { ** Processing line: ~ x: i * 5,~ - Inside source: true *** True Line Result x: i * 5, ** Processing line: ~ y: i * 5,~ - Inside source: true *** True Line Result y: i * 5, ** Processing line: ~ w: 5,~ - Inside source: true *** True Line Result w: 5, ** Processing line: ~ h: 5,~ - Inside source: true *** True Line Result h: 5, ** Processing line: ~ path: 'sprites/lowrez-ship-blue.png'~ - Inside source: true *** True Line Result path: 'sprites/lowrez-ship-blue.png' ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Given an array of positions create sprites~ - Inside source: true *** True Line Result # Given an array of positions create sprites ** Processing line: ~ positions = [~ - Inside source: true *** True Line Result positions = [ ** Processing line: ~ { x: 10, y: 42 },~ - Inside source: true *** True Line Result { x: 10, y: 42 }, ** Processing line: ~ { x: 15, y: 45 },~ - Inside source: true *** True Line Result { x: 15, y: 45 }, ** Processing line: ~ { x: 22, y: 33 },~ - Inside source: true *** True Line Result { x: 22, y: 33 }, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ positions.each do |position|~ - Inside source: true *** True Line Result positions.each do |position| ** Processing line: ~ # use Ruby's ~Hash#merge~ function to create a sprite~ - Inside source: true *** True Line Result # use Ruby's ~Hash#merge~ function to create a sprite ** Processing line: ~ args.lowrez.sprites << position.merge(path: 'sprites/lowrez-ship-red.png',~ - Inside source: true *** True Line Result args.lowrez.sprites << position.merge(path: 'sprites/lowrez-ship-red.png', ** Processing line: ~ w: 5,~ - Inside source: true *** True Line Result w: 5, ** Processing line: ~ h: 5)~ - Inside source: true *** True Line Result h: 5) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ ## # ==== HOW TO ANIMATE A SPRITE (SEPERATE PNGS) ==========================~ - Inside source: true *** True Line Result ## # ==== HOW TO ANIMATE A SPRITE (SEPERATE PNGS) ========================== ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ def how_to_animate_a_sprite args~ - Inside source: true *** True Line Result def how_to_animate_a_sprite args ** Processing line: ~ # STEP 1: Define when you want the animation to start. The animation in this case will start in 3 seconds~ - Inside source: true *** True Line Result # STEP 1: Define when you want the animation to start. The animation in this case will start in 3 seconds ** Processing line: ~ start_animation_on_tick = 180~ - Inside source: true *** True Line Result start_animation_on_tick = 180 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # STEP 2: Get the frame_index given the start tick.~ - Inside source: true *** True Line Result # STEP 2: Get the frame_index given the start tick. ** Processing line: ~ sprite_index = start_animation_on_tick.frame_index count: 7, # how many sprites?~ - Inside source: true *** True Line Result sprite_index = start_animation_on_tick.frame_index count: 7, # how many sprites? ** Processing line: ~ hold_for: 4, # how long to hold each sprite?~ - Inside source: true *** True Line Result hold_for: 4, # how long to hold each sprite? ** Processing line: ~ repeat: true # should it repeat?~ - Inside source: true *** True Line Result repeat: true # should it repeat? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # STEP 3: frame_index will return nil if the frame hasn't arrived yet~ - Inside source: true *** True Line Result # STEP 3: frame_index will return nil if the frame hasn't arrived yet ** Processing line: ~ if sprite_index~ - Inside source: true *** True Line Result if sprite_index ** Processing line: ~ # if the sprite_index is populated, use it to determine the sprite path and render it~ - Inside source: true *** True Line Result # if the sprite_index is populated, use it to determine the sprite path and render it ** Processing line: ~ sprite_path = "sprites/explosion-#{sprite_index}.png"~ - Inside source: true *** True Line Result sprite_path = "sprites/explosion-#{sprite_index}.png" ** Processing line: ~ args.lowrez.sprites << { x: 0, y: 0, w: 64, h: 64, path: sprite_path }~ - Inside source: true *** True Line Result args.lowrez.sprites << { x: 0, y: 0, w: 64, h: 64, path: sprite_path } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ # if the sprite_index is nil, render a countdown instead~ - Inside source: true *** True Line Result # if the sprite_index is nil, render a countdown instead ** Processing line: ~ countdown_in_seconds = ((start_animation_on_tick - args.state.tick_count) / 60).round(1)~ - Inside source: true *** True Line Result countdown_in_seconds = ((start_animation_on_tick - args.state.tick_count) / 60).round(1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 32,~ - Inside source: true *** True Line Result .merge(x: 32, ** Processing line: ~ y: 32,~ - Inside source: true *** True Line Result y: 32, ** Processing line: ~ text: "Count Down: #{countdown_in_seconds}",~ - Inside source: true *** True Line Result text: "Count Down: #{countdown_in_seconds}", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render the current tick and the resolved sprite index~ - Inside source: true *** True Line Result # render the current tick and the resolved sprite index ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 0,~ - Inside source: true *** True Line Result .merge(x: 0, ** Processing line: ~ y: 11,~ - Inside source: true *** True Line Result y: 11, ** Processing line: ~ text: "Tick: #{args.state.tick_count}")~ - Inside source: true *** True Line Result text: "Tick: #{args.state.tick_count}") ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 0,~ - Inside source: true *** True Line Result .merge(x: 0, ** Processing line: ~ y: 5,~ - Inside source: true *** True Line Result y: 5, ** Processing line: ~ text: "sprite_index: #{sprite_index}")~ - Inside source: true *** True Line Result text: "sprite_index: #{sprite_index}") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ ## # ==== HOW TO ANIMATE A SPRITE (SPRITE SHEET) =================================~ - Inside source: true *** True Line Result ## # ==== HOW TO ANIMATE A SPRITE (SPRITE SHEET) ================================= ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ def how_to_animate_a_sprite_sheet args~ - Inside source: true *** True Line Result def how_to_animate_a_sprite_sheet args ** Processing line: ~ # STEP 1: Define when you want the animation to start. The animation in this case will start in 3 seconds~ - Inside source: true *** True Line Result # STEP 1: Define when you want the animation to start. The animation in this case will start in 3 seconds ** Processing line: ~ start_animation_on_tick = 180~ - Inside source: true *** True Line Result start_animation_on_tick = 180 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # STEP 2: Get the frame_index given the start tick.~ - Inside source: true *** True Line Result # STEP 2: Get the frame_index given the start tick. ** Processing line: ~ sprite_index = start_animation_on_tick.frame_index count: 7, # how many sprites?~ - Inside source: true *** True Line Result sprite_index = start_animation_on_tick.frame_index count: 7, # how many sprites? ** Processing line: ~ hold_for: 4, # how long to hold each sprite?~ - Inside source: true *** True Line Result hold_for: 4, # how long to hold each sprite? ** Processing line: ~ repeat: true # should it repeat?~ - Inside source: true *** True Line Result repeat: true # should it repeat? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # STEP 3: frame_index will return nil if the frame hasn't arrived yet~ - Inside source: true *** True Line Result # STEP 3: frame_index will return nil if the frame hasn't arrived yet ** Processing line: ~ if sprite_index~ - Inside source: true *** True Line Result if sprite_index ** Processing line: ~ # if the sprite_index is populated, use it to determine the source rectangle and render it~ - Inside source: true *** True Line Result # if the sprite_index is populated, use it to determine the source rectangle and render it ** Processing line: ~ args.lowrez.sprites << {~ - Inside source: true *** True Line Result args.lowrez.sprites << { ** Processing line: ~ x: 0,~ - Inside source: true *** True Line Result x: 0, ** Processing line: ~ y: 0,~ - Inside source: true *** True Line Result y: 0, ** Processing line: ~ w: 64,~ - Inside source: true *** True Line Result w: 64, ** Processing line: ~ h: 64,~ - Inside source: true *** True Line Result h: 64, ** Processing line: ~ path: "sprites/explosion-sheet.png",~ - Inside source: true *** True Line Result path: "sprites/explosion-sheet.png", ** Processing line: ~ source_x: 32 * sprite_index,~ - Inside source: true *** True Line Result source_x: 32 * sprite_index, ** Processing line: ~ source_y: 0,~ - Inside source: true *** True Line Result source_y: 0, ** Processing line: ~ source_w: 32,~ - Inside source: true *** True Line Result source_w: 32, ** Processing line: ~ source_h: 32~ - Inside source: true *** True Line Result source_h: 32 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ # if the sprite_index is nil, render a countdown instead~ - Inside source: true *** True Line Result # if the sprite_index is nil, render a countdown instead ** Processing line: ~ countdown_in_seconds = ((start_animation_on_tick - args.state.tick_count) / 60).round(1)~ - Inside source: true *** True Line Result countdown_in_seconds = ((start_animation_on_tick - args.state.tick_count) / 60).round(1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 32,~ - Inside source: true *** True Line Result .merge(x: 32, ** Processing line: ~ y: 32,~ - Inside source: true *** True Line Result y: 32, ** Processing line: ~ text: "Count Down: #{countdown_in_seconds}",~ - Inside source: true *** True Line Result text: "Count Down: #{countdown_in_seconds}", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render the current tick and the resolved sprite index~ - Inside source: true *** True Line Result # render the current tick and the resolved sprite index ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 0,~ - Inside source: true *** True Line Result .merge(x: 0, ** Processing line: ~ y: 11,~ - Inside source: true *** True Line Result y: 11, ** Processing line: ~ text: "tick: #{args.state.tick_count}")~ - Inside source: true *** True Line Result text: "tick: #{args.state.tick_count}") ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 0,~ - Inside source: true *** True Line Result .merge(x: 0, ** Processing line: ~ y: 5,~ - Inside source: true *** True Line Result y: 5, ** Processing line: ~ text: "sprite_index: #{sprite_index}")~ - Inside source: true *** True Line Result text: "sprite_index: #{sprite_index}") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ ## # ==== HOW TO STORE STATE, ACCEPT INPUT, AND RENDER SPRITE BASED OFF OF STATE =~ - Inside source: true *** True Line Result ## # ==== HOW TO STORE STATE, ACCEPT INPUT, AND RENDER SPRITE BASED OFF OF STATE = ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ def how_to_move_a_sprite args~ - Inside source: true *** True Line Result def how_to_move_a_sprite args ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 32,~ - Inside source: true *** True Line Result .merge(x: 32, ** Processing line: ~ y: 62, text: "Use Arrow Keys",~ - Inside source: true *** True Line Result y: 62, text: "Use Arrow Keys", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 32,~ - Inside source: true *** True Line Result .merge(x: 32, ** Processing line: ~ y: 56, text: "Use WASD",~ - Inside source: true *** True Line Result y: 56, text: "Use WASD", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 32,~ - Inside source: true *** True Line Result .merge(x: 32, ** Processing line: ~ y: 50, text: "Or Click",~ - Inside source: true *** True Line Result y: 50, text: "Or Click", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # set the initial values for x and y using ||= ("or equal operator")~ - Inside source: true *** True Line Result # set the initial values for x and y using ||= ("or equal operator") ** Processing line: ~ args.state.ship.x ||= 0~ - Inside source: true *** True Line Result args.state.ship.x ||= 0 ** Processing line: ~ args.state.ship.y ||= 0~ - Inside source: true *** True Line Result args.state.ship.y ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if a mouse click occurs, update the ship's x and y to be the location of the click~ - Inside source: true *** True Line Result # if a mouse click occurs, update the ship's x and y to be the location of the click ** Processing line: ~ if args.lowrez.mouse_click~ - Inside source: true *** True Line Result if args.lowrez.mouse_click ** Processing line: ~ args.state.ship.x = args.lowrez.mouse_click.x~ - Inside source: true *** True Line Result args.state.ship.x = args.lowrez.mouse_click.x ** Processing line: ~ args.state.ship.y = args.lowrez.mouse_click.y~ - Inside source: true *** True Line Result args.state.ship.y = args.lowrez.mouse_click.y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if a or left arrow is pressed/held, decrement the ships x position~ - Inside source: true *** True Line Result # if a or left arrow is pressed/held, decrement the ships x position ** Processing line: ~ if args.lowrez.keyboard.left~ - Inside source: true *** True Line Result if args.lowrez.keyboard.left ** Processing line: ~ args.state.ship.x -= 1~ - Inside source: true *** True Line Result args.state.ship.x -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if d or right arrow is pressed/held, increment the ships x position~ - Inside source: true *** True Line Result # if d or right arrow is pressed/held, increment the ships x position ** Processing line: ~ if args.lowrez.keyboard.right~ - Inside source: true *** True Line Result if args.lowrez.keyboard.right ** Processing line: ~ args.state.ship.x += 1~ - Inside source: true *** True Line Result args.state.ship.x += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if s or down arrow is pressed/held, decrement the ships y position~ - Inside source: true *** True Line Result # if s or down arrow is pressed/held, decrement the ships y position ** Processing line: ~ if args.lowrez.keyboard.down~ - Inside source: true *** True Line Result if args.lowrez.keyboard.down ** Processing line: ~ args.state.ship.y -= 1~ - Inside source: true *** True Line Result args.state.ship.y -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if w or up arrow is pressed/held, increment the ships y position~ - Inside source: true *** True Line Result # if w or up arrow is pressed/held, increment the ships y position ** Processing line: ~ if args.lowrez.keyboard.up~ - Inside source: true *** True Line Result if args.lowrez.keyboard.up ** Processing line: ~ args.state.ship.y += 1~ - Inside source: true *** True Line Result args.state.ship.y += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render the sprite to the screen using the position stored in args.state.ship~ - Inside source: true *** True Line Result # render the sprite to the screen using the position stored in args.state.ship ** Processing line: ~ args.lowrez.sprites << {~ - Inside source: true *** True Line Result args.lowrez.sprites << { ** Processing line: ~ x: args.state.ship.x,~ - Inside source: true *** True Line Result x: args.state.ship.x, ** Processing line: ~ y: args.state.ship.y,~ - Inside source: true *** True Line Result y: args.state.ship.y, ** Processing line: ~ w: 5,~ - Inside source: true *** True Line Result w: 5, ** Processing line: ~ h: 5,~ - Inside source: true *** True Line Result h: 5, ** Processing line: ~ path: 'sprites/lowrez-ship-blue.png',~ - Inside source: true *** True Line Result path: 'sprites/lowrez-ship-blue.png', ** Processing line: ~ # parameters beyond this point are optional~ - Inside source: true *** True Line Result # parameters beyond this point are optional ** Processing line: ~ angle: 0, # Note: rotation angle is denoted in degrees NOT radians~ - Inside source: true *** True Line Result angle: 0, # Note: rotation angle is denoted in degrees NOT radians ** Processing line: ~ r: 255,~ - Inside source: true *** True Line Result r: 255, ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 255,~ - Inside source: true *** True Line Result b: 255, ** Processing line: ~ a: 255~ - Inside source: true *** True Line Result a: 255 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ # ==== HOW TO DETERMINE COLLISION =======================================~ - Inside source: true *** True Line Result # ==== HOW TO DETERMINE COLLISION ======================================= ** Processing line: ~ # =======================================================================~ - Inside source: true *** True Line Result # ======================================================================= ** Processing line: ~ def how_to_determine_collision args~ - Inside source: true *** True Line Result def how_to_determine_collision args ** Processing line: ~ # Render the instructions~ - Inside source: true *** True Line Result # Render the instructions ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 32,~ - Inside source: true *** True Line Result .merge(x: 32, ** Processing line: ~ y: 62, text: "Click Anywhere",~ - Inside source: true *** True Line Result y: 62, text: "Click Anywhere", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if a mouse click occurs:~ - Inside source: true *** True Line Result # if a mouse click occurs: ** Processing line: ~ # - set ship_one if it isn't set~ - Inside source: true *** True Line Result # - set ship_one if it isn't set ** Processing line: ~ # - set ship_two if it isn't set~ - Inside source: true *** True Line Result # - set ship_two if it isn't set ** Processing line: ~ # - otherwise reset ship one and ship two~ - Inside source: true *** True Line Result # - otherwise reset ship one and ship two ** Processing line: ~ if args.lowrez.mouse_click~ - Inside source: true *** True Line Result if args.lowrez.mouse_click ** Processing line: ~ # is ship_one set?~ - Inside source: true *** True Line Result # is ship_one set? ** Processing line: ~ if !args.state.ship_one~ - Inside source: true *** True Line Result if !args.state.ship_one ** Processing line: ~ args.state.ship_one = { x: args.lowrez.mouse_click.x - 10,~ - Inside source: true *** True Line Result args.state.ship_one = { x: args.lowrez.mouse_click.x - 10, ** Processing line: ~ y: args.lowrez.mouse_click.y - 10,~ - Inside source: true *** True Line Result y: args.lowrez.mouse_click.y - 10, ** Processing line: ~ w: 20,~ - Inside source: true *** True Line Result w: 20, ** Processing line: ~ h: 20 }~ - Inside source: true *** True Line Result h: 20 } ** Processing line: ~ # is ship_one set?~ - Inside source: true *** True Line Result # is ship_one set? ** Processing line: ~ elsif !args.state.ship_two~ - Inside source: true *** True Line Result elsif !args.state.ship_two ** Processing line: ~ args.state.ship_two = { x: args.lowrez.mouse_click.x - 10,~ - Inside source: true *** True Line Result args.state.ship_two = { x: args.lowrez.mouse_click.x - 10, ** Processing line: ~ y: args.lowrez.mouse_click.y - 10,~ - Inside source: true *** True Line Result y: args.lowrez.mouse_click.y - 10, ** Processing line: ~ w: 20,~ - Inside source: true *** True Line Result w: 20, ** Processing line: ~ h: 20 }~ - Inside source: true *** True Line Result h: 20 } ** Processing line: ~ # should we reset?~ - Inside source: true *** True Line Result # should we reset? ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.ship_one = nil~ - Inside source: true *** True Line Result args.state.ship_one = nil ** Processing line: ~ args.state.ship_two = nil~ - Inside source: true *** True Line Result args.state.ship_two = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render ship one if it's set~ - Inside source: true *** True Line Result # render ship one if it's set ** Processing line: ~ if args.state.ship_one~ - Inside source: true *** True Line Result if args.state.ship_one ** Processing line: ~ # use Ruby's .merge method which is available on ~Hash~ to set the sprite and alpha~ - Inside source: true *** True Line Result # use Ruby's .merge method which is available on ~Hash~ to set the sprite and alpha ** Processing line: ~ # render ship one~ - Inside source: true *** True Line Result # render ship one ** Processing line: ~ args.lowrez.sprites << args.state.ship_one.merge(path: 'sprites/lowrez-ship-blue.png', a: 100)~ - Inside source: true *** True Line Result args.lowrez.sprites << args.state.ship_one.merge(path: 'sprites/lowrez-ship-blue.png', a: 100) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.ship_two~ - Inside source: true *** True Line Result if args.state.ship_two ** Processing line: ~ # use Ruby's .merge method which is available on ~Hash~ to set the sprite and alpha~ - Inside source: true *** True Line Result # use Ruby's .merge method which is available on ~Hash~ to set the sprite and alpha ** Processing line: ~ # render ship two~ - Inside source: true *** True Line Result # render ship two ** Processing line: ~ args.lowrez.sprites << args.state.ship_two.merge(path: 'sprites/lowrez-ship-red.png', a: 100)~ - Inside source: true *** True Line Result args.lowrez.sprites << args.state.ship_two.merge(path: 'sprites/lowrez-ship-red.png', a: 100) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if both ship one and ship two are set, then determine collision~ - Inside source: true *** True Line Result # if both ship one and ship two are set, then determine collision ** Processing line: ~ if args.state.ship_one && args.state.ship_two~ - Inside source: true *** True Line Result if args.state.ship_one && args.state.ship_two ** Processing line: ~ # collision is determined using the intersect_rect? method~ - Inside source: true *** True Line Result # collision is determined using the intersect_rect? method ** Processing line: ~ if args.state.ship_one.intersect_rect? args.state.ship_two~ - Inside source: true *** True Line Result if args.state.ship_one.intersect_rect? args.state.ship_two ** Processing line: ~ # if collision occurred, render the words collision!~ - Inside source: true *** True Line Result # if collision occurred, render the words collision! ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 31,~ - Inside source: true *** True Line Result .merge(x: 31, ** Processing line: ~ y: 5,~ - Inside source: true *** True Line Result y: 5, ** Processing line: ~ text: "Collision!",~ - Inside source: true *** True Line Result text: "Collision!", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ # if collision occurred, render the words no collision.~ - Inside source: true *** True Line Result # if collision occurred, render the words no collision. ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 31,~ - Inside source: true *** True Line Result .merge(x: 31, ** Processing line: ~ y: 5,~ - Inside source: true *** True Line Result y: 5, ** Processing line: ~ text: "No Collision.",~ - Inside source: true *** True Line Result text: "No Collision.", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ # if both ship one and ship two aren't set, then render --~ - Inside source: true *** True Line Result # if both ship one and ship two aren't set, then render -- ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(x: 31,~ - Inside source: true *** True Line Result .merge(x: 31, ** Processing line: ~ y: 6,~ - Inside source: true *** True Line Result y: 6, ** Processing line: ~ text: "--",~ - Inside source: true *** True Line Result text: "--", ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ ## # ==== HOW TO CREATE BUTTONS ==================================================~ - Inside source: true *** True Line Result ## # ==== HOW TO CREATE BUTTONS ================================================== ** Processing line: ~ ## # =============================================================================~ - Inside source: true *** True Line Result ## # ============================================================================= ** Processing line: ~ def how_to_create_buttons args~ - Inside source: true *** True Line Result def how_to_create_buttons args ** Processing line: ~ # Define a button style~ - Inside source: true *** True Line Result # Define a button style ** Processing line: ~ args.state.button_style = { w: 62, h: 10, r: 80, g: 80, b: 80 }~ - Inside source: true *** True Line Result args.state.button_style = { w: 62, h: 10, r: 80, g: 80, b: 80 } ** Processing line: ~ args.state.label_style = { r: 80, g: 80, b: 80 }~ - Inside source: true *** True Line Result args.state.label_style = { r: 80, g: 80, b: 80 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render instructions~ - Inside source: true *** True Line Result # Render instructions ** Processing line: ~ args.state.button_message ||= "Press a Button!"~ - Inside source: true *** True Line Result args.state.button_message ||= "Press a Button!" ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(args.state.label_style)~ - Inside source: true *** True Line Result .merge(args.state.label_style) ** Processing line: ~ .merge(x: 32,~ - Inside source: true *** True Line Result .merge(x: 32, ** Processing line: ~ y: 62,~ - Inside source: true *** True Line Result y: 62, ** Processing line: ~ text: args.state.button_message,~ - Inside source: true *** True Line Result text: args.state.button_message, ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates button one using a border and a label~ - Inside source: true *** True Line Result # Creates button one using a border and a label ** Processing line: ~ args.state.button_one_border = args.state.button_style.merge( x: 1, y: 32)~ - Inside source: true *** True Line Result args.state.button_one_border = args.state.button_style.merge( x: 1, y: 32) ** Processing line: ~ args.lowrez.borders << args.state.button_one_border~ - Inside source: true *** True Line Result args.lowrez.borders << args.state.button_one_border ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(args.state.label_style)~ - Inside source: true *** True Line Result .merge(args.state.label_style) ** Processing line: ~ .merge(x: args.state.button_one_border.x + 2,~ - Inside source: true *** True Line Result .merge(x: args.state.button_one_border.x + 2, ** Processing line: ~ y: args.state.button_one_border.y + LOWREZ_FONT_SM_HEIGHT + 2,~ - Inside source: true *** True Line Result y: args.state.button_one_border.y + LOWREZ_FONT_SM_HEIGHT + 2, ** Processing line: ~ text: "Button One")~ - Inside source: true *** True Line Result text: "Button One") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates button two using a border and a label~ - Inside source: true *** True Line Result # Creates button two using a border and a label ** Processing line: ~ args.state.button_two_border = args.state.button_style.merge( x: 1, y: 20)~ - Inside source: true *** True Line Result args.state.button_two_border = args.state.button_style.merge( x: 1, y: 20) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.lowrez.borders << args.state.button_two_border~ - Inside source: true *** True Line Result args.lowrez.borders << args.state.button_two_border ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(args.state.label_style)~ - Inside source: true *** True Line Result .merge(args.state.label_style) ** Processing line: ~ .merge(x: args.state.button_two_border.x + 2,~ - Inside source: true *** True Line Result .merge(x: args.state.button_two_border.x + 2, ** Processing line: ~ y: args.state.button_two_border.y + LOWREZ_FONT_SM_HEIGHT + 2,~ - Inside source: true *** True Line Result y: args.state.button_two_border.y + LOWREZ_FONT_SM_HEIGHT + 2, ** Processing line: ~ text: "Button Two")~ - Inside source: true *** True Line Result text: "Button Two") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Initialize the state variable that tracks which button was clicked to "" (empty stringI~ - Inside source: true *** True Line Result # Initialize the state variable that tracks which button was clicked to "" (empty stringI ** Processing line: ~ args.state.last_button_clicked ||= "--"~ - Inside source: true *** True Line Result args.state.last_button_clicked ||= "--" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If a click occurs, check to see if either button one, or button two was clicked~ - Inside source: true *** True Line Result # If a click occurs, check to see if either button one, or button two was clicked ** Processing line: ~ # using the inside_rect? method of the mouse~ - Inside source: true *** True Line Result # using the inside_rect? method of the mouse ** Processing line: ~ # set args.state.last_button_clicked accordingly~ - Inside source: true *** True Line Result # set args.state.last_button_clicked accordingly ** Processing line: ~ if args.lowrez.mouse_click~ - Inside source: true *** True Line Result if args.lowrez.mouse_click ** Processing line: ~ if args.lowrez.mouse_click.inside_rect? args.state.button_one_border~ - Inside source: true *** True Line Result if args.lowrez.mouse_click.inside_rect? args.state.button_one_border ** Processing line: ~ args.state.last_button_clicked = "One Clicked!"~ - Inside source: true *** True Line Result args.state.last_button_clicked = "One Clicked!" ** Processing line: ~ elsif args.lowrez.mouse_click.inside_rect? args.state.button_two_border~ - Inside source: true *** True Line Result elsif args.lowrez.mouse_click.inside_rect? args.state.button_two_border ** Processing line: ~ args.state.last_button_clicked = "Two Clicked!"~ - Inside source: true *** True Line Result args.state.last_button_clicked = "Two Clicked!" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.last_button_clicked = "--"~ - Inside source: true *** True Line Result args.state.last_button_clicked = "--" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Render the current value of args.state.last_button_clicked~ - Inside source: true *** True Line Result # Render the current value of args.state.last_button_clicked ** Processing line: ~ args.lowrez.labels << args.lowrez~ - Inside source: true *** True Line Result args.lowrez.labels << args.lowrez ** Processing line: ~ .default_label~ - Inside source: true *** True Line Result .default_label ** Processing line: ~ .merge(args.state.label_style)~ - Inside source: true *** True Line Result .merge(args.state.label_style) ** Processing line: ~ .merge(x: 32,~ - Inside source: true *** True Line Result .merge(x: 32, ** Processing line: ~ y: 5,~ - Inside source: true *** True Line Result y: 5, ** Processing line: ~ text: args.state.last_button_clicked,~ - Inside source: true *** True Line Result text: args.state.last_button_clicked, ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_debug args~ - Inside source: true *** True Line Result def render_debug args ** Processing line: ~ if !args.state.grid_rendered~ - Inside source: true *** True Line Result if !args.state.grid_rendered ** Processing line: ~ 65.map_with_index do |i|~ - Inside source: true *** True Line Result 65.map_with_index do |i| ** Processing line: ~ args.outputs.static_debug << {~ - Inside source: true *** True Line Result args.outputs.static_debug << { ** Processing line: ~ x: LOWREZ_X_OFFSET,~ - Inside source: true *** True Line Result x: LOWREZ_X_OFFSET, ** Processing line: ~ y: LOWREZ_Y_OFFSET + (i * 10),~ - Inside source: true *** True Line Result y: LOWREZ_Y_OFFSET + (i * 10), ** Processing line: ~ x2: LOWREZ_X_OFFSET + LOWREZ_ZOOMED_SIZE,~ - Inside source: true *** True Line Result x2: LOWREZ_X_OFFSET + LOWREZ_ZOOMED_SIZE, ** Processing line: ~ y2: LOWREZ_Y_OFFSET + (i * 10),~ - Inside source: true *** True Line Result y2: LOWREZ_Y_OFFSET + (i * 10), ** Processing line: ~ r: 128,~ - Inside source: true *** True Line Result r: 128, ** Processing line: ~ g: 128,~ - Inside source: true *** True Line Result g: 128, ** Processing line: ~ b: 128,~ - Inside source: true *** True Line Result b: 128, ** Processing line: ~ a: 80~ - Inside source: true *** True Line Result a: 80 ** Processing line: ~ }.line!~ - Inside source: true *** True Line Result }.line! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.static_debug << {~ - Inside source: true *** True Line Result args.outputs.static_debug << { ** Processing line: ~ x: LOWREZ_X_OFFSET + (i * 10),~ - Inside source: true *** True Line Result x: LOWREZ_X_OFFSET + (i * 10), ** Processing line: ~ y: LOWREZ_Y_OFFSET,~ - Inside source: true *** True Line Result y: LOWREZ_Y_OFFSET, ** Processing line: ~ x2: LOWREZ_X_OFFSET + (i * 10),~ - Inside source: true *** True Line Result x2: LOWREZ_X_OFFSET + (i * 10), ** Processing line: ~ y2: LOWREZ_Y_OFFSET + LOWREZ_ZOOMED_SIZE,~ - Inside source: true *** True Line Result y2: LOWREZ_Y_OFFSET + LOWREZ_ZOOMED_SIZE, ** Processing line: ~ r: 128,~ - Inside source: true *** True Line Result r: 128, ** Processing line: ~ g: 128,~ - Inside source: true *** True Line Result g: 128, ** Processing line: ~ b: 128,~ - Inside source: true *** True Line Result b: 128, ** Processing line: ~ a: 80~ - Inside source: true *** True Line Result a: 80 ** Processing line: ~ }.line!~ - Inside source: true *** True Line Result }.line! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.grid_rendered = true~ - Inside source: true *** True Line Result args.state.grid_rendered = true ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.last_click ||= 0~ - Inside source: true *** True Line Result args.state.last_click ||= 0 ** Processing line: ~ args.state.last_up ||= 0~ - Inside source: true *** True Line Result args.state.last_up ||= 0 ** Processing line: ~ args.state.last_click = args.state.tick_count if args.lowrez.mouse_down # you can also use args.lowrez.click~ - Inside source: true *** True Line Result args.state.last_click = args.state.tick_count if args.lowrez.mouse_down # you can also use args.lowrez.click ** Processing line: ~ args.state.last_up = args.state.tick_count if args.lowrez.mouse_up~ - Inside source: true *** True Line Result args.state.last_up = args.state.tick_count if args.lowrez.mouse_up ** Processing line: ~ args.state.label_style = { size_enum: -1.5 }~ - Inside source: true *** True Line Result args.state.label_style = { size_enum: -1.5 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.watch_list = [~ - Inside source: true *** True Line Result args.state.watch_list = [ ** Processing line: ~ "args.state.tick_count is: #{args.state.tick_count}",~ - Inside source: true *** True Line Result "args.state.tick_count is: #{args.state.tick_count}", ** Processing line: ~ "args.lowrez.mouse_position is: #{args.lowrez.mouse_position.x}, #{args.lowrez.mouse_position.y}",~ - Inside source: true *** True Line Result "args.lowrez.mouse_position is: #{args.lowrez.mouse_position.x}, #{args.lowrez.mouse_position.y}", ** Processing line: ~ "args.lowrez.mouse_down tick: #{args.state.last_click || "never"}",~ - Inside source: true *** True Line Result "args.lowrez.mouse_down tick: #{args.state.last_click || "never"}", ** Processing line: ~ "args.lowrez.mouse_up tick: #{args.state.last_up || "false"}",~ - Inside source: true *** True Line Result "args.lowrez.mouse_up tick: #{args.state.last_up || "false"}", ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << args.state~ - Inside source: true *** True Line Result args.outputs.debug << args.state ** Processing line: ~ .watch_list~ - Inside source: true *** True Line Result .watch_list ** Processing line: ~ .map_with_index do |text, i|~ - Inside source: true *** True Line Result .map_with_index do |text, i| ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: 5,~ - Inside source: true *** True Line Result x: 5, ** Processing line: ~ y: 720 - (i * 20),~ - Inside source: true *** True Line Result y: 720 - (i * 20), ** Processing line: ~ text: text,~ - Inside source: true *** True Line Result text: text, ** Processing line: ~ size_enum: -1.5~ - Inside source: true *** True Line Result size_enum: -1.5 ** Processing line: ~ }.label!~ - Inside source: true *** True Line Result }.label! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << {~ - Inside source: true *** True Line Result args.outputs.debug << { ** Processing line: ~ x: 640,~ - Inside source: true *** True Line Result x: 640, ** Processing line: ~ y: 25,~ - Inside source: true *** True Line Result y: 25, ** Processing line: ~ text: "INFO: dev mode is currently enabled. Comment out the invocation of ~render_debug~ within the ~tick~ method to hide the debug layer.",~ - Inside source: true *** True Line Result text: "INFO: dev mode is currently enabled. Comment out the invocation of ~render_debug~ within the ~tick~ method to hide the debug layer.", ** Processing line: ~ size_enum: -0.5,~ - Inside source: true *** True Line Result size_enum: -0.5, ** Processing line: ~ alignment_enum: 1~ - Inside source: true *** True Line Result alignment_enum: 1 ** Processing line: ~ }.label!~ - Inside source: true *** True Line Result }.label! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Mario - Jumping - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Mario - Jumping - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_mario/01_jumping/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_mario/01_jumping/app/main.rb ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ input args~ - Inside source: true *** True Line Result input args ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ args.state.player.x ||= args.grid.w.half~ - Inside source: true *** True Line Result args.state.player.x ||= args.grid.w.half ** Processing line: ~ args.state.player.y ||= 0~ - Inside source: true *** True Line Result args.state.player.y ||= 0 ** Processing line: ~ args.state.player.size ||= 100~ - Inside source: true *** True Line Result args.state.player.size ||= 100 ** Processing line: ~ args.state.player.dy ||= 0~ - Inside source: true *** True Line Result args.state.player.dy ||= 0 ** Processing line: ~ args.state.player.action ||= :jumping~ - Inside source: true *** True Line Result args.state.player.action ||= :jumping ** Processing line: ~ args.state.jump.power = 20~ - Inside source: true *** True Line Result args.state.jump.power = 20 ** Processing line: ~ args.state.jump.increase_frames = 10~ - Inside source: true *** True Line Result args.state.jump.increase_frames = 10 ** Processing line: ~ args.state.jump.increase_power = 1~ - Inside source: true *** True Line Result args.state.jump.increase_power = 1 ** Processing line: ~ args.state.gravity = -1~ - Inside source: true *** True Line Result args.state.gravity = -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ args.outputs.sprites << {~ - Inside source: true *** True Line Result args.outputs.sprites << { ** Processing line: ~ x: args.state.player.x -~ - Inside source: true *** True Line Result x: args.state.player.x - ** Processing line: ~ args.state.player.size.half,~ - Inside source: true *** True Line Result args.state.player.size.half, ** Processing line: ~ y: args.state.player.y,~ - Inside source: true *** True Line Result y: args.state.player.y, ** Processing line: ~ w: args.state.player.size,~ - Inside source: true *** True Line Result w: args.state.player.size, ** Processing line: ~ h: args.state.player.size,~ - Inside source: true *** True Line Result h: args.state.player.size, ** Processing line: ~ path: 'sprites/square/red.png'~ - Inside source: true *** True Line Result path: 'sprites/square/red.png' ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input args~ - Inside source: true *** True Line Result def input args ** Processing line: ~ if args.inputs.keyboard.key_down.space~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.space ** Processing line: ~ if args.state.player.action == :standing~ - Inside source: true *** True Line Result if args.state.player.action == :standing ** Processing line: ~ args.state.player.action = :jumping~ - Inside source: true *** True Line Result args.state.player.action = :jumping ** Processing line: ~ args.state.player.dy = args.state.jump.power~ - Inside source: true *** True Line Result args.state.player.dy = args.state.jump.power ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # record when the action took place~ - Inside source: true *** True Line Result # record when the action took place ** Processing line: ~ current_frame = args.state.tick_count~ - Inside source: true *** True Line Result current_frame = args.state.tick_count ** Processing line: ~ args.state.player.action_at = current_frame~ - Inside source: true *** True Line Result args.state.player.action_at = current_frame ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the space bar is being held~ - Inside source: true *** True Line Result # if the space bar is being held ** Processing line: ~ if args.inputs.keyboard.key_held.space~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_held.space ** Processing line: ~ # is the player jumping~ - Inside source: true *** True Line Result # is the player jumping ** Processing line: ~ is_jumping = args.state.player.action == :jumping~ - Inside source: true *** True Line Result is_jumping = args.state.player.action == :jumping ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # when was the jump performed~ - Inside source: true *** True Line Result # when was the jump performed ** Processing line: ~ time_of_jump = args.state.player.action_at~ - Inside source: true *** True Line Result time_of_jump = args.state.player.action_at ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # how much time has passed since the jump~ - Inside source: true *** True Line Result # how much time has passed since the jump ** Processing line: ~ jump_elapsed_time = time_of_jump.elapsed_time~ - Inside source: true *** True Line Result jump_elapsed_time = time_of_jump.elapsed_time ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # how much time is allowed for increasing power~ - Inside source: true *** True Line Result # how much time is allowed for increasing power ** Processing line: ~ time_allowed = args.state.jump.increase_frames~ - Inside source: true *** True Line Result time_allowed = args.state.jump.increase_frames ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the player is jumping~ - Inside source: true *** True Line Result # if the player is jumping ** Processing line: ~ # and the elapsed time is less than~ - Inside source: true *** True Line Result # and the elapsed time is less than ** Processing line: ~ # the allowed time~ - Inside source: true *** True Line Result # the allowed time ** Processing line: ~ if is_jumping && jump_elapsed_time < time_allowed~ - Inside source: true *** True Line Result if is_jumping && jump_elapsed_time < time_allowed ** Processing line: ~ # increase the dy by the increase power~ - Inside source: true *** True Line Result # increase the dy by the increase power ** Processing line: ~ power_to_add = args.state.jump.increase_power~ - Inside source: true *** True Line Result power_to_add = args.state.jump.increase_power ** Processing line: ~ args.state.player.dy += power_to_add~ - Inside source: true *** True Line Result args.state.player.dy += power_to_add ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ if args.state.player.action == :jumping~ - Inside source: true *** True Line Result if args.state.player.action == :jumping ** Processing line: ~ args.state.player.y += args.state.player.dy~ - Inside source: true *** True Line Result args.state.player.y += args.state.player.dy ** Processing line: ~ args.state.player.dy += args.state.gravity~ - Inside source: true *** True Line Result args.state.player.dy += args.state.gravity ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.player.y < 0~ - Inside source: true *** True Line Result if args.state.player.y < 0 ** Processing line: ~ args.state.player.y = 0~ - Inside source: true *** True Line Result args.state.player.y = 0 ** Processing line: ~ args.state.player.action = :standing~ - Inside source: true *** True Line Result args.state.player.action = :standing ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Mario - Jumping And Collisions - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Mario - Jumping And Collisions - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_mario/02_jumping_and_collisions/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_mario/02_jumping_and_collisions/app/main.rb ** Processing line: ~ class Game~ - Inside source: true *** True Line Result class Game ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ return if state.tick_count != 0~ - Inside source: true *** True Line Result return if state.tick_count != 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ player.x = 64~ - Inside source: true *** True Line Result player.x = 64 ** Processing line: ~ player.y = 800~ - Inside source: true *** True Line Result player.y = 800 ** Processing line: ~ player.size = 50~ - Inside source: true *** True Line Result player.size = 50 ** Processing line: ~ player.dx = 0~ - Inside source: true *** True Line Result player.dx = 0 ** Processing line: ~ player.dy = 0~ - Inside source: true *** True Line Result player.dy = 0 ** Processing line: ~ player.action = :falling~ - Inside source: true *** True Line Result player.action = :falling ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ player.max_speed = 20~ - Inside source: true *** True Line Result player.max_speed = 20 ** Processing line: ~ player.jump_power = 15~ - Inside source: true *** True Line Result player.jump_power = 15 ** Processing line: ~ player.jump_air_time = 15~ - Inside source: true *** True Line Result player.jump_air_time = 15 ** Processing line: ~ player.jump_increase_power = 1~ - Inside source: true *** True Line Result player.jump_increase_power = 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.gravity = -1~ - Inside source: true *** True Line Result state.gravity = -1 ** Processing line: ~ state.drag = 0.001~ - Inside source: true *** True Line Result state.drag = 0.001 ** Processing line: ~ state.tile_size = 64~ - Inside source: true *** True Line Result state.tile_size = 64 ** Processing line: ~ state.tiles ||= [~ - Inside source: true *** True Line Result state.tiles ||= [ ** Processing line: ~ { ordinal_x: 0, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 0, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 1, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 1, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 2, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 2, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 3, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 3, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 4, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 4, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 5, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 5, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 6, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 6, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 7, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 7, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 8, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 8, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 9, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 9, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 10, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 10, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 11, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 11, ordinal_y: 0 }, ** Processing line: ~ { ordinal_x: 12, ordinal_y: 0 },~ - Inside source: true *** True Line Result { ordinal_x: 12, ordinal_y: 0 }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { ordinal_x: 9, ordinal_y: 3 },~ - Inside source: true *** True Line Result { ordinal_x: 9, ordinal_y: 3 }, ** Processing line: ~ { ordinal_x: 10, ordinal_y: 3 },~ - Inside source: true *** True Line Result { ordinal_x: 10, ordinal_y: 3 }, ** Processing line: ~ { ordinal_x: 11, ordinal_y: 3 },~ - Inside source: true *** True Line Result { ordinal_x: 11, ordinal_y: 3 }, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ tiles.each do |t|~ - Inside source: true *** True Line Result tiles.each do |t| ** Processing line: ~ t.rect = { x: t.ordinal_x * 64,~ - Inside source: true *** True Line Result t.rect = { x: t.ordinal_x * 64, ** Processing line: ~ y: t.ordinal_y * 64,~ - Inside source: true *** True Line Result y: t.ordinal_y * 64, ** Processing line: ~ w: 64,~ - Inside source: true *** True Line Result w: 64, ** Processing line: ~ h: 64 }~ - Inside source: true *** True Line Result h: 64 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ render_player~ - Inside source: true *** True Line Result render_player ** Processing line: ~ render_tiles~ - Inside source: true *** True Line Result render_tiles ** Processing line: ~ # render_grid~ - Inside source: true *** True Line Result # render_grid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ input_jump~ - Inside source: true *** True Line Result input_jump ** Processing line: ~ input_move~ - Inside source: true *** True Line Result input_move ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ calc_player_rect~ - Inside source: true *** True Line Result calc_player_rect ** Processing line: ~ calc_left~ - Inside source: true *** True Line Result calc_left ** Processing line: ~ calc_right~ - Inside source: true *** True Line Result calc_right ** Processing line: ~ calc_below~ - Inside source: true *** True Line Result calc_below ** Processing line: ~ calc_above~ - Inside source: true *** True Line Result calc_above ** Processing line: ~ calc_player_dy~ - Inside source: true *** True Line Result calc_player_dy ** Processing line: ~ calc_player_dx~ - Inside source: true *** True Line Result calc_player_dx ** Processing line: ~ calc_game_over~ - Inside source: true *** True Line Result calc_game_over ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_player~ - Inside source: true *** True Line Result def render_player ** Processing line: ~ outputs.sprites << {~ - Inside source: true *** True Line Result outputs.sprites << { ** Processing line: ~ x: player.x,~ - Inside source: true *** True Line Result x: player.x, ** Processing line: ~ y: player.y,~ - Inside source: true *** True Line Result y: player.y, ** Processing line: ~ w: player.size,~ - Inside source: true *** True Line Result w: player.size, ** Processing line: ~ h: player.size,~ - Inside source: true *** True Line Result h: player.size, ** Processing line: ~ path: 'sprites/square/red.png'~ - Inside source: true *** True Line Result path: 'sprites/square/red.png' ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_tiles~ - Inside source: true *** True Line Result def render_tiles ** Processing line: ~ outputs.sprites << state.tiles.map do |t|~ - Inside source: true *** True Line Result outputs.sprites << state.tiles.map do |t| ** Processing line: ~ t.merge path: 'sprites/square/white.png',~ - Inside source: true *** True Line Result t.merge path: 'sprites/square/white.png', ** Processing line: ~ x: t.ordinal_x * 64,~ - Inside source: true *** True Line Result x: t.ordinal_x * 64, ** Processing line: ~ y: t.ordinal_y * 64,~ - Inside source: true *** True Line Result y: t.ordinal_y * 64, ** Processing line: ~ w: 64,~ - Inside source: true *** True Line Result w: 64, ** Processing line: ~ h: 64~ - Inside source: true *** True Line Result h: 64 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_grid~ - Inside source: true *** True Line Result def render_grid ** Processing line: ~ if state.tick_count == 0~ - Inside source: true *** True Line Result if state.tick_count == 0 ** Processing line: ~ outputs[:grid].background_color = [0, 0, 0, 0]~ - Inside source: true *** True Line Result outputs[:grid].background_color = [0, 0, 0, 0] ** Processing line: ~ outputs[:grid].borders << available_brick_locations~ - Inside source: true *** True Line Result outputs[:grid].borders << available_brick_locations ** Processing line: ~ outputs[:grid].labels << available_brick_locations.map do |b|~ - Inside source: true *** True Line Result outputs[:grid].labels << available_brick_locations.map do |b| ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ b.merge(text: "#{b.ordinal_x},#{b.ordinal_y}",~ - Inside source: true *** True Line Result b.merge(text: "#{b.ordinal_x},#{b.ordinal_y}", ** Processing line: ~ x: b.x + 2,~ - Inside source: true *** True Line Result x: b.x + 2, ** Processing line: ~ y: b.y + 2,~ - Inside source: true *** True Line Result y: b.y + 2, ** Processing line: ~ size_enum: -3,~ - Inside source: true *** True Line Result size_enum: -3, ** Processing line: ~ vertical_alignment_enum: 0,~ - Inside source: true *** True Line Result vertical_alignment_enum: 0, ** Processing line: ~ blendmode_enum: 0),~ - Inside source: true *** True Line Result blendmode_enum: 0), ** Processing line: ~ b.merge(text: "#{b.x},#{b.y}",~ - Inside source: true *** True Line Result b.merge(text: "#{b.x},#{b.y}", ** Processing line: ~ x: b.x + 2,~ - Inside source: true *** True Line Result x: b.x + 2, ** Processing line: ~ y: b.y + 2 + 20,~ - Inside source: true *** True Line Result y: b.y + 2 + 20, ** Processing line: ~ size_enum: -3,~ - Inside source: true *** True Line Result size_enum: -3, ** Processing line: ~ vertical_alignment_enum: 0,~ - Inside source: true *** True Line Result vertical_alignment_enum: 0, ** Processing line: ~ blendmode_enum: 0)~ - Inside source: true *** True Line Result blendmode_enum: 0) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.sprites << { x: 0, y: 0, w: 1280, h: 720, path: :grid }~ - Inside source: true *** True Line Result outputs.sprites << { x: 0, y: 0, w: 1280, h: 720, path: :grid } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_jump~ - Inside source: true *** True Line Result def input_jump ** Processing line: ~ if inputs.keyboard.key_down.space~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.space ** Processing line: ~ player_jump~ - Inside source: true *** True Line Result player_jump ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.key_held.space~ - Inside source: true *** True Line Result if inputs.keyboard.key_held.space ** Processing line: ~ player_jump_increase_air_time~ - Inside source: true *** True Line Result player_jump_increase_air_time ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_move~ - Inside source: true *** True Line Result def input_move ** Processing line: ~ if player.dx.abs < 20~ - Inside source: true *** True Line Result if player.dx.abs < 20 ** Processing line: ~ if inputs.keyboard.left~ - Inside source: true *** True Line Result if inputs.keyboard.left ** Processing line: ~ player.dx -= 2~ - Inside source: true *** True Line Result player.dx -= 2 ** Processing line: ~ elsif inputs.keyboard.right~ - Inside source: true *** True Line Result elsif inputs.keyboard.right ** Processing line: ~ player.dx += 2~ - Inside source: true *** True Line Result player.dx += 2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_game_over~ - Inside source: true *** True Line Result def calc_game_over ** Processing line: ~ if player.y < -64~ - Inside source: true *** True Line Result if player.y < -64 ** Processing line: ~ player.x = 64~ - Inside source: true *** True Line Result player.x = 64 ** Processing line: ~ player.y = 800~ - Inside source: true *** True Line Result player.y = 800 ** Processing line: ~ player.dx = 0~ - Inside source: true *** True Line Result player.dx = 0 ** Processing line: ~ player.dy = 0~ - Inside source: true *** True Line Result player.dy = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_player_rect~ - Inside source: true *** True Line Result def calc_player_rect ** Processing line: ~ player.rect = player_current_rect~ - Inside source: true *** True Line Result player.rect = player_current_rect ** Processing line: ~ player.next_rect = player_next_rect~ - Inside source: true *** True Line Result player.next_rect = player_next_rect ** Processing line: ~ player.prev_rect = player_prev_rect~ - Inside source: true *** True Line Result player.prev_rect = player_prev_rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_player_dx~ - Inside source: true *** True Line Result def calc_player_dx ** Processing line: ~ player.dx = player_next_dx~ - Inside source: true *** True Line Result player.dx = player_next_dx ** Processing line: ~ player.x += player.dx~ - Inside source: true *** True Line Result player.x += player.dx ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_player_dy~ - Inside source: true *** True Line Result def calc_player_dy ** Processing line: ~ player.y += player.dy~ - Inside source: true *** True Line Result player.y += player.dy ** Processing line: ~ player.dy = player_next_dy~ - Inside source: true *** True Line Result player.dy = player_next_dy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_below~ - Inside source: true *** True Line Result def calc_below ** Processing line: ~ return unless player.dy < 0~ - Inside source: true *** True Line Result return unless player.dy < 0 ** Processing line: ~ tiles_below = tiles_find { |t| t.rect.top <= player.prev_rect.y }~ - Inside source: true *** True Line Result tiles_below = tiles_find { |t| t.rect.top <= player.prev_rect.y } ** Processing line: ~ collision = tiles_find_colliding tiles_below, (player.rect.merge y: player.next_rect.y)~ - Inside source: true *** True Line Result collision = tiles_find_colliding tiles_below, (player.rect.merge y: player.next_rect.y) ** Processing line: ~ if collision~ - Inside source: true *** True Line Result if collision ** Processing line: ~ player.y = collision.rect.y + state.tile_size~ - Inside source: true *** True Line Result player.y = collision.rect.y + state.tile_size ** Processing line: ~ player.dy = 0~ - Inside source: true *** True Line Result player.dy = 0 ** Processing line: ~ player.action = :standing~ - Inside source: true *** True Line Result player.action = :standing ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ player.action = :falling~ - Inside source: true *** True Line Result player.action = :falling ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_left~ - Inside source: true *** True Line Result def calc_left ** Processing line: ~ return unless player.dx < 0 && player_next_dx < 0~ - Inside source: true *** True Line Result return unless player.dx < 0 && player_next_dx < 0 ** Processing line: ~ tiles_left = tiles_find { |t| t.rect.right <= player.prev_rect.left }~ - Inside source: true *** True Line Result tiles_left = tiles_find { |t| t.rect.right <= player.prev_rect.left } ** Processing line: ~ collision = tiles_find_colliding tiles_left, (player.rect.merge x: player.next_rect.x)~ - Inside source: true *** True Line Result collision = tiles_find_colliding tiles_left, (player.rect.merge x: player.next_rect.x) ** Processing line: ~ return unless collision~ - Inside source: true *** True Line Result return unless collision ** Processing line: ~ player.x = collision.rect.right~ - Inside source: true *** True Line Result player.x = collision.rect.right ** Processing line: ~ player.dx = 0~ - Inside source: true *** True Line Result player.dx = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_right~ - Inside source: true *** True Line Result def calc_right ** Processing line: ~ return unless player.dx > 0 && player_next_dx > 0~ - Inside source: true *** True Line Result return unless player.dx > 0 && player_next_dx > 0 ** Processing line: ~ tiles_right = tiles_find { |t| t.rect.left >= player.prev_rect.right }~ - Inside source: true *** True Line Result tiles_right = tiles_find { |t| t.rect.left >= player.prev_rect.right } ** Processing line: ~ collision = tiles_find_colliding tiles_right, (player.rect.merge x: player.next_rect.x)~ - Inside source: true *** True Line Result collision = tiles_find_colliding tiles_right, (player.rect.merge x: player.next_rect.x) ** Processing line: ~ return unless collision~ - Inside source: true *** True Line Result return unless collision ** Processing line: ~ player.x = collision.rect.left - player.rect.w~ - Inside source: true *** True Line Result player.x = collision.rect.left - player.rect.w ** Processing line: ~ player.dx = 0~ - Inside source: true *** True Line Result player.dx = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_above~ - Inside source: true *** True Line Result def calc_above ** Processing line: ~ return unless player.dy > 0~ - Inside source: true *** True Line Result return unless player.dy > 0 ** Processing line: ~ tiles_above = tiles_find { |t| t.rect.y >= player.prev_rect.y }~ - Inside source: true *** True Line Result tiles_above = tiles_find { |t| t.rect.y >= player.prev_rect.y } ** Processing line: ~ collision = tiles_find_colliding tiles_above, (player.rect.merge y: player.next_rect.y)~ - Inside source: true *** True Line Result collision = tiles_find_colliding tiles_above, (player.rect.merge y: player.next_rect.y) ** Processing line: ~ return unless collision~ - Inside source: true *** True Line Result return unless collision ** Processing line: ~ player.dy = 0~ - Inside source: true *** True Line Result player.dy = 0 ** Processing line: ~ player.y = collision.rect.bottom - player.rect.h~ - Inside source: true *** True Line Result player.y = collision.rect.bottom - player.rect.h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_current_rect~ - Inside source: true *** True Line Result def player_current_rect ** Processing line: ~ { x: player.x, y: player.y, w: player.size, h: player.size }~ - Inside source: true *** True Line Result { x: player.x, y: player.y, w: player.size, h: player.size } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def available_brick_locations~ - Inside source: true *** True Line Result def available_brick_locations ** Processing line: ~ (0..19).to_a~ - Inside source: true *** True Line Result (0..19).to_a ** Processing line: ~ .product(0..11)~ - Inside source: true *** True Line Result .product(0..11) ** Processing line: ~ .map do |(ordinal_x, ordinal_y)|~ - Inside source: true *** True Line Result .map do |(ordinal_x, ordinal_y)| ** Processing line: ~ { ordinal_x: ordinal_x,~ - Inside source: true *** True Line Result { ordinal_x: ordinal_x, ** Processing line: ~ ordinal_y: ordinal_y,~ - Inside source: true *** True Line Result ordinal_y: ordinal_y, ** Processing line: ~ x: ordinal_x * 64,~ - Inside source: true *** True Line Result x: ordinal_x * 64, ** Processing line: ~ y: ordinal_y * 64,~ - Inside source: true *** True Line Result y: ordinal_y * 64, ** Processing line: ~ w: 64,~ - Inside source: true *** True Line Result w: 64, ** Processing line: ~ h: 64 }~ - Inside source: true *** True Line Result h: 64 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player~ - Inside source: true *** True Line Result def player ** Processing line: ~ state.player ||= args.state.new_entity :player~ - Inside source: true *** True Line Result state.player ||= args.state.new_entity :player ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_next_dy~ - Inside source: true *** True Line Result def player_next_dy ** Processing line: ~ player.dy + state.gravity + state.drag ** 2 * -1~ - Inside source: true *** True Line Result player.dy + state.gravity + state.drag ** 2 * -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_next_dx~ - Inside source: true *** True Line Result def player_next_dx ** Processing line: ~ player.dx * 0.8~ - Inside source: true *** True Line Result player.dx * 0.8 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_next_rect~ - Inside source: true *** True Line Result def player_next_rect ** Processing line: ~ player.rect.merge x: player.x + player_next_dx,~ - Inside source: true *** True Line Result player.rect.merge x: player.x + player_next_dx, ** Processing line: ~ y: player.y + player_next_dy~ - Inside source: true *** True Line Result y: player.y + player_next_dy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_prev_rect~ - Inside source: true *** True Line Result def player_prev_rect ** Processing line: ~ player.rect.merge x: player.x - player.dx,~ - Inside source: true *** True Line Result player.rect.merge x: player.x - player.dx, ** Processing line: ~ y: player.y - player.dy~ - Inside source: true *** True Line Result y: player.y - player.dy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_jump~ - Inside source: true *** True Line Result def player_jump ** Processing line: ~ return if player.action != :standing~ - Inside source: true *** True Line Result return if player.action != :standing ** Processing line: ~ player.action = :jumping~ - Inside source: true *** True Line Result player.action = :jumping ** Processing line: ~ player.dy = state.player.jump_power~ - Inside source: true *** True Line Result player.dy = state.player.jump_power ** Processing line: ~ current_frame = state.tick_count~ - Inside source: true *** True Line Result current_frame = state.tick_count ** Processing line: ~ player.action_at = current_frame~ - Inside source: true *** True Line Result player.action_at = current_frame ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_jump_increase_air_time~ - Inside source: true *** True Line Result def player_jump_increase_air_time ** Processing line: ~ return if player.action != :jumping~ - Inside source: true *** True Line Result return if player.action != :jumping ** Processing line: ~ return if player.action_at.elapsed_time >= player.jump_air_time~ - Inside source: true *** True Line Result return if player.action_at.elapsed_time >= player.jump_air_time ** Processing line: ~ player.dy += player.jump_increase_power~ - Inside source: true *** True Line Result player.dy += player.jump_increase_power ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tiles~ - Inside source: true *** True Line Result def tiles ** Processing line: ~ state.tiles~ - Inside source: true *** True Line Result state.tiles ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tiles_find_colliding tiles, target~ - Inside source: true *** True Line Result def tiles_find_colliding tiles, target ** Processing line: ~ tiles.find { |t| t.rect.intersect_rect? target }~ - Inside source: true *** True Line Result tiles.find { |t| t.rect.intersect_rect? target } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tiles_find &block~ - Inside source: true *** True Line Result def tiles_find &block ** Processing line: ~ tiles.find_all(&block)~ - Inside source: true *** True Line Result tiles.find_all(&block) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $game ||= Game.new~ - Inside source: true *** True Line Result $game ||= Game.new ** Processing line: ~ $game.args = args~ - Inside source: true *** True Line Result $game.args = args ** Processing line: ~ $game.tick~ - Inside source: true *** True Line Result $game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Platformer - Clepto Frog - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Platformer - Clepto Frog - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_platformer/clepto_frog/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_platformer/clepto_frog/app/main.rb ** Processing line: ~ MAP_FILE_PATH = 'map.txt'~ - Inside source: true *** True Line Result MAP_FILE_PATH = 'map.txt' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ require 'app/map.rb'~ - Inside source: true *** True Line Result require 'app/map.rb' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class CleptoFrog~ - Inside source: true *** True Line Result class CleptoFrog ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_ending~ - Inside source: true *** True Line Result def render_ending ** Processing line: ~ state.game_over_at ||= state.tick_count~ - Inside source: true *** True Line Result state.game_over_at ||= state.tick_count ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [640, 700, "Clepto Frog", 4, 1]~ - Inside source: true *** True Line Result outputs.labels << [640, 700, "Clepto Frog", 4, 1] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.tick_count >= (state.game_over_at + 120)~ - Inside source: true *** True Line Result if state.tick_count >= (state.game_over_at + 120) ** Processing line: ~ outputs.labels << [640, 620, "\"I... I.... don't believe it.\" - New Guy",~ - Inside source: true *** True Line Result outputs.labels << [640, 620, "\"I... I.... don't believe it.\" - New Guy", ** Processing line: ~ 4, 1, 0, 0, 0, 255 * (state.game_over_at + 120).ease(60)]~ - Inside source: true *** True Line Result 4, 1, 0, 0, 0, 255 * (state.game_over_at + 120).ease(60)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.tick_count >= (state.game_over_at + 240)~ - Inside source: true *** True Line Result if state.tick_count >= (state.game_over_at + 240) ** Processing line: ~ outputs.labels << [640, 580, "\"He actually stole all the mugs?\" - New Guy",~ - Inside source: true *** True Line Result outputs.labels << [640, 580, "\"He actually stole all the mugs?\" - New Guy", ** Processing line: ~ 4, 1, 0, 0, 0, 255 * (state.game_over_at + 240).ease(60)]~ - Inside source: true *** True Line Result 4, 1, 0, 0, 0, 255 * (state.game_over_at + 240).ease(60)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.tick_count >= (state.game_over_at + 360)~ - Inside source: true *** True Line Result if state.tick_count >= (state.game_over_at + 360) ** Processing line: ~ outputs.labels << [640, 540, "\"Kind of feel bad STARTING HIM WITH NOTHING again.\" - New Guy",~ - Inside source: true *** True Line Result outputs.labels << [640, 540, "\"Kind of feel bad STARTING HIM WITH NOTHING again.\" - New Guy", ** Processing line: ~ 4, 1, 0, 0, 0, 255 * (state.game_over_at + 360).ease(60)]~ - Inside source: true *** True Line Result 4, 1, 0, 0, 0, 255 * (state.game_over_at + 360).ease(60)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.sprites << [640 - 50, 360 - 50, 100, 100,~ - Inside source: true *** True Line Result outputs.sprites << [640 - 50, 360 - 50, 100, 100, ** Processing line: ~ "sprites/square-green.png"]~ - Inside source: true *** True Line Result "sprites/square-green.png"] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [640, 300, "Current Time: #{"%.2f" % state.stuff_time}", 4, 1]~ - Inside source: true *** True Line Result outputs.labels << [640, 300, "Current Time: #{"%.2f" % state.stuff_time}", 4, 1] ** Processing line: ~ outputs.labels << [640, 270, "Best Time: #{"%.2f" % state.stuff_best_time}", 4, 1]~ - Inside source: true *** True Line Result outputs.labels << [640, 270, "Best Time: #{"%.2f" % state.stuff_best_time}", 4, 1] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.tick_count >= (state.game_over_at + 550)~ - Inside source: true *** True Line Result if state.tick_count >= (state.game_over_at + 550) ** Processing line: ~ restart_game~ - Inside source: true *** True Line Result restart_game ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def restart_game~ - Inside source: true *** True Line Result def restart_game ** Processing line: ~ state.world = nil~ - Inside source: true *** True Line Result state.world = nil ** Processing line: ~ state.x = nil~ - Inside source: true *** True Line Result state.x = nil ** Processing line: ~ state.y = nil~ - Inside source: true *** True Line Result state.y = nil ** Processing line: ~ state.dx = nil~ - Inside source: true *** True Line Result state.dx = nil ** Processing line: ~ state.dy = nil~ - Inside source: true *** True Line Result state.dy = nil ** Processing line: ~ state.stuff_score = 0~ - Inside source: true *** True Line Result state.stuff_score = 0 ** Processing line: ~ state.stuff_time = 0~ - Inside source: true *** True Line Result state.stuff_time = 0 ** Processing line: ~ state.intro_tick_count = nil~ - Inside source: true *** True Line Result state.intro_tick_count = nil ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ state.game_start_at = state.tick_count~ - Inside source: true *** True Line Result state.game_start_at = state.tick_count ** Processing line: ~ state.scene = :game~ - Inside source: true *** True Line Result state.scene = :game ** Processing line: ~ state.game_over_at = nil~ - Inside source: true *** True Line Result state.game_over_at = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_intro~ - Inside source: true *** True Line Result def render_intro ** Processing line: ~ outputs.labels << [640, 700, "Clepto Frog", 4, 1]~ - Inside source: true *** True Line Result outputs.labels << [640, 700, "Clepto Frog", 4, 1] ** Processing line: ~ if state.tick_count == 120~ - Inside source: true *** True Line Result if state.tick_count == 120 ** Processing line: ~ state.scene = :game~ - Inside source: true *** True Line Result state.scene = :game ** Processing line: ~ state.game_start_at = state.tick_count~ - Inside source: true *** True Line Result state.game_start_at = state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ if state.scene == :intro && state.tick_count <= 120~ - Inside source: true *** True Line Result if state.scene == :intro && state.tick_count <= 120 ** Processing line: ~ render_intro~ - Inside source: true *** True Line Result render_intro ** Processing line: ~ elsif state.scene == :ending~ - Inside source: true *** True Line Result elsif state.scene == :ending ** Processing line: ~ render_ending~ - Inside source: true *** True Line Result render_ending ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ process_inputs~ - Inside source: true *** True Line Result process_inputs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ state.scene ||= :intro~ - Inside source: true *** True Line Result state.scene ||= :intro ** Processing line: ~ state.stuff_score ||= 0~ - Inside source: true *** True Line Result state.stuff_score ||= 0 ** Processing line: ~ state.stuff_time ||= 0~ - Inside source: true *** True Line Result state.stuff_time ||= 0 ** Processing line: ~ state.stuff_best_time ||= nil~ - Inside source: true *** True Line Result state.stuff_best_time ||= nil ** Processing line: ~ state.camera_x ||= 0~ - Inside source: true *** True Line Result state.camera_x ||= 0 ** Processing line: ~ state.camera_y ||= 0~ - Inside source: true *** True Line Result state.camera_y ||= 0 ** Processing line: ~ state.target_camera_scale ||= 1~ - Inside source: true *** True Line Result state.target_camera_scale ||= 1 ** Processing line: ~ state.camera_scale ||= 1~ - Inside source: true *** True Line Result state.camera_scale ||= 1 ** Processing line: ~ state.tongue_length ||= 100~ - Inside source: true *** True Line Result state.tongue_length ||= 100 ** Processing line: ~ state.dev_action ||= :collision_mode~ - Inside source: true *** True Line Result state.dev_action ||= :collision_mode ** Processing line: ~ state.action ||= :aiming~ - Inside source: true *** True Line Result state.action ||= :aiming ** Processing line: ~ state.tongue_angle ||= 90~ - Inside source: true *** True Line Result state.tongue_angle ||= 90 ** Processing line: ~ state.tile_size = 64~ - Inside source: true *** True Line Result state.tile_size = 64 ** Processing line: ~ state.gravity = -0.1~ - Inside source: true *** True Line Result state.gravity = -0.1 ** Processing line: ~ state.air = -0.01~ - Inside source: true *** True Line Result state.air = -0.01 ** Processing line: ~ state.player_width = 60~ - Inside source: true *** True Line Result state.player_width = 60 ** Processing line: ~ state.player_height = 60~ - Inside source: true *** True Line Result state.player_height = 60 ** Processing line: ~ state.collision_tolerance = 0.0~ - Inside source: true *** True Line Result state.collision_tolerance = 0.0 ** Processing line: ~ state.previous_tile_size ||= state.tile_size~ - Inside source: true *** True Line Result state.previous_tile_size ||= state.tile_size ** Processing line: ~ state.x ||= 2400~ - Inside source: true *** True Line Result state.x ||= 2400 ** Processing line: ~ state.y ||= 200~ - Inside source: true *** True Line Result state.y ||= 200 ** Processing line: ~ state.dy ||= 0~ - Inside source: true *** True Line Result state.dy ||= 0 ** Processing line: ~ state.dx ||= 0~ - Inside source: true *** True Line Result state.dx ||= 0 ** Processing line: ~ attempt_load_world_from_file~ - Inside source: true *** True Line Result attempt_load_world_from_file ** Processing line: ~ state.world_lookup ||= { }~ - Inside source: true *** True Line Result state.world_lookup ||= { } ** Processing line: ~ state.world_collision_rects ||= []~ - Inside source: true *** True Line Result state.world_collision_rects ||= [] ** Processing line: ~ state.mode ||= :creating~ - Inside source: true *** True Line Result state.mode ||= :creating ** Processing line: ~ state.select_menu ||= [0, 720, 1280, 720]~ - Inside source: true *** True Line Result state.select_menu ||= [0, 720, 1280, 720] ** Processing line: ~ state.sprite_quantity ||= 20~ - Inside source: true *** True Line Result state.sprite_quantity ||= 20 ** Processing line: ~ state.sprite_coords ||= []~ - Inside source: true *** True Line Result state.sprite_coords ||= [] ** Processing line: ~ state.banner_coords ||= [640, 680 + 720]~ - Inside source: true *** True Line Result state.banner_coords ||= [640, 680 + 720] ** Processing line: ~ state.sprite_selected ||= 1~ - Inside source: true *** True Line Result state.sprite_selected ||= 1 ** Processing line: ~ state.map_saved_at ||= 0~ - Inside source: true *** True Line Result state.map_saved_at ||= 0 ** Processing line: ~ state.intro_tick_count ||= state.tick_count~ - Inside source: true *** True Line Result state.intro_tick_count ||= state.tick_count ** Processing line: ~ if state.sprite_coords == []~ - Inside source: true *** True Line Result if state.sprite_coords == [] ** Processing line: ~ count = 1~ - Inside source: true *** True Line Result count = 1 ** Processing line: ~ temp_x = 165~ - Inside source: true *** True Line Result temp_x = 165 ** Processing line: ~ temp_y = 500 + 720~ - Inside source: true *** True Line Result temp_y = 500 + 720 ** Processing line: ~ state.sprite_quantity.times do~ - Inside source: true *** True Line Result state.sprite_quantity.times do ** Processing line: ~ state.sprite_coords += [[temp_x, temp_y, count]]~ - Inside source: true *** True Line Result state.sprite_coords += [[temp_x, temp_y, count]] ** Processing line: ~ temp_x += 100~ - Inside source: true *** True Line Result temp_x += 100 ** Processing line: ~ count += 1~ - Inside source: true *** True Line Result count += 1 ** Processing line: ~ if temp_x > 1280 - (165 + 50)~ - Inside source: true *** True Line Result if temp_x > 1280 - (165 + 50) ** Processing line: ~ temp_x = 165~ - Inside source: true *** True Line Result temp_x = 165 ** Processing line: ~ temp_y -= 75~ - Inside source: true *** True Line Result temp_y -= 75 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def start_of_tongue x = nil, y = nil~ - Inside source: true *** True Line Result def start_of_tongue x = nil, y = nil ** Processing line: ~ x ||= state.x~ - Inside source: true *** True Line Result x ||= state.x ** Processing line: ~ y ||= state.y~ - Inside source: true *** True Line Result y ||= state.y ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ x + state.player_width.half,~ - Inside source: true *** True Line Result x + state.player_width.half, ** Processing line: ~ y + state.player_height.half~ - Inside source: true *** True Line Result y + state.player_height.half ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def stage_definition~ - Inside source: true *** True Line Result def stage_definition ** Processing line: ~ outputs.sprites << [vx(0), vy(0), vw(10000), vw(5875), 'sprites/level-map.png']~ - Inside source: true *** True Line Result outputs.sprites << [vx(0), vy(0), vw(10000), vw(5875), 'sprites/level-map.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ stage_definition~ - Inside source: true *** True Line Result stage_definition ** Processing line: ~ start_of_tongue_render = [vx(start_of_tongue.x), vy(start_of_tongue.y)]~ - Inside source: true *** True Line Result start_of_tongue_render = [vx(start_of_tongue.x), vy(start_of_tongue.y)] ** Processing line: ~ end_of_tongue_render = [vx(end_of_tongue.x), vy(end_of_tongue.y)]~ - Inside source: true *** True Line Result end_of_tongue_render = [vx(end_of_tongue.x), vy(end_of_tongue.y)] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.anchor_point~ - Inside source: true *** True Line Result if state.anchor_point ** Processing line: ~ anchor_point_render = [vx(state.anchor_point.x), vy(state.anchor_point.y)]~ - Inside source: true *** True Line Result anchor_point_render = [vx(state.anchor_point.x), vy(state.anchor_point.y)] ** Processing line: ~ outputs.sprites << { x: start_of_tongue_render.x,~ - Inside source: true *** True Line Result outputs.sprites << { x: start_of_tongue_render.x, ** Processing line: ~ y: start_of_tongue_render.y,~ - Inside source: true *** True Line Result y: start_of_tongue_render.y, ** Processing line: ~ w: vw(2),~ - Inside source: true *** True Line Result w: vw(2), ** Processing line: ~ h: args.geometry.distance(start_of_tongue_render, anchor_point_render),~ - Inside source: true *** True Line Result h: args.geometry.distance(start_of_tongue_render, anchor_point_render), ** Processing line: ~ path: 'sprites/square-pink.png',~ - Inside source: true *** True Line Result path: 'sprites/square-pink.png', ** Processing line: ~ angle_anchor_y: 0,~ - Inside source: true *** True Line Result angle_anchor_y: 0, ** Processing line: ~ angle: state.tongue_angle - 90 }~ - Inside source: true *** True Line Result angle: state.tongue_angle - 90 } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ outputs.sprites << { x: vx(start_of_tongue.x),~ - Inside source: true *** True Line Result outputs.sprites << { x: vx(start_of_tongue.x), ** Processing line: ~ y: vy(start_of_tongue.y),~ - Inside source: true *** True Line Result y: vy(start_of_tongue.y), ** Processing line: ~ w: vw(2),~ - Inside source: true *** True Line Result w: vw(2), ** Processing line: ~ h: vh(state.tongue_length),~ - Inside source: true *** True Line Result h: vh(state.tongue_length), ** Processing line: ~ path: 'sprites/square-pink.png',~ - Inside source: true *** True Line Result path: 'sprites/square-pink.png', ** Processing line: ~ angle_anchor_y: 0,~ - Inside source: true *** True Line Result angle_anchor_y: 0, ** Processing line: ~ angle: state.tongue_angle - 90 }~ - Inside source: true *** True Line Result angle: state.tongue_angle - 90 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.sprites << state.objects.map { |o| [vx(o.x), vy(o.y), vw(o.w), vh(o.h), o.path] }~ - Inside source: true *** True Line Result outputs.sprites << state.objects.map { |o| [vx(o.x), vy(o.y), vw(o.w), vh(o.h), o.path] } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.god_mode~ - Inside source: true *** True Line Result if state.god_mode ** Processing line: ~ # SHOW HIDE COLLISIONS~ - Inside source: true *** True Line Result # SHOW HIDE COLLISIONS ** Processing line: ~ outputs.sprites << state.world.map do |rect|~ - Inside source: true *** True Line Result outputs.sprites << state.world.map do |rect| ** Processing line: ~ x = vx(rect.x)~ - Inside source: true *** True Line Result x = vx(rect.x) ** Processing line: ~ y = vy(rect.y)~ - Inside source: true *** True Line Result y = vy(rect.y) ** Processing line: ~ if x > -80 && x < 1280 && y > -80 && y < 720~ - Inside source: true *** True Line Result if x > -80 && x < 1280 && y > -80 && y < 720 ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: x,~ - Inside source: true *** True Line Result x: x, ** Processing line: ~ y: y,~ - Inside source: true *** True Line Result y: y, ** Processing line: ~ w: vw(rect.w || state.tile_size),~ - Inside source: true *** True Line Result w: vw(rect.w || state.tile_size), ** Processing line: ~ h: vh(rect.h || state.tile_size),~ - Inside source: true *** True Line Result h: vh(rect.h || state.tile_size), ** Processing line: ~ path: 'sprites/square-gray.png',~ - Inside source: true *** True Line Result path: 'sprites/square-gray.png', ** Processing line: ~ a: 128~ - Inside source: true *** True Line Result a: 128 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_player~ - Inside source: true *** True Line Result render_player ** Processing line: ~ outputs.sprites << [vx(2315), vy(45), vw(569), vh(402), 'sprites/square-blue.png', 0, 40]~ - Inside source: true *** True Line Result outputs.sprites << [vx(2315), vy(45), vw(569), vh(402), 'sprites/square-blue.png', 0, 40] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Label in top left of the screen~ - Inside source: true *** True Line Result # Label in top left of the screen ** Processing line: ~ outputs.primitives << [20, 640, 180, 70, 255, 255, 255, 128].solid~ - Inside source: true *** True Line Result outputs.primitives << [20, 640, 180, 70, 255, 255, 255, 128].solid ** Processing line: ~ outputs.primitives << [30, 700, "Stuff: #{state.stuff_score} of #{$mugs.count}", 1].label~ - Inside source: true *** True Line Result outputs.primitives << [30, 700, "Stuff: #{state.stuff_score} of #{$mugs.count}", 1].label ** Processing line: ~ outputs.primitives << [30, 670, "Time: #{"%.2f" % state.stuff_time}", 1].label~ - Inside source: true *** True Line Result outputs.primitives << [30, 670, "Time: #{"%.2f" % state.stuff_time}", 1].label ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.god_mode~ - Inside source: true *** True Line Result if state.god_mode ** Processing line: ~ if state.map_saved_at > 0 && state.map_saved_at.elapsed_time < 120~ - Inside source: true *** True Line Result if state.map_saved_at > 0 && state.map_saved_at.elapsed_time < 120 ** Processing line: ~ outputs.primitives << [920, 670, 'Map has been exported!', 1, 0, 50, 100, 50].label~ - Inside source: true *** True Line Result outputs.primitives << [920, 670, 'Map has been exported!', 1, 0, 50, 100, 50].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates sprite following mouse to help indicate which sprite you have selected~ - Inside source: true *** True Line Result # Creates sprite following mouse to help indicate which sprite you have selected ** Processing line: ~ outputs.primitives << [inputs.mouse.position.x - 32 * state.camera_scale,~ - Inside source: true *** True Line Result outputs.primitives << [inputs.mouse.position.x - 32 * state.camera_scale, ** Processing line: ~ inputs.mouse.position.y - 32 * state.camera_scale,~ - Inside source: true *** True Line Result inputs.mouse.position.y - 32 * state.camera_scale, ** Processing line: ~ state.tile_size * state.camera_scale,~ - Inside source: true *** True Line Result state.tile_size * state.camera_scale, ** Processing line: ~ state.tile_size * state.camera_scale, 'sprites/square-indigo.png', 0, 100].sprite~ - Inside source: true *** True Line Result state.tile_size * state.camera_scale, 'sprites/square-indigo.png', 0, 100].sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_mini_map~ - Inside source: true *** True Line Result render_mini_map ** Processing line: ~ outputs.primitives << [0, 0, 1280, 720, 255, 255, 255, 255 * state.game_start_at.ease(60, :flip)].solid~ - Inside source: true *** True Line Result outputs.primitives << [0, 0, 1280, 720, 255, 255, 255, 255 * state.game_start_at.ease(60, :flip)].solid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_mini_map~ - Inside source: true *** True Line Result def render_mini_map ** Processing line: ~ x, y = 1170, 10~ - Inside source: true *** True Line Result x, y = 1170, 10 ** Processing line: ~ outputs.primitives << [x, y, 100, 58, 0, 0, 0, 200].solid~ - Inside source: true *** True Line Result outputs.primitives << [x, y, 100, 58, 0, 0, 0, 200].solid ** Processing line: ~ outputs.primitives << [x + args.state.x.fdiv(100) - 1, y + args.state.y.fdiv(100) - 1, 2, 2, 0, 255, 0].solid~ - Inside source: true *** True Line Result outputs.primitives << [x + args.state.x.fdiv(100) - 1, y + args.state.y.fdiv(100) - 1, 2, 2, 0, 255, 0].solid ** Processing line: ~ t_start = start_of_tongue~ - Inside source: true *** True Line Result t_start = start_of_tongue ** Processing line: ~ t_end = end_of_tongue~ - Inside source: true *** True Line Result t_end = end_of_tongue ** Processing line: ~ outputs.primitives << [~ - Inside source: true *** True Line Result outputs.primitives << [ ** Processing line: ~ x + t_start.x.fdiv(100), y + t_start.y.fdiv(100),~ - Inside source: true *** True Line Result x + t_start.x.fdiv(100), y + t_start.y.fdiv(100), ** Processing line: ~ x + t_end.x.fdiv(100), y + t_end.y.fdiv(100),~ - Inside source: true *** True Line Result x + t_end.x.fdiv(100), y + t_end.y.fdiv(100), ** Processing line: ~ 255, 255, 255~ - Inside source: true *** True Line Result 255, 255, 255 ** Processing line: ~ ].line~ - Inside source: true *** True Line Result ].line ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.objects.each do |o|~ - Inside source: true *** True Line Result state.objects.each do |o| ** Processing line: ~ outputs.primitives << [x + o.x.fdiv(100) - 1, y + o.y.fdiv(100) - 1, 2, 2, 200, 200, 0].solid~ - Inside source: true *** True Line Result outputs.primitives << [x + o.x.fdiv(100) - 1, y + o.y.fdiv(100) - 1, 2, 2, 200, 200, 0].solid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_camera percentage_override = nil~ - Inside source: true *** True Line Result def calc_camera percentage_override = nil ** Processing line: ~ percentage = percentage_override || (0.2 * state.camera_scale)~ - Inside source: true *** True Line Result percentage = percentage_override || (0.2 * state.camera_scale) ** Processing line: ~ target_scale = state.target_camera_scale~ - Inside source: true *** True Line Result target_scale = state.target_camera_scale ** Processing line: ~ distance_scale = target_scale - state.camera_scale~ - Inside source: true *** True Line Result distance_scale = target_scale - state.camera_scale ** Processing line: ~ state.camera_scale += distance_scale * percentage~ - Inside source: true *** True Line Result state.camera_scale += distance_scale * percentage ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ target_x = state.x * state.target_camera_scale~ - Inside source: true *** True Line Result target_x = state.x * state.target_camera_scale ** Processing line: ~ target_y = state.y * state.target_camera_scale~ - Inside source: true *** True Line Result target_y = state.y * state.target_camera_scale ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ distance_x = target_x - (state.camera_x + 640)~ - Inside source: true *** True Line Result distance_x = target_x - (state.camera_x + 640) ** Processing line: ~ distance_y = target_y - (state.camera_y + 360)~ - Inside source: true *** True Line Result distance_y = target_y - (state.camera_y + 360) ** Processing line: ~ state.camera_x += distance_x * percentage if distance_x.abs > 1~ - Inside source: true *** True Line Result state.camera_x += distance_x * percentage if distance_x.abs > 1 ** Processing line: ~ state.camera_y += distance_y * percentage if distance_y.abs > 1~ - Inside source: true *** True Line Result state.camera_y += distance_y * percentage if distance_y.abs > 1 ** Processing line: ~ state.camera_x = 0 if state.camera_x < 0~ - Inside source: true *** True Line Result state.camera_x = 0 if state.camera_x < 0 ** Processing line: ~ state.camera_y = 0 if state.camera_y < 0~ - Inside source: true *** True Line Result state.camera_y = 0 if state.camera_y < 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def vx x~ - Inside source: true *** True Line Result def vx x ** Processing line: ~ (x * state.camera_scale) - state.camera_x~ - Inside source: true *** True Line Result (x * state.camera_scale) - state.camera_x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def vy y~ - Inside source: true *** True Line Result def vy y ** Processing line: ~ (y * state.camera_scale) - state.camera_y~ - Inside source: true *** True Line Result (y * state.camera_scale) - state.camera_y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def vw w~ - Inside source: true *** True Line Result def vw w ** Processing line: ~ w * state.camera_scale~ - Inside source: true *** True Line Result w * state.camera_scale ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def vh h~ - Inside source: true *** True Line Result def vh h ** Processing line: ~ h * state.camera_scale~ - Inside source: true *** True Line Result h * state.camera_scale ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ calc_camera~ - Inside source: true *** True Line Result calc_camera ** Processing line: ~ calc_world_lookup~ - Inside source: true *** True Line Result calc_world_lookup ** Processing line: ~ calc_player~ - Inside source: true *** True Line Result calc_player ** Processing line: ~ calc_on_floor~ - Inside source: true *** True Line Result calc_on_floor ** Processing line: ~ calc_score~ - Inside source: true *** True Line Result calc_score ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_camera_scale v = nil~ - Inside source: true *** True Line Result def set_camera_scale v = nil ** Processing line: ~ return if v < 0.1~ - Inside source: true *** True Line Result return if v < 0.1 ** Processing line: ~ state.target_camera_scale = v~ - Inside source: true *** True Line Result state.target_camera_scale = v ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_inputs_god_mode~ - Inside source: true *** True Line Result def process_inputs_god_mode ** Processing line: ~ return unless state.god_mode~ - Inside source: true *** True Line Result return unless state.god_mode ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.key_down.equal_sign || (inputs.keyboard.equal_sign && state.tick_count.mod_zero?(10))~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.equal_sign || (inputs.keyboard.equal_sign && state.tick_count.mod_zero?(10)) ** Processing line: ~ set_camera_scale state.camera_scale + 0.1~ - Inside source: true *** True Line Result set_camera_scale state.camera_scale + 0.1 ** Processing line: ~ elsif inputs.keyboard.key_down.hyphen || (inputs.keyboard.hyphen && state.tick_count.mod_zero?(10))~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_down.hyphen || (inputs.keyboard.hyphen && state.tick_count.mod_zero?(10)) ** Processing line: ~ set_camera_scale state.camera_scale - 0.1~ - Inside source: true *** True Line Result set_camera_scale state.camera_scale - 0.1 ** Processing line: ~ elsif inputs.keyboard.eight || inputs.keyboard.zero~ - Inside source: true *** True Line Result elsif inputs.keyboard.eight || inputs.keyboard.zero ** Processing line: ~ set_camera_scale 1~ - Inside source: true *** True Line Result set_camera_scale 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.mouse.click~ - Inside source: true *** True Line Result if inputs.mouse.click ** Processing line: ~ state.id_seed += 1~ - Inside source: true *** True Line Result state.id_seed += 1 ** Processing line: ~ id = state.id_seed~ - Inside source: true *** True Line Result id = state.id_seed ** Processing line: ~ x = state.camera_x + (inputs.mouse.click.x.fdiv(state.camera_scale) - 32)~ - Inside source: true *** True Line Result x = state.camera_x + (inputs.mouse.click.x.fdiv(state.camera_scale) - 32) ** Processing line: ~ y = state.camera_y + (inputs.mouse.click.y.fdiv(state.camera_scale) - 32)~ - Inside source: true *** True Line Result y = state.camera_y + (inputs.mouse.click.y.fdiv(state.camera_scale) - 32) ** Processing line: ~ x = ((x + 2).idiv 4) * 4~ - Inside source: true *** True Line Result x = ((x + 2).idiv 4) * 4 ** Processing line: ~ y = ((y + 2).idiv 4) * 4~ - Inside source: true *** True Line Result y = ((y + 2).idiv 4) * 4 ** Processing line: ~ w = 64~ - Inside source: true *** True Line Result w = 64 ** Processing line: ~ h = 64~ - Inside source: true *** True Line Result h = 64 ** Processing line: ~ candidate_rect = { id: id, x: x, y: y, w: w, h: h }~ - Inside source: true *** True Line Result candidate_rect = { id: id, x: x, y: y, w: w, h: h } ** Processing line: ~ scaled_candidate_rect = { x: x + 30, y: y + 30, w: w - 60, h: h - 60 }~ - Inside source: true *** True Line Result scaled_candidate_rect = { x: x + 30, y: y + 30, w: w - 60, h: h - 60 } ** Processing line: ~ to_remove = state.world.find { |r| r.intersect_rect? scaled_candidate_rect }~ - Inside source: true *** True Line Result to_remove = state.world.find { |r| r.intersect_rect? scaled_candidate_rect } ** Processing line: ~ if to_remove && args.inputs.keyboard.x~ - Inside source: true *** True Line Result if to_remove && args.inputs.keyboard.x ** Processing line: ~ state.world.reject! { |r| r.id == to_remove.id }~ - Inside source: true *** True Line Result state.world.reject! { |r| r.id == to_remove.id } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.world << candidate_rect~ - Inside source: true *** True Line Result state.world << candidate_rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ export_map~ - Inside source: true *** True Line Result export_map ** Processing line: ~ state.world_lookup = {}~ - Inside source: true *** True Line Result state.world_lookup = {} ** Processing line: ~ state.world_collision_rects = nil~ - Inside source: true *** True Line Result state.world_collision_rects = nil ** Processing line: ~ calc_world_lookup~ - Inside source: true *** True Line Result calc_world_lookup ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if input_up?~ - Inside source: true *** True Line Result if input_up? ** Processing line: ~ state.y += 10~ - Inside source: true *** True Line Result state.y += 10 ** Processing line: ~ state.dy = 0~ - Inside source: true *** True Line Result state.dy = 0 ** Processing line: ~ elsif input_down?~ - Inside source: true *** True Line Result elsif input_down? ** Processing line: ~ state.y -= 10~ - Inside source: true *** True Line Result state.y -= 10 ** Processing line: ~ state.dy = 0~ - Inside source: true *** True Line Result state.dy = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if input_left?~ - Inside source: true *** True Line Result if input_left? ** Processing line: ~ state.x -= 10~ - Inside source: true *** True Line Result state.x -= 10 ** Processing line: ~ state.dx = 0~ - Inside source: true *** True Line Result state.dx = 0 ** Processing line: ~ elsif input_right?~ - Inside source: true *** True Line Result elsif input_right? ** Processing line: ~ state.x += 10~ - Inside source: true *** True Line Result state.x += 10 ** Processing line: ~ state.dx = 0~ - Inside source: true *** True Line Result state.dx = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_inputs~ - Inside source: true *** True Line Result def process_inputs ** Processing line: ~ if state.scene == :game~ - Inside source: true *** True Line Result if state.scene == :game ** Processing line: ~ process_inputs_player_movement~ - Inside source: true *** True Line Result process_inputs_player_movement ** Processing line: ~ process_inputs_god_mode~ - Inside source: true *** True Line Result process_inputs_god_mode ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_up?~ - Inside source: true *** True Line Result def input_up? ** Processing line: ~ inputs.keyboard.w || inputs.keyboard.up || inputs.keyboard.k~ - Inside source: true *** True Line Result inputs.keyboard.w || inputs.keyboard.up || inputs.keyboard.k ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_up_released?~ - Inside source: true *** True Line Result def input_up_released? ** Processing line: ~ inputs.keyboard.key_up.w ||~ - Inside source: true *** True Line Result inputs.keyboard.key_up.w || ** Processing line: ~ inputs.keyboard.key_up.up ||~ - Inside source: true *** True Line Result inputs.keyboard.key_up.up || ** Processing line: ~ inputs.keyboard.key_up.k~ - Inside source: true *** True Line Result inputs.keyboard.key_up.k ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_down?~ - Inside source: true *** True Line Result def input_down? ** Processing line: ~ inputs.keyboard.s || inputs.keyboard.down || inputs.keyboard.j~ - Inside source: true *** True Line Result inputs.keyboard.s || inputs.keyboard.down || inputs.keyboard.j ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_down_released?~ - Inside source: true *** True Line Result def input_down_released? ** Processing line: ~ inputs.keyboard.key_up.s ||~ - Inside source: true *** True Line Result inputs.keyboard.key_up.s || ** Processing line: ~ inputs.keyboard.key_up.down ||~ - Inside source: true *** True Line Result inputs.keyboard.key_up.down || ** Processing line: ~ inputs.keyboard.key_up.j~ - Inside source: true *** True Line Result inputs.keyboard.key_up.j ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_left?~ - Inside source: true *** True Line Result def input_left? ** Processing line: ~ inputs.keyboard.a || inputs.keyboard.left || inputs.keyboard.h~ - Inside source: true *** True Line Result inputs.keyboard.a || inputs.keyboard.left || inputs.keyboard.h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_right?~ - Inside source: true *** True Line Result def input_right? ** Processing line: ~ inputs.keyboard.d || inputs.keyboard.right || inputs.keyboard.l~ - Inside source: true *** True Line Result inputs.keyboard.d || inputs.keyboard.right || inputs.keyboard.l ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_object path, w, h~ - Inside source: true *** True Line Result def set_object path, w, h ** Processing line: ~ state.object = path~ - Inside source: true *** True Line Result state.object = path ** Processing line: ~ state.object_w = w~ - Inside source: true *** True Line Result state.object_w = w ** Processing line: ~ state.object_h = h~ - Inside source: true *** True Line Result state.object_h = h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def collision_mode~ - Inside source: true *** True Line Result def collision_mode ** Processing line: ~ state.dev_action = :collision_mode~ - Inside source: true *** True Line Result state.dev_action = :collision_mode ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_inputs_player_movement~ - Inside source: true *** True Line Result def process_inputs_player_movement ** Processing line: ~ if inputs.keyboard.key_down.g~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.g ** Processing line: ~ state.god_mode = !state.god_mode~ - Inside source: true *** True Line Result state.god_mode = !state.god_mode ** Processing line: ~ puts state.god_mode~ - Inside source: true *** True Line Result puts state.god_mode ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.key_down.u && state.dev_action == :collision_mode~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.u && state.dev_action == :collision_mode ** Processing line: ~ state.world = state.world[0..-2]~ - Inside source: true *** True Line Result state.world = state.world[0..-2] ** Processing line: ~ state.world_lookup = {}~ - Inside source: true *** True Line Result state.world_lookup = {} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.key_down.space && !state.anchor_point~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.space && !state.anchor_point ** Processing line: ~ state.tongue_length = 0~ - Inside source: true *** True Line Result state.tongue_length = 0 ** Processing line: ~ state.action = :shooting~ - Inside source: true *** True Line Result state.action = :shooting ** Processing line: ~ outputs.sounds << 'sounds/shooting.wav'~ - Inside source: true *** True Line Result outputs.sounds << 'sounds/shooting.wav' ** Processing line: ~ elsif inputs.keyboard.key_down.space~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_down.space ** Processing line: ~ state.action = :aiming~ - Inside source: true *** True Line Result state.action = :aiming ** Processing line: ~ state.anchor_point = nil~ - Inside source: true *** True Line Result state.anchor_point = nil ** Processing line: ~ state.tongue_length = 100~ - Inside source: true *** True Line Result state.tongue_length = 100 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.anchor_point~ - Inside source: true *** True Line Result if state.anchor_point ** Processing line: ~ if input_up?~ - Inside source: true *** True Line Result if input_up? ** Processing line: ~ if state.tongue_length >= 105~ - Inside source: true *** True Line Result if state.tongue_length >= 105 ** Processing line: ~ state.tongue_length -= 5~ - Inside source: true *** True Line Result state.tongue_length -= 5 ** Processing line: ~ state.dy += 0.8~ - Inside source: true *** True Line Result state.dy += 0.8 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif input_down?~ - Inside source: true *** True Line Result elsif input_down? ** Processing line: ~ state.tongue_length += 5~ - Inside source: true *** True Line Result state.tongue_length += 5 ** Processing line: ~ state.dy -= 0.8~ - Inside source: true *** True Line Result state.dy -= 0.8 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if input_left? && state.dx > 1~ - Inside source: true *** True Line Result if input_left? && state.dx > 1 ** Processing line: ~ state.dx *= 0.98~ - Inside source: true *** True Line Result state.dx *= 0.98 ** Processing line: ~ elsif input_left? && state.dx < -1~ - Inside source: true *** True Line Result elsif input_left? && state.dx < -1 ** Processing line: ~ state.dx *= 1.03~ - Inside source: true *** True Line Result state.dx *= 1.03 ** Processing line: ~ elsif input_left? && !state.on_floor~ - Inside source: true *** True Line Result elsif input_left? && !state.on_floor ** Processing line: ~ state.dx -= 3~ - Inside source: true *** True Line Result state.dx -= 3 ** Processing line: ~ elsif input_right? && state.dx > 1~ - Inside source: true *** True Line Result elsif input_right? && state.dx > 1 ** Processing line: ~ state.dx *= 1.03~ - Inside source: true *** True Line Result state.dx *= 1.03 ** Processing line: ~ elsif input_right? && state.dx < -1~ - Inside source: true *** True Line Result elsif input_right? && state.dx < -1 ** Processing line: ~ state.dx *= 0.98~ - Inside source: true *** True Line Result state.dx *= 0.98 ** Processing line: ~ elsif input_right? && !state.on_floor~ - Inside source: true *** True Line Result elsif input_right? && !state.on_floor ** Processing line: ~ state.dx += 3~ - Inside source: true *** True Line Result state.dx += 3 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ if input_left?~ - Inside source: true *** True Line Result if input_left? ** Processing line: ~ state.tongue_angle += 1.5~ - Inside source: true *** True Line Result state.tongue_angle += 1.5 ** Processing line: ~ state.tongue_angle = state.tongue_angle~ - Inside source: true *** True Line Result state.tongue_angle = state.tongue_angle ** Processing line: ~ elsif input_right?~ - Inside source: true *** True Line Result elsif input_right? ** Processing line: ~ state.tongue_angle -= 1.5~ - Inside source: true *** True Line Result state.tongue_angle -= 1.5 ** Processing line: ~ state.tongue_angle = state.tongue_angle~ - Inside source: true *** True Line Result state.tongue_angle = state.tongue_angle ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def attempt_load_world_from_file~ - Inside source: true *** True Line Result def attempt_load_world_from_file ** Processing line: ~ return if state.world~ - Inside source: true *** True Line Result return if state.world ** Processing line: ~ # exported_world = gtk.read_file(MAP_FILE_PATH)~ - Inside source: true *** True Line Result # exported_world = gtk.read_file(MAP_FILE_PATH) ** Processing line: ~ state.world = []~ - Inside source: true *** True Line Result state.world = [] ** Processing line: ~ state.objects = []~ - Inside source: true *** True Line Result state.objects = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if $collisions~ - Inside source: true *** True Line Result if $collisions ** Processing line: ~ state.id_seed ||= 0~ - Inside source: true *** True Line Result state.id_seed ||= 0 ** Processing line: ~ $collisions.each do |x, y, w, h|~ - Inside source: true *** True Line Result $collisions.each do |x, y, w, h| ** Processing line: ~ state.id_seed += 1~ - Inside source: true *** True Line Result state.id_seed += 1 ** Processing line: ~ state.world << { id: state.id_seed, x: x, y: y, w: w, h: h }~ - Inside source: true *** True Line Result state.world << { id: state.id_seed, x: x, y: y, w: w, h: h } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if $mugs~ - Inside source: true *** True Line Result if $mugs ** Processing line: ~ $mugs.map do |x, y, w, h, path|~ - Inside source: true *** True Line Result $mugs.map do |x, y, w, h, path| ** Processing line: ~ state.objects << [x, y, w, h, path]~ - Inside source: true *** True Line Result state.objects << [x, y, w, h, path] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_world_lookup~ - Inside source: true *** True Line Result def calc_world_lookup ** Processing line: ~ if state.tile_size != state.previous_tile_size~ - Inside source: true *** True Line Result if state.tile_size != state.previous_tile_size ** Processing line: ~ state.previous_tile_size = state.tile_size~ - Inside source: true *** True Line Result state.previous_tile_size = state.tile_size ** Processing line: ~ state.world_lookup = {}~ - Inside source: true *** True Line Result state.world_lookup = {} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return if state.world_lookup.keys.length > 0~ - Inside source: true *** True Line Result return if state.world_lookup.keys.length > 0 ** Processing line: ~ return unless state.world.length > 0~ - Inside source: true *** True Line Result return unless state.world.length > 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Searches through the world and finds the cordinates that exist~ - Inside source: true *** True Line Result # Searches through the world and finds the cordinates that exist ** Processing line: ~ state.world_lookup = {}~ - Inside source: true *** True Line Result state.world_lookup = {} ** Processing line: ~ state.world.each do |rect|~ - Inside source: true *** True Line Result state.world.each do |rect| ** Processing line: ~ state.world_lookup[rect.id] = rect~ - Inside source: true *** True Line Result state.world_lookup[rect.id] = rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Assigns collision rects for every sprite drawn~ - Inside source: true *** True Line Result # Assigns collision rects for every sprite drawn ** Processing line: ~ state.world_collision_rects =~ - Inside source: true *** True Line Result state.world_collision_rects = ** Processing line: ~ state.world_lookup~ - Inside source: true *** True Line Result state.world_lookup ** Processing line: ~ .keys~ - Inside source: true *** True Line Result .keys ** Processing line: ~ .map do |key|~ - Inside source: true *** True Line Result .map do |key| ** Processing line: ~ rect = state.world_lookup[key]~ - Inside source: true *** True Line Result rect = state.world_lookup[key] ** Processing line: ~ s = state.tile_size~ - Inside source: true *** True Line Result s = state.tile_size ** Processing line: ~ rect.w ||= s~ - Inside source: true *** True Line Result rect.w ||= s ** Processing line: ~ rect.h ||= s~ - Inside source: true *** True Line Result rect.h ||= s ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ args: rect,~ - Inside source: true *** True Line Result args: rect, ** Processing line: ~ left_right: { x: rect.x, y: rect.y + 4, w: rect.w, h: rect.h - 6 },~ - Inside source: true *** True Line Result left_right: { x: rect.x, y: rect.y + 4, w: rect.w, h: rect.h - 6 }, ** Processing line: ~ top: { x: rect.x + 4, y: rect.y + 6, w: rect.w - 8, h: rect.h - 6 },~ - Inside source: true *** True Line Result top: { x: rect.x + 4, y: rect.y + 6, w: rect.w - 8, h: rect.h - 6 }, ** Processing line: ~ bottom: { x: rect.x + 1, y: rect.y - 1, w: rect.w - 2, h: rect.h - 8 },~ - Inside source: true *** True Line Result bottom: { x: rect.x + 1, y: rect.y - 1, w: rect.w - 2, h: rect.h - 8 }, ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_pendulum~ - Inside source: true *** True Line Result def calc_pendulum ** Processing line: ~ return if !state.anchor_point~ - Inside source: true *** True Line Result return if !state.anchor_point ** Processing line: ~ target_x = state.anchor_point.x - start_of_tongue.x~ - Inside source: true *** True Line Result target_x = state.anchor_point.x - start_of_tongue.x ** Processing line: ~ target_y = state.anchor_point.y -~ - Inside source: true *** True Line Result target_y = state.anchor_point.y - ** Processing line: ~ state.tongue_length - 5 - 20 - state.player_height~ - Inside source: true *** True Line Result state.tongue_length - 5 - 20 - state.player_height ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ diff_y = state.y - target_y~ - Inside source: true *** True Line Result diff_y = state.y - target_y ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if target_x > 0~ - Inside source: true *** True Line Result if target_x > 0 ** Processing line: ~ state.dx += 0.6~ - Inside source: true *** True Line Result state.dx += 0.6 ** Processing line: ~ elsif target_x < 0~ - Inside source: true *** True Line Result elsif target_x < 0 ** Processing line: ~ state.dx -= 0.6~ - Inside source: true *** True Line Result state.dx -= 0.6 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if diff_y > 0~ - Inside source: true *** True Line Result if diff_y > 0 ** Processing line: ~ state.dy -= 0.1~ - Inside source: true *** True Line Result state.dy -= 0.1 ** Processing line: ~ elsif diff_y < 0~ - Inside source: true *** True Line Result elsif diff_y < 0 ** Processing line: ~ state.dy += 0.1~ - Inside source: true *** True Line Result state.dy += 0.1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.dx *= 0.99~ - Inside source: true *** True Line Result state.dx *= 0.99 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.dy.abs < 2~ - Inside source: true *** True Line Result if state.dy.abs < 2 ** Processing line: ~ state.dy *= 0.8~ - Inside source: true *** True Line Result state.dy *= 0.8 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.dy *= 0.90~ - Inside source: true *** True Line Result state.dy *= 0.90 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.tongue_length && state.y~ - Inside source: true *** True Line Result if state.tongue_length && state.y ** Processing line: ~ state.dy += state.tongue_angle.vector_y state.tongue_length.fdiv(1000)~ - Inside source: true *** True Line Result state.dy += state.tongue_angle.vector_y state.tongue_length.fdiv(1000) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_tongue_angle~ - Inside source: true *** True Line Result def calc_tongue_angle ** Processing line: ~ return unless state.anchor_point~ - Inside source: true *** True Line Result return unless state.anchor_point ** Processing line: ~ state.tongue_angle = args.geometry.angle_from state.anchor_point, start_of_tongue~ - Inside source: true *** True Line Result state.tongue_angle = args.geometry.angle_from state.anchor_point, start_of_tongue ** Processing line: ~ state.tongue_length = args.geometry.distance(start_of_tongue, state.anchor_point)~ - Inside source: true *** True Line Result state.tongue_length = args.geometry.distance(start_of_tongue, state.anchor_point) ** Processing line: ~ state.tongue_length = state.tongue_length.greater(100)~ - Inside source: true *** True Line Result state.tongue_length = state.tongue_length.greater(100) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_from_end_of_tongue~ - Inside source: true *** True Line Result def player_from_end_of_tongue ** Processing line: ~ p = state.tongue_angle.vector(state.tongue_length)~ - Inside source: true *** True Line Result p = state.tongue_angle.vector(state.tongue_length) ** Processing line: ~ derived_start = [state.anchor_point.x - p.x, state.anchor_point.y - p.y]~ - Inside source: true *** True Line Result derived_start = [state.anchor_point.x - p.x, state.anchor_point.y - p.y] ** Processing line: ~ derived_start.x -= state.player_width.half~ - Inside source: true *** True Line Result derived_start.x -= state.player_width.half ** Processing line: ~ derived_start.y -= state.player_height.half~ - Inside source: true *** True Line Result derived_start.y -= state.player_height.half ** Processing line: ~ derived_start~ - Inside source: true *** True Line Result derived_start ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def end_of_tongue~ - Inside source: true *** True Line Result def end_of_tongue ** Processing line: ~ p = state.tongue_angle.vector(state.tongue_length)~ - Inside source: true *** True Line Result p = state.tongue_angle.vector(state.tongue_length) ** Processing line: ~ { x: start_of_tongue.x + p.x, y: start_of_tongue.y + p.y }~ - Inside source: true *** True Line Result { x: start_of_tongue.x + p.x, y: start_of_tongue.y + p.y } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_shooting~ - Inside source: true *** True Line Result def calc_shooting ** Processing line: ~ calc_shooting_increment~ - Inside source: true *** True Line Result calc_shooting_increment ** Processing line: ~ calc_shooting_increment~ - Inside source: true *** True Line Result calc_shooting_increment ** Processing line: ~ calc_shooting_increment~ - Inside source: true *** True Line Result calc_shooting_increment ** Processing line: ~ calc_shooting_increment~ - Inside source: true *** True Line Result calc_shooting_increment ** Processing line: ~ calc_shooting_increment~ - Inside source: true *** True Line Result calc_shooting_increment ** Processing line: ~ calc_shooting_increment~ - Inside source: true *** True Line Result calc_shooting_increment ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_shooting_increment~ - Inside source: true *** True Line Result def calc_shooting_increment ** Processing line: ~ return unless state.action == :shooting~ - Inside source: true *** True Line Result return unless state.action == :shooting ** Processing line: ~ state.tongue_length += 5~ - Inside source: true *** True Line Result state.tongue_length += 5 ** Processing line: ~ potential_anchor = end_of_tongue~ - Inside source: true *** True Line Result potential_anchor = end_of_tongue ** Processing line: ~ if potential_anchor.x <= 0~ - Inside source: true *** True Line Result if potential_anchor.x <= 0 ** Processing line: ~ state.anchor_point = potential_anchor~ - Inside source: true *** True Line Result state.anchor_point = potential_anchor ** Processing line: ~ state.action = :anchored~ - Inside source: true *** True Line Result state.action = :anchored ** Processing line: ~ outputs.sounds << 'sounds/attached.wav'~ - Inside source: true *** True Line Result outputs.sounds << 'sounds/attached.wav' ** Processing line: ~ elsif potential_anchor.x >= 10000~ - Inside source: true *** True Line Result elsif potential_anchor.x >= 10000 ** Processing line: ~ state.anchor_point = potential_anchor~ - Inside source: true *** True Line Result state.anchor_point = potential_anchor ** Processing line: ~ state.action = :anchored~ - Inside source: true *** True Line Result state.action = :anchored ** Processing line: ~ outputs.sounds << 'sounds/attached.wav'~ - Inside source: true *** True Line Result outputs.sounds << 'sounds/attached.wav' ** Processing line: ~ elsif potential_anchor.y <= 0~ - Inside source: true *** True Line Result elsif potential_anchor.y <= 0 ** Processing line: ~ state.anchor_point = potential_anchor~ - Inside source: true *** True Line Result state.anchor_point = potential_anchor ** Processing line: ~ state.action = :anchored~ - Inside source: true *** True Line Result state.action = :anchored ** Processing line: ~ outputs.sounds << 'sounds/attached.wav'~ - Inside source: true *** True Line Result outputs.sounds << 'sounds/attached.wav' ** Processing line: ~ elsif potential_anchor.y >= 5875~ - Inside source: true *** True Line Result elsif potential_anchor.y >= 5875 ** Processing line: ~ state.anchor_point = potential_anchor~ - Inside source: true *** True Line Result state.anchor_point = potential_anchor ** Processing line: ~ state.action = :anchored~ - Inside source: true *** True Line Result state.action = :anchored ** Processing line: ~ outputs.sounds << 'sounds/attached.wav'~ - Inside source: true *** True Line Result outputs.sounds << 'sounds/attached.wav' ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ anchor_rect = { x: potential_anchor.x - 5, y: potential_anchor.y - 5, w: 10, h: 10 }~ - Inside source: true *** True Line Result anchor_rect = { x: potential_anchor.x - 5, y: potential_anchor.y - 5, w: 10, h: 10 } ** Processing line: ~ collision = state.world_collision_rects.find_all do |v|~ - Inside source: true *** True Line Result collision = state.world_collision_rects.find_all do |v| ** Processing line: ~ v[:args].intersect_rect?(anchor_rect)~ - Inside source: true *** True Line Result v[:args].intersect_rect?(anchor_rect) ** Processing line: ~ end.first~ - Inside source: true *** True Line Result end.first ** Processing line: ~ if collision~ - Inside source: true *** True Line Result if collision ** Processing line: ~ state.anchor_point = potential_anchor~ - Inside source: true *** True Line Result state.anchor_point = potential_anchor ** Processing line: ~ state.action = :anchored~ - Inside source: true *** True Line Result state.action = :anchored ** Processing line: ~ outputs.sounds << 'sounds/attached.wav'~ - Inside source: true *** True Line Result outputs.sounds << 'sounds/attached.wav' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_player~ - Inside source: true *** True Line Result def calc_player ** Processing line: ~ calc_shooting~ - Inside source: true *** True Line Result calc_shooting ** Processing line: ~ if !state.god_mode~ - Inside source: true *** True Line Result if !state.god_mode ** Processing line: ~ state.dy += state.gravity # Since acceleration is the change in velocity, the change in y (dy) increases every frame~ - Inside source: true *** True Line Result state.dy += state.gravity # Since acceleration is the change in velocity, the change in y (dy) increases every frame ** Processing line: ~ state.dx += state.dx * state.air~ - Inside source: true *** True Line Result state.dx += state.dx * state.air ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ calc_pendulum~ - Inside source: true *** True Line Result calc_pendulum ** Processing line: ~ calc_box_collision~ - Inside source: true *** True Line Result calc_box_collision ** Processing line: ~ calc_edge_collision~ - Inside source: true *** True Line Result calc_edge_collision ** Processing line: ~ if !state.god_mode~ - Inside source: true *** True Line Result if !state.god_mode ** Processing line: ~ state.y += state.dy~ - Inside source: true *** True Line Result state.y += state.dy ** Processing line: ~ state.x += state.dx~ - Inside source: true *** True Line Result state.x += state.dx ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ calc_tongue_angle~ - Inside source: true *** True Line Result calc_tongue_angle ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_box_collision~ - Inside source: true *** True Line Result def calc_box_collision ** Processing line: ~ return unless state.world_lookup.keys.length > 0~ - Inside source: true *** True Line Result return unless state.world_lookup.keys.length > 0 ** Processing line: ~ collision_floor~ - Inside source: true *** True Line Result collision_floor ** Processing line: ~ collision_left~ - Inside source: true *** True Line Result collision_left ** Processing line: ~ collision_right~ - Inside source: true *** True Line Result collision_right ** Processing line: ~ collision_ceiling~ - Inside source: true *** True Line Result collision_ceiling ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_edge_collision~ - Inside source: true *** True Line Result def calc_edge_collision ** Processing line: ~ # Ensures that player doesn't fall below the map~ - Inside source: true *** True Line Result # Ensures that player doesn't fall below the map ** Processing line: ~ if next_y < 0 && state.dy < 0~ - Inside source: true *** True Line Result if next_y < 0 && state.dy < 0 ** Processing line: ~ state.y = 0~ - Inside source: true *** True Line Result state.y = 0 ** Processing line: ~ state.dy = state.dy.abs * 0.8~ - Inside source: true *** True Line Result state.dy = state.dy.abs * 0.8 ** Processing line: ~ state.collision_on_y = true~ - Inside source: true *** True Line Result state.collision_on_y = true ** Processing line: ~ # Ensures player doesn't go insanely high~ - Inside source: true *** True Line Result # Ensures player doesn't go insanely high ** Processing line: ~ elsif next_y > 5875 - state.tile_size && state.dy > 0~ - Inside source: true *** True Line Result elsif next_y > 5875 - state.tile_size && state.dy > 0 ** Processing line: ~ state.y = 5875 - state.tile_size~ - Inside source: true *** True Line Result state.y = 5875 - state.tile_size ** Processing line: ~ state.dy = state.dy.abs * 0.8 * -1~ - Inside source: true *** True Line Result state.dy = state.dy.abs * 0.8 * -1 ** Processing line: ~ state.collision_on_y = true~ - Inside source: true *** True Line Result state.collision_on_y = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Ensures that player remains in the horizontal range its supposed to~ - Inside source: true *** True Line Result # Ensures that player remains in the horizontal range its supposed to ** Processing line: ~ if state.x >= 10000 - state.tile_size && state.dx > 0~ - Inside source: true *** True Line Result if state.x >= 10000 - state.tile_size && state.dx > 0 ** Processing line: ~ state.x = 10000 - state.tile_size~ - Inside source: true *** True Line Result state.x = 10000 - state.tile_size ** Processing line: ~ state.dx = state.dx.abs * 0.8 * -1~ - Inside source: true *** True Line Result state.dx = state.dx.abs * 0.8 * -1 ** Processing line: ~ state.collision_on_x = true~ - Inside source: true *** True Line Result state.collision_on_x = true ** Processing line: ~ elsif state.x <= 0 && state.dx < 0~ - Inside source: true *** True Line Result elsif state.x <= 0 && state.dx < 0 ** Processing line: ~ state.x = 0~ - Inside source: true *** True Line Result state.x = 0 ** Processing line: ~ state.dx = state.dx.abs * 0.8~ - Inside source: true *** True Line Result state.dx = state.dx.abs * 0.8 ** Processing line: ~ state.collision_on_x = true~ - Inside source: true *** True Line Result state.collision_on_x = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def next_y~ - Inside source: true *** True Line Result def next_y ** Processing line: ~ state.y + state.dy~ - Inside source: true *** True Line Result state.y + state.dy ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def next_x~ - Inside source: true *** True Line Result def next_x ** Processing line: ~ if state.dx < 0~ - Inside source: true *** True Line Result if state.dx < 0 ** Processing line: ~ return (state.x + state.dx) - (state.tile_size - state.player_width)~ - Inside source: true *** True Line Result return (state.x + state.dx) - (state.tile_size - state.player_width) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return (state.x + state.dx) + (state.tile_size - state.player_width)~ - Inside source: true *** True Line Result return (state.x + state.dx) + (state.tile_size - state.player_width) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def collision_floor~ - Inside source: true *** True Line Result def collision_floor ** Processing line: ~ return unless state.dy <= 0~ - Inside source: true *** True Line Result return unless state.dy <= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ player_rect = [state.x, next_y, state.tile_size, state.tile_size]~ - Inside source: true *** True Line Result player_rect = [state.x, next_y, state.tile_size, state.tile_size] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Runs through all the sprites on the field and determines if the player hits the bottom of sprite (hence "-0.1" above)~ - Inside source: true *** True Line Result # Runs through all the sprites on the field and determines if the player hits the bottom of sprite (hence "-0.1" above) ** Processing line: ~ floor_collisions = state.world_collision_rects~ - Inside source: true *** True Line Result floor_collisions = state.world_collision_rects ** Processing line: ~ .find_all { |r| r[:top].intersect_rect?(player_rect, state.collision_tolerance) }~ - Inside source: true *** True Line Result .find_all { |r| r[:top].intersect_rect?(player_rect, state.collision_tolerance) } ** Processing line: ~ .first~ - Inside source: true *** True Line Result .first ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless floor_collisions~ - Inside source: true *** True Line Result return unless floor_collisions ** Processing line: ~ state.y = floor_collisions[:top].top~ - Inside source: true *** True Line Result state.y = floor_collisions[:top].top ** Processing line: ~ state.dy = state.dy.abs * 0.8~ - Inside source: true *** True Line Result state.dy = state.dy.abs * 0.8 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def collision_left~ - Inside source: true *** True Line Result def collision_left ** Processing line: ~ return unless state.dx < 0~ - Inside source: true *** True Line Result return unless state.dx < 0 ** Processing line: ~ player_rect = [next_x, state.y, state.tile_size, state.tile_size]~ - Inside source: true *** True Line Result player_rect = [next_x, state.y, state.tile_size, state.tile_size] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Runs through all the sprites on the field and determines if the player hits the left side of sprite (hence "-0.1" above)~ - Inside source: true *** True Line Result # Runs through all the sprites on the field and determines if the player hits the left side of sprite (hence "-0.1" above) ** Processing line: ~ left_side_collisions = state.world_collision_rects~ - Inside source: true *** True Line Result left_side_collisions = state.world_collision_rects ** Processing line: ~ .find_all { |r| r[:left_right].intersect_rect?(player_rect, state.collision_tolerance) }~ - Inside source: true *** True Line Result .find_all { |r| r[:left_right].intersect_rect?(player_rect, state.collision_tolerance) } ** Processing line: ~ .first~ - Inside source: true *** True Line Result .first ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless left_side_collisions~ - Inside source: true *** True Line Result return unless left_side_collisions ** Processing line: ~ state.x = left_side_collisions[:left_right].right + 1~ - Inside source: true *** True Line Result state.x = left_side_collisions[:left_right].right + 1 ** Processing line: ~ state.dx = state.dy.abs * 0.8~ - Inside source: true *** True Line Result state.dx = state.dy.abs * 0.8 ** Processing line: ~ state.collision_on_x = true~ - Inside source: true *** True Line Result state.collision_on_x = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def collision_right~ - Inside source: true *** True Line Result def collision_right ** Processing line: ~ return unless state.dx > 0~ - Inside source: true *** True Line Result return unless state.dx > 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ player_rect = [next_x, state.y, state.tile_size, state.tile_size]~ - Inside source: true *** True Line Result player_rect = [next_x, state.y, state.tile_size, state.tile_size] ** Processing line: ~ # Runs through all the sprites on the field and determines if the player hits the right side of sprite (hence "-0.1" above)~ - Inside source: true *** True Line Result # Runs through all the sprites on the field and determines if the player hits the right side of sprite (hence "-0.1" above) ** Processing line: ~ right_side_collisions = state.world_collision_rects~ - Inside source: true *** True Line Result right_side_collisions = state.world_collision_rects ** Processing line: ~ .find_all { |r| r[:left_right].intersect_rect?(player_rect, state.collision_tolerance) }~ - Inside source: true *** True Line Result .find_all { |r| r[:left_right].intersect_rect?(player_rect, state.collision_tolerance) } ** Processing line: ~ .first~ - Inside source: true *** True Line Result .first ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless right_side_collisions~ - Inside source: true *** True Line Result return unless right_side_collisions ** Processing line: ~ state.x = right_side_collisions[:left_right].left - state.tile_size - 1~ - Inside source: true *** True Line Result state.x = right_side_collisions[:left_right].left - state.tile_size - 1 ** Processing line: ~ state.dx = state.dx.abs * 0.8 * -1~ - Inside source: true *** True Line Result state.dx = state.dx.abs * 0.8 * -1 ** Processing line: ~ state.collision_on_x = true~ - Inside source: true *** True Line Result state.collision_on_x = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def collision_ceiling~ - Inside source: true *** True Line Result def collision_ceiling ** Processing line: ~ return unless state.dy > 0~ - Inside source: true *** True Line Result return unless state.dy > 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ player_rect = [state.x, next_y, state.player_width, state.player_height]~ - Inside source: true *** True Line Result player_rect = [state.x, next_y, state.player_width, state.player_height] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Runs through all the sprites on the field and determines if the player hits the ceiling of sprite (hence "+0.1" above)~ - Inside source: true *** True Line Result # Runs through all the sprites on the field and determines if the player hits the ceiling of sprite (hence "+0.1" above) ** Processing line: ~ ceil_collisions = state.world_collision_rects~ - Inside source: true *** True Line Result ceil_collisions = state.world_collision_rects ** Processing line: ~ .find_all { |r| r[:bottom].intersect_rect?(player_rect, state.collision_tolerance) }~ - Inside source: true *** True Line Result .find_all { |r| r[:bottom].intersect_rect?(player_rect, state.collision_tolerance) } ** Processing line: ~ .first~ - Inside source: true *** True Line Result .first ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless ceil_collisions~ - Inside source: true *** True Line Result return unless ceil_collisions ** Processing line: ~ state.y = ceil_collisions[:bottom].y - state.tile_size - 1~ - Inside source: true *** True Line Result state.y = ceil_collisions[:bottom].y - state.tile_size - 1 ** Processing line: ~ state.dy = state.dy.abs * 0.8 * -1~ - Inside source: true *** True Line Result state.dy = state.dy.abs * 0.8 * -1 ** Processing line: ~ state.collision_on_y = true~ - Inside source: true *** True Line Result state.collision_on_y = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_coord point~ - Inside source: true *** True Line Result def to_coord point ** Processing line: ~ # Integer divides (idiv) point.x to turn into grid~ - Inside source: true *** True Line Result # Integer divides (idiv) point.x to turn into grid ** Processing line: ~ # Then, you can just multiply each integer by state.tile_size~ - Inside source: true *** True Line Result # Then, you can just multiply each integer by state.tile_size ** Processing line: ~ # later and huzzah. Grid coordinates~ - Inside source: true *** True Line Result # later and huzzah. Grid coordinates ** Processing line: ~ [point.x.idiv(state.tile_size), point.y.idiv(state.tile_size)]~ - Inside source: true *** True Line Result [point.x.idiv(state.tile_size), point.y.idiv(state.tile_size)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def export_map~ - Inside source: true *** True Line Result def export_map ** Processing line: ~ export_string = "$collisions = [\n"~ - Inside source: true *** True Line Result export_string = "$collisions = [\n" ** Processing line: ~ export_string += state.world.map do |rect|~ - Inside source: true *** True Line Result export_string += state.world.map do |rect| ** Processing line: ~ "[#{rect.x},#{rect.y},#{rect.w},#{rect.h}],"~ - Inside source: true *** True Line Result "[#{rect.x},#{rect.y},#{rect.w},#{rect.h}]," ** Processing line: ~ end.join "\n"~ - Inside source: true *** True Line Result end.join "\n" ** Processing line: ~ export_string += "\n]\n\n"~ - Inside source: true *** True Line Result export_string += "\n]\n\n" ** Processing line: ~ export_string += "$mugs = [\n"~ - Inside source: true *** True Line Result export_string += "$mugs = [\n" ** Processing line: ~ export_string += state.objects.map do |x, y, w, h, path|~ - Inside source: true *** True Line Result export_string += state.objects.map do |x, y, w, h, path| ** Processing line: ~ "[#{x},#{y},#{w},#{h},'#{path}'],"~ - Inside source: true *** True Line Result "[#{x},#{y},#{w},#{h},'#{path}']," ** Processing line: ~ end.join "\n"~ - Inside source: true *** True Line Result end.join "\n" ** Processing line: ~ export_string += "\n]\n\n"~ - Inside source: true *** True Line Result export_string += "\n]\n\n" ** Processing line: ~ gtk.write_file(MAP_FILE_PATH, export_string)~ - Inside source: true *** True Line Result gtk.write_file(MAP_FILE_PATH, export_string) ** Processing line: ~ state.map_saved_at = state.tick_count~ - Inside source: true *** True Line Result state.map_saved_at = state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inputs_export_stage~ - Inside source: true *** True Line Result def inputs_export_stage ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_score~ - Inside source: true *** True Line Result def calc_score ** Processing line: ~ return unless state.scene == :game~ - Inside source: true *** True Line Result return unless state.scene == :game ** Processing line: ~ player = [state.x, state.y, state.player_width, state.player_height]~ - Inside source: true *** True Line Result player = [state.x, state.y, state.player_width, state.player_height] ** Processing line: ~ collected = state.objects.find_all { |s| s.intersect_rect? player }~ - Inside source: true *** True Line Result collected = state.objects.find_all { |s| s.intersect_rect? player } ** Processing line: ~ state.stuff_score += collected.length~ - Inside source: true *** True Line Result state.stuff_score += collected.length ** Processing line: ~ if collected.length > 0~ - Inside source: true *** True Line Result if collected.length > 0 ** Processing line: ~ outputs.sounds << 'sounds/collectable.wav'~ - Inside source: true *** True Line Result outputs.sounds << 'sounds/collectable.wav' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ state.objects = state.objects.reject { |s| collected.include? s }~ - Inside source: true *** True Line Result state.objects = state.objects.reject { |s| collected.include? s } ** Processing line: ~ state.stuff_time += 0.01~ - Inside source: true *** True Line Result state.stuff_time += 0.01 ** Processing line: ~ if state.objects.length == 0~ - Inside source: true *** True Line Result if state.objects.length == 0 ** Processing line: ~ if !state.stuff_best_time || state.stuff_time < state.stuff_best_time~ - Inside source: true *** True Line Result if !state.stuff_best_time || state.stuff_time < state.stuff_best_time ** Processing line: ~ state.stuff_best_time = state.stuff_time~ - Inside source: true *** True Line Result state.stuff_best_time = state.stuff_time ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ state.game_over_at = nil~ - Inside source: true *** True Line Result state.game_over_at = nil ** Processing line: ~ state.scene = :ending~ - Inside source: true *** True Line Result state.scene = :ending ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_on_floor~ - Inside source: true *** True Line Result def calc_on_floor ** Processing line: ~ if state.action == :anchored~ - Inside source: true *** True Line Result if state.action == :anchored ** Processing line: ~ state.on_floor = false~ - Inside source: true *** True Line Result state.on_floor = false ** Processing line: ~ state.on_floor_debounce = 30~ - Inside source: true *** True Line Result state.on_floor_debounce = 30 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.on_floor_debounce ||= 30~ - Inside source: true *** True Line Result state.on_floor_debounce ||= 30 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.dy.round != 0~ - Inside source: true *** True Line Result if state.dy.round != 0 ** Processing line: ~ state.on_floor_debounce = 30~ - Inside source: true *** True Line Result state.on_floor_debounce = 30 ** Processing line: ~ state.on_floor = false~ - Inside source: true *** True Line Result state.on_floor = false ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.on_floor_debounce -= 1~ - Inside source: true *** True Line Result state.on_floor_debounce -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.on_floor_debounce <= 0~ - Inside source: true *** True Line Result if state.on_floor_debounce <= 0 ** Processing line: ~ state.on_floor_debounce = 0~ - Inside source: true *** True Line Result state.on_floor_debounce = 0 ** Processing line: ~ state.on_floor = true~ - Inside source: true *** True Line Result state.on_floor = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_player~ - Inside source: true *** True Line Result def render_player ** Processing line: ~ path = "sprites/square-green.png"~ - Inside source: true *** True Line Result path = "sprites/square-green.png" ** Processing line: ~ angle = 0~ - Inside source: true *** True Line Result angle = 0 ** Processing line: ~ # outputs.labels << [vx(state.x), vy(state.y) - 30, "dy: #{state.dy.round}"]~ - Inside source: true *** True Line Result # outputs.labels << [vx(state.x), vy(state.y) - 30, "dy: #{state.dy.round}"] ** Processing line: ~ if state.action == :idle~ - Inside source: true *** True Line Result if state.action == :idle ** Processing line: ~ # outputs.labels << [vx(state.x), vy(state.y), "IDLE"]~ - Inside source: true *** True Line Result # outputs.labels << [vx(state.x), vy(state.y), "IDLE"] ** Processing line: ~ path = "sprites/square-green.png"~ - Inside source: true *** True Line Result path = "sprites/square-green.png" ** Processing line: ~ elsif state.action == :aiming && !state.on_floor~ - Inside source: true *** True Line Result elsif state.action == :aiming && !state.on_floor ** Processing line: ~ # outputs.labels << [vx(state.x), vy(state.y), "AIMING AIR BORN"]~ - Inside source: true *** True Line Result # outputs.labels << [vx(state.x), vy(state.y), "AIMING AIR BORN"] ** Processing line: ~ angle = state.tongue_angle - 90~ - Inside source: true *** True Line Result angle = state.tongue_angle - 90 ** Processing line: ~ path = "sprites/square-green.png"~ - Inside source: true *** True Line Result path = "sprites/square-green.png" ** Processing line: ~ elsif state.action == :aiming # ON THE GROUND~ - Inside source: true *** True Line Result elsif state.action == :aiming # ON THE GROUND ** Processing line: ~ # outputs.labels << [vx(state.x), vy(state.y), "AIMING GROUND"]~ - Inside source: true *** True Line Result # outputs.labels << [vx(state.x), vy(state.y), "AIMING GROUND"] ** Processing line: ~ path = "sprites/square-green.png"~ - Inside source: true *** True Line Result path = "sprites/square-green.png" ** Processing line: ~ elsif state.action == :shooting && !state.on_floor~ - Inside source: true *** True Line Result elsif state.action == :shooting && !state.on_floor ** Processing line: ~ # outputs.labels << [vx(state.x), vy(state.y), "SHOOTING AIR BORN"]~ - Inside source: true *** True Line Result # outputs.labels << [vx(state.x), vy(state.y), "SHOOTING AIR BORN"] ** Processing line: ~ path = "sprites/square-green.png"~ - Inside source: true *** True Line Result path = "sprites/square-green.png" ** Processing line: ~ angle = state.tongue_angle - 90~ - Inside source: true *** True Line Result angle = state.tongue_angle - 90 ** Processing line: ~ elsif state.action == :shooting~ - Inside source: true *** True Line Result elsif state.action == :shooting ** Processing line: ~ # outputs.labels << [vx(state.x), vy(state.y), "SHOOTING ON GROUND"]~ - Inside source: true *** True Line Result # outputs.labels << [vx(state.x), vy(state.y), "SHOOTING ON GROUND"] ** Processing line: ~ path = "sprites/square-green.png"~ - Inside source: true *** True Line Result path = "sprites/square-green.png" ** Processing line: ~ elsif state.action == :anchored~ - Inside source: true *** True Line Result elsif state.action == :anchored ** Processing line: ~ # outputs.labels << [vx(state.x), vy(state.y), "SWINGING"]~ - Inside source: true *** True Line Result # outputs.labels << [vx(state.x), vy(state.y), "SWINGING"] ** Processing line: ~ angle = state.tongue_angle - 90~ - Inside source: true *** True Line Result angle = state.tongue_angle - 90 ** Processing line: ~ path = "sprites/square-green.png"~ - Inside source: true *** True Line Result path = "sprites/square-green.png" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.sprites << [vx(state.x),~ - Inside source: true *** True Line Result outputs.sprites << [vx(state.x), ** Processing line: ~ vy(state.y),~ - Inside source: true *** True Line Result vy(state.y), ** Processing line: ~ vw(state.player_width),~ - Inside source: true *** True Line Result vw(state.player_width), ** Processing line: ~ vh(state.player_height),~ - Inside source: true *** True Line Result vh(state.player_height), ** Processing line: ~ path,~ - Inside source: true *** True Line Result path, ** Processing line: ~ angle]~ - Inside source: true *** True Line Result angle] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_player_old~ - Inside source: true *** True Line Result def render_player_old ** Processing line: ~ # Player~ - Inside source: true *** True Line Result # Player ** Processing line: ~ if state.action == :aiming~ - Inside source: true *** True Line Result if state.action == :aiming ** Processing line: ~ path = 'sprites\frg\idle\frog_idle.png'~ - Inside source: true *** True Line Result path = 'sprites\frg\idle\frog_idle.png' ** Processing line: ~ if state.dx > 2~ - Inside source: true *** True Line Result if state.dx > 2 ** Processing line: ~ #directional right sprite was here but i needa redo it~ - Inside source: true *** True Line Result #directional right sprite was here but i needa redo it ** Processing line: ~ path = 'sprites\frg\anchor\frog-anchor-0.png'~ - Inside source: true *** True Line Result path = 'sprites\frg\anchor\frog-anchor-0.png' ** Processing line: ~ #directional left sprite was here but i needa redo it~ - Inside source: true *** True Line Result #directional left sprite was here but i needa redo it ** Processing line: ~ elsif state.dx < -2~ - Inside source: true *** True Line Result elsif state.dx < -2 ** Processing line: ~ path = 'sprites\frg\anchor\frog-anchor-0.png'~ - Inside source: true *** True Line Result path = 'sprites\frg\anchor\frog-anchor-0.png' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ outputs.sprites << [vx(state.x),~ - Inside source: true *** True Line Result outputs.sprites << [vx(state.x), ** Processing line: ~ vy(state.y),~ - Inside source: true *** True Line Result vy(state.y), ** Processing line: ~ vw(state.player_width),~ - Inside source: true *** True Line Result vw(state.player_width), ** Processing line: ~ vh(state.player_height),~ - Inside source: true *** True Line Result vh(state.player_height), ** Processing line: ~ path,~ - Inside source: true *** True Line Result path, ** Processing line: ~ (state.tongue_angle - 90)]~ - Inside source: true *** True Line Result (state.tongue_angle - 90)] ** Processing line: ~ elsif state.action == :anchored || state.action == :shooting~ - Inside source: true *** True Line Result elsif state.action == :anchored || state.action == :shooting ** Processing line: ~ outputs.sprites << [vx(state.x),~ - Inside source: true *** True Line Result outputs.sprites << [vx(state.x), ** Processing line: ~ vy(state.y),~ - Inside source: true *** True Line Result vy(state.y), ** Processing line: ~ vw(state.player_width),~ - Inside source: true *** True Line Result vw(state.player_width), ** Processing line: ~ vw(state.player_height),~ - Inside source: true *** True Line Result vw(state.player_height), ** Processing line: ~ 'sprites/animations_povfrog/frog_bwah_up.png',~ - Inside source: true *** True Line Result 'sprites/animations_povfrog/frog_bwah_up.png', ** Processing line: ~ (state.tongue_angle - 90)]~ - Inside source: true *** True Line Result (state.tongue_angle - 90)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $game = CleptoFrog.new~ - Inside source: true *** True Line Result $game = CleptoFrog.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ if args.state.scene == :game~ - Inside source: true *** True Line Result if args.state.scene == :game ** Processing line: ~ tick_instructions args, "SPACE to SHOOT and RELEASE tongue. LEFT, RIGHT to SWING and BUILD momentum. MINIMAP in bottom right corner.", 360~ - Inside source: true *** True Line Result tick_instructions args, "SPACE to SHOOT and RELEASE tongue. LEFT, RIGHT to SWING and BUILD momentum. MINIMAP in bottom right corner.", 360 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ $game.args = args~ - Inside source: true *** True Line Result $game.args = args ** Processing line: ~ $game.tick~ - Inside source: true *** True Line Result $game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_instructions args, text, y = 715~ - Inside source: true *** True Line Result def tick_instructions args, text, y = 715 ** Processing line: ~ return if args.state.key_event_occurred~ - Inside source: true *** True Line Result return if args.state.key_event_occurred ** Processing line: ~ if args.inputs.keyboard.directional_vector || args.inputs.keyboard.key_down.space~ - Inside source: true *** True Line Result if args.inputs.keyboard.directional_vector || args.inputs.keyboard.key_down.space ** Processing line: ~ args.state.key_event_occurred = true~ - Inside source: true *** True Line Result args.state.key_event_occurred = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ - Inside source: true *** True Line Result args.outputs.debug << [0, y - 50, 1280, 60].solid ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label ** Processing line: ~ args.outputs.debug << [640, y - 25, "(SPACE to dismiss instructions)" , -2, 1, 255, 255, 255].label~ - Inside source: true *** True Line Result args.outputs.debug << [640, y - 25, "(SPACE to dismiss instructions)" , -2, 1, 255, 255, 255].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Platformer - Clepto Frog - map.rb~ - Header detected. *** True Line Result *** True Line Result *** Platformer - Clepto Frog - map.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_platformer/clepto_frog/app/map.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_platformer/clepto_frog/app/map.rb ** Processing line: ~ $collisions = [~ - Inside source: true *** True Line Result $collisions = [ ** Processing line: ~ [326, 463, 64, 64],~ - Inside source: true *** True Line Result [326, 463, 64, 64], ** Processing line: ~ [274, 462, 64, 64],~ - Inside source: true *** True Line Result [274, 462, 64, 64], ** Processing line: ~ [326, 413, 64, 64],~ - Inside source: true *** True Line Result [326, 413, 64, 64], ** Processing line: ~ [275, 412, 64, 64],~ - Inside source: true *** True Line Result [275, 412, 64, 64], ** Processing line: ~ [124, 651, 64, 64],~ - Inside source: true *** True Line Result [124, 651, 64, 64], ** Processing line: ~ [72, 651, 64, 64],~ - Inside source: true *** True Line Result [72, 651, 64, 64], ** Processing line: ~ [124, 600, 64, 64],~ - Inside source: true *** True Line Result [124, 600, 64, 64], ** Processing line: ~ [69, 599, 64, 64],~ - Inside source: true *** True Line Result [69, 599, 64, 64], ** Processing line: ~ [501, 997, 64, 64],~ - Inside source: true *** True Line Result [501, 997, 64, 64], ** Processing line: ~ [476, 995, 64, 64],~ - Inside source: true *** True Line Result [476, 995, 64, 64], ** Processing line: ~ [3224, 2057, 64, 64],~ - Inside source: true *** True Line Result [3224, 2057, 64, 64], ** Processing line: ~ [3224, 1994, 64, 64],~ - Inside source: true *** True Line Result [3224, 1994, 64, 64], ** Processing line: ~ [3225, 1932, 64, 64],~ - Inside source: true *** True Line Result [3225, 1932, 64, 64], ** Processing line: ~ [3225, 1870, 64, 64],~ - Inside source: true *** True Line Result [3225, 1870, 64, 64], ** Processing line: ~ [3226, 1806, 64, 64],~ - Inside source: true *** True Line Result [3226, 1806, 64, 64], ** Processing line: ~ [3224, 1744, 64, 64],~ - Inside source: true *** True Line Result [3224, 1744, 64, 64], ** Processing line: ~ [3225, 1689, 64, 64],~ - Inside source: true *** True Line Result [3225, 1689, 64, 64], ** Processing line: ~ [3226, 1660, 64, 64],~ - Inside source: true *** True Line Result [3226, 1660, 64, 64], ** Processing line: ~ [3161, 1658, 64, 64],~ - Inside source: true *** True Line Result [3161, 1658, 64, 64], ** Processing line: ~ [3097, 1660, 64, 64],~ - Inside source: true *** True Line Result [3097, 1660, 64, 64], ** Processing line: ~ [3033, 1658, 64, 64],~ - Inside source: true *** True Line Result [3033, 1658, 64, 64], ** Processing line: ~ [2969, 1658, 64, 64],~ - Inside source: true *** True Line Result [2969, 1658, 64, 64], ** Processing line: ~ [2904, 1658, 64, 64],~ - Inside source: true *** True Line Result [2904, 1658, 64, 64], ** Processing line: ~ [2839, 1657, 64, 64],~ - Inside source: true *** True Line Result [2839, 1657, 64, 64], ** Processing line: ~ [2773, 1657, 64, 64],~ - Inside source: true *** True Line Result [2773, 1657, 64, 64], ** Processing line: ~ [2709, 1658, 64, 64],~ - Inside source: true *** True Line Result [2709, 1658, 64, 64], ** Processing line: ~ [2643, 1657, 64, 64],~ - Inside source: true *** True Line Result [2643, 1657, 64, 64], ** Processing line: ~ [2577, 1657, 64, 64],~ - Inside source: true *** True Line Result [2577, 1657, 64, 64], ** Processing line: ~ [2509, 1658, 64, 64],~ - Inside source: true *** True Line Result [2509, 1658, 64, 64], ** Processing line: ~ [2440, 1658, 64, 64],~ - Inside source: true *** True Line Result [2440, 1658, 64, 64], ** Processing line: ~ [2371, 1658, 64, 64],~ - Inside source: true *** True Line Result [2371, 1658, 64, 64], ** Processing line: ~ [2301, 1659, 64, 64],~ - Inside source: true *** True Line Result [2301, 1659, 64, 64], ** Processing line: ~ [2230, 1659, 64, 64],~ - Inside source: true *** True Line Result [2230, 1659, 64, 64], ** Processing line: ~ [2159, 1659, 64, 64],~ - Inside source: true *** True Line Result [2159, 1659, 64, 64], ** Processing line: ~ [2092, 1660, 64, 64],~ - Inside source: true *** True Line Result [2092, 1660, 64, 64], ** Processing line: ~ [2025, 1661, 64, 64],~ - Inside source: true *** True Line Result [2025, 1661, 64, 64], ** Processing line: ~ [1958, 1660, 64, 64],~ - Inside source: true *** True Line Result [1958, 1660, 64, 64], ** Processing line: ~ [1888, 1659, 64, 64],~ - Inside source: true *** True Line Result [1888, 1659, 64, 64], ** Processing line: ~ [1817, 1657, 64, 64],~ - Inside source: true *** True Line Result [1817, 1657, 64, 64], ** Processing line: ~ [1745, 1656, 64, 64],~ - Inside source: true *** True Line Result [1745, 1656, 64, 64], ** Processing line: ~ [1673, 1658, 64, 64],~ - Inside source: true *** True Line Result [1673, 1658, 64, 64], ** Processing line: ~ [1605, 1660, 64, 64],~ - Inside source: true *** True Line Result [1605, 1660, 64, 64], ** Processing line: ~ [1536, 1658, 64, 64],~ - Inside source: true *** True Line Result [1536, 1658, 64, 64], ** Processing line: ~ [1465, 1660, 64, 64],~ - Inside source: true *** True Line Result [1465, 1660, 64, 64], ** Processing line: ~ [1386, 1960, 64, 64],~ - Inside source: true *** True Line Result [1386, 1960, 64, 64], ** Processing line: ~ [1384, 1908, 64, 64],~ - Inside source: true *** True Line Result [1384, 1908, 64, 64], ** Processing line: ~ [1387, 1862, 64, 64],~ - Inside source: true *** True Line Result [1387, 1862, 64, 64], ** Processing line: ~ [1326, 1863, 64, 64],~ - Inside source: true *** True Line Result [1326, 1863, 64, 64], ** Processing line: ~ [1302, 1862, 64, 64],~ - Inside source: true *** True Line Result [1302, 1862, 64, 64], ** Processing line: ~ [1119, 1906, 64, 64],~ - Inside source: true *** True Line Result [1119, 1906, 64, 64], ** Processing line: ~ [1057, 1905, 64, 64],~ - Inside source: true *** True Line Result [1057, 1905, 64, 64], ** Processing line: ~ [994, 1905, 64, 64],~ - Inside source: true *** True Line Result [994, 1905, 64, 64], ** Processing line: ~ [937, 1904, 64, 64],~ - Inside source: true *** True Line Result [937, 1904, 64, 64], ** Processing line: ~ [896, 1904, 64, 64],~ - Inside source: true *** True Line Result [896, 1904, 64, 64], ** Processing line: ~ [1001, 1845, 64, 64],~ - Inside source: true *** True Line Result [1001, 1845, 64, 64], ** Processing line: ~ [1003, 1780, 64, 64],~ - Inside source: true *** True Line Result [1003, 1780, 64, 64], ** Processing line: ~ [1003, 1718, 64, 64],~ - Inside source: true *** True Line Result [1003, 1718, 64, 64], ** Processing line: ~ [692, 1958, 64, 64],~ - Inside source: true *** True Line Result [692, 1958, 64, 64], ** Processing line: ~ [691, 1900, 64, 64],~ - Inside source: true *** True Line Result [691, 1900, 64, 64], ** Processing line: ~ [774, 1861, 64, 64],~ - Inside source: true *** True Line Result [774, 1861, 64, 64], ** Processing line: ~ [712, 1861, 64, 64],~ - Inside source: true *** True Line Result [712, 1861, 64, 64], ** Processing line: ~ [691, 1863, 64, 64],~ - Inside source: true *** True Line Result [691, 1863, 64, 64], ** Processing line: ~ [325, 2133, 64, 64],~ - Inside source: true *** True Line Result [325, 2133, 64, 64], ** Processing line: ~ [275, 2134, 64, 64],~ - Inside source: true *** True Line Result [275, 2134, 64, 64], ** Processing line: ~ [326, 2082, 64, 64],~ - Inside source: true *** True Line Result [326, 2082, 64, 64], ** Processing line: ~ [275, 2082, 64, 64],~ - Inside source: true *** True Line Result [275, 2082, 64, 64], ** Processing line: ~ [124, 2321, 64, 64],~ - Inside source: true *** True Line Result [124, 2321, 64, 64], ** Processing line: ~ [71, 2320, 64, 64],~ - Inside source: true *** True Line Result [71, 2320, 64, 64], ** Processing line: ~ [123, 2267, 64, 64],~ - Inside source: true *** True Line Result [123, 2267, 64, 64], ** Processing line: ~ [71, 2268, 64, 64],~ - Inside source: true *** True Line Result [71, 2268, 64, 64], ** Processing line: ~ [2354, 1859, 64, 64],~ - Inside source: true *** True Line Result [2354, 1859, 64, 64], ** Processing line: ~ [2292, 1859, 64, 64],~ - Inside source: true *** True Line Result [2292, 1859, 64, 64], ** Processing line: ~ [2231, 1857, 64, 64],~ - Inside source: true *** True Line Result [2231, 1857, 64, 64], ** Processing line: ~ [2198, 1858, 64, 64],~ - Inside source: true *** True Line Result [2198, 1858, 64, 64], ** Processing line: ~ [2353, 1802, 64, 64],~ - Inside source: true *** True Line Result [2353, 1802, 64, 64], ** Processing line: ~ [2296, 1798, 64, 64],~ - Inside source: true *** True Line Result [2296, 1798, 64, 64], ** Processing line: ~ [2233, 1797, 64, 64],~ - Inside source: true *** True Line Result [2233, 1797, 64, 64], ** Processing line: ~ [2200, 1797, 64, 64],~ - Inside source: true *** True Line Result [2200, 1797, 64, 64], ** Processing line: ~ [2352, 1742, 64, 64],~ - Inside source: true *** True Line Result [2352, 1742, 64, 64], ** Processing line: ~ [2288, 1741, 64, 64],~ - Inside source: true *** True Line Result [2288, 1741, 64, 64], ** Processing line: ~ [2230, 1743, 64, 64],~ - Inside source: true *** True Line Result [2230, 1743, 64, 64], ** Processing line: ~ [2196, 1743, 64, 64],~ - Inside source: true *** True Line Result [2196, 1743, 64, 64], ** Processing line: ~ [1736, 460, 64, 64],~ - Inside source: true *** True Line Result [1736, 460, 64, 64], ** Processing line: ~ [1735, 400, 64, 64],~ - Inside source: true *** True Line Result [1735, 400, 64, 64], ** Processing line: ~ [1736, 339, 64, 64],~ - Inside source: true *** True Line Result [1736, 339, 64, 64], ** Processing line: ~ [1736, 275, 64, 64],~ - Inside source: true *** True Line Result [1736, 275, 64, 64], ** Processing line: ~ [1738, 210, 64, 64],~ - Inside source: true *** True Line Result [1738, 210, 64, 64], ** Processing line: ~ [1735, 145, 64, 64],~ - Inside source: true *** True Line Result [1735, 145, 64, 64], ** Processing line: ~ [1735, 87, 64, 64],~ - Inside source: true *** True Line Result [1735, 87, 64, 64], ** Processing line: ~ [1736, 51, 64, 64],~ - Inside source: true *** True Line Result [1736, 51, 64, 64], ** Processing line: ~ [539, 289, 64, 64],~ - Inside source: true *** True Line Result [539, 289, 64, 64], ** Processing line: ~ [541, 228, 64, 64],~ - Inside source: true *** True Line Result [541, 228, 64, 64], ** Processing line: ~ [626, 191, 64, 64],~ - Inside source: true *** True Line Result [626, 191, 64, 64], ** Processing line: ~ [572, 192, 64, 64],~ - Inside source: true *** True Line Result [572, 192, 64, 64], ** Processing line: ~ [540, 193, 64, 64],~ - Inside source: true *** True Line Result [540, 193, 64, 64], ** Processing line: ~ [965, 233, 64, 64],~ - Inside source: true *** True Line Result [965, 233, 64, 64], ** Processing line: ~ [904, 234, 64, 64],~ - Inside source: true *** True Line Result [904, 234, 64, 64], ** Processing line: ~ [840, 234, 64, 64],~ - Inside source: true *** True Line Result [840, 234, 64, 64], ** Processing line: ~ [779, 234, 64, 64],~ - Inside source: true *** True Line Result [779, 234, 64, 64], ** Processing line: ~ [745, 236, 64, 64],~ - Inside source: true *** True Line Result [745, 236, 64, 64], ** Processing line: ~ [851, 169, 64, 64],~ - Inside source: true *** True Line Result [851, 169, 64, 64], ** Processing line: ~ [849, 108, 64, 64],~ - Inside source: true *** True Line Result [849, 108, 64, 64], ** Processing line: ~ [852, 50, 64, 64],~ - Inside source: true *** True Line Result [852, 50, 64, 64], ** Processing line: ~ [1237, 289, 64, 64],~ - Inside source: true *** True Line Result [1237, 289, 64, 64], ** Processing line: ~ [1236, 228, 64, 64],~ - Inside source: true *** True Line Result [1236, 228, 64, 64], ** Processing line: ~ [1238, 197, 64, 64],~ - Inside source: true *** True Line Result [1238, 197, 64, 64], ** Processing line: ~ [1181, 192, 64, 64],~ - Inside source: true *** True Line Result [1181, 192, 64, 64], ** Processing line: ~ [1152, 192, 64, 64],~ - Inside source: true *** True Line Result [1152, 192, 64, 64], ** Processing line: ~ [1443, 605, 64, 64],~ - Inside source: true *** True Line Result [1443, 605, 64, 64], ** Processing line: ~ [1419, 606, 64, 64],~ - Inside source: true *** True Line Result [1419, 606, 64, 64], ** Processing line: ~ [1069, 925, 64, 64],~ - Inside source: true *** True Line Result [1069, 925, 64, 64], ** Processing line: ~ [1068, 902, 64, 64],~ - Inside source: true *** True Line Result [1068, 902, 64, 64], ** Processing line: ~ [1024, 927, 64, 64],~ - Inside source: true *** True Line Result [1024, 927, 64, 64], ** Processing line: ~ [1017, 897, 64, 64],~ - Inside source: true *** True Line Result [1017, 897, 64, 64], ** Processing line: ~ [963, 926, 64, 64],~ - Inside source: true *** True Line Result [963, 926, 64, 64], ** Processing line: ~ [958, 898, 64, 64],~ - Inside source: true *** True Line Result [958, 898, 64, 64], ** Processing line: ~ [911, 928, 64, 64],~ - Inside source: true *** True Line Result [911, 928, 64, 64], ** Processing line: ~ [911, 896, 64, 64],~ - Inside source: true *** True Line Result [911, 896, 64, 64], ** Processing line: ~ [2132, 803, 64, 64],~ - Inside source: true *** True Line Result [2132, 803, 64, 64], ** Processing line: ~ [2081, 803, 64, 64],~ - Inside source: true *** True Line Result [2081, 803, 64, 64], ** Processing line: ~ [2131, 752, 64, 64],~ - Inside source: true *** True Line Result [2131, 752, 64, 64], ** Processing line: ~ [2077, 751, 64, 64],~ - Inside source: true *** True Line Result [2077, 751, 64, 64], ** Processing line: ~ [2615, 649, 64, 64],~ - Inside source: true *** True Line Result [2615, 649, 64, 64], ** Processing line: ~ [2564, 651, 64, 64],~ - Inside source: true *** True Line Result [2564, 651, 64, 64], ** Processing line: ~ [2533, 650, 64, 64],~ - Inside source: true *** True Line Result [2533, 650, 64, 64], ** Processing line: ~ [2027, 156, 64, 64],~ - Inside source: true *** True Line Result [2027, 156, 64, 64], ** Processing line: ~ [1968, 155, 64, 64],~ - Inside source: true *** True Line Result [1968, 155, 64, 64], ** Processing line: ~ [1907, 153, 64, 64],~ - Inside source: true *** True Line Result [1907, 153, 64, 64], ** Processing line: ~ [1873, 155, 64, 64],~ - Inside source: true *** True Line Result [1873, 155, 64, 64], ** Processing line: ~ [2025, 95, 64, 64],~ - Inside source: true *** True Line Result [2025, 95, 64, 64], ** Processing line: ~ [1953, 98, 64, 64],~ - Inside source: true *** True Line Result [1953, 98, 64, 64], ** Processing line: ~ [1894, 100, 64, 64],~ - Inside source: true *** True Line Result [1894, 100, 64, 64], ** Processing line: ~ [1870, 100, 64, 64],~ - Inside source: true *** True Line Result [1870, 100, 64, 64], ** Processing line: ~ [2029, 45, 64, 64],~ - Inside source: true *** True Line Result [2029, 45, 64, 64], ** Processing line: ~ [1971, 48, 64, 64],~ - Inside source: true *** True Line Result [1971, 48, 64, 64], ** Processing line: ~ [1915, 47, 64, 64],~ - Inside source: true *** True Line Result [1915, 47, 64, 64], ** Processing line: ~ [1873, 47, 64, 64],~ - Inside source: true *** True Line Result [1873, 47, 64, 64], ** Processing line: ~ [3956, 288, 64, 64],~ - Inside source: true *** True Line Result [3956, 288, 64, 64], ** Processing line: ~ [3954, 234, 64, 64],~ - Inside source: true *** True Line Result [3954, 234, 64, 64], ** Processing line: ~ [4042, 190, 64, 64],~ - Inside source: true *** True Line Result [4042, 190, 64, 64], ** Processing line: ~ [3990, 190, 64, 64],~ - Inside source: true *** True Line Result [3990, 190, 64, 64], ** Processing line: ~ [3958, 195, 64, 64],~ - Inside source: true *** True Line Result [3958, 195, 64, 64], ** Processing line: ~ [3422, 709, 64, 64],~ - Inside source: true *** True Line Result [3422, 709, 64, 64], ** Processing line: ~ [3425, 686, 64, 64],~ - Inside source: true *** True Line Result [3425, 686, 64, 64], ** Processing line: ~ [3368, 709, 64, 64],~ - Inside source: true *** True Line Result [3368, 709, 64, 64], ** Processing line: ~ [3364, 683, 64, 64],~ - Inside source: true *** True Line Result [3364, 683, 64, 64], ** Processing line: ~ [3312, 711, 64, 64],~ - Inside source: true *** True Line Result [3312, 711, 64, 64], ** Processing line: ~ [3307, 684, 64, 64],~ - Inside source: true *** True Line Result [3307, 684, 64, 64], ** Processing line: ~ [3266, 712, 64, 64],~ - Inside source: true *** True Line Result [3266, 712, 64, 64], ** Processing line: ~ [3269, 681, 64, 64],~ - Inside source: true *** True Line Result [3269, 681, 64, 64], ** Processing line: ~ [4384, 236, 64, 64],~ - Inside source: true *** True Line Result [4384, 236, 64, 64], ** Processing line: ~ [4320, 234, 64, 64],~ - Inside source: true *** True Line Result [4320, 234, 64, 64], ** Processing line: ~ [4257, 235, 64, 64],~ - Inside source: true *** True Line Result [4257, 235, 64, 64], ** Processing line: ~ [4192, 234, 64, 64],~ - Inside source: true *** True Line Result [4192, 234, 64, 64], ** Processing line: ~ [4162, 234, 64, 64],~ - Inside source: true *** True Line Result [4162, 234, 64, 64], ** Processing line: ~ [4269, 171, 64, 64],~ - Inside source: true *** True Line Result [4269, 171, 64, 64], ** Processing line: ~ [4267, 111, 64, 64],~ - Inside source: true *** True Line Result [4267, 111, 64, 64], ** Processing line: ~ [4266, 52, 64, 64],~ - Inside source: true *** True Line Result [4266, 52, 64, 64], ** Processing line: ~ [4580, 458, 64, 64],~ - Inside source: true *** True Line Result [4580, 458, 64, 64], ** Processing line: ~ [4582, 396, 64, 64],~ - Inside source: true *** True Line Result [4582, 396, 64, 64], ** Processing line: ~ [4582, 335, 64, 64],~ - Inside source: true *** True Line Result [4582, 335, 64, 64], ** Processing line: ~ [4581, 275, 64, 64],~ - Inside source: true *** True Line Result [4581, 275, 64, 64], ** Processing line: ~ [4581, 215, 64, 64],~ - Inside source: true *** True Line Result [4581, 215, 64, 64], ** Processing line: ~ [4581, 152, 64, 64],~ - Inside source: true *** True Line Result [4581, 152, 64, 64], ** Processing line: ~ [4582, 89, 64, 64],~ - Inside source: true *** True Line Result [4582, 89, 64, 64], ** Processing line: ~ [4583, 51, 64, 64],~ - Inside source: true *** True Line Result [4583, 51, 64, 64], ** Processing line: ~ [4810, 289, 64, 64],~ - Inside source: true *** True Line Result [4810, 289, 64, 64], ** Processing line: ~ [4810, 227, 64, 64],~ - Inside source: true *** True Line Result [4810, 227, 64, 64], ** Processing line: ~ [4895, 189, 64, 64],~ - Inside source: true *** True Line Result [4895, 189, 64, 64], ** Processing line: ~ [4844, 191, 64, 64],~ - Inside source: true *** True Line Result [4844, 191, 64, 64], ** Processing line: ~ [4809, 191, 64, 64],~ - Inside source: true *** True Line Result [4809, 191, 64, 64], ** Processing line: ~ [5235, 233, 64, 64],~ - Inside source: true *** True Line Result [5235, 233, 64, 64], ** Processing line: ~ [5176, 232, 64, 64],~ - Inside source: true *** True Line Result [5176, 232, 64, 64], ** Processing line: ~ [5118, 230, 64, 64],~ - Inside source: true *** True Line Result [5118, 230, 64, 64], ** Processing line: ~ [5060, 232, 64, 64],~ - Inside source: true *** True Line Result [5060, 232, 64, 64], ** Processing line: ~ [5015, 237, 64, 64],~ - Inside source: true *** True Line Result [5015, 237, 64, 64], ** Processing line: ~ [5123, 171, 64, 64],~ - Inside source: true *** True Line Result [5123, 171, 64, 64], ** Processing line: ~ [5123, 114, 64, 64],~ - Inside source: true *** True Line Result [5123, 114, 64, 64], ** Processing line: ~ [5121, 51, 64, 64],~ - Inside source: true *** True Line Result [5121, 51, 64, 64], ** Processing line: ~ [5523, 461, 64, 64],~ - Inside source: true *** True Line Result [5523, 461, 64, 64], ** Processing line: ~ [5123, 42, 64, 64],~ - Inside source: true *** True Line Result [5123, 42, 64, 64], ** Processing line: ~ [5525, 401, 64, 64],~ - Inside source: true *** True Line Result [5525, 401, 64, 64], ** Processing line: ~ [5525, 340, 64, 64],~ - Inside source: true *** True Line Result [5525, 340, 64, 64], ** Processing line: ~ [5526, 273, 64, 64],~ - Inside source: true *** True Line Result [5526, 273, 64, 64], ** Processing line: ~ [5527, 211, 64, 64],~ - Inside source: true *** True Line Result [5527, 211, 64, 64], ** Processing line: ~ [5525, 150, 64, 64],~ - Inside source: true *** True Line Result [5525, 150, 64, 64], ** Processing line: ~ [5527, 84, 64, 64],~ - Inside source: true *** True Line Result [5527, 84, 64, 64], ** Processing line: ~ [5524, 44, 64, 64],~ - Inside source: true *** True Line Result [5524, 44, 64, 64], ** Processing line: ~ [5861, 288, 64, 64],~ - Inside source: true *** True Line Result [5861, 288, 64, 64], ** Processing line: ~ [5861, 229, 64, 64],~ - Inside source: true *** True Line Result [5861, 229, 64, 64], ** Processing line: ~ [5945, 193, 64, 64],~ - Inside source: true *** True Line Result [5945, 193, 64, 64], ** Processing line: ~ [5904, 193, 64, 64],~ - Inside source: true *** True Line Result [5904, 193, 64, 64], ** Processing line: ~ [5856, 194, 64, 64],~ - Inside source: true *** True Line Result [5856, 194, 64, 64], ** Processing line: ~ [6542, 234, 64, 64],~ - Inside source: true *** True Line Result [6542, 234, 64, 64], ** Processing line: ~ [6478, 235, 64, 64],~ - Inside source: true *** True Line Result [6478, 235, 64, 64], ** Processing line: ~ [6413, 238, 64, 64],~ - Inside source: true *** True Line Result [6413, 238, 64, 64], ** Processing line: ~ [6348, 235, 64, 64],~ - Inside source: true *** True Line Result [6348, 235, 64, 64], ** Processing line: ~ [6285, 236, 64, 64],~ - Inside source: true *** True Line Result [6285, 236, 64, 64], ** Processing line: ~ [6222, 235, 64, 64],~ - Inside source: true *** True Line Result [6222, 235, 64, 64], ** Processing line: ~ [6160, 235, 64, 64],~ - Inside source: true *** True Line Result [6160, 235, 64, 64], ** Processing line: ~ [6097, 236, 64, 64],~ - Inside source: true *** True Line Result [6097, 236, 64, 64], ** Processing line: ~ [6069, 237, 64, 64],~ - Inside source: true *** True Line Result [6069, 237, 64, 64], ** Processing line: ~ [6321, 174, 64, 64],~ - Inside source: true *** True Line Result [6321, 174, 64, 64], ** Processing line: ~ [6318, 111, 64, 64],~ - Inside source: true *** True Line Result [6318, 111, 64, 64], ** Processing line: ~ [6320, 49, 64, 64],~ - Inside source: true *** True Line Result [6320, 49, 64, 64], ** Processing line: ~ [6753, 291, 64, 64],~ - Inside source: true *** True Line Result [6753, 291, 64, 64], ** Processing line: ~ [6752, 227, 64, 64],~ - Inside source: true *** True Line Result [6752, 227, 64, 64], ** Processing line: ~ [6753, 192, 64, 64],~ - Inside source: true *** True Line Result [6753, 192, 64, 64], ** Processing line: ~ [6692, 191, 64, 64],~ - Inside source: true *** True Line Result [6692, 191, 64, 64], ** Processing line: ~ [6668, 193, 64, 64],~ - Inside source: true *** True Line Result [6668, 193, 64, 64], ** Processing line: ~ [6336, 604, 64, 64],~ - Inside source: true *** True Line Result [6336, 604, 64, 64], ** Processing line: ~ [6309, 603, 64, 64],~ - Inside source: true *** True Line Result [6309, 603, 64, 64], ** Processing line: ~ [7264, 461, 64, 64],~ - Inside source: true *** True Line Result [7264, 461, 64, 64], ** Processing line: ~ [7264, 395, 64, 64],~ - Inside source: true *** True Line Result [7264, 395, 64, 64], ** Processing line: ~ [7264, 333, 64, 64],~ - Inside source: true *** True Line Result [7264, 333, 64, 64], ** Processing line: ~ [7264, 270, 64, 64],~ - Inside source: true *** True Line Result [7264, 270, 64, 64], ** Processing line: ~ [7265, 207, 64, 64],~ - Inside source: true *** True Line Result [7265, 207, 64, 64], ** Processing line: ~ [7266, 138, 64, 64],~ - Inside source: true *** True Line Result [7266, 138, 64, 64], ** Processing line: ~ [7264, 78, 64, 64],~ - Inside source: true *** True Line Result [7264, 78, 64, 64], ** Processing line: ~ [7266, 48, 64, 64],~ - Inside source: true *** True Line Result [7266, 48, 64, 64], ** Processing line: ~ [7582, 149, 64, 64],~ - Inside source: true *** True Line Result [7582, 149, 64, 64], ** Processing line: ~ [7524, 147, 64, 64],~ - Inside source: true *** True Line Result [7524, 147, 64, 64], ** Processing line: ~ [7461, 146, 64, 64],~ - Inside source: true *** True Line Result [7461, 146, 64, 64], ** Processing line: ~ [7425, 148, 64, 64],~ - Inside source: true *** True Line Result [7425, 148, 64, 64], ** Processing line: ~ [7580, 86, 64, 64],~ - Inside source: true *** True Line Result [7580, 86, 64, 64], ** Processing line: ~ [7582, 41, 64, 64],~ - Inside source: true *** True Line Result [7582, 41, 64, 64], ** Processing line: ~ [7519, 41, 64, 64],~ - Inside source: true *** True Line Result [7519, 41, 64, 64], ** Processing line: ~ [7460, 40, 64, 64],~ - Inside source: true *** True Line Result [7460, 40, 64, 64], ** Processing line: ~ [7427, 96, 64, 64],~ - Inside source: true *** True Line Result [7427, 96, 64, 64], ** Processing line: ~ [7427, 41, 64, 64],~ - Inside source: true *** True Line Result [7427, 41, 64, 64], ** Processing line: ~ [8060, 288, 64, 64],~ - Inside source: true *** True Line Result [8060, 288, 64, 64], ** Processing line: ~ [8059, 226, 64, 64],~ - Inside source: true *** True Line Result [8059, 226, 64, 64], ** Processing line: ~ [8145, 194, 64, 64],~ - Inside source: true *** True Line Result [8145, 194, 64, 64], ** Processing line: ~ [8081, 194, 64, 64],~ - Inside source: true *** True Line Result [8081, 194, 64, 64], ** Processing line: ~ [8058, 195, 64, 64],~ - Inside source: true *** True Line Result [8058, 195, 64, 64], ** Processing line: ~ [8485, 234, 64, 64],~ - Inside source: true *** True Line Result [8485, 234, 64, 64], ** Processing line: ~ [8422, 235, 64, 64],~ - Inside source: true *** True Line Result [8422, 235, 64, 64], ** Processing line: ~ [8360, 235, 64, 64],~ - Inside source: true *** True Line Result [8360, 235, 64, 64], ** Processing line: ~ [8296, 235, 64, 64],~ - Inside source: true *** True Line Result [8296, 235, 64, 64], ** Processing line: ~ [8266, 237, 64, 64],~ - Inside source: true *** True Line Result [8266, 237, 64, 64], ** Processing line: ~ [8371, 173, 64, 64],~ - Inside source: true *** True Line Result [8371, 173, 64, 64], ** Processing line: ~ [8370, 117, 64, 64],~ - Inside source: true *** True Line Result [8370, 117, 64, 64], ** Processing line: ~ [8372, 59, 64, 64],~ - Inside source: true *** True Line Result [8372, 59, 64, 64], ** Processing line: ~ [8372, 51, 64, 64],~ - Inside source: true *** True Line Result [8372, 51, 64, 64], ** Processing line: ~ [9147, 192, 64, 64],~ - Inside source: true *** True Line Result [9147, 192, 64, 64], ** Processing line: ~ [9063, 287, 64, 64],~ - Inside source: true *** True Line Result [9063, 287, 64, 64], ** Processing line: ~ [9064, 225, 64, 64],~ - Inside source: true *** True Line Result [9064, 225, 64, 64], ** Processing line: ~ [9085, 193, 64, 64],~ - Inside source: true *** True Line Result [9085, 193, 64, 64], ** Processing line: ~ [9063, 194, 64, 64],~ - Inside source: true *** True Line Result [9063, 194, 64, 64], ** Processing line: ~ [9492, 234, 64, 64],~ - Inside source: true *** True Line Result [9492, 234, 64, 64], ** Processing line: ~ [9428, 234, 64, 64],~ - Inside source: true *** True Line Result [9428, 234, 64, 64], ** Processing line: ~ [9365, 235, 64, 64],~ - Inside source: true *** True Line Result [9365, 235, 64, 64], ** Processing line: ~ [9302, 235, 64, 64],~ - Inside source: true *** True Line Result [9302, 235, 64, 64], ** Processing line: ~ [9270, 237, 64, 64],~ - Inside source: true *** True Line Result [9270, 237, 64, 64], ** Processing line: ~ [9374, 172, 64, 64],~ - Inside source: true *** True Line Result [9374, 172, 64, 64], ** Processing line: ~ [9376, 109, 64, 64],~ - Inside source: true *** True Line Result [9376, 109, 64, 64], ** Processing line: ~ [9377, 48, 64, 64],~ - Inside source: true *** True Line Result [9377, 48, 64, 64], ** Processing line: ~ [9545, 1060, 64, 64],~ - Inside source: true *** True Line Result [9545, 1060, 64, 64], ** Processing line: ~ [9482, 1062, 64, 64],~ - Inside source: true *** True Line Result [9482, 1062, 64, 64], ** Processing line: ~ [9423, 1062, 64, 64],~ - Inside source: true *** True Line Result [9423, 1062, 64, 64], ** Processing line: ~ [9387, 1062, 64, 64],~ - Inside source: true *** True Line Result [9387, 1062, 64, 64], ** Processing line: ~ [9541, 999, 64, 64],~ - Inside source: true *** True Line Result [9541, 999, 64, 64], ** Processing line: ~ [9542, 953, 64, 64],~ - Inside source: true *** True Line Result [9542, 953, 64, 64], ** Processing line: ~ [9478, 953, 64, 64],~ - Inside source: true *** True Line Result [9478, 953, 64, 64], ** Processing line: ~ [9388, 999, 64, 64],~ - Inside source: true *** True Line Result [9388, 999, 64, 64], ** Processing line: ~ [9414, 953, 64, 64],~ - Inside source: true *** True Line Result [9414, 953, 64, 64], ** Processing line: ~ [9389, 953, 64, 64],~ - Inside source: true *** True Line Result [9389, 953, 64, 64], ** Processing line: ~ [9294, 1194, 64, 64],~ - Inside source: true *** True Line Result [9294, 1194, 64, 64], ** Processing line: ~ [9245, 1195, 64, 64],~ - Inside source: true *** True Line Result [9245, 1195, 64, 64], ** Processing line: ~ [9297, 1143, 64, 64],~ - Inside source: true *** True Line Result [9297, 1143, 64, 64], ** Processing line: ~ [9245, 1144, 64, 64],~ - Inside source: true *** True Line Result [9245, 1144, 64, 64], ** Processing line: ~ [5575, 1781, 64, 64],~ - Inside source: true *** True Line Result [5575, 1781, 64, 64], ** Processing line: ~ [5574, 1753, 64, 64],~ - Inside source: true *** True Line Result [5574, 1753, 64, 64], ** Processing line: ~ [5522, 1782, 64, 64],~ - Inside source: true *** True Line Result [5522, 1782, 64, 64], ** Processing line: ~ [5518, 1753, 64, 64],~ - Inside source: true *** True Line Result [5518, 1753, 64, 64], ** Processing line: ~ [5472, 1783, 64, 64],~ - Inside source: true *** True Line Result [5472, 1783, 64, 64], ** Processing line: ~ [5471, 1751, 64, 64],~ - Inside source: true *** True Line Result [5471, 1751, 64, 64], ** Processing line: ~ [5419, 1781, 64, 64],~ - Inside source: true *** True Line Result [5419, 1781, 64, 64], ** Processing line: ~ [5421, 1749, 64, 64],~ - Inside source: true *** True Line Result [5421, 1749, 64, 64], ** Processing line: ~ [500, 3207, 64, 64],~ - Inside source: true *** True Line Result [500, 3207, 64, 64], ** Processing line: ~ [477, 3205, 64, 64],~ - Inside source: true *** True Line Result [477, 3205, 64, 64], ** Processing line: ~ [1282, 3214, 64, 64],~ - Inside source: true *** True Line Result [1282, 3214, 64, 64], ** Processing line: ~ [1221, 3214, 64, 64],~ - Inside source: true *** True Line Result [1221, 3214, 64, 64], ** Processing line: ~ [1188, 3215, 64, 64],~ - Inside source: true *** True Line Result [1188, 3215, 64, 64], ** Processing line: ~ [1345, 3103, 64, 64],~ - Inside source: true *** True Line Result [1345, 3103, 64, 64], ** Processing line: ~ [1288, 3103, 64, 64],~ - Inside source: true *** True Line Result [1288, 3103, 64, 64], ** Processing line: ~ [1231, 3104, 64, 64],~ - Inside source: true *** True Line Result [1231, 3104, 64, 64], ** Processing line: ~ [1190, 3153, 64, 64],~ - Inside source: true *** True Line Result [1190, 3153, 64, 64], ** Processing line: ~ [1189, 3105, 64, 64],~ - Inside source: true *** True Line Result [1189, 3105, 64, 64], ** Processing line: ~ [2255, 3508, 64, 64],~ - Inside source: true *** True Line Result [2255, 3508, 64, 64], ** Processing line: ~ [2206, 3510, 64, 64],~ - Inside source: true *** True Line Result [2206, 3510, 64, 64], ** Processing line: ~ [2254, 3458, 64, 64],~ - Inside source: true *** True Line Result [2254, 3458, 64, 64], ** Processing line: ~ [2202, 3458, 64, 64],~ - Inside source: true *** True Line Result [2202, 3458, 64, 64], ** Processing line: ~ [2754, 2930, 64, 64],~ - Inside source: true *** True Line Result [2754, 2930, 64, 64], ** Processing line: ~ [2726, 2932, 64, 64],~ - Inside source: true *** True Line Result [2726, 2932, 64, 64], ** Processing line: ~ [3408, 2874, 64, 64],~ - Inside source: true *** True Line Result [3408, 2874, 64, 64], ** Processing line: ~ [3407, 2849, 64, 64],~ - Inside source: true *** True Line Result [3407, 2849, 64, 64], ** Processing line: ~ [3345, 2872, 64, 64],~ - Inside source: true *** True Line Result [3345, 2872, 64, 64], ** Processing line: ~ [3342, 2847, 64, 64],~ - Inside source: true *** True Line Result [3342, 2847, 64, 64], ** Processing line: ~ [3284, 2874, 64, 64],~ - Inside source: true *** True Line Result [3284, 2874, 64, 64], ** Processing line: ~ [3284, 2848, 64, 64],~ - Inside source: true *** True Line Result [3284, 2848, 64, 64], ** Processing line: ~ [3248, 2878, 64, 64],~ - Inside source: true *** True Line Result [3248, 2878, 64, 64], ** Processing line: ~ [3252, 2848, 64, 64],~ - Inside source: true *** True Line Result [3252, 2848, 64, 64], ** Processing line: ~ [3953, 3274, 64, 64],~ - Inside source: true *** True Line Result [3953, 3274, 64, 64], ** Processing line: ~ [3899, 3277, 64, 64],~ - Inside source: true *** True Line Result [3899, 3277, 64, 64], ** Processing line: ~ [3951, 3222, 64, 64],~ - Inside source: true *** True Line Result [3951, 3222, 64, 64], ** Processing line: ~ [3900, 3222, 64, 64],~ - Inside source: true *** True Line Result [3900, 3222, 64, 64], ** Processing line: ~ [4310, 2968, 64, 64],~ - Inside source: true *** True Line Result [4310, 2968, 64, 64], ** Processing line: ~ [4246, 2969, 64, 64],~ - Inside source: true *** True Line Result [4246, 2969, 64, 64], ** Processing line: ~ [4183, 2965, 64, 64],~ - Inside source: true *** True Line Result [4183, 2965, 64, 64], ** Processing line: ~ [4153, 2967, 64, 64],~ - Inside source: true *** True Line Result [4153, 2967, 64, 64], ** Processing line: ~ [4311, 2910, 64, 64],~ - Inside source: true *** True Line Result [4311, 2910, 64, 64], ** Processing line: ~ [4308, 2856, 64, 64],~ - Inside source: true *** True Line Result [4308, 2856, 64, 64], ** Processing line: ~ [4251, 2855, 64, 64],~ - Inside source: true *** True Line Result [4251, 2855, 64, 64], ** Processing line: ~ [4197, 2857, 64, 64],~ - Inside source: true *** True Line Result [4197, 2857, 64, 64], ** Processing line: ~ [5466, 3184, 64, 64],~ - Inside source: true *** True Line Result [5466, 3184, 64, 64], ** Processing line: ~ [5466, 3158, 64, 64],~ - Inside source: true *** True Line Result [5466, 3158, 64, 64], ** Processing line: ~ [5404, 3184, 64, 64],~ - Inside source: true *** True Line Result [5404, 3184, 64, 64], ** Processing line: ~ [5404, 3156, 64, 64],~ - Inside source: true *** True Line Result [5404, 3156, 64, 64], ** Processing line: ~ [5343, 3185, 64, 64],~ - Inside source: true *** True Line Result [5343, 3185, 64, 64], ** Processing line: ~ [5342, 3156, 64, 64],~ - Inside source: true *** True Line Result [5342, 3156, 64, 64], ** Processing line: ~ [5308, 3185, 64, 64],~ - Inside source: true *** True Line Result [5308, 3185, 64, 64], ** Processing line: ~ [5307, 3154, 64, 64],~ - Inside source: true *** True Line Result [5307, 3154, 64, 64], ** Processing line: ~ [6163, 2950, 64, 64],~ - Inside source: true *** True Line Result [6163, 2950, 64, 64], ** Processing line: ~ [6111, 2952, 64, 64],~ - Inside source: true *** True Line Result [6111, 2952, 64, 64], ** Processing line: ~ [6164, 2898, 64, 64],~ - Inside source: true *** True Line Result [6164, 2898, 64, 64], ** Processing line: ~ [6113, 2897, 64, 64],~ - Inside source: true *** True Line Result [6113, 2897, 64, 64], ** Processing line: ~ [7725, 3156, 64, 64],~ - Inside source: true *** True Line Result [7725, 3156, 64, 64], ** Processing line: ~ [7661, 3157, 64, 64],~ - Inside source: true *** True Line Result [7661, 3157, 64, 64], ** Processing line: ~ [7598, 3157, 64, 64],~ - Inside source: true *** True Line Result [7598, 3157, 64, 64], ** Processing line: ~ [7533, 3156, 64, 64],~ - Inside source: true *** True Line Result [7533, 3156, 64, 64], ** Processing line: ~ [7468, 3156, 64, 64],~ - Inside source: true *** True Line Result [7468, 3156, 64, 64], ** Processing line: ~ [7401, 3156, 64, 64],~ - Inside source: true *** True Line Result [7401, 3156, 64, 64], ** Processing line: ~ [7335, 3157, 64, 64],~ - Inside source: true *** True Line Result [7335, 3157, 64, 64], ** Processing line: ~ [7270, 3157, 64, 64],~ - Inside source: true *** True Line Result [7270, 3157, 64, 64], ** Processing line: ~ [7208, 3157, 64, 64],~ - Inside source: true *** True Line Result [7208, 3157, 64, 64], ** Processing line: ~ [7146, 3157, 64, 64],~ - Inside source: true *** True Line Result [7146, 3157, 64, 64], ** Processing line: ~ [7134, 3159, 64, 64],~ - Inside source: true *** True Line Result [7134, 3159, 64, 64], ** Processing line: ~ [6685, 3726, 64, 64],~ - Inside source: true *** True Line Result [6685, 3726, 64, 64], ** Processing line: ~ [6685, 3663, 64, 64],~ - Inside source: true *** True Line Result [6685, 3663, 64, 64], ** Processing line: ~ [6683, 3602, 64, 64],~ - Inside source: true *** True Line Result [6683, 3602, 64, 64], ** Processing line: ~ [6679, 3538, 64, 64],~ - Inside source: true *** True Line Result [6679, 3538, 64, 64], ** Processing line: ~ [6680, 3474, 64, 64],~ - Inside source: true *** True Line Result [6680, 3474, 64, 64], ** Processing line: ~ [6682, 3413, 64, 64],~ - Inside source: true *** True Line Result [6682, 3413, 64, 64], ** Processing line: ~ [6681, 3347, 64, 64],~ - Inside source: true *** True Line Result [6681, 3347, 64, 64], ** Processing line: ~ [6681, 3287, 64, 64],~ - Inside source: true *** True Line Result [6681, 3287, 64, 64], ** Processing line: ~ [6682, 3223, 64, 64],~ - Inside source: true *** True Line Result [6682, 3223, 64, 64], ** Processing line: ~ [6683, 3161, 64, 64],~ - Inside source: true *** True Line Result [6683, 3161, 64, 64], ** Processing line: ~ [6682, 3102, 64, 64],~ - Inside source: true *** True Line Result [6682, 3102, 64, 64], ** Processing line: ~ [6684, 3042, 64, 64],~ - Inside source: true *** True Line Result [6684, 3042, 64, 64], ** Processing line: ~ [6685, 2980, 64, 64],~ - Inside source: true *** True Line Result [6685, 2980, 64, 64], ** Processing line: ~ [6685, 2920, 64, 64],~ - Inside source: true *** True Line Result [6685, 2920, 64, 64], ** Processing line: ~ [6683, 2859, 64, 64],~ - Inside source: true *** True Line Result [6683, 2859, 64, 64], ** Processing line: ~ [6684, 2801, 64, 64],~ - Inside source: true *** True Line Result [6684, 2801, 64, 64], ** Processing line: ~ [6686, 2743, 64, 64],~ - Inside source: true *** True Line Result [6686, 2743, 64, 64], ** Processing line: ~ [6683, 2683, 64, 64],~ - Inside source: true *** True Line Result [6683, 2683, 64, 64], ** Processing line: ~ [6681, 2622, 64, 64],~ - Inside source: true *** True Line Result [6681, 2622, 64, 64], ** Processing line: ~ [6682, 2559, 64, 64],~ - Inside source: true *** True Line Result [6682, 2559, 64, 64], ** Processing line: ~ [6683, 2498, 64, 64],~ - Inside source: true *** True Line Result [6683, 2498, 64, 64], ** Processing line: ~ [6685, 2434, 64, 64],~ - Inside source: true *** True Line Result [6685, 2434, 64, 64], ** Processing line: ~ [6683, 2371, 64, 64],~ - Inside source: true *** True Line Result [6683, 2371, 64, 64], ** Processing line: ~ [6683, 2306, 64, 64],~ - Inside source: true *** True Line Result [6683, 2306, 64, 64], ** Processing line: ~ [6684, 2242, 64, 64],~ - Inside source: true *** True Line Result [6684, 2242, 64, 64], ** Processing line: ~ [6683, 2177, 64, 64],~ - Inside source: true *** True Line Result [6683, 2177, 64, 64], ** Processing line: ~ [6683, 2112, 64, 64],~ - Inside source: true *** True Line Result [6683, 2112, 64, 64], ** Processing line: ~ [6683, 2049, 64, 64],~ - Inside source: true *** True Line Result [6683, 2049, 64, 64], ** Processing line: ~ [6683, 1985, 64, 64],~ - Inside source: true *** True Line Result [6683, 1985, 64, 64], ** Processing line: ~ [6682, 1923, 64, 64],~ - Inside source: true *** True Line Result [6682, 1923, 64, 64], ** Processing line: ~ [6683, 1860, 64, 64],~ - Inside source: true *** True Line Result [6683, 1860, 64, 64], ** Processing line: ~ [6685, 1797, 64, 64],~ - Inside source: true *** True Line Result [6685, 1797, 64, 64], ** Processing line: ~ [6684, 1735, 64, 64],~ - Inside source: true *** True Line Result [6684, 1735, 64, 64], ** Processing line: ~ [6685, 1724, 64, 64],~ - Inside source: true *** True Line Result [6685, 1724, 64, 64], ** Processing line: ~ [7088, 1967, 64, 64],~ - Inside source: true *** True Line Result [7088, 1967, 64, 64], ** Processing line: ~ [7026, 1966, 64, 64],~ - Inside source: true *** True Line Result [7026, 1966, 64, 64], ** Processing line: ~ [6964, 1967, 64, 64],~ - Inside source: true *** True Line Result [6964, 1967, 64, 64], ** Processing line: ~ [6900, 1965, 64, 64],~ - Inside source: true *** True Line Result [6900, 1965, 64, 64], ** Processing line: ~ [6869, 1969, 64, 64],~ - Inside source: true *** True Line Result [6869, 1969, 64, 64], ** Processing line: ~ [6972, 1904, 64, 64],~ - Inside source: true *** True Line Result [6972, 1904, 64, 64], ** Processing line: ~ [6974, 1840, 64, 64],~ - Inside source: true *** True Line Result [6974, 1840, 64, 64], ** Processing line: ~ [6971, 1776, 64, 64],~ - Inside source: true *** True Line Result [6971, 1776, 64, 64], ** Processing line: ~ [6971, 1716, 64, 64],~ - Inside source: true *** True Line Result [6971, 1716, 64, 64], ** Processing line: ~ [7168, 1979, 64, 64],~ - Inside source: true *** True Line Result [7168, 1979, 64, 64], ** Processing line: ~ [7170, 1919, 64, 64],~ - Inside source: true *** True Line Result [7170, 1919, 64, 64], ** Processing line: ~ [7169, 1882, 64, 64],~ - Inside source: true *** True Line Result [7169, 1882, 64, 64], ** Processing line: ~ [7115, 1880, 64, 64],~ - Inside source: true *** True Line Result [7115, 1880, 64, 64], ** Processing line: ~ [7086, 1881, 64, 64],~ - Inside source: true *** True Line Result [7086, 1881, 64, 64], ** Processing line: ~ [7725, 1837, 64, 64],~ - Inside source: true *** True Line Result [7725, 1837, 64, 64], ** Processing line: ~ [7724, 1776, 64, 64],~ - Inside source: true *** True Line Result [7724, 1776, 64, 64], ** Processing line: ~ [7724, 1728, 64, 64],~ - Inside source: true *** True Line Result [7724, 1728, 64, 64], ** Processing line: ~ [7661, 1727, 64, 64],~ - Inside source: true *** True Line Result [7661, 1727, 64, 64], ** Processing line: ~ [7603, 1728, 64, 64],~ - Inside source: true *** True Line Result [7603, 1728, 64, 64], ** Processing line: ~ [7571, 1837, 64, 64],~ - Inside source: true *** True Line Result [7571, 1837, 64, 64], ** Processing line: ~ [7570, 1774, 64, 64],~ - Inside source: true *** True Line Result [7570, 1774, 64, 64], ** Processing line: ~ [7572, 1725, 64, 64],~ - Inside source: true *** True Line Result [7572, 1725, 64, 64], ** Processing line: ~ [7859, 2134, 64, 64],~ - Inside source: true *** True Line Result [7859, 2134, 64, 64], ** Processing line: ~ [7858, 2070, 64, 64],~ - Inside source: true *** True Line Result [7858, 2070, 64, 64], ** Processing line: ~ [7858, 2008, 64, 64],~ - Inside source: true *** True Line Result [7858, 2008, 64, 64], ** Processing line: ~ [7860, 1942, 64, 64],~ - Inside source: true *** True Line Result [7860, 1942, 64, 64], ** Processing line: ~ [7856, 1878, 64, 64],~ - Inside source: true *** True Line Result [7856, 1878, 64, 64], ** Processing line: ~ [7860, 1813, 64, 64],~ - Inside source: true *** True Line Result [7860, 1813, 64, 64], ** Processing line: ~ [7859, 1750, 64, 64],~ - Inside source: true *** True Line Result [7859, 1750, 64, 64], ** Processing line: ~ [7856, 1724, 64, 64],~ - Inside source: true *** True Line Result [7856, 1724, 64, 64], ** Processing line: ~ [8155, 1837, 64, 64],~ - Inside source: true *** True Line Result [8155, 1837, 64, 64], ** Processing line: ~ [8092, 1839, 64, 64],~ - Inside source: true *** True Line Result [8092, 1839, 64, 64], ** Processing line: ~ [8032, 1838, 64, 64],~ - Inside source: true *** True Line Result [8032, 1838, 64, 64], ** Processing line: ~ [7999, 1839, 64, 64],~ - Inside source: true *** True Line Result [7999, 1839, 64, 64], ** Processing line: ~ [8153, 1773, 64, 64],~ - Inside source: true *** True Line Result [8153, 1773, 64, 64], ** Processing line: ~ [8154, 1731, 64, 64],~ - Inside source: true *** True Line Result [8154, 1731, 64, 64], ** Processing line: ~ [8090, 1730, 64, 64],~ - Inside source: true *** True Line Result [8090, 1730, 64, 64], ** Processing line: ~ [8035, 1732, 64, 64],~ - Inside source: true *** True Line Result [8035, 1732, 64, 64], ** Processing line: ~ [8003, 1776, 64, 64],~ - Inside source: true *** True Line Result [8003, 1776, 64, 64], ** Processing line: ~ [8003, 1730, 64, 64],~ - Inside source: true *** True Line Result [8003, 1730, 64, 64], ** Processing line: ~ [8421, 1978, 64, 64],~ - Inside source: true *** True Line Result [8421, 1978, 64, 64], ** Processing line: ~ [8420, 1917, 64, 64],~ - Inside source: true *** True Line Result [8420, 1917, 64, 64], ** Processing line: ~ [8505, 1878, 64, 64],~ - Inside source: true *** True Line Result [8505, 1878, 64, 64], ** Processing line: ~ [8443, 1881, 64, 64],~ - Inside source: true *** True Line Result [8443, 1881, 64, 64], ** Processing line: ~ [8420, 1882, 64, 64],~ - Inside source: true *** True Line Result [8420, 1882, 64, 64], ** Processing line: ~ [8847, 1908, 64, 64],~ - Inside source: true *** True Line Result [8847, 1908, 64, 64], ** Processing line: ~ [8783, 1908, 64, 64],~ - Inside source: true *** True Line Result [8783, 1908, 64, 64], ** Processing line: ~ [8718, 1910, 64, 64],~ - Inside source: true *** True Line Result [8718, 1910, 64, 64], ** Processing line: ~ [8654, 1910, 64, 64],~ - Inside source: true *** True Line Result [8654, 1910, 64, 64], ** Processing line: ~ [8628, 1911, 64, 64],~ - Inside source: true *** True Line Result [8628, 1911, 64, 64], ** Processing line: ~ [8729, 1847, 64, 64],~ - Inside source: true *** True Line Result [8729, 1847, 64, 64], ** Processing line: ~ [8731, 1781, 64, 64],~ - Inside source: true *** True Line Result [8731, 1781, 64, 64], ** Processing line: ~ [8731, 1721, 64, 64],~ - Inside source: true *** True Line Result [8731, 1721, 64, 64], ** Processing line: ~ [9058, 2135, 64, 64],~ - Inside source: true *** True Line Result [9058, 2135, 64, 64], ** Processing line: ~ [9056, 2073, 64, 64],~ - Inside source: true *** True Line Result [9056, 2073, 64, 64], ** Processing line: ~ [9058, 2006, 64, 64],~ - Inside source: true *** True Line Result [9058, 2006, 64, 64], ** Processing line: ~ [9057, 1939, 64, 64],~ - Inside source: true *** True Line Result [9057, 1939, 64, 64], ** Processing line: ~ [9058, 1876, 64, 64],~ - Inside source: true *** True Line Result [9058, 1876, 64, 64], ** Processing line: ~ [9056, 1810, 64, 64],~ - Inside source: true *** True Line Result [9056, 1810, 64, 64], ** Processing line: ~ [9059, 1745, 64, 64],~ - Inside source: true *** True Line Result [9059, 1745, 64, 64], ** Processing line: ~ [9060, 1722, 64, 64],~ - Inside source: true *** True Line Result [9060, 1722, 64, 64], ** Processing line: ~ [9273, 1977, 64, 64],~ - Inside source: true *** True Line Result [9273, 1977, 64, 64], ** Processing line: ~ [9273, 1912, 64, 64],~ - Inside source: true *** True Line Result [9273, 1912, 64, 64], ** Processing line: ~ [9358, 1883, 64, 64],~ - Inside source: true *** True Line Result [9358, 1883, 64, 64], ** Processing line: ~ [9298, 1881, 64, 64],~ - Inside source: true *** True Line Result [9298, 1881, 64, 64], ** Processing line: ~ [9270, 1883, 64, 64],~ - Inside source: true *** True Line Result [9270, 1883, 64, 64], ** Processing line: ~ [9699, 1910, 64, 64],~ - Inside source: true *** True Line Result [9699, 1910, 64, 64], ** Processing line: ~ [9637, 1910, 64, 64],~ - Inside source: true *** True Line Result [9637, 1910, 64, 64], ** Processing line: ~ [9576, 1910, 64, 64],~ - Inside source: true *** True Line Result [9576, 1910, 64, 64], ** Processing line: ~ [9512, 1911, 64, 64],~ - Inside source: true *** True Line Result [9512, 1911, 64, 64], ** Processing line: ~ [9477, 1912, 64, 64],~ - Inside source: true *** True Line Result [9477, 1912, 64, 64], ** Processing line: ~ [9584, 1846, 64, 64],~ - Inside source: true *** True Line Result [9584, 1846, 64, 64], ** Processing line: ~ [9585, 1783, 64, 64],~ - Inside source: true *** True Line Result [9585, 1783, 64, 64], ** Processing line: ~ [9586, 1719, 64, 64],~ - Inside source: true *** True Line Result [9586, 1719, 64, 64], ** Processing line: ~ [8320, 2788, 64, 64],~ - Inside source: true *** True Line Result [8320, 2788, 64, 64], ** Processing line: ~ [8256, 2789, 64, 64],~ - Inside source: true *** True Line Result [8256, 2789, 64, 64], ** Processing line: ~ [8192, 2789, 64, 64],~ - Inside source: true *** True Line Result [8192, 2789, 64, 64], ** Processing line: ~ [8180, 2789, 64, 64],~ - Inside source: true *** True Line Result [8180, 2789, 64, 64], ** Processing line: ~ [8319, 2730, 64, 64],~ - Inside source: true *** True Line Result [8319, 2730, 64, 64], ** Processing line: ~ [8319, 2671, 64, 64],~ - Inside source: true *** True Line Result [8319, 2671, 64, 64], ** Processing line: ~ [8319, 2639, 64, 64],~ - Inside source: true *** True Line Result [8319, 2639, 64, 64], ** Processing line: ~ [8259, 2639, 64, 64],~ - Inside source: true *** True Line Result [8259, 2639, 64, 64], ** Processing line: ~ [8202, 2639, 64, 64],~ - Inside source: true *** True Line Result [8202, 2639, 64, 64], ** Processing line: ~ [8179, 2727, 64, 64],~ - Inside source: true *** True Line Result [8179, 2727, 64, 64], ** Processing line: ~ [8178, 2665, 64, 64],~ - Inside source: true *** True Line Result [8178, 2665, 64, 64], ** Processing line: ~ [8177, 2636, 64, 64],~ - Inside source: true *** True Line Result [8177, 2636, 64, 64], ** Processing line: ~ [9360, 3138, 64, 64],~ - Inside source: true *** True Line Result [9360, 3138, 64, 64], ** Processing line: ~ [9296, 3137, 64, 64],~ - Inside source: true *** True Line Result [9296, 3137, 64, 64], ** Processing line: ~ [9235, 3139, 64, 64],~ - Inside source: true *** True Line Result [9235, 3139, 64, 64], ** Processing line: ~ [9174, 3139, 64, 64],~ - Inside source: true *** True Line Result [9174, 3139, 64, 64], ** Processing line: ~ [9113, 3138, 64, 64],~ - Inside source: true *** True Line Result [9113, 3138, 64, 64], ** Processing line: ~ [9050, 3138, 64, 64],~ - Inside source: true *** True Line Result [9050, 3138, 64, 64], ** Processing line: ~ [8988, 3138, 64, 64],~ - Inside source: true *** True Line Result [8988, 3138, 64, 64], ** Processing line: ~ [8925, 3138, 64, 64],~ - Inside source: true *** True Line Result [8925, 3138, 64, 64], ** Processing line: ~ [8860, 3136, 64, 64],~ - Inside source: true *** True Line Result [8860, 3136, 64, 64], ** Processing line: ~ [8797, 3136, 64, 64],~ - Inside source: true *** True Line Result [8797, 3136, 64, 64], ** Processing line: ~ [8770, 3138, 64, 64],~ - Inside source: true *** True Line Result [8770, 3138, 64, 64], ** Processing line: ~ [8827, 4171, 64, 64],~ - Inside source: true *** True Line Result [8827, 4171, 64, 64], ** Processing line: ~ [8827, 4107, 64, 64],~ - Inside source: true *** True Line Result [8827, 4107, 64, 64], ** Processing line: ~ [8827, 4043, 64, 64],~ - Inside source: true *** True Line Result [8827, 4043, 64, 64], ** Processing line: ~ [8827, 3978, 64, 64],~ - Inside source: true *** True Line Result [8827, 3978, 64, 64], ** Processing line: ~ [8825, 3914, 64, 64],~ - Inside source: true *** True Line Result [8825, 3914, 64, 64], ** Processing line: ~ [8824, 3858, 64, 64],~ - Inside source: true *** True Line Result [8824, 3858, 64, 64], ** Processing line: ~ [9635, 4234, 64, 64],~ - Inside source: true *** True Line Result [9635, 4234, 64, 64], ** Processing line: ~ [9584, 4235, 64, 64],~ - Inside source: true *** True Line Result [9584, 4235, 64, 64], ** Processing line: ~ [9634, 4187, 64, 64],~ - Inside source: true *** True Line Result [9634, 4187, 64, 64], ** Processing line: ~ [9582, 4183, 64, 64],~ - Inside source: true *** True Line Result [9582, 4183, 64, 64], ** Processing line: ~ [9402, 5114, 64, 64],~ - Inside source: true *** True Line Result [9402, 5114, 64, 64], ** Processing line: ~ [9402, 5087, 64, 64],~ - Inside source: true *** True Line Result [9402, 5087, 64, 64], ** Processing line: ~ [9347, 5113, 64, 64],~ - Inside source: true *** True Line Result [9347, 5113, 64, 64], ** Processing line: ~ [9345, 5086, 64, 64],~ - Inside source: true *** True Line Result [9345, 5086, 64, 64], ** Processing line: ~ [9287, 5114, 64, 64],~ - Inside source: true *** True Line Result [9287, 5114, 64, 64], ** Processing line: ~ [9285, 5085, 64, 64],~ - Inside source: true *** True Line Result [9285, 5085, 64, 64], ** Processing line: ~ [9245, 5114, 64, 64],~ - Inside source: true *** True Line Result [9245, 5114, 64, 64], ** Processing line: ~ [9244, 5086, 64, 64],~ - Inside source: true *** True Line Result [9244, 5086, 64, 64], ** Processing line: ~ [9336, 5445, 64, 64],~ - Inside source: true *** True Line Result [9336, 5445, 64, 64], ** Processing line: ~ [9285, 5445, 64, 64],~ - Inside source: true *** True Line Result [9285, 5445, 64, 64], ** Processing line: ~ [9337, 5395, 64, 64],~ - Inside source: true *** True Line Result [9337, 5395, 64, 64], ** Processing line: ~ [9283, 5393, 64, 64],~ - Inside source: true *** True Line Result [9283, 5393, 64, 64], ** Processing line: ~ [8884, 4968, 64, 64],~ - Inside source: true *** True Line Result [8884, 4968, 64, 64], ** Processing line: ~ [8884, 4939, 64, 64],~ - Inside source: true *** True Line Result [8884, 4939, 64, 64], ** Processing line: ~ [8822, 4967, 64, 64],~ - Inside source: true *** True Line Result [8822, 4967, 64, 64], ** Processing line: ~ [8823, 4940, 64, 64],~ - Inside source: true *** True Line Result [8823, 4940, 64, 64], ** Processing line: ~ [8765, 4967, 64, 64],~ - Inside source: true *** True Line Result [8765, 4967, 64, 64], ** Processing line: ~ [8762, 4937, 64, 64],~ - Inside source: true *** True Line Result [8762, 4937, 64, 64], ** Processing line: ~ [8726, 4969, 64, 64],~ - Inside source: true *** True Line Result [8726, 4969, 64, 64], ** Processing line: ~ [8727, 4939, 64, 64],~ - Inside source: true *** True Line Result [8727, 4939, 64, 64], ** Processing line: ~ [7946, 5248, 64, 64],~ - Inside source: true *** True Line Result [7946, 5248, 64, 64], ** Processing line: ~ [7945, 5220, 64, 64],~ - Inside source: true *** True Line Result [7945, 5220, 64, 64], ** Processing line: ~ [7887, 5248, 64, 64],~ - Inside source: true *** True Line Result [7887, 5248, 64, 64], ** Processing line: ~ [7886, 5219, 64, 64],~ - Inside source: true *** True Line Result [7886, 5219, 64, 64], ** Processing line: ~ [7830, 5248, 64, 64],~ - Inside source: true *** True Line Result [7830, 5248, 64, 64], ** Processing line: ~ [7827, 5218, 64, 64],~ - Inside source: true *** True Line Result [7827, 5218, 64, 64], ** Processing line: ~ [7781, 5248, 64, 64],~ - Inside source: true *** True Line Result [7781, 5248, 64, 64], ** Processing line: ~ [7781, 5216, 64, 64],~ - Inside source: true *** True Line Result [7781, 5216, 64, 64], ** Processing line: ~ [6648, 4762, 64, 64],~ - Inside source: true *** True Line Result [6648, 4762, 64, 64], ** Processing line: ~ [6621, 4761, 64, 64],~ - Inside source: true *** True Line Result [6621, 4761, 64, 64], ** Processing line: ~ [5011, 4446, 64, 64],~ - Inside source: true *** True Line Result [5011, 4446, 64, 64], ** Processing line: ~ [4982, 4444, 64, 64],~ - Inside source: true *** True Line Result [4982, 4444, 64, 64], ** Processing line: ~ [4146, 4641, 64, 64],~ - Inside source: true *** True Line Result [4146, 4641, 64, 64], ** Processing line: ~ [4092, 4643, 64, 64],~ - Inside source: true *** True Line Result [4092, 4643, 64, 64], ** Processing line: ~ [4145, 4589, 64, 64],~ - Inside source: true *** True Line Result [4145, 4589, 64, 64], ** Processing line: ~ [4091, 4590, 64, 64],~ - Inside source: true *** True Line Result [4091, 4590, 64, 64], ** Processing line: ~ [4139, 4497, 64, 64],~ - Inside source: true *** True Line Result [4139, 4497, 64, 64], ** Processing line: ~ [4135, 4437, 64, 64],~ - Inside source: true *** True Line Result [4135, 4437, 64, 64], ** Processing line: ~ [4135, 4383, 64, 64],~ - Inside source: true *** True Line Result [4135, 4383, 64, 64], ** Processing line: ~ [4078, 4495, 64, 64],~ - Inside source: true *** True Line Result [4078, 4495, 64, 64], ** Processing line: ~ [4014, 4494, 64, 64],~ - Inside source: true *** True Line Result [4014, 4494, 64, 64], ** Processing line: ~ [3979, 4496, 64, 64],~ - Inside source: true *** True Line Result [3979, 4496, 64, 64], ** Processing line: ~ [4074, 4384, 64, 64],~ - Inside source: true *** True Line Result [4074, 4384, 64, 64], ** Processing line: ~ [4015, 4381, 64, 64],~ - Inside source: true *** True Line Result [4015, 4381, 64, 64], ** Processing line: ~ [3980, 4433, 64, 64],~ - Inside source: true *** True Line Result [3980, 4433, 64, 64], ** Processing line: ~ [3981, 4384, 64, 64],~ - Inside source: true *** True Line Result [3981, 4384, 64, 64], ** Processing line: ~ [3276, 4279, 64, 64],~ - Inside source: true *** True Line Result [3276, 4279, 64, 64], ** Processing line: ~ [3275, 4218, 64, 64],~ - Inside source: true *** True Line Result [3275, 4218, 64, 64], ** Processing line: ~ [3276, 4170, 64, 64],~ - Inside source: true *** True Line Result [3276, 4170, 64, 64], ** Processing line: ~ [3211, 4164, 64, 64],~ - Inside source: true *** True Line Result [3211, 4164, 64, 64], ** Processing line: ~ [3213, 4280, 64, 64],~ - Inside source: true *** True Line Result [3213, 4280, 64, 64], ** Processing line: ~ [3156, 4278, 64, 64],~ - Inside source: true *** True Line Result [3156, 4278, 64, 64], ** Processing line: ~ [3120, 4278, 64, 64],~ - Inside source: true *** True Line Result [3120, 4278, 64, 64], ** Processing line: ~ [3151, 4163, 64, 64],~ - Inside source: true *** True Line Result [3151, 4163, 64, 64], ** Processing line: ~ [3120, 4216, 64, 64],~ - Inside source: true *** True Line Result [3120, 4216, 64, 64], ** Processing line: ~ [3120, 4161, 64, 64],~ - Inside source: true *** True Line Result [3120, 4161, 64, 64], ** Processing line: ~ [1536, 4171, 64, 64],~ - Inside source: true *** True Line Result [1536, 4171, 64, 64], ** Processing line: ~ [1536, 4110, 64, 64],~ - Inside source: true *** True Line Result [1536, 4110, 64, 64], ** Processing line: ~ [1535, 4051, 64, 64],~ - Inside source: true *** True Line Result [1535, 4051, 64, 64], ** Processing line: ~ [1536, 3991, 64, 64],~ - Inside source: true *** True Line Result [1536, 3991, 64, 64], ** Processing line: ~ [1536, 3928, 64, 64],~ - Inside source: true *** True Line Result [1536, 3928, 64, 64], ** Processing line: ~ [1536, 3863, 64, 64],~ - Inside source: true *** True Line Result [1536, 3863, 64, 64], ** Processing line: ~ [1078, 4605, 64, 64],~ - Inside source: true *** True Line Result [1078, 4605, 64, 64], ** Processing line: ~ [1076, 4577, 64, 64],~ - Inside source: true *** True Line Result [1076, 4577, 64, 64], ** Processing line: ~ [1018, 4604, 64, 64],~ - Inside source: true *** True Line Result [1018, 4604, 64, 64], ** Processing line: ~ [1018, 4575, 64, 64],~ - Inside source: true *** True Line Result [1018, 4575, 64, 64], ** Processing line: ~ [957, 4606, 64, 64],~ - Inside source: true *** True Line Result [957, 4606, 64, 64], ** Processing line: ~ [960, 4575, 64, 64],~ - Inside source: true *** True Line Result [960, 4575, 64, 64], ** Processing line: ~ [918, 4602, 64, 64],~ - Inside source: true *** True Line Result [918, 4602, 64, 64], ** Processing line: ~ [918, 4580, 64, 64],~ - Inside source: true *** True Line Result [918, 4580, 64, 64], ** Processing line: ~ [394, 4164, 64, 64],~ - Inside source: true *** True Line Result [394, 4164, 64, 64], ** Processing line: ~ [335, 4163, 64, 64],~ - Inside source: true *** True Line Result [335, 4163, 64, 64], ** Processing line: ~ [274, 4161, 64, 64],~ - Inside source: true *** True Line Result [274, 4161, 64, 64], ** Processing line: ~ [236, 4163, 64, 64],~ - Inside source: true *** True Line Result [236, 4163, 64, 64], ** Processing line: ~ [394, 4140, 64, 64],~ - Inside source: true *** True Line Result [394, 4140, 64, 64], ** Processing line: ~ [329, 4139, 64, 64],~ - Inside source: true *** True Line Result [329, 4139, 64, 64], ** Processing line: ~ [268, 4139, 64, 64],~ - Inside source: true *** True Line Result [268, 4139, 64, 64], ** Processing line: ~ [239, 4139, 64, 64],~ - Inside source: true *** True Line Result [239, 4139, 64, 64], ** Processing line: ~ [4326, 5073, 64, 64],~ - Inside source: true *** True Line Result [4326, 5073, 64, 64], ** Processing line: ~ [4324, 5042, 64, 64],~ - Inside source: true *** True Line Result [4324, 5042, 64, 64], ** Processing line: ~ [4265, 5074, 64, 64],~ - Inside source: true *** True Line Result [4265, 5074, 64, 64], ** Processing line: ~ [4263, 5042, 64, 64],~ - Inside source: true *** True Line Result [4263, 5042, 64, 64], ** Processing line: ~ [4214, 5072, 64, 64],~ - Inside source: true *** True Line Result [4214, 5072, 64, 64], ** Processing line: ~ [4211, 5043, 64, 64],~ - Inside source: true *** True Line Result [4211, 5043, 64, 64], ** Processing line: ~ [4166, 5073, 64, 64],~ - Inside source: true *** True Line Result [4166, 5073, 64, 64], ** Processing line: ~ [4164, 5041, 64, 64],~ - Inside source: true *** True Line Result [4164, 5041, 64, 64], ** Processing line: ~ [4844, 5216, 64, 64],~ - Inside source: true *** True Line Result [4844, 5216, 64, 64], ** Processing line: ~ [4844, 5189, 64, 64],~ - Inside source: true *** True Line Result [4844, 5189, 64, 64], ** Processing line: ~ [4785, 5217, 64, 64],~ - Inside source: true *** True Line Result [4785, 5217, 64, 64], ** Processing line: ~ [4790, 5187, 64, 64],~ - Inside source: true *** True Line Result [4790, 5187, 64, 64], ** Processing line: ~ [4726, 5219, 64, 64],~ - Inside source: true *** True Line Result [4726, 5219, 64, 64], ** Processing line: ~ [4728, 5185, 64, 64],~ - Inside source: true *** True Line Result [4728, 5185, 64, 64], ** Processing line: ~ [4681, 5218, 64, 64],~ - Inside source: true *** True Line Result [4681, 5218, 64, 64], ** Processing line: ~ [4684, 5186, 64, 64],~ - Inside source: true *** True Line Result [4684, 5186, 64, 64], ** Processing line: ~ [4789, 4926, 64, 64],~ - Inside source: true *** True Line Result [4789, 4926, 64, 64], ** Processing line: ~ [4734, 4928, 64, 64],~ - Inside source: true *** True Line Result [4734, 4928, 64, 64], ** Processing line: ~ [4787, 4876, 64, 64],~ - Inside source: true *** True Line Result [4787, 4876, 64, 64], ** Processing line: ~ [4738, 4874, 64, 64],~ - Inside source: true *** True Line Result [4738, 4874, 64, 64], ** Processing line: ~ [4775, 5548, 64, 64],~ - Inside source: true *** True Line Result [4775, 5548, 64, 64], ** Processing line: ~ [4775, 5495, 64, 64],~ - Inside source: true *** True Line Result [4775, 5495, 64, 64], ** Processing line: ~ [4723, 5550, 64, 64],~ - Inside source: true *** True Line Result [4723, 5550, 64, 64], ** Processing line: ~ [4725, 5494, 64, 64],~ - Inside source: true *** True Line Result [4725, 5494, 64, 64], ** Processing line: ~ [1360, 5269, 64, 64],~ - Inside source: true *** True Line Result [1360, 5269, 64, 64], ** Processing line: ~ [1362, 5218, 64, 64],~ - Inside source: true *** True Line Result [1362, 5218, 64, 64], ** Processing line: ~ [1315, 5266, 64, 64],~ - Inside source: true *** True Line Result [1315, 5266, 64, 64], ** Processing line: ~ [1282, 5266, 64, 64],~ - Inside source: true *** True Line Result [1282, 5266, 64, 64], ** Processing line: ~ [1246, 5311, 64, 64],~ - Inside source: true *** True Line Result [1246, 5311, 64, 64], ** Processing line: ~ [1190, 5312, 64, 64],~ - Inside source: true *** True Line Result [1190, 5312, 64, 64], ** Processing line: ~ [1136, 5310, 64, 64],~ - Inside source: true *** True Line Result [1136, 5310, 64, 64], ** Processing line: ~ [1121, 5427, 64, 64],~ - Inside source: true *** True Line Result [1121, 5427, 64, 64], ** Processing line: ~ [1121, 5370, 64, 64],~ - Inside source: true *** True Line Result [1121, 5370, 64, 64], ** Processing line: ~ [1074, 5427, 64, 64],~ - Inside source: true *** True Line Result [1074, 5427, 64, 64], ** Processing line: ~ [1064, 5423, 64, 64],~ - Inside source: true *** True Line Result [1064, 5423, 64, 64], ** Processing line: ~ [1052, 5417, 64, 64],~ - Inside source: true *** True Line Result [1052, 5417, 64, 64], ** Processing line: ~ [1050, 5368, 64, 64],~ - Inside source: true *** True Line Result [1050, 5368, 64, 64], ** Processing line: ~ [1008, 5314, 64, 64],~ - Inside source: true *** True Line Result [1008, 5314, 64, 64], ** Processing line: ~ [997, 5307, 64, 64],~ - Inside source: true *** True Line Result [997, 5307, 64, 64], ** Processing line: ~ [977, 5299, 64, 64],~ - Inside source: true *** True Line Result [977, 5299, 64, 64], ** Processing line: ~ [976, 5248, 64, 64],~ - Inside source: true *** True Line Result [976, 5248, 64, 64], ** Processing line: ~ [825, 5267, 64, 64],~ - Inside source: true *** True Line Result [825, 5267, 64, 64], ** Processing line: ~ [826, 5213, 64, 64],~ - Inside source: true *** True Line Result [826, 5213, 64, 64], ** Processing line: ~ [776, 5267, 64, 64],~ - Inside source: true *** True Line Result [776, 5267, 64, 64], ** Processing line: ~ [768, 5261, 64, 64],~ - Inside source: true *** True Line Result [768, 5261, 64, 64], ** Processing line: ~ [755, 5256, 64, 64],~ - Inside source: true *** True Line Result [755, 5256, 64, 64], ** Processing line: ~ [753, 5209, 64, 64],~ - Inside source: true *** True Line Result [753, 5209, 64, 64], ** Processing line: ~ [1299, 5206, 64, 64],~ - Inside source: true *** True Line Result [1299, 5206, 64, 64], ** Processing line: ~ [1238, 5204, 64, 64],~ - Inside source: true *** True Line Result [1238, 5204, 64, 64], ** Processing line: ~ [1178, 5203, 64, 64],~ - Inside source: true *** True Line Result [1178, 5203, 64, 64], ** Processing line: ~ [1124, 5204, 64, 64],~ - Inside source: true *** True Line Result [1124, 5204, 64, 64], ** Processing line: ~ [1065, 5206, 64, 64],~ - Inside source: true *** True Line Result [1065, 5206, 64, 64], ** Processing line: ~ [1008, 5203, 64, 64],~ - Inside source: true *** True Line Result [1008, 5203, 64, 64], ** Processing line: ~ [977, 5214, 64, 64],~ - Inside source: true *** True Line Result [977, 5214, 64, 64], ** Processing line: ~ [410, 5313, 64, 64],~ - Inside source: true *** True Line Result [410, 5313, 64, 64], ** Processing line: ~ [407, 5249, 64, 64],~ - Inside source: true *** True Line Result [407, 5249, 64, 64], ** Processing line: ~ [411, 5225, 64, 64],~ - Inside source: true *** True Line Result [411, 5225, 64, 64], ** Processing line: ~ [397, 5217, 64, 64],~ - Inside source: true *** True Line Result [397, 5217, 64, 64], ** Processing line: ~ [378, 5209, 64, 64],~ - Inside source: true *** True Line Result [378, 5209, 64, 64], ** Processing line: ~ [358, 5312, 64, 64],~ - Inside source: true *** True Line Result [358, 5312, 64, 64], ** Processing line: ~ [287, 5427, 64, 64],~ - Inside source: true *** True Line Result [287, 5427, 64, 64], ** Processing line: ~ [286, 5364, 64, 64],~ - Inside source: true *** True Line Result [286, 5364, 64, 64], ** Processing line: ~ [300, 5313, 64, 64],~ - Inside source: true *** True Line Result [300, 5313, 64, 64], ** Processing line: ~ [242, 5427, 64, 64],~ - Inside source: true *** True Line Result [242, 5427, 64, 64], ** Processing line: ~ [229, 5420, 64, 64],~ - Inside source: true *** True Line Result [229, 5420, 64, 64], ** Processing line: ~ [217, 5416, 64, 64],~ - Inside source: true *** True Line Result [217, 5416, 64, 64], ** Processing line: ~ [215, 5364, 64, 64],~ - Inside source: true *** True Line Result [215, 5364, 64, 64], ** Processing line: ~ [174, 5311, 64, 64],~ - Inside source: true *** True Line Result [174, 5311, 64, 64], ** Processing line: ~ [165, 5308, 64, 64],~ - Inside source: true *** True Line Result [165, 5308, 64, 64], ** Processing line: ~ [139, 5300, 64, 64],~ - Inside source: true *** True Line Result [139, 5300, 64, 64], ** Processing line: ~ [141, 5236, 64, 64],~ - Inside source: true *** True Line Result [141, 5236, 64, 64], ** Processing line: ~ [141, 5211, 64, 64],~ - Inside source: true *** True Line Result [141, 5211, 64, 64], ** Processing line: ~ [315, 5208, 64, 64],~ - Inside source: true *** True Line Result [315, 5208, 64, 64], ** Processing line: ~ [251, 5208, 64, 64],~ - Inside source: true *** True Line Result [251, 5208, 64, 64], ** Processing line: ~ [211, 5211, 64, 64],~ - Inside source: true *** True Line Result [211, 5211, 64, 64], ** Processing line: ~ [8050, 4060, 64, 64],~ - Inside source: true *** True Line Result [8050, 4060, 64, 64], ** Processing line: ~ [7992, 4060, 64, 64],~ - Inside source: true *** True Line Result [7992, 4060, 64, 64], ** Processing line: ~ [7929, 4060, 64, 64],~ - Inside source: true *** True Line Result [7929, 4060, 64, 64], ** Processing line: ~ [7866, 4061, 64, 64],~ - Inside source: true *** True Line Result [7866, 4061, 64, 64], ** Processing line: ~ [7828, 4063, 64, 64],~ - Inside source: true *** True Line Result [7828, 4063, 64, 64], ** Processing line: ~ [7934, 4001, 64, 64],~ - Inside source: true *** True Line Result [7934, 4001, 64, 64], ** Processing line: ~ [7935, 3936, 64, 64],~ - Inside source: true *** True Line Result [7935, 3936, 64, 64], ** Processing line: ~ [7935, 3875, 64, 64],~ - Inside source: true *** True Line Result [7935, 3875, 64, 64], ** Processing line: ~ [7622, 4111, 64, 64],~ - Inside source: true *** True Line Result [7622, 4111, 64, 64], ** Processing line: ~ [7623, 4049, 64, 64],~ - Inside source: true *** True Line Result [7623, 4049, 64, 64], ** Processing line: ~ [7707, 4018, 64, 64],~ - Inside source: true *** True Line Result [7707, 4018, 64, 64], ** Processing line: ~ [7663, 4019, 64, 64],~ - Inside source: true *** True Line Result [7663, 4019, 64, 64], ** Processing line: ~ [7623, 4017, 64, 64],~ - Inside source: true *** True Line Result [7623, 4017, 64, 64], ** Processing line: ~ [7193, 4060, 64, 64],~ - Inside source: true *** True Line Result [7193, 4060, 64, 64], ** Processing line: ~ [7131, 4059, 64, 64],~ - Inside source: true *** True Line Result [7131, 4059, 64, 64], ** Processing line: ~ [7070, 4057, 64, 64],~ - Inside source: true *** True Line Result [7070, 4057, 64, 64], ** Processing line: ~ [7008, 4060, 64, 64],~ - Inside source: true *** True Line Result [7008, 4060, 64, 64], ** Processing line: ~ [6977, 4060, 64, 64],~ - Inside source: true *** True Line Result [6977, 4060, 64, 64], ** Processing line: ~ [7080, 3998, 64, 64],~ - Inside source: true *** True Line Result [7080, 3998, 64, 64], ** Processing line: ~ [7081, 3935, 64, 64],~ - Inside source: true *** True Line Result [7081, 3935, 64, 64], ** Processing line: ~ [7080, 3873, 64, 64],~ - Inside source: true *** True Line Result [7080, 3873, 64, 64], ** Processing line: ~ [6855, 4019, 64, 64],~ - Inside source: true *** True Line Result [6855, 4019, 64, 64], ** Processing line: ~ [6790, 4018, 64, 64],~ - Inside source: true *** True Line Result [6790, 4018, 64, 64], ** Processing line: ~ [6770, 4114, 64, 64],~ - Inside source: true *** True Line Result [6770, 4114, 64, 64], ** Processing line: ~ [6770, 4060, 64, 64],~ - Inside source: true *** True Line Result [6770, 4060, 64, 64], ** Processing line: ~ [6768, 4013, 64, 64],~ - Inside source: true *** True Line Result [6768, 4013, 64, 64], ** Processing line: ~ [6345, 4060, 64, 64],~ - Inside source: true *** True Line Result [6345, 4060, 64, 64], ** Processing line: ~ [6284, 4062, 64, 64],~ - Inside source: true *** True Line Result [6284, 4062, 64, 64], ** Processing line: ~ [6222, 4061, 64, 64],~ - Inside source: true *** True Line Result [6222, 4061, 64, 64], ** Processing line: ~ [6166, 4061, 64, 64],~ - Inside source: true *** True Line Result [6166, 4061, 64, 64], ** Processing line: ~ [6124, 4066, 64, 64],~ - Inside source: true *** True Line Result [6124, 4066, 64, 64], ** Processing line: ~ [6226, 3995, 64, 64],~ - Inside source: true *** True Line Result [6226, 3995, 64, 64], ** Processing line: ~ [6226, 3933, 64, 64],~ - Inside source: true *** True Line Result [6226, 3933, 64, 64], ** Processing line: ~ [6228, 3868, 64, 64],~ - Inside source: true *** True Line Result [6228, 3868, 64, 64], ** Processing line: ~ [5916, 4113, 64, 64],~ - Inside source: true *** True Line Result [5916, 4113, 64, 64], ** Processing line: ~ [5918, 4052, 64, 64],~ - Inside source: true *** True Line Result [5918, 4052, 64, 64], ** Processing line: ~ [6001, 4018, 64, 64],~ - Inside source: true *** True Line Result [6001, 4018, 64, 64], ** Processing line: ~ [5941, 4019, 64, 64],~ - Inside source: true *** True Line Result [5941, 4019, 64, 64], ** Processing line: ~ [5918, 4020, 64, 64],~ - Inside source: true *** True Line Result [5918, 4020, 64, 64], ** Processing line: ~ [5501, 4059, 64, 64],~ - Inside source: true *** True Line Result [5501, 4059, 64, 64], ** Processing line: ~ [5439, 4061, 64, 64],~ - Inside source: true *** True Line Result [5439, 4061, 64, 64], ** Processing line: ~ [5376, 4059, 64, 64],~ - Inside source: true *** True Line Result [5376, 4059, 64, 64], ** Processing line: ~ [5312, 4058, 64, 64],~ - Inside source: true *** True Line Result [5312, 4058, 64, 64], ** Processing line: ~ [5285, 4062, 64, 64],~ - Inside source: true *** True Line Result [5285, 4062, 64, 64], ** Processing line: ~ [5388, 3999, 64, 64],~ - Inside source: true *** True Line Result [5388, 3999, 64, 64], ** Processing line: ~ [5385, 3941, 64, 64],~ - Inside source: true *** True Line Result [5385, 3941, 64, 64], ** Processing line: ~ [5384, 3874, 64, 64],~ - Inside source: true *** True Line Result [5384, 3874, 64, 64], ** Processing line: ~ [5075, 4112, 64, 64],~ - Inside source: true *** True Line Result [5075, 4112, 64, 64], ** Processing line: ~ [5074, 4051, 64, 64],~ - Inside source: true *** True Line Result [5074, 4051, 64, 64], ** Processing line: ~ [5158, 4018, 64, 64],~ - Inside source: true *** True Line Result [5158, 4018, 64, 64], ** Processing line: ~ [5095, 4020, 64, 64],~ - Inside source: true *** True Line Result [5095, 4020, 64, 64], ** Processing line: ~ [5073, 4018, 64, 64],~ - Inside source: true *** True Line Result [5073, 4018, 64, 64], ** Processing line: ~ [4549, 3998, 64, 64],~ - Inside source: true *** True Line Result [4549, 3998, 64, 64], ** Processing line: ~ [4393, 3996, 64, 64],~ - Inside source: true *** True Line Result [4393, 3996, 64, 64], ** Processing line: ~ [4547, 3938, 64, 64],~ - Inside source: true *** True Line Result [4547, 3938, 64, 64], ** Processing line: ~ [4547, 3886, 64, 64],~ - Inside source: true *** True Line Result [4547, 3886, 64, 64], ** Processing line: ~ [4488, 3885, 64, 64],~ - Inside source: true *** True Line Result [4488, 3885, 64, 64], ** Processing line: ~ [4427, 3885, 64, 64],~ - Inside source: true *** True Line Result [4427, 3885, 64, 64], ** Processing line: ~ [4395, 3938, 64, 64],~ - Inside source: true *** True Line Result [4395, 3938, 64, 64], ** Processing line: ~ [4395, 3885, 64, 64],~ - Inside source: true *** True Line Result [4395, 3885, 64, 64], ** Processing line: ~ [0, 0, 64, 64],~ - Inside source: true *** True Line Result [0, 0, 64, 64], ** Processing line: ~ [0, 1670, 64, 64],~ - Inside source: true *** True Line Result [0, 1670, 64, 64], ** Processing line: ~ [6691, 1653, 64, 64],~ - Inside source: true *** True Line Result [6691, 1653, 64, 64], ** Processing line: ~ [1521, 3792, 64, 64],~ - Inside source: true *** True Line Result [1521, 3792, 64, 64], ** Processing line: ~ [0, 5137, 64, 64],~ - Inside source: true *** True Line Result [0, 5137, 64, 64], ** Processing line: ~ [0, 0, 64, 64],~ - Inside source: true *** True Line Result [0, 0, 64, 64], ** Processing line: ~ [0, 1670, 64, 64],~ - Inside source: true *** True Line Result [0, 1670, 64, 64], ** Processing line: ~ [6691, 1653, 64, 64],~ - Inside source: true *** True Line Result [6691, 1653, 64, 64], ** Processing line: ~ [1521, 3792, 64, 64],~ - Inside source: true *** True Line Result [1521, 3792, 64, 64], ** Processing line: ~ [0, 5137, 64, 64],~ - Inside source: true *** True Line Result [0, 5137, 64, 64], ** Processing line: ~ [1215, 2421, 64, 64],~ - Inside source: true *** True Line Result [1215, 2421, 64, 64], ** Processing line: ~ [1214, 2360, 64, 64],~ - Inside source: true *** True Line Result [1214, 2360, 64, 64], ** Processing line: ~ [1211, 2300, 64, 64],~ - Inside source: true *** True Line Result [1211, 2300, 64, 64], ** Processing line: ~ [1211, 2291, 64, 64],~ - Inside source: true *** True Line Result [1211, 2291, 64, 64], ** Processing line: ~ [1158, 2420, 64, 64],~ - Inside source: true *** True Line Result [1158, 2420, 64, 64], ** Processing line: ~ [1156, 2358, 64, 64],~ - Inside source: true *** True Line Result [1156, 2358, 64, 64], ** Processing line: ~ [1149, 2291, 64, 64],~ - Inside source: true *** True Line Result [1149, 2291, 64, 64], ** Processing line: ~ [1095, 2420, 64, 64],~ - Inside source: true *** True Line Result [1095, 2420, 64, 64], ** Processing line: ~ [1030, 2418, 64, 64],~ - Inside source: true *** True Line Result [1030, 2418, 64, 64], ** Processing line: ~ [966, 2419, 64, 64],~ - Inside source: true *** True Line Result [966, 2419, 64, 64], ** Processing line: ~ [903, 2419, 64, 64],~ - Inside source: true *** True Line Result [903, 2419, 64, 64], ** Processing line: ~ [852, 2419, 64, 64],~ - Inside source: true *** True Line Result [852, 2419, 64, 64], ** Processing line: ~ [1087, 2291, 64, 64],~ - Inside source: true *** True Line Result [1087, 2291, 64, 64], ** Processing line: ~ [1023, 2291, 64, 64],~ - Inside source: true *** True Line Result [1023, 2291, 64, 64], ** Processing line: ~ [960, 2291, 64, 64],~ - Inside source: true *** True Line Result [960, 2291, 64, 64], ** Processing line: ~ [896, 2292, 64, 64],~ - Inside source: true *** True Line Result [896, 2292, 64, 64], ** Processing line: ~ [854, 2355, 64, 64],~ - Inside source: true *** True Line Result [854, 2355, 64, 64], ** Processing line: ~ [854, 2292, 64, 64],~ - Inside source: true *** True Line Result [854, 2292, 64, 64], ** Processing line: ~ [675, 3017, 64, 64],~ - Inside source: true *** True Line Result [675, 3017, 64, 64], ** Processing line: ~ [622, 3017, 64, 64],~ - Inside source: true *** True Line Result [622, 3017, 64, 64], ** Processing line: ~ [676, 2965, 64, 64],~ - Inside source: true *** True Line Result [676, 2965, 64, 64], ** Processing line: ~ [622, 2965, 64, 64],~ - Inside source: true *** True Line Result [622, 2965, 64, 64], ** Processing line: ~ [1560, 3212, 64, 64],~ - Inside source: true *** True Line Result [1560, 3212, 64, 64], ** Processing line: ~ [1496, 3212, 64, 64],~ - Inside source: true *** True Line Result [1496, 3212, 64, 64], ** Processing line: ~ [1430, 3211, 64, 64],~ - Inside source: true *** True Line Result [1430, 3211, 64, 64], ** Processing line: ~ [1346, 3214, 64, 64],~ - Inside source: true *** True Line Result [1346, 3214, 64, 64], ** Processing line: ~ [1410, 3213, 64, 64],~ - Inside source: true *** True Line Result [1410, 3213, 64, 64], ** Processing line: ~ [1560, 3147, 64, 64],~ - Inside source: true *** True Line Result [1560, 3147, 64, 64], ** Processing line: ~ [1559, 3105, 64, 64],~ - Inside source: true *** True Line Result [1559, 3105, 64, 64], ** Processing line: ~ [1496, 3105, 64, 64],~ - Inside source: true *** True Line Result [1496, 3105, 64, 64], ** Processing line: ~ [1442, 3105, 64, 64],~ - Inside source: true *** True Line Result [1442, 3105, 64, 64], ** Processing line: ~ [1412, 3106, 64, 64],~ - Inside source: true *** True Line Result [1412, 3106, 64, 64], ** Processing line: ~ [918, 4163, 64, 64],~ - Inside source: true *** True Line Result [918, 4163, 64, 64], ** Processing line: ~ [854, 4161, 64, 64],~ - Inside source: true *** True Line Result [854, 4161, 64, 64], ** Processing line: ~ [792, 4160, 64, 64],~ - Inside source: true *** True Line Result [792, 4160, 64, 64], ** Processing line: ~ [729, 4159, 64, 64],~ - Inside source: true *** True Line Result [729, 4159, 64, 64], ** Processing line: ~ [666, 4158, 64, 64],~ - Inside source: true *** True Line Result [666, 4158, 64, 64], ** Processing line: ~ [601, 4158, 64, 64],~ - Inside source: true *** True Line Result [601, 4158, 64, 64], ** Processing line: ~ [537, 4156, 64, 64],~ - Inside source: true *** True Line Result [537, 4156, 64, 64], ** Processing line: ~ [918, 4137, 64, 64],~ - Inside source: true *** True Line Result [918, 4137, 64, 64], ** Processing line: ~ [854, 4137, 64, 64],~ - Inside source: true *** True Line Result [854, 4137, 64, 64], ** Processing line: ~ [789, 4136, 64, 64],~ - Inside source: true *** True Line Result [789, 4136, 64, 64], ** Processing line: ~ [726, 4137, 64, 64],~ - Inside source: true *** True Line Result [726, 4137, 64, 64], ** Processing line: ~ [661, 4137, 64, 64],~ - Inside source: true *** True Line Result [661, 4137, 64, 64], ** Processing line: ~ [599, 4139, 64, 64],~ - Inside source: true *** True Line Result [599, 4139, 64, 64], ** Processing line: ~ [538, 4137, 64, 64],~ - Inside source: true *** True Line Result [538, 4137, 64, 64], ** Processing line: ~ [5378, 4254, 64, 64],~ - Inside source: true *** True Line Result [5378, 4254, 64, 64], ** Processing line: ~ [5440, 4204, 64, 64],~ - Inside source: true *** True Line Result [5440, 4204, 64, 64], ** Processing line: ~ [5405, 4214, 64, 64],~ - Inside source: true *** True Line Result [5405, 4214, 64, 64], ** Processing line: ~ [5350, 4254, 64, 64],~ - Inside source: true *** True Line Result [5350, 4254, 64, 64], ** Processing line: ~ [5439, 4177, 64, 64],~ - Inside source: true *** True Line Result [5439, 4177, 64, 64], ** Processing line: ~ [5413, 4173, 64, 64],~ - Inside source: true *** True Line Result [5413, 4173, 64, 64], ** Processing line: ~ [5399, 4128, 64, 64],~ - Inside source: true *** True Line Result [5399, 4128, 64, 64], ** Processing line: ~ [5352, 4200, 64, 64],~ - Inside source: true *** True Line Result [5352, 4200, 64, 64], ** Processing line: ~ [5352, 4158, 64, 64],~ - Inside source: true *** True Line Result [5352, 4158, 64, 64], ** Processing line: ~ [5392, 4130, 64, 64],~ - Inside source: true *** True Line Result [5392, 4130, 64, 64], ** Processing line: ~ [6216, 4251, 64, 64],~ - Inside source: true *** True Line Result [6216, 4251, 64, 64], ** Processing line: ~ [6190, 4251, 64, 64],~ - Inside source: true *** True Line Result [6190, 4251, 64, 64], ** Processing line: ~ [6279, 4200, 64, 64],~ - Inside source: true *** True Line Result [6279, 4200, 64, 64], ** Processing line: ~ [6262, 4205, 64, 64],~ - Inside source: true *** True Line Result [6262, 4205, 64, 64], ** Processing line: ~ [6233, 4214, 64, 64],~ - Inside source: true *** True Line Result [6233, 4214, 64, 64], ** Processing line: ~ [6280, 4172, 64, 64],~ - Inside source: true *** True Line Result [6280, 4172, 64, 64], ** Processing line: ~ [6256, 4169, 64, 64],~ - Inside source: true *** True Line Result [6256, 4169, 64, 64], ** Processing line: ~ [6239, 4128, 64, 64],~ - Inside source: true *** True Line Result [6239, 4128, 64, 64], ** Processing line: ~ [6231, 4128, 64, 64],~ - Inside source: true *** True Line Result [6231, 4128, 64, 64], ** Processing line: ~ [6191, 4195, 64, 64],~ - Inside source: true *** True Line Result [6191, 4195, 64, 64], ** Processing line: ~ [6190, 4158, 64, 64],~ - Inside source: true *** True Line Result [6190, 4158, 64, 64], ** Processing line: ~ [7072, 4250, 64, 64],~ - Inside source: true *** True Line Result [7072, 4250, 64, 64], ** Processing line: ~ [7046, 4250, 64, 64],~ - Inside source: true *** True Line Result [7046, 4250, 64, 64], ** Processing line: ~ [7133, 4202, 64, 64],~ - Inside source: true *** True Line Result [7133, 4202, 64, 64], ** Processing line: ~ [7107, 4209, 64, 64],~ - Inside source: true *** True Line Result [7107, 4209, 64, 64], ** Processing line: ~ [7086, 4214, 64, 64],~ - Inside source: true *** True Line Result [7086, 4214, 64, 64], ** Processing line: ~ [7133, 4173, 64, 64],~ - Inside source: true *** True Line Result [7133, 4173, 64, 64], ** Processing line: ~ [7108, 4169, 64, 64],~ - Inside source: true *** True Line Result [7108, 4169, 64, 64], ** Processing line: ~ [7092, 4127, 64, 64],~ - Inside source: true *** True Line Result [7092, 4127, 64, 64], ** Processing line: ~ [7084, 4128, 64, 64],~ - Inside source: true *** True Line Result [7084, 4128, 64, 64], ** Processing line: ~ [7047, 4191, 64, 64],~ - Inside source: true *** True Line Result [7047, 4191, 64, 64], ** Processing line: ~ [7047, 4156, 64, 64],~ - Inside source: true *** True Line Result [7047, 4156, 64, 64], ** Processing line: ~ [7926, 4252, 64, 64],~ - Inside source: true *** True Line Result [7926, 4252, 64, 64], ** Processing line: ~ [7900, 4253, 64, 64],~ - Inside source: true *** True Line Result [7900, 4253, 64, 64], ** Processing line: ~ [7987, 4202, 64, 64],~ - Inside source: true *** True Line Result [7987, 4202, 64, 64], ** Processing line: ~ [7965, 4209, 64, 64],~ - Inside source: true *** True Line Result [7965, 4209, 64, 64], ** Processing line: ~ [7942, 4216, 64, 64],~ - Inside source: true *** True Line Result [7942, 4216, 64, 64], ** Processing line: ~ [7989, 4174, 64, 64],~ - Inside source: true *** True Line Result [7989, 4174, 64, 64], ** Processing line: ~ [7970, 4170, 64, 64],~ - Inside source: true *** True Line Result [7970, 4170, 64, 64], ** Processing line: ~ [7949, 4126, 64, 64],~ - Inside source: true *** True Line Result [7949, 4126, 64, 64], ** Processing line: ~ [7901, 4196, 64, 64],~ - Inside source: true *** True Line Result [7901, 4196, 64, 64], ** Processing line: ~ [7900, 4159, 64, 64],~ - Inside source: true *** True Line Result [7900, 4159, 64, 64], ** Processing line: ~ [7941, 4130, 64, 64],~ - Inside source: true *** True Line Result [7941, 4130, 64, 64], ** Processing line: ~ [2847, 379, 64, 64],~ - Inside source: true *** True Line Result [2847, 379, 64, 64], ** Processing line: ~ [2825, 380, 64, 64],~ - Inside source: true *** True Line Result [2825, 380, 64, 64], ** Processing line: ~ [2845, 317, 64, 64],~ - Inside source: true *** True Line Result [2845, 317, 64, 64], ** Processing line: ~ [2829, 316, 64, 64],~ - Inside source: true *** True Line Result [2829, 316, 64, 64], ** Processing line: ~ [2845, 255, 64, 64],~ - Inside source: true *** True Line Result [2845, 255, 64, 64], ** Processing line: ~ [2830, 257, 64, 64],~ - Inside source: true *** True Line Result [2830, 257, 64, 64], ** Processing line: ~ [2845, 202, 64, 64],~ - Inside source: true *** True Line Result [2845, 202, 64, 64], ** Processing line: ~ [2829, 198, 64, 64],~ - Inside source: true *** True Line Result [2829, 198, 64, 64], ** Processing line: ~ [2770, 169, 64, 64],~ - Inside source: true *** True Line Result [2770, 169, 64, 64], ** Processing line: ~ [2708, 170, 64, 64],~ - Inside source: true *** True Line Result [2708, 170, 64, 64], ** Processing line: ~ [2646, 171, 64, 64],~ - Inside source: true *** True Line Result [2646, 171, 64, 64], ** Processing line: ~ [2582, 171, 64, 64],~ - Inside source: true *** True Line Result [2582, 171, 64, 64], ** Processing line: ~ [2518, 171, 64, 64],~ - Inside source: true *** True Line Result [2518, 171, 64, 64], ** Processing line: ~ [2454, 171, 64, 64],~ - Inside source: true *** True Line Result [2454, 171, 64, 64], ** Processing line: ~ [2391, 172, 64, 64],~ - Inside source: true *** True Line Result [2391, 172, 64, 64], ** Processing line: ~ [2332, 379, 64, 64],~ - Inside source: true *** True Line Result [2332, 379, 64, 64], ** Processing line: ~ [2315, 379, 64, 64],~ - Inside source: true *** True Line Result [2315, 379, 64, 64], ** Processing line: ~ [2334, 316, 64, 64],~ - Inside source: true *** True Line Result [2334, 316, 64, 64], ** Processing line: ~ [2315, 317, 64, 64],~ - Inside source: true *** True Line Result [2315, 317, 64, 64], ** Processing line: ~ [2332, 254, 64, 64],~ - Inside source: true *** True Line Result [2332, 254, 64, 64], ** Processing line: ~ [2314, 254, 64, 64],~ - Inside source: true *** True Line Result [2314, 254, 64, 64], ** Processing line: ~ [2335, 192, 64, 64],~ - Inside source: true *** True Line Result [2335, 192, 64, 64], ** Processing line: ~ [2311, 192, 64, 64],~ - Inside source: true *** True Line Result [2311, 192, 64, 64], ** Processing line: ~ [2846, 142, 64, 64],~ - Inside source: true *** True Line Result [2846, 142, 64, 64], ** Processing line: ~ [2784, 140, 64, 64],~ - Inside source: true *** True Line Result [2784, 140, 64, 64], ** Processing line: ~ [2846, 79, 64, 64],~ - Inside source: true *** True Line Result [2846, 79, 64, 64], ** Processing line: ~ [2847, 41, 64, 64],~ - Inside source: true *** True Line Result [2847, 41, 64, 64], ** Processing line: ~ [2783, 80, 64, 64],~ - Inside source: true *** True Line Result [2783, 80, 64, 64], ** Processing line: ~ [2790, 39, 64, 64],~ - Inside source: true *** True Line Result [2790, 39, 64, 64], ** Processing line: ~ [2727, 41, 64, 64],~ - Inside source: true *** True Line Result [2727, 41, 64, 64], ** Processing line: ~ [2665, 43, 64, 64],~ - Inside source: true *** True Line Result [2665, 43, 64, 64], ** Processing line: ~ [2605, 43, 64, 64],~ - Inside source: true *** True Line Result [2605, 43, 64, 64], ** Processing line: ~ [2543, 44, 64, 64],~ - Inside source: true *** True Line Result [2543, 44, 64, 64], ** Processing line: ~ [2480, 45, 64, 64],~ - Inside source: true *** True Line Result [2480, 45, 64, 64], ** Processing line: ~ [2419, 45, 64, 64],~ - Inside source: true *** True Line Result [2419, 45, 64, 64], ** Processing line: ~ [2357, 44, 64, 64],~ - Inside source: true *** True Line Result [2357, 44, 64, 64], ** Processing line: ~ [2313, 129, 64, 64],~ - Inside source: true *** True Line Result [2313, 129, 64, 64], ** Processing line: ~ [2313, 70, 64, 64],~ - Inside source: true *** True Line Result [2313, 70, 64, 64], ** Processing line: ~ [2314, 40, 64, 64],~ - Inside source: true *** True Line Result [2314, 40, 64, 64], ** Processing line: ~ [2517, 2385, 64, 64],~ - Inside source: true *** True Line Result [2517, 2385, 64, 64], ** Processing line: ~ [2452, 2385, 64, 64],~ - Inside source: true *** True Line Result [2452, 2385, 64, 64], ** Processing line: ~ [2390, 2386, 64, 64],~ - Inside source: true *** True Line Result [2390, 2386, 64, 64], ** Processing line: ~ [2328, 2386, 64, 64],~ - Inside source: true *** True Line Result [2328, 2386, 64, 64], ** Processing line: ~ [2264, 2386, 64, 64],~ - Inside source: true *** True Line Result [2264, 2386, 64, 64], ** Processing line: ~ [2200, 2386, 64, 64],~ - Inside source: true *** True Line Result [2200, 2386, 64, 64], ** Processing line: ~ [2137, 2387, 64, 64],~ - Inside source: true *** True Line Result [2137, 2387, 64, 64], ** Processing line: ~ [2071, 2385, 64, 64],~ - Inside source: true *** True Line Result [2071, 2385, 64, 64], ** Processing line: ~ [2016, 2389, 64, 64],~ - Inside source: true *** True Line Result [2016, 2389, 64, 64], ** Processing line: ~ [2517, 2341, 64, 64],~ - Inside source: true *** True Line Result [2517, 2341, 64, 64], ** Processing line: ~ [2518, 2316, 64, 64],~ - Inside source: true *** True Line Result [2518, 2316, 64, 64], ** Processing line: ~ [2456, 2316, 64, 64],~ - Inside source: true *** True Line Result [2456, 2316, 64, 64], ** Processing line: ~ [2393, 2316, 64, 64],~ - Inside source: true *** True Line Result [2393, 2316, 64, 64], ** Processing line: ~ [2328, 2317, 64, 64],~ - Inside source: true *** True Line Result [2328, 2317, 64, 64], ** Processing line: ~ [2264, 2316, 64, 64],~ - Inside source: true *** True Line Result [2264, 2316, 64, 64], ** Processing line: ~ [2207, 2318, 64, 64],~ - Inside source: true *** True Line Result [2207, 2318, 64, 64], ** Processing line: ~ [2144, 2317, 64, 64],~ - Inside source: true *** True Line Result [2144, 2317, 64, 64], ** Processing line: ~ [2081, 2316, 64, 64],~ - Inside source: true *** True Line Result [2081, 2316, 64, 64], ** Processing line: ~ [2015, 2342, 64, 64],~ - Inside source: true *** True Line Result [2015, 2342, 64, 64], ** Processing line: ~ [2016, 2315, 64, 64],~ - Inside source: true *** True Line Result [2016, 2315, 64, 64], ** Processing line: ~ [869, 3709, 64, 64],~ - Inside source: true *** True Line Result [869, 3709, 64, 64], ** Processing line: ~ [819, 3710, 64, 64],~ - Inside source: true *** True Line Result [819, 3710, 64, 64], ** Processing line: ~ [869, 3658, 64, 64],~ - Inside source: true *** True Line Result [869, 3658, 64, 64], ** Processing line: ~ [820, 3658, 64, 64],~ - Inside source: true *** True Line Result [820, 3658, 64, 64], ** Processing line: ~ [0, 0, 64, 64],~ - Inside source: true *** True Line Result [0, 0, 64, 64], ** Processing line: ~ [0, 1670, 64, 64],~ - Inside source: true *** True Line Result [0, 1670, 64, 64], ** Processing line: ~ [6691, 1653, 64, 64],~ - Inside source: true *** True Line Result [6691, 1653, 64, 64], ** Processing line: ~ [1521, 3792, 64, 64],~ - Inside source: true *** True Line Result [1521, 3792, 64, 64], ** Processing line: ~ [0, 5137, 64, 64],~ - Inside source: true *** True Line Result [0, 5137, 64, 64], ** Processing line: ~ [3898, 2400, 64, 64],~ - Inside source: true *** True Line Result [3898, 2400, 64, 64], ** Processing line: ~ [3835, 2400, 64, 64],~ - Inside source: true *** True Line Result [3835, 2400, 64, 64], ** Processing line: ~ [3771, 2400, 64, 64],~ - Inside source: true *** True Line Result [3771, 2400, 64, 64], ** Processing line: ~ [3708, 2401, 64, 64],~ - Inside source: true *** True Line Result [3708, 2401, 64, 64], ** Processing line: ~ [3646, 2401, 64, 64],~ - Inside source: true *** True Line Result [3646, 2401, 64, 64], ** Processing line: ~ [3587, 2401, 64, 64],~ - Inside source: true *** True Line Result [3587, 2401, 64, 64], ** Processing line: ~ [3530, 2401, 64, 64],~ - Inside source: true *** True Line Result [3530, 2401, 64, 64], ** Processing line: ~ [3897, 2340, 64, 64],~ - Inside source: true *** True Line Result [3897, 2340, 64, 64], ** Processing line: ~ [3897, 2295, 64, 64],~ - Inside source: true *** True Line Result [3897, 2295, 64, 64], ** Processing line: ~ [3834, 2296, 64, 64],~ - Inside source: true *** True Line Result [3834, 2296, 64, 64], ** Processing line: ~ [3773, 2295, 64, 64],~ - Inside source: true *** True Line Result [3773, 2295, 64, 64], ** Processing line: ~ [3710, 2296, 64, 64],~ - Inside source: true *** True Line Result [3710, 2296, 64, 64], ** Processing line: ~ [3656, 2295, 64, 64],~ - Inside source: true *** True Line Result [3656, 2295, 64, 64], ** Processing line: ~ [3593, 2294, 64, 64],~ - Inside source: true *** True Line Result [3593, 2294, 64, 64], ** Processing line: ~ [3527, 2339, 64, 64],~ - Inside source: true *** True Line Result [3527, 2339, 64, 64], ** Processing line: ~ [3531, 2293, 64, 64],~ - Inside source: true *** True Line Result [3531, 2293, 64, 64], ** Processing line: ~ [4152, 2903, 64, 64],~ - Inside source: true *** True Line Result [4152, 2903, 64, 64], ** Processing line: ~ [4155, 2858, 64, 64],~ - Inside source: true *** True Line Result [4155, 2858, 64, 64], ** Processing line: ~ [3942, 1306, 64, 64],~ - Inside source: true *** True Line Result [3942, 1306, 64, 64], ** Processing line: ~ [3942, 1279, 64, 64],~ - Inside source: true *** True Line Result [3942, 1279, 64, 64], ** Processing line: ~ [3879, 1306, 64, 64],~ - Inside source: true *** True Line Result [3879, 1306, 64, 64], ** Processing line: ~ [3881, 1278, 64, 64],~ - Inside source: true *** True Line Result [3881, 1278, 64, 64], ** Processing line: ~ [3819, 1305, 64, 64],~ - Inside source: true *** True Line Result [3819, 1305, 64, 64], ** Processing line: ~ [3819, 1277, 64, 64],~ - Inside source: true *** True Line Result [3819, 1277, 64, 64], ** Processing line: ~ [3756, 1306, 64, 64],~ - Inside source: true *** True Line Result [3756, 1306, 64, 64], ** Processing line: ~ [3756, 1277, 64, 64],~ - Inside source: true *** True Line Result [3756, 1277, 64, 64], ** Processing line: ~ [3694, 1306, 64, 64],~ - Inside source: true *** True Line Result [3694, 1306, 64, 64], ** Processing line: ~ [3695, 1277, 64, 64],~ - Inside source: true *** True Line Result [3695, 1277, 64, 64], ** Processing line: ~ [3631, 1306, 64, 64],~ - Inside source: true *** True Line Result [3631, 1306, 64, 64], ** Processing line: ~ [3632, 1278, 64, 64],~ - Inside source: true *** True Line Result [3632, 1278, 64, 64], ** Processing line: ~ [3565, 1306, 64, 64],~ - Inside source: true *** True Line Result [3565, 1306, 64, 64], ** Processing line: ~ [3567, 1279, 64, 64],~ - Inside source: true *** True Line Result [3567, 1279, 64, 64], ** Processing line: ~ [4432, 1165, 64, 64],~ - Inside source: true *** True Line Result [4432, 1165, 64, 64], ** Processing line: ~ [4408, 1163, 64, 64],~ - Inside source: true *** True Line Result [4408, 1163, 64, 64], ** Processing line: ~ [5123, 1003, 64, 64],~ - Inside source: true *** True Line Result [5123, 1003, 64, 64], ** Processing line: ~ [5065, 1002, 64, 64],~ - Inside source: true *** True Line Result [5065, 1002, 64, 64], ** Processing line: ~ [5042, 1002, 64, 64],~ - Inside source: true *** True Line Result [5042, 1002, 64, 64], ** Processing line: ~ [6020, 1780, 64, 64],~ - Inside source: true *** True Line Result [6020, 1780, 64, 64], ** Processing line: ~ [6020, 1756, 64, 64],~ - Inside source: true *** True Line Result [6020, 1756, 64, 64], ** Processing line: ~ [5959, 1780, 64, 64],~ - Inside source: true *** True Line Result [5959, 1780, 64, 64], ** Processing line: ~ [5959, 1752, 64, 64],~ - Inside source: true *** True Line Result [5959, 1752, 64, 64], ** Processing line: ~ [5897, 1779, 64, 64],~ - Inside source: true *** True Line Result [5897, 1779, 64, 64], ** Processing line: ~ [5899, 1752, 64, 64],~ - Inside source: true *** True Line Result [5899, 1752, 64, 64], ** Processing line: ~ [5836, 1779, 64, 64],~ - Inside source: true *** True Line Result [5836, 1779, 64, 64], ** Processing line: ~ [5836, 1751, 64, 64],~ - Inside source: true *** True Line Result [5836, 1751, 64, 64], ** Processing line: ~ [5776, 1780, 64, 64],~ - Inside source: true *** True Line Result [5776, 1780, 64, 64], ** Processing line: ~ [5776, 1754, 64, 64],~ - Inside source: true *** True Line Result [5776, 1754, 64, 64], ** Processing line: ~ [5717, 1780, 64, 64],~ - Inside source: true *** True Line Result [5717, 1780, 64, 64], ** Processing line: ~ [5716, 1752, 64, 64],~ - Inside source: true *** True Line Result [5716, 1752, 64, 64], ** Processing line: ~ [5658, 1781, 64, 64],~ - Inside source: true *** True Line Result [5658, 1781, 64, 64], ** Processing line: ~ [5658, 1755, 64, 64],~ - Inside source: true *** True Line Result [5658, 1755, 64, 64], ** Processing line: ~ [5640, 1781, 64, 64],~ - Inside source: true *** True Line Result [5640, 1781, 64, 64], ** Processing line: ~ [5640, 1754, 64, 64],~ - Inside source: true *** True Line Result [5640, 1754, 64, 64], ** Processing line: ~ [5832, 2095, 64, 64],~ - Inside source: true *** True Line Result [5832, 2095, 64, 64], ** Processing line: ~ [5782, 2093, 64, 64],~ - Inside source: true *** True Line Result [5782, 2093, 64, 64], ** Processing line: ~ [5832, 2044, 64, 64],~ - Inside source: true *** True Line Result [5832, 2044, 64, 64], ** Processing line: ~ [5777, 2043, 64, 64],~ - Inside source: true *** True Line Result [5777, 2043, 64, 64], ** Processing line: ~ [4847, 2577, 64, 64],~ - Inside source: true *** True Line Result [4847, 2577, 64, 64], ** Processing line: ~ [4795, 2577, 64, 64],~ - Inside source: true *** True Line Result [4795, 2577, 64, 64], ** Processing line: ~ [4846, 2526, 64, 64],~ - Inside source: true *** True Line Result [4846, 2526, 64, 64], ** Processing line: ~ [4794, 2526, 64, 64],~ - Inside source: true *** True Line Result [4794, 2526, 64, 64], ** Processing line: ~ [8390, 923, 64, 64],~ - Inside source: true *** True Line Result [8390, 923, 64, 64], ** Processing line: ~ [8363, 922, 64, 64],~ - Inside source: true *** True Line Result [8363, 922, 64, 64], ** Processing line: ~ [7585, 1084, 64, 64],~ - Inside source: true *** True Line Result [7585, 1084, 64, 64], ** Processing line: ~ [7582, 1058, 64, 64],~ - Inside source: true *** True Line Result [7582, 1058, 64, 64], ** Processing line: ~ [7525, 1084, 64, 64],~ - Inside source: true *** True Line Result [7525, 1084, 64, 64], ** Processing line: ~ [7524, 1056, 64, 64],~ - Inside source: true *** True Line Result [7524, 1056, 64, 64], ** Processing line: ~ [7478, 1085, 64, 64],~ - Inside source: true *** True Line Result [7478, 1085, 64, 64], ** Processing line: ~ [7476, 1055, 64, 64],~ - Inside source: true *** True Line Result [7476, 1055, 64, 64], ** Processing line: ~ [7421, 1086, 64, 64],~ - Inside source: true *** True Line Result [7421, 1086, 64, 64], ** Processing line: ~ [7421, 1052, 64, 64],~ - Inside source: true *** True Line Result [7421, 1052, 64, 64], ** Processing line: ~ [7362, 1085, 64, 64],~ - Inside source: true *** True Line Result [7362, 1085, 64, 64], ** Processing line: ~ [7361, 1053, 64, 64],~ - Inside source: true *** True Line Result [7361, 1053, 64, 64], ** Processing line: ~ [7307, 1087, 64, 64],~ - Inside source: true *** True Line Result [7307, 1087, 64, 64], ** Processing line: ~ [7307, 1054, 64, 64],~ - Inside source: true *** True Line Result [7307, 1054, 64, 64], ** Processing line: ~ [7258, 1086, 64, 64],~ - Inside source: true *** True Line Result [7258, 1086, 64, 64], ** Processing line: ~ [7255, 1058, 64, 64],~ - Inside source: true *** True Line Result [7255, 1058, 64, 64], ** Processing line: ~ [7203, 1083, 64, 64],~ - Inside source: true *** True Line Result [7203, 1083, 64, 64], ** Processing line: ~ [7203, 1055, 64, 64],~ - Inside source: true *** True Line Result [7203, 1055, 64, 64], ** Processing line: ~ [7161, 1085, 64, 64],~ - Inside source: true *** True Line Result [7161, 1085, 64, 64], ** Processing line: ~ [7158, 1057, 64, 64],~ - Inside source: true *** True Line Result [7158, 1057, 64, 64], ** Processing line: ~ [7100, 1083, 64, 64],~ - Inside source: true *** True Line Result [7100, 1083, 64, 64], ** Processing line: ~ [7099, 1058, 64, 64],~ - Inside source: true *** True Line Result [7099, 1058, 64, 64], ** Processing line: ~ [7038, 1082, 64, 64],~ - Inside source: true *** True Line Result [7038, 1082, 64, 64], ** Processing line: ~ [7038, 1058, 64, 64],~ - Inside source: true *** True Line Result [7038, 1058, 64, 64], ** Processing line: ~ [6982, 1083, 64, 64],~ - Inside source: true *** True Line Result [6982, 1083, 64, 64], ** Processing line: ~ [6984, 1057, 64, 64],~ - Inside source: true *** True Line Result [6984, 1057, 64, 64], ** Processing line: ~ [0, 0, 64, 64],~ - Inside source: true *** True Line Result [0, 0, 64, 64], ** Processing line: ~ [0, 1670, 64, 64],~ - Inside source: true *** True Line Result [0, 1670, 64, 64], ** Processing line: ~ [6691, 1653, 64, 64],~ - Inside source: true *** True Line Result [6691, 1653, 64, 64], ** Processing line: ~ [1521, 3792, 64, 64],~ - Inside source: true *** True Line Result [1521, 3792, 64, 64], ** Processing line: ~ [0, 5137, 64, 64],~ - Inside source: true *** True Line Result [0, 5137, 64, 64], ** Processing line: ~ [0, 0, 64, 64],~ - Inside source: true *** True Line Result [0, 0, 64, 64], ** Processing line: ~ [0, 1670, 64, 64],~ - Inside source: true *** True Line Result [0, 1670, 64, 64], ** Processing line: ~ [6691, 1653, 64, 64],~ - Inside source: true *** True Line Result [6691, 1653, 64, 64], ** Processing line: ~ [1521, 3792, 64, 64],~ - Inside source: true *** True Line Result [1521, 3792, 64, 64], ** Processing line: ~ [0, 5137, 64, 64],~ - Inside source: true *** True Line Result [0, 5137, 64, 64], ** Processing line: ~ [0, 0, 64, 64],~ - Inside source: true *** True Line Result [0, 0, 64, 64], ** Processing line: ~ [0, 1670, 64, 64],~ - Inside source: true *** True Line Result [0, 1670, 64, 64], ** Processing line: ~ [6691, 1653, 64, 64],~ - Inside source: true *** True Line Result [6691, 1653, 64, 64], ** Processing line: ~ [1521, 3792, 64, 64],~ - Inside source: true *** True Line Result [1521, 3792, 64, 64], ** Processing line: ~ [0, 5137, 64, 64],~ - Inside source: true *** True Line Result [0, 5137, 64, 64], ** Processing line: ~ [8346, 424, 64, 64],~ - Inside source: true *** True Line Result [8346, 424, 64, 64], ** Processing line: ~ [8407, 376, 64, 64],~ - Inside source: true *** True Line Result [8407, 376, 64, 64], ** Processing line: ~ [8375, 386, 64, 64],~ - Inside source: true *** True Line Result [8375, 386, 64, 64], ** Processing line: ~ [8407, 347, 64, 64],~ - Inside source: true *** True Line Result [8407, 347, 64, 64], ** Processing line: ~ [8388, 343, 64, 64],~ - Inside source: true *** True Line Result [8388, 343, 64, 64], ** Processing line: ~ [8320, 423, 64, 64],~ - Inside source: true *** True Line Result [8320, 423, 64, 64], ** Processing line: ~ [8319, 363, 64, 64],~ - Inside source: true *** True Line Result [8319, 363, 64, 64], ** Processing line: ~ [8368, 303, 64, 64],~ - Inside source: true *** True Line Result [8368, 303, 64, 64], ** Processing line: ~ [8359, 303, 64, 64],~ - Inside source: true *** True Line Result [8359, 303, 64, 64], ** Processing line: ~ [8318, 330, 64, 64],~ - Inside source: true *** True Line Result [8318, 330, 64, 64], ** Processing line: ~ [9369, 425, 64, 64],~ - Inside source: true *** True Line Result [9369, 425, 64, 64], ** Processing line: ~ [9340, 425, 64, 64],~ - Inside source: true *** True Line Result [9340, 425, 64, 64], ** Processing line: ~ [9431, 376, 64, 64],~ - Inside source: true *** True Line Result [9431, 376, 64, 64], ** Processing line: ~ [9414, 382, 64, 64],~ - Inside source: true *** True Line Result [9414, 382, 64, 64], ** Processing line: ~ [9387, 391, 64, 64],~ - Inside source: true *** True Line Result [9387, 391, 64, 64], ** Processing line: ~ [9431, 349, 64, 64],~ - Inside source: true *** True Line Result [9431, 349, 64, 64], ** Processing line: ~ [9412, 344, 64, 64],~ - Inside source: true *** True Line Result [9412, 344, 64, 64], ** Processing line: ~ [9392, 305, 64, 64],~ - Inside source: true *** True Line Result [9392, 305, 64, 64], ** Processing line: ~ [9339, 365, 64, 64],~ - Inside source: true *** True Line Result [9339, 365, 64, 64], ** Processing line: ~ [9341, 333, 64, 64],~ - Inside source: true *** True Line Result [9341, 333, 64, 64], ** Processing line: ~ [9384, 301, 64, 64],~ - Inside source: true *** True Line Result [9384, 301, 64, 64], ** Processing line: ~ [7673, 1896, 64, 64],~ - Inside source: true *** True Line Result [7673, 1896, 64, 64], ** Processing line: ~ [7642, 1834, 64, 64],~ - Inside source: true *** True Line Result [7642, 1834, 64, 64], ** Processing line: ~ [7646, 1901, 64, 64],~ - Inside source: true *** True Line Result [7646, 1901, 64, 64], ** Processing line: ~ [4500, 4054, 64, 64],~ - Inside source: true *** True Line Result [4500, 4054, 64, 64], ** Processing line: ~ [4476, 4055, 64, 64],~ - Inside source: true *** True Line Result [4476, 4055, 64, 64], ** Processing line: ~ [4459, 3997, 64, 64],~ - Inside source: true *** True Line Result [4459, 3997, 64, 64], ** Processing line: ~ [76, 5215, 64, 64],~ - Inside source: true *** True Line Result [76, 5215, 64, 64], ** Processing line: ~ [39, 5217, 64, 64],~ - Inside source: true *** True Line Result [39, 5217, 64, 64], ** Processing line: ~ [0, 0, 10000, 40],~ - Inside source: true *** True Line Result [0, 0, 10000, 40], ** Processing line: ~ [0, 1670, 3250, 60],~ - Inside source: true *** True Line Result [0, 1670, 3250, 60], ** Processing line: ~ [6691, 1653, 3290, 60],~ - Inside source: true *** True Line Result [6691, 1653, 3290, 60], ** Processing line: ~ [1521, 3792, 7370, 60],~ - Inside source: true *** True Line Result [1521, 3792, 7370, 60], ** Processing line: ~ [0, 5137, 3290, 60]~ - Inside source: true *** True Line Result [0, 5137, 3290, 60] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $mugs = [~ - Inside source: true *** True Line Result $mugs = [ ** Processing line: ~ [85, 87, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [85, 87, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [958, 1967, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [958, 1967, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [2537, 1734, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [2537, 1734, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [3755, 2464, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [3755, 2464, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [1548, 3273, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [1548, 3273, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [2050, 220, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [2050, 220, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [854, 297, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [854, 297, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [343, 526, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [343, 526, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [3454, 772, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [3454, 772, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [5041, 298, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [5041, 298, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [6089, 300, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [6089, 300, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [6518, 295, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [6518, 295, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [7661, 47, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [7661, 47, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [9392, 1125, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [9392, 1125, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [7298, 1152, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [7298, 1152, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [5816, 1843, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [5816, 1843, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [876, 3772, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [876, 3772, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [1029, 4667, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [1029, 4667, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [823, 5324, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [823, 5324, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [3251, 5220, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [3251, 5220, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [4747, 5282, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [4747, 5282, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [9325, 5178, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [9325, 5178, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [9635, 4298, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [9635, 4298, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [7837, 4127, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [7837, 4127, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [8651, 1971, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [8651, 1971, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [6892, 2031, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [6892, 2031, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [4626, 3882, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [4626, 3882, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [4024, 4554, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [4024, 4554, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [3925, 3337, 39, 43, "sprites/square-orange.png"],~ - Inside source: true *** True Line Result [3925, 3337, 39, 43, "sprites/square-orange.png"], ** Processing line: ~ [5064, 1064, 39, 43, "sprites/square-orange.png"]~ - Inside source: true *** True Line Result [5064, 1064, 39, 43, "sprites/square-orange.png"] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Platformer - Gorillas Basic - credits.txt~ - Header detected. *** True Line Result *** True Line Result *** Platformer - Gorillas Basic - credits.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_platformer/gorillas_basic/CREDITS.txt~ - Inside source: true *** True Line Result # ./samples/99_genre_platformer/gorillas_basic/CREDITS.txt ** Processing line: ~ code: Amir Rajan, https://twitter.com/amirrajan~ - Inside source: true *** True Line Result code: Amir Rajan, https://twitter.com/amirrajan ** Processing line: ~ graphics: Nick Culbertson, https://twitter.com/MobyPixel~ - Inside source: true *** True Line Result graphics: Nick Culbertson, https://twitter.com/MobyPixel ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Platformer - Gorillas Basic - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Platformer - Gorillas Basic - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_platformer/gorillas_basic/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_platformer/gorillas_basic/app/main.rb ** Processing line: ~ class YouSoBasicGorillas~ - Inside source: true *** True Line Result class YouSoBasicGorillas ** Processing line: ~ attr_accessor :outputs, :grid, :state, :inputs~ - Inside source: true *** True Line Result attr_accessor :outputs, :grid, :state, :inputs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ process_inputs~ - Inside source: true *** True Line Result process_inputs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ outputs.background_color = [33, 32, 87]~ - Inside source: true *** True Line Result outputs.background_color = [33, 32, 87] ** Processing line: ~ state.building_spacing = 1~ - Inside source: true *** True Line Result state.building_spacing = 1 ** Processing line: ~ state.building_room_spacing = 15~ - Inside source: true *** True Line Result state.building_room_spacing = 15 ** Processing line: ~ state.building_room_width = 10~ - Inside source: true *** True Line Result state.building_room_width = 10 ** Processing line: ~ state.building_room_height = 15~ - Inside source: true *** True Line Result state.building_room_height = 15 ** Processing line: ~ state.building_heights = [4, 4, 6, 8, 15, 20, 18]~ - Inside source: true *** True Line Result state.building_heights = [4, 4, 6, 8, 15, 20, 18] ** Processing line: ~ state.building_room_sizes = [5, 4, 6, 7]~ - Inside source: true *** True Line Result state.building_room_sizes = [5, 4, 6, 7] ** Processing line: ~ state.gravity = 0.25~ - Inside source: true *** True Line Result state.gravity = 0.25 ** Processing line: ~ state.first_strike ||= :player_1~ - Inside source: true *** True Line Result state.first_strike ||= :player_1 ** Processing line: ~ state.buildings ||= []~ - Inside source: true *** True Line Result state.buildings ||= [] ** Processing line: ~ state.holes ||= []~ - Inside source: true *** True Line Result state.holes ||= [] ** Processing line: ~ state.player_1_score ||= 0~ - Inside source: true *** True Line Result state.player_1_score ||= 0 ** Processing line: ~ state.player_2_score ||= 0~ - Inside source: true *** True Line Result state.player_2_score ||= 0 ** Processing line: ~ state.wind ||= 0~ - Inside source: true *** True Line Result state.wind ||= 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ render_stage~ - Inside source: true *** True Line Result render_stage ** Processing line: ~ render_value_insertion~ - Inside source: true *** True Line Result render_value_insertion ** Processing line: ~ render_gorillas~ - Inside source: true *** True Line Result render_gorillas ** Processing line: ~ render_holes~ - Inside source: true *** True Line Result render_holes ** Processing line: ~ render_banana~ - Inside source: true *** True Line Result render_banana ** Processing line: ~ render_game_over~ - Inside source: true *** True Line Result render_game_over ** Processing line: ~ render_score~ - Inside source: true *** True Line Result render_score ** Processing line: ~ render_wind~ - Inside source: true *** True Line Result render_wind ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_score~ - Inside source: true *** True Line Result def render_score ** Processing line: ~ outputs.primitives << [0, 0, 1280, 31, fancy_white].solid~ - Inside source: true *** True Line Result outputs.primitives << [0, 0, 1280, 31, fancy_white].solid ** Processing line: ~ outputs.primitives << [1, 1, 1279, 29].solid~ - Inside source: true *** True Line Result outputs.primitives << [1, 1, 1279, 29].solid ** Processing line: ~ outputs.labels << [ 10, 25, "Score: #{state.player_1_score}", 0, 0, fancy_white]~ - Inside source: true *** True Line Result outputs.labels << [ 10, 25, "Score: #{state.player_1_score}", 0, 0, fancy_white] ** Processing line: ~ outputs.labels << [1270, 25, "Score: #{state.player_2_score}", 0, 2, fancy_white]~ - Inside source: true *** True Line Result outputs.labels << [1270, 25, "Score: #{state.player_2_score}", 0, 2, fancy_white] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_wind~ - Inside source: true *** True Line Result def render_wind ** Processing line: ~ outputs.primitives << [640, 12, state.wind * 500 + state.wind * 10 * rand, 4, 35, 136, 162].solid~ - Inside source: true *** True Line Result outputs.primitives << [640, 12, state.wind * 500 + state.wind * 10 * rand, 4, 35, 136, 162].solid ** Processing line: ~ outputs.lines << [640, 30, 640, 0, fancy_white]~ - Inside source: true *** True Line Result outputs.lines << [640, 30, 640, 0, fancy_white] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_game_over~ - Inside source: true *** True Line Result def render_game_over ** Processing line: ~ return unless state.over~ - Inside source: true *** True Line Result return unless state.over ** Processing line: ~ outputs.primitives << [grid.rect, 0, 0, 0, 200].solid~ - Inside source: true *** True Line Result outputs.primitives << [grid.rect, 0, 0, 0, 200].solid ** Processing line: ~ outputs.primitives << [640, 370, "Game Over!!", 5, 1, fancy_white].label~ - Inside source: true *** True Line Result outputs.primitives << [640, 370, "Game Over!!", 5, 1, fancy_white].label ** Processing line: ~ if state.winner == :player_1~ - Inside source: true *** True Line Result if state.winner == :player_1 ** Processing line: ~ outputs.primitives << [640, 340, "Player 1 Wins!!", 5, 1, fancy_white].label~ - Inside source: true *** True Line Result outputs.primitives << [640, 340, "Player 1 Wins!!", 5, 1, fancy_white].label ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ outputs.primitives << [640, 340, "Player 2 Wins!!", 5, 1, fancy_white].label~ - Inside source: true *** True Line Result outputs.primitives << [640, 340, "Player 2 Wins!!", 5, 1, fancy_white].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_stage~ - Inside source: true *** True Line Result def render_stage ** Processing line: ~ return unless state.stage_generated~ - Inside source: true *** True Line Result return unless state.stage_generated ** Processing line: ~ return if state.stage_rendered~ - Inside source: true *** True Line Result return if state.stage_rendered ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.static_solids << [grid.rect, 33, 32, 87]~ - Inside source: true *** True Line Result outputs.static_solids << [grid.rect, 33, 32, 87] ** Processing line: ~ outputs.static_solids << state.buildings.map(&:solids)~ - Inside source: true *** True Line Result outputs.static_solids << state.buildings.map(&:solids) ** Processing line: ~ state.stage_rendered = true~ - Inside source: true *** True Line Result state.stage_rendered = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_gorilla gorilla, id~ - Inside source: true *** True Line Result def render_gorilla gorilla, id ** Processing line: ~ return unless gorilla~ - Inside source: true *** True Line Result return unless gorilla ** Processing line: ~ if state.banana && state.banana.owner == gorilla~ - Inside source: true *** True Line Result if state.banana && state.banana.owner == gorilla ** Processing line: ~ animation_index = state.banana.created_at.frame_index(3, 5, false)~ - Inside source: true *** True Line Result animation_index = state.banana.created_at.frame_index(3, 5, false) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if !animation_index~ - Inside source: true *** True Line Result if !animation_index ** Processing line: ~ outputs.sprites << [gorilla.solid, "sprites/#{id}-idle.png"]~ - Inside source: true *** True Line Result outputs.sprites << [gorilla.solid, "sprites/#{id}-idle.png"] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ outputs.sprites << [gorilla.solid, "sprites/#{id}-#{animation_index}.png"]~ - Inside source: true *** True Line Result outputs.sprites << [gorilla.solid, "sprites/#{id}-#{animation_index}.png"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_gorillas~ - Inside source: true *** True Line Result def render_gorillas ** Processing line: ~ render_gorilla state.player_1, :left~ - Inside source: true *** True Line Result render_gorilla state.player_1, :left ** Processing line: ~ render_gorilla state.player_2, :right~ - Inside source: true *** True Line Result render_gorilla state.player_2, :right ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_value_insertion~ - Inside source: true *** True Line Result def render_value_insertion ** Processing line: ~ return if state.banana~ - Inside source: true *** True Line Result return if state.banana ** Processing line: ~ return if state.over~ - Inside source: true *** True Line Result return if state.over ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.current_turn == :player_1_angle~ - Inside source: true *** True Line Result if state.current_turn == :player_1_angle ** Processing line: ~ outputs.labels << [ 10, 710, "Angle: #{state.player_1_angle}_", fancy_white]~ - Inside source: true *** True Line Result outputs.labels << [ 10, 710, "Angle: #{state.player_1_angle}_", fancy_white] ** Processing line: ~ elsif state.current_turn == :player_1_velocity~ - Inside source: true *** True Line Result elsif state.current_turn == :player_1_velocity ** Processing line: ~ outputs.labels << [ 10, 710, "Angle: #{state.player_1_angle}", fancy_white]~ - Inside source: true *** True Line Result outputs.labels << [ 10, 710, "Angle: #{state.player_1_angle}", fancy_white] ** Processing line: ~ outputs.labels << [ 10, 690, "Velocity: #{state.player_1_velocity}_", fancy_white]~ - Inside source: true *** True Line Result outputs.labels << [ 10, 690, "Velocity: #{state.player_1_velocity}_", fancy_white] ** Processing line: ~ elsif state.current_turn == :player_2_angle~ - Inside source: true *** True Line Result elsif state.current_turn == :player_2_angle ** Processing line: ~ outputs.labels << [1120, 710, "Angle: #{state.player_2_angle}_", fancy_white]~ - Inside source: true *** True Line Result outputs.labels << [1120, 710, "Angle: #{state.player_2_angle}_", fancy_white] ** Processing line: ~ elsif state.current_turn == :player_2_velocity~ - Inside source: true *** True Line Result elsif state.current_turn == :player_2_velocity ** Processing line: ~ outputs.labels << [1120, 710, "Angle: #{state.player_2_angle}", fancy_white]~ - Inside source: true *** True Line Result outputs.labels << [1120, 710, "Angle: #{state.player_2_angle}", fancy_white] ** Processing line: ~ outputs.labels << [1120, 690, "Velocity: #{state.player_2_velocity}_", fancy_white]~ - Inside source: true *** True Line Result outputs.labels << [1120, 690, "Velocity: #{state.player_2_velocity}_", fancy_white] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_banana~ - Inside source: true *** True Line Result def render_banana ** Processing line: ~ return unless state.banana~ - Inside source: true *** True Line Result return unless state.banana ** Processing line: ~ rotation = state.tick_count.%(360) * 20~ - Inside source: true *** True Line Result rotation = state.tick_count.%(360) * 20 ** Processing line: ~ rotation *= -1 if state.banana.dx > 0~ - Inside source: true *** True Line Result rotation *= -1 if state.banana.dx > 0 ** Processing line: ~ outputs.sprites << [state.banana.x, state.banana.y, 15, 15, 'sprites/banana.png', rotation]~ - Inside source: true *** True Line Result outputs.sprites << [state.banana.x, state.banana.y, 15, 15, 'sprites/banana.png', rotation] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_holes~ - Inside source: true *** True Line Result def render_holes ** Processing line: ~ outputs.sprites << state.holes.map do |s|~ - Inside source: true *** True Line Result outputs.sprites << state.holes.map do |s| ** Processing line: ~ animation_index = s.created_at.frame_index(7, 3, false)~ - Inside source: true *** True Line Result animation_index = s.created_at.frame_index(7, 3, false) ** Processing line: ~ if animation_index~ - Inside source: true *** True Line Result if animation_index ** Processing line: ~ [s.sprite, [s.sprite.rect, "sprites/explosion#{animation_index}.png" ]]~ - Inside source: true *** True Line Result [s.sprite, [s.sprite.rect, "sprites/explosion#{animation_index}.png" ]] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ s.sprite~ - Inside source: true *** True Line Result s.sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ calc_generate_stage~ - Inside source: true *** True Line Result calc_generate_stage ** Processing line: ~ calc_current_turn~ - Inside source: true *** True Line Result calc_current_turn ** Processing line: ~ calc_banana~ - Inside source: true *** True Line Result calc_banana ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_current_turn~ - Inside source: true *** True Line Result def calc_current_turn ** Processing line: ~ return if state.current_turn~ - Inside source: true *** True Line Result return if state.current_turn ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.current_turn = :player_1_angle~ - Inside source: true *** True Line Result state.current_turn = :player_1_angle ** Processing line: ~ state.current_turn = :player_2_angle if state.first_strike == :player_2~ - Inside source: true *** True Line Result state.current_turn = :player_2_angle if state.first_strike == :player_2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_generate_stage~ - Inside source: true *** True Line Result def calc_generate_stage ** Processing line: ~ return if state.stage_generated~ - Inside source: true *** True Line Result return if state.stage_generated ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.buildings << building_prefab(state.building_spacing + -20, *random_building_size)~ - Inside source: true *** True Line Result state.buildings << building_prefab(state.building_spacing + -20, *random_building_size) ** Processing line: ~ 8.numbers.inject(state.buildings) do |buildings, i|~ - Inside source: true *** True Line Result 8.numbers.inject(state.buildings) do |buildings, i| ** Processing line: ~ buildings <<~ - Inside source: true *** True Line Result buildings << ** Processing line: ~ building_prefab(state.building_spacing +~ - Inside source: true *** True Line Result building_prefab(state.building_spacing + ** Processing line: ~ state.buildings.last.right,~ - Inside source: true *** True Line Result state.buildings.last.right, ** Processing line: ~ *random_building_size)~ - Inside source: true *** True Line Result *random_building_size) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ building_two = state.buildings[1]~ - Inside source: true *** True Line Result building_two = state.buildings[1] ** Processing line: ~ state.player_1 = new_player(building_two.x + building_two.w.fdiv(2),~ - Inside source: true *** True Line Result state.player_1 = new_player(building_two.x + building_two.w.fdiv(2), ** Processing line: ~ building_two.h)~ - Inside source: true *** True Line Result building_two.h) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ building_nine = state.buildings[-3]~ - Inside source: true *** True Line Result building_nine = state.buildings[-3] ** Processing line: ~ state.player_2 = new_player(building_nine.x + building_nine.w.fdiv(2),~ - Inside source: true *** True Line Result state.player_2 = new_player(building_nine.x + building_nine.w.fdiv(2), ** Processing line: ~ building_nine.h)~ - Inside source: true *** True Line Result building_nine.h) ** Processing line: ~ state.stage_generated = true~ - Inside source: true *** True Line Result state.stage_generated = true ** Processing line: ~ state.wind = 1.randomize(:ratio, :sign)~ - Inside source: true *** True Line Result state.wind = 1.randomize(:ratio, :sign) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_player x, y~ - Inside source: true *** True Line Result def new_player x, y ** Processing line: ~ state.new_entity(:gorilla) do |p|~ - Inside source: true *** True Line Result state.new_entity(:gorilla) do |p| ** Processing line: ~ p.x = x - 25~ - Inside source: true *** True Line Result p.x = x - 25 ** Processing line: ~ p.y = y~ - Inside source: true *** True Line Result p.y = y ** Processing line: ~ p.solid = [p.x, p.y, 50, 50]~ - Inside source: true *** True Line Result p.solid = [p.x, p.y, 50, 50] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_banana~ - Inside source: true *** True Line Result def calc_banana ** Processing line: ~ return unless state.banana~ - Inside source: true *** True Line Result return unless state.banana ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.banana.x += state.banana.dx~ - Inside source: true *** True Line Result state.banana.x += state.banana.dx ** Processing line: ~ state.banana.dx += state.wind.fdiv(50)~ - Inside source: true *** True Line Result state.banana.dx += state.wind.fdiv(50) ** Processing line: ~ state.banana.y += state.banana.dy~ - Inside source: true *** True Line Result state.banana.y += state.banana.dy ** Processing line: ~ state.banana.dy -= state.gravity~ - Inside source: true *** True Line Result state.banana.dy -= state.gravity ** Processing line: ~ banana_collision = [state.banana.x, state.banana.y, 10, 10]~ - Inside source: true *** True Line Result banana_collision = [state.banana.x, state.banana.y, 10, 10] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.player_1 && banana_collision.intersect_rect?(state.player_1.solid)~ - Inside source: true *** True Line Result if state.player_1 && banana_collision.intersect_rect?(state.player_1.solid) ** Processing line: ~ state.over = true~ - Inside source: true *** True Line Result state.over = true ** Processing line: ~ if state.banana.owner == state.player_2~ - Inside source: true *** True Line Result if state.banana.owner == state.player_2 ** Processing line: ~ state.winner = :player_2~ - Inside source: true *** True Line Result state.winner = :player_2 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.winner = :player_1~ - Inside source: true *** True Line Result state.winner = :player_1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.player_2_score += 1~ - Inside source: true *** True Line Result state.player_2_score += 1 ** Processing line: ~ elsif state.player_2 && banana_collision.intersect_rect?(state.player_2.solid)~ - Inside source: true *** True Line Result elsif state.player_2 && banana_collision.intersect_rect?(state.player_2.solid) ** Processing line: ~ state.over = true~ - Inside source: true *** True Line Result state.over = true ** Processing line: ~ if state.banana.owner == state.player_2~ - Inside source: true *** True Line Result if state.banana.owner == state.player_2 ** Processing line: ~ state.winner = :player_1~ - Inside source: true *** True Line Result state.winner = :player_1 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.winner = :player_2~ - Inside source: true *** True Line Result state.winner = :player_2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ state.player_1_score += 1~ - Inside source: true *** True Line Result state.player_1_score += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.over~ - Inside source: true *** True Line Result if state.over ** Processing line: ~ place_hole~ - Inside source: true *** True Line Result place_hole ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return if state.holes.any? do |h|~ - Inside source: true *** True Line Result return if state.holes.any? do |h| ** Processing line: ~ h.sprite.scale_rect(0.8, 0.5, 0.5).intersect_rect? [state.banana.x, state.banana.y, 10, 10]~ - Inside source: true *** True Line Result h.sprite.scale_rect(0.8, 0.5, 0.5).intersect_rect? [state.banana.x, state.banana.y, 10, 10] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless state.banana.y < 0 || state.buildings.any? do |b|~ - Inside source: true *** True Line Result return unless state.banana.y < 0 || state.buildings.any? do |b| ** Processing line: ~ b.rect.intersect_rect? [state.banana.x, state.banana.y, 1, 1]~ - Inside source: true *** True Line Result b.rect.intersect_rect? [state.banana.x, state.banana.y, 1, 1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ place_hole~ - Inside source: true *** True Line Result place_hole ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def place_hole~ - Inside source: true *** True Line Result def place_hole ** Processing line: ~ return unless state.banana~ - Inside source: true *** True Line Result return unless state.banana ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.holes << state.new_entity(:banana) do |b|~ - Inside source: true *** True Line Result state.holes << state.new_entity(:banana) do |b| ** Processing line: ~ b.sprite = [state.banana.x - 20, state.banana.y - 20, 40, 40, 'sprites/hole.png']~ - Inside source: true *** True Line Result b.sprite = [state.banana.x - 20, state.banana.y - 20, 40, 40, 'sprites/hole.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.banana = nil~ - Inside source: true *** True Line Result state.banana = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_inputs_main~ - Inside source: true *** True Line Result def process_inputs_main ** Processing line: ~ return if state.banana~ - Inside source: true *** True Line Result return if state.banana ** Processing line: ~ return if state.over~ - Inside source: true *** True Line Result return if state.over ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.key_down.enter~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.enter ** Processing line: ~ input_execute_turn~ - Inside source: true *** True Line Result input_execute_turn ** Processing line: ~ elsif inputs.keyboard.key_down.backspace~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_down.backspace ** Processing line: ~ state.as_hash[state.current_turn] ||= ""~ - Inside source: true *** True Line Result state.as_hash[state.current_turn] ||= "" ** Processing line: ~ state.as_hash[state.current_turn] = state.as_hash[state.current_turn][0..-2]~ - Inside source: true *** True Line Result state.as_hash[state.current_turn] = state.as_hash[state.current_turn][0..-2] ** Processing line: ~ elsif inputs.keyboard.key_down.char~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_down.char ** Processing line: ~ state.as_hash[state.current_turn] ||= ""~ - Inside source: true *** True Line Result state.as_hash[state.current_turn] ||= "" ** Processing line: ~ state.as_hash[state.current_turn] += inputs.keyboard.key_down.char~ - Inside source: true *** True Line Result state.as_hash[state.current_turn] += inputs.keyboard.key_down.char ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_inputs_game_over~ - Inside source: true *** True Line Result def process_inputs_game_over ** Processing line: ~ return unless state.over~ - Inside source: true *** True Line Result return unless state.over ** Processing line: ~ return unless inputs.keyboard.key_down.truthy_keys.any?~ - Inside source: true *** True Line Result return unless inputs.keyboard.key_down.truthy_keys.any? ** Processing line: ~ state.over = false~ - Inside source: true *** True Line Result state.over = false ** Processing line: ~ outputs.static_solids.clear~ - Inside source: true *** True Line Result outputs.static_solids.clear ** Processing line: ~ state.buildings.clear~ - Inside source: true *** True Line Result state.buildings.clear ** Processing line: ~ state.holes.clear~ - Inside source: true *** True Line Result state.holes.clear ** Processing line: ~ state.stage_generated = false~ - Inside source: true *** True Line Result state.stage_generated = false ** Processing line: ~ state.stage_rendered = false~ - Inside source: true *** True Line Result state.stage_rendered = false ** Processing line: ~ if state.first_strike == :player_1~ - Inside source: true *** True Line Result if state.first_strike == :player_1 ** Processing line: ~ state.first_strike = :player_2~ - Inside source: true *** True Line Result state.first_strike = :player_2 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.first_strike = :player_1~ - Inside source: true *** True Line Result state.first_strike = :player_1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_inputs~ - Inside source: true *** True Line Result def process_inputs ** Processing line: ~ process_inputs_main~ - Inside source: true *** True Line Result process_inputs_main ** Processing line: ~ process_inputs_game_over~ - Inside source: true *** True Line Result process_inputs_game_over ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_execute_turn~ - Inside source: true *** True Line Result def input_execute_turn ** Processing line: ~ return if state.banana~ - Inside source: true *** True Line Result return if state.banana ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.current_turn == :player_1_angle && parse_or_clear!(:player_1_angle)~ - Inside source: true *** True Line Result if state.current_turn == :player_1_angle && parse_or_clear!(:player_1_angle) ** Processing line: ~ state.current_turn = :player_1_velocity~ - Inside source: true *** True Line Result state.current_turn = :player_1_velocity ** Processing line: ~ elsif state.current_turn == :player_1_velocity && parse_or_clear!(:player_1_velocity)~ - Inside source: true *** True Line Result elsif state.current_turn == :player_1_velocity && parse_or_clear!(:player_1_velocity) ** Processing line: ~ state.current_turn = :player_2_angle~ - Inside source: true *** True Line Result state.current_turn = :player_2_angle ** Processing line: ~ state.banana =~ - Inside source: true *** True Line Result state.banana = ** Processing line: ~ new_banana(state.player_1,~ - Inside source: true *** True Line Result new_banana(state.player_1, ** Processing line: ~ state.player_1.x + 25,~ - Inside source: true *** True Line Result state.player_1.x + 25, ** Processing line: ~ state.player_1.y + 60,~ - Inside source: true *** True Line Result state.player_1.y + 60, ** Processing line: ~ state.player_1_angle,~ - Inside source: true *** True Line Result state.player_1_angle, ** Processing line: ~ state.player_1_velocity)~ - Inside source: true *** True Line Result state.player_1_velocity) ** Processing line: ~ elsif state.current_turn == :player_2_angle && parse_or_clear!(:player_2_angle)~ - Inside source: true *** True Line Result elsif state.current_turn == :player_2_angle && parse_or_clear!(:player_2_angle) ** Processing line: ~ state.current_turn = :player_2_velocity~ - Inside source: true *** True Line Result state.current_turn = :player_2_velocity ** Processing line: ~ elsif state.current_turn == :player_2_velocity && parse_or_clear!(:player_2_velocity)~ - Inside source: true *** True Line Result elsif state.current_turn == :player_2_velocity && parse_or_clear!(:player_2_velocity) ** Processing line: ~ state.current_turn = :player_1_angle~ - Inside source: true *** True Line Result state.current_turn = :player_1_angle ** Processing line: ~ state.banana =~ - Inside source: true *** True Line Result state.banana = ** Processing line: ~ new_banana(state.player_2,~ - Inside source: true *** True Line Result new_banana(state.player_2, ** Processing line: ~ state.player_2.x + 25,~ - Inside source: true *** True Line Result state.player_2.x + 25, ** Processing line: ~ state.player_2.y + 60,~ - Inside source: true *** True Line Result state.player_2.y + 60, ** Processing line: ~ 180 - state.player_2_angle,~ - Inside source: true *** True Line Result 180 - state.player_2_angle, ** Processing line: ~ state.player_2_velocity)~ - Inside source: true *** True Line Result state.player_2_velocity) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.banana~ - Inside source: true *** True Line Result if state.banana ** Processing line: ~ state.player_1_angle = nil~ - Inside source: true *** True Line Result state.player_1_angle = nil ** Processing line: ~ state.player_1_velocity = nil~ - Inside source: true *** True Line Result state.player_1_velocity = nil ** Processing line: ~ state.player_2_angle = nil~ - Inside source: true *** True Line Result state.player_2_angle = nil ** Processing line: ~ state.player_2_velocity = nil~ - Inside source: true *** True Line Result state.player_2_velocity = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def random_building_size~ - Inside source: true *** True Line Result def random_building_size ** Processing line: ~ [state.building_heights.sample, state.building_room_sizes.sample]~ - Inside source: true *** True Line Result [state.building_heights.sample, state.building_room_sizes.sample] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def int? v~ - Inside source: true *** True Line Result def int? v ** Processing line: ~ v.to_i.to_s == v.to_s~ - Inside source: true *** True Line Result v.to_i.to_s == v.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def random_building_color~ - Inside source: true *** True Line Result def random_building_color ** Processing line: ~ [[ 99, 0, 107],~ - Inside source: true *** True Line Result [[ 99, 0, 107], ** Processing line: ~ [ 35, 64, 124],~ - Inside source: true *** True Line Result [ 35, 64, 124], ** Processing line: ~ [ 35, 136, 162],~ - Inside source: true *** True Line Result [ 35, 136, 162], ** Processing line: ~ ].sample~ - Inside source: true *** True Line Result ].sample ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def random_window_color~ - Inside source: true *** True Line Result def random_window_color ** Processing line: ~ [[ 88, 62, 104],~ - Inside source: true *** True Line Result [[ 88, 62, 104], ** Processing line: ~ [253, 224, 187]].sample~ - Inside source: true *** True Line Result [253, 224, 187]].sample ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def windows_for_building starting_x, floors, rooms~ - Inside source: true *** True Line Result def windows_for_building starting_x, floors, rooms ** Processing line: ~ floors.-(1).combinations(rooms - 1).map do |floor, room|~ - Inside source: true *** True Line Result floors.-(1).combinations(rooms - 1).map do |floor, room| ** Processing line: ~ [starting_x +~ - Inside source: true *** True Line Result [starting_x + ** Processing line: ~ state.building_room_width.*(room) +~ - Inside source: true *** True Line Result state.building_room_width.*(room) + ** Processing line: ~ state.building_room_spacing.*(room + 1),~ - Inside source: true *** True Line Result state.building_room_spacing.*(room + 1), ** Processing line: ~ state.building_room_height.*(floor) +~ - Inside source: true *** True Line Result state.building_room_height.*(floor) + ** Processing line: ~ state.building_room_spacing.*(floor + 1),~ - Inside source: true *** True Line Result state.building_room_spacing.*(floor + 1), ** Processing line: ~ state.building_room_width,~ - Inside source: true *** True Line Result state.building_room_width, ** Processing line: ~ state.building_room_height,~ - Inside source: true *** True Line Result state.building_room_height, ** Processing line: ~ random_window_color]~ - Inside source: true *** True Line Result random_window_color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def building_prefab starting_x, floors, rooms~ - Inside source: true *** True Line Result def building_prefab starting_x, floors, rooms ** Processing line: ~ state.new_entity(:building) do |b|~ - Inside source: true *** True Line Result state.new_entity(:building) do |b| ** Processing line: ~ b.x = starting_x~ - Inside source: true *** True Line Result b.x = starting_x ** Processing line: ~ b.y = 0~ - Inside source: true *** True Line Result b.y = 0 ** Processing line: ~ b.w = state.building_room_width.*(rooms) +~ - Inside source: true *** True Line Result b.w = state.building_room_width.*(rooms) + ** Processing line: ~ state.building_room_spacing.*(rooms + 1)~ - Inside source: true *** True Line Result state.building_room_spacing.*(rooms + 1) ** Processing line: ~ b.h = state.building_room_height.*(floors) +~ - Inside source: true *** True Line Result b.h = state.building_room_height.*(floors) + ** Processing line: ~ state.building_room_spacing.*(floors + 1)~ - Inside source: true *** True Line Result state.building_room_spacing.*(floors + 1) ** Processing line: ~ b.right = b.x + b.w~ - Inside source: true *** True Line Result b.right = b.x + b.w ** Processing line: ~ b.rect = [b.x, b.y, b.w, b.h]~ - Inside source: true *** True Line Result b.rect = [b.x, b.y, b.w, b.h] ** Processing line: ~ b.solids = [[b.x - 1, b.y, b.w + 2, b.h + 1, fancy_white],~ - Inside source: true *** True Line Result b.solids = [[b.x - 1, b.y, b.w + 2, b.h + 1, fancy_white], ** Processing line: ~ [b.x, b.y, b.w, b.h, random_building_color],~ - Inside source: true *** True Line Result [b.x, b.y, b.w, b.h, random_building_color], ** Processing line: ~ windows_for_building(b.x, floors, rooms)]~ - Inside source: true *** True Line Result windows_for_building(b.x, floors, rooms)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def parse_or_clear! game_prop~ - Inside source: true *** True Line Result def parse_or_clear! game_prop ** Processing line: ~ if int? state.as_hash[game_prop]~ - Inside source: true *** True Line Result if int? state.as_hash[game_prop] ** Processing line: ~ state.as_hash[game_prop] = state.as_hash[game_prop].to_i~ - Inside source: true *** True Line Result state.as_hash[game_prop] = state.as_hash[game_prop].to_i ** Processing line: ~ return true~ - Inside source: true *** True Line Result return true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.as_hash[game_prop] = nil~ - Inside source: true *** True Line Result state.as_hash[game_prop] = nil ** Processing line: ~ return false~ - Inside source: true *** True Line Result return false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_banana owner, x, y, angle, velocity~ - Inside source: true *** True Line Result def new_banana owner, x, y, angle, velocity ** Processing line: ~ state.new_entity(:banana) do |b|~ - Inside source: true *** True Line Result state.new_entity(:banana) do |b| ** Processing line: ~ b.owner = owner~ - Inside source: true *** True Line Result b.owner = owner ** Processing line: ~ b.x = x~ - Inside source: true *** True Line Result b.x = x ** Processing line: ~ b.y = y~ - Inside source: true *** True Line Result b.y = y ** Processing line: ~ b.angle = angle % 360~ - Inside source: true *** True Line Result b.angle = angle % 360 ** Processing line: ~ b.velocity = velocity / 5~ - Inside source: true *** True Line Result b.velocity = velocity / 5 ** Processing line: ~ b.dx = b.angle.vector_x(b.velocity)~ - Inside source: true *** True Line Result b.dx = b.angle.vector_x(b.velocity) ** Processing line: ~ b.dy = b.angle.vector_y(b.velocity)~ - Inside source: true *** True Line Result b.dy = b.angle.vector_y(b.velocity) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def fancy_white~ - Inside source: true *** True Line Result def fancy_white ** Processing line: ~ [253, 252, 253]~ - Inside source: true *** True Line Result [253, 252, 253] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $you_so_basic_gorillas = YouSoBasicGorillas.new~ - Inside source: true *** True Line Result $you_so_basic_gorillas = YouSoBasicGorillas.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $you_so_basic_gorillas.outputs = args.outputs~ - Inside source: true *** True Line Result $you_so_basic_gorillas.outputs = args.outputs ** Processing line: ~ $you_so_basic_gorillas.grid = args.grid~ - Inside source: true *** True Line Result $you_so_basic_gorillas.grid = args.grid ** Processing line: ~ $you_so_basic_gorillas.state = args.state~ - Inside source: true *** True Line Result $you_so_basic_gorillas.state = args.state ** Processing line: ~ $you_so_basic_gorillas.inputs = args.inputs~ - Inside source: true *** True Line Result $you_so_basic_gorillas.inputs = args.inputs ** Processing line: ~ $you_so_basic_gorillas.tick~ - Inside source: true *** True Line Result $you_so_basic_gorillas.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Platformer - Gorillas Basic - tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Platformer - Gorillas Basic - tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_platformer/gorillas_basic/app/tests.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_platformer/gorillas_basic/app/tests.rb ** Processing line: ~ $gtk.reset 100~ - Inside source: true *** True Line Result $gtk.reset 100 ** Processing line: ~ $gtk.supress_framerate_warning = true~ - Inside source: true *** True Line Result $gtk.supress_framerate_warning = true ** Processing line: ~ $gtk.require 'app/tests/building_generation_tests.rb'~ - Inside source: true *** True Line Result $gtk.require 'app/tests/building_generation_tests.rb' ** Processing line: ~ $gtk.tests.start~ - Inside source: true *** True Line Result $gtk.tests.start ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Platformer - Gorillas Basic - Tests - building_generation_tests.rb~ - Header detected. *** True Line Result *** True Line Result *** Platformer - Gorillas Basic - Tests - building_generation_tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_platformer/gorillas_basic/app/tests/building_generation_tests.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_platformer/gorillas_basic/app/tests/building_generation_tests.rb ** Processing line: ~ def test_solids args, assert~ - Inside source: true *** True Line Result def test_solids args, assert ** Processing line: ~ game = YouSoBasicGorillas.new~ - Inside source: true *** True Line Result game = YouSoBasicGorillas.new ** Processing line: ~ game.outputs = args.outputs~ - Inside source: true *** True Line Result game.outputs = args.outputs ** Processing line: ~ game.grid = args.grid~ - Inside source: true *** True Line Result game.grid = args.grid ** Processing line: ~ game.state = args.state~ - Inside source: true *** True Line Result game.state = args.state ** Processing line: ~ game.inputs = args.inputs~ - Inside source: true *** True Line Result game.inputs = args.inputs ** Processing line: ~ game.tick~ - Inside source: true *** True Line Result game.tick ** Processing line: ~ assert.true! args.state.stage_generated, "stage wasn't generated but it should have been"~ - Inside source: true *** True Line Result assert.true! args.state.stage_generated, "stage wasn't generated but it should have been" ** Processing line: ~ game.tick~ - Inside source: true *** True Line Result game.tick ** Processing line: ~ assert.true! args.outputs.static_solids.length > 0, "stage wasn't rendered"~ - Inside source: true *** True Line Result assert.true! args.outputs.static_solids.length > 0, "stage wasn't rendered" ** Processing line: ~ number_of_building_components = (args.state.buildings.map { |b| 2 + b.solids[2].length }.inject do |sum, v| (sum || 0) + v end)~ - Inside source: true *** True Line Result number_of_building_components = (args.state.buildings.map { |b| 2 + b.solids[2].length }.inject do |sum, v| (sum || 0) + v end) ** Processing line: ~ the_only_background = 1~ - Inside source: true *** True Line Result the_only_background = 1 ** Processing line: ~ static_solids = args.outputs.static_solids.length~ - Inside source: true *** True Line Result static_solids = args.outputs.static_solids.length ** Processing line: ~ assert.true! static_solids == the_only_background.+(number_of_building_components), "not all parts of the buildings and background were rendered"~ - Inside source: true *** True Line Result assert.true! static_solids == the_only_background.+(number_of_building_components), "not all parts of the buildings and background were rendered" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Platformer - The Little Probe - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Platformer - The Little Probe - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_platformer/the_little_probe/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_platformer/the_little_probe/app/main.rb ** Processing line: ~ class FallingCircle~ - Inside source: true *** True Line Result class FallingCircle ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ fiddle~ - Inside source: true *** True Line Result fiddle ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def fiddle~ - Inside source: true *** True Line Result def fiddle ** Processing line: ~ state.gravity = -0.02~ - Inside source: true *** True Line Result state.gravity = -0.02 ** Processing line: ~ circle.radius = 15~ - Inside source: true *** True Line Result circle.radius = 15 ** Processing line: ~ circle.elasticity = 0.4~ - Inside source: true *** True Line Result circle.elasticity = 0.4 ** Processing line: ~ camera.follow_speed = 0.4 * 0.4~ - Inside source: true *** True Line Result camera.follow_speed = 0.4 * 0.4 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ render_stage_editor~ - Inside source: true *** True Line Result render_stage_editor ** Processing line: ~ render_debug~ - Inside source: true *** True Line Result render_debug ** Processing line: ~ render_game~ - Inside source: true *** True Line Result render_game ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ if state.tick_count == 0~ - Inside source: true *** True Line Result if state.tick_count == 0 ** Processing line: ~ outputs.sounds << "sounds/bg.ogg"~ - Inside source: true *** True Line Result outputs.sounds << "sounds/bg.ogg" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.storyline ||= [~ - Inside source: true *** True Line Result state.storyline ||= [ ** Processing line: ~ { text: "<- -> to aim, hold space to charge", distance_gate: 0 },~ - Inside source: true *** True Line Result { text: "<- -> to aim, hold space to charge", distance_gate: 0 }, ** Processing line: ~ { text: "the little probe - by @amirrajan, made with DragonRuby Game Toolkit", distance_gate: 0 },~ - Inside source: true *** True Line Result { text: "the little probe - by @amirrajan, made with DragonRuby Game Toolkit", distance_gate: 0 }, ** Processing line: ~ { text: "mission control, this is sasha. landing on europa successful.", distance_gate: 0 },~ - Inside source: true *** True Line Result { text: "mission control, this is sasha. landing on europa successful.", distance_gate: 0 }, ** Processing line: ~ { text: "operation \"find earth 2.0\", initiated at 8-29-2036 14:00.", distance_gate: 0 },~ - Inside source: true *** True Line Result { text: "operation \"find earth 2.0\", initiated at 8-29-2036 14:00.", distance_gate: 0 }, ** Processing line: ~ { text: "jupiter's sure is beautiful...", distance_gate: 4000 },~ - Inside source: true *** True Line Result { text: "jupiter's sure is beautiful...", distance_gate: 4000 }, ** Processing line: ~ { text: "hmm, it seems there's some kind of anomoly in the sky", distance_gate: 7000 },~ - Inside source: true *** True Line Result { text: "hmm, it seems there's some kind of anomoly in the sky", distance_gate: 7000 }, ** Processing line: ~ { text: "dancing lights, i'll call them whisps.", distance_gate: 8000 },~ - Inside source: true *** True Line Result { text: "dancing lights, i'll call them whisps.", distance_gate: 8000 }, ** Processing line: ~ { text: "#todo... look i ran out of time -_-", distance_gate: 9000 },~ - Inside source: true *** True Line Result { text: "#todo... look i ran out of time -_-", distance_gate: 9000 }, ** Processing line: ~ { text: "there's never enough time", distance_gate: 9000 },~ - Inside source: true *** True Line Result { text: "there's never enough time", distance_gate: 9000 }, ** Processing line: ~ { text: "the game jam was fun though ^_^", distance_gate: 10000 },~ - Inside source: true *** True Line Result { text: "the game jam was fun though ^_^", distance_gate: 10000 }, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ load_level force: args.state.tick_count == 0~ - Inside source: true *** True Line Result load_level force: args.state.tick_count == 0 ** Processing line: ~ state.line_mode ||= :terrain~ - Inside source: true *** True Line Result state.line_mode ||= :terrain ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.sound_index ||= 1~ - Inside source: true *** True Line Result state.sound_index ||= 1 ** Processing line: ~ circle.potential_lift ||= 0~ - Inside source: true *** True Line Result circle.potential_lift ||= 0 ** Processing line: ~ circle.angle ||= 90~ - Inside source: true *** True Line Result circle.angle ||= 90 ** Processing line: ~ circle.check_point_at ||= -1000~ - Inside source: true *** True Line Result circle.check_point_at ||= -1000 ** Processing line: ~ circle.game_over_at ||= -1000~ - Inside source: true *** True Line Result circle.game_over_at ||= -1000 ** Processing line: ~ circle.x ||= -485~ - Inside source: true *** True Line Result circle.x ||= -485 ** Processing line: ~ circle.y ||= 12226~ - Inside source: true *** True Line Result circle.y ||= 12226 ** Processing line: ~ circle.check_point_x ||= circle.x~ - Inside source: true *** True Line Result circle.check_point_x ||= circle.x ** Processing line: ~ circle.check_point_y ||= circle.y~ - Inside source: true *** True Line Result circle.check_point_y ||= circle.y ** Processing line: ~ circle.dy ||= 0~ - Inside source: true *** True Line Result circle.dy ||= 0 ** Processing line: ~ circle.dx ||= 0~ - Inside source: true *** True Line Result circle.dx ||= 0 ** Processing line: ~ circle.previous_dy ||= 0~ - Inside source: true *** True Line Result circle.previous_dy ||= 0 ** Processing line: ~ circle.previous_dx ||= 0~ - Inside source: true *** True Line Result circle.previous_dx ||= 0 ** Processing line: ~ circle.angle ||= 0~ - Inside source: true *** True Line Result circle.angle ||= 0 ** Processing line: ~ circle.after_images ||= []~ - Inside source: true *** True Line Result circle.after_images ||= [] ** Processing line: ~ circle.terrains_to_monitor ||= {}~ - Inside source: true *** True Line Result circle.terrains_to_monitor ||= {} ** Processing line: ~ circle.impact_history ||= []~ - Inside source: true *** True Line Result circle.impact_history ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ camera.x ||= 0~ - Inside source: true *** True Line Result camera.x ||= 0 ** Processing line: ~ camera.y ||= 0~ - Inside source: true *** True Line Result camera.y ||= 0 ** Processing line: ~ camera.target_x ||= 0~ - Inside source: true *** True Line Result camera.target_x ||= 0 ** Processing line: ~ camera.target_y ||= 0~ - Inside source: true *** True Line Result camera.target_y ||= 0 ** Processing line: ~ state.snaps ||= { }~ - Inside source: true *** True Line Result state.snaps ||= { } ** Processing line: ~ state.snap_number = 10~ - Inside source: true *** True Line Result state.snap_number = 10 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.storyline_x ||= -1000~ - Inside source: true *** True Line Result args.state.storyline_x ||= -1000 ** Processing line: ~ args.state.storyline_y ||= -1000~ - Inside source: true *** True Line Result args.state.storyline_y ||= -1000 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_game~ - Inside source: true *** True Line Result def render_game ** Processing line: ~ outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result outputs.background_color = [0, 0, 0] ** Processing line: ~ outputs.sprites << [-circle.x + 1100,~ - Inside source: true *** True Line Result outputs.sprites << [-circle.x + 1100, ** Processing line: ~ -circle.y - 100,~ - Inside source: true *** True Line Result -circle.y - 100, ** Processing line: ~ 2416 * 4,~ - Inside source: true *** True Line Result 2416 * 4, ** Processing line: ~ 3574 * 4,~ - Inside source: true *** True Line Result 3574 * 4, ** Processing line: ~ 'sprites/jupiter.png']~ - Inside source: true *** True Line Result 'sprites/jupiter.png'] ** Processing line: ~ outputs.sprites << [-circle.x,~ - Inside source: true *** True Line Result outputs.sprites << [-circle.x, ** Processing line: ~ -circle.y,~ - Inside source: true *** True Line Result -circle.y, ** Processing line: ~ 2416 * 4,~ - Inside source: true *** True Line Result 2416 * 4, ** Processing line: ~ 3574 * 4,~ - Inside source: true *** True Line Result 3574 * 4, ** Processing line: ~ 'sprites/level.png']~ - Inside source: true *** True Line Result 'sprites/level.png'] ** Processing line: ~ outputs.sprites << state.whisp_queue~ - Inside source: true *** True Line Result outputs.sprites << state.whisp_queue ** Processing line: ~ render_aiming_retical~ - Inside source: true *** True Line Result render_aiming_retical ** Processing line: ~ render_circle~ - Inside source: true *** True Line Result render_circle ** Processing line: ~ render_notification~ - Inside source: true *** True Line Result render_notification ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_notification~ - Inside source: true *** True Line Result def render_notification ** Processing line: ~ toast_length = 500~ - Inside source: true *** True Line Result toast_length = 500 ** Processing line: ~ if circle.game_over_at.elapsed_time < toast_length~ - Inside source: true *** True Line Result if circle.game_over_at.elapsed_time < toast_length ** Processing line: ~ label_text = "..."~ - Inside source: true *** True Line Result label_text = "..." ** Processing line: ~ elsif circle.check_point_at.elapsed_time > toast_length~ - Inside source: true *** True Line Result elsif circle.check_point_at.elapsed_time > toast_length ** Processing line: ~ args.state.current_storyline = nil~ - Inside source: true *** True Line Result args.state.current_storyline = nil ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if circle.check_point_at &&~ - Inside source: true *** True Line Result if circle.check_point_at && ** Processing line: ~ circle.check_point_at.elapsed_time == 1 &&~ - Inside source: true *** True Line Result circle.check_point_at.elapsed_time == 1 && ** Processing line: ~ !args.state.current_storyline~ - Inside source: true *** True Line Result !args.state.current_storyline ** Processing line: ~ if args.state.storyline.length > 0 && args.state.distance_traveled > args.state.storyline[0][:distance_gate]~ - Inside source: true *** True Line Result if args.state.storyline.length > 0 && args.state.distance_traveled > args.state.storyline[0][:distance_gate] ** Processing line: ~ args.state.current_storyline = args.state.storyline.shift[:text]~ - Inside source: true *** True Line Result args.state.current_storyline = args.state.storyline.shift[:text] ** Processing line: ~ args.state.distance_traveled ||= 0~ - Inside source: true *** True Line Result args.state.distance_traveled ||= 0 ** Processing line: ~ args.state.storyline_x = circle.x~ - Inside source: true *** True Line Result args.state.storyline_x = circle.x ** Processing line: ~ args.state.storyline_y = circle.y~ - Inside source: true *** True Line Result args.state.storyline_y = circle.y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ return unless args.state.current_storyline~ - Inside source: true *** True Line Result return unless args.state.current_storyline ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ label_text = args.state.current_storyline~ - Inside source: true *** True Line Result label_text = args.state.current_storyline ** Processing line: ~ return unless label_text~ - Inside source: true *** True Line Result return unless label_text ** Processing line: ~ x = circle.x + camera.x~ - Inside source: true *** True Line Result x = circle.x + camera.x ** Processing line: ~ y = circle.y + camera.y - 40~ - Inside source: true *** True Line Result y = circle.y + camera.y - 40 ** Processing line: ~ w = 900~ - Inside source: true *** True Line Result w = 900 ** Processing line: ~ h = 30~ - Inside source: true *** True Line Result h = 30 ** Processing line: ~ outputs.primitives << [x - w.idiv(2), y - h, w, h, 255, 255, 255, 255].solid~ - Inside source: true *** True Line Result outputs.primitives << [x - w.idiv(2), y - h, w, h, 255, 255, 255, 255].solid ** Processing line: ~ outputs.primitives << [x - w.idiv(2), y - h, w, h, 0, 0, 0, 255].border~ - Inside source: true *** True Line Result outputs.primitives << [x - w.idiv(2), y - h, w, h, 0, 0, 0, 255].border ** Processing line: ~ outputs.labels << [x, y - 4, label_text, 1, 1, 0, 0, 0, 255]~ - Inside source: true *** True Line Result outputs.labels << [x, y - 4, label_text, 1, 1, 0, 0, 0, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_aiming_retical~ - Inside source: true *** True Line Result def render_aiming_retical ** Processing line: ~ outputs.sprites << [state.camera.x + circle.x + circle.angle.vector_x(circle.potential_lift * 10) - 5,~ - Inside source: true *** True Line Result outputs.sprites << [state.camera.x + circle.x + circle.angle.vector_x(circle.potential_lift * 10) - 5, ** Processing line: ~ state.camera.y + circle.y + circle.angle.vector_y(circle.potential_lift * 10) - 5,~ - Inside source: true *** True Line Result state.camera.y + circle.y + circle.angle.vector_y(circle.potential_lift * 10) - 5, ** Processing line: ~ 10, 10, 'sprites/circle-orange.png']~ - Inside source: true *** True Line Result 10, 10, 'sprites/circle-orange.png'] ** Processing line: ~ outputs.sprites << [state.camera.x + circle.x + circle.angle.vector_x(circle.radius * 3) - 5,~ - Inside source: true *** True Line Result outputs.sprites << [state.camera.x + circle.x + circle.angle.vector_x(circle.radius * 3) - 5, ** Processing line: ~ state.camera.y + circle.y + circle.angle.vector_y(circle.radius * 3) - 5,~ - Inside source: true *** True Line Result state.camera.y + circle.y + circle.angle.vector_y(circle.radius * 3) - 5, ** Processing line: ~ 10, 10, 'sprites/circle-orange.png', 0, 128]~ - Inside source: true *** True Line Result 10, 10, 'sprites/circle-orange.png', 0, 128] ** Processing line: ~ if rand > 0.9~ - Inside source: true *** True Line Result if rand > 0.9 ** Processing line: ~ outputs.sprites << [state.camera.x + circle.x + circle.angle.vector_x(circle.radius * 3) - 5,~ - Inside source: true *** True Line Result outputs.sprites << [state.camera.x + circle.x + circle.angle.vector_x(circle.radius * 3) - 5, ** Processing line: ~ state.camera.y + circle.y + circle.angle.vector_y(circle.radius * 3) - 5,~ - Inside source: true *** True Line Result state.camera.y + circle.y + circle.angle.vector_y(circle.radius * 3) - 5, ** Processing line: ~ 10, 10, 'sprites/circle-white.png', 0, 128]~ - Inside source: true *** True Line Result 10, 10, 'sprites/circle-white.png', 0, 128] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_circle~ - Inside source: true *** True Line Result def render_circle ** Processing line: ~ outputs.sprites << circle.after_images.map do |ai|~ - Inside source: true *** True Line Result outputs.sprites << circle.after_images.map do |ai| ** Processing line: ~ ai.merge(x: ai.x + state.camera.x - circle.radius,~ - Inside source: true *** True Line Result ai.merge(x: ai.x + state.camera.x - circle.radius, ** Processing line: ~ y: ai.y + state.camera.y - circle.radius,~ - Inside source: true *** True Line Result y: ai.y + state.camera.y - circle.radius, ** Processing line: ~ w: circle.radius * 2,~ - Inside source: true *** True Line Result w: circle.radius * 2, ** Processing line: ~ h: circle.radius * 2,~ - Inside source: true *** True Line Result h: circle.radius * 2, ** Processing line: ~ path: 'sprites/circle-white.png')~ - Inside source: true *** True Line Result path: 'sprites/circle-white.png') ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.sprites << [(circle.x - circle.radius) + state.camera.x,~ - Inside source: true *** True Line Result outputs.sprites << [(circle.x - circle.radius) + state.camera.x, ** Processing line: ~ (circle.y - circle.radius) + state.camera.y,~ - Inside source: true *** True Line Result (circle.y - circle.radius) + state.camera.y, ** Processing line: ~ circle.radius * 2,~ - Inside source: true *** True Line Result circle.radius * 2, ** Processing line: ~ circle.radius * 2,~ - Inside source: true *** True Line Result circle.radius * 2, ** Processing line: ~ 'sprites/probe.png']~ - Inside source: true *** True Line Result 'sprites/probe.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_debug~ - Inside source: true *** True Line Result def render_debug ** Processing line: ~ return unless state.debug_mode~ - Inside source: true *** True Line Result return unless state.debug_mode ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [10, 30, state.line_mode, 0, 0, 0, 0, 0]~ - Inside source: true *** True Line Result outputs.labels << [10, 30, state.line_mode, 0, 0, 0, 0, 0] ** Processing line: ~ outputs.labels << [12, 32, state.line_mode, 0, 0, 255, 255, 255]~ - Inside source: true *** True Line Result outputs.labels << [12, 32, state.line_mode, 0, 0, 255, 255, 255] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.lines << trajectory(circle).line.to_hash.tap do |h|~ - Inside source: true *** True Line Result args.outputs.lines << trajectory(circle).line.to_hash.tap do |h| ** Processing line: ~ h[:x] += state.camera.x~ - Inside source: true *** True Line Result h[:x] += state.camera.x ** Processing line: ~ h[:y] += state.camera.y~ - Inside source: true *** True Line Result h[:y] += state.camera.y ** Processing line: ~ h[:x2] += state.camera.x~ - Inside source: true *** True Line Result h[:x2] += state.camera.x ** Processing line: ~ h[:y2] += state.camera.y~ - Inside source: true *** True Line Result h[:y2] += state.camera.y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.primitives << state.terrain.find_all do |t|~ - Inside source: true *** True Line Result outputs.primitives << state.terrain.find_all do |t| ** Processing line: ~ circle.x.between?(t.x - 640, t.x2 + 640) || circle.y.between?(t.y - 360, t.y2 + 360)~ - Inside source: true *** True Line Result circle.x.between?(t.x - 640, t.x2 + 640) || circle.y.between?(t.y - 360, t.y2 + 360) ** Processing line: ~ end.map do |t|~ - Inside source: true *** True Line Result end.map do |t| ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ t.line.associate(r: 0, g: 255, b: 0) do |h|~ - Inside source: true *** True Line Result t.line.associate(r: 0, g: 255, b: 0) do |h| ** Processing line: ~ h.x += state.camera.x~ - Inside source: true *** True Line Result h.x += state.camera.x ** Processing line: ~ h.y += state.camera.y~ - Inside source: true *** True Line Result h.y += state.camera.y ** Processing line: ~ h.x2 += state.camera.x~ - Inside source: true *** True Line Result h.x2 += state.camera.x ** Processing line: ~ h.y2 += state.camera.y~ - Inside source: true *** True Line Result h.y2 += state.camera.y ** Processing line: ~ if circle.rect.intersect_rect? t[:rect]~ - Inside source: true *** True Line Result if circle.rect.intersect_rect? t[:rect] ** Processing line: ~ h[:r] = 255~ - Inside source: true *** True Line Result h[:r] = 255 ** Processing line: ~ h[:g] = 0~ - Inside source: true *** True Line Result h[:g] = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ h~ - Inside source: true *** True Line Result h ** Processing line: ~ end,~ - Inside source: true *** True Line Result end, ** Processing line: ~ t[:rect].border.associate(r: 255, g: 0, b: 0) do |h|~ - Inside source: true *** True Line Result t[:rect].border.associate(r: 255, g: 0, b: 0) do |h| ** Processing line: ~ h.x += state.camera.x~ - Inside source: true *** True Line Result h.x += state.camera.x ** Processing line: ~ h.y += state.camera.y~ - Inside source: true *** True Line Result h.y += state.camera.y ** Processing line: ~ h.b = 255 if line_near_rect? circle.rect, t~ - Inside source: true *** True Line Result h.b = 255 if line_near_rect? circle.rect, t ** Processing line: ~ h~ - Inside source: true *** True Line Result h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.primitives << state.lava.find_all do |t|~ - Inside source: true *** True Line Result outputs.primitives << state.lava.find_all do |t| ** Processing line: ~ circle.x.between?(t.x - 640, t.x2 + 640) || circle.y.between?(t.y - 360, t.y2 + 360)~ - Inside source: true *** True Line Result circle.x.between?(t.x - 640, t.x2 + 640) || circle.y.between?(t.y - 360, t.y2 + 360) ** Processing line: ~ end.map do |t|~ - Inside source: true *** True Line Result end.map do |t| ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ t.line.associate(r: 0, g: 0, b: 255) do |h|~ - Inside source: true *** True Line Result t.line.associate(r: 0, g: 0, b: 255) do |h| ** Processing line: ~ h.x += state.camera.x~ - Inside source: true *** True Line Result h.x += state.camera.x ** Processing line: ~ h.y += state.camera.y~ - Inside source: true *** True Line Result h.y += state.camera.y ** Processing line: ~ h.x2 += state.camera.x~ - Inside source: true *** True Line Result h.x2 += state.camera.x ** Processing line: ~ h.y2 += state.camera.y~ - Inside source: true *** True Line Result h.y2 += state.camera.y ** Processing line: ~ if circle.rect.intersect_rect? t[:rect]~ - Inside source: true *** True Line Result if circle.rect.intersect_rect? t[:rect] ** Processing line: ~ h[:r] = 255~ - Inside source: true *** True Line Result h[:r] = 255 ** Processing line: ~ h[:b] = 0~ - Inside source: true *** True Line Result h[:b] = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ h~ - Inside source: true *** True Line Result h ** Processing line: ~ end,~ - Inside source: true *** True Line Result end, ** Processing line: ~ t[:rect].border.associate(r: 255, g: 0, b: 0) do |h|~ - Inside source: true *** True Line Result t[:rect].border.associate(r: 255, g: 0, b: 0) do |h| ** Processing line: ~ h.x += state.camera.x~ - Inside source: true *** True Line Result h.x += state.camera.x ** Processing line: ~ h.y += state.camera.y~ - Inside source: true *** True Line Result h.y += state.camera.y ** Processing line: ~ h.b = 255 if line_near_rect? circle.rect, t~ - Inside source: true *** True Line Result h.b = 255 if line_near_rect? circle.rect, t ** Processing line: ~ h~ - Inside source: true *** True Line Result h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.god_mode~ - Inside source: true *** True Line Result if state.god_mode ** Processing line: ~ border = circle.rect.merge(x: circle.rect.x + state.camera.x,~ - Inside source: true *** True Line Result border = circle.rect.merge(x: circle.rect.x + state.camera.x, ** Processing line: ~ y: circle.rect.y + state.camera.y,~ - Inside source: true *** True Line Result y: circle.rect.y + state.camera.y, ** Processing line: ~ g: 255)~ - Inside source: true *** True Line Result g: 255) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ border = circle.rect.merge(x: circle.rect.x + state.camera.x,~ - Inside source: true *** True Line Result border = circle.rect.merge(x: circle.rect.x + state.camera.x, ** Processing line: ~ y: circle.rect.y + state.camera.y,~ - Inside source: true *** True Line Result y: circle.rect.y + state.camera.y, ** Processing line: ~ b: 255)~ - Inside source: true *** True Line Result b: 255) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.borders << border~ - Inside source: true *** True Line Result outputs.borders << border ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ overlapping ||= {}~ - Inside source: true *** True Line Result overlapping ||= {} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ circle.impact_history.each do |h|~ - Inside source: true *** True Line Result circle.impact_history.each do |h| ** Processing line: ~ label_mod = 300~ - Inside source: true *** True Line Result label_mod = 300 ** Processing line: ~ x = (h[:body][:x].-(150).idiv(label_mod)) * label_mod + camera.x~ - Inside source: true *** True Line Result x = (h[:body][:x].-(150).idiv(label_mod)) * label_mod + camera.x ** Processing line: ~ y = (h[:body][:y].+(150).idiv(label_mod)) * label_mod + camera.y~ - Inside source: true *** True Line Result y = (h[:body][:y].+(150).idiv(label_mod)) * label_mod + camera.y ** Processing line: ~ 10.times do~ - Inside source: true *** True Line Result 10.times do ** Processing line: ~ if overlapping[x] && overlapping[x][y]~ - Inside source: true *** True Line Result if overlapping[x] && overlapping[x][y] ** Processing line: ~ y -= 52~ - Inside source: true *** True Line Result y -= 52 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ break~ - Inside source: true *** True Line Result break ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ overlapping[x] ||= {}~ - Inside source: true *** True Line Result overlapping[x] ||= {} ** Processing line: ~ overlapping[x][y] ||= true~ - Inside source: true *** True Line Result overlapping[x][y] ||= true ** Processing line: ~ outputs.primitives << [x, y - 25, 300, 50, 0, 0, 0, 128].solid~ - Inside source: true *** True Line Result outputs.primitives << [x, y - 25, 300, 50, 0, 0, 0, 128].solid ** Processing line: ~ outputs.labels << [x + 10, y + 24, "dy: %.2f" % h[:body][:new_dy], -2, 0, 255, 255, 255]~ - Inside source: true *** True Line Result outputs.labels << [x + 10, y + 24, "dy: %.2f" % h[:body][:new_dy], -2, 0, 255, 255, 255] ** Processing line: ~ outputs.labels << [x + 10, y + 9, "dx: %.2f" % h[:body][:new_dx], -2, 0, 255, 255, 255]~ - Inside source: true *** True Line Result outputs.labels << [x + 10, y + 9, "dx: %.2f" % h[:body][:new_dx], -2, 0, 255, 255, 255] ** Processing line: ~ outputs.labels << [x + 10, y - 5, " ?: #{h[:body][:new_reason]}", -2, 0, 255, 255, 255]~ - Inside source: true *** True Line Result outputs.labels << [x + 10, y - 5, " ?: #{h[:body][:new_reason]}", -2, 0, 255, 255, 255] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [x + 100, y + 24, "angle: %.2f" % h[:impact][:angle], -2, 0, 255, 255, 255]~ - Inside source: true *** True Line Result outputs.labels << [x + 100, y + 24, "angle: %.2f" % h[:impact][:angle], -2, 0, 255, 255, 255] ** Processing line: ~ outputs.labels << [x + 100, y + 9, "m(l): %.2f" % h[:terrain][:slope], -2, 0, 255, 255, 255]~ - Inside source: true *** True Line Result outputs.labels << [x + 100, y + 9, "m(l): %.2f" % h[:terrain][:slope], -2, 0, 255, 255, 255] ** Processing line: ~ outputs.labels << [x + 100, y - 5, "m(c): %.2f" % h[:body][:slope], -2, 0, 255, 255, 255]~ - Inside source: true *** True Line Result outputs.labels << [x + 100, y - 5, "m(c): %.2f" % h[:body][:slope], -2, 0, 255, 255, 255] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ outputs.labels << [x + 200, y + 24, "ray: #{h[:impact][:ray]}", -2, 0, 255, 255, 255]~ - Inside source: true *** True Line Result outputs.labels << [x + 200, y + 24, "ray: #{h[:impact][:ray]}", -2, 0, 255, 255, 255] ** Processing line: ~ outputs.labels << [x + 200, y + 9, "nxt: #{h[:impact][:ray_next]}", -2, 0, 255, 255, 255]~ - Inside source: true *** True Line Result outputs.labels << [x + 200, y + 9, "nxt: #{h[:impact][:ray_next]}", -2, 0, 255, 255, 255] ** Processing line: ~ outputs.labels << [x + 200, y - 5, "typ: #{h[:impact][:type]}", -2, 0, 255, 255, 255]~ - Inside source: true *** True Line Result outputs.labels << [x + 200, y - 5, "typ: #{h[:impact][:type]}", -2, 0, 255, 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if circle.floor~ - Inside source: true *** True Line Result if circle.floor ** Processing line: ~ outputs.labels << [circle.x + camera.x + 30, circle.y + camera.y + 100, "point: #{circle.floor_point.slice(:x, :y).values}", -2, 0]~ - Inside source: true *** True Line Result outputs.labels << [circle.x + camera.x + 30, circle.y + camera.y + 100, "point: #{circle.floor_point.slice(:x, :y).values}", -2, 0] ** Processing line: ~ outputs.labels << [circle.x + camera.x + 31, circle.y + camera.y + 101, "point: #{circle.floor_point.slice(:x, :y).values}", -2, 0, 255, 255, 255]~ - Inside source: true *** True Line Result outputs.labels << [circle.x + camera.x + 31, circle.y + camera.y + 101, "point: #{circle.floor_point.slice(:x, :y).values}", -2, 0, 255, 255, 255] ** Processing line: ~ outputs.labels << [circle.x + camera.x + 30, circle.y + camera.y + 85, "circle: #{circle.as_hash.slice(:x, :y).values}", -2, 0]~ - Inside source: true *** True Line Result outputs.labels << [circle.x + camera.x + 30, circle.y + camera.y + 85, "circle: #{circle.as_hash.slice(:x, :y).values}", -2, 0] ** Processing line: ~ outputs.labels << [circle.x + camera.x + 31, circle.y + camera.y + 86, "circle: #{circle.as_hash.slice(:x, :y).values}", -2, 0, 255, 255, 255]~ - Inside source: true *** True Line Result outputs.labels << [circle.x + camera.x + 31, circle.y + camera.y + 86, "circle: #{circle.as_hash.slice(:x, :y).values}", -2, 0, 255, 255, 255] ** Processing line: ~ outputs.labels << [circle.x + camera.x + 30, circle.y + camera.y + 70, "rel: #{circle.floor_relative_x} #{circle.floor_relative_y}", -2, 0]~ - Inside source: true *** True Line Result outputs.labels << [circle.x + camera.x + 30, circle.y + camera.y + 70, "rel: #{circle.floor_relative_x} #{circle.floor_relative_y}", -2, 0] ** Processing line: ~ outputs.labels << [circle.x + camera.x + 31, circle.y + camera.y + 71, "rel: #{circle.floor_relative_x} #{circle.floor_relative_y}", -2, 0, 255, 255, 255]~ - Inside source: true *** True Line Result outputs.labels << [circle.x + camera.x + 31, circle.y + camera.y + 71, "rel: #{circle.floor_relative_x} #{circle.floor_relative_y}", -2, 0, 255, 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_stage_editor~ - Inside source: true *** True Line Result def render_stage_editor ** Processing line: ~ return unless state.god_mode~ - Inside source: true *** True Line Result return unless state.god_mode ** Processing line: ~ return unless state.point_one~ - Inside source: true *** True Line Result return unless state.point_one ** Processing line: ~ args.lines << [state.point_one, inputs.mouse.point, 0, 255, 255]~ - Inside source: true *** True Line Result args.lines << [state.point_one, inputs.mouse.point, 0, 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def trajectory body~ - Inside source: true *** True Line Result def trajectory body ** Processing line: ~ [body.x + body.dx,~ - Inside source: true *** True Line Result [body.x + body.dx, ** Processing line: ~ body.y + body.dy,~ - Inside source: true *** True Line Result body.y + body.dy, ** Processing line: ~ body.x + body.dx * 1000,~ - Inside source: true *** True Line Result body.x + body.dx * 1000, ** Processing line: ~ body.y + body.dy * 1000,~ - Inside source: true *** True Line Result body.y + body.dy * 1000, ** Processing line: ~ 0, 255, 255]~ - Inside source: true *** True Line Result 0, 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def lengthen_line line, num~ - Inside source: true *** True Line Result def lengthen_line line, num ** Processing line: ~ line = normalize_line(line)~ - Inside source: true *** True Line Result line = normalize_line(line) ** Processing line: ~ slope = geometry.line_slope(line, replace_infinity: 10).abs~ - Inside source: true *** True Line Result slope = geometry.line_slope(line, replace_infinity: 10).abs ** Processing line: ~ if slope < 2~ - Inside source: true *** True Line Result if slope < 2 ** Processing line: ~ [line.x - num, line.y, line.x2 + num, line.y2].line.to_hash~ - Inside source: true *** True Line Result [line.x - num, line.y, line.x2 + num, line.y2].line.to_hash ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ [line.x, line.y, line.x2, line.y2].line.to_hash~ - Inside source: true *** True Line Result [line.x, line.y, line.x2, line.y2].line.to_hash ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def normalize_line line~ - Inside source: true *** True Line Result def normalize_line line ** Processing line: ~ if line.x > line.x2~ - Inside source: true *** True Line Result if line.x > line.x2 ** Processing line: ~ x = line.x2~ - Inside source: true *** True Line Result x = line.x2 ** Processing line: ~ y = line.y2~ - Inside source: true *** True Line Result y = line.y2 ** Processing line: ~ x2 = line.x~ - Inside source: true *** True Line Result x2 = line.x ** Processing line: ~ y2 = line.y~ - Inside source: true *** True Line Result y2 = line.y ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ x = line.x~ - Inside source: true *** True Line Result x = line.x ** Processing line: ~ y = line.y~ - Inside source: true *** True Line Result y = line.y ** Processing line: ~ x2 = line.x2~ - Inside source: true *** True Line Result x2 = line.x2 ** Processing line: ~ y2 = line.y2~ - Inside source: true *** True Line Result y2 = line.y2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ [x, y, x2, y2]~ - Inside source: true *** True Line Result [x, y, x2, y2] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rect_for_line line~ - Inside source: true *** True Line Result def rect_for_line line ** Processing line: ~ if line.x > line.x2~ - Inside source: true *** True Line Result if line.x > line.x2 ** Processing line: ~ x = line.x2~ - Inside source: true *** True Line Result x = line.x2 ** Processing line: ~ y = line.y2~ - Inside source: true *** True Line Result y = line.y2 ** Processing line: ~ x2 = line.x~ - Inside source: true *** True Line Result x2 = line.x ** Processing line: ~ y2 = line.y~ - Inside source: true *** True Line Result y2 = line.y ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ x = line.x~ - Inside source: true *** True Line Result x = line.x ** Processing line: ~ y = line.y~ - Inside source: true *** True Line Result y = line.y ** Processing line: ~ x2 = line.x2~ - Inside source: true *** True Line Result x2 = line.x2 ** Processing line: ~ y2 = line.y2~ - Inside source: true *** True Line Result y2 = line.y2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ w = x2 - x~ - Inside source: true *** True Line Result w = x2 - x ** Processing line: ~ h = y2 - y~ - Inside source: true *** True Line Result h = y2 - y ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if h < 0~ - Inside source: true *** True Line Result if h < 0 ** Processing line: ~ y += h~ - Inside source: true *** True Line Result y += h ** Processing line: ~ h = h.abs~ - Inside source: true *** True Line Result h = h.abs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if w < circle.radius~ - Inside source: true *** True Line Result if w < circle.radius ** Processing line: ~ x -= circle.radius~ - Inside source: true *** True Line Result x -= circle.radius ** Processing line: ~ w = circle.radius * 2~ - Inside source: true *** True Line Result w = circle.radius * 2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if h < circle.radius~ - Inside source: true *** True Line Result if h < circle.radius ** Processing line: ~ y -= circle.radius~ - Inside source: true *** True Line Result y -= circle.radius ** Processing line: ~ h = circle.radius * 2~ - Inside source: true *** True Line Result h = circle.radius * 2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: x, y: y, w: w, h: h }~ - Inside source: true *** True Line Result { x: x, y: y, w: w, h: h } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def snap_to_grid x, y, snaps~ - Inside source: true *** True Line Result def snap_to_grid x, y, snaps ** Processing line: ~ snap_number = 10~ - Inside source: true *** True Line Result snap_number = 10 ** Processing line: ~ x = x.to_i~ - Inside source: true *** True Line Result x = x.to_i ** Processing line: ~ y = y.to_i~ - Inside source: true *** True Line Result y = y.to_i ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ x_floor = x.idiv(snap_number) * snap_number~ - Inside source: true *** True Line Result x_floor = x.idiv(snap_number) * snap_number ** Processing line: ~ x_mod = x % snap_number~ - Inside source: true *** True Line Result x_mod = x % snap_number ** Processing line: ~ x_ceil = (x.idiv(snap_number) + 1) * snap_number~ - Inside source: true *** True Line Result x_ceil = (x.idiv(snap_number) + 1) * snap_number ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ y_floor = y.idiv(snap_number) * snap_number~ - Inside source: true *** True Line Result y_floor = y.idiv(snap_number) * snap_number ** Processing line: ~ y_mod = y % snap_number~ - Inside source: true *** True Line Result y_mod = y % snap_number ** Processing line: ~ y_ceil = (y.idiv(snap_number) + 1) * snap_number~ - Inside source: true *** True Line Result y_ceil = (y.idiv(snap_number) + 1) * snap_number ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if snaps[x_floor]~ - Inside source: true *** True Line Result if snaps[x_floor] ** Processing line: ~ x_result = x_floor~ - Inside source: true *** True Line Result x_result = x_floor ** Processing line: ~ elsif snaps[x_ceil]~ - Inside source: true *** True Line Result elsif snaps[x_ceil] ** Processing line: ~ x_result = x_ceil~ - Inside source: true *** True Line Result x_result = x_ceil ** Processing line: ~ elsif x_mod < snap_number.idiv(2)~ - Inside source: true *** True Line Result elsif x_mod < snap_number.idiv(2) ** Processing line: ~ x_result = x_floor~ - Inside source: true *** True Line Result x_result = x_floor ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ x_result = x_ceil~ - Inside source: true *** True Line Result x_result = x_ceil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ snaps[x_result] ||= {}~ - Inside source: true *** True Line Result snaps[x_result] ||= {} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if snaps[x_result][y_floor]~ - Inside source: true *** True Line Result if snaps[x_result][y_floor] ** Processing line: ~ y_result = y_floor~ - Inside source: true *** True Line Result y_result = y_floor ** Processing line: ~ elsif snaps[x_result][y_ceil]~ - Inside source: true *** True Line Result elsif snaps[x_result][y_ceil] ** Processing line: ~ y_result = y_ceil~ - Inside source: true *** True Line Result y_result = y_ceil ** Processing line: ~ elsif y_mod < snap_number.idiv(2)~ - Inside source: true *** True Line Result elsif y_mod < snap_number.idiv(2) ** Processing line: ~ y_result = y_floor~ - Inside source: true *** True Line Result y_result = y_floor ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ y_result = y_ceil~ - Inside source: true *** True Line Result y_result = y_ceil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ snaps[x_result][y_result] = true~ - Inside source: true *** True Line Result snaps[x_result][y_result] = true ** Processing line: ~ return [x_result, y_result]~ - Inside source: true *** True Line Result return [x_result, y_result] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def snap_line line~ - Inside source: true *** True Line Result def snap_line line ** Processing line: ~ x, y, x2, y2 = line~ - Inside source: true *** True Line Result x, y, x2, y2 = line ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def string_to_line s~ - Inside source: true *** True Line Result def string_to_line s ** Processing line: ~ x, y, x2, y2 = s.split(',').map(&:to_f)~ - Inside source: true *** True Line Result x, y, x2, y2 = s.split(',').map(&:to_f) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if x > x2~ - Inside source: true *** True Line Result if x > x2 ** Processing line: ~ x2, x = x, x2~ - Inside source: true *** True Line Result x2, x = x, x2 ** Processing line: ~ y2, y = y, y2~ - Inside source: true *** True Line Result y2, y = y, y2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ x, y = snap_to_grid x, y, state.snaps~ - Inside source: true *** True Line Result x, y = snap_to_grid x, y, state.snaps ** Processing line: ~ x2, y2 = snap_to_grid x2, y2, state.snaps~ - Inside source: true *** True Line Result x2, y2 = snap_to_grid x2, y2, state.snaps ** Processing line: ~ [x, y, x2, y2].line.to_hash~ - Inside source: true *** True Line Result [x, y, x2, y2].line.to_hash ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def load_lines file~ - Inside source: true *** True Line Result def load_lines file ** Processing line: ~ return unless state.snaps~ - Inside source: true *** True Line Result return unless state.snaps ** Processing line: ~ data = gtk.read_file(file) || ""~ - Inside source: true *** True Line Result data = gtk.read_file(file) || "" ** Processing line: ~ data.each_line~ - Inside source: true *** True Line Result data.each_line ** Processing line: ~ .reject { |l| l.strip.length == 0 }~ - Inside source: true *** True Line Result .reject { |l| l.strip.length == 0 } ** Processing line: ~ .map { |l| string_to_line l }~ - Inside source: true *** True Line Result .map { |l| string_to_line l } ** Processing line: ~ .map { |h| h.merge(rect: rect_for_line(h)) }~ - Inside source: true *** True Line Result .map { |h| h.merge(rect: rect_for_line(h)) } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def load_terrain~ - Inside source: true *** True Line Result def load_terrain ** Processing line: ~ load_lines 'data/level.txt'~ - Inside source: true *** True Line Result load_lines 'data/level.txt' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def load_lava~ - Inside source: true *** True Line Result def load_lava ** Processing line: ~ load_lines 'data/level_lava.txt'~ - Inside source: true *** True Line Result load_lines 'data/level_lava.txt' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def load_level force: false~ - Inside source: true *** True Line Result def load_level force: false ** Processing line: ~ if force~ - Inside source: true *** True Line Result if force ** Processing line: ~ state.snaps = {}~ - Inside source: true *** True Line Result state.snaps = {} ** Processing line: ~ state.terrain = load_terrain~ - Inside source: true *** True Line Result state.terrain = load_terrain ** Processing line: ~ state.lava = load_lava~ - Inside source: true *** True Line Result state.lava = load_lava ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.terrain ||= load_terrain~ - Inside source: true *** True Line Result state.terrain ||= load_terrain ** Processing line: ~ state.lava ||= load_lava~ - Inside source: true *** True Line Result state.lava ||= load_lava ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def save_lines lines, file~ - Inside source: true *** True Line Result def save_lines lines, file ** Processing line: ~ s = lines.map do |l|~ - Inside source: true *** True Line Result s = lines.map do |l| ** Processing line: ~ "#{l.x1},#{l.y1},#{l.x2},#{l.y2}"~ - Inside source: true *** True Line Result "#{l.x1},#{l.y1},#{l.x2},#{l.y2}" ** Processing line: ~ end.join("\n")~ - Inside source: true *** True Line Result end.join("\n") ** Processing line: ~ gtk.write_file(file, s)~ - Inside source: true *** True Line Result gtk.write_file(file, s) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def save_level~ - Inside source: true *** True Line Result def save_level ** Processing line: ~ save_lines(state.terrain, 'level.txt')~ - Inside source: true *** True Line Result save_lines(state.terrain, 'level.txt') ** Processing line: ~ save_lines(state.lava, 'level_lava.txt')~ - Inside source: true *** True Line Result save_lines(state.lava, 'level_lava.txt') ** Processing line: ~ load_level force: true~ - Inside source: true *** True Line Result load_level force: true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def line_near_rect? rect, terrain~ - Inside source: true *** True Line Result def line_near_rect? rect, terrain ** Processing line: ~ geometry.intersect_rect?(rect, terrain[:rect])~ - Inside source: true *** True Line Result geometry.intersect_rect?(rect, terrain[:rect]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def point_within_line? point, line~ - Inside source: true *** True Line Result def point_within_line? point, line ** Processing line: ~ return false if !point~ - Inside source: true *** True Line Result return false if !point ** Processing line: ~ return false if !line~ - Inside source: true *** True Line Result return false if !line ** Processing line: ~ return true~ - Inside source: true *** True Line Result return true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_impacts x, dx, y, dy, radius~ - Inside source: true *** True Line Result def calc_impacts x, dx, y, dy, radius ** Processing line: ~ results = { }~ - Inside source: true *** True Line Result results = { } ** Processing line: ~ results[:x] = x~ - Inside source: true *** True Line Result results[:x] = x ** Processing line: ~ results[:y] = y~ - Inside source: true *** True Line Result results[:y] = y ** Processing line: ~ results[:dx] = x~ - Inside source: true *** True Line Result results[:dx] = x ** Processing line: ~ results[:dy] = y~ - Inside source: true *** True Line Result results[:dy] = y ** Processing line: ~ results[:point] = { x: x, y: y }~ - Inside source: true *** True Line Result results[:point] = { x: x, y: y } ** Processing line: ~ results[:rect] = { x: x - radius, y: y - radius, w: radius * 2, h: radius * 2 }~ - Inside source: true *** True Line Result results[:rect] = { x: x - radius, y: y - radius, w: radius * 2, h: radius * 2 } ** Processing line: ~ results[:trajectory] = trajectory(results)~ - Inside source: true *** True Line Result results[:trajectory] = trajectory(results) ** Processing line: ~ results[:impacts] = terrain.find_all { |t| t && (line_near_rect? results[:rect], t) }.map do |t|~ - Inside source: true *** True Line Result results[:impacts] = terrain.find_all { |t| t && (line_near_rect? results[:rect], t) }.map do |t| ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ terrain: t,~ - Inside source: true *** True Line Result terrain: t, ** Processing line: ~ point: geometry.line_intersect(results[:trajectory], t, replace_infinity: 1000),~ - Inside source: true *** True Line Result point: geometry.line_intersect(results[:trajectory], t, replace_infinity: 1000), ** Processing line: ~ type: :terrain~ - Inside source: true *** True Line Result type: :terrain ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end.reject { |t| !point_within_line? t[:point], t[:terrain] }~ - Inside source: true *** True Line Result end.reject { |t| !point_within_line? t[:point], t[:terrain] } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results[:impacts] += lava.find_all { |t| line_near_rect? results[:rect], t }.map do |t|~ - Inside source: true *** True Line Result results[:impacts] += lava.find_all { |t| line_near_rect? results[:rect], t }.map do |t| ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ terrain: t,~ - Inside source: true *** True Line Result terrain: t, ** Processing line: ~ point: geometry.line_intersect(results[:trajectory], t, replace_infinity: 1000),~ - Inside source: true *** True Line Result point: geometry.line_intersect(results[:trajectory], t, replace_infinity: 1000), ** Processing line: ~ type: :lava~ - Inside source: true *** True Line Result type: :lava ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end.reject { |t| !t || (!point_within_line? t[:point], t[:terrain]) }~ - Inside source: true *** True Line Result end.reject { |t| !t || (!point_within_line? t[:point], t[:terrain]) } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ results~ - Inside source: true *** True Line Result results ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_potential_impacts~ - Inside source: true *** True Line Result def calc_potential_impacts ** Processing line: ~ impact_results = calc_impacts circle.x, circle.dx, circle.y, circle.dy, circle.radius~ - Inside source: true *** True Line Result impact_results = calc_impacts circle.x, circle.dx, circle.y, circle.dy, circle.radius ** Processing line: ~ circle.rect = impact_results[:rect]~ - Inside source: true *** True Line Result circle.rect = impact_results[:rect] ** Processing line: ~ circle.trajectory = impact_results[:trajectory]~ - Inside source: true *** True Line Result circle.trajectory = impact_results[:trajectory] ** Processing line: ~ circle.impacts = impact_results[:impacts]~ - Inside source: true *** True Line Result circle.impacts = impact_results[:impacts] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_terrains_to_monitor~ - Inside source: true *** True Line Result def calc_terrains_to_monitor ** Processing line: ~ return unless circle.impacts~ - Inside source: true *** True Line Result return unless circle.impacts ** Processing line: ~ circle.impact = nil~ - Inside source: true *** True Line Result circle.impact = nil ** Processing line: ~ circle.impacts.each do |i|~ - Inside source: true *** True Line Result circle.impacts.each do |i| ** Processing line: ~ circle.terrains_to_monitor[i[:terrain]] ||= {~ - Inside source: true *** True Line Result circle.terrains_to_monitor[i[:terrain]] ||= { ** Processing line: ~ ray_start: geometry.ray_test(circle, i[:terrain]),~ - Inside source: true *** True Line Result ray_start: geometry.ray_test(circle, i[:terrain]), ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ circle.terrains_to_monitor[i[:terrain]][:ray_current] = geometry.ray_test(circle, i[:terrain])~ - Inside source: true *** True Line Result circle.terrains_to_monitor[i[:terrain]][:ray_current] = geometry.ray_test(circle, i[:terrain]) ** Processing line: ~ if circle.terrains_to_monitor[i[:terrain]][:ray_start] != circle.terrains_to_monitor[i[:terrain]][:ray_current]~ - Inside source: true *** True Line Result if circle.terrains_to_monitor[i[:terrain]][:ray_start] != circle.terrains_to_monitor[i[:terrain]][:ray_current] ** Processing line: ~ if circle.x.between?(i[:terrain].x, i[:terrain].x2) || circle.y.between?(i[:terrain].y, i[:terrain].y2)~ - Inside source: true *** True Line Result if circle.x.between?(i[:terrain].x, i[:terrain].x2) || circle.y.between?(i[:terrain].y, i[:terrain].y2) ** Processing line: ~ circle.impact = i~ - Inside source: true *** True Line Result circle.impact = i ** Processing line: ~ circle.ray_current = circle.terrains_to_monitor[i[:terrain]][:ray_current]~ - Inside source: true *** True Line Result circle.ray_current = circle.terrains_to_monitor[i[:terrain]][:ray_current] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def impact_result body, impact~ - Inside source: true *** True Line Result def impact_result body, impact ** Processing line: ~ infinity_alias = 1000~ - Inside source: true *** True Line Result infinity_alias = 1000 ** Processing line: ~ r = {~ - Inside source: true *** True Line Result r = { ** Processing line: ~ body: {},~ - Inside source: true *** True Line Result body: {}, ** Processing line: ~ terrain: {},~ - Inside source: true *** True Line Result terrain: {}, ** Processing line: ~ impact: {}~ - Inside source: true *** True Line Result impact: {} ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ r[:body][:line] = body.trajectory.dup~ - Inside source: true *** True Line Result r[:body][:line] = body.trajectory.dup ** Processing line: ~ r[:body][:slope] = geometry.line_slope(body.trajectory, replace_infinity: infinity_alias)~ - Inside source: true *** True Line Result r[:body][:slope] = geometry.line_slope(body.trajectory, replace_infinity: infinity_alias) ** Processing line: ~ r[:body][:slope_sign] = r[:body][:slope].sign~ - Inside source: true *** True Line Result r[:body][:slope_sign] = r[:body][:slope].sign ** Processing line: ~ r[:body][:x] = body.x~ - Inside source: true *** True Line Result r[:body][:x] = body.x ** Processing line: ~ r[:body][:y] = body.y~ - Inside source: true *** True Line Result r[:body][:y] = body.y ** Processing line: ~ r[:body][:dy] = body.dy~ - Inside source: true *** True Line Result r[:body][:dy] = body.dy ** Processing line: ~ r[:body][:dx] = body.dx~ - Inside source: true *** True Line Result r[:body][:dx] = body.dx ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ r[:terrain][:line] = impact[:terrain].dup~ - Inside source: true *** True Line Result r[:terrain][:line] = impact[:terrain].dup ** Processing line: ~ r[:terrain][:slope] = geometry.line_slope(impact[:terrain], replace_infinity: infinity_alias)~ - Inside source: true *** True Line Result r[:terrain][:slope] = geometry.line_slope(impact[:terrain], replace_infinity: infinity_alias) ** Processing line: ~ r[:terrain][:slope_sign] = r[:terrain][:slope].sign~ - Inside source: true *** True Line Result r[:terrain][:slope_sign] = r[:terrain][:slope].sign ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ r[:impact][:angle] = geometry.angle_between_lines(body.trajectory, impact[:terrain], replace_infinity: infinity_alias)~ - Inside source: true *** True Line Result r[:impact][:angle] = geometry.angle_between_lines(body.trajectory, impact[:terrain], replace_infinity: infinity_alias) ** Processing line: ~ r[:impact][:point] = { x: impact[:point].x, y: impact[:point].y }~ - Inside source: true *** True Line Result r[:impact][:point] = { x: impact[:point].x, y: impact[:point].y } ** Processing line: ~ r[:impact][:same_slope_sign] = r[:body][:slope_sign] == r[:terrain][:slope_sign]~ - Inside source: true *** True Line Result r[:impact][:same_slope_sign] = r[:body][:slope_sign] == r[:terrain][:slope_sign] ** Processing line: ~ r[:impact][:ray] = body.ray_current~ - Inside source: true *** True Line Result r[:impact][:ray] = body.ray_current ** Processing line: ~ r[:body][:new_on_floor] = body.on_floor~ - Inside source: true *** True Line Result r[:body][:new_on_floor] = body.on_floor ** Processing line: ~ r[:body][:new_floor] = r[:terrain][:line]~ - Inside source: true *** True Line Result r[:body][:new_floor] = r[:terrain][:line] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if r[:impact][:angle].abs < 90 && r[:terrain][:slope].abs < 3~ - Inside source: true *** True Line Result if r[:impact][:angle].abs < 90 && r[:terrain][:slope].abs < 3 ** Processing line: ~ play_sound~ - Inside source: true *** True Line Result play_sound ** Processing line: ~ r[:body][:new_dy] = r[:body][:dy] * circle.elasticity * -1~ - Inside source: true *** True Line Result r[:body][:new_dy] = r[:body][:dy] * circle.elasticity * -1 ** Processing line: ~ r[:body][:new_dx] = r[:body][:dx] * circle.elasticity~ - Inside source: true *** True Line Result r[:body][:new_dx] = r[:body][:dx] * circle.elasticity ** Processing line: ~ r[:impact][:type] = :horizontal~ - Inside source: true *** True Line Result r[:impact][:type] = :horizontal ** Processing line: ~ r[:body][:new_reason] = "-"~ - Inside source: true *** True Line Result r[:body][:new_reason] = "-" ** Processing line: ~ elsif r[:impact][:angle].abs < 90 && r[:terrain][:slope].abs > 3~ - Inside source: true *** True Line Result elsif r[:impact][:angle].abs < 90 && r[:terrain][:slope].abs > 3 ** Processing line: ~ play_sound~ - Inside source: true *** True Line Result play_sound ** Processing line: ~ r[:body][:new_dy] = r[:body][:dy] * 1.1~ - Inside source: true *** True Line Result r[:body][:new_dy] = r[:body][:dy] * 1.1 ** Processing line: ~ r[:body][:new_dx] = r[:body][:dx] * -circle.elasticity~ - Inside source: true *** True Line Result r[:body][:new_dx] = r[:body][:dx] * -circle.elasticity ** Processing line: ~ r[:impact][:type] = :vertical~ - Inside source: true *** True Line Result r[:impact][:type] = :vertical ** Processing line: ~ r[:body][:new_reason] = "|"~ - Inside source: true *** True Line Result r[:body][:new_reason] = "|" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ play_sound~ - Inside source: true *** True Line Result play_sound ** Processing line: ~ r[:body][:new_dx] = r[:body][:dx] * -circle.elasticity~ - Inside source: true *** True Line Result r[:body][:new_dx] = r[:body][:dx] * -circle.elasticity ** Processing line: ~ r[:body][:new_dy] = r[:body][:dy] * -circle.elasticity~ - Inside source: true *** True Line Result r[:body][:new_dy] = r[:body][:dy] * -circle.elasticity ** Processing line: ~ r[:impact][:type] = :slanted~ - Inside source: true *** True Line Result r[:impact][:type] = :slanted ** Processing line: ~ r[:body][:new_reason] = "/"~ - Inside source: true *** True Line Result r[:body][:new_reason] = "/" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ r[:impact][:energy] = r[:body][:new_dx].abs + r[:body][:new_dy].abs~ - Inside source: true *** True Line Result r[:impact][:energy] = r[:body][:new_dx].abs + r[:body][:new_dy].abs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if r[:impact][:energy] <= 0.3 && r[:terrain][:slope].abs < 4~ - Inside source: true *** True Line Result if r[:impact][:energy] <= 0.3 && r[:terrain][:slope].abs < 4 ** Processing line: ~ r[:body][:new_dx] = 0~ - Inside source: true *** True Line Result r[:body][:new_dx] = 0 ** Processing line: ~ r[:body][:new_dy] = 0~ - Inside source: true *** True Line Result r[:body][:new_dy] = 0 ** Processing line: ~ r[:impact][:energy] = 0~ - Inside source: true *** True Line Result r[:impact][:energy] = 0 ** Processing line: ~ r[:body][:new_on_floor] = true~ - Inside source: true *** True Line Result r[:body][:new_on_floor] = true ** Processing line: ~ r[:body][:new_floor] = r[:terrain][:line]~ - Inside source: true *** True Line Result r[:body][:new_floor] = r[:terrain][:line] ** Processing line: ~ r[:body][:new_reason] = "0"~ - Inside source: true *** True Line Result r[:body][:new_reason] = "0" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ r[:impact][:ray_next] = geometry.ray_test({ x: r[:body][:x] - (r[:body][:dx] * 1.1) + r[:body][:new_dx],~ - Inside source: true *** True Line Result r[:impact][:ray_next] = geometry.ray_test({ x: r[:body][:x] - (r[:body][:dx] * 1.1) + r[:body][:new_dx], ** Processing line: ~ y: r[:body][:y] - (r[:body][:dy] * 1.1) + r[:body][:new_dy] + state.gravity },~ - Inside source: true *** True Line Result y: r[:body][:y] - (r[:body][:dy] * 1.1) + r[:body][:new_dy] + state.gravity }, ** Processing line: ~ r[:terrain][:line])~ - Inside source: true *** True Line Result r[:terrain][:line]) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if r[:impact][:ray_next] == r[:impact][:ray]~ - Inside source: true *** True Line Result if r[:impact][:ray_next] == r[:impact][:ray] ** Processing line: ~ r[:body][:new_dx] *= -1~ - Inside source: true *** True Line Result r[:body][:new_dx] *= -1 ** Processing line: ~ r[:body][:new_dy] *= -1~ - Inside source: true *** True Line Result r[:body][:new_dy] *= -1 ** Processing line: ~ r[:body][:new_reason] = "clip"~ - Inside source: true *** True Line Result r[:body][:new_reason] = "clip" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ r~ - Inside source: true *** True Line Result r ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def game_over!~ - Inside source: true *** True Line Result def game_over! ** Processing line: ~ circle.x = circle.check_point_x~ - Inside source: true *** True Line Result circle.x = circle.check_point_x ** Processing line: ~ circle.y = circle.check_point_y~ - Inside source: true *** True Line Result circle.y = circle.check_point_y ** Processing line: ~ circle.dx = 0~ - Inside source: true *** True Line Result circle.dx = 0 ** Processing line: ~ circle.dy = 0~ - Inside source: true *** True Line Result circle.dy = 0 ** Processing line: ~ circle.game_over_at = state.tick_count~ - Inside source: true *** True Line Result circle.game_over_at = state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def not_game_over!~ - Inside source: true *** True Line Result def not_game_over! ** Processing line: ~ impact_history_entry = impact_result circle, circle.impact~ - Inside source: true *** True Line Result impact_history_entry = impact_result circle, circle.impact ** Processing line: ~ circle.impact_history << impact_history_entry~ - Inside source: true *** True Line Result circle.impact_history << impact_history_entry ** Processing line: ~ circle.x -= circle.dx * 1.1~ - Inside source: true *** True Line Result circle.x -= circle.dx * 1.1 ** Processing line: ~ circle.y -= circle.dy * 1.1~ - Inside source: true *** True Line Result circle.y -= circle.dy * 1.1 ** Processing line: ~ circle.dx = impact_history_entry[:body][:new_dx]~ - Inside source: true *** True Line Result circle.dx = impact_history_entry[:body][:new_dx] ** Processing line: ~ circle.dy = impact_history_entry[:body][:new_dy]~ - Inside source: true *** True Line Result circle.dy = impact_history_entry[:body][:new_dy] ** Processing line: ~ circle.on_floor = impact_history_entry[:body][:new_on_floor]~ - Inside source: true *** True Line Result circle.on_floor = impact_history_entry[:body][:new_on_floor] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if circle.on_floor~ - Inside source: true *** True Line Result if circle.on_floor ** Processing line: ~ circle.check_point_at = state.tick_count~ - Inside source: true *** True Line Result circle.check_point_at = state.tick_count ** Processing line: ~ circle.check_point_x = circle.x~ - Inside source: true *** True Line Result circle.check_point_x = circle.x ** Processing line: ~ circle.check_point_y = circle.y~ - Inside source: true *** True Line Result circle.check_point_y = circle.y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ circle.previous_floor = circle.floor || {}~ - Inside source: true *** True Line Result circle.previous_floor = circle.floor || {} ** Processing line: ~ circle.floor = impact_history_entry[:body][:new_floor] || {}~ - Inside source: true *** True Line Result circle.floor = impact_history_entry[:body][:new_floor] || {} ** Processing line: ~ circle.floor_point = impact_history_entry[:impact][:point]~ - Inside source: true *** True Line Result circle.floor_point = impact_history_entry[:impact][:point] ** Processing line: ~ if circle.floor.slice(:x, :y, :x2, :y2) != circle.previous_floor.slice(:x, :y, :x2, :y2)~ - Inside source: true *** True Line Result if circle.floor.slice(:x, :y, :x2, :y2) != circle.previous_floor.slice(:x, :y, :x2, :y2) ** Processing line: ~ new_relative_x = if circle.dx > 0~ - Inside source: true *** True Line Result new_relative_x = if circle.dx > 0 ** Processing line: ~ :right~ - Inside source: true *** True Line Result :right ** Processing line: ~ elsif circle.dx < 0~ - Inside source: true *** True Line Result elsif circle.dx < 0 ** Processing line: ~ :left~ - Inside source: true *** True Line Result :left ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ new_relative_y = if circle.dy > 0~ - Inside source: true *** True Line Result new_relative_y = if circle.dy > 0 ** Processing line: ~ :above~ - Inside source: true *** True Line Result :above ** Processing line: ~ elsif circle.dy < 0~ - Inside source: true *** True Line Result elsif circle.dy < 0 ** Processing line: ~ :below~ - Inside source: true *** True Line Result :below ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ circle.floor_relative_x = new_relative_x~ - Inside source: true *** True Line Result circle.floor_relative_x = new_relative_x ** Processing line: ~ circle.floor_relative_y = new_relative_y~ - Inside source: true *** True Line Result circle.floor_relative_y = new_relative_y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ circle.impact = nil~ - Inside source: true *** True Line Result circle.impact = nil ** Processing line: ~ circle.terrains_to_monitor.clear~ - Inside source: true *** True Line Result circle.terrains_to_monitor.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_physics~ - Inside source: true *** True Line Result def calc_physics ** Processing line: ~ if args.state.god_mode~ - Inside source: true *** True Line Result if args.state.god_mode ** Processing line: ~ calc_potential_impacts~ - Inside source: true *** True Line Result calc_potential_impacts ** Processing line: ~ calc_terrains_to_monitor~ - Inside source: true *** True Line Result calc_terrains_to_monitor ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if circle.y < -700~ - Inside source: true *** True Line Result if circle.y < -700 ** Processing line: ~ game_over~ - Inside source: true *** True Line Result game_over ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return if state.game_over~ - Inside source: true *** True Line Result return if state.game_over ** Processing line: ~ return if circle.on_floor~ - Inside source: true *** True Line Result return if circle.on_floor ** Processing line: ~ circle.previous_dy = circle.dy~ - Inside source: true *** True Line Result circle.previous_dy = circle.dy ** Processing line: ~ circle.previous_dx = circle.dx~ - Inside source: true *** True Line Result circle.previous_dx = circle.dx ** Processing line: ~ circle.x += circle.dx~ - Inside source: true *** True Line Result circle.x += circle.dx ** Processing line: ~ circle.y += circle.dy~ - Inside source: true *** True Line Result circle.y += circle.dy ** Processing line: ~ args.state.distance_traveled ||= 0~ - Inside source: true *** True Line Result args.state.distance_traveled ||= 0 ** Processing line: ~ args.state.distance_traveled += circle.dx.abs + circle.dy.abs~ - Inside source: true *** True Line Result args.state.distance_traveled += circle.dx.abs + circle.dy.abs ** Processing line: ~ circle.dy += state.gravity~ - Inside source: true *** True Line Result circle.dy += state.gravity ** Processing line: ~ calc_potential_impacts~ - Inside source: true *** True Line Result calc_potential_impacts ** Processing line: ~ calc_terrains_to_monitor~ - Inside source: true *** True Line Result calc_terrains_to_monitor ** Processing line: ~ return unless circle.impact~ - Inside source: true *** True Line Result return unless circle.impact ** Processing line: ~ if circle.impact && circle.impact[:type] == :lava~ - Inside source: true *** True Line Result if circle.impact && circle.impact[:type] == :lava ** Processing line: ~ game_over!~ - Inside source: true *** True Line Result game_over! ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ not_game_over!~ - Inside source: true *** True Line Result not_game_over! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_god_mode~ - Inside source: true *** True Line Result def input_god_mode ** Processing line: ~ state.debug_mode = !state.debug_mode if inputs.keyboard.key_down.forward_slash~ - Inside source: true *** True Line Result state.debug_mode = !state.debug_mode if inputs.keyboard.key_down.forward_slash ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # toggle god mode~ - Inside source: true *** True Line Result # toggle god mode ** Processing line: ~ if inputs.keyboard.key_down.g~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.g ** Processing line: ~ state.god_mode = !state.god_mode~ - Inside source: true *** True Line Result state.god_mode = !state.god_mode ** Processing line: ~ state.potential_lift = 0~ - Inside source: true *** True Line Result state.potential_lift = 0 ** Processing line: ~ circle.floor = nil~ - Inside source: true *** True Line Result circle.floor = nil ** Processing line: ~ circle.floor_point = nil~ - Inside source: true *** True Line Result circle.floor_point = nil ** Processing line: ~ circle.floor_relative_x = nil~ - Inside source: true *** True Line Result circle.floor_relative_x = nil ** Processing line: ~ circle.floor_relative_y = nil~ - Inside source: true *** True Line Result circle.floor_relative_y = nil ** Processing line: ~ circle.impact = nil~ - Inside source: true *** True Line Result circle.impact = nil ** Processing line: ~ circle.terrains_to_monitor.clear~ - Inside source: true *** True Line Result circle.terrains_to_monitor.clear ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless state.god_mode~ - Inside source: true *** True Line Result return unless state.god_mode ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ circle.x = circle.x.to_i~ - Inside source: true *** True Line Result circle.x = circle.x.to_i ** Processing line: ~ circle.y = circle.y.to_i~ - Inside source: true *** True Line Result circle.y = circle.y.to_i ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # move god circle~ - Inside source: true *** True Line Result # move god circle ** Processing line: ~ if inputs.keyboard.left || inputs.keyboard.a~ - Inside source: true *** True Line Result if inputs.keyboard.left || inputs.keyboard.a ** Processing line: ~ circle.x -= 20~ - Inside source: true *** True Line Result circle.x -= 20 ** Processing line: ~ elsif inputs.keyboard.right || inputs.keyboard.d || inputs.keyboard.f~ - Inside source: true *** True Line Result elsif inputs.keyboard.right || inputs.keyboard.d || inputs.keyboard.f ** Processing line: ~ circle.x += 20~ - Inside source: true *** True Line Result circle.x += 20 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.keyboard.up || inputs.keyboard.w~ - Inside source: true *** True Line Result if inputs.keyboard.up || inputs.keyboard.w ** Processing line: ~ circle.y += 20~ - Inside source: true *** True Line Result circle.y += 20 ** Processing line: ~ elsif inputs.keyboard.down || inputs.keyboard.s~ - Inside source: true *** True Line Result elsif inputs.keyboard.down || inputs.keyboard.s ** Processing line: ~ circle.y -= 20~ - Inside source: true *** True Line Result circle.y -= 20 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # delete terrain~ - Inside source: true *** True Line Result # delete terrain ** Processing line: ~ if inputs.keyboard.key_down.x~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.x ** Processing line: ~ calc_terrains_to_monitor~ - Inside source: true *** True Line Result calc_terrains_to_monitor ** Processing line: ~ state.terrain = state.terrain.reject do |t|~ - Inside source: true *** True Line Result state.terrain = state.terrain.reject do |t| ** Processing line: ~ t[:rect].intersect_rect? circle.rect~ - Inside source: true *** True Line Result t[:rect].intersect_rect? circle.rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.lava = state.lava.reject do |t|~ - Inside source: true *** True Line Result state.lava = state.lava.reject do |t| ** Processing line: ~ t[:rect].intersect_rect? circle.rect~ - Inside source: true *** True Line Result t[:rect].intersect_rect? circle.rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ calc_potential_impacts~ - Inside source: true *** True Line Result calc_potential_impacts ** Processing line: ~ save_level~ - Inside source: true *** True Line Result save_level ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # change terrain type~ - Inside source: true *** True Line Result # change terrain type ** Processing line: ~ if inputs.keyboard.key_down.l~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.l ** Processing line: ~ if state.line_mode == :terrain~ - Inside source: true *** True Line Result if state.line_mode == :terrain ** Processing line: ~ state.line_mode = :lava~ - Inside source: true *** True Line Result state.line_mode = :lava ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.line_mode = :terrain~ - Inside source: true *** True Line Result state.line_mode = :terrain ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if inputs.mouse.click && !state.point_one~ - Inside source: true *** True Line Result if inputs.mouse.click && !state.point_one ** Processing line: ~ state.point_one = inputs.mouse.click.point~ - Inside source: true *** True Line Result state.point_one = inputs.mouse.click.point ** Processing line: ~ elsif inputs.mouse.click && state.point_one~ - Inside source: true *** True Line Result elsif inputs.mouse.click && state.point_one ** Processing line: ~ l = [*state.point_one, *inputs.mouse.click.point]~ - Inside source: true *** True Line Result l = [*state.point_one, *inputs.mouse.click.point] ** Processing line: ~ l = [l.x - state.camera.x,~ - Inside source: true *** True Line Result l = [l.x - state.camera.x, ** Processing line: ~ l.y - state.camera.y,~ - Inside source: true *** True Line Result l.y - state.camera.y, ** Processing line: ~ l.x2 - state.camera.x,~ - Inside source: true *** True Line Result l.x2 - state.camera.x, ** Processing line: ~ l.y2 - state.camera.y].line.to_hash~ - Inside source: true *** True Line Result l.y2 - state.camera.y].line.to_hash ** Processing line: ~ l[:rect] = rect_for_line l~ - Inside source: true *** True Line Result l[:rect] = rect_for_line l ** Processing line: ~ if state.line_mode == :terrain~ - Inside source: true *** True Line Result if state.line_mode == :terrain ** Processing line: ~ state.terrain << l~ - Inside source: true *** True Line Result state.terrain << l ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ state.lava << l~ - Inside source: true *** True Line Result state.lava << l ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ save_level~ - Inside source: true *** True Line Result save_level ** Processing line: ~ next_x = inputs.mouse.click.point.x - 640~ - Inside source: true *** True Line Result next_x = inputs.mouse.click.point.x - 640 ** Processing line: ~ next_y = inputs.mouse.click.point.y - 360~ - Inside source: true *** True Line Result next_y = inputs.mouse.click.point.y - 360 ** Processing line: ~ circle.x += next_x~ - Inside source: true *** True Line Result circle.x += next_x ** Processing line: ~ circle.y += next_y~ - Inside source: true *** True Line Result circle.y += next_y ** Processing line: ~ state.point_one = nil~ - Inside source: true *** True Line Result state.point_one = nil ** Processing line: ~ elsif inputs.keyboard.one~ - Inside source: true *** True Line Result elsif inputs.keyboard.one ** Processing line: ~ state.point_one = [circle.x + camera.x, circle.y+ camera.y]~ - Inside source: true *** True Line Result state.point_one = [circle.x + camera.x, circle.y+ camera.y] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # cancel chain lines~ - Inside source: true *** True Line Result # cancel chain lines ** Processing line: ~ if inputs.keyboard.key_down.nine || inputs.keyboard.key_down.escape || inputs.keyboard.key_up.six || inputs.keyboard.key_up.one~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.nine || inputs.keyboard.key_down.escape || inputs.keyboard.key_up.six || inputs.keyboard.key_up.one ** Processing line: ~ state.point_one = nil~ - Inside source: true *** True Line Result state.point_one = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def play_sound~ - Inside source: true *** True Line Result def play_sound ** Processing line: ~ return if state.sound_debounce > 0~ - Inside source: true *** True Line Result return if state.sound_debounce > 0 ** Processing line: ~ state.sound_debounce = 5~ - Inside source: true *** True Line Result state.sound_debounce = 5 ** Processing line: ~ outputs.sounds << "sounds/03#{"%02d" % state.sound_index}.wav"~ - Inside source: true *** True Line Result outputs.sounds << "sounds/03#{"%02d" % state.sound_index}.wav" ** Processing line: ~ state.sound_index += 1~ - Inside source: true *** True Line Result state.sound_index += 1 ** Processing line: ~ if state.sound_index > 21~ - Inside source: true *** True Line Result if state.sound_index > 21 ** Processing line: ~ state.sound_index = 1~ - Inside source: true *** True Line Result state.sound_index = 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input_game~ - Inside source: true *** True Line Result def input_game ** Processing line: ~ if inputs.keyboard.down || inputs.keyboard.space~ - Inside source: true *** True Line Result if inputs.keyboard.down || inputs.keyboard.space ** Processing line: ~ circle.potential_lift += 0.03~ - Inside source: true *** True Line Result circle.potential_lift += 0.03 ** Processing line: ~ circle.potential_lift = circle.potential_lift.lesser(10)~ - Inside source: true *** True Line Result circle.potential_lift = circle.potential_lift.lesser(10) ** Processing line: ~ elsif inputs.keyboard.key_up.down || inputs.keyboard.key_up.space~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_up.down || inputs.keyboard.key_up.space ** Processing line: ~ play_sound~ - Inside source: true *** True Line Result play_sound ** Processing line: ~ circle.dy += circle.angle.vector_y circle.potential_lift~ - Inside source: true *** True Line Result circle.dy += circle.angle.vector_y circle.potential_lift ** Processing line: ~ circle.dx += circle.angle.vector_x circle.potential_lift~ - Inside source: true *** True Line Result circle.dx += circle.angle.vector_x circle.potential_lift ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if circle.on_floor~ - Inside source: true *** True Line Result if circle.on_floor ** Processing line: ~ if circle.floor_relative_y == :above~ - Inside source: true *** True Line Result if circle.floor_relative_y == :above ** Processing line: ~ circle.y += circle.potential_lift.abs * 2~ - Inside source: true *** True Line Result circle.y += circle.potential_lift.abs * 2 ** Processing line: ~ elsif circle.floor_relative_y == :below~ - Inside source: true *** True Line Result elsif circle.floor_relative_y == :below ** Processing line: ~ circle.y -= circle.potential_lift.abs * 2~ - Inside source: true *** True Line Result circle.y -= circle.potential_lift.abs * 2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ circle.on_floor = false~ - Inside source: true *** True Line Result circle.on_floor = false ** Processing line: ~ circle.potential_lift = 0~ - Inside source: true *** True Line Result circle.potential_lift = 0 ** Processing line: ~ circle.terrains_to_monitor.clear~ - Inside source: true *** True Line Result circle.terrains_to_monitor.clear ** Processing line: ~ circle.impact_history.clear~ - Inside source: true *** True Line Result circle.impact_history.clear ** Processing line: ~ circle.impact = nil~ - Inside source: true *** True Line Result circle.impact = nil ** Processing line: ~ calc_physics~ - Inside source: true *** True Line Result calc_physics ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # aim probe~ - Inside source: true *** True Line Result # aim probe ** Processing line: ~ if inputs.keyboard.right || inputs.keyboard.a~ - Inside source: true *** True Line Result if inputs.keyboard.right || inputs.keyboard.a ** Processing line: ~ circle.angle -= 2~ - Inside source: true *** True Line Result circle.angle -= 2 ** Processing line: ~ elsif inputs.keyboard.left || inputs.keyboard.d~ - Inside source: true *** True Line Result elsif inputs.keyboard.left || inputs.keyboard.d ** Processing line: ~ circle.angle += 2~ - Inside source: true *** True Line Result circle.angle += 2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ input_god_mode~ - Inside source: true *** True Line Result input_god_mode ** Processing line: ~ input_game~ - Inside source: true *** True Line Result input_game ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_camera~ - Inside source: true *** True Line Result def calc_camera ** Processing line: ~ state.camera.target_x = 640 - circle.x~ - Inside source: true *** True Line Result state.camera.target_x = 640 - circle.x ** Processing line: ~ state.camera.target_y = 360 - circle.y~ - Inside source: true *** True Line Result state.camera.target_y = 360 - circle.y ** Processing line: ~ xdiff = state.camera.target_x - state.camera.x~ - Inside source: true *** True Line Result xdiff = state.camera.target_x - state.camera.x ** Processing line: ~ ydiff = state.camera.target_y - state.camera.y~ - Inside source: true *** True Line Result ydiff = state.camera.target_y - state.camera.y ** Processing line: ~ state.camera.x += xdiff * camera.follow_speed~ - Inside source: true *** True Line Result state.camera.x += xdiff * camera.follow_speed ** Processing line: ~ state.camera.y += ydiff * camera.follow_speed~ - Inside source: true *** True Line Result state.camera.y += ydiff * camera.follow_speed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ state.sound_debounce ||= 0~ - Inside source: true *** True Line Result state.sound_debounce ||= 0 ** Processing line: ~ state.sound_debounce -= 1~ - Inside source: true *** True Line Result state.sound_debounce -= 1 ** Processing line: ~ state.sound_debounce = 0 if state.sound_debounce < 0~ - Inside source: true *** True Line Result state.sound_debounce = 0 if state.sound_debounce < 0 ** Processing line: ~ if state.god_mode~ - Inside source: true *** True Line Result if state.god_mode ** Processing line: ~ circle.dy *= 0.1~ - Inside source: true *** True Line Result circle.dy *= 0.1 ** Processing line: ~ circle.dx *= 0.1~ - Inside source: true *** True Line Result circle.dx *= 0.1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ calc_camera~ - Inside source: true *** True Line Result calc_camera ** Processing line: ~ state.whisp_queue ||= []~ - Inside source: true *** True Line Result state.whisp_queue ||= [] ** Processing line: ~ if state.tick_count.mod_zero?(4)~ - Inside source: true *** True Line Result if state.tick_count.mod_zero?(4) ** Processing line: ~ state.whisp_queue << {~ - Inside source: true *** True Line Result state.whisp_queue << { ** Processing line: ~ x: -300,~ - Inside source: true *** True Line Result x: -300, ** Processing line: ~ y: 1400 * rand,~ - Inside source: true *** True Line Result y: 1400 * rand, ** Processing line: ~ speed: 2.randomize(:ratio) + 3,~ - Inside source: true *** True Line Result speed: 2.randomize(:ratio) + 3, ** Processing line: ~ w: 20,~ - Inside source: true *** True Line Result w: 20, ** Processing line: ~ h: 20, path: 'sprites/whisp.png',~ - Inside source: true *** True Line Result h: 20, path: 'sprites/whisp.png', ** Processing line: ~ a: 0,~ - Inside source: true *** True Line Result a: 0, ** Processing line: ~ created_at: state.tick_count,~ - Inside source: true *** True Line Result created_at: state.tick_count, ** Processing line: ~ angle: 0,~ - Inside source: true *** True Line Result angle: 0, ** Processing line: ~ r: 100,~ - Inside source: true *** True Line Result r: 100, ** Processing line: ~ g: 128 + 128 * rand,~ - Inside source: true *** True Line Result g: 128 + 128 * rand, ** Processing line: ~ b: 128 + 128 * rand~ - Inside source: true *** True Line Result b: 128 + 128 * rand ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.whisp_queue.each do |w|~ - Inside source: true *** True Line Result state.whisp_queue.each do |w| ** Processing line: ~ w.x += w[:speed] * 2~ - Inside source: true *** True Line Result w.x += w[:speed] * 2 ** Processing line: ~ w.x -= circle.dx * 0.3~ - Inside source: true *** True Line Result w.x -= circle.dx * 0.3 ** Processing line: ~ w.y -= w[:speed]~ - Inside source: true *** True Line Result w.y -= w[:speed] ** Processing line: ~ w.y -= circle.dy * 0.3~ - Inside source: true *** True Line Result w.y -= circle.dy * 0.3 ** Processing line: ~ w.angle += w[:speed]~ - Inside source: true *** True Line Result w.angle += w[:speed] ** Processing line: ~ w.a = w[:created_at].ease(30) * 255~ - Inside source: true *** True Line Result w.a = w[:created_at].ease(30) * 255 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.whisp_queue = state.whisp_queue.reject { |w| w[:x] > 1280 }~ - Inside source: true *** True Line Result state.whisp_queue = state.whisp_queue.reject { |w| w[:x] > 1280 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if state.tick_count.mod_zero?(2) && (circle.dx != 0 || circle.dy != 0)~ - Inside source: true *** True Line Result if state.tick_count.mod_zero?(2) && (circle.dx != 0 || circle.dy != 0) ** Processing line: ~ circle.after_images << {~ - Inside source: true *** True Line Result circle.after_images << { ** Processing line: ~ x: circle.x,~ - Inside source: true *** True Line Result x: circle.x, ** Processing line: ~ y: circle.y,~ - Inside source: true *** True Line Result y: circle.y, ** Processing line: ~ w: circle.radius,~ - Inside source: true *** True Line Result w: circle.radius, ** Processing line: ~ h: circle.radius,~ - Inside source: true *** True Line Result h: circle.radius, ** Processing line: ~ a: 255,~ - Inside source: true *** True Line Result a: 255, ** Processing line: ~ created_at: state.tick_count~ - Inside source: true *** True Line Result created_at: state.tick_count ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ circle.after_images.each do |ai|~ - Inside source: true *** True Line Result circle.after_images.each do |ai| ** Processing line: ~ ai.a = ai[:created_at].ease(10, :flip) * 255~ - Inside source: true *** True Line Result ai.a = ai[:created_at].ease(10, :flip) * 255 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ circle.after_images = circle.after_images.reject { |ai| ai[:created_at].elapsed_time > 10 }~ - Inside source: true *** True Line Result circle.after_images = circle.after_images.reject { |ai| ai[:created_at].elapsed_time > 10 } ** Processing line: ~ calc_physics~ - Inside source: true *** True Line Result calc_physics ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def circle~ - Inside source: true *** True Line Result def circle ** Processing line: ~ state.circle~ - Inside source: true *** True Line Result state.circle ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def camera~ - Inside source: true *** True Line Result def camera ** Processing line: ~ state.camera~ - Inside source: true *** True Line Result state.camera ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def terrain~ - Inside source: true *** True Line Result def terrain ** Processing line: ~ state.terrain~ - Inside source: true *** True Line Result state.terrain ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def lava~ - Inside source: true *** True Line Result def lava ** Processing line: ~ state.lava~ - Inside source: true *** True Line Result state.lava ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # $gtk.reset~ - Inside source: true *** True Line Result # $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ if args.inputs.keyboard.r~ - Inside source: true *** True Line Result if args.inputs.keyboard.r ** Processing line: ~ args.gtk.reset~ - Inside source: true *** True Line Result args.gtk.reset ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ # uncomment the line below to slow down the game so you~ - Inside source: true *** True Line Result # uncomment the line below to slow down the game so you ** Processing line: ~ # can see each tick as it passes~ - Inside source: true *** True Line Result # can see each tick as it passes ** Processing line: ~ # args.gtk.slowmo! 30~ - Inside source: true *** True Line Result # args.gtk.slowmo! 30 ** Processing line: ~ $game ||= FallingCircle.new~ - Inside source: true *** True Line Result $game ||= FallingCircle.new ** Processing line: ~ $game.args = args~ - Inside source: true *** True Line Result $game.args = args ** Processing line: ~ $game.tick~ - Inside source: true *** True Line Result $game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset~ - Inside source: true *** True Line Result def reset ** Processing line: ~ $game = nil~ - Inside source: true *** True Line Result $game = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Platformer - The Little Probe - Data - level.txt~ - Header detected. *** True Line Result *** True Line Result *** Platformer - The Little Probe - Data - level.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_platformer/the_little_probe/data/level.txt~ - Inside source: true *** True Line Result # ./samples/99_genre_platformer/the_little_probe/data/level.txt ** Processing line: ~ 640,8840,1180,8840~ - Inside source: true *** True Line Result 640,8840,1180,8840 ** Processing line: ~ -60,10220,0,9960~ - Inside source: true *** True Line Result -60,10220,0,9960 ** Processing line: ~ -60,10220,0,10500~ - Inside source: true *** True Line Result -60,10220,0,10500 ** Processing line: ~ 0,10500,0,10780~ - Inside source: true *** True Line Result 0,10500,0,10780 ** Processing line: ~ 0,10780,40,10900~ - Inside source: true *** True Line Result 0,10780,40,10900 ** Processing line: ~ 500,10920,760,10960~ - Inside source: true *** True Line Result 500,10920,760,10960 ** Processing line: ~ 300,10560,820,10600~ - Inside source: true *** True Line Result 300,10560,820,10600 ** Processing line: ~ 420,10320,700,10300~ - Inside source: true *** True Line Result 420,10320,700,10300 ** Processing line: ~ 820,10600,1500,10600~ - Inside source: true *** True Line Result 820,10600,1500,10600 ** Processing line: ~ 1500,10600,1940,10600~ - Inside source: true *** True Line Result 1500,10600,1940,10600 ** Processing line: ~ 1940,10600,2380,10580~ - Inside source: true *** True Line Result 1940,10600,2380,10580 ** Processing line: ~ 2380,10580,2800,10620~ - Inside source: true *** True Line Result 2380,10580,2800,10620 ** Processing line: ~ 2240,11080,2480,11020~ - Inside source: true *** True Line Result 2240,11080,2480,11020 ** Processing line: ~ 2000,11120,2240,11080~ - Inside source: true *** True Line Result 2000,11120,2240,11080 ** Processing line: ~ 1760,11180,2000,11120~ - Inside source: true *** True Line Result 1760,11180,2000,11120 ** Processing line: ~ 1620,11180,1760,11180~ - Inside source: true *** True Line Result 1620,11180,1760,11180 ** Processing line: ~ 1500,11220,1620,11180~ - Inside source: true *** True Line Result 1500,11220,1620,11180 ** Processing line: ~ 1180,11280,1340,11220~ - Inside source: true *** True Line Result 1180,11280,1340,11220 ** Processing line: ~ 1040,11240,1180,11280~ - Inside source: true *** True Line Result 1040,11240,1180,11280 ** Processing line: ~ 840,11280,1040,11240~ - Inside source: true *** True Line Result 840,11280,1040,11240 ** Processing line: ~ 640,11280,840,11280~ - Inside source: true *** True Line Result 640,11280,840,11280 ** Processing line: ~ 500,11220,640,11280~ - Inside source: true *** True Line Result 500,11220,640,11280 ** Processing line: ~ 420,11140,500,11220~ - Inside source: true *** True Line Result 420,11140,500,11220 ** Processing line: ~ 240,11100,420,11140~ - Inside source: true *** True Line Result 240,11100,420,11140 ** Processing line: ~ 100,11120,240,11100~ - Inside source: true *** True Line Result 100,11120,240,11100 ** Processing line: ~ 0,11180,100,11120~ - Inside source: true *** True Line Result 0,11180,100,11120 ** Processing line: ~ -160,11220,0,11180~ - Inside source: true *** True Line Result -160,11220,0,11180 ** Processing line: ~ -260,11240,-160,11220~ - Inside source: true *** True Line Result -260,11240,-160,11220 ** Processing line: ~ 1340,11220,1500,11220~ - Inside source: true *** True Line Result 1340,11220,1500,11220 ** Processing line: ~ 960,13300,1280,13060~ - Inside source: true *** True Line Result 960,13300,1280,13060 ** Processing line: ~ 1280,13060,1540,12860~ - Inside source: true *** True Line Result 1280,13060,1540,12860 ** Processing line: ~ 1540,12860,1820,12700~ - Inside source: true *** True Line Result 1540,12860,1820,12700 ** Processing line: ~ 1820,12700,2080,12520~ - Inside source: true *** True Line Result 1820,12700,2080,12520 ** Processing line: ~ 2080,12520,2240,12400~ - Inside source: true *** True Line Result 2080,12520,2240,12400 ** Processing line: ~ 2240,12400,2240,12240~ - Inside source: true *** True Line Result 2240,12400,2240,12240 ** Processing line: ~ 2240,12240,2400,12080~ - Inside source: true *** True Line Result 2240,12240,2400,12080 ** Processing line: ~ 2400,12080,2560,11920~ - Inside source: true *** True Line Result 2400,12080,2560,11920 ** Processing line: ~ 2560,11920,2640,11740~ - Inside source: true *** True Line Result 2560,11920,2640,11740 ** Processing line: ~ 2640,11740,2740,11580~ - Inside source: true *** True Line Result 2640,11740,2740,11580 ** Processing line: ~ 2740,11580,2800,11400~ - Inside source: true *** True Line Result 2740,11580,2800,11400 ** Processing line: ~ 2800,11400,2800,11240~ - Inside source: true *** True Line Result 2800,11400,2800,11240 ** Processing line: ~ 2740,11140,2800,11240~ - Inside source: true *** True Line Result 2740,11140,2800,11240 ** Processing line: ~ 2700,11040,2740,11140~ - Inside source: true *** True Line Result 2700,11040,2740,11140 ** Processing line: ~ 2700,11040,2740,10960~ - Inside source: true *** True Line Result 2700,11040,2740,10960 ** Processing line: ~ 2740,10960,2740,10920~ - Inside source: true *** True Line Result 2740,10960,2740,10920 ** Processing line: ~ 2700,10900,2740,10920~ - Inside source: true *** True Line Result 2700,10900,2740,10920 ** Processing line: ~ 2380,10900,2700,10900~ - Inside source: true *** True Line Result 2380,10900,2700,10900 ** Processing line: ~ 2040,10920,2380,10900~ - Inside source: true *** True Line Result 2040,10920,2380,10900 ** Processing line: ~ 1720,10940,2040,10920~ - Inside source: true *** True Line Result 1720,10940,2040,10920 ** Processing line: ~ 1380,11000,1720,10940~ - Inside source: true *** True Line Result 1380,11000,1720,10940 ** Processing line: ~ 1180,10980,1380,11000~ - Inside source: true *** True Line Result 1180,10980,1380,11000 ** Processing line: ~ 900,10980,1180,10980~ - Inside source: true *** True Line Result 900,10980,1180,10980 ** Processing line: ~ 760,10960,900,10980~ - Inside source: true *** True Line Result 760,10960,900,10980 ** Processing line: ~ 240,10960,500,10920~ - Inside source: true *** True Line Result 240,10960,500,10920 ** Processing line: ~ 40,10900,240,10960~ - Inside source: true *** True Line Result 40,10900,240,10960 ** Processing line: ~ 0,9700,0,9960~ - Inside source: true *** True Line Result 0,9700,0,9960 ** Processing line: ~ -60,9500,0,9700~ - Inside source: true *** True Line Result -60,9500,0,9700 ** Processing line: ~ -60,9420,-60,9500~ - Inside source: true *** True Line Result -60,9420,-60,9500 ** Processing line: ~ -60,9420,-60,9340~ - Inside source: true *** True Line Result -60,9420,-60,9340 ** Processing line: ~ -60,9340,-60,9280~ - Inside source: true *** True Line Result -60,9340,-60,9280 ** Processing line: ~ -60,9120,-60,9280~ - Inside source: true *** True Line Result -60,9120,-60,9280 ** Processing line: ~ -60,8940,-60,9120~ - Inside source: true *** True Line Result -60,8940,-60,9120 ** Processing line: ~ -60,8940,-60,8780~ - Inside source: true *** True Line Result -60,8940,-60,8780 ** Processing line: ~ -60,8780,0,8700~ - Inside source: true *** True Line Result -60,8780,0,8700 ** Processing line: ~ 0,8700,40,8680~ - Inside source: true *** True Line Result 0,8700,40,8680 ** Processing line: ~ 40,8680,240,8700~ - Inside source: true *** True Line Result 40,8680,240,8700 ** Processing line: ~ 240,8700,360,8780~ - Inside source: true *** True Line Result 240,8700,360,8780 ** Processing line: ~ 360,8780,640,8840~ - Inside source: true *** True Line Result 360,8780,640,8840 ** Processing line: ~ 1420,8400,1540,8480~ - Inside source: true *** True Line Result 1420,8400,1540,8480 ** Processing line: ~ 1540,8480,1680,8500~ - Inside source: true *** True Line Result 1540,8480,1680,8500 ** Processing line: ~ 1680,8500,1940,8460~ - Inside source: true *** True Line Result 1680,8500,1940,8460 ** Processing line: ~ 1180,8840,1280,8880~ - Inside source: true *** True Line Result 1180,8840,1280,8880 ** Processing line: ~ 1280,8880,1340,8860~ - Inside source: true *** True Line Result 1280,8880,1340,8860 ** Processing line: ~ 1340,8860,1720,8860~ - Inside source: true *** True Line Result 1340,8860,1720,8860 ** Processing line: ~ 1720,8860,1820,8920~ - Inside source: true *** True Line Result 1720,8860,1820,8920 ** Processing line: ~ 1820,8920,1820,9140~ - Inside source: true *** True Line Result 1820,8920,1820,9140 ** Processing line: ~ 1820,9140,1820,9280~ - Inside source: true *** True Line Result 1820,9140,1820,9280 ** Processing line: ~ 1820,9460,1820,9280~ - Inside source: true *** True Line Result 1820,9460,1820,9280 ** Processing line: ~ 1760,9480,1820,9460~ - Inside source: true *** True Line Result 1760,9480,1820,9460 ** Processing line: ~ 1640,9480,1760,9480~ - Inside source: true *** True Line Result 1640,9480,1760,9480 ** Processing line: ~ 1540,9500,1640,9480~ - Inside source: true *** True Line Result 1540,9500,1640,9480 ** Processing line: ~ 1340,9500,1540,9500~ - Inside source: true *** True Line Result 1340,9500,1540,9500 ** Processing line: ~ 1100,9500,1340,9500~ - Inside source: true *** True Line Result 1100,9500,1340,9500 ** Processing line: ~ 1040,9540,1100,9500~ - Inside source: true *** True Line Result 1040,9540,1100,9500 ** Processing line: ~ 960,9540,1040,9540~ - Inside source: true *** True Line Result 960,9540,1040,9540 ** Processing line: ~ 300,9420,360,9460~ - Inside source: true *** True Line Result 300,9420,360,9460 ** Processing line: ~ 240,9440,300,9420~ - Inside source: true *** True Line Result 240,9440,300,9420 ** Processing line: ~ 180,9600,240,9440~ - Inside source: true *** True Line Result 180,9600,240,9440 ** Processing line: ~ 120,9660,180,9600~ - Inside source: true *** True Line Result 120,9660,180,9600 ** Processing line: ~ 100,9820,120,9660~ - Inside source: true *** True Line Result 100,9820,120,9660 ** Processing line: ~ 100,9820,120,9860~ - Inside source: true *** True Line Result 100,9820,120,9860 ** Processing line: ~ 120,9860,140,9900~ - Inside source: true *** True Line Result 120,9860,140,9900 ** Processing line: ~ 140,9900,140,10000~ - Inside source: true *** True Line Result 140,9900,140,10000 ** Processing line: ~ 140,10440,180,10540~ - Inside source: true *** True Line Result 140,10440,180,10540 ** Processing line: ~ 100,10080,140,10000~ - Inside source: true *** True Line Result 100,10080,140,10000 ** Processing line: ~ 100,10080,140,10100~ - Inside source: true *** True Line Result 100,10080,140,10100 ** Processing line: ~ 140,10100,140,10440~ - Inside source: true *** True Line Result 140,10100,140,10440 ** Processing line: ~ 180,10540,300,10560~ - Inside source: true *** True Line Result 180,10540,300,10560 ** Processing line: ~ 2140,9560,2140,9640~ - Inside source: true *** True Line Result 2140,9560,2140,9640 ** Processing line: ~ 2140,9720,2140,9640~ - Inside source: true *** True Line Result 2140,9720,2140,9640 ** Processing line: ~ 1880,9780,2140,9720~ - Inside source: true *** True Line Result 1880,9780,2140,9720 ** Processing line: ~ 1720,9780,1880,9780~ - Inside source: true *** True Line Result 1720,9780,1880,9780 ** Processing line: ~ 1620,9740,1720,9780~ - Inside source: true *** True Line Result 1620,9740,1720,9780 ** Processing line: ~ 1500,9780,1620,9740~ - Inside source: true *** True Line Result 1500,9780,1620,9740 ** Processing line: ~ 1380,9780,1500,9780~ - Inside source: true *** True Line Result 1380,9780,1500,9780 ** Processing line: ~ 1340,9820,1380,9780~ - Inside source: true *** True Line Result 1340,9820,1380,9780 ** Processing line: ~ 1200,9820,1340,9820~ - Inside source: true *** True Line Result 1200,9820,1340,9820 ** Processing line: ~ 1100,9780,1200,9820~ - Inside source: true *** True Line Result 1100,9780,1200,9820 ** Processing line: ~ 900,9780,1100,9780~ - Inside source: true *** True Line Result 900,9780,1100,9780 ** Processing line: ~ 820,9720,900,9780~ - Inside source: true *** True Line Result 820,9720,900,9780 ** Processing line: ~ 540,9720,820,9720~ - Inside source: true *** True Line Result 540,9720,820,9720 ** Processing line: ~ 360,9840,540,9720~ - Inside source: true *** True Line Result 360,9840,540,9720 ** Processing line: ~ 360,9840,360,9960~ - Inside source: true *** True Line Result 360,9840,360,9960 ** Processing line: ~ 360,9960,360,10080~ - Inside source: true *** True Line Result 360,9960,360,10080 ** Processing line: ~ 360,10140,360,10080~ - Inside source: true *** True Line Result 360,10140,360,10080 ** Processing line: ~ 360,10140,360,10240~ - Inside source: true *** True Line Result 360,10140,360,10240 ** Processing line: ~ 360,10240,420,10320~ - Inside source: true *** True Line Result 360,10240,420,10320 ** Processing line: ~ 700,10300,820,10280~ - Inside source: true *** True Line Result 700,10300,820,10280 ** Processing line: ~ 820,10280,820,10280~ - Inside source: true *** True Line Result 820,10280,820,10280 ** Processing line: ~ 820,10280,900,10320~ - Inside source: true *** True Line Result 820,10280,900,10320 ** Processing line: ~ 900,10320,1040,10300~ - Inside source: true *** True Line Result 900,10320,1040,10300 ** Processing line: ~ 1040,10300,1200,10320~ - Inside source: true *** True Line Result 1040,10300,1200,10320 ** Processing line: ~ 1200,10320,1380,10280~ - Inside source: true *** True Line Result 1200,10320,1380,10280 ** Processing line: ~ 1380,10280,1500,10300~ - Inside source: true *** True Line Result 1380,10280,1500,10300 ** Processing line: ~ 1500,10300,1760,10300~ - Inside source: true *** True Line Result 1500,10300,1760,10300 ** Processing line: ~ 2800,10620,2840,10600~ - Inside source: true *** True Line Result 2800,10620,2840,10600 ** Processing line: ~ 2840,10600,2900,10600~ - Inside source: true *** True Line Result 2840,10600,2900,10600 ** Processing line: ~ 2900,10600,3000,10620~ - Inside source: true *** True Line Result 2900,10600,3000,10620 ** Processing line: ~ 3000,10620,3080,10620~ - Inside source: true *** True Line Result 3000,10620,3080,10620 ** Processing line: ~ 3080,10620,3140,10600~ - Inside source: true *** True Line Result 3080,10620,3140,10600 ** Processing line: ~ 3140,10540,3140,10600~ - Inside source: true *** True Line Result 3140,10540,3140,10600 ** Processing line: ~ 3140,10540,3140,10460~ - Inside source: true *** True Line Result 3140,10540,3140,10460 ** Processing line: ~ 3140,10460,3140,10360~ - Inside source: true *** True Line Result 3140,10460,3140,10360 ** Processing line: ~ 3140,10360,3140,10260~ - Inside source: true *** True Line Result 3140,10360,3140,10260 ** Processing line: ~ 3140,10260,3140,10140~ - Inside source: true *** True Line Result 3140,10260,3140,10140 ** Processing line: ~ 3140,10140,3140,10000~ - Inside source: true *** True Line Result 3140,10140,3140,10000 ** Processing line: ~ 3140,10000,3140,9860~ - Inside source: true *** True Line Result 3140,10000,3140,9860 ** Processing line: ~ 3140,9860,3160,9720~ - Inside source: true *** True Line Result 3140,9860,3160,9720 ** Processing line: ~ 3160,9720,3160,9580~ - Inside source: true *** True Line Result 3160,9720,3160,9580 ** Processing line: ~ 3160,9580,3160,9440~ - Inside source: true *** True Line Result 3160,9580,3160,9440 ** Processing line: ~ 3160,9300,3160,9440~ - Inside source: true *** True Line Result 3160,9300,3160,9440 ** Processing line: ~ 3160,9300,3160,9140~ - Inside source: true *** True Line Result 3160,9300,3160,9140 ** Processing line: ~ 3160,9140,3160,8980~ - Inside source: true *** True Line Result 3160,9140,3160,8980 ** Processing line: ~ 3160,8980,3160,8820~ - Inside source: true *** True Line Result 3160,8980,3160,8820 ** Processing line: ~ 3160,8820,3160,8680~ - Inside source: true *** True Line Result 3160,8820,3160,8680 ** Processing line: ~ 3160,8680,3160,8520~ - Inside source: true *** True Line Result 3160,8680,3160,8520 ** Processing line: ~ 1760,10300,1880,10300~ - Inside source: true *** True Line Result 1760,10300,1880,10300 ** Processing line: ~ 660,9500,960,9540~ - Inside source: true *** True Line Result 660,9500,960,9540 ** Processing line: ~ 640,9460,660,9500~ - Inside source: true *** True Line Result 640,9460,660,9500 ** Processing line: ~ 360,9460,640,9460~ - Inside source: true *** True Line Result 360,9460,640,9460 ** Processing line: ~ -480,10760,-440,10880~ - Inside source: true *** True Line Result -480,10760,-440,10880 ** Processing line: ~ -480,11020,-440,10880~ - Inside source: true *** True Line Result -480,11020,-440,10880 ** Processing line: ~ -480,11160,-260,11240~ - Inside source: true *** True Line Result -480,11160,-260,11240 ** Processing line: ~ -480,11020,-480,11160~ - Inside source: true *** True Line Result -480,11020,-480,11160 ** Processing line: ~ -600,11420,-380,11320~ - Inside source: true *** True Line Result -600,11420,-380,11320 ** Processing line: ~ -380,11320,-200,11340~ - Inside source: true *** True Line Result -380,11320,-200,11340 ** Processing line: ~ -200,11340,0,11340~ - Inside source: true *** True Line Result -200,11340,0,11340 ** Processing line: ~ 0,11340,180,11340~ - Inside source: true *** True Line Result 0,11340,180,11340 ** Processing line: ~ 960,13420,960,13300~ - Inside source: true *** True Line Result 960,13420,960,13300 ** Processing line: ~ 960,13420,960,13520~ - Inside source: true *** True Line Result 960,13420,960,13520 ** Processing line: ~ 960,13520,1000,13560~ - Inside source: true *** True Line Result 960,13520,1000,13560 ** Processing line: ~ 1000,13560,1040,13540~ - Inside source: true *** True Line Result 1000,13560,1040,13540 ** Processing line: ~ 1040,13540,1200,13440~ - Inside source: true *** True Line Result 1040,13540,1200,13440 ** Processing line: ~ 1200,13440,1380,13380~ - Inside source: true *** True Line Result 1200,13440,1380,13380 ** Processing line: ~ 1380,13380,1620,13300~ - Inside source: true *** True Line Result 1380,13380,1620,13300 ** Processing line: ~ 1620,13300,1820,13220~ - Inside source: true *** True Line Result 1620,13300,1820,13220 ** Processing line: ~ 1820,13220,2000,13200~ - Inside source: true *** True Line Result 1820,13220,2000,13200 ** Processing line: ~ 2000,13200,2240,13200~ - Inside source: true *** True Line Result 2000,13200,2240,13200 ** Processing line: ~ 2240,13200,2440,13160~ - Inside source: true *** True Line Result 2240,13200,2440,13160 ** Processing line: ~ 2440,13160,2640,13040~ - Inside source: true *** True Line Result 2440,13160,2640,13040 ** Processing line: ~ -480,10760,-440,10620~ - Inside source: true *** True Line Result -480,10760,-440,10620 ** Processing line: ~ -440,10620,-360,10560~ - Inside source: true *** True Line Result -440,10620,-360,10560 ** Processing line: ~ -380,10460,-360,10560~ - Inside source: true *** True Line Result -380,10460,-360,10560 ** Processing line: ~ -380,10460,-360,10300~ - Inside source: true *** True Line Result -380,10460,-360,10300 ** Processing line: ~ -380,10140,-360,10300~ - Inside source: true *** True Line Result -380,10140,-360,10300 ** Processing line: ~ -380,10140,-380,10040~ - Inside source: true *** True Line Result -380,10140,-380,10040 ** Processing line: ~ -380,9880,-380,10040~ - Inside source: true *** True Line Result -380,9880,-380,10040 ** Processing line: ~ -380,9720,-380,9880~ - Inside source: true *** True Line Result -380,9720,-380,9880 ** Processing line: ~ -380,9720,-380,9540~ - Inside source: true *** True Line Result -380,9720,-380,9540 ** Processing line: ~ -380,9360,-380,9540~ - Inside source: true *** True Line Result -380,9360,-380,9540 ** Processing line: ~ -380,9180,-380,9360~ - Inside source: true *** True Line Result -380,9180,-380,9360 ** Processing line: ~ -380,9180,-380,9000~ - Inside source: true *** True Line Result -380,9180,-380,9000 ** Processing line: ~ -380,8840,-380,9000~ - Inside source: true *** True Line Result -380,8840,-380,9000 ** Processing line: ~ -380,8840,-380,8760~ - Inside source: true *** True Line Result -380,8840,-380,8760 ** Processing line: ~ -380,8760,-380,8620~ - Inside source: true *** True Line Result -380,8760,-380,8620 ** Processing line: ~ -380,8620,-380,8520~ - Inside source: true *** True Line Result -380,8620,-380,8520 ** Processing line: ~ -380,8520,-360,8400~ - Inside source: true *** True Line Result -380,8520,-360,8400 ** Processing line: ~ -360,8400,-100,8400~ - Inside source: true *** True Line Result -360,8400,-100,8400 ** Processing line: ~ -100,8400,-60,8420~ - Inside source: true *** True Line Result -100,8400,-60,8420 ** Processing line: ~ -60,8420,240,8440~ - Inside source: true *** True Line Result -60,8420,240,8440 ** Processing line: ~ 240,8440,240,8380~ - Inside source: true *** True Line Result 240,8440,240,8380 ** Processing line: ~ 240,8380,500,8440~ - Inside source: true *** True Line Result 240,8380,500,8440 ** Processing line: ~ 500,8440,760,8460~ - Inside source: true *** True Line Result 500,8440,760,8460 ** Processing line: ~ 760,8460,1000,8400~ - Inside source: true *** True Line Result 760,8460,1000,8400 ** Processing line: ~ 1000,8400,1180,8420~ - Inside source: true *** True Line Result 1000,8400,1180,8420 ** Processing line: ~ 1180,8420,1420,8400~ - Inside source: true *** True Line Result 1180,8420,1420,8400 ** Processing line: ~ 1940,8460,2140,8420~ - Inside source: true *** True Line Result 1940,8460,2140,8420 ** Processing line: ~ 2140,8420,2200,8520~ - Inside source: true *** True Line Result 2140,8420,2200,8520 ** Processing line: ~ 2200,8680,2200,8520~ - Inside source: true *** True Line Result 2200,8680,2200,8520 ** Processing line: ~ 2140,8840,2200,8680~ - Inside source: true *** True Line Result 2140,8840,2200,8680 ** Processing line: ~ 2140,8840,2140,9020~ - Inside source: true *** True Line Result 2140,8840,2140,9020 ** Processing line: ~ 2140,9100,2140,9020~ - Inside source: true *** True Line Result 2140,9100,2140,9020 ** Processing line: ~ 2140,9200,2140,9100~ - Inside source: true *** True Line Result 2140,9200,2140,9100 ** Processing line: ~ 2140,9200,2200,9320~ - Inside source: true *** True Line Result 2140,9200,2200,9320 ** Processing line: ~ 2200,9320,2200,9440~ - Inside source: true *** True Line Result 2200,9320,2200,9440 ** Processing line: ~ 2140,9560,2200,9440~ - Inside source: true *** True Line Result 2140,9560,2200,9440 ** Processing line: ~ 1880,10300,2200,10280~ - Inside source: true *** True Line Result 1880,10300,2200,10280 ** Processing line: ~ 2200,10280,2480,10260~ - Inside source: true *** True Line Result 2200,10280,2480,10260 ** Processing line: ~ 2480,10260,2700,10240~ - Inside source: true *** True Line Result 2480,10260,2700,10240 ** Processing line: ~ 2700,10240,2840,10180~ - Inside source: true *** True Line Result 2700,10240,2840,10180 ** Processing line: ~ 2840,10180,2900,10060~ - Inside source: true *** True Line Result 2840,10180,2900,10060 ** Processing line: ~ 2900,9860,2900,10060~ - Inside source: true *** True Line Result 2900,9860,2900,10060 ** Processing line: ~ 2900,9640,2900,9860~ - Inside source: true *** True Line Result 2900,9640,2900,9860 ** Processing line: ~ 2900,9640,2900,9500~ - Inside source: true *** True Line Result 2900,9640,2900,9500 ** Processing line: ~ 2900,9460,2900,9500~ - Inside source: true *** True Line Result 2900,9460,2900,9500 ** Processing line: ~ 2740,9460,2900,9460~ - Inside source: true *** True Line Result 2740,9460,2900,9460 ** Processing line: ~ 2700,9460,2740,9460~ - Inside source: true *** True Line Result 2700,9460,2740,9460 ** Processing line: ~ 2700,9360,2700,9460~ - Inside source: true *** True Line Result 2700,9360,2700,9460 ** Processing line: ~ 2700,9320,2700,9360~ - Inside source: true *** True Line Result 2700,9320,2700,9360 ** Processing line: ~ 2600,9320,2700,9320~ - Inside source: true *** True Line Result 2600,9320,2700,9320 ** Processing line: ~ 2600,9260,2600,9320~ - Inside source: true *** True Line Result 2600,9260,2600,9320 ** Processing line: ~ 2600,9200,2600,9260~ - Inside source: true *** True Line Result 2600,9200,2600,9260 ** Processing line: ~ 2480,9120,2600,9200~ - Inside source: true *** True Line Result 2480,9120,2600,9200 ** Processing line: ~ 2440,9080,2480,9120~ - Inside source: true *** True Line Result 2440,9080,2480,9120 ** Processing line: ~ 2380,9080,2440,9080~ - Inside source: true *** True Line Result 2380,9080,2440,9080 ** Processing line: ~ 2320,9060,2380,9080~ - Inside source: true *** True Line Result 2320,9060,2380,9080 ** Processing line: ~ 2320,8860,2320,9060~ - Inside source: true *** True Line Result 2320,8860,2320,9060 ** Processing line: ~ 2320,8860,2380,8840~ - Inside source: true *** True Line Result 2320,8860,2380,8840 ** Processing line: ~ 2380,8840,2480,8860~ - Inside source: true *** True Line Result 2380,8840,2480,8860 ** Processing line: ~ 2480,8860,2600,8840~ - Inside source: true *** True Line Result 2480,8860,2600,8840 ** Processing line: ~ 2600,8840,2740,8840~ - Inside source: true *** True Line Result 2600,8840,2740,8840 ** Processing line: ~ 2740,8840,2840,8800~ - Inside source: true *** True Line Result 2740,8840,2840,8800 ** Processing line: ~ 2840,8800,2900,8700~ - Inside source: true *** True Line Result 2840,8800,2900,8700 ** Processing line: ~ 2900,8600,2900,8700~ - Inside source: true *** True Line Result 2900,8600,2900,8700 ** Processing line: ~ 2900,8480,2900,8600~ - Inside source: true *** True Line Result 2900,8480,2900,8600 ** Processing line: ~ 2900,8380,2900,8480~ - Inside source: true *** True Line Result 2900,8380,2900,8480 ** Processing line: ~ 2900,8380,2900,8260~ - Inside source: true *** True Line Result 2900,8380,2900,8260 ** Processing line: ~ 2900,8260,2900,8140~ - Inside source: true *** True Line Result 2900,8260,2900,8140 ** Processing line: ~ 2900,8140,2900,8020~ - Inside source: true *** True Line Result 2900,8140,2900,8020 ** Processing line: ~ 2900,8020,2900,7900~ - Inside source: true *** True Line Result 2900,8020,2900,7900 ** Processing line: ~ 2900,7820,2900,7900~ - Inside source: true *** True Line Result 2900,7820,2900,7900 ** Processing line: ~ 2900,7820,2900,7740~ - Inside source: true *** True Line Result 2900,7820,2900,7740 ** Processing line: ~ 2900,7660,2900,7740~ - Inside source: true *** True Line Result 2900,7660,2900,7740 ** Processing line: ~ 2900,7560,2900,7660~ - Inside source: true *** True Line Result 2900,7560,2900,7660 ** Processing line: ~ 2900,7460,2900,7560~ - Inside source: true *** True Line Result 2900,7460,2900,7560 ** Processing line: ~ 2900,7460,2900,7360~ - Inside source: true *** True Line Result 2900,7460,2900,7360 ** Processing line: ~ 2900,7260,2900,7360~ - Inside source: true *** True Line Result 2900,7260,2900,7360 ** Processing line: ~ 2840,7160,2900,7260~ - Inside source: true *** True Line Result 2840,7160,2900,7260 ** Processing line: ~ 2800,7080,2840,7160~ - Inside source: true *** True Line Result 2800,7080,2840,7160 ** Processing line: ~ 2700,7100,2800,7080~ - Inside source: true *** True Line Result 2700,7100,2800,7080 ** Processing line: ~ 2560,7120,2700,7100~ - Inside source: true *** True Line Result 2560,7120,2700,7100 ** Processing line: ~ 2400,7100,2560,7120~ - Inside source: true *** True Line Result 2400,7100,2560,7120 ** Processing line: ~ 2320,7100,2400,7100~ - Inside source: true *** True Line Result 2320,7100,2400,7100 ** Processing line: ~ 2140,7100,2320,7100~ - Inside source: true *** True Line Result 2140,7100,2320,7100 ** Processing line: ~ 2040,7080,2140,7100~ - Inside source: true *** True Line Result 2040,7080,2140,7100 ** Processing line: ~ 1940,7080,2040,7080~ - Inside source: true *** True Line Result 1940,7080,2040,7080 ** Processing line: ~ 1820,7140,1940,7080~ - Inside source: true *** True Line Result 1820,7140,1940,7080 ** Processing line: ~ 1680,7140,1820,7140~ - Inside source: true *** True Line Result 1680,7140,1820,7140 ** Processing line: ~ 1540,7140,1680,7140~ - Inside source: true *** True Line Result 1540,7140,1680,7140 ** Processing line: ~ 1420,7220,1540,7140~ - Inside source: true *** True Line Result 1420,7220,1540,7140 ** Processing line: ~ 1280,7220,1380,7220~ - Inside source: true *** True Line Result 1280,7220,1380,7220 ** Processing line: ~ 1140,7200,1280,7220~ - Inside source: true *** True Line Result 1140,7200,1280,7220 ** Processing line: ~ 1000,7220,1140,7200~ - Inside source: true *** True Line Result 1000,7220,1140,7200 ** Processing line: ~ 760,7280,900,7320~ - Inside source: true *** True Line Result 760,7280,900,7320 ** Processing line: ~ 540,7220,760,7280~ - Inside source: true *** True Line Result 540,7220,760,7280 ** Processing line: ~ 300,7180,540,7220~ - Inside source: true *** True Line Result 300,7180,540,7220 ** Processing line: ~ 180,7120,180,7160~ - Inside source: true *** True Line Result 180,7120,180,7160 ** Processing line: ~ 40,7140,180,7120~ - Inside source: true *** True Line Result 40,7140,180,7120 ** Processing line: ~ -60,7160,40,7140~ - Inside source: true *** True Line Result -60,7160,40,7140 ** Processing line: ~ -200,7120,-60,7160~ - Inside source: true *** True Line Result -200,7120,-60,7160 ** Processing line: ~ 180,7160,300,7180~ - Inside source: true *** True Line Result 180,7160,300,7180 ** Processing line: ~ -260,7060,-200,7120~ - Inside source: true *** True Line Result -260,7060,-200,7120 ** Processing line: ~ -260,6980,-260,7060~ - Inside source: true *** True Line Result -260,6980,-260,7060 ** Processing line: ~ -260,6880,-260,6980~ - Inside source: true *** True Line Result -260,6880,-260,6980 ** Processing line: ~ -260,6880,-260,6820~ - Inside source: true *** True Line Result -260,6880,-260,6820 ** Processing line: ~ -260,6820,-200,6760~ - Inside source: true *** True Line Result -260,6820,-200,6760 ** Processing line: ~ -200,6760,-100,6740~ - Inside source: true *** True Line Result -200,6760,-100,6740 ** Processing line: ~ -100,6740,-60,6740~ - Inside source: true *** True Line Result -100,6740,-60,6740 ** Processing line: ~ -60,6740,40,6740~ - Inside source: true *** True Line Result -60,6740,40,6740 ** Processing line: ~ 40,6740,300,6800~ - Inside source: true *** True Line Result 40,6740,300,6800 ** Processing line: ~ 300,6800,420,6760~ - Inside source: true *** True Line Result 300,6800,420,6760 ** Processing line: ~ 420,6760,500,6740~ - Inside source: true *** True Line Result 420,6760,500,6740 ** Processing line: ~ 500,6740,540,6760~ - Inside source: true *** True Line Result 500,6740,540,6760 ** Processing line: ~ 540,6760,540,6760~ - Inside source: true *** True Line Result 540,6760,540,6760 ** Processing line: ~ 540,6760,640,6780~ - Inside source: true *** True Line Result 540,6760,640,6780 ** Processing line: ~ 640,6660,640,6780~ - Inside source: true *** True Line Result 640,6660,640,6780 ** Processing line: ~ 580,6580,640,6660~ - Inside source: true *** True Line Result 580,6580,640,6660 ** Processing line: ~ 580,6440,580,6580~ - Inside source: true *** True Line Result 580,6440,580,6580 ** Processing line: ~ 580,6440,640,6320~ - Inside source: true *** True Line Result 580,6440,640,6320 ** Processing line: ~ 640,6320,640,6180~ - Inside source: true *** True Line Result 640,6320,640,6180 ** Processing line: ~ 580,6080,640,6180~ - Inside source: true *** True Line Result 580,6080,640,6180 ** Processing line: ~ 580,6080,640,5960~ - Inside source: true *** True Line Result 580,6080,640,5960 ** Processing line: ~ 640,5960,640,5840~ - Inside source: true *** True Line Result 640,5960,640,5840 ** Processing line: ~ 640,5840,640,5700~ - Inside source: true *** True Line Result 640,5840,640,5700 ** Processing line: ~ 640,5700,660,5560~ - Inside source: true *** True Line Result 640,5700,660,5560 ** Processing line: ~ 660,5560,660,5440~ - Inside source: true *** True Line Result 660,5560,660,5440 ** Processing line: ~ 660,5440,660,5300~ - Inside source: true *** True Line Result 660,5440,660,5300 ** Processing line: ~ 660,5140,660,5300~ - Inside source: true *** True Line Result 660,5140,660,5300 ** Processing line: ~ 660,5140,660,5000~ - Inside source: true *** True Line Result 660,5140,660,5000 ** Processing line: ~ 660,5000,660,4880~ - Inside source: true *** True Line Result 660,5000,660,4880 ** Processing line: ~ 660,4880,820,4860~ - Inside source: true *** True Line Result 660,4880,820,4860 ** Processing line: ~ 820,4860,1000,4840~ - Inside source: true *** True Line Result 820,4860,1000,4840 ** Processing line: ~ 1000,4840,1100,4860~ - Inside source: true *** True Line Result 1000,4840,1100,4860 ** Processing line: ~ 1100,4860,1280,4860~ - Inside source: true *** True Line Result 1100,4860,1280,4860 ** Processing line: ~ 1280,4860,1420,4840~ - Inside source: true *** True Line Result 1280,4860,1420,4840 ** Processing line: ~ 1420,4840,1580,4860~ - Inside source: true *** True Line Result 1420,4840,1580,4860 ** Processing line: ~ 1580,4860,1720,4820~ - Inside source: true *** True Line Result 1580,4860,1720,4820 ** Processing line: ~ 1720,4820,1880,4860~ - Inside source: true *** True Line Result 1720,4820,1880,4860 ** Processing line: ~ 1880,4860,2000,4840~ - Inside source: true *** True Line Result 1880,4860,2000,4840 ** Processing line: ~ 2000,4840,2140,4840~ - Inside source: true *** True Line Result 2000,4840,2140,4840 ** Processing line: ~ 2140,4840,2320,4860~ - Inside source: true *** True Line Result 2140,4840,2320,4860 ** Processing line: ~ 2320,4860,2440,4880~ - Inside source: true *** True Line Result 2320,4860,2440,4880 ** Processing line: ~ 2440,4880,2600,4880~ - Inside source: true *** True Line Result 2440,4880,2600,4880 ** Processing line: ~ 2600,4880,2800,4880~ - Inside source: true *** True Line Result 2600,4880,2800,4880 ** Processing line: ~ 2800,4880,2900,4880~ - Inside source: true *** True Line Result 2800,4880,2900,4880 ** Processing line: ~ 2900,4880,2900,4820~ - Inside source: true *** True Line Result 2900,4880,2900,4820 ** Processing line: ~ 2900,4740,2900,4820~ - Inside source: true *** True Line Result 2900,4740,2900,4820 ** Processing line: ~ 2800,4700,2900,4740~ - Inside source: true *** True Line Result 2800,4700,2900,4740 ** Processing line: ~ 2520,4680,2800,4700~ - Inside source: true *** True Line Result 2520,4680,2800,4700 ** Processing line: ~ 2240,4660,2520,4680~ - Inside source: true *** True Line Result 2240,4660,2520,4680 ** Processing line: ~ 1940,4620,2240,4660~ - Inside source: true *** True Line Result 1940,4620,2240,4660 ** Processing line: ~ 1820,4580,1940,4620~ - Inside source: true *** True Line Result 1820,4580,1940,4620 ** Processing line: ~ 1820,4500,1820,4580~ - Inside source: true *** True Line Result 1820,4500,1820,4580 ** Processing line: ~ 1820,4500,1880,4420~ - Inside source: true *** True Line Result 1820,4500,1880,4420 ** Processing line: ~ 1880,4420,2000,4420~ - Inside source: true *** True Line Result 1880,4420,2000,4420 ** Processing line: ~ 2000,4420,2200,4420~ - Inside source: true *** True Line Result 2000,4420,2200,4420 ** Processing line: ~ 2200,4420,2400,4440~ - Inside source: true *** True Line Result 2200,4420,2400,4440 ** Processing line: ~ 2400,4440,2600,4440~ - Inside source: true *** True Line Result 2400,4440,2600,4440 ** Processing line: ~ 2600,4440,2840,4440~ - Inside source: true *** True Line Result 2600,4440,2840,4440 ** Processing line: ~ 2840,4440,2900,4400~ - Inside source: true *** True Line Result 2840,4440,2900,4400 ** Processing line: ~ 2740,4260,2900,4280~ - Inside source: true *** True Line Result 2740,4260,2900,4280 ** Processing line: ~ 2600,4240,2740,4260~ - Inside source: true *** True Line Result 2600,4240,2740,4260 ** Processing line: ~ 2480,4280,2600,4240~ - Inside source: true *** True Line Result 2480,4280,2600,4240 ** Processing line: ~ 2320,4240,2480,4280~ - Inside source: true *** True Line Result 2320,4240,2480,4280 ** Processing line: ~ 2140,4220,2320,4240~ - Inside source: true *** True Line Result 2140,4220,2320,4240 ** Processing line: ~ 1940,4220,2140,4220~ - Inside source: true *** True Line Result 1940,4220,2140,4220 ** Processing line: ~ 1880,4160,1940,4220~ - Inside source: true *** True Line Result 1880,4160,1940,4220 ** Processing line: ~ 1880,4160,1880,4080~ - Inside source: true *** True Line Result 1880,4160,1880,4080 ** Processing line: ~ 1880,4080,2040,4040~ - Inside source: true *** True Line Result 1880,4080,2040,4040 ** Processing line: ~ 2040,4040,2240,4060~ - Inside source: true *** True Line Result 2040,4040,2240,4060 ** Processing line: ~ 2240,4060,2400,4040~ - Inside source: true *** True Line Result 2240,4060,2400,4040 ** Processing line: ~ 2400,4040,2600,4060~ - Inside source: true *** True Line Result 2400,4040,2600,4060 ** Processing line: ~ 2600,4060,2740,4020~ - Inside source: true *** True Line Result 2600,4060,2740,4020 ** Processing line: ~ 2740,4020,2840,3940~ - Inside source: true *** True Line Result 2740,4020,2840,3940 ** Processing line: ~ 2840,3780,2840,3940~ - Inside source: true *** True Line Result 2840,3780,2840,3940 ** Processing line: ~ 2740,3660,2840,3780~ - Inside source: true *** True Line Result 2740,3660,2840,3780 ** Processing line: ~ 2700,3680,2740,3660~ - Inside source: true *** True Line Result 2700,3680,2740,3660 ** Processing line: ~ 2520,3700,2700,3680~ - Inside source: true *** True Line Result 2520,3700,2700,3680 ** Processing line: ~ 2380,3700,2520,3700~ - Inside source: true *** True Line Result 2380,3700,2520,3700 ** Processing line: ~ 2200,3720,2380,3700~ - Inside source: true *** True Line Result 2200,3720,2380,3700 ** Processing line: ~ 2040,3720,2200,3720~ - Inside source: true *** True Line Result 2040,3720,2200,3720 ** Processing line: ~ 1880,3700,2040,3720~ - Inside source: true *** True Line Result 1880,3700,2040,3720 ** Processing line: ~ 1820,3680,1880,3700~ - Inside source: true *** True Line Result 1820,3680,1880,3700 ** Processing line: ~ 1760,3600,1820,3680~ - Inside source: true *** True Line Result 1760,3600,1820,3680 ** Processing line: ~ 1760,3600,1820,3480~ - Inside source: true *** True Line Result 1760,3600,1820,3480 ** Processing line: ~ 1820,3480,1880,3440~ - Inside source: true *** True Line Result 1820,3480,1880,3440 ** Processing line: ~ 1880,3440,1960,3460~ - Inside source: true *** True Line Result 1880,3440,1960,3460 ** Processing line: ~ 1960,3460,2140,3460~ - Inside source: true *** True Line Result 1960,3460,2140,3460 ** Processing line: ~ 2140,3460,2380,3460~ - Inside source: true *** True Line Result 2140,3460,2380,3460 ** Processing line: ~ 2380,3460,2640,3440~ - Inside source: true *** True Line Result 2380,3460,2640,3440 ** Processing line: ~ 2640,3440,2900,3380~ - Inside source: true *** True Line Result 2640,3440,2900,3380 ** Processing line: ~ 2840,3280,2900,3380~ - Inside source: true *** True Line Result 2840,3280,2900,3380 ** Processing line: ~ 2840,3280,2900,3200~ - Inside source: true *** True Line Result 2840,3280,2900,3200 ** Processing line: ~ 2900,3200,2900,3140~ - Inside source: true *** True Line Result 2900,3200,2900,3140 ** Processing line: ~ 2840,3020,2900,3140~ - Inside source: true *** True Line Result 2840,3020,2900,3140 ** Processing line: ~ 2800,2960,2840,3020~ - Inside source: true *** True Line Result 2800,2960,2840,3020 ** Processing line: ~ 2700,3000,2800,2960~ - Inside source: true *** True Line Result 2700,3000,2800,2960 ** Processing line: ~ 2600,2980,2700,3000~ - Inside source: true *** True Line Result 2600,2980,2700,3000 ** Processing line: ~ 2380,3000,2600,2980~ - Inside source: true *** True Line Result 2380,3000,2600,2980 ** Processing line: ~ 2140,3000,2380,3000~ - Inside source: true *** True Line Result 2140,3000,2380,3000 ** Processing line: ~ 1880,3000,2140,3000~ - Inside source: true *** True Line Result 1880,3000,2140,3000 ** Processing line: ~ 1720,3040,1880,3000~ - Inside source: true *** True Line Result 1720,3040,1880,3000 ** Processing line: ~ 1640,2960,1720,3040~ - Inside source: true *** True Line Result 1640,2960,1720,3040 ** Processing line: ~ 1500,2940,1640,2960~ - Inside source: true *** True Line Result 1500,2940,1640,2960 ** Processing line: ~ 1340,3000,1500,2940~ - Inside source: true *** True Line Result 1340,3000,1500,2940 ** Processing line: ~ 1240,3000,1340,3000~ - Inside source: true *** True Line Result 1240,3000,1340,3000 ** Processing line: ~ 1140,3020,1240,3000~ - Inside source: true *** True Line Result 1140,3020,1240,3000 ** Processing line: ~ 1040,3000,1140,3020~ - Inside source: true *** True Line Result 1040,3000,1140,3020 ** Processing line: ~ 960,2960,1040,3000~ - Inside source: true *** True Line Result 960,2960,1040,3000 ** Processing line: ~ 900,2960,960,2960~ - Inside source: true *** True Line Result 900,2960,960,2960 ** Processing line: ~ 840,2840,900,2960~ - Inside source: true *** True Line Result 840,2840,900,2960 ** Processing line: ~ 700,2820,840,2840~ - Inside source: true *** True Line Result 700,2820,840,2840 ** Processing line: ~ 540,2820,700,2820~ - Inside source: true *** True Line Result 540,2820,700,2820 ** Processing line: ~ 420,2820,540,2820~ - Inside source: true *** True Line Result 420,2820,540,2820 ** Processing line: ~ 180,2800,420,2820~ - Inside source: true *** True Line Result 180,2800,420,2820 ** Processing line: ~ 60,2780,180,2800~ - Inside source: true *** True Line Result 60,2780,180,2800 ** Processing line: ~ -60,2800,60,2780~ - Inside source: true *** True Line Result -60,2800,60,2780 ** Processing line: ~ -160,2760,-60,2800~ - Inside source: true *** True Line Result -160,2760,-60,2800 ** Processing line: ~ -260,2740,-160,2760~ - Inside source: true *** True Line Result -260,2740,-160,2760 ** Processing line: ~ -300,2640,-260,2740~ - Inside source: true *** True Line Result -300,2640,-260,2740 ** Processing line: ~ -360,2560,-300,2640~ - Inside source: true *** True Line Result -360,2560,-300,2640 ** Processing line: ~ -380,2460,-360,2560~ - Inside source: true *** True Line Result -380,2460,-360,2560 ** Processing line: ~ -380,2460,-300,2380~ - Inside source: true *** True Line Result -380,2460,-300,2380 ** Processing line: ~ -300,2300,-300,2380~ - Inside source: true *** True Line Result -300,2300,-300,2380 ** Processing line: ~ -300,2300,-300,2220~ - Inside source: true *** True Line Result -300,2300,-300,2220 ** Processing line: ~ -300,2100,-300,2220~ - Inside source: true *** True Line Result -300,2100,-300,2220 ** Processing line: ~ -300,2100,-300,2040~ - Inside source: true *** True Line Result -300,2100,-300,2040 ** Processing line: ~ -300,2040,-160,2040~ - Inside source: true *** True Line Result -300,2040,-160,2040 ** Processing line: ~ -160,2040,-60,2040~ - Inside source: true *** True Line Result -160,2040,-60,2040 ** Processing line: ~ -60,2040,60,2040~ - Inside source: true *** True Line Result -60,2040,60,2040 ** Processing line: ~ 60,2040,180,2040~ - Inside source: true *** True Line Result 60,2040,180,2040 ** Processing line: ~ 180,2040,360,2040~ - Inside source: true *** True Line Result 180,2040,360,2040 ** Processing line: ~ 360,2040,540,2040~ - Inside source: true *** True Line Result 360,2040,540,2040 ** Processing line: ~ 540,2040,700,2080~ - Inside source: true *** True Line Result 540,2040,700,2080 ** Processing line: ~ 660,2160,700,2080~ - Inside source: true *** True Line Result 660,2160,700,2080 ** Processing line: ~ 660,2160,700,2260~ - Inside source: true *** True Line Result 660,2160,700,2260 ** Processing line: ~ 660,2380,700,2260~ - Inside source: true *** True Line Result 660,2380,700,2260 ** Processing line: ~ 500,2340,660,2380~ - Inside source: true *** True Line Result 500,2340,660,2380 ** Processing line: ~ 360,2340,500,2340~ - Inside source: true *** True Line Result 360,2340,500,2340 ** Processing line: ~ 240,2340,360,2340~ - Inside source: true *** True Line Result 240,2340,360,2340 ** Processing line: ~ 40,2320,240,2340~ - Inside source: true *** True Line Result 40,2320,240,2340 ** Processing line: ~ -60,2320,40,2320~ - Inside source: true *** True Line Result -60,2320,40,2320 ** Processing line: ~ -100,2380,-60,2320~ - Inside source: true *** True Line Result -100,2380,-60,2320 ** Processing line: ~ -100,2380,-100,2460~ - Inside source: true *** True Line Result -100,2380,-100,2460 ** Processing line: ~ -100,2460,-100,2540~ - Inside source: true *** True Line Result -100,2460,-100,2540 ** Processing line: ~ -100,2540,0,2560~ - Inside source: true *** True Line Result -100,2540,0,2560 ** Processing line: ~ 0,2560,140,2600~ - Inside source: true *** True Line Result 0,2560,140,2600 ** Processing line: ~ 140,2600,300,2600~ - Inside source: true *** True Line Result 140,2600,300,2600 ** Processing line: ~ 300,2600,460,2600~ - Inside source: true *** True Line Result 300,2600,460,2600 ** Processing line: ~ 460,2600,640,2600~ - Inside source: true *** True Line Result 460,2600,640,2600 ** Processing line: ~ 640,2600,760,2580~ - Inside source: true *** True Line Result 640,2600,760,2580 ** Processing line: ~ 760,2580,820,2560~ - Inside source: true *** True Line Result 760,2580,820,2560 ** Processing line: ~ 820,2560,820,2500~ - Inside source: true *** True Line Result 820,2560,820,2500 ** Processing line: ~ 820,2500,820,2400~ - Inside source: true *** True Line Result 820,2500,820,2400 ** Processing line: ~ 820,2400,840,2320~ - Inside source: true *** True Line Result 820,2400,840,2320 ** Processing line: ~ 840,2320,840,2240~ - Inside source: true *** True Line Result 840,2320,840,2240 ** Processing line: ~ 820,2120,840,2240~ - Inside source: true *** True Line Result 820,2120,840,2240 ** Processing line: ~ 820,2020,820,2120~ - Inside source: true *** True Line Result 820,2020,820,2120 ** Processing line: ~ 820,1900,820,2020~ - Inside source: true *** True Line Result 820,1900,820,2020 ** Processing line: ~ 760,1840,820,1900~ - Inside source: true *** True Line Result 760,1840,820,1900 ** Processing line: ~ 640,1840,760,1840~ - Inside source: true *** True Line Result 640,1840,760,1840 ** Processing line: ~ 500,1840,640,1840~ - Inside source: true *** True Line Result 500,1840,640,1840 ** Processing line: ~ 300,1860,420,1880~ - Inside source: true *** True Line Result 300,1860,420,1880 ** Processing line: ~ 180,1840,300,1860~ - Inside source: true *** True Line Result 180,1840,300,1860 ** Processing line: ~ 420,1880,500,1840~ - Inside source: true *** True Line Result 420,1880,500,1840 ** Processing line: ~ 0,1840,180,1840~ - Inside source: true *** True Line Result 0,1840,180,1840 ** Processing line: ~ -60,1860,0,1840~ - Inside source: true *** True Line Result -60,1860,0,1840 ** Processing line: ~ -160,1840,-60,1860~ - Inside source: true *** True Line Result -160,1840,-60,1860 ** Processing line: ~ -200,1800,-160,1840~ - Inside source: true *** True Line Result -200,1800,-160,1840 ** Processing line: ~ -260,1760,-200,1800~ - Inside source: true *** True Line Result -260,1760,-200,1800 ** Processing line: ~ -260,1680,-260,1760~ - Inside source: true *** True Line Result -260,1680,-260,1760 ** Processing line: ~ -260,1620,-260,1680~ - Inside source: true *** True Line Result -260,1620,-260,1680 ** Processing line: ~ -260,1540,-260,1620~ - Inside source: true *** True Line Result -260,1540,-260,1620 ** Processing line: ~ -260,1540,-260,1460~ - Inside source: true *** True Line Result -260,1540,-260,1460 ** Processing line: ~ -300,1420,-260,1460~ - Inside source: true *** True Line Result -300,1420,-260,1460 ** Processing line: ~ -300,1420,-300,1340~ - Inside source: true *** True Line Result -300,1420,-300,1340 ** Processing line: ~ -300,1340,-260,1260~ - Inside source: true *** True Line Result -300,1340,-260,1260 ** Processing line: ~ -260,1260,-260,1160~ - Inside source: true *** True Line Result -260,1260,-260,1160 ** Processing line: ~ -260,1060,-260,1160~ - Inside source: true *** True Line Result -260,1060,-260,1160 ** Processing line: ~ -260,1060,-260,960~ - Inside source: true *** True Line Result -260,1060,-260,960 ** Processing line: ~ -260,880,-260,960~ - Inside source: true *** True Line Result -260,880,-260,960 ** Processing line: ~ -260,880,-260,780~ - Inside source: true *** True Line Result -260,880,-260,780 ** Processing line: ~ -260,780,-260,680~ - Inside source: true *** True Line Result -260,780,-260,680 ** Processing line: ~ -300,580,-260,680~ - Inside source: true *** True Line Result -300,580,-260,680 ** Processing line: ~ -300,580,-300,480~ - Inside source: true *** True Line Result -300,580,-300,480 ** Processing line: ~ -300,480,-260,400~ - Inside source: true *** True Line Result -300,480,-260,400 ** Processing line: ~ -300,320,-260,400~ - Inside source: true *** True Line Result -300,320,-260,400 ** Processing line: ~ -300,320,-300,240~ - Inside source: true *** True Line Result -300,320,-300,240 ** Processing line: ~ -300,240,-200,220~ - Inside source: true *** True Line Result -300,240,-200,220 ** Processing line: ~ -200,220,-200,160~ - Inside source: true *** True Line Result -200,220,-200,160 ** Processing line: ~ -200,160,-100,140~ - Inside source: true *** True Line Result -200,160,-100,140 ** Processing line: ~ -100,140,0,120~ - Inside source: true *** True Line Result -100,140,0,120 ** Processing line: ~ 0,120,60,120~ - Inside source: true *** True Line Result 0,120,60,120 ** Processing line: ~ 60,120,180,120~ - Inside source: true *** True Line Result 60,120,180,120 ** Processing line: ~ 180,120,300,120~ - Inside source: true *** True Line Result 180,120,300,120 ** Processing line: ~ 300,120,420,140~ - Inside source: true *** True Line Result 300,120,420,140 ** Processing line: ~ 420,140,580,180~ - Inside source: true *** True Line Result 420,140,580,180 ** Processing line: ~ 580,180,760,180~ - Inside source: true *** True Line Result 580,180,760,180 ** Processing line: ~ 760,180,900,180~ - Inside source: true *** True Line Result 760,180,900,180 ** Processing line: ~ 960,180,1100,180~ - Inside source: true *** True Line Result 960,180,1100,180 ** Processing line: ~ 1100,180,1340,200~ - Inside source: true *** True Line Result 1100,180,1340,200 ** Processing line: ~ 1340,200,1580,200~ - Inside source: true *** True Line Result 1340,200,1580,200 ** Processing line: ~ 1580,200,1720,180~ - Inside source: true *** True Line Result 1580,200,1720,180 ** Processing line: ~ 1720,180,2000,140~ - Inside source: true *** True Line Result 1720,180,2000,140 ** Processing line: ~ 2000,140,2240,140~ - Inside source: true *** True Line Result 2000,140,2240,140 ** Processing line: ~ 2240,140,2480,140~ - Inside source: true *** True Line Result 2240,140,2480,140 ** Processing line: ~ 2520,140,2800,160~ - Inside source: true *** True Line Result 2520,140,2800,160 ** Processing line: ~ 2800,160,3000,160~ - Inside source: true *** True Line Result 2800,160,3000,160 ** Processing line: ~ 3000,160,3140,160~ - Inside source: true *** True Line Result 3000,160,3140,160 ** Processing line: ~ 3140,260,3140,160~ - Inside source: true *** True Line Result 3140,260,3140,160 ** Processing line: ~ 3140,260,3140,380~ - Inside source: true *** True Line Result 3140,260,3140,380 ** Processing line: ~ 3080,500,3140,380~ - Inside source: true *** True Line Result 3080,500,3140,380 ** Processing line: ~ 3080,620,3080,500~ - Inside source: true *** True Line Result 3080,620,3080,500 ** Processing line: ~ 3080,620,3080,740~ - Inside source: true *** True Line Result 3080,620,3080,740 ** Processing line: ~ 3080,740,3080,840~ - Inside source: true *** True Line Result 3080,740,3080,840 ** Processing line: ~ 3080,960,3080,840~ - Inside source: true *** True Line Result 3080,960,3080,840 ** Processing line: ~ 3080,1080,3080,960~ - Inside source: true *** True Line Result 3080,1080,3080,960 ** Processing line: ~ 3080,1080,3080,1200~ - Inside source: true *** True Line Result 3080,1080,3080,1200 ** Processing line: ~ 3080,1200,3080,1340~ - Inside source: true *** True Line Result 3080,1200,3080,1340 ** Processing line: ~ 3080,1340,3080,1460~ - Inside source: true *** True Line Result 3080,1340,3080,1460 ** Processing line: ~ 3080,1580,3080,1460~ - Inside source: true *** True Line Result 3080,1580,3080,1460 ** Processing line: ~ 3080,1700,3080,1580~ - Inside source: true *** True Line Result 3080,1700,3080,1580 ** Processing line: ~ 3080,1700,3080,1760~ - Inside source: true *** True Line Result 3080,1700,3080,1760 ** Processing line: ~ 3080,1760,3200,1760~ - Inside source: true *** True Line Result 3080,1760,3200,1760 ** Processing line: ~ 3200,1760,3320,1760~ - Inside source: true *** True Line Result 3200,1760,3320,1760 ** Processing line: ~ 3320,1760,3520,1760~ - Inside source: true *** True Line Result 3320,1760,3520,1760 ** Processing line: ~ 3520,1760,3680,1740~ - Inside source: true *** True Line Result 3520,1760,3680,1740 ** Processing line: ~ 3680,1740,3780,1700~ - Inside source: true *** True Line Result 3680,1740,3780,1700 ** Processing line: ~ 3780,1700,3840,1620~ - Inside source: true *** True Line Result 3780,1700,3840,1620 ** Processing line: ~ 3840,1620,3840,1520~ - Inside source: true *** True Line Result 3840,1620,3840,1520 ** Processing line: ~ 3840,1520,3840,1420~ - Inside source: true *** True Line Result 3840,1520,3840,1420 ** Processing line: ~ 3840,1320,3840,1420~ - Inside source: true *** True Line Result 3840,1320,3840,1420 ** Processing line: ~ 3840,1120,3840,1320~ - Inside source: true *** True Line Result 3840,1120,3840,1320 ** Processing line: ~ 3840,1120,3840,940~ - Inside source: true *** True Line Result 3840,1120,3840,940 ** Processing line: ~ 3840,940,3840,760~ - Inside source: true *** True Line Result 3840,940,3840,760 ** Processing line: ~ 3780,600,3840,760~ - Inside source: true *** True Line Result 3780,600,3840,760 ** Processing line: ~ 3780,600,3780,440~ - Inside source: true *** True Line Result 3780,600,3780,440 ** Processing line: ~ 3780,320,3780,440~ - Inside source: true *** True Line Result 3780,320,3780,440 ** Processing line: ~ 3780,320,3780,160~ - Inside source: true *** True Line Result 3780,320,3780,160 ** Processing line: ~ 3780,60,3780,160~ - Inside source: true *** True Line Result 3780,60,3780,160 ** Processing line: ~ 3780,60,4020,60~ - Inside source: true *** True Line Result 3780,60,4020,60 ** Processing line: ~ 4020,60,4260,40~ - Inside source: true *** True Line Result 4020,60,4260,40 ** Processing line: ~ 4260,40,4500,40~ - Inside source: true *** True Line Result 4260,40,4500,40 ** Processing line: ~ 4500,40,4740,40~ - Inside source: true *** True Line Result 4500,40,4740,40 ** Processing line: ~ 4740,40,4840,20~ - Inside source: true *** True Line Result 4740,40,4840,20 ** Processing line: ~ 4840,20,4880,80~ - Inside source: true *** True Line Result 4840,20,4880,80 ** Processing line: ~ 4880,80,5080,40~ - Inside source: true *** True Line Result 4880,80,5080,40 ** Processing line: ~ 5080,40,5280,20~ - Inside source: true *** True Line Result 5080,40,5280,20 ** Processing line: ~ 5280,20,5500,0~ - Inside source: true *** True Line Result 5280,20,5500,0 ** Processing line: ~ 5500,0,5720,0~ - Inside source: true *** True Line Result 5500,0,5720,0 ** Processing line: ~ 5720,0,5940,60~ - Inside source: true *** True Line Result 5720,0,5940,60 ** Processing line: ~ 5940,60,6240,60~ - Inside source: true *** True Line Result 5940,60,6240,60 ** Processing line: ~ 6240,60,6540,20~ - Inside source: true *** True Line Result 6240,60,6540,20 ** Processing line: ~ 6540,20,6840,20~ - Inside source: true *** True Line Result 6540,20,6840,20 ** Processing line: ~ 6840,20,7040,0~ - Inside source: true *** True Line Result 6840,20,7040,0 ** Processing line: ~ 7040,0,7140,0~ - Inside source: true *** True Line Result 7040,0,7140,0 ** Processing line: ~ 7140,0,7400,20~ - Inside source: true *** True Line Result 7140,0,7400,20 ** Processing line: ~ 7400,20,7680,0~ - Inside source: true *** True Line Result 7400,20,7680,0 ** Processing line: ~ 7680,0,7940,0~ - Inside source: true *** True Line Result 7680,0,7940,0 ** Processing line: ~ 7940,0,8200,-20~ - Inside source: true *** True Line Result 7940,0,8200,-20 ** Processing line: ~ 8200,-20,8360,20~ - Inside source: true *** True Line Result 8200,-20,8360,20 ** Processing line: ~ 8360,20,8560,-40~ - Inside source: true *** True Line Result 8360,20,8560,-40 ** Processing line: ~ 8560,-40,8760,0~ - Inside source: true *** True Line Result 8560,-40,8760,0 ** Processing line: ~ 8760,0,8880,40~ - Inside source: true *** True Line Result 8760,0,8880,40 ** Processing line: ~ 8880,120,8880,40~ - Inside source: true *** True Line Result 8880,120,8880,40 ** Processing line: ~ 8840,220,8840,120~ - Inside source: true *** True Line Result 8840,220,8840,120 ** Processing line: ~ 8620,240,8840,220~ - Inside source: true *** True Line Result 8620,240,8840,220 ** Processing line: ~ 8420,260,8620,240~ - Inside source: true *** True Line Result 8420,260,8620,240 ** Processing line: ~ 8200,280,8420,260~ - Inside source: true *** True Line Result 8200,280,8420,260 ** Processing line: ~ 7940,280,8200,280~ - Inside source: true *** True Line Result 7940,280,8200,280 ** Processing line: ~ 7760,240,7940,280~ - Inside source: true *** True Line Result 7760,240,7940,280 ** Processing line: ~ 7560,220,7760,240~ - Inside source: true *** True Line Result 7560,220,7760,240 ** Processing line: ~ 7360,280,7560,220~ - Inside source: true *** True Line Result 7360,280,7560,220 ** Processing line: ~ 7140,260,7360,280~ - Inside source: true *** True Line Result 7140,260,7360,280 ** Processing line: ~ 6940,240,7140,260~ - Inside source: true *** True Line Result 6940,240,7140,260 ** Processing line: ~ 6720,220,6940,240~ - Inside source: true *** True Line Result 6720,220,6940,240 ** Processing line: ~ 6480,220,6720,220~ - Inside source: true *** True Line Result 6480,220,6720,220 ** Processing line: ~ 6360,300,6480,220~ - Inside source: true *** True Line Result 6360,300,6480,220 ** Processing line: ~ 6240,300,6360,300~ - Inside source: true *** True Line Result 6240,300,6360,300 ** Processing line: ~ 6200,500,6240,300~ - Inside source: true *** True Line Result 6200,500,6240,300 ** Processing line: ~ 6200,500,6360,540~ - Inside source: true *** True Line Result 6200,500,6360,540 ** Processing line: ~ 6360,540,6540,520~ - Inside source: true *** True Line Result 6360,540,6540,520 ** Processing line: ~ 6540,520,6720,480~ - Inside source: true *** True Line Result 6540,520,6720,480 ** Processing line: ~ 6720,480,6880,460~ - Inside source: true *** True Line Result 6720,480,6880,460 ** Processing line: ~ 6880,460,7080,500~ - Inside source: true *** True Line Result 6880,460,7080,500 ** Processing line: ~ 7080,500,7320,500~ - Inside source: true *** True Line Result 7080,500,7320,500 ** Processing line: ~ 7320,500,7680,500~ - Inside source: true *** True Line Result 7320,500,7680,500 ** Processing line: ~ 7680,620,7680,500~ - Inside source: true *** True Line Result 7680,620,7680,500 ** Processing line: ~ 7520,640,7680,620~ - Inside source: true *** True Line Result 7520,640,7680,620 ** Processing line: ~ 7360,640,7520,640~ - Inside source: true *** True Line Result 7360,640,7520,640 ** Processing line: ~ 7200,640,7360,640~ - Inside source: true *** True Line Result 7200,640,7360,640 ** Processing line: ~ 7040,660,7200,640~ - Inside source: true *** True Line Result 7040,660,7200,640 ** Processing line: ~ 6880,720,7040,660~ - Inside source: true *** True Line Result 6880,720,7040,660 ** Processing line: ~ 6720,700,6880,720~ - Inside source: true *** True Line Result 6720,700,6880,720 ** Processing line: ~ 6540,700,6720,700~ - Inside source: true *** True Line Result 6540,700,6720,700 ** Processing line: ~ 6420,760,6540,700~ - Inside source: true *** True Line Result 6420,760,6540,700 ** Processing line: ~ 6280,740,6420,760~ - Inside source: true *** True Line Result 6280,740,6420,760 ** Processing line: ~ 6240,760,6280,740~ - Inside source: true *** True Line Result 6240,760,6280,740 ** Processing line: ~ 6200,920,6240,760~ - Inside source: true *** True Line Result 6200,920,6240,760 ** Processing line: ~ 6200,920,6360,960~ - Inside source: true *** True Line Result 6200,920,6360,960 ** Processing line: ~ 6360,960,6540,960~ - Inside source: true *** True Line Result 6360,960,6540,960 ** Processing line: ~ 6540,960,6720,960~ - Inside source: true *** True Line Result 6540,960,6720,960 ** Processing line: ~ 6720,960,6760,980~ - Inside source: true *** True Line Result 6720,960,6760,980 ** Processing line: ~ 6760,980,6880,940~ - Inside source: true *** True Line Result 6760,980,6880,940 ** Processing line: ~ 6880,940,7080,940~ - Inside source: true *** True Line Result 6880,940,7080,940 ** Processing line: ~ 7080,940,7280,940~ - Inside source: true *** True Line Result 7080,940,7280,940 ** Processing line: ~ 7280,940,7520,920~ - Inside source: true *** True Line Result 7280,940,7520,920 ** Processing line: ~ 7520,920,7760,900~ - Inside source: true *** True Line Result 7520,920,7760,900 ** Processing line: ~ 7760,900,7980,860~ - Inside source: true *** True Line Result 7760,900,7980,860 ** Processing line: ~ 7980,860,8100,880~ - Inside source: true *** True Line Result 7980,860,8100,880 ** Processing line: ~ 8100,880,8280,900~ - Inside source: true *** True Line Result 8100,880,8280,900 ** Processing line: ~ 8280,900,8500,820~ - Inside source: true *** True Line Result 8280,900,8500,820 ** Processing line: ~ 8500,820,8700,820~ - Inside source: true *** True Line Result 8500,820,8700,820 ** Processing line: ~ 8700,820,8760,840~ - Inside source: true *** True Line Result 8700,820,8760,840 ** Processing line: ~ 8760,960,8760,840~ - Inside source: true *** True Line Result 8760,960,8760,840 ** Processing line: ~ 8700,1040,8760,960~ - Inside source: true *** True Line Result 8700,1040,8760,960 ** Processing line: ~ 8560,1060,8700,1040~ - Inside source: true *** True Line Result 8560,1060,8700,1040 ** Processing line: ~ 8460,1080,8560,1060~ - Inside source: true *** True Line Result 8460,1080,8560,1060 ** Processing line: ~ 8360,1040,8460,1080~ - Inside source: true *** True Line Result 8360,1040,8460,1080 ** Processing line: ~ 8280,1080,8360,1040~ - Inside source: true *** True Line Result 8280,1080,8360,1040 ** Processing line: ~ 8160,1120,8280,1080~ - Inside source: true *** True Line Result 8160,1120,8280,1080 ** Processing line: ~ 8040,1120,8160,1120~ - Inside source: true *** True Line Result 8040,1120,8160,1120 ** Processing line: ~ 7940,1100,8040,1120~ - Inside source: true *** True Line Result 7940,1100,8040,1120 ** Processing line: ~ 7800,1120,7940,1100~ - Inside source: true *** True Line Result 7800,1120,7940,1100 ** Processing line: ~ 7680,1120,7800,1120~ - Inside source: true *** True Line Result 7680,1120,7800,1120 ** Processing line: ~ 7520,1100,7680,1120~ - Inside source: true *** True Line Result 7520,1100,7680,1120 ** Processing line: ~ 7360,1100,7520,1100~ - Inside source: true *** True Line Result 7360,1100,7520,1100 ** Processing line: ~ 7200,1120,7360,1100~ - Inside source: true *** True Line Result 7200,1120,7360,1100 ** Processing line: ~ 7040,1180,7200,1120~ - Inside source: true *** True Line Result 7040,1180,7200,1120 ** Processing line: ~ 6880,1160,7040,1180~ - Inside source: true *** True Line Result 6880,1160,7040,1180 ** Processing line: ~ 6720,1160,6880,1160~ - Inside source: true *** True Line Result 6720,1160,6880,1160 ** Processing line: ~ 6540,1160,6720,1160~ - Inside source: true *** True Line Result 6540,1160,6720,1160 ** Processing line: ~ 6360,1160,6540,1160~ - Inside source: true *** True Line Result 6360,1160,6540,1160 ** Processing line: ~ 6200,1160,6360,1160~ - Inside source: true *** True Line Result 6200,1160,6360,1160 ** Processing line: ~ 6040,1220,6200,1160~ - Inside source: true *** True Line Result 6040,1220,6200,1160 ** Processing line: ~ 6040,1220,6040,1400~ - Inside source: true *** True Line Result 6040,1220,6040,1400 ** Processing line: ~ 6040,1400,6200,1440~ - Inside source: true *** True Line Result 6040,1400,6200,1440 ** Processing line: ~ 6200,1440,6320,1440~ - Inside source: true *** True Line Result 6200,1440,6320,1440 ** Processing line: ~ 6320,1440,6440,1440~ - Inside source: true *** True Line Result 6320,1440,6440,1440 ** Processing line: ~ 6600,1440,6760,1440~ - Inside source: true *** True Line Result 6600,1440,6760,1440 ** Processing line: ~ 6760,1440,6940,1420~ - Inside source: true *** True Line Result 6760,1440,6940,1420 ** Processing line: ~ 6440,1440,6600,1440~ - Inside source: true *** True Line Result 6440,1440,6600,1440 ** Processing line: ~ 6940,1420,7280,1400~ - Inside source: true *** True Line Result 6940,1420,7280,1400 ** Processing line: ~ 7280,1400,7560,1400~ - Inside source: true *** True Line Result 7280,1400,7560,1400 ** Processing line: ~ 7560,1400,7760,1400~ - Inside source: true *** True Line Result 7560,1400,7760,1400 ** Processing line: ~ 7760,1400,7940,1360~ - Inside source: true *** True Line Result 7760,1400,7940,1360 ** Processing line: ~ 7940,1360,8100,1380~ - Inside source: true *** True Line Result 7940,1360,8100,1380 ** Processing line: ~ 8100,1380,8280,1340~ - Inside source: true *** True Line Result 8100,1380,8280,1340 ** Processing line: ~ 8280,1340,8460,1320~ - Inside source: true *** True Line Result 8280,1340,8460,1320 ** Processing line: ~ 8660,1300,8760,1360~ - Inside source: true *** True Line Result 8660,1300,8760,1360 ** Processing line: ~ 8460,1320,8660,1300~ - Inside source: true *** True Line Result 8460,1320,8660,1300 ** Processing line: ~ 8760,1360,8800,1500~ - Inside source: true *** True Line Result 8760,1360,8800,1500 ** Processing line: ~ 8800,1660,8800,1500~ - Inside source: true *** True Line Result 8800,1660,8800,1500 ** Processing line: ~ 8800,1660,8800,1820~ - Inside source: true *** True Line Result 8800,1660,8800,1820 ** Processing line: ~ 8700,1840,8800,1820~ - Inside source: true *** True Line Result 8700,1840,8800,1820 ** Processing line: ~ 8620,1860,8700,1840~ - Inside source: true *** True Line Result 8620,1860,8700,1840 ** Processing line: ~ 8560,1800,8620,1860~ - Inside source: true *** True Line Result 8560,1800,8620,1860 ** Processing line: ~ 8560,1800,8620,1680~ - Inside source: true *** True Line Result 8560,1800,8620,1680 ** Processing line: ~ 8500,1640,8620,1680~ - Inside source: true *** True Line Result 8500,1640,8620,1680 ** Processing line: ~ 8420,1680,8500,1640~ - Inside source: true *** True Line Result 8420,1680,8500,1640 ** Processing line: ~ 8280,1680,8420,1680~ - Inside source: true *** True Line Result 8280,1680,8420,1680 ** Processing line: ~ 8160,1680,8280,1680~ - Inside source: true *** True Line Result 8160,1680,8280,1680 ** Processing line: ~ 7900,1680,8160,1680~ - Inside source: true *** True Line Result 7900,1680,8160,1680 ** Processing line: ~ 7680,1680,7900,1680~ - Inside source: true *** True Line Result 7680,1680,7900,1680 ** Processing line: ~ 7400,1660,7680,1680~ - Inside source: true *** True Line Result 7400,1660,7680,1680 ** Processing line: ~ 7140,1680,7400,1660~ - Inside source: true *** True Line Result 7140,1680,7400,1660 ** Processing line: ~ 6880,1640,7140,1680~ - Inside source: true *** True Line Result 6880,1640,7140,1680 ** Processing line: ~ 6040,1820,6320,1780~ - Inside source: true *** True Line Result 6040,1820,6320,1780 ** Processing line: ~ 5900,1840,6040,1820~ - Inside source: true *** True Line Result 5900,1840,6040,1820 ** Processing line: ~ 6640,1700,6880,1640~ - Inside source: true *** True Line Result 6640,1700,6880,1640 ** Processing line: ~ 6320,1780,6640,1700~ - Inside source: true *** True Line Result 6320,1780,6640,1700 ** Processing line: ~ 5840,2040,5900,1840~ - Inside source: true *** True Line Result 5840,2040,5900,1840 ** Processing line: ~ 5840,2040,5840,2220~ - Inside source: true *** True Line Result 5840,2040,5840,2220 ** Processing line: ~ 5840,2220,5840,2320~ - Inside source: true *** True Line Result 5840,2220,5840,2320 ** Processing line: ~ 5840,2460,5840,2320~ - Inside source: true *** True Line Result 5840,2460,5840,2320 ** Processing line: ~ 5840,2560,5840,2460~ - Inside source: true *** True Line Result 5840,2560,5840,2460 ** Processing line: ~ 5840,2560,5960,2620~ - Inside source: true *** True Line Result 5840,2560,5960,2620 ** Processing line: ~ 5960,2620,6200,2620~ - Inside source: true *** True Line Result 5960,2620,6200,2620 ** Processing line: ~ 6200,2620,6380,2600~ - Inside source: true *** True Line Result 6200,2620,6380,2600 ** Processing line: ~ 6380,2600,6600,2580~ - Inside source: true *** True Line Result 6380,2600,6600,2580 ** Processing line: ~ 6600,2580,6800,2600~ - Inside source: true *** True Line Result 6600,2580,6800,2600 ** Processing line: ~ 6800,2600,7040,2580~ - Inside source: true *** True Line Result 6800,2600,7040,2580 ** Processing line: ~ 7040,2580,7280,2580~ - Inside source: true *** True Line Result 7040,2580,7280,2580 ** Processing line: ~ 7280,2580,7480,2560~ - Inside source: true *** True Line Result 7280,2580,7480,2560 ** Processing line: ~ 7760,2540,7980,2520~ - Inside source: true *** True Line Result 7760,2540,7980,2520 ** Processing line: ~ 7980,2520,8160,2500~ - Inside source: true *** True Line Result 7980,2520,8160,2500 ** Processing line: ~ 7480,2560,7760,2540~ - Inside source: true *** True Line Result 7480,2560,7760,2540 ** Processing line: ~ 8160,2500,8160,2420~ - Inside source: true *** True Line Result 8160,2500,8160,2420 ** Processing line: ~ 8160,2420,8160,2320~ - Inside source: true *** True Line Result 8160,2420,8160,2320 ** Processing line: ~ 8160,2180,8160,2320~ - Inside source: true *** True Line Result 8160,2180,8160,2320 ** Processing line: ~ 7980,2160,8160,2180~ - Inside source: true *** True Line Result 7980,2160,8160,2180 ** Processing line: ~ 7800,2180,7980,2160~ - Inside source: true *** True Line Result 7800,2180,7980,2160 ** Processing line: ~ 7600,2200,7800,2180~ - Inside source: true *** True Line Result 7600,2200,7800,2180 ** Processing line: ~ 7400,2200,7600,2200~ - Inside source: true *** True Line Result 7400,2200,7600,2200 ** Processing line: ~ 6960,2200,7200,2200~ - Inside source: true *** True Line Result 6960,2200,7200,2200 ** Processing line: ~ 7200,2200,7400,2200~ - Inside source: true *** True Line Result 7200,2200,7400,2200 ** Processing line: ~ 6720,2200,6960,2200~ - Inside source: true *** True Line Result 6720,2200,6960,2200 ** Processing line: ~ 6540,2180,6720,2200~ - Inside source: true *** True Line Result 6540,2180,6720,2200 ** Processing line: ~ 6320,2200,6540,2180~ - Inside source: true *** True Line Result 6320,2200,6540,2180 ** Processing line: ~ 6240,2160,6320,2200~ - Inside source: true *** True Line Result 6240,2160,6320,2200 ** Processing line: ~ 6240,2160,6240,2040~ - Inside source: true *** True Line Result 6240,2160,6240,2040 ** Processing line: ~ 6240,2040,6240,1940~ - Inside source: true *** True Line Result 6240,2040,6240,1940 ** Processing line: ~ 6240,1940,6440,1940~ - Inside source: true *** True Line Result 6240,1940,6440,1940 ** Processing line: ~ 6440,1940,6720,1940~ - Inside source: true *** True Line Result 6440,1940,6720,1940 ** Processing line: ~ 6720,1940,6940,1920~ - Inside source: true *** True Line Result 6720,1940,6940,1920 ** Processing line: ~ 7520,1920,7760,1920~ - Inside source: true *** True Line Result 7520,1920,7760,1920 ** Processing line: ~ 6940,1920,7280,1920~ - Inside source: true *** True Line Result 6940,1920,7280,1920 ** Processing line: ~ 7280,1920,7520,1920~ - Inside source: true *** True Line Result 7280,1920,7520,1920 ** Processing line: ~ 7760,1920,8100,1900~ - Inside source: true *** True Line Result 7760,1920,8100,1900 ** Processing line: ~ 8100,1900,8420,1900~ - Inside source: true *** True Line Result 8100,1900,8420,1900 ** Processing line: ~ 8420,1900,8460,1940~ - Inside source: true *** True Line Result 8420,1900,8460,1940 ** Processing line: ~ 8460,2120,8460,1940~ - Inside source: true *** True Line Result 8460,2120,8460,1940 ** Processing line: ~ 8460,2280,8460,2120~ - Inside source: true *** True Line Result 8460,2280,8460,2120 ** Processing line: ~ 8460,2280,8560,2420~ - Inside source: true *** True Line Result 8460,2280,8560,2420 ** Processing line: ~ 8560,2420,8660,2380~ - Inside source: true *** True Line Result 8560,2420,8660,2380 ** Processing line: ~ 8660,2380,8800,2340~ - Inside source: true *** True Line Result 8660,2380,8800,2340 ** Processing line: ~ 8800,2340,8840,2400~ - Inside source: true *** True Line Result 8800,2340,8840,2400 ** Processing line: ~ 8840,2520,8840,2400~ - Inside source: true *** True Line Result 8840,2520,8840,2400 ** Processing line: ~ 8800,2620,8840,2520~ - Inside source: true *** True Line Result 8800,2620,8840,2520 ** Processing line: ~ 8800,2740,8800,2620~ - Inside source: true *** True Line Result 8800,2740,8800,2620 ** Processing line: ~ 8800,2860,8800,2740~ - Inside source: true *** True Line Result 8800,2860,8800,2740 ** Processing line: ~ 8800,2940,8800,2860~ - Inside source: true *** True Line Result 8800,2940,8800,2860 ** Processing line: ~ 8760,2980,8800,2940~ - Inside source: true *** True Line Result 8760,2980,8800,2940 ** Processing line: ~ 8660,2980,8760,2980~ - Inside source: true *** True Line Result 8660,2980,8760,2980 ** Processing line: ~ 8620,2960,8660,2980~ - Inside source: true *** True Line Result 8620,2960,8660,2980 ** Processing line: ~ 8560,2880,8620,2960~ - Inside source: true *** True Line Result 8560,2880,8620,2960 ** Processing line: ~ 8560,2880,8560,2780~ - Inside source: true *** True Line Result 8560,2880,8560,2780 ** Processing line: ~ 8500,2740,8560,2780~ - Inside source: true *** True Line Result 8500,2740,8560,2780 ** Processing line: ~ 8420,2760,8500,2740~ - Inside source: true *** True Line Result 8420,2760,8500,2740 ** Processing line: ~ 8420,2840,8420,2760~ - Inside source: true *** True Line Result 8420,2840,8420,2760 ** Processing line: ~ 8420,2840,8420,2940~ - Inside source: true *** True Line Result 8420,2840,8420,2940 ** Processing line: ~ 8420,3040,8420,2940~ - Inside source: true *** True Line Result 8420,3040,8420,2940 ** Processing line: ~ 8420,3160,8420,3040~ - Inside source: true *** True Line Result 8420,3160,8420,3040 ** Processing line: ~ 8420,3280,8420,3380~ - Inside source: true *** True Line Result 8420,3280,8420,3380 ** Processing line: ~ 8420,3280,8420,3160~ - Inside source: true *** True Line Result 8420,3280,8420,3160 ** Processing line: ~ 8420,3380,8620,3460~ - Inside source: true *** True Line Result 8420,3380,8620,3460 ** Processing line: ~ 8620,3460,8760,3460~ - Inside source: true *** True Line Result 8620,3460,8760,3460 ** Processing line: ~ 8760,3460,8840,3400~ - Inside source: true *** True Line Result 8760,3460,8840,3400 ** Processing line: ~ 8840,3400,8960,3400~ - Inside source: true *** True Line Result 8840,3400,8960,3400 ** Processing line: ~ 8960,3400,9000,3500~ - Inside source: true *** True Line Result 8960,3400,9000,3500 ** Processing line: ~ 9000,3700,9000,3500~ - Inside source: true *** True Line Result 9000,3700,9000,3500 ** Processing line: ~ 9000,3900,9000,3700~ - Inside source: true *** True Line Result 9000,3900,9000,3700 ** Processing line: ~ 9000,4080,9000,3900~ - Inside source: true *** True Line Result 9000,4080,9000,3900 ** Processing line: ~ 9000,4280,9000,4080~ - Inside source: true *** True Line Result 9000,4280,9000,4080 ** Processing line: ~ 9000,4500,9000,4280~ - Inside source: true *** True Line Result 9000,4500,9000,4280 ** Processing line: ~ 9000,4620,9000,4500~ - Inside source: true *** True Line Result 9000,4620,9000,4500 ** Processing line: ~ 9000,4780,9000,4620~ - Inside source: true *** True Line Result 9000,4780,9000,4620 ** Processing line: ~ 9000,4780,9000,4960~ - Inside source: true *** True Line Result 9000,4780,9000,4960 ** Processing line: ~ 9000,5120,9000,4960~ - Inside source: true *** True Line Result 9000,5120,9000,4960 ** Processing line: ~ 9000,5120,9000,5300~ - Inside source: true *** True Line Result 9000,5120,9000,5300 ** Processing line: ~ 8960,5460,9000,5300~ - Inside source: true *** True Line Result 8960,5460,9000,5300 ** Processing line: ~ 8920,5620,8960,5460~ - Inside source: true *** True Line Result 8920,5620,8960,5460 ** Processing line: ~ 8920,5620,8920,5800~ - Inside source: true *** True Line Result 8920,5620,8920,5800 ** Processing line: ~ 8920,5800,8920,5960~ - Inside source: true *** True Line Result 8920,5800,8920,5960 ** Processing line: ~ 8920,5960,8920,6120~ - Inside source: true *** True Line Result 8920,5960,8920,6120 ** Processing line: ~ 8920,6120,8960,6300~ - Inside source: true *** True Line Result 8920,6120,8960,6300 ** Processing line: ~ 8960,6300,8960,6480~ - Inside source: true *** True Line Result 8960,6300,8960,6480 ** Processing line: ~ 8960,6660,8960,6480~ - Inside source: true *** True Line Result 8960,6660,8960,6480 ** Processing line: ~ 8960,6860,8960,6660~ - Inside source: true *** True Line Result 8960,6860,8960,6660 ** Processing line: ~ 8960,7040,8960,6860~ - Inside source: true *** True Line Result 8960,7040,8960,6860 ** Processing line: ~ 8920,7420,8920,7220~ - Inside source: true *** True Line Result 8920,7420,8920,7220 ** Processing line: ~ 8920,7420,8960,7620~ - Inside source: true *** True Line Result 8920,7420,8960,7620 ** Processing line: ~ 8960,7620,8960,7800~ - Inside source: true *** True Line Result 8960,7620,8960,7800 ** Processing line: ~ 8960,7800,8960,8000~ - Inside source: true *** True Line Result 8960,7800,8960,8000 ** Processing line: ~ 8960,8000,8960,8180~ - Inside source: true *** True Line Result 8960,8000,8960,8180 ** Processing line: ~ 8960,8180,8960,8380~ - Inside source: true *** True Line Result 8960,8180,8960,8380 ** Processing line: ~ 8960,8580,8960,8380~ - Inside source: true *** True Line Result 8960,8580,8960,8380 ** Processing line: ~ 8920,8800,8960,8580~ - Inside source: true *** True Line Result 8920,8800,8960,8580 ** Processing line: ~ 8880,9000,8920,8800~ - Inside source: true *** True Line Result 8880,9000,8920,8800 ** Processing line: ~ 8840,9180,8880,9000~ - Inside source: true *** True Line Result 8840,9180,8880,9000 ** Processing line: ~ 8800,9220,8840,9180~ - Inside source: true *** True Line Result 8800,9220,8840,9180 ** Processing line: ~ 8800,9220,8840,9340~ - Inside source: true *** True Line Result 8800,9220,8840,9340 ** Processing line: ~ 8760,9380,8840,9340~ - Inside source: true *** True Line Result 8760,9380,8840,9340 ** Processing line: ~ 8560,9340,8760,9380~ - Inside source: true *** True Line Result 8560,9340,8760,9380 ** Processing line: ~ 8360,9360,8560,9340~ - Inside source: true *** True Line Result 8360,9360,8560,9340 ** Processing line: ~ 8160,9360,8360,9360~ - Inside source: true *** True Line Result 8160,9360,8360,9360 ** Processing line: ~ 8040,9340,8160,9360~ - Inside source: true *** True Line Result 8040,9340,8160,9360 ** Processing line: ~ 7860,9360,8040,9340~ - Inside source: true *** True Line Result 7860,9360,8040,9340 ** Processing line: ~ 7680,9360,7860,9360~ - Inside source: true *** True Line Result 7680,9360,7860,9360 ** Processing line: ~ 7520,9360,7680,9360~ - Inside source: true *** True Line Result 7520,9360,7680,9360 ** Processing line: ~ 7420,9260,7520,9360~ - Inside source: true *** True Line Result 7420,9260,7520,9360 ** Processing line: ~ 7400,9080,7420,9260~ - Inside source: true *** True Line Result 7400,9080,7420,9260 ** Processing line: ~ 7400,9080,7420,8860~ - Inside source: true *** True Line Result 7400,9080,7420,8860 ** Processing line: ~ 7420,8860,7440,8720~ - Inside source: true *** True Line Result 7420,8860,7440,8720 ** Processing line: ~ 7440,8720,7480,8660~ - Inside source: true *** True Line Result 7440,8720,7480,8660 ** Processing line: ~ 7480,8660,7520,8540~ - Inside source: true *** True Line Result 7480,8660,7520,8540 ** Processing line: ~ 7520,8540,7600,8460~ - Inside source: true *** True Line Result 7520,8540,7600,8460 ** Processing line: ~ 7600,8460,7800,8480~ - Inside source: true *** True Line Result 7600,8460,7800,8480 ** Processing line: ~ 7800,8480,8040,8480~ - Inside source: true *** True Line Result 7800,8480,8040,8480 ** Processing line: ~ 8040,8480,8280,8480~ - Inside source: true *** True Line Result 8040,8480,8280,8480 ** Processing line: ~ 8280,8480,8500,8460~ - Inside source: true *** True Line Result 8280,8480,8500,8460 ** Processing line: ~ 8500,8460,8620,8440~ - Inside source: true *** True Line Result 8500,8460,8620,8440 ** Processing line: ~ 8620,8440,8660,8340~ - Inside source: true *** True Line Result 8620,8440,8660,8340 ** Processing line: ~ 8660,8340,8660,8220~ - Inside source: true *** True Line Result 8660,8340,8660,8220 ** Processing line: ~ 8660,8220,8700,8080~ - Inside source: true *** True Line Result 8660,8220,8700,8080 ** Processing line: ~ 8700,8080,8700,7920~ - Inside source: true *** True Line Result 8700,8080,8700,7920 ** Processing line: ~ 8700,7920,8700,7760~ - Inside source: true *** True Line Result 8700,7920,8700,7760 ** Processing line: ~ 8700,7760,8700,7620~ - Inside source: true *** True Line Result 8700,7760,8700,7620 ** Processing line: ~ 8700,7480,8700,7620~ - Inside source: true *** True Line Result 8700,7480,8700,7620 ** Processing line: ~ 8700,7480,8700,7320~ - Inside source: true *** True Line Result 8700,7480,8700,7320 ** Processing line: ~ 8700,7160,8700,7320~ - Inside source: true *** True Line Result 8700,7160,8700,7320 ** Processing line: ~ 8920,7220,8960,7040~ - Inside source: true *** True Line Result 8920,7220,8960,7040 ** Processing line: ~ 8660,7040,8700,7160~ - Inside source: true *** True Line Result 8660,7040,8700,7160 ** Processing line: ~ 8660,7040,8700,6880~ - Inside source: true *** True Line Result 8660,7040,8700,6880 ** Processing line: ~ 8660,6700,8700,6880~ - Inside source: true *** True Line Result 8660,6700,8700,6880 ** Processing line: ~ 8660,6700,8700,6580~ - Inside source: true *** True Line Result 8660,6700,8700,6580 ** Processing line: ~ 8700,6460,8700,6580~ - Inside source: true *** True Line Result 8700,6460,8700,6580 ** Processing line: ~ 8700,6460,8700,6320~ - Inside source: true *** True Line Result 8700,6460,8700,6320 ** Processing line: ~ 8700,6160,8700,6320~ - Inside source: true *** True Line Result 8700,6160,8700,6320 ** Processing line: ~ 8700,6160,8760,6020~ - Inside source: true *** True Line Result 8700,6160,8760,6020 ** Processing line: ~ 8760,6020,8760,5860~ - Inside source: true *** True Line Result 8760,6020,8760,5860 ** Processing line: ~ 8760,5860,8760,5700~ - Inside source: true *** True Line Result 8760,5860,8760,5700 ** Processing line: ~ 8760,5700,8760,5540~ - Inside source: true *** True Line Result 8760,5700,8760,5540 ** Processing line: ~ 8760,5540,8760,5360~ - Inside source: true *** True Line Result 8760,5540,8760,5360 ** Processing line: ~ 8760,5360,8760,5180~ - Inside source: true *** True Line Result 8760,5360,8760,5180 ** Processing line: ~ 8760,5000,8760,5180~ - Inside source: true *** True Line Result 8760,5000,8760,5180 ** Processing line: ~ 8700,4820,8760,5000~ - Inside source: true *** True Line Result 8700,4820,8760,5000 ** Processing line: ~ 8560,4740,8700,4820~ - Inside source: true *** True Line Result 8560,4740,8700,4820 ** Processing line: ~ 8420,4700,8560,4740~ - Inside source: true *** True Line Result 8420,4700,8560,4740 ** Processing line: ~ 8280,4700,8420,4700~ - Inside source: true *** True Line Result 8280,4700,8420,4700 ** Processing line: ~ 8100,4700,8280,4700~ - Inside source: true *** True Line Result 8100,4700,8280,4700 ** Processing line: ~ 7980,4700,8100,4700~ - Inside source: true *** True Line Result 7980,4700,8100,4700 ** Processing line: ~ 7820,4740,7980,4700~ - Inside source: true *** True Line Result 7820,4740,7980,4700 ** Processing line: ~ 7800,4920,7820,4740~ - Inside source: true *** True Line Result 7800,4920,7820,4740 ** Processing line: ~ 7800,4920,7900,4960~ - Inside source: true *** True Line Result 7800,4920,7900,4960 ** Processing line: ~ 7900,4960,8060,4980~ - Inside source: true *** True Line Result 7900,4960,8060,4980 ** Processing line: ~ 8060,4980,8220,5000~ - Inside source: true *** True Line Result 8060,4980,8220,5000 ** Processing line: ~ 8220,5000,8420,5040~ - Inside source: true *** True Line Result 8220,5000,8420,5040 ** Processing line: ~ 8420,5040,8460,5120~ - Inside source: true *** True Line Result 8420,5040,8460,5120 ** Processing line: ~ 8460,5180,8460,5120~ - Inside source: true *** True Line Result 8460,5180,8460,5120 ** Processing line: ~ 8360,5200,8460,5180~ - Inside source: true *** True Line Result 8360,5200,8460,5180 ** Processing line: ~ 8360,5280,8360,5200~ - Inside source: true *** True Line Result 8360,5280,8360,5200 ** Processing line: ~ 8160,5300,8360,5280~ - Inside source: true *** True Line Result 8160,5300,8360,5280 ** Processing line: ~ 8040,5260,8160,5300~ - Inside source: true *** True Line Result 8040,5260,8160,5300 ** Processing line: ~ 7860,5220,8040,5260~ - Inside source: true *** True Line Result 7860,5220,8040,5260 ** Processing line: ~ 7720,5160,7860,5220~ - Inside source: true *** True Line Result 7720,5160,7860,5220 ** Processing line: ~ 7640,5120,7720,5160~ - Inside source: true *** True Line Result 7640,5120,7720,5160 ** Processing line: ~ 7480,5120,7640,5120~ - Inside source: true *** True Line Result 7480,5120,7640,5120 ** Processing line: ~ 7240,5120,7480,5120~ - Inside source: true *** True Line Result 7240,5120,7480,5120 ** Processing line: ~ 7000,5120,7240,5120~ - Inside source: true *** True Line Result 7000,5120,7240,5120 ** Processing line: ~ 6800,5160,7000,5120~ - Inside source: true *** True Line Result 6800,5160,7000,5120 ** Processing line: ~ 6640,5220,6800,5160~ - Inside source: true *** True Line Result 6640,5220,6800,5160 ** Processing line: ~ 6600,5360,6640,5220~ - Inside source: true *** True Line Result 6600,5360,6640,5220 ** Processing line: ~ 6600,5460,6600,5360~ - Inside source: true *** True Line Result 6600,5460,6600,5360 ** Processing line: ~ 6480,5520,6600,5460~ - Inside source: true *** True Line Result 6480,5520,6600,5460 ** Processing line: ~ 6240,5540,6480,5520~ - Inside source: true *** True Line Result 6240,5540,6480,5520 ** Processing line: ~ 5980,5540,6240,5540~ - Inside source: true *** True Line Result 5980,5540,6240,5540 ** Processing line: ~ 5740,5540,5980,5540~ - Inside source: true *** True Line Result 5740,5540,5980,5540 ** Processing line: ~ 5500,5520,5740,5540~ - Inside source: true *** True Line Result 5500,5520,5740,5540 ** Processing line: ~ 5400,5520,5500,5520~ - Inside source: true *** True Line Result 5400,5520,5500,5520 ** Processing line: ~ 5280,5540,5400,5520~ - Inside source: true *** True Line Result 5280,5540,5400,5520 ** Processing line: ~ 5080,5540,5280,5540~ - Inside source: true *** True Line Result 5080,5540,5280,5540 ** Processing line: ~ 4940,5540,5080,5540~ - Inside source: true *** True Line Result 4940,5540,5080,5540 ** Processing line: ~ 4760,5540,4940,5540~ - Inside source: true *** True Line Result 4760,5540,4940,5540 ** Processing line: ~ 4600,5540,4760,5540~ - Inside source: true *** True Line Result 4600,5540,4760,5540 ** Processing line: ~ 4440,5560,4600,5540~ - Inside source: true *** True Line Result 4440,5560,4600,5540 ** Processing line: ~ 4040,5580,4120,5520~ - Inside source: true *** True Line Result 4040,5580,4120,5520 ** Processing line: ~ 4260,5540,4440,5560~ - Inside source: true *** True Line Result 4260,5540,4440,5560 ** Processing line: ~ 4120,5520,4260,5540~ - Inside source: true *** True Line Result 4120,5520,4260,5540 ** Processing line: ~ 4020,5720,4040,5580~ - Inside source: true *** True Line Result 4020,5720,4040,5580 ** Processing line: ~ 4020,5840,4020,5720~ - Inside source: true *** True Line Result 4020,5840,4020,5720 ** Processing line: ~ 4020,5840,4080,5940~ - Inside source: true *** True Line Result 4020,5840,4080,5940 ** Processing line: ~ 4080,5940,4120,6040~ - Inside source: true *** True Line Result 4080,5940,4120,6040 ** Processing line: ~ 4120,6040,4200,6080~ - Inside source: true *** True Line Result 4120,6040,4200,6080 ** Processing line: ~ 4200,6080,4340,6080~ - Inside source: true *** True Line Result 4200,6080,4340,6080 ** Processing line: ~ 4340,6080,4500,6060~ - Inside source: true *** True Line Result 4340,6080,4500,6060 ** Processing line: ~ 4500,6060,4700,6060~ - Inside source: true *** True Line Result 4500,6060,4700,6060 ** Processing line: ~ 4700,6060,4880,6060~ - Inside source: true *** True Line Result 4700,6060,4880,6060 ** Processing line: ~ 4880,6060,5080,6060~ - Inside source: true *** True Line Result 4880,6060,5080,6060 ** Processing line: ~ 5080,6060,5280,6080~ - Inside source: true *** True Line Result 5080,6060,5280,6080 ** Processing line: ~ 5280,6080,5440,6100~ - Inside source: true *** True Line Result 5280,6080,5440,6100 ** Processing line: ~ 5440,6100,5660,6100~ - Inside source: true *** True Line Result 5440,6100,5660,6100 ** Processing line: ~ 5660,6100,5900,6080~ - Inside source: true *** True Line Result 5660,6100,5900,6080 ** Processing line: ~ 5900,6080,6120,6080~ - Inside source: true *** True Line Result 5900,6080,6120,6080 ** Processing line: ~ 6120,6080,6360,6080~ - Inside source: true *** True Line Result 6120,6080,6360,6080 ** Processing line: ~ 6360,6080,6480,6100~ - Inside source: true *** True Line Result 6360,6080,6480,6100 ** Processing line: ~ 6480,6100,6540,6060~ - Inside source: true *** True Line Result 6480,6100,6540,6060 ** Processing line: ~ 6540,6060,6720,6060~ - Inside source: true *** True Line Result 6540,6060,6720,6060 ** Processing line: ~ 6720,6060,6940,6060~ - Inside source: true *** True Line Result 6720,6060,6940,6060 ** Processing line: ~ 6940,6060,7140,6060~ - Inside source: true *** True Line Result 6940,6060,7140,6060 ** Processing line: ~ 7400,6060,7600,6060~ - Inside source: true *** True Line Result 7400,6060,7600,6060 ** Processing line: ~ 7140,6060,7400,6060~ - Inside source: true *** True Line Result 7140,6060,7400,6060 ** Processing line: ~ 7600,6060,7800,6060~ - Inside source: true *** True Line Result 7600,6060,7800,6060 ** Processing line: ~ 7800,6060,7860,6080~ - Inside source: true *** True Line Result 7800,6060,7860,6080 ** Processing line: ~ 7860,6080,8060,6080~ - Inside source: true *** True Line Result 7860,6080,8060,6080 ** Processing line: ~ 8060,6080,8220,6080~ - Inside source: true *** True Line Result 8060,6080,8220,6080 ** Processing line: ~ 8220,6080,8320,6140~ - Inside source: true *** True Line Result 8220,6080,8320,6140 ** Processing line: ~ 8320,6140,8360,6300~ - Inside source: true *** True Line Result 8320,6140,8360,6300 ** Processing line: ~ 8320,6460,8360,6300~ - Inside source: true *** True Line Result 8320,6460,8360,6300 ** Processing line: ~ 8320,6620,8320,6460~ - Inside source: true *** True Line Result 8320,6620,8320,6460 ** Processing line: ~ 8320,6800,8320,6620~ - Inside source: true *** True Line Result 8320,6800,8320,6620 ** Processing line: ~ 8320,6960,8320,6800~ - Inside source: true *** True Line Result 8320,6960,8320,6800 ** Processing line: ~ 8320,6960,8360,7120~ - Inside source: true *** True Line Result 8320,6960,8360,7120 ** Processing line: ~ 8320,7280,8360,7120~ - Inside source: true *** True Line Result 8320,7280,8360,7120 ** Processing line: ~ 8320,7440,8320,7280~ - Inside source: true *** True Line Result 8320,7440,8320,7280 ** Processing line: ~ 8320,7600,8320,7440~ - Inside source: true *** True Line Result 8320,7600,8320,7440 ** Processing line: ~ 8100,7580,8220,7600~ - Inside source: true *** True Line Result 8100,7580,8220,7600 ** Processing line: ~ 8220,7600,8320,7600~ - Inside source: true *** True Line Result 8220,7600,8320,7600 ** Processing line: ~ 7900,7560,8100,7580~ - Inside source: true *** True Line Result 7900,7560,8100,7580 ** Processing line: ~ 7680,7560,7900,7560~ - Inside source: true *** True Line Result 7680,7560,7900,7560 ** Processing line: ~ 7480,7580,7680,7560~ - Inside source: true *** True Line Result 7480,7580,7680,7560 ** Processing line: ~ 7280,7580,7480,7580~ - Inside source: true *** True Line Result 7280,7580,7480,7580 ** Processing line: ~ 7080,7580,7280,7580~ - Inside source: true *** True Line Result 7080,7580,7280,7580 ** Processing line: ~ 7000,7600,7080,7580~ - Inside source: true *** True Line Result 7000,7600,7080,7580 ** Processing line: ~ 6880,7600,7000,7600~ - Inside source: true *** True Line Result 6880,7600,7000,7600 ** Processing line: ~ 6800,7580,6880,7600~ - Inside source: true *** True Line Result 6800,7580,6880,7600 ** Processing line: ~ 6640,7580,6800,7580~ - Inside source: true *** True Line Result 6640,7580,6800,7580 ** Processing line: ~ 6540,7580,6640,7580~ - Inside source: true *** True Line Result 6540,7580,6640,7580 ** Processing line: ~ 6380,7600,6540,7580~ - Inside source: true *** True Line Result 6380,7600,6540,7580 ** Processing line: ~ 6280,7620,6380,7600~ - Inside source: true *** True Line Result 6280,7620,6380,7600 ** Processing line: ~ 6240,7700,6280,7620~ - Inside source: true *** True Line Result 6240,7700,6280,7620 ** Processing line: ~ 6240,7700,6240,7800~ - Inside source: true *** True Line Result 6240,7700,6240,7800 ** Processing line: ~ 6240,7840,6240,7800~ - Inside source: true *** True Line Result 6240,7840,6240,7800 ** Processing line: ~ 6080,7840,6240,7840~ - Inside source: true *** True Line Result 6080,7840,6240,7840 ** Processing line: ~ 5960,7820,6080,7840~ - Inside source: true *** True Line Result 5960,7820,6080,7840 ** Processing line: ~ 5660,7840,5800,7840~ - Inside source: true *** True Line Result 5660,7840,5800,7840 ** Processing line: ~ 5500,7800,5660,7840~ - Inside source: true *** True Line Result 5500,7800,5660,7840 ** Processing line: ~ 5440,7700,5500,7800~ - Inside source: true *** True Line Result 5440,7700,5500,7800 ** Processing line: ~ 5800,7840,5960,7820~ - Inside source: true *** True Line Result 5800,7840,5960,7820 ** Processing line: ~ 5440,7540,5440,7700~ - Inside source: true *** True Line Result 5440,7540,5440,7700 ** Processing line: ~ 5440,7440,5440,7540~ - Inside source: true *** True Line Result 5440,7440,5440,7540 ** Processing line: ~ 5440,7320,5440,7440~ - Inside source: true *** True Line Result 5440,7320,5440,7440 ** Processing line: ~ 5400,7320,5440,7320~ - Inside source: true *** True Line Result 5400,7320,5440,7320 ** Processing line: ~ 5340,7400,5400,7320~ - Inside source: true *** True Line Result 5340,7400,5400,7320 ** Processing line: ~ 5340,7400,5340,7500~ - Inside source: true *** True Line Result 5340,7400,5340,7500 ** Processing line: ~ 5340,7600,5340,7500~ - Inside source: true *** True Line Result 5340,7600,5340,7500 ** Processing line: ~ 5340,7600,5340,7720~ - Inside source: true *** True Line Result 5340,7600,5340,7720 ** Processing line: ~ 5340,7720,5340,7860~ - Inside source: true *** True Line Result 5340,7720,5340,7860 ** Processing line: ~ 5340,7860,5340,7960~ - Inside source: true *** True Line Result 5340,7860,5340,7960 ** Processing line: ~ 5340,7960,5440,8020~ - Inside source: true *** True Line Result 5340,7960,5440,8020 ** Processing line: ~ 5440,8020,5560,8020~ - Inside source: true *** True Line Result 5440,8020,5560,8020 ** Processing line: ~ 5560,8020,5720,8040~ - Inside source: true *** True Line Result 5560,8020,5720,8040 ** Processing line: ~ 5720,8040,5900,8060~ - Inside source: true *** True Line Result 5720,8040,5900,8060 ** Processing line: ~ 5900,8060,6080,8060~ - Inside source: true *** True Line Result 5900,8060,6080,8060 ** Processing line: ~ 6080,8060,6240,8060~ - Inside source: true *** True Line Result 6080,8060,6240,8060 ** Processing line: ~ 6720,8040,6840,8060~ - Inside source: true *** True Line Result 6720,8040,6840,8060 ** Processing line: ~ 6240,8060,6480,8040~ - Inside source: true *** True Line Result 6240,8060,6480,8040 ** Processing line: ~ 6480,8040,6720,8040~ - Inside source: true *** True Line Result 6480,8040,6720,8040 ** Processing line: ~ 6840,8060,6940,8060~ - Inside source: true *** True Line Result 6840,8060,6940,8060 ** Processing line: ~ 6940,8060,7080,8120~ - Inside source: true *** True Line Result 6940,8060,7080,8120 ** Processing line: ~ 7080,8120,7140,8180~ - Inside source: true *** True Line Result 7080,8120,7140,8180 ** Processing line: ~ 7140,8460,7140,8320~ - Inside source: true *** True Line Result 7140,8460,7140,8320 ** Processing line: ~ 7140,8620,7140,8460~ - Inside source: true *** True Line Result 7140,8620,7140,8460 ** Processing line: ~ 7140,8620,7140,8740~ - Inside source: true *** True Line Result 7140,8620,7140,8740 ** Processing line: ~ 7140,8860,7140,8740~ - Inside source: true *** True Line Result 7140,8860,7140,8740 ** Processing line: ~ 7140,8960,7140,8860~ - Inside source: true *** True Line Result 7140,8960,7140,8860 ** Processing line: ~ 7140,8960,7200,9080~ - Inside source: true *** True Line Result 7140,8960,7200,9080 ** Processing line: ~ 7140,9200,7200,9080~ - Inside source: true *** True Line Result 7140,9200,7200,9080 ** Processing line: ~ 7140,9200,7200,9320~ - Inside source: true *** True Line Result 7140,9200,7200,9320 ** Processing line: ~ 7200,9320,7200,9460~ - Inside source: true *** True Line Result 7200,9320,7200,9460 ** Processing line: ~ 7200,9760,7200,9900~ - Inside source: true *** True Line Result 7200,9760,7200,9900 ** Processing line: ~ 7200,9620,7200,9460~ - Inside source: true *** True Line Result 7200,9620,7200,9460 ** Processing line: ~ 7200,9620,7200,9760~ - Inside source: true *** True Line Result 7200,9620,7200,9760 ** Processing line: ~ 7200,9900,7200,10060~ - Inside source: true *** True Line Result 7200,9900,7200,10060 ** Processing line: ~ 7200,10220,7200,10060~ - Inside source: true *** True Line Result 7200,10220,7200,10060 ** Processing line: ~ 7200,10360,7200,10220~ - Inside source: true *** True Line Result 7200,10360,7200,10220 ** Processing line: ~ 7140,10400,7200,10360~ - Inside source: true *** True Line Result 7140,10400,7200,10360 ** Processing line: ~ 6880,10400,7140,10400~ - Inside source: true *** True Line Result 6880,10400,7140,10400 ** Processing line: ~ 6640,10360,6880,10400~ - Inside source: true *** True Line Result 6640,10360,6880,10400 ** Processing line: ~ 6420,10360,6640,10360~ - Inside source: true *** True Line Result 6420,10360,6640,10360 ** Processing line: ~ 6160,10380,6420,10360~ - Inside source: true *** True Line Result 6160,10380,6420,10360 ** Processing line: ~ 5940,10340,6160,10380~ - Inside source: true *** True Line Result 5940,10340,6160,10380 ** Processing line: ~ 5720,10320,5940,10340~ - Inside source: true *** True Line Result 5720,10320,5940,10340 ** Processing line: ~ 5500,10340,5720,10320~ - Inside source: true *** True Line Result 5500,10340,5720,10320 ** Processing line: ~ 5280,10300,5500,10340~ - Inside source: true *** True Line Result 5280,10300,5500,10340 ** Processing line: ~ 5080,10300,5280,10300~ - Inside source: true *** True Line Result 5080,10300,5280,10300 ** Processing line: ~ 4840,10280,5080,10300~ - Inside source: true *** True Line Result 4840,10280,5080,10300 ** Processing line: ~ 4700,10280,4840,10280~ - Inside source: true *** True Line Result 4700,10280,4840,10280 ** Processing line: ~ 4540,10280,4700,10280~ - Inside source: true *** True Line Result 4540,10280,4700,10280 ** Processing line: ~ 4360,10280,4540,10280~ - Inside source: true *** True Line Result 4360,10280,4540,10280 ** Processing line: ~ 4200,10300,4360,10280~ - Inside source: true *** True Line Result 4200,10300,4360,10280 ** Processing line: ~ 4040,10380,4200,10300~ - Inside source: true *** True Line Result 4040,10380,4200,10300 ** Processing line: ~ 4020,10500,4040,10380~ - Inside source: true *** True Line Result 4020,10500,4040,10380 ** Processing line: ~ 3980,10640,4020,10500~ - Inside source: true *** True Line Result 3980,10640,4020,10500 ** Processing line: ~ 3980,10640,3980,10760~ - Inside source: true *** True Line Result 3980,10640,3980,10760 ** Processing line: ~ 3980,10760,4020,10920~ - Inside source: true *** True Line Result 3980,10760,4020,10920 ** Processing line: ~ 4020,10920,4080,11000~ - Inside source: true *** True Line Result 4020,10920,4080,11000 ** Processing line: ~ 4080,11000,4340,11020~ - Inside source: true *** True Line Result 4080,11000,4340,11020 ** Processing line: ~ 4340,11020,4600,11060~ - Inside source: true *** True Line Result 4340,11020,4600,11060 ** Processing line: ~ 4600,11060,4840,11040~ - Inside source: true *** True Line Result 4600,11060,4840,11040 ** Processing line: ~ 4840,11040,4880,10960~ - Inside source: true *** True Line Result 4840,11040,4880,10960 ** Processing line: ~ 4880,10740,4880,10960~ - Inside source: true *** True Line Result 4880,10740,4880,10960 ** Processing line: ~ 4880,10740,4880,10600~ - Inside source: true *** True Line Result 4880,10740,4880,10600 ** Processing line: ~ 4880,10600,5080,10560~ - Inside source: true *** True Line Result 4880,10600,5080,10560 ** Processing line: ~ 5080,10560,5340,10620~ - Inside source: true *** True Line Result 5080,10560,5340,10620 ** Processing line: ~ 5340,10620,5660,10620~ - Inside source: true *** True Line Result 5340,10620,5660,10620 ** Processing line: ~ 5660,10620,6040,10600~ - Inside source: true *** True Line Result 5660,10620,6040,10600 ** Processing line: ~ 6040,10600,6120,10620~ - Inside source: true *** True Line Result 6040,10600,6120,10620 ** Processing line: ~ 6120,10620,6240,10720~ - Inside source: true *** True Line Result 6120,10620,6240,10720 ** Processing line: ~ 6240,10720,6420,10740~ - Inside source: true *** True Line Result 6240,10720,6420,10740 ** Processing line: ~ 6420,10740,6640,10760~ - Inside source: true *** True Line Result 6420,10740,6640,10760 ** Processing line: ~ 6640,10760,6880,10780~ - Inside source: true *** True Line Result 6640,10760,6880,10780 ** Processing line: ~ 7140,10780,7400,10780~ - Inside source: true *** True Line Result 7140,10780,7400,10780 ** Processing line: ~ 6880,10780,7140,10780~ - Inside source: true *** True Line Result 6880,10780,7140,10780 ** Processing line: ~ 7400,10780,7680,10780~ - Inside source: true *** True Line Result 7400,10780,7680,10780 ** Processing line: ~ 7680,10780,8100,10760~ - Inside source: true *** True Line Result 7680,10780,8100,10760 ** Processing line: ~ 8100,10760,8460,10740~ - Inside source: true *** True Line Result 8100,10760,8460,10740 ** Processing line: ~ 8460,10740,8700,10760~ - Inside source: true *** True Line Result 8460,10740,8700,10760 ** Processing line: ~ 8800,10840,8800,10980~ - Inside source: true *** True Line Result 8800,10840,8800,10980 ** Processing line: ~ 8700,10760,8800,10840~ - Inside source: true *** True Line Result 8700,10760,8800,10840 ** Processing line: ~ 8760,11200,8800,10980~ - Inside source: true *** True Line Result 8760,11200,8800,10980 ** Processing line: ~ 8760,11200,8760,11380~ - Inside source: true *** True Line Result 8760,11200,8760,11380 ** Processing line: ~ 8760,11380,8800,11560~ - Inside source: true *** True Line Result 8760,11380,8800,11560 ** Processing line: ~ 8760,11680,8800,11560~ - Inside source: true *** True Line Result 8760,11680,8800,11560 ** Processing line: ~ 8760,11760,8760,11680~ - Inside source: true *** True Line Result 8760,11760,8760,11680 ** Processing line: ~ 8760,11760,8760,11920~ - Inside source: true *** True Line Result 8760,11760,8760,11920 ** Processing line: ~ 8760,11920,8800,12080~ - Inside source: true *** True Line Result 8760,11920,8800,12080 ** Processing line: ~ 8800,12200,8800,12080~ - Inside source: true *** True Line Result 8800,12200,8800,12080 ** Processing line: ~ 8700,12240,8800,12200~ - Inside source: true *** True Line Result 8700,12240,8800,12200 ** Processing line: ~ 8560,12220,8700,12240~ - Inside source: true *** True Line Result 8560,12220,8700,12240 ** Processing line: ~ 8360,12220,8560,12220~ - Inside source: true *** True Line Result 8360,12220,8560,12220 ** Processing line: ~ 8160,12240,8360,12220~ - Inside source: true *** True Line Result 8160,12240,8360,12220 ** Processing line: ~ 7720,12220,7980,12220~ - Inside source: true *** True Line Result 7720,12220,7980,12220 ** Processing line: ~ 7980,12220,8160,12240~ - Inside source: true *** True Line Result 7980,12220,8160,12240 ** Processing line: ~ 7400,12200,7720,12220~ - Inside source: true *** True Line Result 7400,12200,7720,12220 ** Processing line: ~ 7200,12180,7400,12200~ - Inside source: true *** True Line Result 7200,12180,7400,12200 ** Processing line: ~ 7000,12160,7200,12180~ - Inside source: true *** True Line Result 7000,12160,7200,12180 ** Processing line: ~ 6800,12160,7000,12160~ - Inside source: true *** True Line Result 6800,12160,7000,12160 ** Processing line: ~ 6280,12140,6380,12180~ - Inside source: true *** True Line Result 6280,12140,6380,12180 ** Processing line: ~ 6120,12180,6280,12140~ - Inside source: true *** True Line Result 6120,12180,6280,12140 ** Processing line: ~ 6540,12180,6800,12160~ - Inside source: true *** True Line Result 6540,12180,6800,12160 ** Processing line: ~ 6380,12180,6540,12180~ - Inside source: true *** True Line Result 6380,12180,6540,12180 ** Processing line: ~ 5900,12200,6120,12180~ - Inside source: true *** True Line Result 5900,12200,6120,12180 ** Processing line: ~ 5620,12180,5900,12200~ - Inside source: true *** True Line Result 5620,12180,5900,12200 ** Processing line: ~ 5340,12120,5620,12180~ - Inside source: true *** True Line Result 5340,12120,5620,12180 ** Processing line: ~ 5140,12100,5340,12120~ - Inside source: true *** True Line Result 5140,12100,5340,12120 ** Processing line: ~ 4980,12120,5140,12100~ - Inside source: true *** True Line Result 4980,12120,5140,12100 ** Processing line: ~ 4840,12120,4980,12120~ - Inside source: true *** True Line Result 4840,12120,4980,12120 ** Processing line: ~ 4700,12200,4840,12120~ - Inside source: true *** True Line Result 4700,12200,4840,12120 ** Processing line: ~ 4700,12380,4700,12200~ - Inside source: true *** True Line Result 4700,12380,4700,12200 ** Processing line: ~ 4740,12480,4940,12520~ - Inside source: true *** True Line Result 4740,12480,4940,12520 ** Processing line: ~ 4700,12380,4740,12480~ - Inside source: true *** True Line Result 4700,12380,4740,12480 ** Processing line: ~ 4940,12520,5160,12560~ - Inside source: true *** True Line Result 4940,12520,5160,12560 ** Processing line: ~ 5160,12560,5340,12600~ - Inside source: true *** True Line Result 5160,12560,5340,12600 ** Processing line: ~ 5340,12600,5400,12600~ - Inside source: true *** True Line Result 5340,12600,5400,12600 ** Processing line: ~ 5400,12600,5500,12600~ - Inside source: true *** True Line Result 5400,12600,5500,12600 ** Processing line: ~ 5500,12600,5620,12600~ - Inside source: true *** True Line Result 5500,12600,5620,12600 ** Processing line: ~ 5620,12600,5720,12560~ - Inside source: true *** True Line Result 5620,12600,5720,12560 ** Processing line: ~ 5720,12560,5800,12440~ - Inside source: true *** True Line Result 5720,12560,5800,12440 ** Processing line: ~ 5800,12440,5900,12380~ - Inside source: true *** True Line Result 5800,12440,5900,12380 ** Processing line: ~ 5900,12380,6120,12420~ - Inside source: true *** True Line Result 5900,12380,6120,12420 ** Processing line: ~ 6120,12420,6380,12440~ - Inside source: true *** True Line Result 6120,12420,6380,12440 ** Processing line: ~ 6380,12440,6600,12460~ - Inside source: true *** True Line Result 6380,12440,6600,12460 ** Processing line: ~ 6720,12460,6840,12520~ - Inside source: true *** True Line Result 6720,12460,6840,12520 ** Processing line: ~ 6840,12520,6960,12520~ - Inside source: true *** True Line Result 6840,12520,6960,12520 ** Processing line: ~ 6600,12460,6720,12460~ - Inside source: true *** True Line Result 6600,12460,6720,12460 ** Processing line: ~ 6960,12520,7040,12500~ - Inside source: true *** True Line Result 6960,12520,7040,12500 ** Processing line: ~ 7040,12500,7140,12440~ - Inside source: true *** True Line Result 7040,12500,7140,12440 ** Processing line: ~ 7200,12440,7360,12500~ - Inside source: true *** True Line Result 7200,12440,7360,12500 ** Processing line: ~ 7360,12500,7600,12560~ - Inside source: true *** True Line Result 7360,12500,7600,12560 ** Processing line: ~ 7600,12560,7860,12600~ - Inside source: true *** True Line Result 7600,12560,7860,12600 ** Processing line: ~ 7860,12600,8060,12500~ - Inside source: true *** True Line Result 7860,12600,8060,12500 ** Processing line: ~ 8100,12500,8200,12340~ - Inside source: true *** True Line Result 8100,12500,8200,12340 ** Processing line: ~ 8200,12340,8360,12360~ - Inside source: true *** True Line Result 8200,12340,8360,12360 ** Processing line: ~ 8360,12360,8560,12400~ - Inside source: true *** True Line Result 8360,12360,8560,12400 ** Processing line: ~ 8560,12400,8660,12420~ - Inside source: true *** True Line Result 8560,12400,8660,12420 ** Processing line: ~ 8660,12420,8840,12400~ - Inside source: true *** True Line Result 8660,12420,8840,12400 ** Processing line: ~ 8840,12400,9000,12360~ - Inside source: true *** True Line Result 8840,12400,9000,12360 ** Processing line: ~ 9000,12360,9000,12360~ - Inside source: true *** True Line Result 9000,12360,9000,12360 ** Processing line: ~ 2900,4400,2900,4280~ - Inside source: true *** True Line Result 2900,4400,2900,4280 ** Processing line: ~ 900,7320,1000,7220~ - Inside source: true *** True Line Result 900,7320,1000,7220 ** Processing line: ~ 2640,13040,2900,12920~ - Inside source: true *** True Line Result 2640,13040,2900,12920 ** Processing line: ~ 2900,12920,3160,12840~ - Inside source: true *** True Line Result 2900,12920,3160,12840 ** Processing line: ~ 3480,12760,3780,12620~ - Inside source: true *** True Line Result 3480,12760,3780,12620 ** Processing line: ~ 3780,12620,4020,12460~ - Inside source: true *** True Line Result 3780,12620,4020,12460 ** Processing line: ~ 4300,12360,4440,12260~ - Inside source: true *** True Line Result 4300,12360,4440,12260 ** Processing line: ~ 4020,12460,4300,12360~ - Inside source: true *** True Line Result 4020,12460,4300,12360 ** Processing line: ~ 3160,12840,3480,12760~ - Inside source: true *** True Line Result 3160,12840,3480,12760 ** Processing line: ~ 4440,12080,4440,12260~ - Inside source: true *** True Line Result 4440,12080,4440,12260 ** Processing line: ~ 4440,12080,4440,11880~ - Inside source: true *** True Line Result 4440,12080,4440,11880 ** Processing line: ~ 4440,11880,4440,11720~ - Inside source: true *** True Line Result 4440,11880,4440,11720 ** Processing line: ~ 4440,11720,4600,11720~ - Inside source: true *** True Line Result 4440,11720,4600,11720 ** Processing line: ~ 4600,11720,4760,11740~ - Inside source: true *** True Line Result 4600,11720,4760,11740 ** Processing line: ~ 4760,11740,4980,11760~ - Inside source: true *** True Line Result 4760,11740,4980,11760 ** Processing line: ~ 4980,11760,5160,11760~ - Inside source: true *** True Line Result 4980,11760,5160,11760 ** Processing line: ~ 5160,11760,5340,11780~ - Inside source: true *** True Line Result 5160,11760,5340,11780 ** Processing line: ~ 6000,11860,6120,11820~ - Inside source: true *** True Line Result 6000,11860,6120,11820 ** Processing line: ~ 5340,11780,5620,11820~ - Inside source: true *** True Line Result 5340,11780,5620,11820 ** Processing line: ~ 5620,11820,6000,11860~ - Inside source: true *** True Line Result 5620,11820,6000,11860 ** Processing line: ~ 6120,11820,6360,11820~ - Inside source: true *** True Line Result 6120,11820,6360,11820 ** Processing line: ~ 6360,11820,6640,11860~ - Inside source: true *** True Line Result 6360,11820,6640,11860 ** Processing line: ~ 6940,11920,7240,11940~ - Inside source: true *** True Line Result 6940,11920,7240,11940 ** Processing line: ~ 7240,11940,7520,11960~ - Inside source: true *** True Line Result 7240,11940,7520,11960 ** Processing line: ~ 7520,11960,7860,11960~ - Inside source: true *** True Line Result 7520,11960,7860,11960 ** Processing line: ~ 7860,11960,8100,11920~ - Inside source: true *** True Line Result 7860,11960,8100,11920 ** Processing line: ~ 8100,11920,8420,11940~ - Inside source: true *** True Line Result 8100,11920,8420,11940 ** Processing line: ~ 8420,11940,8460,11960~ - Inside source: true *** True Line Result 8420,11940,8460,11960 ** Processing line: ~ 8460,11960,8500,11860~ - Inside source: true *** True Line Result 8460,11960,8500,11860 ** Processing line: ~ 8460,11760,8500,11860~ - Inside source: true *** True Line Result 8460,11760,8500,11860 ** Processing line: ~ 8320,11720,8460,11760~ - Inside source: true *** True Line Result 8320,11720,8460,11760 ** Processing line: ~ 8160,11720,8320,11720~ - Inside source: true *** True Line Result 8160,11720,8320,11720 ** Processing line: ~ 7940,11720,8160,11720~ - Inside source: true *** True Line Result 7940,11720,8160,11720 ** Processing line: ~ 7720,11700,7940,11720~ - Inside source: true *** True Line Result 7720,11700,7940,11720 ** Processing line: ~ 7520,11680,7720,11700~ - Inside source: true *** True Line Result 7520,11680,7720,11700 ** Processing line: ~ 7320,11680,7520,11680~ - Inside source: true *** True Line Result 7320,11680,7520,11680 ** Processing line: ~ 7200,11620,7320,11680~ - Inside source: true *** True Line Result 7200,11620,7320,11680 ** Processing line: ~ 7200,11620,7200,11500~ - Inside source: true *** True Line Result 7200,11620,7200,11500 ** Processing line: ~ 7200,11500,7280,11440~ - Inside source: true *** True Line Result 7200,11500,7280,11440 ** Processing line: ~ 7280,11440,7420,11440~ - Inside source: true *** True Line Result 7280,11440,7420,11440 ** Processing line: ~ 7420,11440,7600,11440~ - Inside source: true *** True Line Result 7420,11440,7600,11440 ** Processing line: ~ 7600,11440,7980,11460~ - Inside source: true *** True Line Result 7600,11440,7980,11460 ** Processing line: ~ 7980,11460,8160,11460~ - Inside source: true *** True Line Result 7980,11460,8160,11460 ** Processing line: ~ 8160,11460,8360,11460~ - Inside source: true *** True Line Result 8160,11460,8360,11460 ** Processing line: ~ 8360,11460,8460,11400~ - Inside source: true *** True Line Result 8360,11460,8460,11400 ** Processing line: ~ 8420,11060,8500,11200~ - Inside source: true *** True Line Result 8420,11060,8500,11200 ** Processing line: ~ 8280,11040,8420,11060~ - Inside source: true *** True Line Result 8280,11040,8420,11060 ** Processing line: ~ 8100,11060,8280,11040~ - Inside source: true *** True Line Result 8100,11060,8280,11040 ** Processing line: ~ 8460,11400,8500,11200~ - Inside source: true *** True Line Result 8460,11400,8500,11200 ** Processing line: ~ 7800,11060,8100,11060~ - Inside source: true *** True Line Result 7800,11060,8100,11060 ** Processing line: ~ 7520,11060,7800,11060~ - Inside source: true *** True Line Result 7520,11060,7800,11060 ** Processing line: ~ 7240,11060,7520,11060~ - Inside source: true *** True Line Result 7240,11060,7520,11060 ** Processing line: ~ 6940,11040,7240,11060~ - Inside source: true *** True Line Result 6940,11040,7240,11060 ** Processing line: ~ 6640,11000,6940,11040~ - Inside source: true *** True Line Result 6640,11000,6940,11040 ** Processing line: ~ 6420,10980,6640,11000~ - Inside source: true *** True Line Result 6420,10980,6640,11000 ** Processing line: ~ 6360,11060,6420,10980~ - Inside source: true *** True Line Result 6360,11060,6420,10980 ** Processing line: ~ 6360,11180,6360,11060~ - Inside source: true *** True Line Result 6360,11180,6360,11060 ** Processing line: ~ 6200,11280,6360,11180~ - Inside source: true *** True Line Result 6200,11280,6360,11180 ** Processing line: ~ 5960,11300,6200,11280~ - Inside source: true *** True Line Result 5960,11300,6200,11280 ** Processing line: ~ 5720,11280,5960,11300~ - Inside source: true *** True Line Result 5720,11280,5960,11300 ** Processing line: ~ 5500,11280,5720,11280~ - Inside source: true *** True Line Result 5500,11280,5720,11280 ** Processing line: ~ 4940,11300,5200,11280~ - Inside source: true *** True Line Result 4940,11300,5200,11280 ** Processing line: ~ 4660,11260,4940,11300~ - Inside source: true *** True Line Result 4660,11260,4940,11300 ** Processing line: ~ 4440,11280,4660,11260~ - Inside source: true *** True Line Result 4440,11280,4660,11260 ** Processing line: ~ 4260,11280,4440,11280~ - Inside source: true *** True Line Result 4260,11280,4440,11280 ** Processing line: ~ 4220,11220,4260,11280~ - Inside source: true *** True Line Result 4220,11220,4260,11280 ** Processing line: ~ 4080,11280,4220,11220~ - Inside source: true *** True Line Result 4080,11280,4220,11220 ** Processing line: ~ 3980,11420,4080,11280~ - Inside source: true *** True Line Result 3980,11420,4080,11280 ** Processing line: ~ 3980,11420,4040,11620~ - Inside source: true *** True Line Result 3980,11420,4040,11620 ** Processing line: ~ 4040,11620,4040,11820~ - Inside source: true *** True Line Result 4040,11620,4040,11820 ** Processing line: ~ 3980,11960,4040,11820~ - Inside source: true *** True Line Result 3980,11960,4040,11820 ** Processing line: ~ 3840,12000,3980,11960~ - Inside source: true *** True Line Result 3840,12000,3980,11960 ** Processing line: ~ 3720,11940,3840,12000~ - Inside source: true *** True Line Result 3720,11940,3840,12000 ** Processing line: ~ 3680,11800,3720,11940~ - Inside source: true *** True Line Result 3680,11800,3720,11940 ** Processing line: ~ 3680,11580,3680,11800~ - Inside source: true *** True Line Result 3680,11580,3680,11800 ** Processing line: ~ 3680,11360,3680,11580~ - Inside source: true *** True Line Result 3680,11360,3680,11580 ** Processing line: ~ 3680,11360,3680,11260~ - Inside source: true *** True Line Result 3680,11360,3680,11260 ** Processing line: ~ 3680,11080,3680,11260~ - Inside source: true *** True Line Result 3680,11080,3680,11260 ** Processing line: ~ 3680,11080,3680,10880~ - Inside source: true *** True Line Result 3680,11080,3680,10880 ** Processing line: ~ 3680,10700,3680,10880~ - Inside source: true *** True Line Result 3680,10700,3680,10880 ** Processing line: ~ 3680,10700,3680,10620~ - Inside source: true *** True Line Result 3680,10700,3680,10620 ** Processing line: ~ 3680,10480,3680,10620~ - Inside source: true *** True Line Result 3680,10480,3680,10620 ** Processing line: ~ 3680,10480,3680,10300~ - Inside source: true *** True Line Result 3680,10480,3680,10300 ** Processing line: ~ 3680,10300,3680,10100~ - Inside source: true *** True Line Result 3680,10300,3680,10100 ** Processing line: ~ 3680,10100,3680,9940~ - Inside source: true *** True Line Result 3680,10100,3680,9940 ** Processing line: ~ 3680,9940,3720,9860~ - Inside source: true *** True Line Result 3680,9940,3720,9860 ** Processing line: ~ 3720,9860,3920,9900~ - Inside source: true *** True Line Result 3720,9860,3920,9900 ** Processing line: ~ 3920,9900,4220,9880~ - Inside source: true *** True Line Result 3920,9900,4220,9880 ** Processing line: ~ 4980,9940,5340,9960~ - Inside source: true *** True Line Result 4980,9940,5340,9960 ** Processing line: ~ 4220,9880,4540,9900~ - Inside source: true *** True Line Result 4220,9880,4540,9900 ** Processing line: ~ 4540,9900,4980,9940~ - Inside source: true *** True Line Result 4540,9900,4980,9940 ** Processing line: ~ 5340,9960,5620,9960~ - Inside source: true *** True Line Result 5340,9960,5620,9960 ** Processing line: ~ 5620,9960,5900,9960~ - Inside source: true *** True Line Result 5620,9960,5900,9960 ** Processing line: ~ 5900,9960,6160,10000~ - Inside source: true *** True Line Result 5900,9960,6160,10000 ** Processing line: ~ 6160,10000,6480,10000~ - Inside source: true *** True Line Result 6160,10000,6480,10000 ** Processing line: ~ 6480,10000,6720,10000~ - Inside source: true *** True Line Result 6480,10000,6720,10000 ** Processing line: ~ 6720,10000,6880,9860~ - Inside source: true *** True Line Result 6720,10000,6880,9860 ** Processing line: ~ 6880,9860,6880,9520~ - Inside source: true *** True Line Result 6880,9860,6880,9520 ** Processing line: ~ 6880,9520,6940,9340~ - Inside source: true *** True Line Result 6880,9520,6940,9340 ** Processing line: ~ 6940,9120,6940,9340~ - Inside source: true *** True Line Result 6940,9120,6940,9340 ** Processing line: ~ 6940,9120,6940,8920~ - Inside source: true *** True Line Result 6940,9120,6940,8920 ** Processing line: ~ 6940,8700,6940,8920~ - Inside source: true *** True Line Result 6940,8700,6940,8920 ** Processing line: ~ 6880,8500,6940,8700~ - Inside source: true *** True Line Result 6880,8500,6940,8700 ** Processing line: ~ 6880,8320,6880,8500~ - Inside source: true *** True Line Result 6880,8320,6880,8500 ** Processing line: ~ 7140,8320,7140,8180~ - Inside source: true *** True Line Result 7140,8320,7140,8180 ** Processing line: ~ 6760,8260,6880,8320~ - Inside source: true *** True Line Result 6760,8260,6880,8320 ** Processing line: ~ 6540,8240,6760,8260~ - Inside source: true *** True Line Result 6540,8240,6760,8260 ** Processing line: ~ 6420,8180,6540,8240~ - Inside source: true *** True Line Result 6420,8180,6540,8240 ** Processing line: ~ 6280,8240,6420,8180~ - Inside source: true *** True Line Result 6280,8240,6420,8180 ** Processing line: ~ 6160,8300,6280,8240~ - Inside source: true *** True Line Result 6160,8300,6280,8240 ** Processing line: ~ 6120,8400,6160,8300~ - Inside source: true *** True Line Result 6120,8400,6160,8300 ** Processing line: ~ 6080,8520,6120,8400~ - Inside source: true *** True Line Result 6080,8520,6120,8400 ** Processing line: ~ 5840,8480,6080,8520~ - Inside source: true *** True Line Result 5840,8480,6080,8520 ** Processing line: ~ 5620,8500,5840,8480~ - Inside source: true *** True Line Result 5620,8500,5840,8480 ** Processing line: ~ 5500,8500,5620,8500~ - Inside source: true *** True Line Result 5500,8500,5620,8500 ** Processing line: ~ 5340,8560,5500,8500~ - Inside source: true *** True Line Result 5340,8560,5500,8500 ** Processing line: ~ 5160,8540,5340,8560~ - Inside source: true *** True Line Result 5160,8540,5340,8560 ** Processing line: ~ 4620,8520,4880,8520~ - Inside source: true *** True Line Result 4620,8520,4880,8520 ** Processing line: ~ 4360,8480,4620,8520~ - Inside source: true *** True Line Result 4360,8480,4620,8520 ** Processing line: ~ 4880,8520,5160,8540~ - Inside source: true *** True Line Result 4880,8520,5160,8540 ** Processing line: ~ 4140,8440,4360,8480~ - Inside source: true *** True Line Result 4140,8440,4360,8480 ** Processing line: ~ 3920,8460,4140,8440~ - Inside source: true *** True Line Result 3920,8460,4140,8440 ** Processing line: ~ 3720,8380,3920,8460~ - Inside source: true *** True Line Result 3720,8380,3920,8460 ** Processing line: ~ 3680,8160,3720,8380~ - Inside source: true *** True Line Result 3680,8160,3720,8380 ** Processing line: ~ 3680,8160,3720,7940~ - Inside source: true *** True Line Result 3680,8160,3720,7940 ** Processing line: ~ 3720,7720,3720,7940~ - Inside source: true *** True Line Result 3720,7720,3720,7940 ** Processing line: ~ 3680,7580,3720,7720~ - Inside source: true *** True Line Result 3680,7580,3720,7720 ** Processing line: ~ 3680,7580,3720,7440~ - Inside source: true *** True Line Result 3680,7580,3720,7440 ** Processing line: ~ 3720,7440,3720,7300~ - Inside source: true *** True Line Result 3720,7440,3720,7300 ** Processing line: ~ 3720,7160,3720,7300~ - Inside source: true *** True Line Result 3720,7160,3720,7300 ** Processing line: ~ 3720,7160,3720,7020~ - Inside source: true *** True Line Result 3720,7160,3720,7020 ** Processing line: ~ 3720,7020,3780,6900~ - Inside source: true *** True Line Result 3720,7020,3780,6900 ** Processing line: ~ 3780,6900,4080,6940~ - Inside source: true *** True Line Result 3780,6900,4080,6940 ** Processing line: ~ 4080,6940,4340,6980~ - Inside source: true *** True Line Result 4080,6940,4340,6980 ** Processing line: ~ 4340,6980,4600,6980~ - Inside source: true *** True Line Result 4340,6980,4600,6980 ** Processing line: ~ 4600,6980,4880,6980~ - Inside source: true *** True Line Result 4600,6980,4880,6980 ** Processing line: ~ 4880,6980,5160,6980~ - Inside source: true *** True Line Result 4880,6980,5160,6980 ** Processing line: ~ 5160,6980,5400,7000~ - Inside source: true *** True Line Result 5160,6980,5400,7000 ** Processing line: ~ 5400,7000,5560,7020~ - Inside source: true *** True Line Result 5400,7000,5560,7020 ** Processing line: ~ 5560,7020,5660,7080~ - Inside source: true *** True Line Result 5560,7020,5660,7080 ** Processing line: ~ 5660,7080,5660,7280~ - Inside source: true *** True Line Result 5660,7080,5660,7280 ** Processing line: ~ 5660,7280,5660,7440~ - Inside source: true *** True Line Result 5660,7280,5660,7440 ** Processing line: ~ 5660,7440,5740,7520~ - Inside source: true *** True Line Result 5660,7440,5740,7520 ** Processing line: ~ 5740,7520,5740,7600~ - Inside source: true *** True Line Result 5740,7520,5740,7600 ** Processing line: ~ 5740,7600,5900,7600~ - Inside source: true *** True Line Result 5740,7600,5900,7600 ** Processing line: ~ 5900,7600,6040,7540~ - Inside source: true *** True Line Result 5900,7600,6040,7540 ** Processing line: ~ 6040,7540,6040,7320~ - Inside source: true *** True Line Result 6040,7540,6040,7320 ** Processing line: ~ 6040,7320,6120,7200~ - Inside source: true *** True Line Result 6040,7320,6120,7200 ** Processing line: ~ 6120,7200,6120,7040~ - Inside source: true *** True Line Result 6120,7200,6120,7040 ** Processing line: ~ 6120,7040,6240,7000~ - Inside source: true *** True Line Result 6120,7040,6240,7000 ** Processing line: ~ 6240,7000,6480,7060~ - Inside source: true *** True Line Result 6240,7000,6480,7060 ** Processing line: ~ 6480,7060,6800,7060~ - Inside source: true *** True Line Result 6480,7060,6800,7060 ** Processing line: ~ 6800,7060,7080,7080~ - Inside source: true *** True Line Result 6800,7060,7080,7080 ** Processing line: ~ 7080,7080,7320,7100~ - Inside source: true *** True Line Result 7080,7080,7320,7100 ** Processing line: ~ 7940,7100,7980,6920~ - Inside source: true *** True Line Result 7940,7100,7980,6920 ** Processing line: ~ 7860,6860,7980,6920~ - Inside source: true *** True Line Result 7860,6860,7980,6920 ** Processing line: ~ 7640,6860,7860,6860~ - Inside source: true *** True Line Result 7640,6860,7860,6860 ** Processing line: ~ 7400,6840,7640,6860~ - Inside source: true *** True Line Result 7400,6840,7640,6860 ** Processing line: ~ 7320,7100,7560,7120~ - Inside source: true *** True Line Result 7320,7100,7560,7120 ** Processing line: ~ 7560,7120,7760,7120~ - Inside source: true *** True Line Result 7560,7120,7760,7120 ** Processing line: ~ 7760,7120,7940,7100~ - Inside source: true *** True Line Result 7760,7120,7940,7100 ** Processing line: ~ 7200,6820,7400,6840~ - Inside source: true *** True Line Result 7200,6820,7400,6840 ** Processing line: ~ 7040,6820,7200,6820~ - Inside source: true *** True Line Result 7040,6820,7200,6820 ** Processing line: ~ 6600,6840,6840,6840~ - Inside source: true *** True Line Result 6600,6840,6840,6840 ** Processing line: ~ 6380,6800,6600,6840~ - Inside source: true *** True Line Result 6380,6800,6600,6840 ** Processing line: ~ 6120,6800,6380,6800~ - Inside source: true *** True Line Result 6120,6800,6380,6800 ** Processing line: ~ 5900,6840,6120,6800~ - Inside source: true *** True Line Result 5900,6840,6120,6800 ** Processing line: ~ 5620,6820,5900,6840~ - Inside source: true *** True Line Result 5620,6820,5900,6840 ** Processing line: ~ 5400,6800,5620,6820~ - Inside source: true *** True Line Result 5400,6800,5620,6820 ** Processing line: ~ 5140,6800,5400,6800~ - Inside source: true *** True Line Result 5140,6800,5400,6800 ** Processing line: ~ 4880,6780,5140,6800~ - Inside source: true *** True Line Result 4880,6780,5140,6800 ** Processing line: ~ 4600,6760,4880,6780~ - Inside source: true *** True Line Result 4600,6760,4880,6780 ** Processing line: ~ 4340,6760,4600,6760~ - Inside source: true *** True Line Result 4340,6760,4600,6760 ** Processing line: ~ 4080,6760,4340,6760~ - Inside source: true *** True Line Result 4080,6760,4340,6760 ** Processing line: ~ 3840,6740,4080,6760~ - Inside source: true *** True Line Result 3840,6740,4080,6760 ** Processing line: ~ 3680,6720,3840,6740~ - Inside source: true *** True Line Result 3680,6720,3840,6740 ** Processing line: ~ 3680,6720,3680,6560~ - Inside source: true *** True Line Result 3680,6720,3680,6560 ** Processing line: ~ 3680,6560,3720,6400~ - Inside source: true *** True Line Result 3680,6560,3720,6400 ** Processing line: ~ 3720,6400,3720,6200~ - Inside source: true *** True Line Result 3720,6400,3720,6200 ** Processing line: ~ 3720,6200,3780,6000~ - Inside source: true *** True Line Result 3720,6200,3780,6000 ** Processing line: ~ 3720,5780,3780,6000~ - Inside source: true *** True Line Result 3720,5780,3780,6000 ** Processing line: ~ 3720,5580,3720,5780~ - Inside source: true *** True Line Result 3720,5580,3720,5780 ** Processing line: ~ 3720,5360,3720,5580~ - Inside source: true *** True Line Result 3720,5360,3720,5580 ** Processing line: ~ 3720,5360,3840,5240~ - Inside source: true *** True Line Result 3720,5360,3840,5240 ** Processing line: ~ 3840,5240,4200,5260~ - Inside source: true *** True Line Result 3840,5240,4200,5260 ** Processing line: ~ 4200,5260,4600,5280~ - Inside source: true *** True Line Result 4200,5260,4600,5280 ** Processing line: ~ 4600,5280,4880,5280~ - Inside source: true *** True Line Result 4600,5280,4880,5280 ** Processing line: ~ 4880,5280,5140,5200~ - Inside source: true *** True Line Result 4880,5280,5140,5200 ** Processing line: ~ 5140,5200,5220,5100~ - Inside source: true *** True Line Result 5140,5200,5220,5100 ** Processing line: ~ 5220,5100,5280,4900~ - Inside source: true *** True Line Result 5220,5100,5280,4900 ** Processing line: ~ 5280,4900,5340,4840~ - Inside source: true *** True Line Result 5280,4900,5340,4840 ** Processing line: ~ 5340,4840,5720,4880~ - Inside source: true *** True Line Result 5340,4840,5720,4880 ** Processing line: ~ 6120,4880,6480,4860~ - Inside source: true *** True Line Result 6120,4880,6480,4860 ** Processing line: ~ 6880,4840,7200,4860~ - Inside source: true *** True Line Result 6880,4840,7200,4860 ** Processing line: ~ 6480,4860,6880,4840~ - Inside source: true *** True Line Result 6480,4860,6880,4840 ** Processing line: ~ 7200,4860,7320,4860~ - Inside source: true *** True Line Result 7200,4860,7320,4860 ** Processing line: ~ 7320,4860,7360,4740~ - Inside source: true *** True Line Result 7320,4860,7360,4740 ** Processing line: ~ 7360,4600,7440,4520~ - Inside source: true *** True Line Result 7360,4600,7440,4520 ** Processing line: ~ 7360,4600,7360,4740~ - Inside source: true *** True Line Result 7360,4600,7360,4740 ** Processing line: ~ 7440,4520,7640,4520~ - Inside source: true *** True Line Result 7440,4520,7640,4520 ** Processing line: ~ 7640,4520,7800,4480~ - Inside source: true *** True Line Result 7640,4520,7800,4480 ** Processing line: ~ 7800,4480,7800,4280~ - Inside source: true *** True Line Result 7800,4480,7800,4280 ** Processing line: ~ 7800,4280,7800,4040~ - Inside source: true *** True Line Result 7800,4280,7800,4040 ** Processing line: ~ 7800,4040,7800,3780~ - Inside source: true *** True Line Result 7800,4040,7800,3780 ** Processing line: ~ 7800,3560,7800,3780~ - Inside source: true *** True Line Result 7800,3560,7800,3780 ** Processing line: ~ 7800,3560,7860,3440~ - Inside source: true *** True Line Result 7800,3560,7860,3440 ** Processing line: ~ 7860,3440,8060,3460~ - Inside source: true *** True Line Result 7860,3440,8060,3460 ** Processing line: ~ 8060,3460,8160,3340~ - Inside source: true *** True Line Result 8060,3460,8160,3340 ** Processing line: ~ 8160,3340,8160,3140~ - Inside source: true *** True Line Result 8160,3340,8160,3140 ** Processing line: ~ 8160,3140,8160,2960~ - Inside source: true *** True Line Result 8160,3140,8160,2960 ** Processing line: ~ 8000,2900,8160,2960~ - Inside source: true *** True Line Result 8000,2900,8160,2960 ** Processing line: ~ 7860,2900,8000,2900~ - Inside source: true *** True Line Result 7860,2900,8000,2900 ** Processing line: ~ 7640,2940,7860,2900~ - Inside source: true *** True Line Result 7640,2940,7860,2900 ** Processing line: ~ 7400,2980,7640,2940~ - Inside source: true *** True Line Result 7400,2980,7640,2940 ** Processing line: ~ 7100,2980,7400,2980~ - Inside source: true *** True Line Result 7100,2980,7400,2980 ** Processing line: ~ 6840,3000,7100,2980~ - Inside source: true *** True Line Result 6840,3000,7100,2980 ** Processing line: ~ 5620,2980,5840,2980~ - Inside source: true *** True Line Result 5620,2980,5840,2980 ** Processing line: ~ 5840,2980,6500,3000~ - Inside source: true *** True Line Result 5840,2980,6500,3000 ** Processing line: ~ 6500,3000,6840,3000~ - Inside source: true *** True Line Result 6500,3000,6840,3000 ** Processing line: ~ 5560,2780,5620,2980~ - Inside source: true *** True Line Result 5560,2780,5620,2980 ** Processing line: ~ 5560,2780,5560,2580~ - Inside source: true *** True Line Result 5560,2780,5560,2580 ** Processing line: ~ 5560,2580,5560,2380~ - Inside source: true *** True Line Result 5560,2580,5560,2380 ** Processing line: ~ 5560,2140,5560,2380~ - Inside source: true *** True Line Result 5560,2140,5560,2380 ** Processing line: ~ 5560,2140,5560,1900~ - Inside source: true *** True Line Result 5560,2140,5560,1900 ** Processing line: ~ 5560,1900,5620,1660~ - Inside source: true *** True Line Result 5560,1900,5620,1660 ** Processing line: ~ 5620,1660,5660,1460~ - Inside source: true *** True Line Result 5620,1660,5660,1460 ** Processing line: ~ 5660,1460,5660,1300~ - Inside source: true *** True Line Result 5660,1460,5660,1300 ** Processing line: ~ 5500,1260,5660,1300~ - Inside source: true *** True Line Result 5500,1260,5660,1300 ** Processing line: ~ 5340,1260,5500,1260~ - Inside source: true *** True Line Result 5340,1260,5500,1260 ** Processing line: ~ 4600,1220,4840,1240~ - Inside source: true *** True Line Result 4600,1220,4840,1240 ** Processing line: ~ 4440,1220,4600,1220~ - Inside source: true *** True Line Result 4440,1220,4600,1220 ** Processing line: ~ 4440,1080,4440,1220~ - Inside source: true *** True Line Result 4440,1080,4440,1220 ** Processing line: ~ 4440,1080,4600,1020~ - Inside source: true *** True Line Result 4440,1080,4600,1020 ** Processing line: ~ 5080,1260,5340,1260~ - Inside source: true *** True Line Result 5080,1260,5340,1260 ** Processing line: ~ 4840,1240,5080,1260~ - Inside source: true *** True Line Result 4840,1240,5080,1260 ** Processing line: ~ 4600,1020,4940,1020~ - Inside source: true *** True Line Result 4600,1020,4940,1020 ** Processing line: ~ 4940,1020,5220,1020~ - Inside source: true *** True Line Result 4940,1020,5220,1020 ** Processing line: ~ 5220,1020,5560,960~ - Inside source: true *** True Line Result 5220,1020,5560,960 ** Processing line: ~ 5560,960,5660,860~ - Inside source: true *** True Line Result 5560,960,5660,860 ** Processing line: ~ 5660,740,5660,860~ - Inside source: true *** True Line Result 5660,740,5660,860 ** Processing line: ~ 5280,740,5660,740~ - Inside source: true *** True Line Result 5280,740,5660,740 ** Processing line: ~ 4940,780,5280,740~ - Inside source: true *** True Line Result 4940,780,5280,740 ** Processing line: ~ 4660,760,4940,780~ - Inside source: true *** True Line Result 4660,760,4940,780 ** Processing line: ~ 4500,700,4660,760~ - Inside source: true *** True Line Result 4500,700,4660,760 ** Processing line: ~ 4500,520,4500,700~ - Inside source: true *** True Line Result 4500,520,4500,700 ** Processing line: ~ 4500,520,4700,460~ - Inside source: true *** True Line Result 4500,520,4700,460 ** Processing line: ~ 4700,460,5080,440~ - Inside source: true *** True Line Result 4700,460,5080,440 ** Processing line: ~ 5440,420,5740,420~ - Inside source: true *** True Line Result 5440,420,5740,420 ** Processing line: ~ 5080,440,5440,420~ - Inside source: true *** True Line Result 5080,440,5440,420 ** Processing line: ~ 5740,420,5840,360~ - Inside source: true *** True Line Result 5740,420,5840,360 ** Processing line: ~ 5800,280,5840,360~ - Inside source: true *** True Line Result 5800,280,5840,360 ** Processing line: ~ 5560,280,5800,280~ - Inside source: true *** True Line Result 5560,280,5800,280 ** Processing line: ~ 4980,300,5280,320~ - Inside source: true *** True Line Result 4980,300,5280,320 ** Processing line: ~ 4360,320,4660,300~ - Inside source: true *** True Line Result 4360,320,4660,300 ** Processing line: ~ 4200,360,4360,320~ - Inside source: true *** True Line Result 4200,360,4360,320 ** Processing line: ~ 5280,320,5560,280~ - Inside source: true *** True Line Result 5280,320,5560,280 ** Processing line: ~ 4660,300,4980,300~ - Inside source: true *** True Line Result 4660,300,4980,300 ** Processing line: ~ 4140,480,4200,360~ - Inside source: true *** True Line Result 4140,480,4200,360 ** Processing line: ~ 4140,480,4140,640~ - Inside source: true *** True Line Result 4140,480,4140,640 ** Processing line: ~ 4140,640,4200,780~ - Inside source: true *** True Line Result 4140,640,4200,780 ** Processing line: ~ 4200,780,4200,980~ - Inside source: true *** True Line Result 4200,780,4200,980 ** Processing line: ~ 4200,980,4220,1180~ - Inside source: true *** True Line Result 4200,980,4220,1180 ** Processing line: ~ 4220,1400,4220,1180~ - Inside source: true *** True Line Result 4220,1400,4220,1180 ** Processing line: ~ 4220,1400,4260,1540~ - Inside source: true *** True Line Result 4220,1400,4260,1540 ** Processing line: ~ 4260,1540,4500,1540~ - Inside source: true *** True Line Result 4260,1540,4500,1540 ** Processing line: ~ 4500,1540,4700,1520~ - Inside source: true *** True Line Result 4500,1540,4700,1520 ** Processing line: ~ 4700,1520,4980,1540~ - Inside source: true *** True Line Result 4700,1520,4980,1540 ** Processing line: ~ 5280,1560,5400,1560~ - Inside source: true *** True Line Result 5280,1560,5400,1560 ** Processing line: ~ 4980,1540,5280,1560~ - Inside source: true *** True Line Result 4980,1540,5280,1560 ** Processing line: ~ 5400,1560,5400,1700~ - Inside source: true *** True Line Result 5400,1560,5400,1700 ** Processing line: ~ 5400,1780,5400,1700~ - Inside source: true *** True Line Result 5400,1780,5400,1700 ** Processing line: ~ 5340,1900,5400,1780~ - Inside source: true *** True Line Result 5340,1900,5400,1780 ** Processing line: ~ 5340,2020,5340,1900~ - Inside source: true *** True Line Result 5340,2020,5340,1900 ** Processing line: ~ 5340,2220,5340,2020~ - Inside source: true *** True Line Result 5340,2220,5340,2020 ** Processing line: ~ 5340,2220,5340,2420~ - Inside source: true *** True Line Result 5340,2220,5340,2420 ** Processing line: ~ 5340,2420,5340,2520~ - Inside source: true *** True Line Result 5340,2420,5340,2520 ** Processing line: ~ 5080,2600,5220,2580~ - Inside source: true *** True Line Result 5080,2600,5220,2580 ** Processing line: ~ 5220,2580,5340,2520~ - Inside source: true *** True Line Result 5220,2580,5340,2520 ** Processing line: ~ 4900,2580,5080,2600~ - Inside source: true *** True Line Result 4900,2580,5080,2600 ** Processing line: ~ 4700,2540,4900,2580~ - Inside source: true *** True Line Result 4700,2540,4900,2580 ** Processing line: ~ 4500,2540,4700,2540~ - Inside source: true *** True Line Result 4500,2540,4700,2540 ** Processing line: ~ 4220,2580,4340,2540~ - Inside source: true *** True Line Result 4220,2580,4340,2540 ** Processing line: ~ 4200,2700,4220,2580~ - Inside source: true *** True Line Result 4200,2700,4220,2580 ** Processing line: ~ 4340,2540,4500,2540~ - Inside source: true *** True Line Result 4340,2540,4500,2540 ** Processing line: ~ 3980,2740,4200,2700~ - Inside source: true *** True Line Result 3980,2740,4200,2700 ** Processing line: ~ 3840,2740,3980,2740~ - Inside source: true *** True Line Result 3840,2740,3980,2740 ** Processing line: ~ 3780,2640,3840,2740~ - Inside source: true *** True Line Result 3780,2640,3840,2740 ** Processing line: ~ 3780,2640,3780,2460~ - Inside source: true *** True Line Result 3780,2640,3780,2460 ** Processing line: ~ 3780,2280,3780,2460~ - Inside source: true *** True Line Result 3780,2280,3780,2460 ** Processing line: ~ 3620,2020,3780,2100~ - Inside source: true *** True Line Result 3620,2020,3780,2100 ** Processing line: ~ 3780,2280,3780,2100~ - Inside source: true *** True Line Result 3780,2280,3780,2100 ** Processing line: ~ 3360,2040,3620,2020~ - Inside source: true *** True Line Result 3360,2040,3620,2020 ** Processing line: ~ 3080,2040,3360,2040~ - Inside source: true *** True Line Result 3080,2040,3360,2040 ** Processing line: ~ 2840,2020,3080,2040~ - Inside source: true *** True Line Result 2840,2020,3080,2040 ** Processing line: ~ 2740,1940,2840,2020~ - Inside source: true *** True Line Result 2740,1940,2840,2020 ** Processing line: ~ 2740,1940,2800,1800~ - Inside source: true *** True Line Result 2740,1940,2800,1800 ** Processing line: ~ 2800,1640,2800,1800~ - Inside source: true *** True Line Result 2800,1640,2800,1800 ** Processing line: ~ 2800,1640,2800,1460~ - Inside source: true *** True Line Result 2800,1640,2800,1460 ** Processing line: ~ 2800,1300,2800,1460~ - Inside source: true *** True Line Result 2800,1300,2800,1460 ** Processing line: ~ 2700,1180,2800,1300~ - Inside source: true *** True Line Result 2700,1180,2800,1300 ** Processing line: ~ 2480,1140,2700,1180~ - Inside source: true *** True Line Result 2480,1140,2700,1180 ** Processing line: ~ 1580,1200,1720,1200~ - Inside source: true *** True Line Result 1580,1200,1720,1200 ** Processing line: ~ 2240,1180,2480,1140~ - Inside source: true *** True Line Result 2240,1180,2480,1140 ** Processing line: ~ 1960,1180,2240,1180~ - Inside source: true *** True Line Result 1960,1180,2240,1180 ** Processing line: ~ 1720,1200,1960,1180~ - Inside source: true *** True Line Result 1720,1200,1960,1180 ** Processing line: ~ 1500,1320,1580,1200~ - Inside source: true *** True Line Result 1500,1320,1580,1200 ** Processing line: ~ 1500,1440,1500,1320~ - Inside source: true *** True Line Result 1500,1440,1500,1320 ** Processing line: ~ 1500,1440,1760,1480~ - Inside source: true *** True Line Result 1500,1440,1760,1480 ** Processing line: ~ 1760,1480,1940,1480~ - Inside source: true *** True Line Result 1760,1480,1940,1480 ** Processing line: ~ 1940,1480,2140,1500~ - Inside source: true *** True Line Result 1940,1480,2140,1500 ** Processing line: ~ 2140,1500,2320,1520~ - Inside source: true *** True Line Result 2140,1500,2320,1520 ** Processing line: ~ 2400,1560,2400,1700~ - Inside source: true *** True Line Result 2400,1560,2400,1700 ** Processing line: ~ 2280,1820,2380,1780~ - Inside source: true *** True Line Result 2280,1820,2380,1780 ** Processing line: ~ 2320,1520,2400,1560~ - Inside source: true *** True Line Result 2320,1520,2400,1560 ** Processing line: ~ 2380,1780,2400,1700~ - Inside source: true *** True Line Result 2380,1780,2400,1700 ** Processing line: ~ 2080,1840,2280,1820~ - Inside source: true *** True Line Result 2080,1840,2280,1820 ** Processing line: ~ 1720,1820,2080,1840~ - Inside source: true *** True Line Result 1720,1820,2080,1840 ** Processing line: ~ 1420,1800,1720,1820~ - Inside source: true *** True Line Result 1420,1800,1720,1820 ** Processing line: ~ 1280,1800,1420,1800~ - Inside source: true *** True Line Result 1280,1800,1420,1800 ** Processing line: ~ 1240,1720,1280,1800~ - Inside source: true *** True Line Result 1240,1720,1280,1800 ** Processing line: ~ 1240,1720,1240,1600~ - Inside source: true *** True Line Result 1240,1720,1240,1600 ** Processing line: ~ 1240,1600,1280,1480~ - Inside source: true *** True Line Result 1240,1600,1280,1480 ** Processing line: ~ 1280,1340,1280,1480~ - Inside source: true *** True Line Result 1280,1340,1280,1480 ** Processing line: ~ 1180,1280,1280,1340~ - Inside source: true *** True Line Result 1180,1280,1280,1340 ** Processing line: ~ 1000,1280,1180,1280~ - Inside source: true *** True Line Result 1000,1280,1180,1280 ** Processing line: ~ 760,1280,1000,1280~ - Inside source: true *** True Line Result 760,1280,1000,1280 ** Processing line: ~ 360,1240,540,1260~ - Inside source: true *** True Line Result 360,1240,540,1260 ** Processing line: ~ 180,1220,360,1240~ - Inside source: true *** True Line Result 180,1220,360,1240 ** Processing line: ~ 540,1260,760,1280~ - Inside source: true *** True Line Result 540,1260,760,1280 ** Processing line: ~ 180,1080,180,1220~ - Inside source: true *** True Line Result 180,1080,180,1220 ** Processing line: ~ 180,1080,180,1000~ - Inside source: true *** True Line Result 180,1080,180,1000 ** Processing line: ~ 180,1000,360,940~ - Inside source: true *** True Line Result 180,1000,360,940 ** Processing line: ~ 360,940,540,960~ - Inside source: true *** True Line Result 360,940,540,960 ** Processing line: ~ 540,960,820,980~ - Inside source: true *** True Line Result 540,960,820,980 ** Processing line: ~ 1100,980,1200,920~ - Inside source: true *** True Line Result 1100,980,1200,920 ** Processing line: ~ 820,980,1100,980~ - Inside source: true *** True Line Result 820,980,1100,980 ** Processing line: ~ 6640,11860,6940,11920~ - Inside source: true *** True Line Result 6640,11860,6940,11920 ** Processing line: ~ 5200,11280,5500,11280~ - Inside source: true *** True Line Result 5200,11280,5500,11280 ** Processing line: ~ 4120,7330,4120,7230~ - Inside source: true *** True Line Result 4120,7330,4120,7230 ** Processing line: ~ 4120,7230,4660,7250~ - Inside source: true *** True Line Result 4120,7230,4660,7250 ** Processing line: ~ 4660,7250,4940,7250~ - Inside source: true *** True Line Result 4660,7250,4940,7250 ** Processing line: ~ 4940,7250,5050,7340~ - Inside source: true *** True Line Result 4940,7250,5050,7340 ** Processing line: ~ 5010,7400,5050,7340~ - Inside source: true *** True Line Result 5010,7400,5050,7340 ** Processing line: ~ 4680,7380,5010,7400~ - Inside source: true *** True Line Result 4680,7380,5010,7400 ** Processing line: ~ 4380,7370,4680,7380~ - Inside source: true *** True Line Result 4380,7370,4680,7380 ** Processing line: ~ 4120,7330,4360,7370~ - Inside source: true *** True Line Result 4120,7330,4360,7370 ** Processing line: ~ 4120,7670,4120,7760~ - Inside source: true *** True Line Result 4120,7670,4120,7760 ** Processing line: ~ 4120,7670,4280,7650~ - Inside source: true *** True Line Result 4120,7670,4280,7650 ** Processing line: ~ 4280,7650,4540,7660~ - Inside source: true *** True Line Result 4280,7650,4540,7660 ** Processing line: ~ 4550,7660,4820,7680~ - Inside source: true *** True Line Result 4550,7660,4820,7680 ** Processing line: ~ 4820,7680,4900,7730~ - Inside source: true *** True Line Result 4820,7680,4900,7730 ** Processing line: ~ 4880,7800,4900,7730~ - Inside source: true *** True Line Result 4880,7800,4900,7730 ** Processing line: ~ 4620,7820,4880,7800~ - Inside source: true *** True Line Result 4620,7820,4880,7800 ** Processing line: ~ 4360,7790,4620,7820~ - Inside source: true *** True Line Result 4360,7790,4620,7820 ** Processing line: ~ 4120,7760,4360,7790~ - Inside source: true *** True Line Result 4120,7760,4360,7790 ** Processing line: ~ 6840,6840,7040,6820~ - Inside source: true *** True Line Result 6840,6840,7040,6820 ** Processing line: ~ 5720,4880,6120,4880~ - Inside source: true *** True Line Result 5720,4880,6120,4880 ** Processing line: ~ 1200,920,1340,810~ - Inside source: true *** True Line Result 1200,920,1340,810 ** Processing line: ~ 1340,810,1520,790~ - Inside source: true *** True Line Result 1340,810,1520,790 ** Processing line: ~ 1520,790,1770,800~ - Inside source: true *** True Line Result 1520,790,1770,800 ** Processing line: ~ 2400,790,2600,750~ - Inside source: true *** True Line Result 2400,790,2600,750 ** Processing line: ~ 2600,750,2640,520~ - Inside source: true *** True Line Result 2600,750,2640,520 ** Processing line: ~ 2520,470,2640,520~ - Inside source: true *** True Line Result 2520,470,2640,520 ** Processing line: ~ 2140,470,2520,470~ - Inside source: true *** True Line Result 2140,470,2520,470 ** Processing line: ~ 1760,800,2090,800~ - Inside source: true *** True Line Result 1760,800,2090,800 ** Processing line: ~ 2080,800,2400,790~ - Inside source: true *** True Line Result 2080,800,2400,790 ** Processing line: ~ 1760,450,2140,470~ - Inside source: true *** True Line Result 1760,450,2140,470 ** Processing line: ~ 1420,450,1760,450~ - Inside source: true *** True Line Result 1420,450,1760,450 ** Processing line: ~ 1180,440,1420,450~ - Inside source: true *** True Line Result 1180,440,1420,450 ** Processing line: ~ 900,480,1180,440~ - Inside source: true *** True Line Result 900,480,1180,440 ** Processing line: ~ 640,450,900,480~ - Inside source: true *** True Line Result 640,450,900,480 ** Processing line: ~ 360,440,620,450~ - Inside source: true *** True Line Result 360,440,620,450 ** Processing line: ~ 120,430,360,440~ - Inside source: true *** True Line Result 120,430,360,440 ** Processing line: ~ 0,520,120,430~ - Inside source: true *** True Line Result 0,520,120,430 ** Processing line: ~ -20,780,0,520~ - Inside source: true *** True Line Result -20,780,0,520 ** Processing line: ~ -20,780,-20,1020~ - Inside source: true *** True Line Result -20,780,-20,1020 ** Processing line: ~ -20,1020,-20,1150~ - Inside source: true *** True Line Result -20,1020,-20,1150 ** Processing line: ~ -20,1150,0,1300~ - Inside source: true *** True Line Result -20,1150,0,1300 ** Processing line: ~ 0,1470,60,1530~ - Inside source: true *** True Line Result 0,1470,60,1530 ** Processing line: ~ 0,1300,0,1470~ - Inside source: true *** True Line Result 0,1300,0,1470 ** Processing line: ~ 60,1530,360,1530~ - Inside source: true *** True Line Result 60,1530,360,1530 ** Processing line: ~ 360,1530,660,1520~ - Inside source: true *** True Line Result 360,1530,660,1520 ** Processing line: ~ 660,1520,980,1520~ - Inside source: true *** True Line Result 660,1520,980,1520 ** Processing line: ~ 980,1520,1040,1520~ - Inside source: true *** True Line Result 980,1520,1040,1520 ** Processing line: ~ 1040,1520,1070,1560~ - Inside source: true *** True Line Result 1040,1520,1070,1560 ** Processing line: ~ 1070,1770,1070,1560~ - Inside source: true *** True Line Result 1070,1770,1070,1560 ** Processing line: ~ 1070,1770,1100,2010~ - Inside source: true *** True Line Result 1070,1770,1100,2010 ** Processing line: ~ 1070,2230,1100,2010~ - Inside source: true *** True Line Result 1070,2230,1100,2010 ** Processing line: ~ 1070,2240,1180,2340~ - Inside source: true *** True Line Result 1070,2240,1180,2340 ** Processing line: ~ 1180,2340,1580,2340~ - Inside source: true *** True Line Result 1180,2340,1580,2340 ** Processing line: ~ 1580,2340,1940,2350~ - Inside source: true *** True Line Result 1580,2340,1940,2350 ** Processing line: ~ 1940,2350,2440,2350~ - Inside source: true *** True Line Result 1940,2350,2440,2350 ** Processing line: ~ 2440,2350,2560,2380~ - Inside source: true *** True Line Result 2440,2350,2560,2380 ** Processing line: ~ 2560,2380,2600,2540~ - Inside source: true *** True Line Result 2560,2380,2600,2540 ** Processing line: ~ 2810,2640,3140,2680~ - Inside source: true *** True Line Result 2810,2640,3140,2680 ** Processing line: ~ 2600,2540,2810,2640~ - Inside source: true *** True Line Result 2600,2540,2810,2640 ** Processing line: ~ 3140,2680,3230,2780~ - Inside source: true *** True Line Result 3140,2680,3230,2780 ** Processing line: ~ 3230,2780,3260,2970~ - Inside source: true *** True Line Result 3230,2780,3260,2970 ** Processing line: ~ 3230,3220,3260,2970~ - Inside source: true *** True Line Result 3230,3220,3260,2970 ** Processing line: ~ 3200,3470,3230,3220~ - Inside source: true *** True Line Result 3200,3470,3230,3220 ** Processing line: ~ 3200,3480,3210,3760~ - Inside source: true *** True Line Result 3200,3480,3210,3760 ** Processing line: ~ 3210,3760,3210,4040~ - Inside source: true *** True Line Result 3210,3760,3210,4040 ** Processing line: ~ 3200,4040,3230,4310~ - Inside source: true *** True Line Result 3200,4040,3230,4310 ** Processing line: ~ 3210,4530,3230,4310~ - Inside source: true *** True Line Result 3210,4530,3230,4310 ** Processing line: ~ 3210,4530,3230,4730~ - Inside source: true *** True Line Result 3210,4530,3230,4730 ** Processing line: ~ 3230,4960,3230,4730~ - Inside source: true *** True Line Result 3230,4960,3230,4730 ** Processing line: ~ 3230,4960,3260,5190~ - Inside source: true *** True Line Result 3230,4960,3260,5190 ** Processing line: ~ 3170,5330,3260,5190~ - Inside source: true *** True Line Result 3170,5330,3260,5190 ** Processing line: ~ 2920,5330,3170,5330~ - Inside source: true *** True Line Result 2920,5330,3170,5330 ** Processing line: ~ 2660,5360,2920,5330~ - Inside source: true *** True Line Result 2660,5360,2920,5330 ** Processing line: ~ 2420,5330,2660,5360~ - Inside source: true *** True Line Result 2420,5330,2660,5360 ** Processing line: ~ 2200,5280,2400,5330~ - Inside source: true *** True Line Result 2200,5280,2400,5330 ** Processing line: ~ 2020,5280,2200,5280~ - Inside source: true *** True Line Result 2020,5280,2200,5280 ** Processing line: ~ 1840,5260,2020,5280~ - Inside source: true *** True Line Result 1840,5260,2020,5280 ** Processing line: ~ 1660,5280,1840,5260~ - Inside source: true *** True Line Result 1660,5280,1840,5260 ** Processing line: ~ 1500,5300,1660,5280~ - Inside source: true *** True Line Result 1500,5300,1660,5280 ** Processing line: ~ 1360,5270,1500,5300~ - Inside source: true *** True Line Result 1360,5270,1500,5300 ** Processing line: ~ 1200,5290,1340,5270~ - Inside source: true *** True Line Result 1200,5290,1340,5270 ** Processing line: ~ 1070,5400,1200,5290~ - Inside source: true *** True Line Result 1070,5400,1200,5290 ** Processing line: ~ 1040,5630,1070,5400~ - Inside source: true *** True Line Result 1040,5630,1070,5400 ** Processing line: ~ 1000,5900,1040,5630~ - Inside source: true *** True Line Result 1000,5900,1040,5630 ** Processing line: ~ 980,6170,1000,5900~ - Inside source: true *** True Line Result 980,6170,1000,5900 ** Processing line: ~ 980,6280,980,6170~ - Inside source: true *** True Line Result 980,6280,980,6170 ** Processing line: ~ 980,6540,980,6280~ - Inside source: true *** True Line Result 980,6540,980,6280 ** Processing line: ~ 980,6540,1040,6720~ - Inside source: true *** True Line Result 980,6540,1040,6720 ** Processing line: ~ 1040,6720,1360,6730~ - Inside source: true *** True Line Result 1040,6720,1360,6730 ** Processing line: ~ 1360,6730,1760,6710~ - Inside source: true *** True Line Result 1360,6730,1760,6710 ** Processing line: ~ 2110,6720,2420,6730~ - Inside source: true *** True Line Result 2110,6720,2420,6730 ** Processing line: ~ 1760,6710,2110,6720~ - Inside source: true *** True Line Result 1760,6710,2110,6720 ** Processing line: ~ 2420,6730,2640,6720~ - Inside source: true *** True Line Result 2420,6730,2640,6720 ** Processing line: ~ 2640,6720,2970,6720~ - Inside source: true *** True Line Result 2640,6720,2970,6720 ** Processing line: ~ 2970,6720,3160,6700~ - Inside source: true *** True Line Result 2970,6720,3160,6700 ** Processing line: ~ 3160,6700,3240,6710~ - Inside source: true *** True Line Result 3160,6700,3240,6710 ** Processing line: ~ 3240,6710,3260,6890~ - Inside source: true *** True Line Result 3240,6710,3260,6890 ** Processing line: ~ 3260,7020,3260,6890~ - Inside source: true *** True Line Result 3260,7020,3260,6890 ** Processing line: ~ 3230,7180,3260,7020~ - Inside source: true *** True Line Result 3230,7180,3260,7020 ** Processing line: ~ 3230,7350,3230,7180~ - Inside source: true *** True Line Result 3230,7350,3230,7180 ** Processing line: ~ 3210,7510,3230,7350~ - Inside source: true *** True Line Result 3210,7510,3230,7350 ** Processing line: ~ 3210,7510,3210,7690~ - Inside source: true *** True Line Result 3210,7510,3210,7690 ** Processing line: ~ 3210,7870,3210,7690~ - Inside source: true *** True Line Result 3210,7870,3210,7690 ** Processing line: ~ 3210,7870,3210,7980~ - Inside source: true *** True Line Result 3210,7870,3210,7980 ** Processing line: ~ 3200,8120,3210,7980~ - Inside source: true *** True Line Result 3200,8120,3210,7980 ** Processing line: ~ 3200,8330,3200,8120~ - Inside source: true *** True Line Result 3200,8330,3200,8120 ** Processing line: ~ 3160,8520,3200,8330~ - Inside source: true *** True Line Result 3160,8520,3200,8330 ** Processing line: ~ 2460,11100,2480,11020~ - Inside source: true *** True Line Result 2460,11100,2480,11020 ** Processing line: ~ 2200,11180,2460,11100~ - Inside source: true *** True Line Result 2200,11180,2460,11100 ** Processing line: ~ 1260,11350,1600,11320~ - Inside source: true *** True Line Result 1260,11350,1600,11320 ** Processing line: ~ 600,11430,930,11400~ - Inside source: true *** True Line Result 600,11430,930,11400 ** Processing line: ~ 180,11340,620,11430~ - Inside source: true *** True Line Result 180,11340,620,11430 ** Processing line: ~ 1600,11320,1910,11280~ - Inside source: true *** True Line Result 1600,11320,1910,11280 ** Processing line: ~ 1910,11280,2200,11180~ - Inside source: true *** True Line Result 1910,11280,2200,11180 ** Processing line: ~ 923.0029599285435,11398.99893503157,1264.002959928544,11351.99893503157~ - Inside source: true *** True Line Result 923.0029599285435,11398.99893503157,1264.002959928544,11351.99893503157 ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Platformer - The Little Probe - Data - level_lava.txt~ - Header detected. *** True Line Result *** True Line Result *** Platformer - The Little Probe - Data - level_lava.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_platformer/the_little_probe/data/level_lava.txt~ - Inside source: true *** True Line Result # ./samples/99_genre_platformer/the_little_probe/data/level_lava.txt ** Processing line: ~ 100,10740,500,10780~ - Inside source: true *** True Line Result 100,10740,500,10780 ** Processing line: ~ 500,10780,960,10760~ - Inside source: true *** True Line Result 500,10780,960,10760 ** Processing line: ~ 960,10760,1340,10760~ - Inside source: true *** True Line Result 960,10760,1340,10760 ** Processing line: ~ 1380,10760,1820,10780~ - Inside source: true *** True Line Result 1380,10760,1820,10780 ** Processing line: ~ 1820,10780,2240,10780~ - Inside source: true *** True Line Result 1820,10780,2240,10780 ** Processing line: ~ 2280,10780,2740,10740~ - Inside source: true *** True Line Result 2280,10780,2740,10740 ** Processing line: ~ 2740,10740,3000,10780~ - Inside source: true *** True Line Result 2740,10740,3000,10780 ** Processing line: ~ 3000,10780,3140,11020~ - Inside source: true *** True Line Result 3000,10780,3140,11020 ** Processing line: ~ -520,8820,-480,9160~ - Inside source: true *** True Line Result -520,8820,-480,9160 ** Processing line: ~ -520,8480,-520,8820~ - Inside source: true *** True Line Result -520,8480,-520,8820 ** Processing line: ~ -520,8480,-480,8180~ - Inside source: true *** True Line Result -520,8480,-480,8180 ** Processing line: ~ -480,8180,-200,8120~ - Inside source: true *** True Line Result -480,8180,-200,8120 ** Processing line: ~ -200,8120,100,8220~ - Inside source: true *** True Line Result -200,8120,100,8220 ** Processing line: ~ 100,8220,420,8240~ - Inside source: true *** True Line Result 100,8220,420,8240 ** Processing line: ~ 420,8240,760,8260~ - Inside source: true *** True Line Result 420,8240,760,8260 ** Processing line: ~ 760,8260,1140,8280~ - Inside source: true *** True Line Result 760,8260,1140,8280 ** Processing line: ~ 1140,8280,1500,8200~ - Inside source: true *** True Line Result 1140,8280,1500,8200 ** Processing line: ~ 1500,8200,1880,8240~ - Inside source: true *** True Line Result 1500,8200,1880,8240 ** Processing line: ~ 1880,8240,2240,8260~ - Inside source: true *** True Line Result 1880,8240,2240,8260 ** Processing line: ~ 2240,8260,2320,8480~ - Inside source: true *** True Line Result 2240,8260,2320,8480 ** Processing line: ~ 2320,8480,2380,8680~ - Inside source: true *** True Line Result 2320,8480,2380,8680 ** Processing line: ~ 2240,8860,2380,8680~ - Inside source: true *** True Line Result 2240,8860,2380,8680 ** Processing line: ~ 2240,9080,2240,8860~ - Inside source: true *** True Line Result 2240,9080,2240,8860 ** Processing line: ~ 2240,9080,2320,9260~ - Inside source: true *** True Line Result 2240,9080,2320,9260 ** Processing line: ~ 2320,9260,2480,9440~ - Inside source: true *** True Line Result 2320,9260,2480,9440 ** Processing line: ~ 2480,9440,2600,9640~ - Inside source: true *** True Line Result 2480,9440,2600,9640 ** Processing line: ~ 2480,9840,2600,9640~ - Inside source: true *** True Line Result 2480,9840,2600,9640 ** Processing line: ~ 2400,10020,2480,9840~ - Inside source: true *** True Line Result 2400,10020,2480,9840 ** Processing line: ~ 2240,10080,2400,10020~ - Inside source: true *** True Line Result 2240,10080,2400,10020 ** Processing line: ~ 1960,10080,2240,10080~ - Inside source: true *** True Line Result 1960,10080,2240,10080 ** Processing line: ~ 1720,10080,1960,10080~ - Inside source: true *** True Line Result 1720,10080,1960,10080 ** Processing line: ~ 1460,10080,1720,10080~ - Inside source: true *** True Line Result 1460,10080,1720,10080 ** Processing line: ~ 1180,10080,1420,10080~ - Inside source: true *** True Line Result 1180,10080,1420,10080 ** Processing line: ~ 900,10080,1180,10080~ - Inside source: true *** True Line Result 900,10080,1180,10080 ** Processing line: ~ 640,10080,900,10080~ - Inside source: true *** True Line Result 640,10080,900,10080 ** Processing line: ~ 640,10080,640,9900~ - Inside source: true *** True Line Result 640,10080,640,9900 ** Processing line: ~ 60,10520,100,10740~ - Inside source: true *** True Line Result 60,10520,100,10740 ** Processing line: ~ 40,10240,60,10520~ - Inside source: true *** True Line Result 40,10240,60,10520 ** Processing line: ~ 40,10240,40,9960~ - Inside source: true *** True Line Result 40,10240,40,9960 ** Processing line: ~ 40,9960,40,9680~ - Inside source: true *** True Line Result 40,9960,40,9680 ** Processing line: ~ 40,9680,40,9360~ - Inside source: true *** True Line Result 40,9680,40,9360 ** Processing line: ~ 40,9360,60,9080~ - Inside source: true *** True Line Result 40,9360,60,9080 ** Processing line: ~ 60,9080,100,8860~ - Inside source: true *** True Line Result 60,9080,100,8860 ** Processing line: ~ 100,8860,460,9040~ - Inside source: true *** True Line Result 100,8860,460,9040 ** Processing line: ~ 460,9040,760,9220~ - Inside source: true *** True Line Result 460,9040,760,9220 ** Processing line: ~ 760,9220,1140,9220~ - Inside source: true *** True Line Result 760,9220,1140,9220 ** Processing line: ~ 1140,9220,1720,9200~ - Inside source: true *** True Line Result 1140,9220,1720,9200 ** Processing line: ~ -660,11580,-600,11420~ - Inside source: true *** True Line Result -660,11580,-600,11420 ** Processing line: ~ -660,11800,-660,11580~ - Inside source: true *** True Line Result -660,11800,-660,11580 ** Processing line: ~ -660,12000,-660,11800~ - Inside source: true *** True Line Result -660,12000,-660,11800 ** Processing line: ~ -660,12000,-600,12220~ - Inside source: true *** True Line Result -660,12000,-600,12220 ** Processing line: ~ -600,12220,-600,12440~ - Inside source: true *** True Line Result -600,12220,-600,12440 ** Processing line: ~ -600,12440,-600,12640~ - Inside source: true *** True Line Result -600,12440,-600,12640 ** Processing line: ~ -600,11240,-260,11280~ - Inside source: true *** True Line Result -600,11240,-260,11280 ** Processing line: ~ -260,11280,100,11240~ - Inside source: true *** True Line Result -260,11280,100,11240 ** Processing line: ~ 9000,12360,9020,12400~ - Inside source: true *** True Line Result 9000,12360,9020,12400 ** Processing line: ~ 9020,12620,9020,12400~ - Inside source: true *** True Line Result 9020,12620,9020,12400 ** Processing line: ~ 9020,12840,9020,12620~ - Inside source: true *** True Line Result 9020,12840,9020,12620 ** Processing line: ~ 9020,13060,9020,12840~ - Inside source: true *** True Line Result 9020,13060,9020,12840 ** Processing line: ~ 9020,13060,9020,13240~ - Inside source: true *** True Line Result 9020,13060,9020,13240 ** Processing line: ~ 9020,13240,9020,13420~ - Inside source: true *** True Line Result 9020,13240,9020,13420 ** Processing line: ~ 9020,13420,9020,13600~ - Inside source: true *** True Line Result 9020,13420,9020,13600 ** Processing line: ~ 9020,13600,9020,13780~ - Inside source: true *** True Line Result 9020,13600,9020,13780 ** Processing line: ~ 8880,13900,9020,13780~ - Inside source: true *** True Line Result 8880,13900,9020,13780 ** Processing line: ~ 8560,13800,8880,13900~ - Inside source: true *** True Line Result 8560,13800,8880,13900 ** Processing line: ~ 8220,13780,8560,13800~ - Inside source: true *** True Line Result 8220,13780,8560,13800 ** Processing line: ~ 7860,13760,8220,13780~ - Inside source: true *** True Line Result 7860,13760,8220,13780 ** Processing line: ~ 7640,13780,7860,13760~ - Inside source: true *** True Line Result 7640,13780,7860,13760 ** Processing line: ~ 7360,13800,7640,13780~ - Inside source: true *** True Line Result 7360,13800,7640,13780 ** Processing line: ~ 7100,13800,7360,13800~ - Inside source: true *** True Line Result 7100,13800,7360,13800 ** Processing line: ~ 6540,13760,6800,13780~ - Inside source: true *** True Line Result 6540,13760,6800,13780 ** Processing line: ~ 6800,13780,7100,13800~ - Inside source: true *** True Line Result 6800,13780,7100,13800 ** Processing line: ~ 6280,13760,6540,13760~ - Inside source: true *** True Line Result 6280,13760,6540,13760 ** Processing line: ~ 5760,13760,6280,13760~ - Inside source: true *** True Line Result 5760,13760,6280,13760 ** Processing line: ~ 5220,13780,5760,13760~ - Inside source: true *** True Line Result 5220,13780,5760,13760 ** Processing line: ~ 4700,13760,5220,13780~ - Inside source: true *** True Line Result 4700,13760,5220,13780 ** Processing line: ~ 4200,13740,4700,13760~ - Inside source: true *** True Line Result 4200,13740,4700,13760 ** Processing line: ~ 3680,13720,4200,13740~ - Inside source: true *** True Line Result 3680,13720,4200,13740 ** Processing line: ~ 3140,13700,3680,13720~ - Inside source: true *** True Line Result 3140,13700,3680,13720 ** Processing line: ~ 2600,13680,3140,13700~ - Inside source: true *** True Line Result 2600,13680,3140,13700 ** Processing line: ~ 2040,13940,2600,13680~ - Inside source: true *** True Line Result 2040,13940,2600,13680 ** Processing line: ~ 1640,13940,2040,13940~ - Inside source: true *** True Line Result 1640,13940,2040,13940 ** Processing line: ~ 1200,13960,1640,13940~ - Inside source: true *** True Line Result 1200,13960,1640,13940 ** Processing line: ~ 840,14000,1200,13960~ - Inside source: true *** True Line Result 840,14000,1200,13960 ** Processing line: ~ 300,13960,840,14000~ - Inside source: true *** True Line Result 300,13960,840,14000 ** Processing line: ~ -200,13900,300,13960~ - Inside source: true *** True Line Result -200,13900,300,13960 ** Processing line: ~ -600,12840,-600,12640~ - Inside source: true *** True Line Result -600,12840,-600,12640 ** Processing line: ~ -600,13140,-600,12840~ - Inside source: true *** True Line Result -600,13140,-600,12840 ** Processing line: ~ -600,13140,-600,13420~ - Inside source: true *** True Line Result -600,13140,-600,13420 ** Processing line: ~ -600,13700,-600,13420~ - Inside source: true *** True Line Result -600,13700,-600,13420 ** Processing line: ~ -600,13700,-600,13820~ - Inside source: true *** True Line Result -600,13700,-600,13820 ** Processing line: ~ -600,13820,-200,13900~ - Inside source: true *** True Line Result -600,13820,-200,13900 ** Processing line: ~ -600,11240,-560,11000~ - Inside source: true *** True Line Result -600,11240,-560,11000 ** Processing line: ~ -560,11000,-480,10840~ - Inside source: true *** True Line Result -560,11000,-480,10840 ** Processing line: ~ -520,10660,-480,10840~ - Inside source: true *** True Line Result -520,10660,-480,10840 ** Processing line: ~ -520,10660,-520,10480~ - Inside source: true *** True Line Result -520,10660,-520,10480 ** Processing line: ~ -520,10480,-520,10300~ - Inside source: true *** True Line Result -520,10480,-520,10300 ** Processing line: ~ -520,10260,-480,10080~ - Inside source: true *** True Line Result -520,10260,-480,10080 ** Processing line: ~ -480,9880,-440,10060~ - Inside source: true *** True Line Result -480,9880,-440,10060 ** Processing line: ~ -520,9680,-480,9880~ - Inside source: true *** True Line Result -520,9680,-480,9880 ** Processing line: ~ -520,9680,-480,9400~ - Inside source: true *** True Line Result -520,9680,-480,9400 ** Processing line: ~ -480,9400,-480,9160~ - Inside source: true *** True Line Result -480,9400,-480,9160 ** Processing line: ~ 1820,9880,2140,9800~ - Inside source: true *** True Line Result 1820,9880,2140,9800 ** Processing line: ~ 1540,9880,1820,9880~ - Inside source: true *** True Line Result 1540,9880,1820,9880 ** Processing line: ~ 1200,9920,1500,9880~ - Inside source: true *** True Line Result 1200,9920,1500,9880 ** Processing line: ~ 900,9880,1200,9920~ - Inside source: true *** True Line Result 900,9880,1200,9920 ** Processing line: ~ 640,9900,840,9880~ - Inside source: true *** True Line Result 640,9900,840,9880 ** Processing line: ~ 2380,8760,2800,8760~ - Inside source: true *** True Line Result 2380,8760,2800,8760 ** Processing line: ~ 2800,8760,2840,8660~ - Inside source: true *** True Line Result 2800,8760,2840,8660 ** Processing line: ~ 2840,8660,2840,8420~ - Inside source: true *** True Line Result 2840,8660,2840,8420 ** Processing line: ~ 2840,8160,2840,8420~ - Inside source: true *** True Line Result 2840,8160,2840,8420 ** Processing line: ~ 2800,7900,2840,8160~ - Inside source: true *** True Line Result 2800,7900,2840,8160 ** Processing line: ~ 2800,7900,2800,7720~ - Inside source: true *** True Line Result 2800,7900,2800,7720 ** Processing line: ~ 2800,7540,2800,7720~ - Inside source: true *** True Line Result 2800,7540,2800,7720 ** Processing line: ~ 2800,7540,2800,7360~ - Inside source: true *** True Line Result 2800,7540,2800,7360 ** Processing line: ~ 2700,7220,2800,7360~ - Inside source: true *** True Line Result 2700,7220,2800,7360 ** Processing line: ~ 2400,7220,2700,7220~ - Inside source: true *** True Line Result 2400,7220,2700,7220 ** Processing line: ~ 2080,7240,2400,7220~ - Inside source: true *** True Line Result 2080,7240,2400,7220 ** Processing line: ~ 1760,7320,2080,7240~ - Inside source: true *** True Line Result 1760,7320,2080,7240 ** Processing line: ~ 1380,7360,1720,7320~ - Inside source: true *** True Line Result 1380,7360,1720,7320 ** Processing line: ~ 1040,7400,1340,7360~ - Inside source: true *** True Line Result 1040,7400,1340,7360 ** Processing line: ~ 640,7400,1000,7420~ - Inside source: true *** True Line Result 640,7400,1000,7420 ** Processing line: ~ 300,7380,640,7400~ - Inside source: true *** True Line Result 300,7380,640,7400 ** Processing line: ~ 0,7300,240,7380~ - Inside source: true *** True Line Result 0,7300,240,7380 ** Processing line: ~ -300,7180,-60,7300~ - Inside source: true *** True Line Result -300,7180,-60,7300 ** Processing line: ~ -380,6860,-360,7180~ - Inside source: true *** True Line Result -380,6860,-360,7180 ** Processing line: ~ -380,6880,-360,6700~ - Inside source: true *** True Line Result -380,6880,-360,6700 ** Processing line: ~ -360,6700,-260,6540~ - Inside source: true *** True Line Result -360,6700,-260,6540 ** Processing line: ~ -260,6540,0,6520~ - Inside source: true *** True Line Result -260,6540,0,6520 ** Processing line: ~ 0,6520,240,6640~ - Inside source: true *** True Line Result 0,6520,240,6640 ** Processing line: ~ 240,6640,460,6640~ - Inside source: true *** True Line Result 240,6640,460,6640 ** Processing line: ~ 460,6640,500,6480~ - Inside source: true *** True Line Result 460,6640,500,6480 ** Processing line: ~ 500,6260,500,6480~ - Inside source: true *** True Line Result 500,6260,500,6480 ** Processing line: ~ 460,6060,500,6260~ - Inside source: true *** True Line Result 460,6060,500,6260 ** Processing line: ~ 460,5860,460,6060~ - Inside source: true *** True Line Result 460,5860,460,6060 ** Processing line: ~ 460,5860,500,5640~ - Inside source: true *** True Line Result 460,5860,500,5640 ** Processing line: ~ 500,5640,540,5440~ - Inside source: true *** True Line Result 500,5640,540,5440 ** Processing line: ~ 540,5440,580,5220~ - Inside source: true *** True Line Result 540,5440,580,5220 ** Processing line: ~ 580,5220,580,5000~ - Inside source: true *** True Line Result 580,5220,580,5000 ** Processing line: ~ 580,4960,580,4740~ - Inside source: true *** True Line Result 580,4960,580,4740 ** Processing line: ~ 580,4740,960,4700~ - Inside source: true *** True Line Result 580,4740,960,4700 ** Processing line: ~ 960,4700,1140,4760~ - Inside source: true *** True Line Result 960,4700,1140,4760 ** Processing line: ~ 1140,4760,1420,4740~ - Inside source: true *** True Line Result 1140,4760,1420,4740 ** Processing line: ~ 1420,4740,1720,4700~ - Inside source: true *** True Line Result 1420,4740,1720,4700 ** Processing line: ~ 1720,4700,2000,4740~ - Inside source: true *** True Line Result 1720,4700,2000,4740 ** Processing line: ~ 2000,4740,2380,4760~ - Inside source: true *** True Line Result 2000,4740,2380,4760 ** Processing line: ~ 2380,4760,2700,4800~ - Inside source: true *** True Line Result 2380,4760,2700,4800 ** Processing line: ~ 1720,4600,1760,4300~ - Inside source: true *** True Line Result 1720,4600,1760,4300 ** Processing line: ~ 1760,4300,2200,4340~ - Inside source: true *** True Line Result 1760,4300,2200,4340 ** Processing line: ~ 2200,4340,2560,4340~ - Inside source: true *** True Line Result 2200,4340,2560,4340 ** Processing line: ~ 2560,4340,2740,4340~ - Inside source: true *** True Line Result 2560,4340,2740,4340 ** Processing line: ~ 2160,12580,2440,12400~ - Inside source: true *** True Line Result 2160,12580,2440,12400 ** Processing line: ~ 1820,12840,2160,12580~ - Inside source: true *** True Line Result 1820,12840,2160,12580 ** Processing line: ~ 1500,13080,1820,12840~ - Inside source: true *** True Line Result 1500,13080,1820,12840 ** Processing line: ~ 1140,13340,1500,13080~ - Inside source: true *** True Line Result 1140,13340,1500,13080 ** Processing line: ~ 1140,13340,1580,13220~ - Inside source: true *** True Line Result 1140,13340,1580,13220 ** Processing line: ~ 2110,13080,2520,13000~ - Inside source: true *** True Line Result 2110,13080,2520,13000 ** Processing line: ~ 2520,13000,2900,12800~ - Inside source: true *** True Line Result 2520,13000,2900,12800 ** Processing line: ~ 1580,13220,2110,13080~ - Inside source: true *** True Line Result 1580,13220,2110,13080 ** Processing line: ~ 2900,12800,3200,12680~ - Inside source: true *** True Line Result 2900,12800,3200,12680 ** Processing line: ~ 3200,12680,3440,12640~ - Inside source: true *** True Line Result 3200,12680,3440,12640 ** Processing line: ~ 3440,12640,3720,12460~ - Inside source: true *** True Line Result 3440,12640,3720,12460 ** Processing line: ~ 3720,12460,4040,12320~ - Inside source: true *** True Line Result 3720,12460,4040,12320 ** Processing line: ~ 4040,12320,4360,12200~ - Inside source: true *** True Line Result 4040,12320,4360,12200 ** Processing line: ~ 4360,11940,4380,12180~ - Inside source: true *** True Line Result 4360,11940,4380,12180 ** Processing line: ~ 4360,11700,4360,11940~ - Inside source: true *** True Line Result 4360,11700,4360,11940 ** Processing line: ~ 4360,11700,4540,11500~ - Inside source: true *** True Line Result 4360,11700,4540,11500 ** Processing line: ~ 4540,11500,4880,11540~ - Inside source: true *** True Line Result 4540,11500,4880,11540 ** Processing line: ~ 6000,11660,6280,11640~ - Inside source: true *** True Line Result 6000,11660,6280,11640 ** Processing line: ~ 5440,11600,5720,11610~ - Inside source: true *** True Line Result 5440,11600,5720,11610 ** Processing line: ~ 5720,11610,6000,11660~ - Inside source: true *** True Line Result 5720,11610,6000,11660 ** Processing line: ~ 6280,11640,6760,11720~ - Inside source: true *** True Line Result 6280,11640,6760,11720 ** Processing line: ~ 6760,11720,7060,11780~ - Inside source: true *** True Line Result 6760,11720,7060,11780 ** Processing line: ~ 7060,11780,7360,11810~ - Inside source: true *** True Line Result 7060,11780,7360,11810 ** Processing line: ~ 7360,11810,7640,11840~ - Inside source: true *** True Line Result 7360,11810,7640,11840 ** Processing line: ~ 7640,11840,8000,11830~ - Inside source: true *** True Line Result 7640,11840,8000,11830 ** Processing line: ~ 8000,11830,8320,11850~ - Inside source: true *** True Line Result 8000,11830,8320,11850 ** Processing line: ~ 8320,11850,8390,11800~ - Inside source: true *** True Line Result 8320,11850,8390,11800 ** Processing line: ~ 8330,11760,8390,11800~ - Inside source: true *** True Line Result 8330,11760,8390,11800 ** Processing line: ~ 8160,11760,8330,11760~ - Inside source: true *** True Line Result 8160,11760,8330,11760 ** Processing line: ~ 7910,11750,8160,11760~ - Inside source: true *** True Line Result 7910,11750,8160,11760 ** Processing line: ~ 7660,11740,7900,11750~ - Inside source: true *** True Line Result 7660,11740,7900,11750 ** Processing line: ~ 7400,11730,7660,11740~ - Inside source: true *** True Line Result 7400,11730,7660,11740 ** Processing line: ~ 7160,11680,7400,11730~ - Inside source: true *** True Line Result 7160,11680,7400,11730 ** Processing line: ~ 7080,11570,7160,11680~ - Inside source: true *** True Line Result 7080,11570,7160,11680 ** Processing line: ~ 7080,11570,7100,11350~ - Inside source: true *** True Line Result 7080,11570,7100,11350 ** Processing line: ~ 7100,11350,7440,11280~ - Inside source: true *** True Line Result 7100,11350,7440,11280 ** Processing line: ~ 7440,11280,7940,11280~ - Inside source: true *** True Line Result 7440,11280,7940,11280 ** Processing line: ~ 7960,11280,8360,11280~ - Inside source: true *** True Line Result 7960,11280,8360,11280 ** Processing line: ~ 5840,11540,6650,11170~ - Inside source: true *** True Line Result 5840,11540,6650,11170 ** Processing line: ~ 4880,11540,5440,11600~ - Inside source: true *** True Line Result 4880,11540,5440,11600 ** Processing line: ~ 3410,11830,3420,11300~ - Inside source: true *** True Line Result 3410,11830,3420,11300 ** Processing line: ~ 3410,11260,3520,10920~ - Inside source: true *** True Line Result 3410,11260,3520,10920 ** Processing line: ~ 3520,10590,3520,10920~ - Inside source: true *** True Line Result 3520,10590,3520,10920 ** Processing line: ~ 3520,10590,3540,10260~ - Inside source: true *** True Line Result 3520,10590,3540,10260 ** Processing line: ~ 3520,9900,3540,10240~ - Inside source: true *** True Line Result 3520,9900,3540,10240 ** Processing line: ~ 3520,9900,3640,9590~ - Inside source: true *** True Line Result 3520,9900,3640,9590 ** Processing line: ~ 3640,9570,4120,9590~ - Inside source: true *** True Line Result 3640,9570,4120,9590 ** Processing line: ~ 4140,9590,4600,9680~ - Inside source: true *** True Line Result 4140,9590,4600,9680 ** Processing line: ~ 4620,9680,5030,9730~ - Inside source: true *** True Line Result 4620,9680,5030,9730 ** Processing line: ~ 5120,9750,5520,9800~ - Inside source: true *** True Line Result 5120,9750,5520,9800 ** Processing line: ~ 5620,9820,6080,9800~ - Inside source: true *** True Line Result 5620,9820,6080,9800 ** Processing line: ~ 6130,9810,6580,9820~ - Inside source: true *** True Line Result 6130,9810,6580,9820 ** Processing line: ~ 6640,9820,6800,9700~ - Inside source: true *** True Line Result 6640,9820,6800,9700 ** Processing line: ~ 6780,9400,6800,9700~ - Inside source: true *** True Line Result 6780,9400,6800,9700 ** Processing line: ~ 6780,9400,6840,9140~ - Inside source: true *** True Line Result 6780,9400,6840,9140 ** Processing line: ~ 6820,8860,6840,9120~ - Inside source: true *** True Line Result 6820,8860,6840,9120 ** Processing line: ~ 6780,8600,6820,8830~ - Inside source: true *** True Line Result 6780,8600,6820,8830 ** Processing line: ~ 6720,8350,6780,8570~ - Inside source: true *** True Line Result 6720,8350,6780,8570 ** Processing line: ~ 6480,8340,6720,8320~ - Inside source: true *** True Line Result 6480,8340,6720,8320 ** Processing line: ~ 6260,8400,6480,8340~ - Inside source: true *** True Line Result 6260,8400,6480,8340 ** Processing line: ~ 6050,8580,6240,8400~ - Inside source: true *** True Line Result 6050,8580,6240,8400 ** Processing line: ~ 5760,8630,6040,8590~ - Inside source: true *** True Line Result 5760,8630,6040,8590 ** Processing line: ~ 5520,8690,5740,8630~ - Inside source: true *** True Line Result 5520,8690,5740,8630 ** Processing line: ~ 5120,8690,5450,8700~ - Inside source: true *** True Line Result 5120,8690,5450,8700 ** Processing line: ~ 4570,8670,5080,8690~ - Inside source: true *** True Line Result 4570,8670,5080,8690 ** Processing line: ~ 4020,8610,4540,8670~ - Inside source: true *** True Line Result 4020,8610,4540,8670 ** Processing line: ~ 3540,8480,4020,8610~ - Inside source: true *** True Line Result 3540,8480,4020,8610 ** Processing line: ~ 3520,8230,3520,8480~ - Inside source: true *** True Line Result 3520,8230,3520,8480 ** Processing line: ~ 3520,7930,3520,8230~ - Inside source: true *** True Line Result 3520,7930,3520,8230 ** Processing line: ~ 3520,7930,3540,7630~ - Inside source: true *** True Line Result 3520,7930,3540,7630 ** Processing line: ~ 3480,7320,3540,7610~ - Inside source: true *** True Line Result 3480,7320,3540,7610 ** Processing line: ~ 3480,7280,3500,7010~ - Inside source: true *** True Line Result 3480,7280,3500,7010 ** Processing line: ~ 3500,6980,3680,6850~ - Inside source: true *** True Line Result 3500,6980,3680,6850 ** Processing line: ~ 3680,6850,4220,6840~ - Inside source: true *** True Line Result 3680,6850,4220,6840 ** Processing line: ~ 4230,6840,4760,6850~ - Inside source: true *** True Line Result 4230,6840,4760,6850 ** Processing line: ~ 4780,6850,5310,6860~ - Inside source: true *** True Line Result 4780,6850,5310,6860 ** Processing line: ~ 5310,6860,5720,6940~ - Inside source: true *** True Line Result 5310,6860,5720,6940 ** Processing line: ~ 5720,6940,5880,7250~ - Inside source: true *** True Line Result 5720,6940,5880,7250 ** Processing line: ~ 5880,7250,5900,7520~ - Inside source: true *** True Line Result 5880,7250,5900,7520 ** Processing line: ~ 100,11240,440,11300~ - Inside source: true *** True Line Result 100,11240,440,11300 ** Processing line: ~ 440,11300,760,11330~ - Inside source: true *** True Line Result 440,11300,760,11330 ** Processing line: ~ 1480,11280,1840,11230~ - Inside source: true *** True Line Result 1480,11280,1840,11230 ** Processing line: ~ 2200,11130,2360,11090~ - Inside source: true *** True Line Result 2200,11130,2360,11090 ** Processing line: ~ 1840,11230,2200,11130~ - Inside source: true *** True Line Result 1840,11230,2200,11130 ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Choose Your Own Adventure - decision.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Choose Your Own Adventure - decision.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/choose_your_own_adventure/app/decision.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/choose_your_own_adventure/app/decision.rb ** Processing line: ~ # Hey there! Welcome to Four Decisions. Here is how you~ - Inside source: true *** True Line Result # Hey there! Welcome to Four Decisions. Here is how you ** Processing line: ~ # create your decision tree. Remove =being and =end from the text to~ - Inside source: true *** True Line Result # create your decision tree. Remove =being and =end from the text to ** Processing line: ~ # enable the game (just save the file). Change stuff and see what happens!~ - Inside source: true *** True Line Result # enable the game (just save the file). Change stuff and see what happens! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def game~ - Inside source: true *** True Line Result def game ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ starting_decision: :stormy_night,~ - Inside source: true *** True Line Result starting_decision: :stormy_night, ** Processing line: ~ decisions: {~ - Inside source: true *** True Line Result decisions: { ** Processing line: ~ stormy_night: {~ - Inside source: true *** True Line Result stormy_night: { ** Processing line: ~ description: 'It was a dark and stormy night. (storyline located in decision.rb)',~ - Inside source: true *** True Line Result description: 'It was a dark and stormy night. (storyline located in decision.rb)', ** Processing line: ~ option_one: {~ - Inside source: true *** True Line Result option_one: { ** Processing line: ~ description: 'Go to sleep.',~ - Inside source: true *** True Line Result description: 'Go to sleep.', ** Processing line: ~ decision: :nap~ - Inside source: true *** True Line Result decision: :nap ** Processing line: ~ },~ - Inside source: true *** True Line Result }, ** Processing line: ~ option_two: {~ - Inside source: true *** True Line Result option_two: { ** Processing line: ~ description: 'Watch a movie.',~ - Inside source: true *** True Line Result description: 'Watch a movie.', ** Processing line: ~ decision: :movie~ - Inside source: true *** True Line Result decision: :movie ** Processing line: ~ },~ - Inside source: true *** True Line Result }, ** Processing line: ~ option_three: {~ - Inside source: true *** True Line Result option_three: { ** Processing line: ~ description: 'Go outside.',~ - Inside source: true *** True Line Result description: 'Go outside.', ** Processing line: ~ decision: :go_outside~ - Inside source: true *** True Line Result decision: :go_outside ** Processing line: ~ },~ - Inside source: true *** True Line Result }, ** Processing line: ~ option_four: {~ - Inside source: true *** True Line Result option_four: { ** Processing line: ~ description: 'Get a snack.',~ - Inside source: true *** True Line Result description: 'Get a snack.', ** Processing line: ~ decision: :get_a_snack~ - Inside source: true *** True Line Result decision: :get_a_snack ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ },~ - Inside source: true *** True Line Result }, ** Processing line: ~ nap: {~ - Inside source: true *** True Line Result nap: { ** Processing line: ~ description: 'You took a nap. The end.',~ - Inside source: true *** True Line Result description: 'You took a nap. The end.', ** Processing line: ~ option_one: {~ - Inside source: true *** True Line Result option_one: { ** Processing line: ~ description: 'Start over.',~ - Inside source: true *** True Line Result description: 'Start over.', ** Processing line: ~ decision: :stormy_night~ - Inside source: true *** True Line Result decision: :stormy_night ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Choose Your Own Adventure - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Choose Your Own Adventure - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/choose_your_own_adventure/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/choose_your_own_adventure/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - Hashes: Collection of unique keys and their corresponding values. The values can be found~ - Inside source: true *** True Line Result - Hashes: Collection of unique keys and their corresponding values. The values can be found ** Processing line: ~ using their keys.~ - Inside source: true *** True Line Result using their keys. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ In this sample app, the decisions needed for the game are stored in a hash. In fact, the~ - Inside source: true *** True Line Result In this sample app, the decisions needed for the game are stored in a hash. In fact, the ** Processing line: ~ decision.rb file contains hashes inside of other hashes!~ - Inside source: true *** True Line Result decision.rb file contains hashes inside of other hashes! ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Each option is a key in the first hash, but also contains a hash (description and~ - Inside source: true *** True Line Result Each option is a key in the first hash, but also contains a hash (description and ** Processing line: ~ decision being its keys) as its value.~ - Inside source: true *** True Line Result decision being its keys) as its value. ** Processing line: ~ Go into the decision.rb file and take a look before diving into the code below.~ - Inside source: true *** True Line Result Go into the decision.rb file and take a look before diving into the code below. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ - Inside source: true *** True Line Result - args.outputs.labels: An array. The values generate a label. ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ - Inside source: true *** True Line Result For more information about labels, go to mygame/documentation/02-labels.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.keyboard.key_down.KEY: Determines if a key is in the down state or pressed down.~ - Inside source: true *** True Line Result - args.keyboard.key_down.KEY: Determines if a key is in the down state or pressed down. ** Processing line: ~ For more information about the keyboard, go to mygame/documentation/06-keyboard.md.~ - Inside source: true *** True Line Result For more information about the keyboard, go to mygame/documentation/06-keyboard.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - String interpolation: uses #{} syntax; everything between the #{ and the } is evaluated~ - Inside source: true *** True Line Result - String interpolation: uses #{} syntax; everything between the #{ and the } is evaluated ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ - Inside source: true *** True Line Result as Ruby code, and the placeholder is replaced with its corresponding value or result. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app provides users with a story and multiple decisions that they can choose to make.~ - Inside source: true *** True Line Result # This sample app provides users with a story and multiple decisions that they can choose to make. ** Processing line: ~ # Users can make a decision using their keyboard, and the story will move forward based on user choices.~ - Inside source: true *** True Line Result # Users can make a decision using their keyboard, and the story will move forward based on user choices. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The decisions available to users are stored in the decision.rb file.~ - Inside source: true *** True Line Result # The decisions available to users are stored in the decision.rb file. ** Processing line: ~ # We must have access to it for the game to function properly.~ - Inside source: true *** True Line Result # We must have access to it for the game to function properly. ** Processing line: ~ GAME_FILE = 'app/decision.rb' # found in app folder~ - Inside source: true *** True Line Result GAME_FILE = 'app/decision.rb' # found in app folder ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ require GAME_FILE # require used to load another file, import class/method definitions~ - Inside source: true *** True Line Result require GAME_FILE # require used to load another file, import class/method definitions ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Instructions are given using labels to users if they have not yet set up their story in the decision.rb file.~ - Inside source: true *** True Line Result # Instructions are given using labels to users if they have not yet set up their story in the decision.rb file. ** Processing line: ~ # Otherwise, the game is run.~ - Inside source: true *** True Line Result # Otherwise, the game is run. ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ if !args.state.loaded && !respond_to?(:game) # if game is not loaded and not responding to game symbol's method~ - Inside source: true *** True Line Result if !args.state.loaded && !respond_to?(:game) # if game is not loaded and not responding to game symbol's method ** Processing line: ~ args.labels << [640, 370, 'Hey there! Welcome to Four Decisions.', 0, 1] # a welcome label is shown~ - Inside source: true *** True Line Result args.labels << [640, 370, 'Hey there! Welcome to Four Decisions.', 0, 1] # a welcome label is shown ** Processing line: ~ args.labels << [640, 340, 'Go to the file called decision.rb and tell me your story.', 0, 1]~ - Inside source: true *** True Line Result args.labels << [640, 340, 'Go to the file called decision.rb and tell me your story.', 0, 1] ** Processing line: ~ elsif respond_to?(:game) # otherwise, if responds to game~ - Inside source: true *** True Line Result elsif respond_to?(:game) # otherwise, if responds to game ** Processing line: ~ args.state.loaded = true~ - Inside source: true *** True Line Result args.state.loaded = true ** Processing line: ~ tick_game args # calls tick_game method, runs game~ - Inside source: true *** True Line Result tick_game args # calls tick_game method, runs game ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.tick_count.mod_zero? 60 # update every 60 frames~ - Inside source: true *** True Line Result if args.state.tick_count.mod_zero? 60 # update every 60 frames ** Processing line: ~ t = args.gtk.ffi_file.mtime GAME_FILE # mtime returns modification time for named file~ - Inside source: true *** True Line Result t = args.gtk.ffi_file.mtime GAME_FILE # mtime returns modification time for named file ** Processing line: ~ if t != args.state.mtime~ - Inside source: true *** True Line Result if t != args.state.mtime ** Processing line: ~ args.state.mtime = t~ - Inside source: true *** True Line Result args.state.mtime = t ** Processing line: ~ require GAME_FILE # require used to load file~ - Inside source: true *** True Line Result require GAME_FILE # require used to load file ** Processing line: ~ args.state.game_definition = nil # game definition and decision are empty~ - Inside source: true *** True Line Result args.state.game_definition = nil # game definition and decision are empty ** Processing line: ~ args.state.decision_id = nil~ - Inside source: true *** True Line Result args.state.decision_id = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Runs methods needed for game to function properly~ - Inside source: true *** True Line Result # Runs methods needed for game to function properly ** Processing line: ~ # Creates a rectangular border around the screen~ - Inside source: true *** True Line Result # Creates a rectangular border around the screen ** Processing line: ~ def tick_game args~ - Inside source: true *** True Line Result def tick_game args ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ args.borders << args.grid.rect~ - Inside source: true *** True Line Result args.borders << args.grid.rect ** Processing line: ~ render_decision args~ - Inside source: true *** True Line Result render_decision args ** Processing line: ~ process_inputs args~ - Inside source: true *** True Line Result process_inputs args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets default values and uses decision.rb file to define game and decision_id~ - Inside source: true *** True Line Result # Sets default values and uses decision.rb file to define game and decision_id ** Processing line: ~ # variable using the starting decision~ - Inside source: true *** True Line Result # variable using the starting decision ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ args.state.game_definition ||= game~ - Inside source: true *** True Line Result args.state.game_definition ||= game ** Processing line: ~ args.state.decision_id ||= args.state.game_definition[:starting_decision]~ - Inside source: true *** True Line Result args.state.decision_id ||= args.state.game_definition[:starting_decision] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs the possible decision descriptions the user can choose onto the screen~ - Inside source: true *** True Line Result # Outputs the possible decision descriptions the user can choose onto the screen ** Processing line: ~ # as well as what key to press on their keyboard to make their decision~ - Inside source: true *** True Line Result # as well as what key to press on their keyboard to make their decision ** Processing line: ~ def render_decision args~ - Inside source: true *** True Line Result def render_decision args ** Processing line: ~ decision = current_decision args~ - Inside source: true *** True Line Result decision = current_decision args ** Processing line: ~ # text is either the value of decision's description key or warning that no description exists~ - Inside source: true *** True Line Result # text is either the value of decision's description key or warning that no description exists ** Processing line: ~ args.labels << [640, 360, decision[:description] || "No definition found for #{args.state.decision_id}. Please update decision.rb.", 0, 1] # uses string interpolation~ - Inside source: true *** True Line Result args.labels << [640, 360, decision[:description] || "No definition found for #{args.state.decision_id}. Please update decision.rb.", 0, 1] # uses string interpolation ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # All decisions are stored in a hash~ - Inside source: true *** True Line Result # All decisions are stored in a hash ** Processing line: ~ # The descriptions output onto the screen are the values for the description keys of the hash.~ - Inside source: true *** True Line Result # The descriptions output onto the screen are the values for the description keys of the hash. ** Processing line: ~ if decision[:option_one]~ - Inside source: true *** True Line Result if decision[:option_one] ** Processing line: ~ args.labels << [10, 360, decision[:option_one][:description], 0, 0] # option one's description label~ - Inside source: true *** True Line Result args.labels << [10, 360, decision[:option_one][:description], 0, 0] # option one's description label ** Processing line: ~ args.labels << [10, 335, "(Press 'left' on the keyboard to select this decision)", -5, 0] # label of what key to press to select the decision~ - Inside source: true *** True Line Result args.labels << [10, 335, "(Press 'left' on the keyboard to select this decision)", -5, 0] # label of what key to press to select the decision ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if decision[:option_two]~ - Inside source: true *** True Line Result if decision[:option_two] ** Processing line: ~ args.labels << [1270, 360, decision[:option_two][:description], 0, 2] # option two's description~ - Inside source: true *** True Line Result args.labels << [1270, 360, decision[:option_two][:description], 0, 2] # option two's description ** Processing line: ~ args.labels << [1270, 335, "(Press 'right' on the keyboard to select this decision)", -5, 2]~ - Inside source: true *** True Line Result args.labels << [1270, 335, "(Press 'right' on the keyboard to select this decision)", -5, 2] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if decision[:option_three]~ - Inside source: true *** True Line Result if decision[:option_three] ** Processing line: ~ args.labels << [640, 45, decision[:option_three][:description], 0, 1] # option three's description~ - Inside source: true *** True Line Result args.labels << [640, 45, decision[:option_three][:description], 0, 1] # option three's description ** Processing line: ~ args.labels << [640, 20, "(Press 'down' on the keyboard to select this decision)", -5, 1]~ - Inside source: true *** True Line Result args.labels << [640, 20, "(Press 'down' on the keyboard to select this decision)", -5, 1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if decision[:option_four]~ - Inside source: true *** True Line Result if decision[:option_four] ** Processing line: ~ args.labels << [640, 700, decision[:option_four][:description], 0, 1] # option four's description~ - Inside source: true *** True Line Result args.labels << [640, 700, decision[:option_four][:description], 0, 1] # option four's description ** Processing line: ~ args.labels << [640, 675, "(Press 'up' on the keyboard to select this decision)", -5, 1]~ - Inside source: true *** True Line Result args.labels << [640, 675, "(Press 'up' on the keyboard to select this decision)", -5, 1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Uses keyboard input from the user to make a decision~ - Inside source: true *** True Line Result # Uses keyboard input from the user to make a decision ** Processing line: ~ # Assigns the decision as the value of the decision_id variable~ - Inside source: true *** True Line Result # Assigns the decision as the value of the decision_id variable ** Processing line: ~ def process_inputs args~ - Inside source: true *** True Line Result def process_inputs args ** Processing line: ~ decision = current_decision args # calls current_decision method~ - Inside source: true *** True Line Result decision = current_decision args # calls current_decision method ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.keyboard.key_down.left! && decision[:option_one] # if left key pressed and option one exists~ - Inside source: true *** True Line Result if args.keyboard.key_down.left! && decision[:option_one] # if left key pressed and option one exists ** Processing line: ~ args.state.decision_id = decision[:option_one][:decision] # value of option one's decision hash key is set to decision_id~ - Inside source: true *** True Line Result args.state.decision_id = decision[:option_one][:decision] # value of option one's decision hash key is set to decision_id ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.keyboard.key_down.right! && decision[:option_two] # if right key pressed and option two exists~ - Inside source: true *** True Line Result if args.keyboard.key_down.right! && decision[:option_two] # if right key pressed and option two exists ** Processing line: ~ args.state.decision_id = decision[:option_two][:decision] # value of option two's decision hash key is set to decision_id~ - Inside source: true *** True Line Result args.state.decision_id = decision[:option_two][:decision] # value of option two's decision hash key is set to decision_id ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.keyboard.key_down.down! && decision[:option_three] # if down key pressed and option three exists~ - Inside source: true *** True Line Result if args.keyboard.key_down.down! && decision[:option_three] # if down key pressed and option three exists ** Processing line: ~ args.state.decision_id = decision[:option_three][:decision] # value of option three's decision hash key is set to decision_id~ - Inside source: true *** True Line Result args.state.decision_id = decision[:option_three][:decision] # value of option three's decision hash key is set to decision_id ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.keyboard.key_down.up! && decision[:option_four] # if up key pressed and option four exists~ - Inside source: true *** True Line Result if args.keyboard.key_down.up! && decision[:option_four] # if up key pressed and option four exists ** Processing line: ~ args.state.decision_id = decision[:option_four][:decision] # value of option four's decision hash key is set to decision_id~ - Inside source: true *** True Line Result args.state.decision_id = decision[:option_four][:decision] # value of option four's decision hash key is set to decision_id ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Uses decision_id's value to keep track of current decision being made~ - Inside source: true *** True Line Result # Uses decision_id's value to keep track of current decision being made ** Processing line: ~ def current_decision args~ - Inside source: true *** True Line Result def current_decision args ** Processing line: ~ args.state.game_definition[:decisions][args.state.decision_id] || {} # either has value or is empty~ - Inside source: true *** True Line Result args.state.game_definition[:decisions][args.state.decision_id] || {} # either has value or is empty ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Resets the game.~ - Inside source: true *** True Line Result # Resets the game. ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Return Of Serenity - lowrez_simulator.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Return Of Serenity - lowrez_simulator.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/lowrez_simulator.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/return_of_serenity/app/lowrez_simulator.rb ** Processing line: ~ ###################################################################################~ - Inside source: true *** True Line Result ################################################################################### ** Processing line: ~ # YOU CAN PLAY AROUND WITH THE CODE BELOW, BUT USE CAUTION AS THIS IS WHAT EMULATES~ - Inside source: true *** True Line Result # YOU CAN PLAY AROUND WITH THE CODE BELOW, BUT USE CAUTION AS THIS IS WHAT EMULATES ** Processing line: ~ # THE 64x64 CANVAS.~ - Inside source: true *** True Line Result # THE 64x64 CANVAS. ** Processing line: ~ ###################################################################################~ - Inside source: true *** True Line Result ################################################################################### ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ TINY_RESOLUTION = 64~ - Inside source: true *** True Line Result TINY_RESOLUTION = 64 ** Processing line: ~ TINY_SCALE = 720.fdiv(TINY_RESOLUTION + 5)~ - Inside source: true *** True Line Result TINY_SCALE = 720.fdiv(TINY_RESOLUTION + 5) ** Processing line: ~ CENTER_OFFSET = 10~ - Inside source: true *** True Line Result CENTER_OFFSET = 10 ** Processing line: ~ EMULATED_FONT_SIZE = 20~ - Inside source: true *** True Line Result EMULATED_FONT_SIZE = 20 ** Processing line: ~ EMULATED_FONT_X_ZERO = 0~ - Inside source: true *** True Line Result EMULATED_FONT_X_ZERO = 0 ** Processing line: ~ EMULATED_FONT_Y_ZERO = 46~ - Inside source: true *** True Line Result EMULATED_FONT_Y_ZERO = 46 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ sprites = []~ - Inside source: true *** True Line Result sprites = [] ** Processing line: ~ labels = []~ - Inside source: true *** True Line Result labels = [] ** Processing line: ~ borders = []~ - Inside source: true *** True Line Result borders = [] ** Processing line: ~ solids = []~ - Inside source: true *** True Line Result solids = [] ** Processing line: ~ mouse = emulate_lowrez_mouse args~ - Inside source: true *** True Line Result mouse = emulate_lowrez_mouse args ** Processing line: ~ args.state.show_gridlines = false~ - Inside source: true *** True Line Result args.state.show_gridlines = false ** Processing line: ~ lowrez_tick args, sprites, labels, borders, solids, mouse~ - Inside source: true *** True Line Result lowrez_tick args, sprites, labels, borders, solids, mouse ** Processing line: ~ render_gridlines_if_needed args~ - Inside source: true *** True Line Result render_gridlines_if_needed args ** Processing line: ~ render_mouse_crosshairs args, mouse~ - Inside source: true *** True Line Result render_mouse_crosshairs args, mouse ** Processing line: ~ emulate_lowrez_scene args, sprites, labels, borders, solids, mouse~ - Inside source: true *** True Line Result emulate_lowrez_scene args, sprites, labels, borders, solids, mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def emulate_lowrez_mouse args~ - Inside source: true *** True Line Result def emulate_lowrez_mouse args ** Processing line: ~ args.state.new_entity_strict(:lowrez_mouse) do |m|~ - Inside source: true *** True Line Result args.state.new_entity_strict(:lowrez_mouse) do |m| ** Processing line: ~ m.x = args.mouse.x.idiv(TINY_SCALE) - CENTER_OFFSET.idiv(TINY_SCALE) - 1~ - Inside source: true *** True Line Result m.x = args.mouse.x.idiv(TINY_SCALE) - CENTER_OFFSET.idiv(TINY_SCALE) - 1 ** Processing line: ~ m.y = args.mouse.y.idiv(TINY_SCALE)~ - Inside source: true *** True Line Result m.y = args.mouse.y.idiv(TINY_SCALE) ** Processing line: ~ if args.mouse.click~ - Inside source: true *** True Line Result if args.mouse.click ** Processing line: ~ m.click = [~ - Inside source: true *** True Line Result m.click = [ ** Processing line: ~ args.mouse.click.point.x.idiv(TINY_SCALE) - CENTER_OFFSET.idiv(TINY_SCALE) - 1,~ - Inside source: true *** True Line Result args.mouse.click.point.x.idiv(TINY_SCALE) - CENTER_OFFSET.idiv(TINY_SCALE) - 1, ** Processing line: ~ args.mouse.click.point.y.idiv(TINY_SCALE)~ - Inside source: true *** True Line Result args.mouse.click.point.y.idiv(TINY_SCALE) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ m.down = m.click~ - Inside source: true *** True Line Result m.down = m.click ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ m.click = nil~ - Inside source: true *** True Line Result m.click = nil ** Processing line: ~ m.down = nil~ - Inside source: true *** True Line Result m.down = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.mouse.up~ - Inside source: true *** True Line Result if args.mouse.up ** Processing line: ~ m.up = [~ - Inside source: true *** True Line Result m.up = [ ** Processing line: ~ args.mouse.up.point.x.idiv(TINY_SCALE) - CENTER_OFFSET.idiv(TINY_SCALE) - 1,~ - Inside source: true *** True Line Result args.mouse.up.point.x.idiv(TINY_SCALE) - CENTER_OFFSET.idiv(TINY_SCALE) - 1, ** Processing line: ~ args.mouse.up.point.y.idiv(TINY_SCALE)~ - Inside source: true *** True Line Result args.mouse.up.point.y.idiv(TINY_SCALE) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ m.up = nil~ - Inside source: true *** True Line Result m.up = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_mouse_crosshairs args, mouse~ - Inside source: true *** True Line Result def render_mouse_crosshairs args, mouse ** Processing line: ~ return unless args.state.show_gridlines~ - Inside source: true *** True Line Result return unless args.state.show_gridlines ** Processing line: ~ args.labels << [10, 25, "mouse: #{mouse.x} #{mouse.y}", 255, 255, 255]~ - Inside source: true *** True Line Result args.labels << [10, 25, "mouse: #{mouse.x} #{mouse.y}", 255, 255, 255] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def emulate_lowrez_scene args, sprites, labels, borders, solids, mouse~ - Inside source: true *** True Line Result def emulate_lowrez_scene args, sprites, labels, borders, solids, mouse ** Processing line: ~ args.render_target(:lowrez).solids << [0, 0, 1280, 720]~ - Inside source: true *** True Line Result args.render_target(:lowrez).solids << [0, 0, 1280, 720] ** Processing line: ~ args.render_target(:lowrez).sprites << sprites~ - Inside source: true *** True Line Result args.render_target(:lowrez).sprites << sprites ** Processing line: ~ args.render_target(:lowrez).borders << borders~ - Inside source: true *** True Line Result args.render_target(:lowrez).borders << borders ** Processing line: ~ args.render_target(:lowrez).solids << solids~ - Inside source: true *** True Line Result args.render_target(:lowrez).solids << solids ** Processing line: ~ args.outputs.primitives << labels.map do |l|~ - Inside source: true *** True Line Result args.outputs.primitives << labels.map do |l| ** Processing line: ~ as_label = l.label~ - Inside source: true *** True Line Result as_label = l.label ** Processing line: ~ l.text.each_char.each_with_index.map do |char, i|~ - Inside source: true *** True Line Result l.text.each_char.each_with_index.map do |char, i| ** Processing line: ~ [CENTER_OFFSET + EMULATED_FONT_X_ZERO + (as_label.x * TINY_SCALE) + i * 5 * TINY_SCALE,~ - Inside source: true *** True Line Result [CENTER_OFFSET + EMULATED_FONT_X_ZERO + (as_label.x * TINY_SCALE) + i * 5 * TINY_SCALE, ** Processing line: ~ EMULATED_FONT_Y_ZERO + (as_label.y * TINY_SCALE), char,~ - Inside source: true *** True Line Result EMULATED_FONT_Y_ZERO + (as_label.y * TINY_SCALE), char, ** Processing line: ~ EMULATED_FONT_SIZE, 0, as_label.r, as_label.g, as_label.b, as_label.a, 'fonts/dragonruby-gtk-4x4.ttf'].label~ - Inside source: true *** True Line Result EMULATED_FONT_SIZE, 0, as_label.r, as_label.g, as_label.b, as_label.a, 'fonts/dragonruby-gtk-4x4.ttf'].label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.sprites << [CENTER_OFFSET, 0, 1280 * TINY_SCALE, 720 * TINY_SCALE, :lowrez]~ - Inside source: true *** True Line Result args.sprites << [CENTER_OFFSET, 0, 1280 * TINY_SCALE, 720 * TINY_SCALE, :lowrez] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_gridlines_if_needed args~ - Inside source: true *** True Line Result def render_gridlines_if_needed args ** Processing line: ~ if args.state.show_gridlines && args.static_lines.length == 0~ - Inside source: true *** True Line Result if args.state.show_gridlines && args.static_lines.length == 0 ** Processing line: ~ args.static_lines << 65.times.map do |i|~ - Inside source: true *** True Line Result args.static_lines << 65.times.map do |i| ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [CENTER_OFFSET + i * TINY_SCALE + 1, 0,~ - Inside source: true *** True Line Result [CENTER_OFFSET + i * TINY_SCALE + 1, 0, ** Processing line: ~ CENTER_OFFSET + i * TINY_SCALE + 1, 720, 128, 128, 128],~ - Inside source: true *** True Line Result CENTER_OFFSET + i * TINY_SCALE + 1, 720, 128, 128, 128], ** Processing line: ~ [CENTER_OFFSET + i * TINY_SCALE, 0,~ - Inside source: true *** True Line Result [CENTER_OFFSET + i * TINY_SCALE, 0, ** Processing line: ~ CENTER_OFFSET + i * TINY_SCALE, 720, 128, 128, 128],~ - Inside source: true *** True Line Result CENTER_OFFSET + i * TINY_SCALE, 720, 128, 128, 128], ** Processing line: ~ [CENTER_OFFSET, 0 + i * TINY_SCALE,~ - Inside source: true *** True Line Result [CENTER_OFFSET, 0 + i * TINY_SCALE, ** Processing line: ~ CENTER_OFFSET + 720, 0 + i * TINY_SCALE, 128, 128, 128],~ - Inside source: true *** True Line Result CENTER_OFFSET + 720, 0 + i * TINY_SCALE, 128, 128, 128], ** Processing line: ~ [CENTER_OFFSET, 1 + i * TINY_SCALE,~ - Inside source: true *** True Line Result [CENTER_OFFSET, 1 + i * TINY_SCALE, ** Processing line: ~ CENTER_OFFSET + 720, 1 + i * TINY_SCALE, 128, 128, 128]~ - Inside source: true *** True Line Result CENTER_OFFSET + 720, 1 + i * TINY_SCALE, 128, 128, 128] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif !args.state.show_gridlines~ - Inside source: true *** True Line Result elsif !args.state.show_gridlines ** Processing line: ~ args.static_lines.clear~ - Inside source: true *** True Line Result args.static_lines.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Return Of Serenity - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Return Of Serenity - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/return_of_serenity/app/main.rb ** Processing line: ~ require 'app/require.rb'~ - Inside source: true *** True Line Result require 'app/require.rb' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults args~ - Inside source: true *** True Line Result def defaults args ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ - Inside source: true *** True Line Result args.outputs.background_color = [0, 0, 0] ** Processing line: ~ args.state.last_story_line_text ||= ""~ - Inside source: true *** True Line Result args.state.last_story_line_text ||= "" ** Processing line: ~ args.state.scene_history ||= []~ - Inside source: true *** True Line Result args.state.scene_history ||= [] ** Processing line: ~ args.state.storyline_history ||= []~ - Inside source: true *** True Line Result args.state.storyline_history ||= [] ** Processing line: ~ args.state.word_delay ||= 8~ - Inside source: true *** True Line Result args.state.word_delay ||= 8 ** Processing line: ~ if args.state.tick_count == 0~ - Inside source: true *** True Line Result if args.state.tick_count == 0 ** Processing line: ~ args.gtk.stop_music~ - Inside source: true *** True Line Result args.gtk.stop_music ** Processing line: ~ args.outputs.sounds << 'sounds/static-loop.ogg'~ - Inside source: true *** True Line Result args.outputs.sounds << 'sounds/static-loop.ogg' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.last_story_line_text~ - Inside source: true *** True Line Result if args.state.last_story_line_text ** Processing line: ~ lines = args.state~ - Inside source: true *** True Line Result lines = args.state ** Processing line: ~ .last_story_line_text~ - Inside source: true *** True Line Result .last_story_line_text ** Processing line: ~ .gsub("-", "")~ - Inside source: true *** True Line Result .gsub("-", "") ** Processing line: ~ .gsub("~", "")~ - Inside source: true *** True Line Result .gsub("~", "") ** Processing line: ~ .wrapped_lines(50)~ - Inside source: true *** True Line Result .wrapped_lines(50) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << lines.map_with_index { |l, i| [690, 200 - (i * 25), l, 1, 0, 255, 255, 255] }~ - Inside source: true *** True Line Result args.outputs.labels << lines.map_with_index { |l, i| [690, 200 - (i * 25), l, 1, 0, 255, 255, 255] } ** Processing line: ~ elsif args.state.storyline_history[-1]~ - Inside source: true *** True Line Result elsif args.state.storyline_history[-1] ** Processing line: ~ lines = args.state~ - Inside source: true *** True Line Result lines = args.state ** Processing line: ~ .storyline_history[-1]~ - Inside source: true *** True Line Result .storyline_history[-1] ** Processing line: ~ .gsub("-", "")~ - Inside source: true *** True Line Result .gsub("-", "") ** Processing line: ~ .gsub("~", "")~ - Inside source: true *** True Line Result .gsub("~", "") ** Processing line: ~ .wrapped_lines(50)~ - Inside source: true *** True Line Result .wrapped_lines(50) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << lines.map_with_index { |l, i| [690, 200 - (i * 25), l, 1, 0, 255, 255, 255] }~ - Inside source: true *** True Line Result args.outputs.labels << lines.map_with_index { |l, i| [690, 200 - (i * 25), l, 1, 0, 255, 255, 255] } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return if args.state.current_scene~ - Inside source: true *** True Line Result return if args.state.current_scene ** Processing line: ~ set_scene(args, day_one_beginning(args))~ - Inside source: true *** True Line Result set_scene(args, day_one_beginning(args)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inputs_move_player args~ - Inside source: true *** True Line Result def inputs_move_player args ** Processing line: ~ if args.state.scene_changed_at.elapsed_time > 5~ - Inside source: true *** True Line Result if args.state.scene_changed_at.elapsed_time > 5 ** Processing line: ~ if args.keyboard.down || args.keyboard.s || args.keyboard.j~ - Inside source: true *** True Line Result if args.keyboard.down || args.keyboard.s || args.keyboard.j ** Processing line: ~ args.state.player.y -= 0.25~ - Inside source: true *** True Line Result args.state.player.y -= 0.25 ** Processing line: ~ elsif args.keyboard.up || args.keyboard.w || args.keyboard.k~ - Inside source: true *** True Line Result elsif args.keyboard.up || args.keyboard.w || args.keyboard.k ** Processing line: ~ args.state.player.y += 0.25~ - Inside source: true *** True Line Result args.state.player.y += 0.25 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.keyboard.left || args.keyboard.a || args.keyboard.h~ - Inside source: true *** True Line Result if args.keyboard.left || args.keyboard.a || args.keyboard.h ** Processing line: ~ args.state.player.x -= 0.25~ - Inside source: true *** True Line Result args.state.player.x -= 0.25 ** Processing line: ~ elsif args.keyboard.right || args.keyboard.d || args.keyboard.l~ - Inside source: true *** True Line Result elsif args.keyboard.right || args.keyboard.d || args.keyboard.l ** Processing line: ~ args.state.player.x += 0.25~ - Inside source: true *** True Line Result args.state.player.x += 0.25 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.player.y = 60 if args.state.player.y > 63~ - Inside source: true *** True Line Result args.state.player.y = 60 if args.state.player.y > 63 ** Processing line: ~ args.state.player.y = 0 if args.state.player.y < -3~ - Inside source: true *** True Line Result args.state.player.y = 0 if args.state.player.y < -3 ** Processing line: ~ args.state.player.x = 60 if args.state.player.x > 63~ - Inside source: true *** True Line Result args.state.player.x = 60 if args.state.player.x > 63 ** Processing line: ~ args.state.player.x = 0 if args.state.player.x < -3~ - Inside source: true *** True Line Result args.state.player.x = 0 if args.state.player.x < -3 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def null_or_empty? ary~ - Inside source: true *** True Line Result def null_or_empty? ary ** Processing line: ~ return true unless ary~ - Inside source: true *** True Line Result return true unless ary ** Processing line: ~ return true if ary.length == 0~ - Inside source: true *** True Line Result return true if ary.length == 0 ** Processing line: ~ return false~ - Inside source: true *** True Line Result return false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_storyline_hotspot args~ - Inside source: true *** True Line Result def calc_storyline_hotspot args ** Processing line: ~ hotspots = args.state.storylines.find_all do |hs|~ - Inside source: true *** True Line Result hotspots = args.state.storylines.find_all do |hs| ** Processing line: ~ args.state.player.inside_rect?(hs.shift_rect(-2, 0))~ - Inside source: true *** True Line Result args.state.player.inside_rect?(hs.shift_rect(-2, 0)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !null_or_empty?(hotspots) && !args.state.inside_storyline_hotspot~ - Inside source: true *** True Line Result if !null_or_empty?(hotspots) && !args.state.inside_storyline_hotspot ** Processing line: ~ _, _, _, _, storyline = hotspots.first~ - Inside source: true *** True Line Result _, _, _, _, storyline = hotspots.first ** Processing line: ~ queue_storyline_text(args, storyline)~ - Inside source: true *** True Line Result queue_storyline_text(args, storyline) ** Processing line: ~ args.state.inside_storyline_hotspot = true~ - Inside source: true *** True Line Result args.state.inside_storyline_hotspot = true ** Processing line: ~ elsif null_or_empty?(hotspots)~ - Inside source: true *** True Line Result elsif null_or_empty?(hotspots) ** Processing line: ~ args.state.inside_storyline_hotspot = false~ - Inside source: true *** True Line Result args.state.inside_storyline_hotspot = false ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.storyline_queue_empty_at ||= args.state.tick_count~ - Inside source: true *** True Line Result args.state.storyline_queue_empty_at ||= args.state.tick_count ** Processing line: ~ args.state.is_storyline_dialog_active = false~ - Inside source: true *** True Line Result args.state.is_storyline_dialog_active = false ** Processing line: ~ args.state.scene_storyline_queue.clear~ - Inside source: true *** True Line Result args.state.scene_storyline_queue.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_scenes args~ - Inside source: true *** True Line Result def calc_scenes args ** Processing line: ~ hotspots = args.state.scenes.find_all do |hs|~ - Inside source: true *** True Line Result hotspots = args.state.scenes.find_all do |hs| ** Processing line: ~ args.state.player.inside_rect?(hs.shift_rect(-2, 0))~ - Inside source: true *** True Line Result args.state.player.inside_rect?(hs.shift_rect(-2, 0)) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !null_or_empty?(hotspots) && !args.state.inside_scene_hotspot~ - Inside source: true *** True Line Result if !null_or_empty?(hotspots) && !args.state.inside_scene_hotspot ** Processing line: ~ _, _, _, _, scene_method_or_hash = hotspots.first~ - Inside source: true *** True Line Result _, _, _, _, scene_method_or_hash = hotspots.first ** Processing line: ~ if scene_method_or_hash.is_a? Symbol~ - Inside source: true *** True Line Result if scene_method_or_hash.is_a? Symbol ** Processing line: ~ set_scene(args, send(scene_method_or_hash, args))~ - Inside source: true *** True Line Result set_scene(args, send(scene_method_or_hash, args)) ** Processing line: ~ args.state.last_hotspot_scene = scene_method_or_hash~ - Inside source: true *** True Line Result args.state.last_hotspot_scene = scene_method_or_hash ** Processing line: ~ args.state.scene_history << scene_method_or_hash~ - Inside source: true *** True Line Result args.state.scene_history << scene_method_or_hash ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ set_scene(args, scene_method_or_hash)~ - Inside source: true *** True Line Result set_scene(args, scene_method_or_hash) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.inside_scene_hotspot = true~ - Inside source: true *** True Line Result args.state.inside_scene_hotspot = true ** Processing line: ~ elsif null_or_empty?(hotspots)~ - Inside source: true *** True Line Result elsif null_or_empty?(hotspots) ** Processing line: ~ args.state.inside_scene_hotspot = false~ - Inside source: true *** True Line Result args.state.inside_scene_hotspot = false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def null_or_whitespace? word~ - Inside source: true *** True Line Result def null_or_whitespace? word ** Processing line: ~ return true if !word~ - Inside source: true *** True Line Result return true if !word ** Processing line: ~ return true if word.strip.length == 0~ - Inside source: true *** True Line Result return true if word.strip.length == 0 ** Processing line: ~ return false~ - Inside source: true *** True Line Result return false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_storyline_presentation args~ - Inside source: true *** True Line Result def calc_storyline_presentation args ** Processing line: ~ return unless args.state.tick_count > args.state.next_storyline~ - Inside source: true *** True Line Result return unless args.state.tick_count > args.state.next_storyline ** Processing line: ~ return unless args.state.scene_storyline_queue~ - Inside source: true *** True Line Result return unless args.state.scene_storyline_queue ** Processing line: ~ next_storyline = args.state.scene_storyline_queue.shift~ - Inside source: true *** True Line Result next_storyline = args.state.scene_storyline_queue.shift ** Processing line: ~ if null_or_whitespace? next_storyline~ - Inside source: true *** True Line Result if null_or_whitespace? next_storyline ** Processing line: ~ args.state.storyline_queue_empty_at ||= args.state.tick_count~ - Inside source: true *** True Line Result args.state.storyline_queue_empty_at ||= args.state.tick_count ** Processing line: ~ args.state.is_storyline_dialog_active = false~ - Inside source: true *** True Line Result args.state.is_storyline_dialog_active = false ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.storyline_to_show = next_storyline~ - Inside source: true *** True Line Result args.state.storyline_to_show = next_storyline ** Processing line: ~ args.state.is_storyline_dialog_active = true~ - Inside source: true *** True Line Result args.state.is_storyline_dialog_active = true ** Processing line: ~ args.state.storyline_queue_empty_at = nil~ - Inside source: true *** True Line Result args.state.storyline_queue_empty_at = nil ** Processing line: ~ if next_storyline.end_with?(".") || next_storyline.end_with?("!") || next_storyline.end_with?("?") || next_storyline.end_with?("\"")~ - Inside source: true *** True Line Result if next_storyline.end_with?(".") || next_storyline.end_with?("!") || next_storyline.end_with?("?") || next_storyline.end_with?("\"") ** Processing line: ~ args.state.next_storyline += 60~ - Inside source: true *** True Line Result args.state.next_storyline += 60 ** Processing line: ~ elsif next_storyline.end_with?(",")~ - Inside source: true *** True Line Result elsif next_storyline.end_with?(",") ** Processing line: ~ args.state.next_storyline += 50~ - Inside source: true *** True Line Result args.state.next_storyline += 50 ** Processing line: ~ elsif next_storyline.end_with?(":")~ - Inside source: true *** True Line Result elsif next_storyline.end_with?(":") ** Processing line: ~ args.state.next_storyline += 60~ - Inside source: true *** True Line Result args.state.next_storyline += 60 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ default_word_delay = 13 + args.state.word_delay - 8~ - Inside source: true *** True Line Result default_word_delay = 13 + args.state.word_delay - 8 ** Processing line: ~ if next_storyline.gsub("-", "").gsub("~", "").length <= 4~ - Inside source: true *** True Line Result if next_storyline.gsub("-", "").gsub("~", "").length <= 4 ** Processing line: ~ default_word_delay = 11 + args.state.word_delay - 8~ - Inside source: true *** True Line Result default_word_delay = 11 + args.state.word_delay - 8 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ number_of_syllabals = next_storyline.length - next_storyline.gsub("-", "").length~ - Inside source: true *** True Line Result number_of_syllabals = next_storyline.length - next_storyline.gsub("-", "").length ** Processing line: ~ args.state.next_storyline += default_word_delay + number_of_syllabals * (args.state.word_delay + 1)~ - Inside source: true *** True Line Result args.state.next_storyline += default_word_delay + number_of_syllabals * (args.state.word_delay + 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inputs_reload_current_scene args~ - Inside source: true *** True Line Result def inputs_reload_current_scene args ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ if args.inputs.keyboard.key_down.r!~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.r! ** Processing line: ~ reload_current_scene~ - Inside source: true *** True Line Result reload_current_scene ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inputs_dismiss_current_storyline args~ - Inside source: true *** True Line Result def inputs_dismiss_current_storyline args ** Processing line: ~ if args.inputs.keyboard.key_down.x!~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.x! ** Processing line: ~ args.state.scene_storyline_queue.clear~ - Inside source: true *** True Line Result args.state.scene_storyline_queue.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inputs_restart_game args~ - Inside source: true *** True Line Result def inputs_restart_game args ** Processing line: ~ if args.inputs.keyboard.exclamation_point~ - Inside source: true *** True Line Result if args.inputs.keyboard.exclamation_point ** Processing line: ~ args.gtk.reset_state~ - Inside source: true *** True Line Result args.gtk.reset_state ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inputs_change_word_delay args~ - Inside source: true *** True Line Result def inputs_change_word_delay args ** Processing line: ~ if args.inputs.keyboard.key_down.plus || args.inputs.keyboard.key_down.equal_sign~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.plus || args.inputs.keyboard.key_down.equal_sign ** Processing line: ~ args.state.word_delay -= 2~ - Inside source: true *** True Line Result args.state.word_delay -= 2 ** Processing line: ~ if args.state.word_delay < 0~ - Inside source: true *** True Line Result if args.state.word_delay < 0 ** Processing line: ~ args.state.word_delay = 0~ - Inside source: true *** True Line Result args.state.word_delay = 0 ** Processing line: ~ # queue_storyline_text args, "Text speed at MAXIMUM. Geez, how fast do you read?"~ - Inside source: true *** True Line Result # queue_storyline_text args, "Text speed at MAXIMUM. Geez, how fast do you read?" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ # queue_storyline_text args, "Text speed INCREASED."~ - Inside source: true *** True Line Result # queue_storyline_text args, "Text speed INCREASED." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.keyboard.key_down.hyphen || args.inputs.keyboard.key_down.underscore~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.hyphen || args.inputs.keyboard.key_down.underscore ** Processing line: ~ args.state.word_delay += 2~ - Inside source: true *** True Line Result args.state.word_delay += 2 ** Processing line: ~ # queue_storyline_text args, "Text speed DECREASED."~ - Inside source: true *** True Line Result # queue_storyline_text args, "Text speed DECREASED." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def multiple_lines args, x, y, texts, size = 0, minimum_alpha = nil~ - Inside source: true *** True Line Result def multiple_lines args, x, y, texts, size = 0, minimum_alpha = nil ** Processing line: ~ texts.each_with_index.map do |t, i|~ - Inside source: true *** True Line Result texts.each_with_index.map do |t, i| ** Processing line: ~ [x, y - i * (25 + size * 2), t, size, 0, 255, 255, 255, adornments_alpha(args, 255, minimum_alpha)]~ - Inside source: true *** True Line Result [x, y - i * (25 + size * 2), t, size, 0, 255, 255, 255, adornments_alpha(args, 255, minimum_alpha)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def lowrez_tick args, lowrez_sprites, lowrez_labels, lowrez_borders, lowrez_solids, lowrez_mouse~ - Inside source: true *** True Line Result def lowrez_tick args, lowrez_sprites, lowrez_labels, lowrez_borders, lowrez_solids, lowrez_mouse ** Processing line: ~ # args.state.show_gridlines = true~ - Inside source: true *** True Line Result # args.state.show_gridlines = true ** Processing line: ~ defaults args~ - Inside source: true *** True Line Result defaults args ** Processing line: ~ render_current_scene args, lowrez_sprites, lowrez_labels, lowrez_solids~ - Inside source: true *** True Line Result render_current_scene args, lowrez_sprites, lowrez_labels, lowrez_solids ** Processing line: ~ render_controller args, lowrez_borders~ - Inside source: true *** True Line Result render_controller args, lowrez_borders ** Processing line: ~ lowrez_solids << [0, 0, 64, 64, 0, 0, 0]~ - Inside source: true *** True Line Result lowrez_solids << [0, 0, 64, 64, 0, 0, 0] ** Processing line: ~ calc_storyline_presentation args~ - Inside source: true *** True Line Result calc_storyline_presentation args ** Processing line: ~ calc_scenes args~ - Inside source: true *** True Line Result calc_scenes args ** Processing line: ~ calc_storyline_hotspot args~ - Inside source: true *** True Line Result calc_storyline_hotspot args ** Processing line: ~ inputs_move_player args~ - Inside source: true *** True Line Result inputs_move_player args ** Processing line: ~ inputs_print_mouse_rect args, lowrez_mouse~ - Inside source: true *** True Line Result inputs_print_mouse_rect args, lowrez_mouse ** Processing line: ~ inputs_reload_current_scene args~ - Inside source: true *** True Line Result inputs_reload_current_scene args ** Processing line: ~ inputs_dismiss_current_storyline args~ - Inside source: true *** True Line Result inputs_dismiss_current_storyline args ** Processing line: ~ inputs_change_word_delay args~ - Inside source: true *** True Line Result inputs_change_word_delay args ** Processing line: ~ inputs_restart_game args~ - Inside source: true *** True Line Result inputs_restart_game args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_controller args, lowrez_borders~ - Inside source: true *** True Line Result def render_controller args, lowrez_borders ** Processing line: ~ args.state.up_button = [85, 40, 15, 15, 255, 255, 255]~ - Inside source: true *** True Line Result args.state.up_button = [85, 40, 15, 15, 255, 255, 255] ** Processing line: ~ args.state.down_button = [85, 20, 15, 15, 255, 255, 255]~ - Inside source: true *** True Line Result args.state.down_button = [85, 20, 15, 15, 255, 255, 255] ** Processing line: ~ args.state.left_button = [65, 20, 15, 15, 255, 255, 255]~ - Inside source: true *** True Line Result args.state.left_button = [65, 20, 15, 15, 255, 255, 255] ** Processing line: ~ args.state.right_button = [105, 20, 15, 15, 255, 255, 255]~ - Inside source: true *** True Line Result args.state.right_button = [105, 20, 15, 15, 255, 255, 255] ** Processing line: ~ lowrez_borders << args.state.up_button~ - Inside source: true *** True Line Result lowrez_borders << args.state.up_button ** Processing line: ~ lowrez_borders << args.state.down_button~ - Inside source: true *** True Line Result lowrez_borders << args.state.down_button ** Processing line: ~ lowrez_borders << args.state.left_button~ - Inside source: true *** True Line Result lowrez_borders << args.state.left_button ** Processing line: ~ lowrez_borders << args.state.right_button~ - Inside source: true *** True Line Result lowrez_borders << args.state.right_button ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inputs_print_mouse_rect args, lowrez_mouse~ - Inside source: true *** True Line Result def inputs_print_mouse_rect args, lowrez_mouse ** Processing line: ~ if lowrez_mouse.up~ - Inside source: true *** True Line Result if lowrez_mouse.up ** Processing line: ~ args.state.mouse_held = false~ - Inside source: true *** True Line Result args.state.mouse_held = false ** Processing line: ~ elsif lowrez_mouse.click~ - Inside source: true *** True Line Result elsif lowrez_mouse.click ** Processing line: ~ mouse_rect = [lowrez_mouse.x, lowrez_mouse.y, 1, 1]~ - Inside source: true *** True Line Result mouse_rect = [lowrez_mouse.x, lowrez_mouse.y, 1, 1] ** Processing line: ~ if args.state.up_button.intersect_rect? mouse_rect~ - Inside source: true *** True Line Result if args.state.up_button.intersect_rect? mouse_rect ** Processing line: ~ args.state.player.y += 1~ - Inside source: true *** True Line Result args.state.player.y += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.down_button.intersect_rect? mouse_rect~ - Inside source: true *** True Line Result if args.state.down_button.intersect_rect? mouse_rect ** Processing line: ~ args.state.player.y -= 1~ - Inside source: true *** True Line Result args.state.player.y -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.left_button.intersect_rect? mouse_rect~ - Inside source: true *** True Line Result if args.state.left_button.intersect_rect? mouse_rect ** Processing line: ~ args.state.player.x -= 1~ - Inside source: true *** True Line Result args.state.player.x -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.right_button.intersect_rect? mouse_rect~ - Inside source: true *** True Line Result if args.state.right_button.intersect_rect? mouse_rect ** Processing line: ~ args.state.player.x += 1~ - Inside source: true *** True Line Result args.state.player.x += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.mouse_held = true~ - Inside source: true *** True Line Result args.state.mouse_held = true ** Processing line: ~ elsif args.state.mouse_held~ - Inside source: true *** True Line Result elsif args.state.mouse_held ** Processing line: ~ mouse_rect = [lowrez_mouse.x, lowrez_mouse.y, 1, 1]~ - Inside source: true *** True Line Result mouse_rect = [lowrez_mouse.x, lowrez_mouse.y, 1, 1] ** Processing line: ~ if args.state.up_button.intersect_rect? mouse_rect~ - Inside source: true *** True Line Result if args.state.up_button.intersect_rect? mouse_rect ** Processing line: ~ args.state.player.y += 0.25~ - Inside source: true *** True Line Result args.state.player.y += 0.25 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.down_button.intersect_rect? mouse_rect~ - Inside source: true *** True Line Result if args.state.down_button.intersect_rect? mouse_rect ** Processing line: ~ args.state.player.y -= 0.25~ - Inside source: true *** True Line Result args.state.player.y -= 0.25 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.left_button.intersect_rect? mouse_rect~ - Inside source: true *** True Line Result if args.state.left_button.intersect_rect? mouse_rect ** Processing line: ~ args.state.player.x -= 0.25~ - Inside source: true *** True Line Result args.state.player.x -= 0.25 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.right_button.intersect_rect? mouse_rect~ - Inside source: true *** True Line Result if args.state.right_button.intersect_rect? mouse_rect ** Processing line: ~ args.state.player.x += 0.25~ - Inside source: true *** True Line Result args.state.player.x += 0.25 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if lowrez_mouse.click~ - Inside source: true *** True Line Result if lowrez_mouse.click ** Processing line: ~ dx = lowrez_mouse.click.x - args.state.previous_mouse_click.x~ - Inside source: true *** True Line Result dx = lowrez_mouse.click.x - args.state.previous_mouse_click.x ** Processing line: ~ dy = lowrez_mouse.click.y - args.state.previous_mouse_click.y~ - Inside source: true *** True Line Result dy = lowrez_mouse.click.y - args.state.previous_mouse_click.y ** Processing line: ~ x, y, w, h = args.state.previous_mouse_click.x, args.state.previous_mouse_click.y, dx, dy~ - Inside source: true *** True Line Result x, y, w, h = args.state.previous_mouse_click.x, args.state.previous_mouse_click.y, dx, dy ** Processing line: ~ puts "x #{lowrez_mouse.click.x}, y: #{lowrez_mouse.click.y}"~ - Inside source: true *** True Line Result puts "x #{lowrez_mouse.click.x}, y: #{lowrez_mouse.click.y}" ** Processing line: ~ if args.state.previous_mouse_click~ - Inside source: true *** True Line Result if args.state.previous_mouse_click ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if dx < 0 && dx < 0~ - Inside source: true *** True Line Result if dx < 0 && dx < 0 ** Processing line: ~ x = x + w~ - Inside source: true *** True Line Result x = x + w ** Processing line: ~ w = w.abs~ - Inside source: true *** True Line Result w = w.abs ** Processing line: ~ y = y + h~ - Inside source: true *** True Line Result y = y + h ** Processing line: ~ h = h.abs~ - Inside source: true *** True Line Result h = h.abs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ w += 1~ - Inside source: true *** True Line Result w += 1 ** Processing line: ~ h += 1~ - Inside source: true *** True Line Result h += 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.previous_mouse_click = nil~ - Inside source: true *** True Line Result args.state.previous_mouse_click = nil ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.previous_mouse_click = lowrez_mouse.click~ - Inside source: true *** True Line Result args.state.previous_mouse_click = lowrez_mouse.click ** Processing line: ~ square_x, square_y = lowrez_mouse.click~ - Inside source: true *** True Line Result square_x, square_y = lowrez_mouse.click ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def try_centering! word~ - Inside source: true *** True Line Result def try_centering! word ** Processing line: ~ word ||= ""~ - Inside source: true *** True Line Result word ||= "" ** Processing line: ~ just_word = word.gsub("-", "").gsub(",", "").gsub(".", "").gsub("'", "").gsub('""', "\"-\"")~ - Inside source: true *** True Line Result just_word = word.gsub("-", "").gsub(",", "").gsub(".", "").gsub("'", "").gsub('""', "\"-\"") ** Processing line: ~ return word if just_word.strip.length == 0~ - Inside source: true *** True Line Result return word if just_word.strip.length == 0 ** Processing line: ~ return word if just_word.include? "~"~ - Inside source: true *** True Line Result return word if just_word.include? "~" ** Processing line: ~ return "~#{word}" if just_word.length <= 2~ - Inside source: true *** True Line Result return "~#{word}" if just_word.length <= 2 ** Processing line: ~ if just_word.length.mod_zero? 2~ - Inside source: true *** True Line Result if just_word.length.mod_zero? 2 ** Processing line: ~ center_index = just_word.length.idiv(2) - 1~ - Inside source: true *** True Line Result center_index = just_word.length.idiv(2) - 1 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ center_index = (just_word.length - 1).idiv(2)~ - Inside source: true *** True Line Result center_index = (just_word.length - 1).idiv(2) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ return "#{word[0..center_index - 1]}~#{word[center_index]}#{word[center_index + 1..-1]}"~ - Inside source: true *** True Line Result return "#{word[0..center_index - 1]}~#{word[center_index]}#{word[center_index + 1..-1]}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def queue_storyline args, scene~ - Inside source: true *** True Line Result def queue_storyline args, scene ** Processing line: ~ queue_storyline_text args, scene[:storyline]~ - Inside source: true *** True Line Result queue_storyline_text args, scene[:storyline] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def queue_storyline_text args, text~ - Inside source: true *** True Line Result def queue_storyline_text args, text ** Processing line: ~ args.state.last_story_line_text = text~ - Inside source: true *** True Line Result args.state.last_story_line_text = text ** Processing line: ~ args.state.storyline_history << text if text~ - Inside source: true *** True Line Result args.state.storyline_history << text if text ** Processing line: ~ words = (text || "").split(" ")~ - Inside source: true *** True Line Result words = (text || "").split(" ") ** Processing line: ~ words = words.map { |w| try_centering! w }~ - Inside source: true *** True Line Result words = words.map { |w| try_centering! w } ** Processing line: ~ args.state.scene_storyline_queue = words~ - Inside source: true *** True Line Result args.state.scene_storyline_queue = words ** Processing line: ~ if args.state.scene_storyline_queue.length != 0~ - Inside source: true *** True Line Result if args.state.scene_storyline_queue.length != 0 ** Processing line: ~ args.state.scene_storyline_queue.unshift "~$--"~ - Inside source: true *** True Line Result args.state.scene_storyline_queue.unshift "~$--" ** Processing line: ~ args.state.storyline_to_show = "~."~ - Inside source: true *** True Line Result args.state.storyline_to_show = "~." ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.storyline_to_show = ""~ - Inside source: true *** True Line Result args.state.storyline_to_show = "" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.scene_storyline_queue << ""~ - Inside source: true *** True Line Result args.state.scene_storyline_queue << "" ** Processing line: ~ args.state.next_storyline = args.state.tick_count~ - Inside source: true *** True Line Result args.state.next_storyline = args.state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_scene args, scene~ - Inside source: true *** True Line Result def set_scene args, scene ** Processing line: ~ args.state.current_scene = scene~ - Inside source: true *** True Line Result args.state.current_scene = scene ** Processing line: ~ args.state.background = scene[:background] || 'sprites/todo.png'~ - Inside source: true *** True Line Result args.state.background = scene[:background] || 'sprites/todo.png' ** Processing line: ~ args.state.scene_fade = scene[:fade] || 0~ - Inside source: true *** True Line Result args.state.scene_fade = scene[:fade] || 0 ** Processing line: ~ args.state.scenes = (scene[:scenes] || []).reject { |s| !s }~ - Inside source: true *** True Line Result args.state.scenes = (scene[:scenes] || []).reject { |s| !s } ** Processing line: ~ args.state.scene_render_override = scene[:render_override]~ - Inside source: true *** True Line Result args.state.scene_render_override = scene[:render_override] ** Processing line: ~ args.state.storylines = (scene[:storylines] || []).reject { |s| !s }~ - Inside source: true *** True Line Result args.state.storylines = (scene[:storylines] || []).reject { |s| !s } ** Processing line: ~ args.state.scene_changed_at = args.state.tick_count~ - Inside source: true *** True Line Result args.state.scene_changed_at = args.state.tick_count ** Processing line: ~ if scene[:player]~ - Inside source: true *** True Line Result if scene[:player] ** Processing line: ~ args.state.player = scene[:player]~ - Inside source: true *** True Line Result args.state.player = scene[:player] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.inside_scene_hotspot = false~ - Inside source: true *** True Line Result args.state.inside_scene_hotspot = false ** Processing line: ~ args.state.inside_storyline_hotspot = false~ - Inside source: true *** True Line Result args.state.inside_storyline_hotspot = false ** Processing line: ~ queue_storyline args, scene~ - Inside source: true *** True Line Result queue_storyline args, scene ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replay_storyline_rect~ - Inside source: true *** True Line Result def replay_storyline_rect ** Processing line: ~ [26, -1, 7, 4]~ - Inside source: true *** True Line Result [26, -1, 7, 4] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def labels_for_word word~ - Inside source: true *** True Line Result def labels_for_word word ** Processing line: ~ left_side_of_word = ""~ - Inside source: true *** True Line Result left_side_of_word = "" ** Processing line: ~ center_letter = ""~ - Inside source: true *** True Line Result center_letter = "" ** Processing line: ~ right_side_of_word = ""~ - Inside source: true *** True Line Result right_side_of_word = "" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if word[0] == "~"~ - Inside source: true *** True Line Result if word[0] == "~" ** Processing line: ~ left_side_of_word = ""~ - Inside source: true *** True Line Result left_side_of_word = "" ** Processing line: ~ center_letter = word[1]~ - Inside source: true *** True Line Result center_letter = word[1] ** Processing line: ~ right_side_of_word = word[2..-1]~ - Inside source: true *** True Line Result right_side_of_word = word[2..-1] ** Processing line: ~ elsif word.length > 0~ - Inside source: true *** True Line Result elsif word.length > 0 ** Processing line: ~ left_side_of_word, right_side_of_word = word.split("~")~ - Inside source: true *** True Line Result left_side_of_word, right_side_of_word = word.split("~") ** Processing line: ~ center_letter = right_side_of_word[0]~ - Inside source: true *** True Line Result center_letter = right_side_of_word[0] ** Processing line: ~ right_side_of_word = right_side_of_word[1..-1]~ - Inside source: true *** True Line Result right_side_of_word = right_side_of_word[1..-1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ right_side_of_word = right_side_of_word.gsub("-", "")~ - Inside source: true *** True Line Result right_side_of_word = right_side_of_word.gsub("-", "") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ left: [29 - left_side_of_word.length * 4 - 1 * left_side_of_word.length, 2, left_side_of_word],~ - Inside source: true *** True Line Result left: [29 - left_side_of_word.length * 4 - 1 * left_side_of_word.length, 2, left_side_of_word], ** Processing line: ~ center: [29, 2, center_letter, 255, 0, 0],~ - Inside source: true *** True Line Result center: [29, 2, center_letter, 255, 0, 0], ** Processing line: ~ right: [34, 2, right_side_of_word]~ - Inside source: true *** True Line Result right: [34, 2, right_side_of_word] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_scenes args, lowrez_sprites~ - Inside source: true *** True Line Result def render_scenes args, lowrez_sprites ** Processing line: ~ lowrez_sprites << args.state.scenes.flat_map do |hs|~ - Inside source: true *** True Line Result lowrez_sprites << args.state.scenes.flat_map do |hs| ** Processing line: ~ hotspot_square args, hs.x, hs.y, hs.w, hs.h~ - Inside source: true *** True Line Result hotspot_square args, hs.x, hs.y, hs.w, hs.h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_storylines args, lowrez_sprites~ - Inside source: true *** True Line Result def render_storylines args, lowrez_sprites ** Processing line: ~ lowrez_sprites << args.state.storylines.flat_map do |hs|~ - Inside source: true *** True Line Result lowrez_sprites << args.state.storylines.flat_map do |hs| ** Processing line: ~ hotspot_square args, hs.x, hs.y, hs.w, hs.h~ - Inside source: true *** True Line Result hotspot_square args, hs.x, hs.y, hs.w, hs.h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def adornments_alpha args, target_alpha = nil, minimum_alpha = nil~ - Inside source: true *** True Line Result def adornments_alpha args, target_alpha = nil, minimum_alpha = nil ** Processing line: ~ return (minimum_alpha || 80) unless args.state.storyline_queue_empty_at~ - Inside source: true *** True Line Result return (minimum_alpha || 80) unless args.state.storyline_queue_empty_at ** Processing line: ~ target_alpha ||= 255~ - Inside source: true *** True Line Result target_alpha ||= 255 ** Processing line: ~ target_alpha * args.state.storyline_queue_empty_at.ease(60)~ - Inside source: true *** True Line Result target_alpha * args.state.storyline_queue_empty_at.ease(60) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def hotspot_square args, x, y, w, h~ - Inside source: true *** True Line Result def hotspot_square args, x, y, w, h ** Processing line: ~ if w >= 3 && h >= 3~ - Inside source: true *** True Line Result if w >= 3 && h >= 3 ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [x + w.idiv(2) + 1, y, w.idiv(2), h, 'sprites/label-background.png', 0, adornments_alpha(args, 50), 23, 23, 23],~ - Inside source: true *** True Line Result [x + w.idiv(2) + 1, y, w.idiv(2), h, 'sprites/label-background.png', 0, adornments_alpha(args, 50), 23, 23, 23], ** Processing line: ~ [x, y, w.idiv(2), h, 'sprites/label-background.png', 0, adornments_alpha(args, 100), 223, 223, 223],~ - Inside source: true *** True Line Result [x, y, w.idiv(2), h, 'sprites/label-background.png', 0, adornments_alpha(args, 100), 223, 223, 223], ** Processing line: ~ [x + 1, y + 1, w - 2, h - 2, 'sprites/label-background.png', 0, adornments_alpha(args, 200), 40, 140, 40],~ - Inside source: true *** True Line Result [x + 1, y + 1, w - 2, h - 2, 'sprites/label-background.png', 0, adornments_alpha(args, 200), 40, 140, 40], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [x, y, w, h, 'sprites/label-background.png', 0, adornments_alpha(args, 200), 0, 140, 0],~ - Inside source: true *** True Line Result [x, y, w, h, 'sprites/label-background.png', 0, adornments_alpha(args, 200), 0, 140, 0], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_storyline_dialog args, lowrez_labels, lowrez_sprites~ - Inside source: true *** True Line Result def render_storyline_dialog args, lowrez_labels, lowrez_sprites ** Processing line: ~ return unless args.state.is_storyline_dialog_active~ - Inside source: true *** True Line Result return unless args.state.is_storyline_dialog_active ** Processing line: ~ return unless args.state.storyline_to_show~ - Inside source: true *** True Line Result return unless args.state.storyline_to_show ** Processing line: ~ labels = labels_for_word args.state.storyline_to_show~ - Inside source: true *** True Line Result labels = labels_for_word args.state.storyline_to_show ** Processing line: ~ if true # high rez version~ - Inside source: true *** True Line Result if true # high rez version ** Processing line: ~ scale = 8.88~ - Inside source: true *** True Line Result scale = 8.88 ** Processing line: ~ offset = 45~ - Inside source: true *** True Line Result offset = 45 ** Processing line: ~ size = 25~ - Inside source: true *** True Line Result size = 25 ** Processing line: ~ args.outputs.labels << [offset + labels[:left].x.-(1) * scale,~ - Inside source: true *** True Line Result args.outputs.labels << [offset + labels[:left].x.-(1) * scale, ** Processing line: ~ labels[:left].y * TINY_SCALE + 55,~ - Inside source: true *** True Line Result labels[:left].y * TINY_SCALE + 55, ** Processing line: ~ labels[:left].text, size, 0, 0, 0, 0, 255,~ - Inside source: true *** True Line Result labels[:left].text, size, 0, 0, 0, 0, 255, ** Processing line: ~ 'fonts/manaspc.ttf']~ - Inside source: true *** True Line Result 'fonts/manaspc.ttf'] ** Processing line: ~ center_text = labels[:center].text~ - Inside source: true *** True Line Result center_text = labels[:center].text ** Processing line: ~ center_text = "|" if center_text == "$"~ - Inside source: true *** True Line Result center_text = "|" if center_text == "$" ** Processing line: ~ args.outputs.labels << [offset + labels[:center].x * scale,~ - Inside source: true *** True Line Result args.outputs.labels << [offset + labels[:center].x * scale, ** Processing line: ~ labels[:center].y * TINY_SCALE + 55,~ - Inside source: true *** True Line Result labels[:center].y * TINY_SCALE + 55, ** Processing line: ~ center_text, size, 0, 255, 0, 0, 255,~ - Inside source: true *** True Line Result center_text, size, 0, 255, 0, 0, 255, ** Processing line: ~ 'fonts/manaspc.ttf']~ - Inside source: true *** True Line Result 'fonts/manaspc.ttf'] ** Processing line: ~ args.outputs.labels << [offset + labels[:right].x * scale,~ - Inside source: true *** True Line Result args.outputs.labels << [offset + labels[:right].x * scale, ** Processing line: ~ labels[:right].y * TINY_SCALE + 55,~ - Inside source: true *** True Line Result labels[:right].y * TINY_SCALE + 55, ** Processing line: ~ labels[:right].text, size, 0, 0, 0, 0, 255,~ - Inside source: true *** True Line Result labels[:right].text, size, 0, 0, 0, 0, 255, ** Processing line: ~ 'fonts/manaspc.ttf']~ - Inside source: true *** True Line Result 'fonts/manaspc.ttf'] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ lowrez_labels << labels[:left]~ - Inside source: true *** True Line Result lowrez_labels << labels[:left] ** Processing line: ~ lowrez_labels << labels[:center]~ - Inside source: true *** True Line Result lowrez_labels << labels[:center] ** Processing line: ~ lowrez_labels << labels[:right]~ - Inside source: true *** True Line Result lowrez_labels << labels[:right] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ args.state.is_storyline_dialog_active = true~ - Inside source: true *** True Line Result args.state.is_storyline_dialog_active = true ** Processing line: ~ render_player args, lowrez_sprites~ - Inside source: true *** True Line Result render_player args, lowrez_sprites ** Processing line: ~ lowrez_sprites << [0, 0, 64, 8, 'sprites/label-background.png']~ - Inside source: true *** True Line Result lowrez_sprites << [0, 0, 64, 8, 'sprites/label-background.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_player args, lowrez_sprites~ - Inside source: true *** True Line Result def render_player args, lowrez_sprites ** Processing line: ~ lowrez_sprites << player_md_down(args, *args.state.player)~ - Inside source: true *** True Line Result lowrez_sprites << player_md_down(args, *args.state.player) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_adornments args, lowrez_sprites~ - Inside source: true *** True Line Result def render_adornments args, lowrez_sprites ** Processing line: ~ render_scenes args, lowrez_sprites~ - Inside source: true *** True Line Result render_scenes args, lowrez_sprites ** Processing line: ~ render_storylines args, lowrez_sprites~ - Inside source: true *** True Line Result render_storylines args, lowrez_sprites ** Processing line: ~ return if args.state.is_storyline_dialog_active~ - Inside source: true *** True Line Result return if args.state.is_storyline_dialog_active ** Processing line: ~ lowrez_sprites << player_md_down(args, *args.state.player)~ - Inside source: true *** True Line Result lowrez_sprites << player_md_down(args, *args.state.player) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def global_alpha_percentage args, max_alpha = 255~ - Inside source: true *** True Line Result def global_alpha_percentage args, max_alpha = 255 ** Processing line: ~ return 255 unless args.state.scene_changed_at~ - Inside source: true *** True Line Result return 255 unless args.state.scene_changed_at ** Processing line: ~ return 255 unless args.state.scene_fade~ - Inside source: true *** True Line Result return 255 unless args.state.scene_fade ** Processing line: ~ return 255 unless args.state.scene_fade > 0~ - Inside source: true *** True Line Result return 255 unless args.state.scene_fade > 0 ** Processing line: ~ return max_alpha * args.state.scene_changed_at.ease(args.state.scene_fade)~ - Inside source: true *** True Line Result return max_alpha * args.state.scene_changed_at.ease(args.state.scene_fade) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_current_scene args, lowrez_sprites, lowrez_labels, lowrez_solids~ - Inside source: true *** True Line Result def render_current_scene args, lowrez_sprites, lowrez_labels, lowrez_solids ** Processing line: ~ lowrez_sprites << [0, 0, 64, 64, args.state.background, 0, (global_alpha_percentage args)]~ - Inside source: true *** True Line Result lowrez_sprites << [0, 0, 64, 64, args.state.background, 0, (global_alpha_percentage args)] ** Processing line: ~ if args.state.scene_render_override~ - Inside source: true *** True Line Result if args.state.scene_render_override ** Processing line: ~ send args.state.scene_render_override, args, lowrez_sprites, lowrez_labels, lowrez_solids~ - Inside source: true *** True Line Result send args.state.scene_render_override, args, lowrez_sprites, lowrez_labels, lowrez_solids ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ storyline_to_show = args.state.storyline_to_show || ""~ - Inside source: true *** True Line Result storyline_to_show = args.state.storyline_to_show || "" ** Processing line: ~ render_adornments args, lowrez_sprites~ - Inside source: true *** True Line Result render_adornments args, lowrez_sprites ** Processing line: ~ render_storyline_dialog args, lowrez_labels, lowrez_sprites~ - Inside source: true *** True Line Result render_storyline_dialog args, lowrez_labels, lowrez_sprites ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.state.background == 'sprites/tribute-game-over.png'~ - Inside source: true *** True Line Result if args.state.background == 'sprites/tribute-game-over.png' ** Processing line: ~ lowrez_sprites << [0, 0, 64, 11, 'sprites/label-background.png', 0, adornments_alpha(args, 200), 0, 0, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [0, 0, 64, 11, 'sprites/label-background.png', 0, adornments_alpha(args, 200), 0, 0, 0] ** Processing line: ~ lowrez_labels << [9, 6, 'Return of', 255, 255, 255]~ - Inside source: true *** True Line Result lowrez_labels << [9, 6, 'Return of', 255, 255, 255] ** Processing line: ~ lowrez_labels << [9, 1, ' Serenity', 255, 255, 255]~ - Inside source: true *** True Line Result lowrez_labels << [9, 1, ' Serenity', 255, 255, 255] ** Processing line: ~ if !args.state.ended~ - Inside source: true *** True Line Result if !args.state.ended ** Processing line: ~ args.gtk.stop_music~ - Inside source: true *** True Line Result args.gtk.stop_music ** Processing line: ~ args.outputs.sounds << 'sounds/music-loop.ogg'~ - Inside source: true *** True Line Result args.outputs.sounds << 'sounds/music-loop.ogg' ** Processing line: ~ args.state.ended = true~ - Inside source: true *** True Line Result args.state.ended = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_md_right args, x, y~ - Inside source: true *** True Line Result def player_md_right args, x, y ** Processing line: ~ [x, y, 4, 11, 'sprites/player-right.png', 0, (global_alpha_percentage args)]~ - Inside source: true *** True Line Result [x, y, 4, 11, 'sprites/player-right.png', 0, (global_alpha_percentage args)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_md_left args, x, y~ - Inside source: true *** True Line Result def player_md_left args, x, y ** Processing line: ~ [x, y, 4, 11, 'sprites/player-left.png', 0, (global_alpha_percentage args)]~ - Inside source: true *** True Line Result [x, y, 4, 11, 'sprites/player-left.png', 0, (global_alpha_percentage args)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_md_up args, x, y~ - Inside source: true *** True Line Result def player_md_up args, x, y ** Processing line: ~ [x, y, 4, 11, 'sprites/player-up.png', 0, (global_alpha_percentage args)]~ - Inside source: true *** True Line Result [x, y, 4, 11, 'sprites/player-up.png', 0, (global_alpha_percentage args)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_md_down args, x, y~ - Inside source: true *** True Line Result def player_md_down args, x, y ** Processing line: ~ [x, y, 4, 11, 'sprites/player-down.png', 0, (global_alpha_percentage args)]~ - Inside source: true *** True Line Result [x, y, 4, 11, 'sprites/player-down.png', 0, (global_alpha_percentage args)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_sm args, x, y~ - Inside source: true *** True Line Result def player_sm args, x, y ** Processing line: ~ [x, y, 3, 7, 'sprites/player-zoomed-out.png', 0, (global_alpha_percentage args)]~ - Inside source: true *** True Line Result [x, y, 3, 7, 'sprites/player-zoomed-out.png', 0, (global_alpha_percentage args)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def player_xs args, x, y~ - Inside source: true *** True Line Result def player_xs args, x, y ** Processing line: ~ [x, y, 1, 4, 'sprites/player-zoomed-out.png', 0, (global_alpha_percentage args)]~ - Inside source: true *** True Line Result [x, y, 1, 4, 'sprites/player-zoomed-out.png', 0, (global_alpha_percentage args)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Return Of Serenity - require.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Return Of Serenity - require.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/require.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/return_of_serenity/app/require.rb ** Processing line: ~ require 'app/lowrez_simulator.rb'~ - Inside source: true *** True Line Result require 'app/lowrez_simulator.rb' ** Processing line: ~ require 'app/storyline_day_one.rb'~ - Inside source: true *** True Line Result require 'app/storyline_day_one.rb' ** Processing line: ~ require 'app/storyline_blinking_light.rb'~ - Inside source: true *** True Line Result require 'app/storyline_blinking_light.rb' ** Processing line: ~ require 'app/storyline_serenity_introduction.rb'~ - Inside source: true *** True Line Result require 'app/storyline_serenity_introduction.rb' ** Processing line: ~ require 'app/storyline_speed_of_light.rb'~ - Inside source: true *** True Line Result require 'app/storyline_speed_of_light.rb' ** Processing line: ~ require 'app/storyline_serenity_alive.rb'~ - Inside source: true *** True Line Result require 'app/storyline_serenity_alive.rb' ** Processing line: ~ require 'app/storyline_serenity_bio.rb'~ - Inside source: true *** True Line Result require 'app/storyline_serenity_bio.rb' ** Processing line: ~ require 'app/storyline_anka.rb'~ - Inside source: true *** True Line Result require 'app/storyline_anka.rb' ** Processing line: ~ require 'app/storyline_final_message.rb'~ - Inside source: true *** True Line Result require 'app/storyline_final_message.rb' ** Processing line: ~ require 'app/storyline_final_decision.rb'~ - Inside source: true *** True Line Result require 'app/storyline_final_decision.rb' ** Processing line: ~ require 'app/storyline.rb'~ - Inside source: true *** True Line Result require 'app/storyline.rb' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Return Of Serenity - storyline.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline.rb ** Processing line: ~ def hotspot_top~ - Inside source: true *** True Line Result def hotspot_top ** Processing line: ~ [4, 61, 56, 3]~ - Inside source: true *** True Line Result [4, 61, 56, 3] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def hotspot_bottom~ - Inside source: true *** True Line Result def hotspot_bottom ** Processing line: ~ [4, 0, 56, 3]~ - Inside source: true *** True Line Result [4, 0, 56, 3] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def hotspot_top_right~ - Inside source: true *** True Line Result def hotspot_top_right ** Processing line: ~ [62, 35, 3, 25]~ - Inside source: true *** True Line Result [62, 35, 3, 25] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def hotspot_bottom_right~ - Inside source: true *** True Line Result def hotspot_bottom_right ** Processing line: ~ [62, 0, 3, 25]~ - Inside source: true *** True Line Result [62, 0, 3, 25] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def storyline_history_include? args, text~ - Inside source: true *** True Line Result def storyline_history_include? args, text ** Processing line: ~ args.state.storyline_history.any? { |s| s.gsub("-", "").gsub(" ", "").include? text.gsub("-", "").gsub(" ", "") }~ - Inside source: true *** True Line Result args.state.storyline_history.any? { |s| s.gsub("-", "").gsub(" ", "").include? text.gsub("-", "").gsub(" ", "") } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def blinking_light_side_of_home_render args, lowrez_sprites, lowrez_labels, lowrez_solids~ - Inside source: true *** True Line Result def blinking_light_side_of_home_render args, lowrez_sprites, lowrez_labels, lowrez_solids ** Processing line: ~ lowrez_sprites << [48, 44, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [48, 44, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ lowrez_sprites << [49, 45, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [49, 45, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ lowrez_sprites << [50, 46, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [50, 46, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def blinking_light_mountain_pass_render args, lowrez_sprites, lowrez_labels, lowrez_solids~ - Inside source: true *** True Line Result def blinking_light_mountain_pass_render args, lowrez_sprites, lowrez_labels, lowrez_solids ** Processing line: ~ lowrez_sprites << [18, 47, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [18, 47, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ lowrez_sprites << [19, 48, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [19, 48, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ lowrez_sprites << [20, 49, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [20, 49, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def blinking_light_path_to_observatory_render args, lowrez_sprites, lowrez_labels, lowrez_solids~ - Inside source: true *** True Line Result def blinking_light_path_to_observatory_render args, lowrez_sprites, lowrez_labels, lowrez_solids ** Processing line: ~ lowrez_sprites << [0, 26, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [0, 26, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ lowrez_sprites << [1, 27, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [1, 27, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ lowrez_sprites << [2, 28, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [2, 28, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def blinking_light_observatory_render args, lowrez_sprites, lowrez_labels, lowrez_solids~ - Inside source: true *** True Line Result def blinking_light_observatory_render args, lowrez_sprites, lowrez_labels, lowrez_solids ** Processing line: ~ lowrez_sprites << [23, 59, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [23, 59, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ lowrez_sprites << [24, 60, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [24, 60, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ lowrez_sprites << [25, 61, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [25, 61, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def blinking_light_inside_observatory_render args, lowrez_sprites, lowrez_labels, lowrez_solids~ - Inside source: true *** True Line Result def blinking_light_inside_observatory_render args, lowrez_sprites, lowrez_labels, lowrez_solids ** Processing line: ~ lowrez_sprites << [30, 30, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [30, 30, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ lowrez_sprites << [31, 31, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [31, 31, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ lowrez_sprites << [32, 32, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ - Inside source: true *** True Line Result lowrez_sprites << [32, 32, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def decision_graph context_message, context_action, context_result_one, context_result_two, context_result_three = [], context_result_four = []~ - Inside source: true *** True Line Result def decision_graph context_message, context_action, context_result_one, context_result_two, context_result_three = [], context_result_four = [] ** Processing line: ~ result_one_scene, result_one_label, result_one_text = context_result_one~ - Inside source: true *** True Line Result result_one_scene, result_one_label, result_one_text = context_result_one ** Processing line: ~ result_two_scene, result_two_label, result_two_text = context_result_two~ - Inside source: true *** True Line Result result_two_scene, result_two_label, result_two_text = context_result_two ** Processing line: ~ result_three_scene, result_three_label, result_three_text = context_result_three~ - Inside source: true *** True Line Result result_three_scene, result_three_label, result_three_text = context_result_three ** Processing line: ~ result_four_scene, result_four_label, result_four_text = context_result_four~ - Inside source: true *** True Line Result result_four_scene, result_four_label, result_four_text = context_result_four ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ top_level_hash = {~ - Inside source: true *** True Line Result top_level_hash = { ** Processing line: ~ background: 'sprites/decision.png',~ - Inside source: true *** True Line Result background: 'sprites/decision.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [20, 36],~ - Inside source: true *** True Line Result player: [20, 36], ** Processing line: ~ storylines: [ ],~ - Inside source: true *** True Line Result storylines: [ ], ** Processing line: ~ scenes: [ ]~ - Inside source: true *** True Line Result scenes: [ ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ confirmation_result_one_hash = {~ - Inside source: true *** True Line Result confirmation_result_one_hash = { ** Processing line: ~ background: 'sprites/decision.png',~ - Inside source: true *** True Line Result background: 'sprites/decision.png', ** Processing line: ~ scenes: [ ],~ - Inside source: true *** True Line Result scenes: [ ], ** Processing line: ~ storylines: [ ]~ - Inside source: true *** True Line Result storylines: [ ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ confirmation_result_two_hash = {~ - Inside source: true *** True Line Result confirmation_result_two_hash = { ** Processing line: ~ background: 'sprites/decision.png',~ - Inside source: true *** True Line Result background: 'sprites/decision.png', ** Processing line: ~ scenes: [ ],~ - Inside source: true *** True Line Result scenes: [ ], ** Processing line: ~ storylines: [ ]~ - Inside source: true *** True Line Result storylines: [ ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ confirmation_result_three_hash = {~ - Inside source: true *** True Line Result confirmation_result_three_hash = { ** Processing line: ~ background: 'sprites/decision.png',~ - Inside source: true *** True Line Result background: 'sprites/decision.png', ** Processing line: ~ scenes: [ ],~ - Inside source: true *** True Line Result scenes: [ ], ** Processing line: ~ storylines: [ ]~ - Inside source: true *** True Line Result storylines: [ ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ confirmation_result_four_hash = {~ - Inside source: true *** True Line Result confirmation_result_four_hash = { ** Processing line: ~ background: 'sprites/decision.png',~ - Inside source: true *** True Line Result background: 'sprites/decision.png', ** Processing line: ~ scenes: [ ],~ - Inside source: true *** True Line Result scenes: [ ], ** Processing line: ~ storylines: [ ]~ - Inside source: true *** True Line Result storylines: [ ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ top_level_hash[:storylines] << [ 5, 35, 4, 4, context_message]~ - Inside source: true *** True Line Result top_level_hash[:storylines] << [ 5, 35, 4, 4, context_message] ** Processing line: ~ top_level_hash[:storylines] << [20, 35, 4, 4, context_action]~ - Inside source: true *** True Line Result top_level_hash[:storylines] << [20, 35, 4, 4, context_action] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ confirmation_result_one_hash[:scenes] << [20, 35, 4, 4, top_level_hash]~ - Inside source: true *** True Line Result confirmation_result_one_hash[:scenes] << [20, 35, 4, 4, top_level_hash] ** Processing line: ~ confirmation_result_one_hash[:scenes] << [60, 50, 4, 4, result_one_scene]~ - Inside source: true *** True Line Result confirmation_result_one_hash[:scenes] << [60, 50, 4, 4, result_one_scene] ** Processing line: ~ confirmation_result_one_hash[:storylines] << [40, 50, 4, 4, "#{result_one_label}: \"#{result_one_text}\""]~ - Inside source: true *** True Line Result confirmation_result_one_hash[:storylines] << [40, 50, 4, 4, "#{result_one_label}: \"#{result_one_text}\""] ** Processing line: ~ confirmation_result_one_hash[:scenes] << [40, 40, 4, 4, confirmation_result_four_hash] if result_four_scene~ - Inside source: true *** True Line Result confirmation_result_one_hash[:scenes] << [40, 40, 4, 4, confirmation_result_four_hash] if result_four_scene ** Processing line: ~ confirmation_result_one_hash[:scenes] << [40, 30, 4, 4, confirmation_result_three_hash] if result_three_scene~ - Inside source: true *** True Line Result confirmation_result_one_hash[:scenes] << [40, 30, 4, 4, confirmation_result_three_hash] if result_three_scene ** Processing line: ~ confirmation_result_one_hash[:scenes] << [40, 20, 4, 4, confirmation_result_two_hash]~ - Inside source: true *** True Line Result confirmation_result_one_hash[:scenes] << [40, 20, 4, 4, confirmation_result_two_hash] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ confirmation_result_two_hash[:scenes] << [20, 35, 4, 4, top_level_hash]~ - Inside source: true *** True Line Result confirmation_result_two_hash[:scenes] << [20, 35, 4, 4, top_level_hash] ** Processing line: ~ confirmation_result_two_hash[:scenes] << [40, 50, 4, 4, confirmation_result_one_hash]~ - Inside source: true *** True Line Result confirmation_result_two_hash[:scenes] << [40, 50, 4, 4, confirmation_result_one_hash] ** Processing line: ~ confirmation_result_two_hash[:scenes] << [40, 40, 4, 4, confirmation_result_four_hash] if result_four_scene~ - Inside source: true *** True Line Result confirmation_result_two_hash[:scenes] << [40, 40, 4, 4, confirmation_result_four_hash] if result_four_scene ** Processing line: ~ confirmation_result_two_hash[:scenes] << [40, 30, 4, 4, confirmation_result_three_hash] if result_three_scene~ - Inside source: true *** True Line Result confirmation_result_two_hash[:scenes] << [40, 30, 4, 4, confirmation_result_three_hash] if result_three_scene ** Processing line: ~ confirmation_result_two_hash[:scenes] << [60, 20, 4, 4, result_two_scene]~ - Inside source: true *** True Line Result confirmation_result_two_hash[:scenes] << [60, 20, 4, 4, result_two_scene] ** Processing line: ~ confirmation_result_two_hash[:storylines] << [40, 20, 4, 4, "#{result_two_label}: \"#{result_two_text}\""]~ - Inside source: true *** True Line Result confirmation_result_two_hash[:storylines] << [40, 20, 4, 4, "#{result_two_label}: \"#{result_two_text}\""] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ confirmation_result_three_hash[:scenes] << [20, 35, 4, 4, top_level_hash]~ - Inside source: true *** True Line Result confirmation_result_three_hash[:scenes] << [20, 35, 4, 4, top_level_hash] ** Processing line: ~ confirmation_result_three_hash[:scenes] << [40, 50, 4, 4, confirmation_result_one_hash]~ - Inside source: true *** True Line Result confirmation_result_three_hash[:scenes] << [40, 50, 4, 4, confirmation_result_one_hash] ** Processing line: ~ confirmation_result_three_hash[:scenes] << [40, 40, 4, 4, confirmation_result_four_hash]~ - Inside source: true *** True Line Result confirmation_result_three_hash[:scenes] << [40, 40, 4, 4, confirmation_result_four_hash] ** Processing line: ~ confirmation_result_three_hash[:scenes] << [60, 30, 4, 4, result_three_scene]~ - Inside source: true *** True Line Result confirmation_result_three_hash[:scenes] << [60, 30, 4, 4, result_three_scene] ** Processing line: ~ confirmation_result_three_hash[:storylines] << [40, 30, 4, 4, "#{result_three_label}: \"#{result_three_text}\""]~ - Inside source: true *** True Line Result confirmation_result_three_hash[:storylines] << [40, 30, 4, 4, "#{result_three_label}: \"#{result_three_text}\""] ** Processing line: ~ confirmation_result_three_hash[:scenes] << [40, 20, 4, 4, confirmation_result_two_hash]~ - Inside source: true *** True Line Result confirmation_result_three_hash[:scenes] << [40, 20, 4, 4, confirmation_result_two_hash] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ confirmation_result_four_hash[:scenes] << [20, 35, 4, 4, top_level_hash]~ - Inside source: true *** True Line Result confirmation_result_four_hash[:scenes] << [20, 35, 4, 4, top_level_hash] ** Processing line: ~ confirmation_result_four_hash[:scenes] << [40, 50, 4, 4, confirmation_result_one_hash]~ - Inside source: true *** True Line Result confirmation_result_four_hash[:scenes] << [40, 50, 4, 4, confirmation_result_one_hash] ** Processing line: ~ confirmation_result_four_hash[:scenes] << [60, 40, 4, 4, result_four_scene]~ - Inside source: true *** True Line Result confirmation_result_four_hash[:scenes] << [60, 40, 4, 4, result_four_scene] ** Processing line: ~ confirmation_result_four_hash[:storylines] << [40, 40, 4, 4, "#{result_four_label}: \"#{result_four_text}\""]~ - Inside source: true *** True Line Result confirmation_result_four_hash[:storylines] << [40, 40, 4, 4, "#{result_four_label}: \"#{result_four_text}\""] ** Processing line: ~ confirmation_result_four_hash[:scenes] << [40, 30, 4, 4, confirmation_result_three_hash]~ - Inside source: true *** True Line Result confirmation_result_four_hash[:scenes] << [40, 30, 4, 4, confirmation_result_three_hash] ** Processing line: ~ confirmation_result_four_hash[:scenes] << [40, 20, 4, 4, confirmation_result_two_hash]~ - Inside source: true *** True Line Result confirmation_result_four_hash[:scenes] << [40, 20, 4, 4, confirmation_result_two_hash] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ top_level_hash[:scenes] << [40, 50, 4, 4, confirmation_result_one_hash]~ - Inside source: true *** True Line Result top_level_hash[:scenes] << [40, 50, 4, 4, confirmation_result_one_hash] ** Processing line: ~ top_level_hash[:scenes] << [40, 40, 4, 4, confirmation_result_four_hash] if result_four_scene~ - Inside source: true *** True Line Result top_level_hash[:scenes] << [40, 40, 4, 4, confirmation_result_four_hash] if result_four_scene ** Processing line: ~ top_level_hash[:scenes] << [40, 30, 4, 4, confirmation_result_three_hash] if result_three_scene~ - Inside source: true *** True Line Result top_level_hash[:scenes] << [40, 30, 4, 4, confirmation_result_three_hash] if result_three_scene ** Processing line: ~ top_level_hash[:scenes] << [40, 20, 4, 4, confirmation_result_two_hash]~ - Inside source: true *** True Line Result top_level_hash[:scenes] << [40, 20, 4, 4, confirmation_result_two_hash] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ top_level_hash~ - Inside source: true *** True Line Result top_level_hash ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def ship_control_hotspot offset_x, offset_y, a, b, c, d~ - Inside source: true *** True Line Result def ship_control_hotspot offset_x, offset_y, a, b, c, d ** Processing line: ~ results = []~ - Inside source: true *** True Line Result results = [] ** Processing line: ~ results << [ 6 + offset_x, 0 + offset_y, 4, 4, a] if a~ - Inside source: true *** True Line Result results << [ 6 + offset_x, 0 + offset_y, 4, 4, a] if a ** Processing line: ~ results << [ 1 + offset_x, 5 + offset_y, 4, 4, b] if b~ - Inside source: true *** True Line Result results << [ 1 + offset_x, 5 + offset_y, 4, 4, b] if b ** Processing line: ~ results << [ 6 + offset_x, 5 + offset_y, 4, 4, c] if c~ - Inside source: true *** True Line Result results << [ 6 + offset_x, 5 + offset_y, 4, 4, c] if c ** Processing line: ~ results << [ 11 + offset_x, 5 + offset_y, 4, 4, d] if d~ - Inside source: true *** True Line Result results << [ 11 + offset_x, 5 + offset_y, 4, 4, d] if d ** Processing line: ~ results~ - Inside source: true *** True Line Result results ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reload_current_scene~ - Inside source: true *** True Line Result def reload_current_scene ** Processing line: ~ if $gtk.args.state.last_hotspot_scene~ - Inside source: true *** True Line Result if $gtk.args.state.last_hotspot_scene ** Processing line: ~ set_scene $gtk.args, send($gtk.args.state.last_hotspot_scene, $gtk.args)~ - Inside source: true *** True Line Result set_scene $gtk.args, send($gtk.args.state.last_hotspot_scene, $gtk.args) ** Processing line: ~ tick $gtk.args~ - Inside source: true *** True Line Result tick $gtk.args ** Processing line: ~ elsif respond_to? :set_scene~ - Inside source: true *** True Line Result elsif respond_to? :set_scene ** Processing line: ~ set_scene $gtk.args, (replied_to_serenity_alive_firmly $gtk.args)~ - Inside source: true *** True Line Result set_scene $gtk.args, (replied_to_serenity_alive_firmly $gtk.args) ** Processing line: ~ tick $gtk.args~ - Inside source: true *** True Line Result tick $gtk.args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ $gtk.console.close~ - Inside source: true *** True Line Result $gtk.console.close ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_anka.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Return Of Serenity - storyline_anka.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_anka.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_anka.rb ** Processing line: ~ def anka_inside_room args~ - Inside source: true *** True Line Result def anka_inside_room args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-home.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-home.png', ** Processing line: ~ player: [34, 35],~ - Inside source: true *** True Line Result player: [34, 35], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [34, 34, 4, 4, "Ahhhh!!! Oh god, it was just- a nightmare."],~ - Inside source: true *** True Line Result [34, 34, 4, 4, "Ahhhh!!! Oh god, it was just- a nightmare."], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [32, -1, 8, 3, :anka_observatory]~ - Inside source: true *** True Line Result [32, -1, 8, 3, :anka_observatory] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def anka_observatory args~ - Inside source: true *** True Line Result def anka_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [51, 12],~ - Inside source: true *** True Line Result player: [51, 12], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [50, 10, 4, 4, "Breathe, Hiro. Just see what's there... everything--- will- be okay."]~ - Inside source: true *** True Line Result [50, 10, 4, 4, "Breathe, Hiro. Just see what's there... everything--- will- be okay."] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [30, 18, 5, 12, :anka_inside_mainframe]~ - Inside source: true *** True Line Result [30, 18, 5, 12, :anka_inside_mainframe] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_inside_observatory_render~ - Inside source: true *** True Line Result render_override: :blinking_light_inside_observatory_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def anka_inside_mainframe args~ - Inside source: true *** True Line Result def anka_inside_mainframe args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ player: [32, 4],~ - Inside source: true *** True Line Result player: [32, 4], ** Processing line: ~ background: 'sprites/mainframe.png',~ - Inside source: true *** True Line Result background: 'sprites/mainframe.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [22, 45, 17, 4, (anka_last_reply args)],~ - Inside source: true *** True Line Result [22, 45, 17, 4, (anka_last_reply args)], ** Processing line: ~ [45, 45, 4, 4, (anka_current_reply args)],~ - Inside source: true *** True Line Result [45, 45, 4, 4, (anka_current_reply args)], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [*hotspot_top_right, :reply_to_anka]~ - Inside source: true *** True Line Result [*hotspot_top_right, :reply_to_anka] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reply_to_anka args~ - Inside source: true *** True Line Result def reply_to_anka args ** Processing line: ~ decision_graph anka_current_reply(args),~ - Inside source: true *** True Line Result decision_graph anka_current_reply(args), ** Processing line: ~ "Matthew's-- wife is doing-- well. What's-- even-- better-- is that he's-- a dad, and he didn't-- even-- know it. Should- I- leave- out the part about-- the crew- being-- in hibernation-- for 20-- years? They- should- enter-- statis-- on a high- note... Right?",~ - Inside source: true *** True Line Result "Matthew's-- wife is doing-- well. What's-- even-- better-- is that he's-- a dad, and he didn't-- even-- know it. Should- I- leave- out the part about-- the crew- being-- in hibernation-- for 20-- years? They- should- enter-- statis-- on a high- note... Right?", ** Processing line: ~ [:replied_with_whole_truth, "Whole-- Truth--", anka_reply_whole_truth],~ - Inside source: true *** True Line Result [:replied_with_whole_truth, "Whole-- Truth--", anka_reply_whole_truth], ** Processing line: ~ [:replied_with_half_truth, "Half-- Truth--", anka_reply_half_truth]~ - Inside source: true *** True Line Result [:replied_with_half_truth, "Half-- Truth--", anka_reply_half_truth] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def anka_last_reply args~ - Inside source: true *** True Line Result def anka_last_reply args ** Processing line: ~ if args.state.scene_history.include? :replied_to_serenity_alive_firmly~ - Inside source: true *** True Line Result if args.state.scene_history.include? :replied_to_serenity_alive_firmly ** Processing line: ~ return "Buffer--: #{serenity_alive_firm_reply.quote}"~ - Inside source: true *** True Line Result return "Buffer--: #{serenity_alive_firm_reply.quote}" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return "Buffer--: #{serenity_alive_sugarcoated_reply.quote}"~ - Inside source: true *** True Line Result return "Buffer--: #{serenity_alive_sugarcoated_reply.quote}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def anka_reply_whole_truth~ - Inside source: true *** True Line Result def anka_reply_whole_truth ** Processing line: ~ "Matthew's wife is doing-- very-- well. In fact, she was pregnant. Matthew-- is a dad. He has a son. But, I need- all-- of-- you-- to brace-- yourselves. You've-- been in statis-- for 20 years. A lot has changed. Most of Earth's-- population--- didn't-- survive. Tell- Matthew-- that I'm-- sorry he didn't-- get to see- his- son grow- up."~ - Inside source: true *** True Line Result "Matthew's wife is doing-- very-- well. In fact, she was pregnant. Matthew-- is a dad. He has a son. But, I need- all-- of-- you-- to brace-- yourselves. You've-- been in statis-- for 20 years. A lot has changed. Most of Earth's-- population--- didn't-- survive. Tell- Matthew-- that I'm-- sorry he didn't-- get to see- his- son grow- up." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def anka_reply_half_truth~ - Inside source: true *** True Line Result def anka_reply_half_truth ** Processing line: ~ "Matthew's--- wife- is doing-- very-- well. In fact, she was pregnant. Matthew is a dad! It's a boy! Tell- Matthew-- congrats-- for me. Hope-- to see- all of you- soon."~ - Inside source: true *** True Line Result "Matthew's--- wife- is doing-- very-- well. In fact, she was pregnant. Matthew is a dad! It's a boy! Tell- Matthew-- congrats-- for me. Hope-- to see- all of you- soon." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replied_with_whole_truth args~ - Inside source: true *** True Line Result def replied_with_whole_truth args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [32, 21],~ - Inside source: true *** True Line Result player: [32, 21], ** Processing line: ~ scenes: [[60, 0, 4, 32, :replied_to_anka_back_home]],~ - Inside source: true *** True Line Result scenes: [[60, 0, 4, 32, :replied_to_anka_back_home]], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [30, 18, 5, 12, "Buffer-- has been set to: #{anka_reply_whole_truth.quote}"],~ - Inside source: true *** True Line Result [30, 18, 5, 12, "Buffer-- has been set to: #{anka_reply_whole_truth.quote}"], ** Processing line: ~ [30, 10, 5, 4, "I- hope- I- did the right- thing- by laying-- it all- out- there."],~ - Inside source: true *** True Line Result [30, 10, 5, 4, "I- hope- I- did the right- thing- by laying-- it all- out- there."], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replied_with_half_truth args~ - Inside source: true *** True Line Result def replied_with_half_truth args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [32, 21],~ - Inside source: true *** True Line Result player: [32, 21], ** Processing line: ~ scenes: [[60, 0, 4, 32, :replied_to_anka_back_home]],~ - Inside source: true *** True Line Result scenes: [[60, 0, 4, 32, :replied_to_anka_back_home]], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [30, 18, 5, 12, "Buffer-- has been set to: #{anka_reply_half_truth.quote}"],~ - Inside source: true *** True Line Result [30, 18, 5, 12, "Buffer-- has been set to: #{anka_reply_half_truth.quote}"], ** Processing line: ~ [30, 10, 5, 4, "I- hope- I- did the right- thing- by not giving-- them- the whole- truth."],~ - Inside source: true *** True Line Result [30, 10, 5, 4, "I- hope- I- did the right- thing- by not giving-- them- the whole- truth."], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def anka_current_reply args~ - Inside source: true *** True Line Result def anka_current_reply args ** Processing line: ~ if args.state.scene_history.include? :replied_to_serenity_alive_firmly~ - Inside source: true *** True Line Result if args.state.scene_history.include? :replied_to_serenity_alive_firmly ** Processing line: ~ return "Hello. This is, Aanka. Sasha-- is still- trying-- to gather-- her wits about-- her, given- the gravity--- of your- last- reply. Thank- you- for being-- honest, and thank- you- for the help- with the ship- diagnostics. I was able-- to retrieve-- all of the navigation--- information---- after-- the battery--- swap. We- are ready-- to head back to Earth. Before-- we go- back- into-- statis, Matthew--- wanted-- to know- how his- wife- is doing. Please- reply-- as soon- as you can. He's-- not going-- to get- into-- the statis-- chamber-- until-- he knows- his wife is okay."~ - Inside source: true *** True Line Result return "Hello. This is, Aanka. Sasha-- is still- trying-- to gather-- her wits about-- her, given- the gravity--- of your- last- reply. Thank- you- for being-- honest, and thank- you- for the help- with the ship- diagnostics. I was able-- to retrieve-- all of the navigation--- information---- after-- the battery--- swap. We- are ready-- to head back to Earth. Before-- we go- back- into-- statis, Matthew--- wanted-- to know- how his- wife- is doing. Please- reply-- as soon- as you can. He's-- not going-- to get- into-- the statis-- chamber-- until-- he knows- his wife is okay." ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return "Hello. This is, Aanka. Thank- you for the help- with the ship's-- diagnostics. I was able-- to retrieve-- all of the navigation--- information--- after-- the battery-- swap. I- know-- that- you didn't-- tell- the whole truth- about-- how far we are from- Earth. Don't-- worry. I understand-- why you did it. We- are ready-- to head back to Earth. Before-- we go- back- into-- statis, Matthew--- wanted-- to know- how his- wife- is doing. Please- reply-- as soon- as you can. He's-- not going-- to get- into-- the statis-- chamber-- until-- he knows- his wife is okay."~ - Inside source: true *** True Line Result return "Hello. This is, Aanka. Thank- you for the help- with the ship's-- diagnostics. I was able-- to retrieve-- all of the navigation--- information--- after-- the battery-- swap. I- know-- that- you didn't-- tell- the whole truth- about-- how far we are from- Earth. Don't-- worry. I understand-- why you did it. We- are ready-- to head back to Earth. Before-- we go- back- into-- statis, Matthew--- wanted-- to know- how his- wife- is doing. Please- reply-- as soon- as you can. He's-- not going-- to get- into-- the statis-- chamber-- until-- he knows- his wife is okay." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replied_to_anka_back_home args~ - Inside source: true *** True Line Result def replied_to_anka_back_home args ** Processing line: ~ if args.state.scene_history.include? :replied_with_whole_truth~ - Inside source: true *** True Line Result if args.state.scene_history.include? :replied_with_whole_truth ** Processing line: ~ return {~ - Inside source: true *** True Line Result return { ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ background: 'sprites/inside-home.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-home.png', ** Processing line: ~ player: [34, 4],~ - Inside source: true *** True Line Result player: [34, 4], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [34, 4, 4, 4, "I- hope-- this pit in my stomach-- is gone-- by tomorrow---."],~ - Inside source: true *** True Line Result [34, 4, 4, 4, "I- hope-- this pit in my stomach-- is gone-- by tomorrow---."], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [30, 38, 12, 13, :final_message_sad],~ - Inside source: true *** True Line Result [30, 38, 12, 13, :final_message_sad], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return {~ - Inside source: true *** True Line Result return { ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ background: 'sprites/inside-home.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-home.png', ** Processing line: ~ player: [34, 4],~ - Inside source: true *** True Line Result player: [34, 4], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [34, 4, 4, 4, "I- get the feeling-- I'm going-- to sleep real well tonight--."],~ - Inside source: true *** True Line Result [34, 4, 4, 4, "I- get the feeling-- I'm going-- to sleep real well tonight--."], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [30, 38, 12, 13, :final_message_happy],~ - Inside source: true *** True Line Result [30, 38, 12, 13, :final_message_happy], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_blinking_light.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Return Of Serenity - storyline_blinking_light.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_blinking_light.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_blinking_light.rb ** Processing line: ~ def the_blinking_light args~ - Inside source: true *** True Line Result def the_blinking_light args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ background: 'sprites/side-of-home.png',~ - Inside source: true *** True Line Result background: 'sprites/side-of-home.png', ** Processing line: ~ player: [16, 13],~ - Inside source: true *** True Line Result player: [16, 13], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [52, 24, 11, 5, :blinking_light_mountain_pass],~ - Inside source: true *** True Line Result [52, 24, 11, 5, :blinking_light_mountain_pass], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_side_of_home_render~ - Inside source: true *** True Line Result render_override: :blinking_light_side_of_home_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def blinking_light_mountain_pass args~ - Inside source: true *** True Line Result def blinking_light_mountain_pass args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/mountain-pass-zoomed-out.png',~ - Inside source: true *** True Line Result background: 'sprites/mountain-pass-zoomed-out.png', ** Processing line: ~ player: [4, 4],~ - Inside source: true *** True Line Result player: [4, 4], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [18, 47, 5, 5, :blinking_light_path_to_observatory]~ - Inside source: true *** True Line Result [18, 47, 5, 5, :blinking_light_path_to_observatory] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_mountain_pass_render~ - Inside source: true *** True Line Result render_override: :blinking_light_mountain_pass_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def blinking_light_path_to_observatory args~ - Inside source: true *** True Line Result def blinking_light_path_to_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/path-to-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/path-to-observatory.png', ** Processing line: ~ player: [60, 4],~ - Inside source: true *** True Line Result player: [60, 4], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [0, 26, 5, 5, :blinking_light_observatory]~ - Inside source: true *** True Line Result [0, 26, 5, 5, :blinking_light_observatory] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_path_to_observatory_render~ - Inside source: true *** True Line Result render_override: :blinking_light_path_to_observatory_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def blinking_light_observatory args~ - Inside source: true *** True Line Result def blinking_light_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/observatory.png', ** Processing line: ~ player: [60, 2],~ - Inside source: true *** True Line Result player: [60, 2], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [28, 39, 4, 10, :blinking_light_inside_observatory]~ - Inside source: true *** True Line Result [28, 39, 4, 10, :blinking_light_inside_observatory] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_observatory_render~ - Inside source: true *** True Line Result render_override: :blinking_light_observatory_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def blinking_light_inside_observatory args~ - Inside source: true *** True Line Result def blinking_light_inside_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ player: [60, 2],~ - Inside source: true *** True Line Result player: [60, 2], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [50, 2, 4, 8, "That's weird. I thought- this- mainframe-- was broken--."]~ - Inside source: true *** True Line Result [50, 2, 4, 8, "That's weird. I thought- this- mainframe-- was broken--."] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [30, 18, 5, 12, :blinking_light_inside_mainframe]~ - Inside source: true *** True Line Result [30, 18, 5, 12, :blinking_light_inside_mainframe] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_inside_observatory_render~ - Inside source: true *** True Line Result render_override: :blinking_light_inside_observatory_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def blinking_light_inside_mainframe args~ - Inside source: true *** True Line Result def blinking_light_inside_mainframe args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/mainframe.png',~ - Inside source: true *** True Line Result background: 'sprites/mainframe.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [30, 4],~ - Inside source: true *** True Line Result player: [30, 4], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [62, 32, 4, 32, :reply_to_introduction]~ - Inside source: true *** True Line Result [62, 32, 4, 32, :reply_to_introduction] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [43, 43, 8, 8, "\"Mission-- control--, your- main- comm-- channels-- seem-- to be down. My apologies-- for- using-- this low- level-- exploit--. What's-- going-- on down there? We are ready-- for reentry--.\" Message--- Timestamp---: 4- hours-- 23--- minutes-- ago--."],~ - Inside source: true *** True Line Result [43, 43, 8, 8, "\"Mission-- control--, your- main- comm-- channels-- seem-- to be down. My apologies-- for- using-- this low- level-- exploit--. What's-- going-- on down there? We are ready-- for reentry--.\" Message--- Timestamp---: 4- hours-- 23--- minutes-- ago--."], ** Processing line: ~ [30, 30, 4, 4, "There's-- a low- level-- message-- here... NANI.T.F?"],~ - Inside source: true *** True Line Result [30, 30, 4, 4, "There's-- a low- level-- message-- here... NANI.T.F?"], ** Processing line: ~ [14, 10, 24, 4, "Oh interesting---. This transistor--- needed-- to be activated--- for the- mainframe-- to work."],~ - Inside source: true *** True Line Result [14, 10, 24, 4, "Oh interesting---. This transistor--- needed-- to be activated--- for the- mainframe-- to work."], ** Processing line: ~ [14, 20, 24, 4, "What the heck activated--- this thing- though?"]~ - Inside source: true *** True Line Result [14, 20, 24, 4, "What the heck activated--- this thing- though?"] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_day_one.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Return Of Serenity - storyline_day_one.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_day_one.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_day_one.rb ** Processing line: ~ def day_one_beginning args~ - Inside source: true *** True Line Result def day_one_beginning args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/side-of-home.png',~ - Inside source: true *** True Line Result background: 'sprites/side-of-home.png', ** Processing line: ~ player: [16, 13],~ - Inside source: true *** True Line Result player: [16, 13], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [0, 0, 64, 2, :day_one_infront_of_home],~ - Inside source: true *** True Line Result [0, 0, 64, 2, :day_one_infront_of_home], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [35, 10, 6, 6, "Man. Hard to believe- that today- is the 20th--- anniversary-- of The Impact."]~ - Inside source: true *** True Line Result [35, 10, 6, 6, "Man. Hard to believe- that today- is the 20th--- anniversary-- of The Impact."] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def day_one_infront_of_home args~ - Inside source: true *** True Line Result def day_one_infront_of_home args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/front-of-home.png',~ - Inside source: true *** True Line Result background: 'sprites/front-of-home.png', ** Processing line: ~ player: [56, 23],~ - Inside source: true *** True Line Result player: [56, 23], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [43, 34, 10, 16, :day_one_home],~ - Inside source: true *** True Line Result [43, 34, 10, 16, :day_one_home], ** Processing line: ~ [62, 0, 3, 40, :day_one_beginning],~ - Inside source: true *** True Line Result [62, 0, 3, 40, :day_one_beginning], ** Processing line: ~ [0, 4, 3, 20, :day_one_ceremony]~ - Inside source: true *** True Line Result [0, 4, 3, 20, :day_one_ceremony] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [40, 20, 4, 4, "It looks like everyone- is already- at the rememberance-- ceremony."],~ - Inside source: true *** True Line Result [40, 20, 4, 4, "It looks like everyone- is already- at the rememberance-- ceremony."], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def day_one_home args~ - Inside source: true *** True Line Result def day_one_home args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-home.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-home.png', ** Processing line: ~ player: [34, 3],~ - Inside source: true *** True Line Result player: [34, 3], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [28, 0, 12, 2, :day_one_infront_of_home]~ - Inside source: true *** True Line Result [28, 0, 12, 2, :day_one_infront_of_home] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ 38, 4, 4, 4, "My mansion- in all its glory! Okay yea, it's just a shipping- container-. Apparently-, it's nothing- like the luxuries- of the 2040's. But it's- all we have- in- this day and age. And it'll suffice."~ - Inside source: true *** True Line Result 38, 4, 4, 4, "My mansion- in all its glory! Okay yea, it's just a shipping- container-. Apparently-, it's nothing- like the luxuries- of the 2040's. But it's- all we have- in- this day and age. And it'll suffice." ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ 28, 7, 4, 7,~ - Inside source: true *** True Line Result 28, 7, 4, 7, ** Processing line: ~ "Ahhh. My reading- couch. It's so comfortable--."~ - Inside source: true *** True Line Result "Ahhh. My reading- couch. It's so comfortable--." ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ 38, 21, 4, 4,~ - Inside source: true *** True Line Result 38, 21, 4, 4, ** Processing line: ~ "I'm- lucky- to have a computer--. I'm- one of the few people- with- the skills to put this- thing to good use."~ - Inside source: true *** True Line Result "I'm- lucky- to have a computer--. I'm- one of the few people- with- the skills to put this- thing to good use." ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ 45, 37, 4, 8,~ - Inside source: true *** True Line Result 45, 37, 4, 8, ** Processing line: ~ "This corner- of my home- is always- warmer-. It's cause of the ref~lected-- light- from the solar-- panels--, just on the other- side- of this wall. It's hard- to believe- there was o~nce-- an unlimited- amount- of electricity--."~ - Inside source: true *** True Line Result "This corner- of my home- is always- warmer-. It's cause of the ref~lected-- light- from the solar-- panels--, just on the other- side- of this wall. It's hard- to believe- there was o~nce-- an unlimited- amount- of electricity--." ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ 32, 40, 8, 10,~ - Inside source: true *** True Line Result 32, 40, 8, 10, ** Processing line: ~ "This isn't- a good time- to sleep. I- should probably- head to the ceremony-."~ - Inside source: true *** True Line Result "This isn't- a good time- to sleep. I- should probably- head to the ceremony-." ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ 25, 21, 5, 12,~ - Inside source: true *** True Line Result 25, 21, 5, 12, ** Processing line: ~ "Fifteen-- years- of computer-- science-- notes, neatly-- organized. Compiler--- Theory--, Linear--- Algebra---, Game-- Development---... Every-- subject-- imaginable--."~ - Inside source: true *** True Line Result "Fifteen-- years- of computer-- science-- notes, neatly-- organized. Compiler--- Theory--, Linear--- Algebra---, Game-- Development---... Every-- subject-- imaginable--." ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def day_one_ceremony args~ - Inside source: true *** True Line Result def day_one_ceremony args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/tribute.png',~ - Inside source: true *** True Line Result background: 'sprites/tribute.png', ** Processing line: ~ player: [57, 21],~ - Inside source: true *** True Line Result player: [57, 21], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [62, 0, 2, 40, :day_one_infront_of_home],~ - Inside source: true *** True Line Result [62, 0, 2, 40, :day_one_infront_of_home], ** Processing line: ~ [0, 24, 2, 40, :day_one_infront_of_library]~ - Inside source: true *** True Line Result [0, 24, 2, 40, :day_one_infront_of_library] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [53, 12, 3, 8, "It's- been twenty- years since The Impact. Twenty- years, since Halley's-- Comet-- set Earth's- blue- sky on fire."],~ - Inside source: true *** True Line Result [53, 12, 3, 8, "It's- been twenty- years since The Impact. Twenty- years, since Halley's-- Comet-- set Earth's- blue- sky on fire."], ** Processing line: ~ [45, 12, 3, 8, "The space mission- sent to prevent- Earth's- total- destruction--, was a success. Only- 99.9%------ of the world's- population-- died-- that day. Hey, it's- better-- than 100%---- of humanity-- dying."],~ - Inside source: true *** True Line Result [45, 12, 3, 8, "The space mission- sent to prevent- Earth's- total- destruction--, was a success. Only- 99.9%------ of the world's- population-- died-- that day. Hey, it's- better-- than 100%---- of humanity-- dying."], ** Processing line: ~ [20, 12, 23, 4, "The monument--- reads:---- Here- stands- the tribute-- to Space- Mission-- Serenity--- and- its- crew. You- have- given-- humanity--- a second-- chance."],~ - Inside source: true *** True Line Result [20, 12, 23, 4, "The monument--- reads:---- Here- stands- the tribute-- to Space- Mission-- Serenity--- and- its- crew. You- have- given-- humanity--- a second-- chance."], ** Processing line: ~ [15, 12, 3, 8, "Rest- in- peace--- Matthew----, Sasha----, Aanka----"],~ - Inside source: true *** True Line Result [15, 12, 3, 8, "Rest- in- peace--- Matthew----, Sasha----, Aanka----"], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def day_one_infront_of_library args~ - Inside source: true *** True Line Result def day_one_infront_of_library args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/outside-library.png',~ - Inside source: true *** True Line Result background: 'sprites/outside-library.png', ** Processing line: ~ player: [57, 21],~ - Inside source: true *** True Line Result player: [57, 21], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [62, 0, 2, 40, :day_one_ceremony],~ - Inside source: true *** True Line Result [62, 0, 2, 40, :day_one_ceremony], ** Processing line: ~ [49, 39, 6, 9, :day_one_library]~ - Inside source: true *** True Line Result [49, 39, 6, 9, :day_one_library] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [50, 20, 4, 8, "Shipping- containers-- as far- as the eye- can see. It's- rather- beautiful-- if you ask me. Even- though-- this- view- represents-- all- that's-- left- of humanity-."]~ - Inside source: true *** True Line Result [50, 20, 4, 8, "Shipping- containers-- as far- as the eye- can see. It's- rather- beautiful-- if you ask me. Even- though-- this- view- represents-- all- that's-- left- of humanity-."] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def day_one_library args~ - Inside source: true *** True Line Result def day_one_library args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/library.png',~ - Inside source: true *** True Line Result background: 'sprites/library.png', ** Processing line: ~ player: [27, 4],~ - Inside source: true *** True Line Result player: [27, 4], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [0, 0, 64, 2, :end_day_one_infront_of_library]~ - Inside source: true *** True Line Result [0, 0, 64, 2, :end_day_one_infront_of_library] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [28, 22, 8, 4, "I grew- up- in this library. I've- read every- book- here. My favorites-- were- of course-- anything- computer-- related."],~ - Inside source: true *** True Line Result [28, 22, 8, 4, "I grew- up- in this library. I've- read every- book- here. My favorites-- were- of course-- anything- computer-- related."], ** Processing line: ~ [6, 32, 10, 6, "My favorite-- area--- of the library. The Science-- Section."]~ - Inside source: true *** True Line Result [6, 32, 10, 6, "My favorite-- area--- of the library. The Science-- Section."] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def end_day_one_infront_of_library args~ - Inside source: true *** True Line Result def end_day_one_infront_of_library args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/outside-library.png',~ - Inside source: true *** True Line Result background: 'sprites/outside-library.png', ** Processing line: ~ player: [51, 33],~ - Inside source: true *** True Line Result player: [51, 33], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [49, 39, 6, 9, :day_one_library],~ - Inside source: true *** True Line Result [49, 39, 6, 9, :day_one_library], ** Processing line: ~ [62, 0, 2, 40, :end_day_one_monument],~ - Inside source: true *** True Line Result [62, 0, 2, 40, :end_day_one_monument], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [50, 27, 4, 4, "It's getting late. Better get some sleep."]~ - Inside source: true *** True Line Result [50, 27, 4, 4, "It's getting late. Better get some sleep."] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def end_day_one_monument args~ - Inside source: true *** True Line Result def end_day_one_monument args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/tribute.png',~ - Inside source: true *** True Line Result background: 'sprites/tribute.png', ** Processing line: ~ player: [2, 36],~ - Inside source: true *** True Line Result player: [2, 36], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [62, 0, 2, 40, :end_day_one_infront_of_home],~ - Inside source: true *** True Line Result [62, 0, 2, 40, :end_day_one_infront_of_home], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [50, 27, 4, 4, "It's getting late. Better get some sleep."],~ - Inside source: true *** True Line Result [50, 27, 4, 4, "It's getting late. Better get some sleep."], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def end_day_one_infront_of_home args~ - Inside source: true *** True Line Result def end_day_one_infront_of_home args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/front-of-home.png',~ - Inside source: true *** True Line Result background: 'sprites/front-of-home.png', ** Processing line: ~ player: [1, 17],~ - Inside source: true *** True Line Result player: [1, 17], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [43, 34, 10, 16, :end_day_one_home],~ - Inside source: true *** True Line Result [43, 34, 10, 16, :end_day_one_home], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [20, 10, 4, 4, "It's getting late. Better get some sleep."],~ - Inside source: true *** True Line Result [20, 10, 4, 4, "It's getting late. Better get some sleep."], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def end_day_one_home args~ - Inside source: true *** True Line Result def end_day_one_home args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-home.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-home.png', ** Processing line: ~ player: [34, 3],~ - Inside source: true *** True Line Result player: [34, 3], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [32, 40, 8, 10, :end_day_one_dream],~ - Inside source: true *** True Line Result [32, 40, 8, 10, :end_day_one_dream], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [38, 4, 4, 4, "It's getting late. Better get some sleep."],~ - Inside source: true *** True Line Result [38, 4, 4, 4, "It's getting late. Better get some sleep."], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def end_day_one_dream args~ - Inside source: true *** True Line Result def end_day_one_dream args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/dream.png',~ - Inside source: true *** True Line Result background: 'sprites/dream.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [4, 4],~ - Inside source: true *** True Line Result player: [4, 4], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [62, 0, 2, 64, :explaining_the_special_power]~ - Inside source: true *** True Line Result [62, 0, 2, 64, :explaining_the_special_power] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [10, 10, 4, 4, "Why- does this- moment-- always- haunt- my dreams?"],~ - Inside source: true *** True Line Result [10, 10, 4, 4, "Why- does this- moment-- always- haunt- my dreams?"], ** Processing line: ~ [20, 10, 4, 4, "This kid- reads these computer--- science--- books- nonstop-. What's- wrong with him?"],~ - Inside source: true *** True Line Result [20, 10, 4, 4, "This kid- reads these computer--- science--- books- nonstop-. What's- wrong with him?"], ** Processing line: ~ [30, 10, 4, 4, "There- is nothing-- wrong- with him. This behavior-- should be encouraged---! In fact-, I think- he's- special---. Have- you seen- him use- a computer---? It's-- almost-- as if he can- speak-- to it."]~ - Inside source: true *** True Line Result [30, 10, 4, 4, "There- is nothing-- wrong- with him. This behavior-- should be encouraged---! In fact-, I think- he's- special---. Have- you seen- him use- a computer---? It's-- almost-- as if he can- speak-- to it."] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def explaining_the_special_power args~ - Inside source: true *** True Line Result def explaining_the_special_power args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ background: 'sprites/inside-home.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-home.png', ** Processing line: ~ player: [32, 30],~ - Inside source: true *** True Line Result player: [32, 30], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ 38, 21, 4, 4, :explaining_the_special_power_inside_computer~ - Inside source: true *** True Line Result 38, 21, 4, 4, :explaining_the_special_power_inside_computer ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def explaining_the_special_power_inside_computer args~ - Inside source: true *** True Line Result def explaining_the_special_power_inside_computer args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/pc.png',~ - Inside source: true *** True Line Result background: 'sprites/pc.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [34, 4],~ - Inside source: true *** True Line Result player: [34, 4], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [0, 62, 64, 3, :the_blinking_light]~ - Inside source: true *** True Line Result [0, 62, 64, 3, :the_blinking_light] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [14, 20, 24, 4, "So... I have a special-- power--. I don't-- need a mouse-, keyboard--, or even-- a monitor--- to control-- a computer--."],~ - Inside source: true *** True Line Result [14, 20, 24, 4, "So... I have a special-- power--. I don't-- need a mouse-, keyboard--, or even-- a monitor--- to control-- a computer--."], ** Processing line: ~ [14, 25, 24, 4, "I only-- pretend-- to use peripherals---, so as not- to freak- anyone--- out."],~ - Inside source: true *** True Line Result [14, 25, 24, 4, "I only-- pretend-- to use peripherals---, so as not- to freak- anyone--- out."], ** Processing line: ~ [14, 30, 24, 4, "Inside-- this silicon--- Universe---, is the only-- place I- feel- at peace."],~ - Inside source: true *** True Line Result [14, 30, 24, 4, "Inside-- this silicon--- Universe---, is the only-- place I- feel- at peace."], ** Processing line: ~ [14, 35, 24, 4, "It's-- the only-- place where I don't-- feel alone."]~ - Inside source: true *** True Line Result [14, 35, 24, 4, "It's-- the only-- place where I don't-- feel alone."] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_final_decision.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Return Of Serenity - storyline_final_decision.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_final_decision.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_final_decision.rb ** Processing line: ~ def final_decision_side_of_home args~ - Inside source: true *** True Line Result def final_decision_side_of_home args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ fade: 120,~ - Inside source: true *** True Line Result fade: 120, ** Processing line: ~ background: 'sprites/side-of-home.png',~ - Inside source: true *** True Line Result background: 'sprites/side-of-home.png', ** Processing line: ~ player: [16, 13],~ - Inside source: true *** True Line Result player: [16, 13], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [52, 24, 11, 5, :final_decision_mountain_pass],~ - Inside source: true *** True Line Result [52, 24, 11, 5, :final_decision_mountain_pass], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_side_of_home_render,~ - Inside source: true *** True Line Result render_override: :blinking_light_side_of_home_render, ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [28, 13, 8, 4, "Man. Hard to believe- that today- is the 21st--- anniversary-- of The Impact. Serenity--- will- be- home- soon."]~ - Inside source: true *** True Line Result [28, 13, 8, 4, "Man. Hard to believe- that today- is the 21st--- anniversary-- of The Impact. Serenity--- will- be- home- soon."] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_decision_mountain_pass args~ - Inside source: true *** True Line Result def final_decision_mountain_pass args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/mountain-pass-zoomed-out.png',~ - Inside source: true *** True Line Result background: 'sprites/mountain-pass-zoomed-out.png', ** Processing line: ~ player: [4, 4],~ - Inside source: true *** True Line Result player: [4, 4], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [18, 47, 5, 5, :final_decision_path_to_observatory]~ - Inside source: true *** True Line Result [18, 47, 5, 5, :final_decision_path_to_observatory] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_mountain_pass_render~ - Inside source: true *** True Line Result render_override: :blinking_light_mountain_pass_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_decision_path_to_observatory args~ - Inside source: true *** True Line Result def final_decision_path_to_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/path-to-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/path-to-observatory.png', ** Processing line: ~ player: [60, 4],~ - Inside source: true *** True Line Result player: [60, 4], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [0, 26, 5, 5, :final_decision_observatory]~ - Inside source: true *** True Line Result [0, 26, 5, 5, :final_decision_observatory] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_path_to_observatory_render~ - Inside source: true *** True Line Result render_override: :blinking_light_path_to_observatory_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_decision_observatory args~ - Inside source: true *** True Line Result def final_decision_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/observatory.png', ** Processing line: ~ player: [60, 2],~ - Inside source: true *** True Line Result player: [60, 2], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [28, 39, 4, 10, :final_decision_inside_observatory]~ - Inside source: true *** True Line Result [28, 39, 4, 10, :final_decision_inside_observatory] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_observatory_render~ - Inside source: true *** True Line Result render_override: :blinking_light_observatory_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_decision_inside_observatory args~ - Inside source: true *** True Line Result def final_decision_inside_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ player: [60, 2],~ - Inside source: true *** True Line Result player: [60, 2], ** Processing line: ~ storylines: [],~ - Inside source: true *** True Line Result storylines: [], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [30, 18, 5, 12, :final_decision_inside_mainframe]~ - Inside source: true *** True Line Result [30, 18, 5, 12, :final_decision_inside_mainframe] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_inside_observatory_render~ - Inside source: true *** True Line Result render_override: :blinking_light_inside_observatory_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_decision_inside_mainframe args~ - Inside source: true *** True Line Result def final_decision_inside_mainframe args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ player: [32, 4],~ - Inside source: true *** True Line Result player: [32, 4], ** Processing line: ~ background: 'sprites/mainframe.png',~ - Inside source: true *** True Line Result background: 'sprites/mainframe.png', ** Processing line: ~ storylines: [],~ - Inside source: true *** True Line Result storylines: [], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [*hotspot_top, :final_decision_ship_status],~ - Inside source: true *** True Line Result [*hotspot_top, :final_decision_ship_status], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_decision_ship_status args~ - Inside source: true *** True Line Result def final_decision_ship_status args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/serenity.png',~ - Inside source: true *** True Line Result background: 'sprites/serenity.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [30, 10],~ - Inside source: true *** True Line Result player: [30, 10], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [*hotspot_top_right, :final_decision]~ - Inside source: true *** True Line Result [*hotspot_top_right, :final_decision] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [30, 8, 4, 4, "????"],~ - Inside source: true *** True Line Result [30, 8, 4, 4, "????"], ** Processing line: ~ *final_decision_ship_status_shared(args)~ - Inside source: true *** True Line Result *final_decision_ship_status_shared(args) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_decision args~ - Inside source: true *** True Line Result def final_decision args ** Processing line: ~ decision_graph "Stasis-- Chambers--: UNDERPOWERED, Life- forms-- will be terminated---- unless-- equilibrium----- is reached.",~ - Inside source: true *** True Line Result decision_graph "Stasis-- Chambers--: UNDERPOWERED, Life- forms-- will be terminated---- unless-- equilibrium----- is reached.", ** Processing line: ~ "I CAN'T DO THIS... But... If-- I-- don't--- bring-- the- chambers--- to- equilibrium-----, they all die...",~ - Inside source: true *** True Line Result "I CAN'T DO THIS... But... If-- I-- don't--- bring-- the- chambers--- to- equilibrium-----, they all die...", ** Processing line: ~ [:final_decision_game_over_noone, "Kill--- Everyone---", "DO--- NOTHING?"],~ - Inside source: true *** True Line Result [:final_decision_game_over_noone, "Kill--- Everyone---", "DO--- NOTHING?"], ** Processing line: ~ [:final_decision_game_over_matthew, "Kill--- Sasha---", "KILL--- SASHA?"],~ - Inside source: true *** True Line Result [:final_decision_game_over_matthew, "Kill--- Sasha---", "KILL--- SASHA?"], ** Processing line: ~ [:final_decision_game_over_anka, "Kill--- Aanka---", "KILL--- AANKA?"],~ - Inside source: true *** True Line Result [:final_decision_game_over_anka, "Kill--- Aanka---", "KILL--- AANKA?"], ** Processing line: ~ [:final_decision_game_over_sasha, "Kill--- Matthew---", "KILL--- MATTHEW?"]~ - Inside source: true *** True Line Result [:final_decision_game_over_sasha, "Kill--- Matthew---", "KILL--- MATTHEW?"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_decision_game_over_noone args~ - Inside source: true *** True Line Result def final_decision_game_over_noone args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/tribute-game-over.png',~ - Inside source: true *** True Line Result background: 'sprites/tribute-game-over.png', ** Processing line: ~ player: [53, 14],~ - Inside source: true *** True Line Result player: [53, 14], ** Processing line: ~ fade: 600~ - Inside source: true *** True Line Result fade: 600 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_decision_game_over_matthew args~ - Inside source: true *** True Line Result def final_decision_game_over_matthew args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/tribute-game-over.png',~ - Inside source: true *** True Line Result background: 'sprites/tribute-game-over.png', ** Processing line: ~ player: [53, 14],~ - Inside source: true *** True Line Result player: [53, 14], ** Processing line: ~ fade: 600~ - Inside source: true *** True Line Result fade: 600 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_decision_game_over_anka args~ - Inside source: true *** True Line Result def final_decision_game_over_anka args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/tribute-game-over.png',~ - Inside source: true *** True Line Result background: 'sprites/tribute-game-over.png', ** Processing line: ~ player: [53, 14],~ - Inside source: true *** True Line Result player: [53, 14], ** Processing line: ~ fade: 600~ - Inside source: true *** True Line Result fade: 600 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_decision_game_over_sasha args~ - Inside source: true *** True Line Result def final_decision_game_over_sasha args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/tribute-game-over.png',~ - Inside source: true *** True Line Result background: 'sprites/tribute-game-over.png', ** Processing line: ~ player: [53, 14],~ - Inside source: true *** True Line Result player: [53, 14], ** Processing line: ~ fade: 600~ - Inside source: true *** True Line Result fade: 600 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_decision_ship_status_shared args~ - Inside source: true *** True Line Result def final_decision_ship_status_shared args ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ *ship_control_hotspot(24, 22,~ - Inside source: true *** True Line Result *ship_control_hotspot(24, 22, ** Processing line: ~ "Stasis-- Chambers--: UNDERPOWERED, Life- forms-- will be terminated---- unless-- equilibrium----- is reached. WHAT?! NO!",~ - Inside source: true *** True Line Result "Stasis-- Chambers--: UNDERPOWERED, Life- forms-- will be terminated---- unless-- equilibrium----- is reached. WHAT?! NO!", ** Processing line: ~ "Matthew's--- Chamber--: UNDER-- THREAT-- OF-- TERMINATION. WHAT?! NO!",~ - Inside source: true *** True Line Result "Matthew's--- Chamber--: UNDER-- THREAT-- OF-- TERMINATION. WHAT?! NO!", ** Processing line: ~ "Aanka's--- Chamber--: UNDER-- THREAT-- OF-- TERMINATION. WHAT?! NO!",~ - Inside source: true *** True Line Result "Aanka's--- Chamber--: UNDER-- THREAT-- OF-- TERMINATION. WHAT?! NO!", ** Processing line: ~ "Sasha's--- Chamber--: UNDER-- THREAT-- OF-- TERMINATION. WHAT?! NO!"),~ - Inside source: true *** True Line Result "Sasha's--- Chamber--: UNDER-- THREAT-- OF-- TERMINATION. WHAT?! NO!"), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_final_message.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Return Of Serenity - storyline_final_message.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_final_message.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_final_message.rb ** Processing line: ~ def final_message_sad args~ - Inside source: true *** True Line Result def final_message_sad args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ background: 'sprites/inside-home.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-home.png', ** Processing line: ~ player: [34, 35],~ - Inside source: true *** True Line Result player: [34, 35], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [34, 34, 4, 4, "Another-- sleepless-- night..."],~ - Inside source: true *** True Line Result [34, 34, 4, 4, "Another-- sleepless-- night..."], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [32, -1, 8, 3, :final_message_observatory]~ - Inside source: true *** True Line Result [32, -1, 8, 3, :final_message_observatory] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_message_happy args~ - Inside source: true *** True Line Result def final_message_happy args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ background: 'sprites/inside-home.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-home.png', ** Processing line: ~ player: [34, 35],~ - Inside source: true *** True Line Result player: [34, 35], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [34, 34, 4, 4, "Oh man, I slept like rock!"],~ - Inside source: true *** True Line Result [34, 34, 4, 4, "Oh man, I slept like rock!"], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [32, -1, 8, 3, :final_message_observatory]~ - Inside source: true *** True Line Result [32, -1, 8, 3, :final_message_observatory] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_message_side_of_home args~ - Inside source: true *** True Line Result def final_message_side_of_home args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ background: 'sprites/side-of-home.png',~ - Inside source: true *** True Line Result background: 'sprites/side-of-home.png', ** Processing line: ~ player: [16, 13],~ - Inside source: true *** True Line Result player: [16, 13], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [52, 24, 11, 5, :final_message_mountain_pass],~ - Inside source: true *** True Line Result [52, 24, 11, 5, :final_message_mountain_pass], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_side_of_home_render~ - Inside source: true *** True Line Result render_override: :blinking_light_side_of_home_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_message_mountain_pass args~ - Inside source: true *** True Line Result def final_message_mountain_pass args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/mountain-pass-zoomed-out.png',~ - Inside source: true *** True Line Result background: 'sprites/mountain-pass-zoomed-out.png', ** Processing line: ~ player: [4, 4],~ - Inside source: true *** True Line Result player: [4, 4], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [18, 47, 5, 5, :final_message_path_to_observatory],~ - Inside source: true *** True Line Result [18, 47, 5, 5, :final_message_path_to_observatory], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [18, 13, 5, 5, "Hnnnnnnnggg. My legs-- are still sore- from yesterday."]~ - Inside source: true *** True Line Result [18, 13, 5, 5, "Hnnnnnnnggg. My legs-- are still sore- from yesterday."] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_mountain_pass_render~ - Inside source: true *** True Line Result render_override: :blinking_light_mountain_pass_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_message_path_to_observatory args~ - Inside source: true *** True Line Result def final_message_path_to_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/path-to-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/path-to-observatory.png', ** Processing line: ~ player: [60, 4],~ - Inside source: true *** True Line Result player: [60, 4], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [0, 26, 5, 5, :final_message_observatory]~ - Inside source: true *** True Line Result [0, 26, 5, 5, :final_message_observatory] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [22, 20, 10, 10, "This spot--, on the mountain, right here, it's-- perfect. This- is where- I'll-- yeet-- the person-- who is playing-- this- prank- on me."]~ - Inside source: true *** True Line Result [22, 20, 10, 10, "This spot--, on the mountain, right here, it's-- perfect. This- is where- I'll-- yeet-- the person-- who is playing-- this- prank- on me."] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_path_to_observatory_render~ - Inside source: true *** True Line Result render_override: :blinking_light_path_to_observatory_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_message_observatory args~ - Inside source: true *** True Line Result def final_message_observatory args ** Processing line: ~ if args.state.scene_history.include? :replied_with_whole_truth~ - Inside source: true *** True Line Result if args.state.scene_history.include? :replied_with_whole_truth ** Processing line: ~ return {~ - Inside source: true *** True Line Result return { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [51, 12],~ - Inside source: true *** True Line Result player: [51, 12], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [50, 10, 4, 4, "Here-- we- go..."]~ - Inside source: true *** True Line Result [50, 10, 4, 4, "Here-- we- go..."] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [30, 18, 5, 12, :final_message_inside_mainframe]~ - Inside source: true *** True Line Result [30, 18, 5, 12, :final_message_inside_mainframe] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_inside_observatory_render~ - Inside source: true *** True Line Result render_override: :blinking_light_inside_observatory_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return {~ - Inside source: true *** True Line Result return { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [51, 12],~ - Inside source: true *** True Line Result player: [51, 12], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [50, 10, 4, 4, "I feel like I'm-- walking-- on sunshine!"]~ - Inside source: true *** True Line Result [50, 10, 4, 4, "I feel like I'm-- walking-- on sunshine!"] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [30, 18, 5, 12, :final_message_inside_mainframe]~ - Inside source: true *** True Line Result [30, 18, 5, 12, :final_message_inside_mainframe] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_inside_observatory_render~ - Inside source: true *** True Line Result render_override: :blinking_light_inside_observatory_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_message_inside_mainframe args~ - Inside source: true *** True Line Result def final_message_inside_mainframe args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ player: [32, 4],~ - Inside source: true *** True Line Result player: [32, 4], ** Processing line: ~ background: 'sprites/mainframe.png',~ - Inside source: true *** True Line Result background: 'sprites/mainframe.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ scenes: [[45, 45, 4, 4, :final_message_check_ship_status]]~ - Inside source: true *** True Line Result scenes: [[45, 45, 4, 4, :final_message_check_ship_status]] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_message_check_ship_status args~ - Inside source: true *** True Line Result def final_message_check_ship_status args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/mainframe.png',~ - Inside source: true *** True Line Result background: 'sprites/mainframe.png', ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [45, 45, 4, 4, (final_message_current args)],~ - Inside source: true *** True Line Result [45, 45, 4, 4, (final_message_current args)], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [*hotspot_top, :final_message_ship_status],~ - Inside source: true *** True Line Result [*hotspot_top, :final_message_ship_status], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_message_ship_status args~ - Inside source: true *** True Line Result def final_message_ship_status args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/serenity.png',~ - Inside source: true *** True Line Result background: 'sprites/serenity.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [30, 10],~ - Inside source: true *** True Line Result player: [30, 10], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [30, 50, 4, 4, :final_message_ship_status_reviewed]~ - Inside source: true *** True Line Result [30, 50, 4, 4, :final_message_ship_status_reviewed] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [30, 8, 4, 4, "Let me make- sure- everything--- looks good. It'll-- give me peace- of mind."],~ - Inside source: true *** True Line Result [30, 8, 4, 4, "Let me make- sure- everything--- looks good. It'll-- give me peace- of mind."], ** Processing line: ~ *final_message_ship_status_shared(args)~ - Inside source: true *** True Line Result *final_message_ship_status_shared(args) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_message_ship_status_reviewed args~ - Inside source: true *** True Line Result def final_message_ship_status_reviewed args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/serenity.png',~ - Inside source: true *** True Line Result background: 'sprites/serenity.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [*hotspot_bottom, :final_message_summary]~ - Inside source: true *** True Line Result [*hotspot_bottom, :final_message_summary] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [0, 62, 62, 3, "Whew. Everyone-- is in their- chambers. The engines-- are roaring-- and Serenity-- is coming-- home."],~ - Inside source: true *** True Line Result [0, 62, 62, 3, "Whew. Everyone-- is in their- chambers. The engines-- are roaring-- and Serenity-- is coming-- home."], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_message_ship_status_shared args~ - Inside source: true *** True Line Result def final_message_ship_status_shared args ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ *ship_control_hotspot( 0, 50,~ - Inside source: true *** True Line Result *ship_control_hotspot( 0, 50, ** Processing line: ~ "Stasis-- Chambers--: Online, All chambers-- are powered. Battery--- Allocation---: 3--- of-- 3--.",~ - Inside source: true *** True Line Result "Stasis-- Chambers--: Online, All chambers-- are powered. Battery--- Allocation---: 3--- of-- 3--.", ** Processing line: ~ "Matthew's--- Chamber--: OCCUPIED----",~ - Inside source: true *** True Line Result "Matthew's--- Chamber--: OCCUPIED----", ** Processing line: ~ "Aanka's--- Chamber--: OCCUPIED----",~ - Inside source: true *** True Line Result "Aanka's--- Chamber--: OCCUPIED----", ** Processing line: ~ "Sasha's--- Chamber--: OCCUPIED----"),~ - Inside source: true *** True Line Result "Sasha's--- Chamber--: OCCUPIED----"), ** Processing line: ~ *ship_control_hotspot(12, 35,~ - Inside source: true *** True Line Result *ship_control_hotspot(12, 35, ** Processing line: ~ "Life- Support--: Not-- Needed---",~ - Inside source: true *** True Line Result "Life- Support--: Not-- Needed---", ** Processing line: ~ "O2--- Production---: OFF---",~ - Inside source: true *** True Line Result "O2--- Production---: OFF---", ** Processing line: ~ "CO2--- Scrubbers---: OFF---",~ - Inside source: true *** True Line Result "CO2--- Scrubbers---: OFF---", ** Processing line: ~ "H2O--- Production---: OFF---"),~ - Inside source: true *** True Line Result "H2O--- Production---: OFF---"), ** Processing line: ~ *ship_control_hotspot(24, 20,~ - Inside source: true *** True Line Result *ship_control_hotspot(24, 20, ** Processing line: ~ "Navigation: Offline---",~ - Inside source: true *** True Line Result "Navigation: Offline---", ** Processing line: ~ "Sensor: OFF---",~ - Inside source: true *** True Line Result "Sensor: OFF---", ** Processing line: ~ "Heads- Up- Display: DAMAGED---",~ - Inside source: true *** True Line Result "Heads- Up- Display: DAMAGED---", ** Processing line: ~ "Arithmetic--- Unit: DAMAGED----"),~ - Inside source: true *** True Line Result "Arithmetic--- Unit: DAMAGED----"), ** Processing line: ~ *ship_control_hotspot(36, 35,~ - Inside source: true *** True Line Result *ship_control_hotspot(36, 35, ** Processing line: ~ "COMM: Underpowered----",~ - Inside source: true *** True Line Result "COMM: Underpowered----", ** Processing line: ~ "Text: ON---",~ - Inside source: true *** True Line Result "Text: ON---", ** Processing line: ~ "Audio: SEGFAULT---",~ - Inside source: true *** True Line Result "Audio: SEGFAULT---", ** Processing line: ~ "Video: DAMAGED---"),~ - Inside source: true *** True Line Result "Video: DAMAGED---"), ** Processing line: ~ *ship_control_hotspot(48, 50,~ - Inside source: true *** True Line Result *ship_control_hotspot(48, 50, ** Processing line: ~ "Engine: Online, Coordinates--- Set- for Earth. Battery--- Allocation---: 3--- of-- 3---",~ - Inside source: true *** True Line Result "Engine: Online, Coordinates--- Set- for Earth. Battery--- Allocation---: 3--- of-- 3---", ** Processing line: ~ "Engine I: ON---",~ - Inside source: true *** True Line Result "Engine I: ON---", ** Processing line: ~ "Engine II: ON---",~ - Inside source: true *** True Line Result "Engine II: ON---", ** Processing line: ~ "Engine III: ON---")~ - Inside source: true *** True Line Result "Engine III: ON---") ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_message_last_reply args~ - Inside source: true *** True Line Result def final_message_last_reply args ** Processing line: ~ if args.state.scene_history.include? :replied_with_whole_truth~ - Inside source: true *** True Line Result if args.state.scene_history.include? :replied_with_whole_truth ** Processing line: ~ return "Buffer--: #{anka_reply_whole_truth.quote}"~ - Inside source: true *** True Line Result return "Buffer--: #{anka_reply_whole_truth.quote}" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return "Buffer--: #{anka_reply_half_truth.quote}"~ - Inside source: true *** True Line Result return "Buffer--: #{anka_reply_half_truth.quote}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_message_current args~ - Inside source: true *** True Line Result def final_message_current args ** Processing line: ~ if args.state.scene_history.include? :replied_with_whole_truth~ - Inside source: true *** True Line Result if args.state.scene_history.include? :replied_with_whole_truth ** Processing line: ~ return "Hey... It's-- me Sasha. Aanka-- is trying-- her best to comfort-- Matthew. This- is the first- time- I've-- ever-- seen-- Matthew-- cry. We'll-- probably-- be in stasis-- by the time you get this message--. Thank- you- again-- for all your help. I look forward-- to meeting-- you in person."~ - Inside source: true *** True Line Result return "Hey... It's-- me Sasha. Aanka-- is trying-- her best to comfort-- Matthew. This- is the first- time- I've-- ever-- seen-- Matthew-- cry. We'll-- probably-- be in stasis-- by the time you get this message--. Thank- you- again-- for all your help. I look forward-- to meeting-- you in person." ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return "Hey! It's-- me Sasha! LOL! Aanka-- and Matthew-- are dancing-- around-- like- goofballs--! They- are both- so adorable! Only-- this- tiny-- little-- genius-- can make-- a battle-- hardened-- general--- put- on a tiara-- and dance- around-- like a fairy-- princess-- XD------ Anyways, we are heading-- back into-- the chambers--. I hope our welcome-- home- parade-- has fireworks!"~ - Inside source: true *** True Line Result return "Hey! It's-- me Sasha! LOL! Aanka-- and Matthew-- are dancing-- around-- like- goofballs--! They- are both- so adorable! Only-- this- tiny-- little-- genius-- can make-- a battle-- hardened-- general--- put- on a tiara-- and dance- around-- like a fairy-- princess-- XD------ Anyways, we are heading-- back into-- the chambers--. I hope our welcome-- home- parade-- has fireworks!" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def final_message_summary args~ - Inside source: true *** True Line Result def final_message_summary args ** Processing line: ~ if args.state.scene_history.include? :replied_with_whole_truth~ - Inside source: true *** True Line Result if args.state.scene_history.include? :replied_with_whole_truth ** Processing line: ~ return {~ - Inside source: true *** True Line Result return { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [31, 11],~ - Inside source: true *** True Line Result player: [31, 11], ** Processing line: ~ scenes: [[60, 0, 4, 32, :final_decision_side_of_home]],~ - Inside source: true *** True Line Result scenes: [[60, 0, 4, 32, :final_decision_side_of_home]], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [30, 10, 5, 4, "I can't-- imagine-- what they are feeling-- right now. But at least- they- know everything---, and we can- concentrate-- on rebuilding--- this world-- right- off the bat. I can't-- wait to see the future-- they'll-- help- build."],~ - Inside source: true *** True Line Result [30, 10, 5, 4, "I can't-- imagine-- what they are feeling-- right now. But at least- they- know everything---, and we can- concentrate-- on rebuilding--- this world-- right- off the bat. I can't-- wait to see the future-- they'll-- help- build."], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return {~ - Inside source: true *** True Line Result return { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [31, 11],~ - Inside source: true *** True Line Result player: [31, 11], ** Processing line: ~ scenes: [[60, 0, 4, 32, :final_decision_side_of_home]],~ - Inside source: true *** True Line Result scenes: [[60, 0, 4, 32, :final_decision_side_of_home]], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [30, 10, 5, 4, "They all sounded-- so happy. I know- they'll-- be in for a tough- dose- of reality--- when they- arrive. But- at least- they'll-- be around-- all- of us. We'll-- help them- cope."],~ - Inside source: true *** True Line Result [30, 10, 5, 4, "They all sounded-- so happy. I know- they'll-- be in for a tough- dose- of reality--- when they- arrive. But- at least- they'll-- be around-- all- of us. We'll-- help them- cope."], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_serenity_alive.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Return Of Serenity - storyline_serenity_alive.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_serenity_alive.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_serenity_alive.rb ** Processing line: ~ def serenity_alive_side_of_home args~ - Inside source: true *** True Line Result def serenity_alive_side_of_home args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ background: 'sprites/side-of-home.png',~ - Inside source: true *** True Line Result background: 'sprites/side-of-home.png', ** Processing line: ~ player: [16, 13],~ - Inside source: true *** True Line Result player: [16, 13], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [52, 24, 11, 5, :serenity_alive_mountain_pass],~ - Inside source: true *** True Line Result [52, 24, 11, 5, :serenity_alive_mountain_pass], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_side_of_home_render~ - Inside source: true *** True Line Result render_override: :blinking_light_side_of_home_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_mountain_pass args~ - Inside source: true *** True Line Result def serenity_alive_mountain_pass args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/mountain-pass-zoomed-out.png',~ - Inside source: true *** True Line Result background: 'sprites/mountain-pass-zoomed-out.png', ** Processing line: ~ player: [4, 4],~ - Inside source: true *** True Line Result player: [4, 4], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [18, 47, 5, 5, :serenity_alive_path_to_observatory],~ - Inside source: true *** True Line Result [18, 47, 5, 5, :serenity_alive_path_to_observatory], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [18, 13, 5, 5, "Hnnnnnnnggg. My legs-- are still sore- from yesterday."]~ - Inside source: true *** True Line Result [18, 13, 5, 5, "Hnnnnnnnggg. My legs-- are still sore- from yesterday."] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_mountain_pass_render~ - Inside source: true *** True Line Result render_override: :blinking_light_mountain_pass_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_path_to_observatory args~ - Inside source: true *** True Line Result def serenity_alive_path_to_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/path-to-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/path-to-observatory.png', ** Processing line: ~ player: [60, 4],~ - Inside source: true *** True Line Result player: [60, 4], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [0, 26, 5, 5, :serenity_alive_observatory]~ - Inside source: true *** True Line Result [0, 26, 5, 5, :serenity_alive_observatory] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [22, 20, 10, 10, "This spot--, on the mountain, right here, it's-- perfect. This- is where- I'll-- yeet-- the person-- who is playing-- this- prank- on me."]~ - Inside source: true *** True Line Result [22, 20, 10, 10, "This spot--, on the mountain, right here, it's-- perfect. This- is where- I'll-- yeet-- the person-- who is playing-- this- prank- on me."] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_path_to_observatory_render~ - Inside source: true *** True Line Result render_override: :blinking_light_path_to_observatory_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_observatory args~ - Inside source: true *** True Line Result def serenity_alive_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/observatory.png', ** Processing line: ~ player: [60, 2],~ - Inside source: true *** True Line Result player: [60, 2], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [28, 39, 4, 10, :serenity_alive_inside_observatory]~ - Inside source: true *** True Line Result [28, 39, 4, 10, :serenity_alive_inside_observatory] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_observatory_render~ - Inside source: true *** True Line Result render_override: :blinking_light_observatory_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_inside_observatory args~ - Inside source: true *** True Line Result def serenity_alive_inside_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ player: [60, 2],~ - Inside source: true *** True Line Result player: [60, 2], ** Processing line: ~ storylines: [],~ - Inside source: true *** True Line Result storylines: [], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [30, 18, 5, 12, :serenity_alive_inside_mainframe]~ - Inside source: true *** True Line Result [30, 18, 5, 12, :serenity_alive_inside_mainframe] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_inside_observatory_render~ - Inside source: true *** True Line Result render_override: :blinking_light_inside_observatory_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_inside_mainframe args~ - Inside source: true *** True Line Result def serenity_alive_inside_mainframe args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/mainframe.png',~ - Inside source: true *** True Line Result background: 'sprites/mainframe.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [30, 4],~ - Inside source: true *** True Line Result player: [30, 4], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [*hotspot_top, :serenity_alive_ship_status],~ - Inside source: true *** True Line Result [*hotspot_top, :serenity_alive_ship_status], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [22, 45, 17, 4, (serenity_alive_last_reply args)],~ - Inside source: true *** True Line Result [22, 45, 17, 4, (serenity_alive_last_reply args)], ** Processing line: ~ [45, 45, 4, 4, (serenity_alive_current_message args)],~ - Inside source: true *** True Line Result [45, 45, 4, 4, (serenity_alive_current_message args)], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_ship_status args~ - Inside source: true *** True Line Result def serenity_alive_ship_status args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/serenity.png',~ - Inside source: true *** True Line Result background: 'sprites/serenity.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [30, 10],~ - Inside source: true *** True Line Result player: [30, 10], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [30, 50, 4, 4, :serenity_alive_ship_status_reviewed]~ - Inside source: true *** True Line Result [30, 50, 4, 4, :serenity_alive_ship_status_reviewed] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [30, 8, 4, 4, "Serenity? THE--- Mission-- Serenity?! How is that possible? They- are supposed-- to be dead."],~ - Inside source: true *** True Line Result [30, 8, 4, 4, "Serenity? THE--- Mission-- Serenity?! How is that possible? They- are supposed-- to be dead."], ** Processing line: ~ [30, 10, 4, 4, "I... can't-- believe-- it. I- can access-- Serenity's-- computer? I- guess my \"superpower----\" isn't limited-- by proximity-- to- a machine--."],~ - Inside source: true *** True Line Result [30, 10, 4, 4, "I... can't-- believe-- it. I- can access-- Serenity's-- computer? I- guess my \"superpower----\" isn't limited-- by proximity-- to- a machine--."], ** Processing line: ~ *serenity_alive_shared_ship_status(args)~ - Inside source: true *** True Line Result *serenity_alive_shared_ship_status(args) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_ship_status_reviewed args~ - Inside source: true *** True Line Result def serenity_alive_ship_status_reviewed args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/serenity.png',~ - Inside source: true *** True Line Result background: 'sprites/serenity.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [*hotspot_bottom, :serenity_alive_time_to_reply]~ - Inside source: true *** True Line Result [*hotspot_bottom, :serenity_alive_time_to_reply] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [0, 62, 62, 3, "Okay. Reviewing-- everything--, it looks- like- I- can- take- the batteries--- from the Stasis--- Chambers--- and- Engine--- to keep- the crew-- alive-- and-- their-- location--- pinpointed---."],~ - Inside source: true *** True Line Result [0, 62, 62, 3, "Okay. Reviewing-- everything--, it looks- like- I- can- take- the batteries--- from the Stasis--- Chambers--- and- Engine--- to keep- the crew-- alive-- and-- their-- location--- pinpointed---."], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_time_to_reply args~ - Inside source: true *** True Line Result def serenity_alive_time_to_reply args ** Processing line: ~ decision_graph serenity_alive_current_message(args),~ - Inside source: true *** True Line Result decision_graph serenity_alive_current_message(args), ** Processing line: ~ "Okay... time to deliver the bad news...",~ - Inside source: true *** True Line Result "Okay... time to deliver the bad news...", ** Processing line: ~ [:replied_to_serenity_alive_firmly, "Firm-- Reply", serenity_alive_firm_reply],~ - Inside source: true *** True Line Result [:replied_to_serenity_alive_firmly, "Firm-- Reply", serenity_alive_firm_reply], ** Processing line: ~ [:replied_to_serenity_alive_kindly, "Sugar-- Coated---- Reply", serenity_alive_sugarcoated_reply]~ - Inside source: true *** True Line Result [:replied_to_serenity_alive_kindly, "Sugar-- Coated---- Reply", serenity_alive_sugarcoated_reply] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_shared_ship_status args~ - Inside source: true *** True Line Result def serenity_alive_shared_ship_status args ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ *ship_control_hotspot( 0, 50,~ - Inside source: true *** True Line Result *ship_control_hotspot( 0, 50, ** Processing line: ~ "Stasis-- Chambers--: Online, All chambers-- are powered. Battery--- Allocation---: 3--- of-- 3--, Hmmm. They don't-- need this to be powered-- right- now. Everyone-- is awake.",~ - Inside source: true *** True Line Result "Stasis-- Chambers--: Online, All chambers-- are powered. Battery--- Allocation---: 3--- of-- 3--, Hmmm. They don't-- need this to be powered-- right- now. Everyone-- is awake.", ** Processing line: ~ nil,~ - Inside source: true *** True Line Result nil, ** Processing line: ~ nil,~ - Inside source: true *** True Line Result nil, ** Processing line: ~ nil),~ - Inside source: true *** True Line Result nil), ** Processing line: ~ *ship_control_hotspot(12, 35,~ - Inside source: true *** True Line Result *ship_control_hotspot(12, 35, ** Processing line: ~ "Life- Support--: Offline, Unable--- to- Sustain-- Life. Battery--- Allocation---: 0--- of-- 3---, Okay. That is definitely---- not a good thing.",~ - Inside source: true *** True Line Result "Life- Support--: Offline, Unable--- to- Sustain-- Life. Battery--- Allocation---: 0--- of-- 3---, Okay. That is definitely---- not a good thing.", ** Processing line: ~ nil,~ - Inside source: true *** True Line Result nil, ** Processing line: ~ nil,~ - Inside source: true *** True Line Result nil, ** Processing line: ~ nil),~ - Inside source: true *** True Line Result nil), ** Processing line: ~ *ship_control_hotspot(24, 20,~ - Inside source: true *** True Line Result *ship_control_hotspot(24, 20, ** Processing line: ~ "Navigation: Offline, Unable--- to- Calculate--- Location. Battery--- Allocation---: 0--- of-- 3---, Whelp. No wonder-- Sasha-- can't-- get- any-- readings. Their- Navigation--- is completely--- offline.",~ - Inside source: true *** True Line Result "Navigation: Offline, Unable--- to- Calculate--- Location. Battery--- Allocation---: 0--- of-- 3---, Whelp. No wonder-- Sasha-- can't-- get- any-- readings. Their- Navigation--- is completely--- offline.", ** Processing line: ~ nil,~ - Inside source: true *** True Line Result nil, ** Processing line: ~ nil,~ - Inside source: true *** True Line Result nil, ** Processing line: ~ nil),~ - Inside source: true *** True Line Result nil), ** Processing line: ~ *ship_control_hotspot(36, 35,~ - Inside source: true *** True Line Result *ship_control_hotspot(36, 35, ** Processing line: ~ "COMM: Underpowered----, Limited--- to- Text-- Based-- COMM. Battery--- Allocation---: 1--- of-- 3---, It's-- lucky- that- their- COMM---- system was able to survive-- twenty-- years--. Just- barely-- it seems.",~ - Inside source: true *** True Line Result "COMM: Underpowered----, Limited--- to- Text-- Based-- COMM. Battery--- Allocation---: 1--- of-- 3---, It's-- lucky- that- their- COMM---- system was able to survive-- twenty-- years--. Just- barely-- it seems.", ** Processing line: ~ nil,~ - Inside source: true *** True Line Result nil, ** Processing line: ~ nil,~ - Inside source: true *** True Line Result nil, ** Processing line: ~ nil),~ - Inside source: true *** True Line Result nil), ** Processing line: ~ *ship_control_hotspot(48, 50,~ - Inside source: true *** True Line Result *ship_control_hotspot(48, 50, ** Processing line: ~ "Engine: Online, Full- Control-- Available. Battery--- Allocation---: 3--- of-- 3---, Hmmm. No point of having an engine-- online--, if you don't- know- where you're-- going.",~ - Inside source: true *** True Line Result "Engine: Online, Full- Control-- Available. Battery--- Allocation---: 3--- of-- 3---, Hmmm. No point of having an engine-- online--, if you don't- know- where you're-- going.", ** Processing line: ~ nil,~ - Inside source: true *** True Line Result nil, ** Processing line: ~ nil,~ - Inside source: true *** True Line Result nil, ** Processing line: ~ nil)~ - Inside source: true *** True Line Result nil) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_firm_reply~ - Inside source: true *** True Line Result def serenity_alive_firm_reply ** Processing line: ~ "Serenity, you are at a distance-- farther-- than- Neptune. All- of the ship's-- systems-- are failing. Please- move the batteries---- from- the Stasis-- Chambers-- over- to- Life-- Support--. I also-- need- you to move-- the batteries---- from- the Engines--- to your Navigation---- System."~ - Inside source: true *** True Line Result "Serenity, you are at a distance-- farther-- than- Neptune. All- of the ship's-- systems-- are failing. Please- move the batteries---- from- the Stasis-- Chambers-- over- to- Life-- Support--. I also-- need- you to move-- the batteries---- from- the Engines--- to your Navigation---- System." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_sugarcoated_reply~ - Inside source: true *** True Line Result def serenity_alive_sugarcoated_reply ** Processing line: ~ "So... you- are- a teeny--- tiny--- bit--- farther-- from Earth- than you think. And you have a teeny--- tiny--- problem-- with your ship. Please-- move the batteries--- from the Stasis--- Chambers--- over to Life--- Support---. I also need you to move the batteries--- from the Engines--- to your- Navigation--- System. Don't-- worry-- Sasha. I'll-- get y'all-- home."~ - Inside source: true *** True Line Result "So... you- are- a teeny--- tiny--- bit--- farther-- from Earth- than you think. And you have a teeny--- tiny--- problem-- with your ship. Please-- move the batteries--- from the Stasis--- Chambers--- over to Life--- Support---. I also need you to move the batteries--- from the Engines--- to your- Navigation--- System. Don't-- worry-- Sasha. I'll-- get y'all-- home." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replied_to_serenity_alive_firmly args~ - Inside source: true *** True Line Result def replied_to_serenity_alive_firmly args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [32, 21],~ - Inside source: true *** True Line Result player: [32, 21], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [*hotspot_bottom_right, :serenity_alive_path_from_observatory]~ - Inside source: true *** True Line Result [*hotspot_bottom_right, :serenity_alive_path_from_observatory] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [30, 18, 5, 12, "Buffer-- has been set to: #{serenity_alive_firm_reply.quote}"],~ - Inside source: true *** True Line Result [30, 18, 5, 12, "Buffer-- has been set to: #{serenity_alive_firm_reply.quote}"], ** Processing line: ~ *serenity_alive_reply_completed_shared_hotspots(args),~ - Inside source: true *** True Line Result *serenity_alive_reply_completed_shared_hotspots(args), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replied_to_serenity_alive_kindly args~ - Inside source: true *** True Line Result def replied_to_serenity_alive_kindly args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [32, 21],~ - Inside source: true *** True Line Result player: [32, 21], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [*hotspot_bottom_right, :serenity_alive_path_from_observatory]~ - Inside source: true *** True Line Result [*hotspot_bottom_right, :serenity_alive_path_from_observatory] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [30, 18, 5, 12, "Buffer-- has been set to: #{serenity_alive_sugarcoated_reply.quote}"],~ - Inside source: true *** True Line Result [30, 18, 5, 12, "Buffer-- has been set to: #{serenity_alive_sugarcoated_reply.quote}"], ** Processing line: ~ *serenity_alive_reply_completed_shared_hotspots(args),~ - Inside source: true *** True Line Result *serenity_alive_reply_completed_shared_hotspots(args), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_path_from_observatory args~ - Inside source: true *** True Line Result def serenity_alive_path_from_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ background: 'sprites/path-to-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/path-to-observatory.png', ** Processing line: ~ player: [4, 21],~ - Inside source: true *** True Line Result player: [4, 21], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [*hotspot_bottom_right, :serenity_bio_infront_of_home]~ - Inside source: true *** True Line Result [*hotspot_bottom_right, :serenity_bio_infront_of_home] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [22, 20, 10, 10, "I'm not sure what's-- worse. Waiting-- for Sasha's-- reply. Or jumping-- off- from- right- here."]~ - Inside source: true *** True Line Result [22, 20, 10, 10, "I'm not sure what's-- worse. Waiting-- for Sasha's-- reply. Or jumping-- off- from- right- here."] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_reply_completed_shared_hotspots args~ - Inside source: true *** True Line Result def serenity_alive_reply_completed_shared_hotspots args ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [30, 10, 5, 4, "I guess it wasn't-- a joke- after-- all."],~ - Inside source: true *** True Line Result [30, 10, 5, 4, "I guess it wasn't-- a joke- after-- all."], ** Processing line: ~ [40, 10, 5, 4, "I barely-- remember--- the- history----- of the crew."],~ - Inside source: true *** True Line Result [40, 10, 5, 4, "I barely-- remember--- the- history----- of the crew."], ** Processing line: ~ [50, 10, 5, 4, "It probably--- wouldn't-- hurt- to- refresh-- my memory--."]~ - Inside source: true *** True Line Result [50, 10, 5, 4, "It probably--- wouldn't-- hurt- to- refresh-- my memory--."] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_last_reply args~ - Inside source: true *** True Line Result def serenity_alive_last_reply args ** Processing line: ~ if args.state.scene_history.include? :replied_to_introduction_seriously~ - Inside source: true *** True Line Result if args.state.scene_history.include? :replied_to_introduction_seriously ** Processing line: ~ return "Buffer--: \"Hello, Who- is sending-- this message--?\""~ - Inside source: true *** True Line Result return "Buffer--: \"Hello, Who- is sending-- this message--?\"" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return "Buffer--: \"New- phone. Who dis?\""~ - Inside source: true *** True Line Result return "Buffer--: \"New- phone. Who dis?\"" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_alive_current_message args~ - Inside source: true *** True Line Result def serenity_alive_current_message args ** Processing line: ~ if args.state.scene_history.include? :replied_to_introduction_seriously~ - Inside source: true *** True Line Result if args.state.scene_history.include? :replied_to_introduction_seriously ** Processing line: ~ "This- is Sasha. The Serenity--- crew-- is out of hibernation---- and ready-- for Earth reentry--. But, it seems like we are having-- trouble-- with our Navigation---- systems. Please advise.".quote~ - Inside source: true *** True Line Result "This- is Sasha. The Serenity--- crew-- is out of hibernation---- and ready-- for Earth reentry--. But, it seems like we are having-- trouble-- with our Navigation---- systems. Please advise.".quote ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ "LOL! Thanks for the laugh. I needed that. This- is Sasha. The Serenity--- crew-- is out of hibernation---- and ready-- for Earth reentry--. But, it seems like we are having-- trouble-- with our Navigation---- systems. Can you help me out- babe?".quote~ - Inside source: true *** True Line Result "LOL! Thanks for the laugh. I needed that. This- is Sasha. The Serenity--- crew-- is out of hibernation---- and ready-- for Earth reentry--. But, it seems like we are having-- trouble-- with our Navigation---- systems. Can you help me out- babe?".quote ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_serenity_bio.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Return Of Serenity - storyline_serenity_bio.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_serenity_bio.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_serenity_bio.rb ** Processing line: ~ def serenity_bio_infront_of_home args~ - Inside source: true *** True Line Result def serenity_bio_infront_of_home args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ background: 'sprites/front-of-home.png',~ - Inside source: true *** True Line Result background: 'sprites/front-of-home.png', ** Processing line: ~ player: [54, 23],~ - Inside source: true *** True Line Result player: [54, 23], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [44, 34, 8, 14, :serenity_bio_inside_home],~ - Inside source: true *** True Line Result [44, 34, 8, 14, :serenity_bio_inside_home], ** Processing line: ~ [0, 3, 3, 22, :serenity_bio_library]~ - Inside source: true *** True Line Result [0, 3, 3, 22, :serenity_bio_library] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_bio_inside_home args~ - Inside source: true *** True Line Result def serenity_bio_inside_home args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-home.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-home.png', ** Processing line: ~ player: [34, 4],~ - Inside source: true *** True Line Result player: [34, 4], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [34, 4, 4, 4, "I'm--- completely--- exhausted."],~ - Inside source: true *** True Line Result [34, 4, 4, 4, "I'm--- completely--- exhausted."], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [30, 38, 12, 13, :serenity_bio_restless_sleep],~ - Inside source: true *** True Line Result [30, 38, 12, 13, :serenity_bio_restless_sleep], ** Processing line: ~ [32, 0, 8, 3, :serenity_bio_infront_of_home],~ - Inside source: true *** True Line Result [32, 0, 8, 3, :serenity_bio_infront_of_home], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_bio_restless_sleep args~ - Inside source: true *** True Line Result def serenity_bio_restless_sleep args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ background: 'sprites/inside-home.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-home.png', ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [32, 38, 10, 13, "I can't-- seem to sleep. I know nothing-- about the- crew-. Maybe- I- should- go read- up- on- them."],~ - Inside source: true *** True Line Result [32, 38, 10, 13, "I can't-- seem to sleep. I know nothing-- about the- crew-. Maybe- I- should- go read- up- on- them."], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [32, 0, 8, 3, :serenity_bio_infront_of_home],~ - Inside source: true *** True Line Result [32, 0, 8, 3, :serenity_bio_infront_of_home], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_bio_library args~ - Inside source: true *** True Line Result def serenity_bio_library args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/library.png',~ - Inside source: true *** True Line Result background: 'sprites/library.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [30, 7],~ - Inside source: true *** True Line Result player: [30, 7], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [21, 35, 3, 18, :serenity_bio_book]~ - Inside source: true *** True Line Result [21, 35, 3, 18, :serenity_bio_book] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_bio_book args~ - Inside source: true *** True Line Result def serenity_bio_book args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/book.png',~ - Inside source: true *** True Line Result background: 'sprites/book.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [6, 52],~ - Inside source: true *** True Line Result player: [6, 52], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [ 4, 50, 56, 4, "The Title-- Reads: Never-- Forget-- Mission-- Serenity---"],~ - Inside source: true *** True Line Result [ 4, 50, 56, 4, "The Title-- Reads: Never-- Forget-- Mission-- Serenity---"], ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [ 4, 38, 8, 8, "Name: Matthew--- R. Sex: Male--- Age-- at-- Departure: 36-----"],~ - Inside source: true *** True Line Result [ 4, 38, 8, 8, "Name: Matthew--- R. Sex: Male--- Age-- at-- Departure: 36-----"], ** Processing line: ~ [14, 38, 46, 8, "Tribute-- Text: Matthew graduated-- Magna-- Cum-- Laude-- from MIT--- with-- a- PHD---- in Aero-- Nautical--- Engineering. He was immensely--- competitive, and had an insatiable---- thirst- for aerial-- battle. From the age of twenty, he remained-- undefeated--- in the Israeli-- Air- Force- \"Blue Flag\" combat-- exercises. By the age of 29--- he had already-- risen through- the ranks, and became-- the Lieutenant--- General--- of Lufwaffe. Matthew-- volenteered-- to- pilot-- Mission-- Serenity. To- this day, his wife- and son- are pillars-- of strength- for us. Rest- in Peace- Matthew, we are sorry-- that- news of the pregancy-- never-- reached- you. Please forgive us."],~ - Inside source: true *** True Line Result [14, 38, 46, 8, "Tribute-- Text: Matthew graduated-- Magna-- Cum-- Laude-- from MIT--- with-- a- PHD---- in Aero-- Nautical--- Engineering. He was immensely--- competitive, and had an insatiable---- thirst- for aerial-- battle. From the age of twenty, he remained-- undefeated--- in the Israeli-- Air- Force- \"Blue Flag\" combat-- exercises. By the age of 29--- he had already-- risen through- the ranks, and became-- the Lieutenant--- General--- of Lufwaffe. Matthew-- volenteered-- to- pilot-- Mission-- Serenity. To- this day, his wife- and son- are pillars-- of strength- for us. Rest- in Peace- Matthew, we are sorry-- that- news of the pregancy-- never-- reached- you. Please forgive us."], ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [4, 26, 8, 8, "Name: Aanka--- P. Sex: Female--- Age-- at-- Departure: 9-----"],~ - Inside source: true *** True Line Result [4, 26, 8, 8, "Name: Aanka--- P. Sex: Female--- Age-- at-- Departure: 9-----"], ** Processing line: ~ [14, 26, 46, 8, "Tribute-- Text: Aanka--- gratuated--- Magna-- Cum- Laude-- from MIT, at- the- age- of eight, with a- PHD---- in Astro-- Physics. Her-- IQ--- was over 390, the highest-- ever- recorded--- IQ-- in- human-- history. She changed- the landscape-- of Physics-- with her efforts- in- unravelling--- the mysteries--- of- Dark- Matter--. Anka discovered-- the threat- of Halley's-- Comet-- collision--- with Earth. She spear headed-- the global-- effort-- for Misson-- Serenity. Her- multilingual--- address-- to- the world-- brought- us all hope."],~ - Inside source: true *** True Line Result [14, 26, 46, 8, "Tribute-- Text: Aanka--- gratuated--- Magna-- Cum- Laude-- from MIT, at- the- age- of eight, with a- PHD---- in Astro-- Physics. Her-- IQ--- was over 390, the highest-- ever- recorded--- IQ-- in- human-- history. She changed- the landscape-- of Physics-- with her efforts- in- unravelling--- the mysteries--- of- Dark- Matter--. Anka discovered-- the threat- of Halley's-- Comet-- collision--- with Earth. She spear headed-- the global-- effort-- for Misson-- Serenity. Her- multilingual--- address-- to- the world-- brought- us all hope."], ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [4, 14, 8, 8, "Name: Sasha--- N. Sex: Female--- Age-- at-- Departure: 29-----"],~ - Inside source: true *** True Line Result [4, 14, 8, 8, "Name: Sasha--- N. Sex: Female--- Age-- at-- Departure: 29-----"], ** Processing line: ~ [14, 14, 46, 8, "Tribute-- Text: Sasha gratuated-- Magna-- Cum- Laude-- from MIT--- with-- a- PHD---- in Computer---- Science----. She-- was-- brilliant--, strong- willed--, and-- a-- stunningly--- beautiful--- woman---. Sasha---- is- the- creator--- of the world's--- first- Ruby--- Quantum-- Machine---. After-- much- critical--- acclaim--, the Quantum-- Computer-- was placed in MIT's---- Museam-- next- to- Richard--- G. and Thomas--- K.'s---- Lisp-- Machine---. Her- engineering--- skills-- were-- paramount--- for Mission--- Serenity's--- success. Humanity-- misses-- you-- dearly,-- Sasha--. Life-- shines-- a dimmer-- light-- now- that- your- angelic- voice-- can never- be heard- again."],~ - Inside source: true *** True Line Result [14, 14, 46, 8, "Tribute-- Text: Sasha gratuated-- Magna-- Cum- Laude-- from MIT--- with-- a- PHD---- in Computer---- Science----. She-- was-- brilliant--, strong- willed--, and-- a-- stunningly--- beautiful--- woman---. Sasha---- is- the- creator--- of the world's--- first- Ruby--- Quantum-- Machine---. After-- much- critical--- acclaim--, the Quantum-- Computer-- was placed in MIT's---- Museam-- next- to- Richard--- G. and Thomas--- K.'s---- Lisp-- Machine---. Her- engineering--- skills-- were-- paramount--- for Mission--- Serenity's--- success. Humanity-- misses-- you-- dearly,-- Sasha--. Life-- shines-- a dimmer-- light-- now- that- your- angelic- voice-- can never- be heard- again."], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [*hotspot_bottom, :serenity_bio_finally_to_bed]~ - Inside source: true *** True Line Result [*hotspot_bottom, :serenity_bio_finally_to_bed] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serenity_bio_finally_to_bed args~ - Inside source: true *** True Line Result def serenity_bio_finally_to_bed args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ background: 'sprites/inside-home.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-home.png', ** Processing line: ~ player: [35, 3],~ - Inside source: true *** True Line Result player: [35, 3], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [34, 4, 4, 4, "Maybe-- I'll-- be able-- to sleep- now..."],~ - Inside source: true *** True Line Result [34, 4, 4, 4, "Maybe-- I'll-- be able-- to sleep- now..."], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [32, 38, 10, 13, :bad_dream],~ - Inside source: true *** True Line Result [32, 38, 10, 13, :bad_dream], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bad_dream args~ - Inside source: true *** True Line Result def bad_dream args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ fade: 120,~ - Inside source: true *** True Line Result fade: 120, ** Processing line: ~ background: 'sprites/inside-home.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-home.png', ** Processing line: ~ player: [34, 35],~ - Inside source: true *** True Line Result player: [34, 35], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [34, 34, 4, 4, "Man. I did not- sleep- well- at all..."],~ - Inside source: true *** True Line Result [34, 34, 4, 4, "Man. I did not- sleep- well- at all..."], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [32, -1, 8, 3, :bad_dream_observatory]~ - Inside source: true *** True Line Result [32, -1, 8, 3, :bad_dream_observatory] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bad_dream_observatory args~ - Inside source: true *** True Line Result def bad_dream_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ fade: 120,~ - Inside source: true *** True Line Result fade: 120, ** Processing line: ~ player: [51, 12],~ - Inside source: true *** True Line Result player: [51, 12], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [50, 10, 4, 4, "Breathe, Hiro. Just see what's there... everything--- will- be okay."]~ - Inside source: true *** True Line Result [50, 10, 4, 4, "Breathe, Hiro. Just see what's there... everything--- will- be okay."] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [30, 18, 5, 12, :bad_dream_inside_mainframe]~ - Inside source: true *** True Line Result [30, 18, 5, 12, :bad_dream_inside_mainframe] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ render_override: :blinking_light_inside_observatory_render~ - Inside source: true *** True Line Result render_override: :blinking_light_inside_observatory_render ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bad_dream_inside_mainframe args~ - Inside source: true *** True Line Result def bad_dream_inside_mainframe args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ player: [32, 4],~ - Inside source: true *** True Line Result player: [32, 4], ** Processing line: ~ background: 'sprites/mainframe.png',~ - Inside source: true *** True Line Result background: 'sprites/mainframe.png', ** Processing line: ~ fade: 120,~ - Inside source: true *** True Line Result fade: 120, ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [22, 45, 17, 4, (bad_dream_last_reply args)],~ - Inside source: true *** True Line Result [22, 45, 17, 4, (bad_dream_last_reply args)], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [45, 45, 4, 4, :bad_dream_everyone_dead],~ - Inside source: true *** True Line Result [45, 45, 4, 4, :bad_dream_everyone_dead], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bad_dream_everyone_dead args~ - Inside source: true *** True Line Result def bad_dream_everyone_dead args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/mainframe.png',~ - Inside source: true *** True Line Result background: 'sprites/mainframe.png', ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [22, 45, 17, 4, (bad_dream_last_reply args)],~ - Inside source: true *** True Line Result [22, 45, 17, 4, (bad_dream_last_reply args)], ** Processing line: ~ [45, 45, 4, 4, "Hi-- Hiro. This is Sasha. By the time- you get this- message, chances-- are we will- already-- be- dead. The batteries--- got- damaged-- during-- removal. And- we don't-- have enough-- power-- for Life-- Support. The air-- is- already--- starting-- to taste- bad. It... would- have been- nice... to go- on a date--- with- you-- when-- I- got- back- to Earth. Anyways, good-- bye-- Hiro-- XOXOXO----"],~ - Inside source: true *** True Line Result [45, 45, 4, 4, "Hi-- Hiro. This is Sasha. By the time- you get this- message, chances-- are we will- already-- be- dead. The batteries--- got- damaged-- during-- removal. And- we don't-- have enough-- power-- for Life-- Support. The air-- is- already--- starting-- to taste- bad. It... would- have been- nice... to go- on a date--- with- you-- when-- I- got- back- to Earth. Anyways, good-- bye-- Hiro-- XOXOXO----"], ** Processing line: ~ [22, 5, 17, 4, "Meh. Whatever, I didn't-- want to save them anyways. What- a pain- in my ass."],~ - Inside source: true *** True Line Result [22, 5, 17, 4, "Meh. Whatever, I didn't-- want to save them anyways. What- a pain- in my ass."], ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [*hotspot_bottom, :anka_inside_room]~ - Inside source: true *** True Line Result [*hotspot_bottom, :anka_inside_room] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bad_dream_last_reply args~ - Inside source: true *** True Line Result def bad_dream_last_reply args ** Processing line: ~ if args.state.scene_history.include? :replied_to_serenity_alive_firmly~ - Inside source: true *** True Line Result if args.state.scene_history.include? :replied_to_serenity_alive_firmly ** Processing line: ~ return "Buffer--: #{serenity_alive_firm_reply.quote}"~ - Inside source: true *** True Line Result return "Buffer--: #{serenity_alive_firm_reply.quote}" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return "Buffer--: #{serenity_alive_sugarcoated_reply.quote}"~ - Inside source: true *** True Line Result return "Buffer--: #{serenity_alive_sugarcoated_reply.quote}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_serenity_introduction.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Return Of Serenity - storyline_serenity_introduction.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_serenity_introduction.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_serenity_introduction.rb ** Processing line: ~ # decision_graph "Message from Sasha",~ - Inside source: true *** True Line Result # decision_graph "Message from Sasha", ** Processing line: ~ # "I should reply.",~ - Inside source: true *** True Line Result # "I should reply.", ** Processing line: ~ # [:replied_to_introduction_seriously, "Reply Seriously", "Who is this?"],~ - Inside source: true *** True Line Result # [:replied_to_introduction_seriously, "Reply Seriously", "Who is this?"], ** Processing line: ~ # [:replied_to_introduction_humorously, "Reply Humorously", "New phone who dis?"]~ - Inside source: true *** True Line Result # [:replied_to_introduction_humorously, "Reply Humorously", "New phone who dis?"] ** Processing line: ~ def reply_to_introduction args~ - Inside source: true *** True Line Result def reply_to_introduction args ** Processing line: ~ decision_graph "\"Mission-- control--, your- main- comm-- channels-- seem-- to be down. My apologies-- for- using-- this low- level-- exploit--. What's-- going-- on down there? We are ready-- for reentry--.\" Message--- Timestamp---: 4- hours-- 23--- minutes-- ago--.",~ - Inside source: true *** True Line Result decision_graph "\"Mission-- control--, your- main- comm-- channels-- seem-- to be down. My apologies-- for- using-- this low- level-- exploit--. What's-- going-- on down there? We are ready-- for reentry--.\" Message--- Timestamp---: 4- hours-- 23--- minutes-- ago--.", ** Processing line: ~ "Whoever-- pulled- off this exploit-- knows their stuff. I should reply--.",~ - Inside source: true *** True Line Result "Whoever-- pulled- off this exploit-- knows their stuff. I should reply--.", ** Processing line: ~ [:replied_to_introduction_seriously, "Serious Reply", "Hello, Who- is sending-- this message--?"],~ - Inside source: true *** True Line Result [:replied_to_introduction_seriously, "Serious Reply", "Hello, Who- is sending-- this message--?"], ** Processing line: ~ [:replied_to_introduction_humorously, "Humorous Reply", "New phone, who dis?"]~ - Inside source: true *** True Line Result [:replied_to_introduction_humorously, "Humorous Reply", "New phone, who dis?"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replied_to_introduction_seriously args~ - Inside source: true *** True Line Result def replied_to_introduction_seriously args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [32, 21],~ - Inside source: true *** True Line Result player: [32, 21], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ *replied_to_introduction_shared_scenes(args)~ - Inside source: true *** True Line Result *replied_to_introduction_shared_scenes(args) ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [30, 18, 5, 12, "Buffer-- has been set to: \"Hello, Who- is sending-- this message--?\""],~ - Inside source: true *** True Line Result [30, 18, 5, 12, "Buffer-- has been set to: \"Hello, Who- is sending-- this message--?\""], ** Processing line: ~ *replied_to_introduction_shared_storylines(args)~ - Inside source: true *** True Line Result *replied_to_introduction_shared_storylines(args) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replied_to_introduction_humorously args~ - Inside source: true *** True Line Result def replied_to_introduction_humorously args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-observatory.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [32, 21],~ - Inside source: true *** True Line Result player: [32, 21], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ *replied_to_introduction_shared_scenes(args)~ - Inside source: true *** True Line Result *replied_to_introduction_shared_scenes(args) ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [30, 18, 5, 12, "Buffer-- has been set to: \"New- phone. Who dis?\""],~ - Inside source: true *** True Line Result [30, 18, 5, 12, "Buffer-- has been set to: \"New- phone. Who dis?\""], ** Processing line: ~ *replied_to_introduction_shared_storylines(args)~ - Inside source: true *** True Line Result *replied_to_introduction_shared_storylines(args) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replied_to_introduction_shared_storylines args~ - Inside source: true *** True Line Result def replied_to_introduction_shared_storylines args ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ [30, 10, 5, 4, "It's-- going-- to take a while-- for this reply-- to make it's-- way back."],~ - Inside source: true *** True Line Result [30, 10, 5, 4, "It's-- going-- to take a while-- for this reply-- to make it's-- way back."], ** Processing line: ~ [40, 10, 5, 4, "4- hours-- to send a message-- at light speed?! How far away-- is the sender--?"],~ - Inside source: true *** True Line Result [40, 10, 5, 4, "4- hours-- to send a message-- at light speed?! How far away-- is the sender--?"], ** Processing line: ~ [50, 10, 5, 4, "I know- I've-- read about-- light- speed- travel-- before--. Maybe-- the library--- still has that- poster."]~ - Inside source: true *** True Line Result [50, 10, 5, 4, "I know- I've-- read about-- light- speed- travel-- before--. Maybe-- the library--- still has that- poster."] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replied_to_introduction_shared_scenes args~ - Inside source: true *** True Line Result def replied_to_introduction_shared_scenes args ** Processing line: ~ [[60, 0, 4, 32, :replied_to_introduction_observatory]]~ - Inside source: true *** True Line Result [[60, 0, 4, 32, :replied_to_introduction_observatory]] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replied_to_introduction_observatory args~ - Inside source: true *** True Line Result def replied_to_introduction_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/observatory.png', ** Processing line: ~ player: [28, 39],~ - Inside source: true *** True Line Result player: [28, 39], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [60, 0, 4, 32, :replied_to_introduction_path_to_observatory]~ - Inside source: true *** True Line Result [60, 0, 4, 32, :replied_to_introduction_path_to_observatory] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replied_to_introduction_path_to_observatory args~ - Inside source: true *** True Line Result def replied_to_introduction_path_to_observatory args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/path-to-observatory.png',~ - Inside source: true *** True Line Result background: 'sprites/path-to-observatory.png', ** Processing line: ~ player: [0, 26],~ - Inside source: true *** True Line Result player: [0, 26], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [60, 0, 4, 20, :replied_to_introduction_mountain_pass]~ - Inside source: true *** True Line Result [60, 0, 4, 20, :replied_to_introduction_mountain_pass] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replied_to_introduction_mountain_pass args~ - Inside source: true *** True Line Result def replied_to_introduction_mountain_pass args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/mountain-pass-zoomed-out.png',~ - Inside source: true *** True Line Result background: 'sprites/mountain-pass-zoomed-out.png', ** Processing line: ~ player: [21, 48],~ - Inside source: true *** True Line Result player: [21, 48], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [0, 0, 15, 4, :replied_to_introduction_side_of_home]~ - Inside source: true *** True Line Result [0, 0, 15, 4, :replied_to_introduction_side_of_home] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [15, 28, 5, 3, "At least I'm-- getting-- my- exercise-- in- for- today--."]~ - Inside source: true *** True Line Result [15, 28, 5, 3, "At least I'm-- getting-- my- exercise-- in- for- today--."] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replied_to_introduction_side_of_home args~ - Inside source: true *** True Line Result def replied_to_introduction_side_of_home args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/side-of-home.png',~ - Inside source: true *** True Line Result background: 'sprites/side-of-home.png', ** Processing line: ~ player: [58, 29],~ - Inside source: true *** True Line Result player: [58, 29], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [2, 0, 61, 2, :speed_of_light_front_of_home]~ - Inside source: true *** True Line Result [2, 0, 61, 2, :speed_of_light_front_of_home] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_speed_of_light.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Narrative - Return Of Serenity - storyline_speed_of_light.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_speed_of_light.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_speed_of_light.rb ** Processing line: ~ def speed_of_light_front_of_home args~ - Inside source: true *** True Line Result def speed_of_light_front_of_home args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/front-of-home.png',~ - Inside source: true *** True Line Result background: 'sprites/front-of-home.png', ** Processing line: ~ player: [54, 23],~ - Inside source: true *** True Line Result player: [54, 23], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [44, 34, 8, 14, :speed_of_light_inside_home],~ - Inside source: true *** True Line Result [44, 34, 8, 14, :speed_of_light_inside_home], ** Processing line: ~ [0, 3, 3, 22, :speed_of_light_outside_library]~ - Inside source: true *** True Line Result [0, 3, 3, 22, :speed_of_light_outside_library] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def speed_of_light_inside_home args~ - Inside source: true *** True Line Result def speed_of_light_inside_home args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/inside-home.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-home.png', ** Processing line: ~ player: [35, 4],~ - Inside source: true *** True Line Result player: [35, 4], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [30, 38, 12, 13, "Can't- sleep right now. I have to- find- out- why- it took- over-- 4- hours-- to receive-- that message."]~ - Inside source: true *** True Line Result [30, 38, 12, 13, "Can't- sleep right now. I have to- find- out- why- it took- over-- 4- hours-- to receive-- that message."] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [32, 0, 8, 3, :speed_of_light_front_of_home],~ - Inside source: true *** True Line Result [32, 0, 8, 3, :speed_of_light_front_of_home], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def speed_of_light_outside_library args~ - Inside source: true *** True Line Result def speed_of_light_outside_library args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/outside-library.png',~ - Inside source: true *** True Line Result background: 'sprites/outside-library.png', ** Processing line: ~ player: [55, 19],~ - Inside source: true *** True Line Result player: [55, 19], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [49, 39, 6, 10, :speed_of_light_library],~ - Inside source: true *** True Line Result [49, 39, 6, 10, :speed_of_light_library], ** Processing line: ~ [61, 11, 3, 20, :speed_of_light_front_of_home]~ - Inside source: true *** True Line Result [61, 11, 3, 20, :speed_of_light_front_of_home] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def speed_of_light_library args~ - Inside source: true *** True Line Result def speed_of_light_library args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/library.png',~ - Inside source: true *** True Line Result background: 'sprites/library.png', ** Processing line: ~ player: [30, 7],~ - Inside source: true *** True Line Result player: [30, 7], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [3, 50, 10, 3, :speed_of_light_celestial_bodies_diagram]~ - Inside source: true *** True Line Result [3, 50, 10, 3, :speed_of_light_celestial_bodies_diagram] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def speed_of_light_celestial_bodies_diagram args~ - Inside source: true *** True Line Result def speed_of_light_celestial_bodies_diagram args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/planets.png',~ - Inside source: true *** True Line Result background: 'sprites/planets.png', ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ player: [30, 3],~ - Inside source: true *** True Line Result player: [30, 3], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [56 - 2, 10, 5, 5, :speed_of_light_distance_discovered]~ - Inside source: true *** True Line Result [56 - 2, 10, 5, 5, :speed_of_light_distance_discovered] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [30, 2, 4, 4, "Here- it is! This is a diagram--- of the solar-- system--. It was printed-- over-- fifty-- years- ago. Geez-- that's-- old."],~ - Inside source: true *** True Line Result [30, 2, 4, 4, "Here- it is! This is a diagram--- of the solar-- system--. It was printed-- over-- fifty-- years- ago. Geez-- that's-- old."], ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ [ 0 - 2, 10, 5, 5, "The label- reads: Sun. The length- of the Astronomical-------- Unit-- (AU), is the distance-- from the Sun- to the Earth. Which is about 150--- million--- kilometers----."],~ - Inside source: true *** True Line Result [ 0 - 2, 10, 5, 5, "The label- reads: Sun. The length- of the Astronomical-------- Unit-- (AU), is the distance-- from the Sun- to the Earth. Which is about 150--- million--- kilometers----."], ** Processing line: ~ [ 7 - 2, 10, 5, 5, "The label- reads: Mercury. Distance from Sun: 0.39AU------------ or- 3----- light-- minutes--."],~ - Inside source: true *** True Line Result [ 7 - 2, 10, 5, 5, "The label- reads: Mercury. Distance from Sun: 0.39AU------------ or- 3----- light-- minutes--."], ** Processing line: ~ [14 - 2, 10, 5, 5, "The label- reads: Venus. Distance from Sun: 0.72AU------------ or- 6----- light-- minutes--."],~ - Inside source: true *** True Line Result [14 - 2, 10, 5, 5, "The label- reads: Venus. Distance from Sun: 0.72AU------------ or- 6----- light-- minutes--."], ** Processing line: ~ [21 - 2, 10, 5, 5, "The label- reads: Earth. Distance from Sun: 1.00AU------------ or- 8----- light-- minutes--."],~ - Inside source: true *** True Line Result [21 - 2, 10, 5, 5, "The label- reads: Earth. Distance from Sun: 1.00AU------------ or- 8----- light-- minutes--."], ** Processing line: ~ [28 - 2, 10, 5, 5, "The label- reads: Mars. Distance from Sun: 1.52AU------------ or- 12----- light-- minutes--."],~ - Inside source: true *** True Line Result [28 - 2, 10, 5, 5, "The label- reads: Mars. Distance from Sun: 1.52AU------------ or- 12----- light-- minutes--."], ** Processing line: ~ [35 - 2, 10, 5, 5, "The label- reads: Jupiter. Distance from Sun: 5.20AU------------ or- 45----- light-- minutes--."],~ - Inside source: true *** True Line Result [35 - 2, 10, 5, 5, "The label- reads: Jupiter. Distance from Sun: 5.20AU------------ or- 45----- light-- minutes--."], ** Processing line: ~ [42 - 2, 10, 5, 5, "The label- reads: Saturn. Distance from Sun: 9.53AU------------ or- 79----- light-- minutes--."],~ - Inside source: true *** True Line Result [42 - 2, 10, 5, 5, "The label- reads: Saturn. Distance from Sun: 9.53AU------------ or- 79----- light-- minutes--."], ** Processing line: ~ [49 - 2, 10, 5, 5, "The label- reads: Uranus. Distance from Sun: 19.81AU------------ or- 159----- light-- minutes--."],~ - Inside source: true *** True Line Result [49 - 2, 10, 5, 5, "The label- reads: Uranus. Distance from Sun: 19.81AU------------ or- 159----- light-- minutes--."], ** Processing line: ~ # [56 - 2, 15, 4, 4, "The label- reads: Neptune. Distance from Sun: 30.05AU------------ or- 4.1----- light-- hours--."],~ - Inside source: true *** True Line Result # [56 - 2, 15, 4, 4, "The label- reads: Neptune. Distance from Sun: 30.05AU------------ or- 4.1----- light-- hours--."], ** Processing line: ~ [63 - 2, 10, 5, 5, "The label- reads: Pluto. Wait. WTF? Pluto-- isn't-- a planet."],~ - Inside source: true *** True Line Result [63 - 2, 10, 5, 5, "The label- reads: Pluto. Wait. WTF? Pluto-- isn't-- a planet."], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def speed_of_light_distance_discovered args~ - Inside source: true *** True Line Result def speed_of_light_distance_discovered args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ background: 'sprites/planets.png',~ - Inside source: true *** True Line Result background: 'sprites/planets.png', ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [13, 0, 44, 3, :speed_of_light_end_of_day]~ - Inside source: true *** True Line Result [13, 0, 44, 3, :speed_of_light_end_of_day] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [ 0 - 2, 10, 5, 5, "The label- reads: Sun. The length- of the Astronomical-------- Unit-- (AU), is the distance-- from the Sun- to the Earth. Which is about 150--- million--- kilometers----."],~ - Inside source: true *** True Line Result [ 0 - 2, 10, 5, 5, "The label- reads: Sun. The length- of the Astronomical-------- Unit-- (AU), is the distance-- from the Sun- to the Earth. Which is about 150--- million--- kilometers----."], ** Processing line: ~ [ 7 - 2, 10, 5, 5, "The label- reads: Mercury. Distance from Sun: 0.39AU------------ or- 3----- light-- minutes--."],~ - Inside source: true *** True Line Result [ 7 - 2, 10, 5, 5, "The label- reads: Mercury. Distance from Sun: 0.39AU------------ or- 3----- light-- minutes--."], ** Processing line: ~ [14 - 2, 10, 5, 5, "The label- reads: Venus. Distance from Sun: 0.72AU------------ or- 6----- light-- minutes--."],~ - Inside source: true *** True Line Result [14 - 2, 10, 5, 5, "The label- reads: Venus. Distance from Sun: 0.72AU------------ or- 6----- light-- minutes--."], ** Processing line: ~ [21 - 2, 10, 5, 5, "The label- reads: Earth. Distance from Sun: 1.00AU------------ or- 8----- light-- minutes--."],~ - Inside source: true *** True Line Result [21 - 2, 10, 5, 5, "The label- reads: Earth. Distance from Sun: 1.00AU------------ or- 8----- light-- minutes--."], ** Processing line: ~ [28 - 2, 10, 5, 5, "The label- reads: Mars. Distance from Sun: 1.52AU------------ or- 12----- light-- minutes--."],~ - Inside source: true *** True Line Result [28 - 2, 10, 5, 5, "The label- reads: Mars. Distance from Sun: 1.52AU------------ or- 12----- light-- minutes--."], ** Processing line: ~ [35 - 2, 10, 5, 5, "The label- reads: Jupiter. Distance from Sun: 5.20AU------------ or- 45----- light-- minutes--."],~ - Inside source: true *** True Line Result [35 - 2, 10, 5, 5, "The label- reads: Jupiter. Distance from Sun: 5.20AU------------ or- 45----- light-- minutes--."], ** Processing line: ~ [42 - 2, 10, 5, 5, "The label- reads: Saturn. Distance from Sun: 9.53AU------------ or- 79----- light-- minutes--."],~ - Inside source: true *** True Line Result [42 - 2, 10, 5, 5, "The label- reads: Saturn. Distance from Sun: 9.53AU------------ or- 79----- light-- minutes--."], ** Processing line: ~ [49 - 2, 10, 5, 5, "The label- reads: Uranus. Distance from Sun: 19.81AU------------ or- 159----- light-- minutes--."],~ - Inside source: true *** True Line Result [49 - 2, 10, 5, 5, "The label- reads: Uranus. Distance from Sun: 19.81AU------------ or- 159----- light-- minutes--."], ** Processing line: ~ [56 - 2, 10, 5, 5, "The label- reads: Neptune. Distance from Sun: 30.05AU------------ or- 4.1----- light-- hours--. What?! The message--- I received-- was from a source-- farther-- than-- Neptune?!"],~ - Inside source: true *** True Line Result [56 - 2, 10, 5, 5, "The label- reads: Neptune. Distance from Sun: 30.05AU------------ or- 4.1----- light-- hours--. What?! The message--- I received-- was from a source-- farther-- than-- Neptune?!"], ** Processing line: ~ [63 - 2, 10, 5, 5, "The label- reads: Pluto. Dista- Wait... Pluto-- isn't-- a planet. People-- thought- Pluto-- was a planet-- back- then?--"],~ - Inside source: true *** True Line Result [63 - 2, 10, 5, 5, "The label- reads: Pluto. Dista- Wait... Pluto-- isn't-- a planet. People-- thought- Pluto-- was a planet-- back- then?--"], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def speed_of_light_end_of_day args~ - Inside source: true *** True Line Result def speed_of_light_end_of_day args ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ fade: 60,~ - Inside source: true *** True Line Result fade: 60, ** Processing line: ~ background: 'sprites/inside-home.png',~ - Inside source: true *** True Line Result background: 'sprites/inside-home.png', ** Processing line: ~ player: [35, 0],~ - Inside source: true *** True Line Result player: [35, 0], ** Processing line: ~ storylines: [~ - Inside source: true *** True Line Result storylines: [ ** Processing line: ~ [35, 10, 4, 4, "Wonder-- what the reply-- will be. Who- the hell is contacting--- me from beyond-- Neptune? This- has to be some- kind- of- joke."]~ - Inside source: true *** True Line Result [35, 10, 4, 4, "Wonder-- what the reply-- will be. Who- the hell is contacting--- me from beyond-- Neptune? This- has to be some- kind- of- joke."] ** Processing line: ~ ],~ - Inside source: true *** True Line Result ], ** Processing line: ~ scenes: [~ - Inside source: true *** True Line Result scenes: [ ** Processing line: ~ [31, 38, 10, 12, :serenity_alive_side_of_home]~ - Inside source: true *** True Line Result [31, 38, 10, 12, :serenity_alive_side_of_home] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Roguelike - Roguelike Starting Point - constants.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Roguelike - Roguelike Starting Point - constants.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_roguelike/01_roguelike_starting_point/app/constants.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_roguelike/01_roguelike_starting_point/app/constants.rb ** Processing line: ~ SHOW_LEGEND = true~ - Inside source: true *** True Line Result SHOW_LEGEND = true ** Processing line: ~ SOURCE_TILE_SIZE = 16~ - Inside source: true *** True Line Result SOURCE_TILE_SIZE = 16 ** Processing line: ~ DESTINATION_TILE_SIZE = 16~ - Inside source: true *** True Line Result DESTINATION_TILE_SIZE = 16 ** Processing line: ~ TILE_SHEET_SIZE = 256~ - Inside source: true *** True Line Result TILE_SHEET_SIZE = 256 ** Processing line: ~ TILE_R = 0~ - Inside source: true *** True Line Result TILE_R = 0 ** Processing line: ~ TILE_G = 0~ - Inside source: true *** True Line Result TILE_G = 0 ** Processing line: ~ TILE_B = 0~ - Inside source: true *** True Line Result TILE_B = 0 ** Processing line: ~ TILE_A = 255~ - Inside source: true *** True Line Result TILE_A = 255 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Roguelike - Roguelike Starting Point - legend.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Roguelike - Roguelike Starting Point - legend.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_roguelike/01_roguelike_starting_point/app/legend.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_roguelike/01_roguelike_starting_point/app/legend.rb ** Processing line: ~ def tick_legend args~ - Inside source: true *** True Line Result def tick_legend args ** Processing line: ~ return unless SHOW_LEGEND~ - Inside source: true *** True Line Result return unless SHOW_LEGEND ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ legend_padding = 16~ - Inside source: true *** True Line Result legend_padding = 16 ** Processing line: ~ legend_x = 1280 - TILE_SHEET_SIZE - legend_padding~ - Inside source: true *** True Line Result legend_x = 1280 - TILE_SHEET_SIZE - legend_padding ** Processing line: ~ legend_y = 720 - TILE_SHEET_SIZE - legend_padding~ - Inside source: true *** True Line Result legend_y = 720 - TILE_SHEET_SIZE - legend_padding ** Processing line: ~ tile_sheet_sprite = [legend_x,~ - Inside source: true *** True Line Result tile_sheet_sprite = [legend_x, ** Processing line: ~ legend_y,~ - Inside source: true *** True Line Result legend_y, ** Processing line: ~ TILE_SHEET_SIZE,~ - Inside source: true *** True Line Result TILE_SHEET_SIZE, ** Processing line: ~ TILE_SHEET_SIZE,~ - Inside source: true *** True Line Result TILE_SHEET_SIZE, ** Processing line: ~ 'sprites/simple-mood-16x16.png', 0,~ - Inside source: true *** True Line Result 'sprites/simple-mood-16x16.png', 0, ** Processing line: ~ TILE_A,~ - Inside source: true *** True Line Result TILE_A, ** Processing line: ~ TILE_R,~ - Inside source: true *** True Line Result TILE_R, ** Processing line: ~ TILE_G,~ - Inside source: true *** True Line Result TILE_G, ** Processing line: ~ TILE_B]~ - Inside source: true *** True Line Result TILE_B] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.mouse.point.inside_rect? tile_sheet_sprite~ - Inside source: true *** True Line Result if args.inputs.mouse.point.inside_rect? tile_sheet_sprite ** Processing line: ~ mouse_row = args.inputs.mouse.point.y.idiv(SOURCE_TILE_SIZE)~ - Inside source: true *** True Line Result mouse_row = args.inputs.mouse.point.y.idiv(SOURCE_TILE_SIZE) ** Processing line: ~ tile_row = 15 - (mouse_row - legend_y.idiv(SOURCE_TILE_SIZE))~ - Inside source: true *** True Line Result tile_row = 15 - (mouse_row - legend_y.idiv(SOURCE_TILE_SIZE)) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ mouse_col = args.inputs.mouse.point.x.idiv(SOURCE_TILE_SIZE)~ - Inside source: true *** True Line Result mouse_col = args.inputs.mouse.point.x.idiv(SOURCE_TILE_SIZE) ** Processing line: ~ tile_col = (mouse_col - legend_x.idiv(SOURCE_TILE_SIZE))~ - Inside source: true *** True Line Result tile_col = (mouse_col - legend_x.idiv(SOURCE_TILE_SIZE)) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.primitives << [legend_x - legend_padding * 2,~ - Inside source: true *** True Line Result args.outputs.primitives << [legend_x - legend_padding * 2, ** Processing line: ~ mouse_row * SOURCE_TILE_SIZE, 256 + legend_padding * 2, 16, 128, 128, 128, 64].solid~ - Inside source: true *** True Line Result mouse_row * SOURCE_TILE_SIZE, 256 + legend_padding * 2, 16, 128, 128, 128, 64].solid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.primitives << [mouse_col * SOURCE_TILE_SIZE,~ - Inside source: true *** True Line Result args.outputs.primitives << [mouse_col * SOURCE_TILE_SIZE, ** Processing line: ~ legend_y - legend_padding * 2, 16, 256 + legend_padding * 2, 128, 128, 128, 64].solid~ - Inside source: true *** True Line Result legend_y - legend_padding * 2, 16, 256 + legend_padding * 2, 128, 128, 128, 64].solid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sprite_key = sprite_lookup.find { |k, v| v == [tile_row, tile_col] }~ - Inside source: true *** True Line Result sprite_key = sprite_lookup.find { |k, v| v == [tile_row, tile_col] } ** Processing line: ~ if sprite_key~ - Inside source: true *** True Line Result if sprite_key ** Processing line: ~ member_name, _ = sprite_key~ - Inside source: true *** True Line Result member_name, _ = sprite_key ** Processing line: ~ member_name = member_name_as_code member_name~ - Inside source: true *** True Line Result member_name = member_name_as_code member_name ** Processing line: ~ args.outputs.labels << [660, 70, "# CODE SAMPLE (place in the tick_game method located in main.rb)", -1, 0]~ - Inside source: true *** True Line Result args.outputs.labels << [660, 70, "# CODE SAMPLE (place in the tick_game method located in main.rb)", -1, 0] ** Processing line: ~ args.outputs.labels << [660, 50, "# GRID_X, GRID_Y, TILE_KEY", -1, 0]~ - Inside source: true *** True Line Result args.outputs.labels << [660, 50, "# GRID_X, GRID_Y, TILE_KEY", -1, 0] ** Processing line: ~ args.outputs.labels << [660, 30, "args.outputs.sprites << tile_in_game( 5, 6, #{member_name} )", -1, 0]~ - Inside source: true *** True Line Result args.outputs.labels << [660, 30, "args.outputs.sprites << tile_in_game( 5, 6, #{member_name} )", -1, 0] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.outputs.labels << [660, 50, "Tile [#{tile_row}, #{tile_col}] not found. Add a key and value to app/sprite_lookup.rb:", -1, 0]~ - Inside source: true *** True Line Result args.outputs.labels << [660, 50, "Tile [#{tile_row}, #{tile_col}] not found. Add a key and value to app/sprite_lookup.rb:", -1, 0] ** Processing line: ~ args.outputs.labels << [660, 30, "{ \"some_string\" => [#{tile_row}, #{tile_col}] } OR { some_symbol: [#{tile_row}, #{tile_col}] }.", -1, 0]~ - Inside source: true *** True Line Result args.outputs.labels << [660, 30, "{ \"some_string\" => [#{tile_row}, #{tile_col}] } OR { some_symbol: [#{tile_row}, #{tile_col}] }.", -1, 0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render the sprite in the top right with a padding to the top and right so it's~ - Inside source: true *** True Line Result # render the sprite in the top right with a padding to the top and right so it's ** Processing line: ~ # not flush against the edge~ - Inside source: true *** True Line Result # not flush against the edge ** Processing line: ~ args.outputs.sprites << tile_sheet_sprite~ - Inside source: true *** True Line Result args.outputs.sprites << tile_sheet_sprite ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # carefully place some ascii arrows to show the legend labels~ - Inside source: true *** True Line Result # carefully place some ascii arrows to show the legend labels ** Processing line: ~ args.outputs.labels << [895, 707, "ROW --->"]~ - Inside source: true *** True Line Result args.outputs.labels << [895, 707, "ROW --->"] ** Processing line: ~ args.outputs.labels << [943, 412, " ^"]~ - Inside source: true *** True Line Result args.outputs.labels << [943, 412, " ^"] ** Processing line: ~ args.outputs.labels << [943, 412, " |"]~ - Inside source: true *** True Line Result args.outputs.labels << [943, 412, " |"] ** Processing line: ~ args.outputs.labels << [943, 394, "COL ---+"]~ - Inside source: true *** True Line Result args.outputs.labels << [943, 394, "COL ---+"] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # use the tile sheet to print out row and column numbers~ - Inside source: true *** True Line Result # use the tile sheet to print out row and column numbers ** Processing line: ~ args.outputs.sprites << 16.map_with_index do |i|~ - Inside source: true *** True Line Result args.outputs.sprites << 16.map_with_index do |i| ** Processing line: ~ sprite_key = i % 10~ - Inside source: true *** True Line Result sprite_key = i % 10 ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ tile(1280 - TILE_SHEET_SIZE - legend_padding * 2 - SOURCE_TILE_SIZE,~ - Inside source: true *** True Line Result tile(1280 - TILE_SHEET_SIZE - legend_padding * 2 - SOURCE_TILE_SIZE, ** Processing line: ~ 720 - legend_padding * 2 - (SOURCE_TILE_SIZE * i),~ - Inside source: true *** True Line Result 720 - legend_padding * 2 - (SOURCE_TILE_SIZE * i), ** Processing line: ~ sprite(sprite_key)),~ - Inside source: true *** True Line Result sprite(sprite_key)), ** Processing line: ~ tile(1280 - TILE_SHEET_SIZE - SOURCE_TILE_SIZE + (SOURCE_TILE_SIZE * i),~ - Inside source: true *** True Line Result tile(1280 - TILE_SHEET_SIZE - SOURCE_TILE_SIZE + (SOURCE_TILE_SIZE * i), ** Processing line: ~ 720 - TILE_SHEET_SIZE - legend_padding * 3, sprite(sprite_key))~ - Inside source: true *** True Line Result 720 - TILE_SHEET_SIZE - legend_padding * 3, sprite(sprite_key)) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Roguelike - Roguelike Starting Point - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Roguelike - Roguelike Starting Point - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_roguelike/01_roguelike_starting_point/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_roguelike/01_roguelike_starting_point/app/main.rb ** Processing line: ~ require 'app/constants.rb'~ - Inside source: true *** True Line Result require 'app/constants.rb' ** Processing line: ~ require 'app/sprite_lookup.rb'~ - Inside source: true *** True Line Result require 'app/sprite_lookup.rb' ** Processing line: ~ require 'app/legend.rb'~ - Inside source: true *** True Line Result require 'app/legend.rb' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ tick_game args~ - Inside source: true *** True Line Result tick_game args ** Processing line: ~ tick_legend args~ - Inside source: true *** True Line Result tick_legend args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_game args~ - Inside source: true *** True Line Result def tick_game args ** Processing line: ~ # setup the grid~ - Inside source: true *** True Line Result # setup the grid ** Processing line: ~ args.state.grid.padding = 104~ - Inside source: true *** True Line Result args.state.grid.padding = 104 ** Processing line: ~ args.state.grid.size = 512~ - Inside source: true *** True Line Result args.state.grid.size = 512 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # set up your game~ - Inside source: true *** True Line Result # set up your game ** Processing line: ~ # initialize the game/game defaults. ||= means that you only initialize it if~ - Inside source: true *** True Line Result # initialize the game/game defaults. ||= means that you only initialize it if ** Processing line: ~ # the value isn't alread initialized~ - Inside source: true *** True Line Result # the value isn't alread initialized ** Processing line: ~ args.state.player.x ||= 0~ - Inside source: true *** True Line Result args.state.player.x ||= 0 ** Processing line: ~ args.state.player.y ||= 0~ - Inside source: true *** True Line Result args.state.player.y ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.enemies ||= [~ - Inside source: true *** True Line Result args.state.enemies ||= [ ** Processing line: ~ { x: 10, y: 10, type: :goblin, tile_key: :G },~ - Inside source: true *** True Line Result { x: 10, y: 10, type: :goblin, tile_key: :G }, ** Processing line: ~ { x: 15, y: 30, type: :rat, tile_key: :R }~ - Inside source: true *** True Line Result { x: 15, y: 30, type: :rat, tile_key: :R } ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.state.info_message ||= "Use arrow keys to move around."~ - Inside source: true *** True Line Result args.state.info_message ||= "Use arrow keys to move around." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # handle keyboard input~ - Inside source: true *** True Line Result # handle keyboard input ** Processing line: ~ # keyboard input (arrow keys to move player)~ - Inside source: true *** True Line Result # keyboard input (arrow keys to move player) ** Processing line: ~ new_player_x = args.state.player.x~ - Inside source: true *** True Line Result new_player_x = args.state.player.x ** Processing line: ~ new_player_y = args.state.player.y~ - Inside source: true *** True Line Result new_player_y = args.state.player.y ** Processing line: ~ player_direction = ""~ - Inside source: true *** True Line Result player_direction = "" ** Processing line: ~ player_moved = false~ - Inside source: true *** True Line Result player_moved = false ** Processing line: ~ if args.inputs.keyboard.key_down.up~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.up ** Processing line: ~ new_player_y += 1~ - Inside source: true *** True Line Result new_player_y += 1 ** Processing line: ~ player_direction = "north"~ - Inside source: true *** True Line Result player_direction = "north" ** Processing line: ~ player_moved = true~ - Inside source: true *** True Line Result player_moved = true ** Processing line: ~ elsif args.inputs.keyboard.key_down.down~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.down ** Processing line: ~ new_player_y -= 1~ - Inside source: true *** True Line Result new_player_y -= 1 ** Processing line: ~ player_direction = "south"~ - Inside source: true *** True Line Result player_direction = "south" ** Processing line: ~ player_moved = true~ - Inside source: true *** True Line Result player_moved = true ** Processing line: ~ elsif args.inputs.keyboard.key_down.right~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.right ** Processing line: ~ new_player_x += 1~ - Inside source: true *** True Line Result new_player_x += 1 ** Processing line: ~ player_direction = "east"~ - Inside source: true *** True Line Result player_direction = "east" ** Processing line: ~ player_moved = true~ - Inside source: true *** True Line Result player_moved = true ** Processing line: ~ elsif args.inputs.keyboard.key_down.left~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.left ** Processing line: ~ new_player_x -= 1~ - Inside source: true *** True Line Result new_player_x -= 1 ** Processing line: ~ player_direction = "west"~ - Inside source: true *** True Line Result player_direction = "west" ** Processing line: ~ player_moved = true~ - Inside source: true *** True Line Result player_moved = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #handle game logic~ - Inside source: true *** True Line Result #handle game logic ** Processing line: ~ # determine if there is an enemy on that square,~ - Inside source: true *** True Line Result # determine if there is an enemy on that square, ** Processing line: ~ # if so, don't let the player move there~ - Inside source: true *** True Line Result # if so, don't let the player move there ** Processing line: ~ if player_moved~ - Inside source: true *** True Line Result if player_moved ** Processing line: ~ found_enemy = args.state.enemies.find do |e|~ - Inside source: true *** True Line Result found_enemy = args.state.enemies.find do |e| ** Processing line: ~ e[:x] == new_player_x && e[:y] == new_player_y~ - Inside source: true *** True Line Result e[:x] == new_player_x && e[:y] == new_player_y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !found_enemy~ - Inside source: true *** True Line Result if !found_enemy ** Processing line: ~ args.state.player.x = new_player_x~ - Inside source: true *** True Line Result args.state.player.x = new_player_x ** Processing line: ~ args.state.player.y = new_player_y~ - Inside source: true *** True Line Result args.state.player.y = new_player_y ** Processing line: ~ args.state.info_message = "You moved #{player_direction}."~ - Inside source: true *** True Line Result args.state.info_message = "You moved #{player_direction}." ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.state.info_message = "You cannot move into a square an enemy occupies."~ - Inside source: true *** True Line Result args.state.info_message = "You cannot move into a square an enemy occupies." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.sprites << tile_in_game(args.state.player.x,~ - Inside source: true *** True Line Result args.outputs.sprites << tile_in_game(args.state.player.x, ** Processing line: ~ args.state.player.y, '@')~ - Inside source: true *** True Line Result args.state.player.y, '@') ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render game~ - Inside source: true *** True Line Result # render game ** Processing line: ~ # render enemies at locations~ - Inside source: true *** True Line Result # render enemies at locations ** Processing line: ~ args.outputs.sprites << args.state.enemies.map do |e|~ - Inside source: true *** True Line Result args.outputs.sprites << args.state.enemies.map do |e| ** Processing line: ~ tile_in_game(e[:x], e[:y], e[:tile_key])~ - Inside source: true *** True Line Result tile_in_game(e[:x], e[:y], e[:tile_key]) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render the border~ - Inside source: true *** True Line Result # render the border ** Processing line: ~ border_x = args.state.grid.padding - DESTINATION_TILE_SIZE~ - Inside source: true *** True Line Result border_x = args.state.grid.padding - DESTINATION_TILE_SIZE ** Processing line: ~ border_y = args.state.grid.padding - DESTINATION_TILE_SIZE~ - Inside source: true *** True Line Result border_y = args.state.grid.padding - DESTINATION_TILE_SIZE ** Processing line: ~ border_size = args.state.grid.size + DESTINATION_TILE_SIZE * 2~ - Inside source: true *** True Line Result border_size = args.state.grid.size + DESTINATION_TILE_SIZE * 2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.borders << [border_x,~ - Inside source: true *** True Line Result args.outputs.borders << [border_x, ** Processing line: ~ border_y,~ - Inside source: true *** True Line Result border_y, ** Processing line: ~ border_size,~ - Inside source: true *** True Line Result border_size, ** Processing line: ~ border_size]~ - Inside source: true *** True Line Result border_size] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render label stuff~ - Inside source: true *** True Line Result # render label stuff ** Processing line: ~ args.outputs.labels << [border_x, border_y - 10, "Current player location is: #{args.state.player.x}, #{args.state.player.y}"]~ - Inside source: true *** True Line Result args.outputs.labels << [border_x, border_y - 10, "Current player location is: #{args.state.player.x}, #{args.state.player.y}"] ** Processing line: ~ args.outputs.labels << [border_x, border_y + 25 + border_size, args.state.info_message]~ - Inside source: true *** True Line Result args.outputs.labels << [border_x, border_y + 25 + border_size, args.state.info_message] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tile_in_game x, y, tile_key~ - Inside source: true *** True Line Result def tile_in_game x, y, tile_key ** Processing line: ~ tile($gtk.args.state.grid.padding + x * DESTINATION_TILE_SIZE,~ - Inside source: true *** True Line Result tile($gtk.args.state.grid.padding + x * DESTINATION_TILE_SIZE, ** Processing line: ~ $gtk.args.state.grid.padding + y * DESTINATION_TILE_SIZE,~ - Inside source: true *** True Line Result $gtk.args.state.grid.padding + y * DESTINATION_TILE_SIZE, ** Processing line: ~ tile_key)~ - Inside source: true *** True Line Result tile_key) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Roguelike - Roguelike Starting Point - sprite_lookup.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Roguelike - Roguelike Starting Point - sprite_lookup.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_roguelike/01_roguelike_starting_point/app/sprite_lookup.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_roguelike/01_roguelike_starting_point/app/sprite_lookup.rb ** Processing line: ~ def sprite_lookup~ - Inside source: true *** True Line Result def sprite_lookup ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ 0 => [3, 0],~ - Inside source: true *** True Line Result 0 => [3, 0], ** Processing line: ~ 1 => [3, 1],~ - Inside source: true *** True Line Result 1 => [3, 1], ** Processing line: ~ 2 => [3, 2],~ - Inside source: true *** True Line Result 2 => [3, 2], ** Processing line: ~ 3 => [3, 3],~ - Inside source: true *** True Line Result 3 => [3, 3], ** Processing line: ~ 4 => [3, 4],~ - Inside source: true *** True Line Result 4 => [3, 4], ** Processing line: ~ 5 => [3, 5],~ - Inside source: true *** True Line Result 5 => [3, 5], ** Processing line: ~ 6 => [3, 6],~ - Inside source: true *** True Line Result 6 => [3, 6], ** Processing line: ~ 7 => [3, 7],~ - Inside source: true *** True Line Result 7 => [3, 7], ** Processing line: ~ 8 => [3, 8],~ - Inside source: true *** True Line Result 8 => [3, 8], ** Processing line: ~ 9 => [3, 9],~ - Inside source: true *** True Line Result 9 => [3, 9], ** Processing line: ~ '@' => [4, 0],~ - Inside source: true *** True Line Result '@' => [4, 0], ** Processing line: ~ A: [ 4, 1],~ - Inside source: true *** True Line Result A: [ 4, 1], ** Processing line: ~ B: [ 4, 2],~ - Inside source: true *** True Line Result B: [ 4, 2], ** Processing line: ~ C: [ 4, 3],~ - Inside source: true *** True Line Result C: [ 4, 3], ** Processing line: ~ D: [ 4, 4],~ - Inside source: true *** True Line Result D: [ 4, 4], ** Processing line: ~ E: [ 4, 5],~ - Inside source: true *** True Line Result E: [ 4, 5], ** Processing line: ~ F: [ 4, 6],~ - Inside source: true *** True Line Result F: [ 4, 6], ** Processing line: ~ G: [ 4, 7],~ - Inside source: true *** True Line Result G: [ 4, 7], ** Processing line: ~ H: [ 4, 8],~ - Inside source: true *** True Line Result H: [ 4, 8], ** Processing line: ~ I: [ 4, 9],~ - Inside source: true *** True Line Result I: [ 4, 9], ** Processing line: ~ J: [ 4, 10],~ - Inside source: true *** True Line Result J: [ 4, 10], ** Processing line: ~ K: [ 4, 11],~ - Inside source: true *** True Line Result K: [ 4, 11], ** Processing line: ~ L: [ 4, 12],~ - Inside source: true *** True Line Result L: [ 4, 12], ** Processing line: ~ M: [ 4, 13],~ - Inside source: true *** True Line Result M: [ 4, 13], ** Processing line: ~ N: [ 4, 14],~ - Inside source: true *** True Line Result N: [ 4, 14], ** Processing line: ~ O: [ 4, 15],~ - Inside source: true *** True Line Result O: [ 4, 15], ** Processing line: ~ P: [ 5, 0],~ - Inside source: true *** True Line Result P: [ 5, 0], ** Processing line: ~ Q: [ 5, 1],~ - Inside source: true *** True Line Result Q: [ 5, 1], ** Processing line: ~ R: [ 5, 2],~ - Inside source: true *** True Line Result R: [ 5, 2], ** Processing line: ~ S: [ 5, 3],~ - Inside source: true *** True Line Result S: [ 5, 3], ** Processing line: ~ T: [ 5, 4],~ - Inside source: true *** True Line Result T: [ 5, 4], ** Processing line: ~ U: [ 5, 5],~ - Inside source: true *** True Line Result U: [ 5, 5], ** Processing line: ~ V: [ 5, 6],~ - Inside source: true *** True Line Result V: [ 5, 6], ** Processing line: ~ W: [ 5, 7],~ - Inside source: true *** True Line Result W: [ 5, 7], ** Processing line: ~ X: [ 5, 8],~ - Inside source: true *** True Line Result X: [ 5, 8], ** Processing line: ~ Y: [ 5, 9],~ - Inside source: true *** True Line Result Y: [ 5, 9], ** Processing line: ~ Z: [ 5, 10],~ - Inside source: true *** True Line Result Z: [ 5, 10], ** Processing line: ~ a: [ 6, 1],~ - Inside source: true *** True Line Result a: [ 6, 1], ** Processing line: ~ b: [ 6, 2],~ - Inside source: true *** True Line Result b: [ 6, 2], ** Processing line: ~ c: [ 6, 3],~ - Inside source: true *** True Line Result c: [ 6, 3], ** Processing line: ~ d: [ 6, 4],~ - Inside source: true *** True Line Result d: [ 6, 4], ** Processing line: ~ e: [ 6, 5],~ - Inside source: true *** True Line Result e: [ 6, 5], ** Processing line: ~ f: [ 6, 6],~ - Inside source: true *** True Line Result f: [ 6, 6], ** Processing line: ~ g: [ 6, 7],~ - Inside source: true *** True Line Result g: [ 6, 7], ** Processing line: ~ h: [ 6, 8],~ - Inside source: true *** True Line Result h: [ 6, 8], ** Processing line: ~ i: [ 6, 9],~ - Inside source: true *** True Line Result i: [ 6, 9], ** Processing line: ~ j: [ 6, 10],~ - Inside source: true *** True Line Result j: [ 6, 10], ** Processing line: ~ k: [ 6, 11],~ - Inside source: true *** True Line Result k: [ 6, 11], ** Processing line: ~ l: [ 6, 12],~ - Inside source: true *** True Line Result l: [ 6, 12], ** Processing line: ~ m: [ 6, 13],~ - Inside source: true *** True Line Result m: [ 6, 13], ** Processing line: ~ n: [ 6, 14],~ - Inside source: true *** True Line Result n: [ 6, 14], ** Processing line: ~ o: [ 6, 15],~ - Inside source: true *** True Line Result o: [ 6, 15], ** Processing line: ~ p: [ 7, 0],~ - Inside source: true *** True Line Result p: [ 7, 0], ** Processing line: ~ q: [ 7, 1],~ - Inside source: true *** True Line Result q: [ 7, 1], ** Processing line: ~ r: [ 7, 2],~ - Inside source: true *** True Line Result r: [ 7, 2], ** Processing line: ~ s: [ 7, 3],~ - Inside source: true *** True Line Result s: [ 7, 3], ** Processing line: ~ t: [ 7, 4],~ - Inside source: true *** True Line Result t: [ 7, 4], ** Processing line: ~ u: [ 7, 5],~ - Inside source: true *** True Line Result u: [ 7, 5], ** Processing line: ~ v: [ 7, 6],~ - Inside source: true *** True Line Result v: [ 7, 6], ** Processing line: ~ w: [ 7, 7],~ - Inside source: true *** True Line Result w: [ 7, 7], ** Processing line: ~ x: [ 7, 8],~ - Inside source: true *** True Line Result x: [ 7, 8], ** Processing line: ~ y: [ 7, 9],~ - Inside source: true *** True Line Result y: [ 7, 9], ** Processing line: ~ z: [ 7, 10],~ - Inside source: true *** True Line Result z: [ 7, 10], ** Processing line: ~ '|' => [ 7, 12]~ - Inside source: true *** True Line Result '|' => [ 7, 12] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def sprite key~ - Inside source: true *** True Line Result def sprite key ** Processing line: ~ $gtk.args.state.reserved.sprite_lookup[key]~ - Inside source: true *** True Line Result $gtk.args.state.reserved.sprite_lookup[key] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def member_name_as_code raw_member_name~ - Inside source: true *** True Line Result def member_name_as_code raw_member_name ** Processing line: ~ if raw_member_name.is_a? Symbol~ - Inside source: true *** True Line Result if raw_member_name.is_a? Symbol ** Processing line: ~ ":#{raw_member_name}"~ - Inside source: true *** True Line Result ":#{raw_member_name}" ** Processing line: ~ elsif raw_member_name.is_a? String~ - Inside source: true *** True Line Result elsif raw_member_name.is_a? String ** Processing line: ~ "'#{raw_member_name}'"~ - Inside source: true *** True Line Result "'#{raw_member_name}'" ** Processing line: ~ elsif raw_member_name.is_a? Fixnum~ - Inside source: true *** True Line Result elsif raw_member_name.is_a? Fixnum ** Processing line: ~ "#{raw_member_name}"~ - Inside source: true *** True Line Result "#{raw_member_name}" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ "UNKNOWN: #{raw_member_name}"~ - Inside source: true *** True Line Result "UNKNOWN: #{raw_member_name}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tile x, y, tile_row_column_or_key~ - Inside source: true *** True Line Result def tile x, y, tile_row_column_or_key ** Processing line: ~ tile_extended x, y, DESTINATION_TILE_SIZE, DESTINATION_TILE_SIZE, TILE_R, TILE_G, TILE_B, TILE_A, tile_row_column_or_key~ - Inside source: true *** True Line Result tile_extended x, y, DESTINATION_TILE_SIZE, DESTINATION_TILE_SIZE, TILE_R, TILE_G, TILE_B, TILE_A, tile_row_column_or_key ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tile_extended x, y, w, h, r, g, b, a, tile_row_column_or_key~ - Inside source: true *** True Line Result def tile_extended x, y, w, h, r, g, b, a, tile_row_column_or_key ** Processing line: ~ row_or_key, column = tile_row_column_or_key~ - Inside source: true *** True Line Result row_or_key, column = tile_row_column_or_key ** Processing line: ~ if !column~ - Inside source: true *** True Line Result if !column ** Processing line: ~ row, column = sprite row_or_key~ - Inside source: true *** True Line Result row, column = sprite row_or_key ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ row, column = row_or_key, column~ - Inside source: true *** True Line Result row, column = row_or_key, column ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !row~ - Inside source: true *** True Line Result if !row ** Processing line: ~ member_name = member_name_as_code tile_row_column_or_key~ - Inside source: true *** True Line Result member_name = member_name_as_code tile_row_column_or_key ** Processing line: ~ raise "Unabled to find a sprite for #{member_name}. Make sure the value exists in app/sprite_lookup.rb."~ - Inside source: true *** True Line Result raise "Unabled to find a sprite for #{member_name}. Make sure the value exists in app/sprite_lookup.rb." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sprite provided by Rogue Yun~ - Inside source: true *** True Line Result # Sprite provided by Rogue Yun ** Processing line: ~ # http://www.bay12forums.com/smf/index.php?topic=144897.0~ - Inside source: true *** True Line Result # http://www.bay12forums.com/smf/index.php?topic=144897.0 ** Processing line: ~ # License: Public Domain~ - Inside source: true *** True Line Result # License: Public Domain ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: x,~ - Inside source: true *** True Line Result x: x, ** Processing line: ~ y: y,~ - Inside source: true *** True Line Result y: y, ** Processing line: ~ w: w,~ - Inside source: true *** True Line Result w: w, ** Processing line: ~ h: h,~ - Inside source: true *** True Line Result h: h, ** Processing line: ~ tile_x: column * 16,~ - Inside source: true *** True Line Result tile_x: column * 16, ** Processing line: ~ tile_y: (row * 16),~ - Inside source: true *** True Line Result tile_y: (row * 16), ** Processing line: ~ tile_w: 16,~ - Inside source: true *** True Line Result tile_w: 16, ** Processing line: ~ tile_h: 16,~ - Inside source: true *** True Line Result tile_h: 16, ** Processing line: ~ r: r,~ - Inside source: true *** True Line Result r: r, ** Processing line: ~ g: g,~ - Inside source: true *** True Line Result g: g, ** Processing line: ~ b: b,~ - Inside source: true *** True Line Result b: b, ** Processing line: ~ a: a,~ - Inside source: true *** True Line Result a: a, ** Processing line: ~ path: 'sprites/simple-mood-16x16.png'~ - Inside source: true *** True Line Result path: 'sprites/simple-mood-16x16.png' ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.args.state.reserved.sprite_lookup = sprite_lookup~ - Inside source: true *** True Line Result $gtk.args.state.reserved.sprite_lookup = sprite_lookup ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Roguelike - Roguelike Line Of Sight - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Roguelike - Roguelike Line Of Sight - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_roguelike/02_roguelike_line_of_sight/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_roguelike/02_roguelike_line_of_sight/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - lambda: A way to define a block and its parameters with special syntax.~ - Inside source: true *** True Line Result - lambda: A way to define a block and its parameters with special syntax. ** Processing line: ~ For example, the syntax of lambda looks like this:~ - Inside source: true *** True Line Result For example, the syntax of lambda looks like this: ** Processing line: ~ my_lambda = -> { puts "This is my lambda" }~ - Inside source: true *** True Line Result my_lambda = -> { puts "This is my lambda" } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ - Inside source: true *** True Line Result - args.outputs.labels: An array. The values generate a label. ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.~ - Inside source: true *** True Line Result For more information about labels, go to mygame/documentation/02-labels. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - ARRAY#inside_rect?: Returns whether or not the point is inside a rect.~ - Inside source: true *** True Line Result - ARRAY#inside_rect?: Returns whether or not the point is inside a rect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - product: Returns an array of all combinations of elements from all arrays.~ - Inside source: true *** True Line Result - product: Returns an array of all combinations of elements from all arrays. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - find: Finds all elements of a collection that meet requirements.~ - Inside source: true *** True Line Result - find: Finds all elements of a collection that meet requirements. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - abs: Returns the absolute value.~ - Inside source: true *** True Line Result - abs: Returns the absolute value. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This sample app allows the player to move around in the dungeon, which becomes more or less visible~ - Inside source: true *** True Line Result # This sample app allows the player to move around in the dungeon, which becomes more or less visible ** Processing line: ~ # depending on the player's location, and also has enemies.~ - Inside source: true *** True Line Result # depending on the player's location, and also has enemies. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Game~ - Inside source: true *** True Line Result class Game ** Processing line: ~ attr_accessor :args, :state, :inputs, :outputs, :grid~ - Inside source: true *** True Line Result attr_accessor :args, :state, :inputs, :outputs, :grid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls all the methods needed for the game to run properly.~ - Inside source: true *** True Line Result # Calls all the methods needed for the game to run properly. ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render_canvas~ - Inside source: true *** True Line Result render_canvas ** Processing line: ~ render_dungeon~ - Inside source: true *** True Line Result render_dungeon ** Processing line: ~ render_player~ - Inside source: true *** True Line Result render_player ** Processing line: ~ render_enemies~ - Inside source: true *** True Line Result render_enemies ** Processing line: ~ print_cell_coordinates~ - Inside source: true *** True Line Result print_cell_coordinates ** Processing line: ~ calc_canvas~ - Inside source: true *** True Line Result calc_canvas ** Processing line: ~ input_move~ - Inside source: true *** True Line Result input_move ** Processing line: ~ input_click_map~ - Inside source: true *** True Line Result input_click_map ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets default values and initializes variables~ - Inside source: true *** True Line Result # Sets default values and initializes variables ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ outputs.background_color = [0, 0, 0] # black background~ - Inside source: true *** True Line Result outputs.background_color = [0, 0, 0] # black background ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Initializes empty canvas, dungeon, and enemies collections.~ - Inside source: true *** True Line Result # Initializes empty canvas, dungeon, and enemies collections. ** Processing line: ~ state.canvas ||= []~ - Inside source: true *** True Line Result state.canvas ||= [] ** Processing line: ~ state.dungeon ||= []~ - Inside source: true *** True Line Result state.dungeon ||= [] ** Processing line: ~ state.enemies ||= []~ - Inside source: true *** True Line Result state.enemies ||= [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If state.area doesn't have value, load_area_one and derive_dungeon_from_area methods are called~ - Inside source: true *** True Line Result # If state.area doesn't have value, load_area_one and derive_dungeon_from_area methods are called ** Processing line: ~ if !state.area~ - Inside source: true *** True Line Result if !state.area ** Processing line: ~ load_area_one~ - Inside source: true *** True Line Result load_area_one ** Processing line: ~ derive_dungeon_from_area~ - Inside source: true *** True Line Result derive_dungeon_from_area ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Changing these values will change the position of player~ - Inside source: true *** True Line Result # Changing these values will change the position of player ** Processing line: ~ state.x = 7~ - Inside source: true *** True Line Result state.x = 7 ** Processing line: ~ state.y = 5~ - Inside source: true *** True Line Result state.y = 5 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates new enemies, sets their values, and adds them to the enemies collection.~ - Inside source: true *** True Line Result # Creates new enemies, sets their values, and adds them to the enemies collection. ** Processing line: ~ state.enemies << state.new_entity(:enemy) do |e| # declares each enemy as new entity~ - Inside source: true *** True Line Result state.enemies << state.new_entity(:enemy) do |e| # declares each enemy as new entity ** Processing line: ~ e.x = 13 # position~ - Inside source: true *** True Line Result e.x = 13 # position ** Processing line: ~ e.y = 5~ - Inside source: true *** True Line Result e.y = 5 ** Processing line: ~ e.previous_hp = 3~ - Inside source: true *** True Line Result e.previous_hp = 3 ** Processing line: ~ e.hp = 3~ - Inside source: true *** True Line Result e.hp = 3 ** Processing line: ~ e.max_hp = 3~ - Inside source: true *** True Line Result e.max_hp = 3 ** Processing line: ~ e.is_dead = false # the enemy is alive~ - Inside source: true *** True Line Result e.is_dead = false # the enemy is alive ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ update_line_of_sight # updates line of sight by adding newly visible cells~ - Inside source: true *** True Line Result update_line_of_sight # updates line of sight by adding newly visible cells ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds elements into the state.area collection~ - Inside source: true *** True Line Result # Adds elements into the state.area collection ** Processing line: ~ # The dungeon is derived using the coordinates of this collection~ - Inside source: true *** True Line Result # The dungeon is derived using the coordinates of this collection ** Processing line: ~ def load_area_one~ - Inside source: true *** True Line Result def load_area_one ** Processing line: ~ state.area ||= []~ - Inside source: true *** True Line Result state.area ||= [] ** Processing line: ~ state.area << [8, 6]~ - Inside source: true *** True Line Result state.area << [8, 6] ** Processing line: ~ state.area << [7, 6]~ - Inside source: true *** True Line Result state.area << [7, 6] ** Processing line: ~ state.area << [7, 7]~ - Inside source: true *** True Line Result state.area << [7, 7] ** Processing line: ~ state.area << [8, 9]~ - Inside source: true *** True Line Result state.area << [8, 9] ** Processing line: ~ state.area << [7, 8]~ - Inside source: true *** True Line Result state.area << [7, 8] ** Processing line: ~ state.area << [7, 9]~ - Inside source: true *** True Line Result state.area << [7, 9] ** Processing line: ~ state.area << [6, 4]~ - Inside source: true *** True Line Result state.area << [6, 4] ** Processing line: ~ state.area << [7, 3]~ - Inside source: true *** True Line Result state.area << [7, 3] ** Processing line: ~ state.area << [7, 4]~ - Inside source: true *** True Line Result state.area << [7, 4] ** Processing line: ~ state.area << [6, 5]~ - Inside source: true *** True Line Result state.area << [6, 5] ** Processing line: ~ state.area << [7, 5]~ - Inside source: true *** True Line Result state.area << [7, 5] ** Processing line: ~ state.area << [8, 5]~ - Inside source: true *** True Line Result state.area << [8, 5] ** Processing line: ~ state.area << [8, 4]~ - Inside source: true *** True Line Result state.area << [8, 4] ** Processing line: ~ state.area << [1, 1]~ - Inside source: true *** True Line Result state.area << [1, 1] ** Processing line: ~ state.area << [0, 1]~ - Inside source: true *** True Line Result state.area << [0, 1] ** Processing line: ~ state.area << [0, 2]~ - Inside source: true *** True Line Result state.area << [0, 2] ** Processing line: ~ state.area << [1, 2]~ - Inside source: true *** True Line Result state.area << [1, 2] ** Processing line: ~ state.area << [2, 2]~ - Inside source: true *** True Line Result state.area << [2, 2] ** Processing line: ~ state.area << [2, 1]~ - Inside source: true *** True Line Result state.area << [2, 1] ** Processing line: ~ state.area << [2, 3]~ - Inside source: true *** True Line Result state.area << [2, 3] ** Processing line: ~ state.area << [1, 3]~ - Inside source: true *** True Line Result state.area << [1, 3] ** Processing line: ~ state.area << [1, 4]~ - Inside source: true *** True Line Result state.area << [1, 4] ** Processing line: ~ state.area << [2, 4]~ - Inside source: true *** True Line Result state.area << [2, 4] ** Processing line: ~ state.area << [2, 5]~ - Inside source: true *** True Line Result state.area << [2, 5] ** Processing line: ~ state.area << [1, 5]~ - Inside source: true *** True Line Result state.area << [1, 5] ** Processing line: ~ state.area << [2, 6]~ - Inside source: true *** True Line Result state.area << [2, 6] ** Processing line: ~ state.area << [3, 6]~ - Inside source: true *** True Line Result state.area << [3, 6] ** Processing line: ~ state.area << [4, 6]~ - Inside source: true *** True Line Result state.area << [4, 6] ** Processing line: ~ state.area << [4, 7]~ - Inside source: true *** True Line Result state.area << [4, 7] ** Processing line: ~ state.area << [4, 8]~ - Inside source: true *** True Line Result state.area << [4, 8] ** Processing line: ~ state.area << [5, 8]~ - Inside source: true *** True Line Result state.area << [5, 8] ** Processing line: ~ state.area << [5, 9]~ - Inside source: true *** True Line Result state.area << [5, 9] ** Processing line: ~ state.area << [6, 9]~ - Inside source: true *** True Line Result state.area << [6, 9] ** Processing line: ~ state.area << [7, 10]~ - Inside source: true *** True Line Result state.area << [7, 10] ** Processing line: ~ state.area << [7, 11]~ - Inside source: true *** True Line Result state.area << [7, 11] ** Processing line: ~ state.area << [7, 12]~ - Inside source: true *** True Line Result state.area << [7, 12] ** Processing line: ~ state.area << [7, 12]~ - Inside source: true *** True Line Result state.area << [7, 12] ** Processing line: ~ state.area << [7, 13]~ - Inside source: true *** True Line Result state.area << [7, 13] ** Processing line: ~ state.area << [8, 13]~ - Inside source: true *** True Line Result state.area << [8, 13] ** Processing line: ~ state.area << [9, 13]~ - Inside source: true *** True Line Result state.area << [9, 13] ** Processing line: ~ state.area << [10, 13]~ - Inside source: true *** True Line Result state.area << [10, 13] ** Processing line: ~ state.area << [11, 13]~ - Inside source: true *** True Line Result state.area << [11, 13] ** Processing line: ~ state.area << [12, 13]~ - Inside source: true *** True Line Result state.area << [12, 13] ** Processing line: ~ state.area << [12, 12]~ - Inside source: true *** True Line Result state.area << [12, 12] ** Processing line: ~ state.area << [8, 12]~ - Inside source: true *** True Line Result state.area << [8, 12] ** Processing line: ~ state.area << [9, 12]~ - Inside source: true *** True Line Result state.area << [9, 12] ** Processing line: ~ state.area << [10, 12]~ - Inside source: true *** True Line Result state.area << [10, 12] ** Processing line: ~ state.area << [11, 12]~ - Inside source: true *** True Line Result state.area << [11, 12] ** Processing line: ~ state.area << [12, 11]~ - Inside source: true *** True Line Result state.area << [12, 11] ** Processing line: ~ state.area << [13, 11]~ - Inside source: true *** True Line Result state.area << [13, 11] ** Processing line: ~ state.area << [13, 10]~ - Inside source: true *** True Line Result state.area << [13, 10] ** Processing line: ~ state.area << [13, 9]~ - Inside source: true *** True Line Result state.area << [13, 9] ** Processing line: ~ state.area << [13, 8]~ - Inside source: true *** True Line Result state.area << [13, 8] ** Processing line: ~ state.area << [13, 7]~ - Inside source: true *** True Line Result state.area << [13, 7] ** Processing line: ~ state.area << [13, 6]~ - Inside source: true *** True Line Result state.area << [13, 6] ** Processing line: ~ state.area << [12, 6]~ - Inside source: true *** True Line Result state.area << [12, 6] ** Processing line: ~ state.area << [14, 6]~ - Inside source: true *** True Line Result state.area << [14, 6] ** Processing line: ~ state.area << [14, 5]~ - Inside source: true *** True Line Result state.area << [14, 5] ** Processing line: ~ state.area << [13, 5]~ - Inside source: true *** True Line Result state.area << [13, 5] ** Processing line: ~ state.area << [12, 5]~ - Inside source: true *** True Line Result state.area << [12, 5] ** Processing line: ~ state.area << [12, 4]~ - Inside source: true *** True Line Result state.area << [12, 4] ** Processing line: ~ state.area << [13, 4]~ - Inside source: true *** True Line Result state.area << [13, 4] ** Processing line: ~ state.area << [14, 4]~ - Inside source: true *** True Line Result state.area << [14, 4] ** Processing line: ~ state.area << [1, 6]~ - Inside source: true *** True Line Result state.area << [1, 6] ** Processing line: ~ state.area << [6, 6]~ - Inside source: true *** True Line Result state.area << [6, 6] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Starts with an empty dungeon collection, and adds dungeon cells into it.~ - Inside source: true *** True Line Result # Starts with an empty dungeon collection, and adds dungeon cells into it. ** Processing line: ~ def derive_dungeon_from_area~ - Inside source: true *** True Line Result def derive_dungeon_from_area ** Processing line: ~ state.dungeon = [] # starts as empty collection~ - Inside source: true *** True Line Result state.dungeon = [] # starts as empty collection ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.area.each do |a| # for each element of the area collection~ - Inside source: true *** True Line Result state.area.each do |a| # for each element of the area collection ** Processing line: ~ state.dungeon << state.new_entity(:dungeon_cell) do |d| # declares each dungeon cell as new entity~ - Inside source: true *** True Line Result state.dungeon << state.new_entity(:dungeon_cell) do |d| # declares each dungeon cell as new entity ** Processing line: ~ d.x = a.x # dungeon cell position using coordinates from area~ - Inside source: true *** True Line Result d.x = a.x # dungeon cell position using coordinates from area ** Processing line: ~ d.y = a.y~ - Inside source: true *** True Line Result d.y = a.y ** Processing line: ~ d.is_visible = false # cell is not visible~ - Inside source: true *** True Line Result d.is_visible = false # cell is not visible ** Processing line: ~ d.alpha = 0 # not transparent at all~ - Inside source: true *** True Line Result d.alpha = 0 # not transparent at all ** Processing line: ~ d.border = [left_margin + a.x * grid_size,~ - Inside source: true *** True Line Result d.border = [left_margin + a.x * grid_size, ** Processing line: ~ bottom_margin + a.y * grid_size,~ - Inside source: true *** True Line Result bottom_margin + a.y * grid_size, ** Processing line: ~ grid_size,~ - Inside source: true *** True Line Result grid_size, ** Processing line: ~ grid_size,~ - Inside source: true *** True Line Result grid_size, ** Processing line: ~ *blue,~ - Inside source: true *** True Line Result *blue, ** Processing line: ~ 255] # sets border definition for dungeon cell~ - Inside source: true *** True Line Result 255] # sets border definition for dungeon cell ** Processing line: ~ d # returns dungeon cell~ - Inside source: true *** True Line Result d # returns dungeon cell ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def left_margin~ - Inside source: true *** True Line Result def left_margin ** Processing line: ~ 40 # sets left margin~ - Inside source: true *** True Line Result 40 # sets left margin ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bottom_margin~ - Inside source: true *** True Line Result def bottom_margin ** Processing line: ~ 60 # sets bottom margin~ - Inside source: true *** True Line Result 60 # sets bottom margin ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def grid_size~ - Inside source: true *** True Line Result def grid_size ** Processing line: ~ 40 # sets size of grid square~ - Inside source: true *** True Line Result 40 # sets size of grid square ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Updates the line of sight by calling the thick_line_of_sight method and~ - Inside source: true *** True Line Result # Updates the line of sight by calling the thick_line_of_sight method and ** Processing line: ~ # adding dungeon cells to the newly_visible collection~ - Inside source: true *** True Line Result # adding dungeon cells to the newly_visible collection ** Processing line: ~ def update_line_of_sight~ - Inside source: true *** True Line Result def update_line_of_sight ** Processing line: ~ variations = [-1, 0, 1]~ - Inside source: true *** True Line Result variations = [-1, 0, 1] ** Processing line: ~ # creates collection of newly visible dungeon cells~ - Inside source: true *** True Line Result # creates collection of newly visible dungeon cells ** Processing line: ~ newly_visible = variations.product(variations).flat_map do |rise, run| # combo of all elements~ - Inside source: true *** True Line Result newly_visible = variations.product(variations).flat_map do |rise, run| # combo of all elements ** Processing line: ~ thick_line_of_sight state.x, state.y, rise, run, 15, # calls thick_line_of_sight method~ - Inside source: true *** True Line Result thick_line_of_sight state.x, state.y, rise, run, 15, # calls thick_line_of_sight method ** Processing line: ~ lambda { |x, y| dungeon_cell_exists? x, y } # checks whether or not cell exists~ - Inside source: true *** True Line Result lambda { |x, y| dungeon_cell_exists? x, y } # checks whether or not cell exists ** Processing line: ~ end.uniq# removes duplicates~ - Inside source: true *** True Line Result end.uniq# removes duplicates ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.dungeon.each do |d| # perform action on each element of dungeons collection~ - Inside source: true *** True Line Result state.dungeon.each do |d| # perform action on each element of dungeons collection ** Processing line: ~ d.is_visible = newly_visible.find { |v| v.x == d.x && v.y == d.y } # finds match inside newly_visible collection~ - Inside source: true *** True Line Result d.is_visible = newly_visible.find { |v| v.x == d.x && v.y == d.y } # finds match inside newly_visible collection ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Returns a boolean value~ - Inside source: true *** True Line Result #Returns a boolean value ** Processing line: ~ def dungeon_cell_exists? x, y~ - Inside source: true *** True Line Result def dungeon_cell_exists? x, y ** Processing line: ~ # Finds cell coordinates inside dungeon collection to determine if dungeon cell exists~ - Inside source: true *** True Line Result # Finds cell coordinates inside dungeon collection to determine if dungeon cell exists ** Processing line: ~ state.dungeon.find { |d| d.x == x && d.y == y }~ - Inside source: true *** True Line Result state.dungeon.find { |d| d.x == x && d.y == y } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Calls line_of_sight method to add elements to result collection~ - Inside source: true *** True Line Result # Calls line_of_sight method to add elements to result collection ** Processing line: ~ def thick_line_of_sight start_x, start_y, rise, run, distance, cell_exists_lambda~ - Inside source: true *** True Line Result def thick_line_of_sight start_x, start_y, rise, run, distance, cell_exists_lambda ** Processing line: ~ result = []~ - Inside source: true *** True Line Result result = [] ** Processing line: ~ result += line_of_sight start_x, start_y, rise, run, distance, cell_exists_lambda~ - Inside source: true *** True Line Result result += line_of_sight start_x, start_y, rise, run, distance, cell_exists_lambda ** Processing line: ~ result += line_of_sight start_x - 1, start_y, rise, run, distance, cell_exists_lambda # one left~ - Inside source: true *** True Line Result result += line_of_sight start_x - 1, start_y, rise, run, distance, cell_exists_lambda # one left ** Processing line: ~ result += line_of_sight start_x + 1, start_y, rise, run, distance, cell_exists_lambda # one right~ - Inside source: true *** True Line Result result += line_of_sight start_x + 1, start_y, rise, run, distance, cell_exists_lambda # one right ** Processing line: ~ result~ - Inside source: true *** True Line Result result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds points to the result collection to create the player's line of sight~ - Inside source: true *** True Line Result # Adds points to the result collection to create the player's line of sight ** Processing line: ~ def line_of_sight start_x, start_y, rise, run, distance, cell_exists_lambda~ - Inside source: true *** True Line Result def line_of_sight start_x, start_y, rise, run, distance, cell_exists_lambda ** Processing line: ~ result = [] # starts as empty collection~ - Inside source: true *** True Line Result result = [] # starts as empty collection ** Processing line: ~ points = points_on_line start_x, start_y, rise, run, distance # calls points_on_line method~ - Inside source: true *** True Line Result points = points_on_line start_x, start_y, rise, run, distance # calls points_on_line method ** Processing line: ~ points.each do |p| # for each point in collection~ - Inside source: true *** True Line Result points.each do |p| # for each point in collection ** Processing line: ~ if cell_exists_lambda.call(p.x, p.y) # if the cell exists~ - Inside source: true *** True Line Result if cell_exists_lambda.call(p.x, p.y) # if the cell exists ** Processing line: ~ result << p # add it to result collection~ - Inside source: true *** True Line Result result << p # add it to result collection ** Processing line: ~ else # if cell does not exist~ - Inside source: true *** True Line Result else # if cell does not exist ** Processing line: ~ return result # return result collection as it is~ - Inside source: true *** True Line Result return result # return result collection as it is ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result # return result collection~ - Inside source: true *** True Line Result result # return result collection ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Finds the coordinates of the points on the line by performing calculations~ - Inside source: true *** True Line Result # Finds the coordinates of the points on the line by performing calculations ** Processing line: ~ def points_on_line start_x, start_y, rise, run, distance~ - Inside source: true *** True Line Result def points_on_line start_x, start_y, rise, run, distance ** Processing line: ~ distance.times.map do |i| # perform an action~ - Inside source: true *** True Line Result distance.times.map do |i| # perform an action ** Processing line: ~ [start_x + run * i, start_y + rise * i] # definition of point~ - Inside source: true *** True Line Result [start_x + run * i, start_y + rise * i] # definition of point ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_canvas~ - Inside source: true *** True Line Result def render_canvas ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ outputs.borders << state.canvas.map do |c| # on each element of canvas collection~ - Inside source: true *** True Line Result outputs.borders << state.canvas.map do |c| # on each element of canvas collection ** Processing line: ~ c.border # outputs border~ - Inside source: true *** True Line Result c.border # outputs border ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs the dungeon cells.~ - Inside source: true *** True Line Result # Outputs the dungeon cells. ** Processing line: ~ def render_dungeon~ - Inside source: true *** True Line Result def render_dungeon ** Processing line: ~ outputs.solids << [0, 0, grid.w, grid.h] # outputs black background for grid~ - Inside source: true *** True Line Result outputs.solids << [0, 0, grid.w, grid.h] # outputs black background for grid ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the alpha value (opacity) for each dungeon cell and calls the cell_border method.~ - Inside source: true *** True Line Result # Sets the alpha value (opacity) for each dungeon cell and calls the cell_border method. ** Processing line: ~ outputs.borders << state.dungeon.map do |d| # for each element in dungeon collection~ - Inside source: true *** True Line Result outputs.borders << state.dungeon.map do |d| # for each element in dungeon collection ** Processing line: ~ d.alpha += if d.is_visible # if cell is visible~ - Inside source: true *** True Line Result d.alpha += if d.is_visible # if cell is visible ** Processing line: ~ 255.fdiv(30) # increment opacity (transparency)~ - Inside source: true *** True Line Result 255.fdiv(30) # increment opacity (transparency) ** Processing line: ~ else # if cell is not visible~ - Inside source: true *** True Line Result else # if cell is not visible ** Processing line: ~ 255.fdiv(600) * -1 # decrease opacity~ - Inside source: true *** True Line Result 255.fdiv(600) * -1 # decrease opacity ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ d.alpha = d.alpha.cap_min_max(0, 255)~ - Inside source: true *** True Line Result d.alpha = d.alpha.cap_min_max(0, 255) ** Processing line: ~ cell_border d.x, d.y, [*blue, d.alpha] # sets blue border using alpha value~ - Inside source: true *** True Line Result cell_border d.x, d.y, [*blue, d.alpha] # sets blue border using alpha value ** Processing line: ~ end.reject_nil~ - Inside source: true *** True Line Result end.reject_nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets definition of a cell border using the parameters~ - Inside source: true *** True Line Result # Sets definition of a cell border using the parameters ** Processing line: ~ def cell_border x, y, color = nil~ - Inside source: true *** True Line Result def cell_border x, y, color = nil ** Processing line: ~ [left_margin + x * grid_size,~ - Inside source: true *** True Line Result [left_margin + x * grid_size, ** Processing line: ~ bottom_margin + y * grid_size,~ - Inside source: true *** True Line Result bottom_margin + y * grid_size, ** Processing line: ~ grid_size,~ - Inside source: true *** True Line Result grid_size, ** Processing line: ~ grid_size,~ - Inside source: true *** True Line Result grid_size, ** Processing line: ~ *color]~ - Inside source: true *** True Line Result *color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the values for the player and outputs it as a label~ - Inside source: true *** True Line Result # Sets the values for the player and outputs it as a label ** Processing line: ~ def render_player~ - Inside source: true *** True Line Result def render_player ** Processing line: ~ outputs.labels << [grid_x(state.x) + 20, # positions "@" text in center of grid square~ - Inside source: true *** True Line Result outputs.labels << [grid_x(state.x) + 20, # positions "@" text in center of grid square ** Processing line: ~ grid_y(state.y) + 35,~ - Inside source: true *** True Line Result grid_y(state.y) + 35, ** Processing line: ~ "@", # player is represented by a white "@" character~ - Inside source: true *** True Line Result "@", # player is represented by a white "@" character ** Processing line: ~ 1, 1, *white]~ - Inside source: true *** True Line Result 1, 1, *white] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def grid_x x~ - Inside source: true *** True Line Result def grid_x x ** Processing line: ~ left_margin + x * grid_size # positions horizontally on grid~ - Inside source: true *** True Line Result left_margin + x * grid_size # positions horizontally on grid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def grid_y y~ - Inside source: true *** True Line Result def grid_y y ** Processing line: ~ bottom_margin + y * grid_size # positions vertically on grid~ - Inside source: true *** True Line Result bottom_margin + y * grid_size # positions vertically on grid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs enemies onto the screen.~ - Inside source: true *** True Line Result # Outputs enemies onto the screen. ** Processing line: ~ def render_enemies~ - Inside source: true *** True Line Result def render_enemies ** Processing line: ~ state.enemies.map do |e| # for each enemy in the collection~ - Inside source: true *** True Line Result state.enemies.map do |e| # for each enemy in the collection ** Processing line: ~ alpha = 255 # set opacity (full transparency)~ - Inside source: true *** True Line Result alpha = 255 # set opacity (full transparency) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Outputs an enemy using a label.~ - Inside source: true *** True Line Result # Outputs an enemy using a label. ** Processing line: ~ outputs.labels << [~ - Inside source: true *** True Line Result outputs.labels << [ ** Processing line: ~ left_margin + 20 + e.x * grid_size, # positions enemy's "r" text in center of grid square~ - Inside source: true *** True Line Result left_margin + 20 + e.x * grid_size, # positions enemy's "r" text in center of grid square ** Processing line: ~ bottom_margin + 35 + e.y * grid_size,~ - Inside source: true *** True Line Result bottom_margin + 35 + e.y * grid_size, ** Processing line: ~ "r", # enemy's text~ - Inside source: true *** True Line Result "r", # enemy's text ** Processing line: ~ 1, 1, *white, alpha]~ - Inside source: true *** True Line Result 1, 1, *white, alpha] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates a red border around an enemy.~ - Inside source: true *** True Line Result # Creates a red border around an enemy. ** Processing line: ~ outputs.borders << [grid_x(e.x), grid_y(e.y), grid_size, grid_size, *red]~ - Inside source: true *** True Line Result outputs.borders << [grid_x(e.x), grid_y(e.y), grid_size, grid_size, *red] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #White labels are output for the cell coordinates of each element in the dungeon collection.~ - Inside source: true *** True Line Result #White labels are output for the cell coordinates of each element in the dungeon collection. ** Processing line: ~ def print_cell_coordinates~ - Inside source: true *** True Line Result def print_cell_coordinates ** Processing line: ~ return unless state.debug~ - Inside source: true *** True Line Result return unless state.debug ** Processing line: ~ state.dungeon.each do |d|~ - Inside source: true *** True Line Result state.dungeon.each do |d| ** Processing line: ~ outputs.labels << [grid_x(d.x) + 2,~ - Inside source: true *** True Line Result outputs.labels << [grid_x(d.x) + 2, ** Processing line: ~ grid_y(d.y) - 2,~ - Inside source: true *** True Line Result grid_y(d.y) - 2, ** Processing line: ~ "#{d.x},#{d.y}",~ - Inside source: true *** True Line Result "#{d.x},#{d.y}", ** Processing line: ~ -2, 0, *white]~ - Inside source: true *** True Line Result -2, 0, *white] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds new elements into the canvas collection and sets their values.~ - Inside source: true *** True Line Result # Adds new elements into the canvas collection and sets their values. ** Processing line: ~ def calc_canvas~ - Inside source: true *** True Line Result def calc_canvas ** Processing line: ~ return if state.canvas.length > 0 # return if canvas collection has at least one element~ - Inside source: true *** True Line Result return if state.canvas.length > 0 # return if canvas collection has at least one element ** Processing line: ~ 15.times do |x| # 15 times perform an action~ - Inside source: true *** True Line Result 15.times do |x| # 15 times perform an action ** Processing line: ~ 15.times do |y|~ - Inside source: true *** True Line Result 15.times do |y| ** Processing line: ~ state.canvas << state.new_entity(:canvas) do |c| # declare canvas element as new entity~ - Inside source: true *** True Line Result state.canvas << state.new_entity(:canvas) do |c| # declare canvas element as new entity ** Processing line: ~ c.x = x # set position~ - Inside source: true *** True Line Result c.x = x # set position ** Processing line: ~ c.y = y~ - Inside source: true *** True Line Result c.y = y ** Processing line: ~ c.border = [left_margin + x * grid_size,~ - Inside source: true *** True Line Result c.border = [left_margin + x * grid_size, ** Processing line: ~ bottom_margin + y * grid_size,~ - Inside source: true *** True Line Result bottom_margin + y * grid_size, ** Processing line: ~ grid_size,~ - Inside source: true *** True Line Result grid_size, ** Processing line: ~ grid_size,~ - Inside source: true *** True Line Result grid_size, ** Processing line: ~ *white, 30] # sets border definition~ - Inside source: true *** True Line Result *white, 30] # sets border definition ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Updates x and y values of the player, and updates player's line of sight~ - Inside source: true *** True Line Result # Updates x and y values of the player, and updates player's line of sight ** Processing line: ~ def input_move~ - Inside source: true *** True Line Result def input_move ** Processing line: ~ x, y, x_diff, y_diff = input_target_cell~ - Inside source: true *** True Line Result x, y, x_diff, y_diff = input_target_cell ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless dungeon_cell_exists? x, y # player can't move there if a dungeon cell doesn't exist in that location~ - Inside source: true *** True Line Result return unless dungeon_cell_exists? x, y # player can't move there if a dungeon cell doesn't exist in that location ** Processing line: ~ return if enemy_at x, y # player can't move there if there is an enemy in that location~ - Inside source: true *** True Line Result return if enemy_at x, y # player can't move there if there is an enemy in that location ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ state.x += x_diff # increments x by x_diff (so player moves left or right)~ - Inside source: true *** True Line Result state.x += x_diff # increments x by x_diff (so player moves left or right) ** Processing line: ~ state.y += y_diff # same with y and y_diff ( so player moves up or down)~ - Inside source: true *** True Line Result state.y += y_diff # same with y and y_diff ( so player moves up or down) ** Processing line: ~ update_line_of_sight # updates visible cells~ - Inside source: true *** True Line Result update_line_of_sight # updates visible cells ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def enemy_at x, y~ - Inside source: true *** True Line Result def enemy_at x, y ** Processing line: ~ # Finds if coordinates exist in enemies collection and enemy is not dead~ - Inside source: true *** True Line Result # Finds if coordinates exist in enemies collection and enemy is not dead ** Processing line: ~ state.enemies.find { |e| e.x == x && e.y == y && !e.is_dead }~ - Inside source: true *** True Line Result state.enemies.find { |e| e.x == x && e.y == y && !e.is_dead } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #M oves the user based on their keyboard input and sets values for target cell~ - Inside source: true *** True Line Result #M oves the user based on their keyboard input and sets values for target cell ** Processing line: ~ def input_target_cell~ - Inside source: true *** True Line Result def input_target_cell ** Processing line: ~ if inputs.keyboard.key_down.up # if "up" key is in "down" state~ - Inside source: true *** True Line Result if inputs.keyboard.key_down.up # if "up" key is in "down" state ** Processing line: ~ [state.x, state.y + 1, 0, 1] # user moves up~ - Inside source: true *** True Line Result [state.x, state.y + 1, 0, 1] # user moves up ** Processing line: ~ elsif inputs.keyboard.key_down.down # if "down" key is pressed~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_down.down # if "down" key is pressed ** Processing line: ~ [state.x, state.y - 1, 0, -1] # user moves down~ - Inside source: true *** True Line Result [state.x, state.y - 1, 0, -1] # user moves down ** Processing line: ~ elsif inputs.keyboard.key_down.left # if "left" key is pressed~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_down.left # if "left" key is pressed ** Processing line: ~ [state.x - 1, state.y, -1, 0] # user moves left~ - Inside source: true *** True Line Result [state.x - 1, state.y, -1, 0] # user moves left ** Processing line: ~ elsif inputs.keyboard.key_down.right # if "right" key is pressed~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_down.right # if "right" key is pressed ** Processing line: ~ [state.x + 1, state.y, 1, 0] # user moves right~ - Inside source: true *** True Line Result [state.x + 1, state.y, 1, 0] # user moves right ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ nil # otherwise, empty~ - Inside source: true *** True Line Result nil # otherwise, empty ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Goes through the canvas collection to find if the mouse was clicked inside of the borders of an element.~ - Inside source: true *** True Line Result # Goes through the canvas collection to find if the mouse was clicked inside of the borders of an element. ** Processing line: ~ def input_click_map~ - Inside source: true *** True Line Result def input_click_map ** Processing line: ~ return unless inputs.mouse.click # return unless the mouse is clicked~ - Inside source: true *** True Line Result return unless inputs.mouse.click # return unless the mouse is clicked ** Processing line: ~ canvas_entry = state.canvas.find do |c| # find element from canvas collection that meets requirements~ - Inside source: true *** True Line Result canvas_entry = state.canvas.find do |c| # find element from canvas collection that meets requirements ** Processing line: ~ inputs.mouse.click.inside_rect? c.border # find border that mouse was clicked inside of~ - Inside source: true *** True Line Result inputs.mouse.click.inside_rect? c.border # find border that mouse was clicked inside of ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ puts canvas_entry # prints canvas_entry value~ - Inside source: true *** True Line Result puts canvas_entry # prints canvas_entry value ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the definition of a label using the parameters.~ - Inside source: true *** True Line Result # Sets the definition of a label using the parameters. ** Processing line: ~ def label text, x, y, color = nil~ - Inside source: true *** True Line Result def label text, x, y, color = nil ** Processing line: ~ color ||= white # color is initialized to white~ - Inside source: true *** True Line Result color ||= white # color is initialized to white ** Processing line: ~ [x, y, text, 1, 1, *color] # sets label definition~ - Inside source: true *** True Line Result [x, y, text, 1, 1, *color] # sets label definition ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def green~ - Inside source: true *** True Line Result def green ** Processing line: ~ [60, 200, 100] # sets color saturation to shade of green~ - Inside source: true *** True Line Result [60, 200, 100] # sets color saturation to shade of green ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def blue~ - Inside source: true *** True Line Result def blue ** Processing line: ~ [50, 50, 210] # sets color saturation to shade of blue~ - Inside source: true *** True Line Result [50, 50, 210] # sets color saturation to shade of blue ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def white~ - Inside source: true *** True Line Result def white ** Processing line: ~ [255, 255, 255] # sets color saturation to white~ - Inside source: true *** True Line Result [255, 255, 255] # sets color saturation to white ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def red~ - Inside source: true *** True Line Result def red ** Processing line: ~ [230, 80, 80] # sets color saturation to shade of red~ - Inside source: true *** True Line Result [230, 80, 80] # sets color saturation to shade of red ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def orange~ - Inside source: true *** True Line Result def orange ** Processing line: ~ [255, 80, 60] # sets color saturation to shade of orange~ - Inside source: true *** True Line Result [255, 80, 60] # sets color saturation to shade of orange ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def pink~ - Inside source: true *** True Line Result def pink ** Processing line: ~ [255, 0, 200] # sets color saturation to shade of pink~ - Inside source: true *** True Line Result [255, 0, 200] # sets color saturation to shade of pink ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def gray~ - Inside source: true *** True Line Result def gray ** Processing line: ~ [75, 75, 75] # sets color saturation to shade of gray~ - Inside source: true *** True Line Result [75, 75, 75] # sets color saturation to shade of gray ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Recolors the border using the parameters.~ - Inside source: true *** True Line Result # Recolors the border using the parameters. ** Processing line: ~ def recolor_border border, r, g, b~ - Inside source: true *** True Line Result def recolor_border border, r, g, b ** Processing line: ~ border[4] = r~ - Inside source: true *** True Line Result border[4] = r ** Processing line: ~ border[5] = g~ - Inside source: true *** True Line Result border[5] = g ** Processing line: ~ border[6] = b~ - Inside source: true *** True Line Result border[6] = b ** Processing line: ~ border~ - Inside source: true *** True Line Result border ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a boolean value.~ - Inside source: true *** True Line Result # Returns a boolean value. ** Processing line: ~ def visible? cell~ - Inside source: true *** True Line Result def visible? cell ** Processing line: ~ # finds cell's coordinates inside visible_cells collections to determine if cell is visible~ - Inside source: true *** True Line Result # finds cell's coordinates inside visible_cells collections to determine if cell is visible ** Processing line: ~ state.visible_cells.find { |c| c.x == cell.x && c.y == cell.y}~ - Inside source: true *** True Line Result state.visible_cells.find { |c| c.x == cell.x && c.y == cell.y} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Exports dungeon by printing dungeon cell coordinates~ - Inside source: true *** True Line Result # Exports dungeon by printing dungeon cell coordinates ** Processing line: ~ def export_dungeon~ - Inside source: true *** True Line Result def export_dungeon ** Processing line: ~ state.dungeon.each do |d| # on each element of dungeon collection~ - Inside source: true *** True Line Result state.dungeon.each do |d| # on each element of dungeon collection ** Processing line: ~ puts "state.dungeon << [#{d.x}, #{d.y}]" # prints cell coordinates~ - Inside source: true *** True Line Result puts "state.dungeon << [#{d.x}, #{d.y}]" # prints cell coordinates ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def distance_to_cell cell~ - Inside source: true *** True Line Result def distance_to_cell cell ** Processing line: ~ distance_to state.x, cell.x, state.y, cell.y # calls distance_to method~ - Inside source: true *** True Line Result distance_to state.x, cell.x, state.y, cell.y # calls distance_to method ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def distance_to from_x, x, from_y, y~ - Inside source: true *** True Line Result def distance_to from_x, x, from_y, y ** Processing line: ~ (from_x - x).abs + (from_y - y).abs # finds distance between two cells using coordinates~ - Inside source: true *** True Line Result (from_x - x).abs + (from_y - y).abs # finds distance between two cells using coordinates ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $game = Game.new~ - Inside source: true *** True Line Result $game = Game.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $game.args = args~ - Inside source: true *** True Line Result $game.args = args ** Processing line: ~ $game.state = args.state~ - Inside source: true *** True Line Result $game.state = args.state ** Processing line: ~ $game.inputs = args.inputs~ - Inside source: true *** True Line Result $game.inputs = args.inputs ** Processing line: ~ $game.outputs = args.outputs~ - Inside source: true *** True Line Result $game.outputs = args.outputs ** Processing line: ~ $game.grid = args.grid~ - Inside source: true *** True Line Result $game.grid = args.grid ** Processing line: ~ $game.tick~ - Inside source: true *** True Line Result $game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Tactical - Hexagonal Grid - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Tactical - Hexagonal Grid - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_tactical/hexagonal_grid/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_tactical/hexagonal_grid/app/main.rb ** Processing line: ~ class HexagonTileGame~ - Inside source: true *** True Line Result class HexagonTileGame ** Processing line: ~ attr_gtk~ - Inside source: true *** True Line Result attr_gtk ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ state.tile_scale = 1.3~ - Inside source: true *** True Line Result state.tile_scale = 1.3 ** Processing line: ~ state.tile_size = 80~ - Inside source: true *** True Line Result state.tile_size = 80 ** Processing line: ~ state.tile_w = Math.sqrt(3) * state.tile_size.half~ - Inside source: true *** True Line Result state.tile_w = Math.sqrt(3) * state.tile_size.half ** Processing line: ~ state.tile_h = state.tile_size * 3/4~ - Inside source: true *** True Line Result state.tile_h = state.tile_size * 3/4 ** Processing line: ~ state.tiles_x_count = 1280.idiv(state.tile_w) - 1~ - Inside source: true *** True Line Result state.tiles_x_count = 1280.idiv(state.tile_w) - 1 ** Processing line: ~ state.tiles_y_count = 720.idiv(state.tile_h) - 1~ - Inside source: true *** True Line Result state.tiles_y_count = 720.idiv(state.tile_h) - 1 ** Processing line: ~ state.world_width_px = state.tiles_x_count * state.tile_w~ - Inside source: true *** True Line Result state.world_width_px = state.tiles_x_count * state.tile_w ** Processing line: ~ state.world_height_px = state.tiles_y_count * state.tile_h~ - Inside source: true *** True Line Result state.world_height_px = state.tiles_y_count * state.tile_h ** Processing line: ~ state.world_x_offset = (1280 - state.world_width_px).half~ - Inside source: true *** True Line Result state.world_x_offset = (1280 - state.world_width_px).half ** Processing line: ~ state.world_y_offset = (720 - state.world_height_px).half~ - Inside source: true *** True Line Result state.world_y_offset = (720 - state.world_height_px).half ** Processing line: ~ state.tiles ||= state.tiles_x_count.map_with_ys(state.tiles_y_count) do |ordinal_x, ordinal_y|~ - Inside source: true *** True Line Result state.tiles ||= state.tiles_x_count.map_with_ys(state.tiles_y_count) do |ordinal_x, ordinal_y| ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ ordinal_x: ordinal_x,~ - Inside source: true *** True Line Result ordinal_x: ordinal_x, ** Processing line: ~ ordinal_y: ordinal_y,~ - Inside source: true *** True Line Result ordinal_y: ordinal_y, ** Processing line: ~ offset_x: (ordinal_y.even?) ?~ - Inside source: true *** True Line Result offset_x: (ordinal_y.even?) ? ** Processing line: ~ (state.world_x_offset + state.tile_w.half.half) :~ - Inside source: true *** True Line Result (state.world_x_offset + state.tile_w.half.half) : ** Processing line: ~ (state.world_x_offset - state.tile_w.half.half),~ - Inside source: true *** True Line Result (state.world_x_offset - state.tile_w.half.half), ** Processing line: ~ offset_y: state.world_y_offset,~ - Inside source: true *** True Line Result offset_y: state.world_y_offset, ** Processing line: ~ w: state.tile_w,~ - Inside source: true *** True Line Result w: state.tile_w, ** Processing line: ~ h: state.tile_h,~ - Inside source: true *** True Line Result h: state.tile_h, ** Processing line: ~ type: :blank,~ - Inside source: true *** True Line Result type: :blank, ** Processing line: ~ path: "sprites/hexagon-gray.png",~ - Inside source: true *** True Line Result path: "sprites/hexagon-gray.png", ** Processing line: ~ a: 20~ - Inside source: true *** True Line Result a: 20 ** Processing line: ~ }.associate do |h|~ - Inside source: true *** True Line Result }.associate do |h| ** Processing line: ~ h.merge(x: h[:offset_x] + h[:ordinal_x] * h[:w],~ - Inside source: true *** True Line Result h.merge(x: h[:offset_x] + h[:ordinal_x] * h[:w], ** Processing line: ~ y: h[:offset_y] + h[:ordinal_y] * h[:h]).scale_rect(state.tile_scale)~ - Inside source: true *** True Line Result y: h[:offset_y] + h[:ordinal_y] * h[:h]).scale_rect(state.tile_scale) ** Processing line: ~ end.associate do |h|~ - Inside source: true *** True Line Result end.associate do |h| ** Processing line: ~ h.merge(center: {~ - Inside source: true *** True Line Result h.merge(center: { ** Processing line: ~ x: h[:x] + h[:w].half,~ - Inside source: true *** True Line Result x: h[:x] + h[:w].half, ** Processing line: ~ y: h[:y] + h[:h].half~ - Inside source: true *** True Line Result y: h[:y] + h[:h].half ** Processing line: ~ }, radius: [h[:w].half, h[:h].half].max)~ - Inside source: true *** True Line Result }, radius: [h[:w].half, h[:h].half].max) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ if inputs.click~ - Inside source: true *** True Line Result if inputs.click ** Processing line: ~ tile = state.tiles.find { |t| inputs.click.point_inside_circle? t[:center], t[:radius] }~ - Inside source: true *** True Line Result tile = state.tiles.find { |t| inputs.click.point_inside_circle? t[:center], t[:radius] } ** Processing line: ~ if tile~ - Inside source: true *** True Line Result if tile ** Processing line: ~ tile[:a] = 255~ - Inside source: true *** True Line Result tile[:a] = 255 ** Processing line: ~ tile[:path] = "sprites/hexagon-black.png"~ - Inside source: true *** True Line Result tile[:path] = "sprites/hexagon-black.png" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ outputs.sprites << state.tiles~ - Inside source: true *** True Line Result outputs.sprites << state.tiles ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $game = HexagonTileGame.new~ - Inside source: true *** True Line Result $game = HexagonTileGame.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $game.args = args~ - Inside source: true *** True Line Result $game.args = args ** Processing line: ~ $game.tick~ - Inside source: true *** True Line Result $game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Tactical - Isometric Grid - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Tactical - Isometric Grid - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_tactical/isometric_grid/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_tactical/isometric_grid/app/main.rb ** Processing line: ~ class Isometric~ - Inside source: true *** True Line Result class Isometric ** Processing line: ~ attr_accessor :grid, :inputs, :state, :outputs~ - Inside source: true *** True Line Result attr_accessor :grid, :inputs, :state, :outputs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ defaults~ - Inside source: true *** True Line Result defaults ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ process_inputs~ - Inside source: true *** True Line Result process_inputs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults~ - Inside source: true *** True Line Result def defaults ** Processing line: ~ state.quantity ||= 6 #Size of grid~ - Inside source: true *** True Line Result state.quantity ||= 6 #Size of grid ** Processing line: ~ state.tileSize ||= [262 / 2, 194 / 2] #width and heigth of orange tiles~ - Inside source: true *** True Line Result state.tileSize ||= [262 / 2, 194 / 2] #width and heigth of orange tiles ** Processing line: ~ state.tileGrid ||= [] #Holds ordering of tiles~ - Inside source: true *** True Line Result state.tileGrid ||= [] #Holds ordering of tiles ** Processing line: ~ state.currentSpriteLocation ||= -1 #Current Sprite hovering location~ - Inside source: true *** True Line Result state.currentSpriteLocation ||= -1 #Current Sprite hovering location ** Processing line: ~ state.tileCords ||= [] #Physical, rendering cordinates~ - Inside source: true *** True Line Result state.tileCords ||= [] #Physical, rendering cordinates ** Processing line: ~ state.initCords ||= [640 - (state.quantity / 2 * state.tileSize[0]), 330] #Location of tile (0, 0)~ - Inside source: true *** True Line Result state.initCords ||= [640 - (state.quantity / 2 * state.tileSize[0]), 330] #Location of tile (0, 0) ** Processing line: ~ state.sideSize ||= [state.tileSize[0] / 2, 242 / 2] #Purple & green cube face size~ - Inside source: true *** True Line Result state.sideSize ||= [state.tileSize[0] / 2, 242 / 2] #Purple & green cube face size ** Processing line: ~ state.mode ||= :delete #Switches between :delete and :insert~ - Inside source: true *** True Line Result state.mode ||= :delete #Switches between :delete and :insert ** Processing line: ~ state.spriteSelection ||= [['river', 0, 0, 262 / 2, 194 / 2],~ - Inside source: true *** True Line Result state.spriteSelection ||= [['river', 0, 0, 262 / 2, 194 / 2], ** Processing line: ~ ['mountain', 0, 0, 262 / 2, 245 / 2],~ - Inside source: true *** True Line Result ['mountain', 0, 0, 262 / 2, 245 / 2], ** Processing line: ~ ['ocean', 0, 0, 262 / 2, 194 / 2]] #Storage for sprite information~ - Inside source: true *** True Line Result ['ocean', 0, 0, 262 / 2, 194 / 2]] #Storage for sprite information ** Processing line: ~ #['name', deltaX, deltaY, sizeW, sizeH]~ - Inside source: true *** True Line Result #['name', deltaX, deltaY, sizeW, sizeH] ** Processing line: ~ #^delta refers to distance from tile cords~ - Inside source: true *** True Line Result #^delta refers to distance from tile cords ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Orders tiles based on tile placement and fancy math. Very left: 0,0. Very bottom: quantity-1, 0, etc~ - Inside source: true *** True Line Result #Orders tiles based on tile placement and fancy math. Very left: 0,0. Very bottom: quantity-1, 0, etc ** Processing line: ~ if state.tileGrid == []~ - Inside source: true *** True Line Result if state.tileGrid == [] ** Processing line: ~ tempX = 0~ - Inside source: true *** True Line Result tempX = 0 ** Processing line: ~ tempY = 0~ - Inside source: true *** True Line Result tempY = 0 ** Processing line: ~ tempLeft = false~ - Inside source: true *** True Line Result tempLeft = false ** Processing line: ~ tempRight = false~ - Inside source: true *** True Line Result tempRight = false ** Processing line: ~ count = 0~ - Inside source: true *** True Line Result count = 0 ** Processing line: ~ (state.quantity * state.quantity).times do~ - Inside source: true *** True Line Result (state.quantity * state.quantity).times do ** Processing line: ~ if tempY == 0~ - Inside source: true *** True Line Result if tempY == 0 ** Processing line: ~ tempLeft = true~ - Inside source: true *** True Line Result tempLeft = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if tempX == (state.quantity - 1)~ - Inside source: true *** True Line Result if tempX == (state.quantity - 1) ** Processing line: ~ tempRight = true~ - Inside source: true *** True Line Result tempRight = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ state.tileGrid.push([tempX, tempY, true, tempLeft, tempRight, count])~ - Inside source: true *** True Line Result state.tileGrid.push([tempX, tempY, true, tempLeft, tempRight, count]) ** Processing line: ~ #orderX, orderY, exists?, leftSide, rightSide, order~ - Inside source: true *** True Line Result #orderX, orderY, exists?, leftSide, rightSide, order ** Processing line: ~ tempX += 1~ - Inside source: true *** True Line Result tempX += 1 ** Processing line: ~ if tempX == state.quantity~ - Inside source: true *** True Line Result if tempX == state.quantity ** Processing line: ~ tempX = 0~ - Inside source: true *** True Line Result tempX = 0 ** Processing line: ~ tempY += 1~ - Inside source: true *** True Line Result tempY += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ tempLeft = false~ - Inside source: true *** True Line Result tempLeft = false ** Processing line: ~ tempRight = false~ - Inside source: true *** True Line Result tempRight = false ** Processing line: ~ count += 1~ - Inside source: true *** True Line Result count += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #Calculates physical cordinates for tiles~ - Inside source: true *** True Line Result #Calculates physical cordinates for tiles ** Processing line: ~ if state.tileCords == []~ - Inside source: true *** True Line Result if state.tileCords == [] ** Processing line: ~ state.tileCords = state.tileGrid.map do~ - Inside source: true *** True Line Result state.tileCords = state.tileGrid.map do ** Processing line: ~ |val|~ - Inside source: true *** True Line Result |val| ** Processing line: ~ x = (state.initCords[0]) + ((val[0] + val[1]) * state.tileSize[0] / 2)~ - Inside source: true *** True Line Result x = (state.initCords[0]) + ((val[0] + val[1]) * state.tileSize[0] / 2) ** Processing line: ~ y = (state.initCords[1]) + (-1 * val[0] * state.tileSize[1] / 2) + (val[1] * state.tileSize[1] / 2)~ - Inside source: true *** True Line Result y = (state.initCords[1]) + (-1 * val[0] * state.tileSize[1] / 2) + (val[1] * state.tileSize[1] / 2) ** Processing line: ~ [x, y, val[2], val[3], val[4], val[5], -1] #-1 represents sprite on top of tile. -1 for now~ - Inside source: true *** True Line Result [x, y, val[2], val[3], val[4], val[5], -1] #-1 represents sprite on top of tile. -1 for now ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ renderBackground~ - Inside source: true *** True Line Result renderBackground ** Processing line: ~ renderLeft~ - Inside source: true *** True Line Result renderLeft ** Processing line: ~ renderRight~ - Inside source: true *** True Line Result renderRight ** Processing line: ~ renderTiles~ - Inside source: true *** True Line Result renderTiles ** Processing line: ~ renderObjects~ - Inside source: true *** True Line Result renderObjects ** Processing line: ~ renderLabels~ - Inside source: true *** True Line Result renderLabels ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def renderBackground~ - Inside source: true *** True Line Result def renderBackground ** Processing line: ~ outputs.solids << [0, 0, 1280, 720, 0, 0, 0] #Background color~ - Inside source: true *** True Line Result outputs.solids << [0, 0, 1280, 720, 0, 0, 0] #Background color ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def renderLeft~ - Inside source: true *** True Line Result def renderLeft ** Processing line: ~ #Shows the pink left cube face~ - Inside source: true *** True Line Result #Shows the pink left cube face ** Processing line: ~ outputs.sprites << state.tileCords.map do~ - Inside source: true *** True Line Result outputs.sprites << state.tileCords.map do ** Processing line: ~ |val|~ - Inside source: true *** True Line Result |val| ** Processing line: ~ if val[2] == true && val[3] == true #Checks if the tile exists and right face needs to be rendered~ - Inside source: true *** True Line Result if val[2] == true && val[3] == true #Checks if the tile exists and right face needs to be rendered ** Processing line: ~ [val[0], val[1] + (state.tileSize[1] / 2) - state.sideSize[1], state.sideSize[0],~ - Inside source: true *** True Line Result [val[0], val[1] + (state.tileSize[1] / 2) - state.sideSize[1], state.sideSize[0], ** Processing line: ~ state.sideSize[1], 'sprites/leftSide.png']~ - Inside source: true *** True Line Result state.sideSize[1], 'sprites/leftSide.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def renderRight~ - Inside source: true *** True Line Result def renderRight ** Processing line: ~ #Shows the green right cube face~ - Inside source: true *** True Line Result #Shows the green right cube face ** Processing line: ~ outputs.sprites << state.tileCords.map do~ - Inside source: true *** True Line Result outputs.sprites << state.tileCords.map do ** Processing line: ~ |val|~ - Inside source: true *** True Line Result |val| ** Processing line: ~ if val[2] == true && val[4] == true #Checks if it exists & checks if right face needs to be rendered~ - Inside source: true *** True Line Result if val[2] == true && val[4] == true #Checks if it exists & checks if right face needs to be rendered ** Processing line: ~ [val[0] + state.tileSize[0] / 2, val[1] + (state.tileSize[1] / 2) - state.sideSize[1], state.sideSize[0],~ - Inside source: true *** True Line Result [val[0] + state.tileSize[0] / 2, val[1] + (state.tileSize[1] / 2) - state.sideSize[1], state.sideSize[0], ** Processing line: ~ state.sideSize[1], 'sprites/rightSide.png']~ - Inside source: true *** True Line Result state.sideSize[1], 'sprites/rightSide.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def renderTiles~ - Inside source: true *** True Line Result def renderTiles ** Processing line: ~ #Shows the tile itself. Important that it's rendered after the two above!~ - Inside source: true *** True Line Result #Shows the tile itself. Important that it's rendered after the two above! ** Processing line: ~ outputs.sprites << state.tileCords.map do~ - Inside source: true *** True Line Result outputs.sprites << state.tileCords.map do ** Processing line: ~ |val|~ - Inside source: true *** True Line Result |val| ** Processing line: ~ if val[2] == true #Chcekcs if tile needs to be rendered~ - Inside source: true *** True Line Result if val[2] == true #Chcekcs if tile needs to be rendered ** Processing line: ~ if val[5] == state.currentSpriteLocation~ - Inside source: true *** True Line Result if val[5] == state.currentSpriteLocation ** Processing line: ~ [val[0], val[1], state.tileSize[0], state.tileSize[1], 'sprites/selectedTile.png']~ - Inside source: true *** True Line Result [val[0], val[1], state.tileSize[0], state.tileSize[1], 'sprites/selectedTile.png'] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ [val[0], val[1], state.tileSize[0], state.tileSize[1], 'sprites/tile.png']~ - Inside source: true *** True Line Result [val[0], val[1], state.tileSize[0], state.tileSize[1], 'sprites/tile.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def renderObjects~ - Inside source: true *** True Line Result def renderObjects ** Processing line: ~ #Renders the sprites on top of the tiles. Order of rendering: top corner to right corner and cascade down until left corner~ - Inside source: true *** True Line Result #Renders the sprites on top of the tiles. Order of rendering: top corner to right corner and cascade down until left corner ** Processing line: ~ #to bottom corner.~ - Inside source: true *** True Line Result #to bottom corner. ** Processing line: ~ a = (state.quantity * state.quantity) - state.quantity~ - Inside source: true *** True Line Result a = (state.quantity * state.quantity) - state.quantity ** Processing line: ~ iter = 0~ - Inside source: true *** True Line Result iter = 0 ** Processing line: ~ loop do~ - Inside source: true *** True Line Result loop do ** Processing line: ~ if state.tileCords[a][2] == true && state.tileCords[a][6] != -1~ - Inside source: true *** True Line Result if state.tileCords[a][2] == true && state.tileCords[a][6] != -1 ** Processing line: ~ outputs.sprites << [state.tileCords[a][0] + state.spriteSelection[state.tileCords[a][6]][1],~ - Inside source: true *** True Line Result outputs.sprites << [state.tileCords[a][0] + state.spriteSelection[state.tileCords[a][6]][1], ** Processing line: ~ state.tileCords[a][1] + state.spriteSelection[state.tileCords[a][6]][2],~ - Inside source: true *** True Line Result state.tileCords[a][1] + state.spriteSelection[state.tileCords[a][6]][2], ** Processing line: ~ state.spriteSelection[state.tileCords[a][6]][3], state.spriteSelection[state.tileCords[a][6]][4],~ - Inside source: true *** True Line Result state.spriteSelection[state.tileCords[a][6]][3], state.spriteSelection[state.tileCords[a][6]][4], ** Processing line: ~ 'sprites/' + state.spriteSelection[state.tileCords[a][6]][0] + '.png']~ - Inside source: true *** True Line Result 'sprites/' + state.spriteSelection[state.tileCords[a][6]][0] + '.png'] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ iter += 1~ - Inside source: true *** True Line Result iter += 1 ** Processing line: ~ a += 1~ - Inside source: true *** True Line Result a += 1 ** Processing line: ~ a -= state.quantity * 2 if iter == state.quantity~ - Inside source: true *** True Line Result a -= state.quantity * 2 if iter == state.quantity ** Processing line: ~ iter = 0 if iter == state.quantity~ - Inside source: true *** True Line Result iter = 0 if iter == state.quantity ** Processing line: ~ break if a < 0~ - Inside source: true *** True Line Result break if a < 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def renderLabels~ - Inside source: true *** True Line Result def renderLabels ** Processing line: ~ #Labels~ - Inside source: true *** True Line Result #Labels ** Processing line: ~ outputs.labels << [50, 680, 'Click to delete!', 5, 0, 255, 255, 255, 255] if state.mode == :delete~ - Inside source: true *** True Line Result outputs.labels << [50, 680, 'Click to delete!', 5, 0, 255, 255, 255, 255] if state.mode == :delete ** Processing line: ~ outputs.labels << [50, 640, 'Press \'i\' for insert mode!', 5, 0, 255, 255, 255, 255] if state.mode == :delete~ - Inside source: true *** True Line Result outputs.labels << [50, 640, 'Press \'i\' for insert mode!', 5, 0, 255, 255, 255, 255] if state.mode == :delete ** Processing line: ~ outputs.labels << [50, 680, 'Click to insert!', 5, 0, 255, 255, 255, 255] if state.mode == :insert~ - Inside source: true *** True Line Result outputs.labels << [50, 680, 'Click to insert!', 5, 0, 255, 255, 255, 255] if state.mode == :insert ** Processing line: ~ outputs.labels << [50, 640, 'Press \'d\' for delete mode!', 5, 0, 255, 255, 255, 255] if state.mode == :insert~ - Inside source: true *** True Line Result outputs.labels << [50, 640, 'Press \'d\' for delete mode!', 5, 0, 255, 255, 255, 255] if state.mode == :insert ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ calcCurrentHover~ - Inside source: true *** True Line Result calcCurrentHover ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calcCurrentHover~ - Inside source: true *** True Line Result def calcCurrentHover ** Processing line: ~ #This determines what tile the mouse is hovering (or last hovering) over~ - Inside source: true *** True Line Result #This determines what tile the mouse is hovering (or last hovering) over ** Processing line: ~ x = inputs.mouse.position.x~ - Inside source: true *** True Line Result x = inputs.mouse.position.x ** Processing line: ~ y = inputs.mouse.position.y~ - Inside source: true *** True Line Result y = inputs.mouse.position.y ** Processing line: ~ m = (state.tileSize[1] / state.tileSize[0]) #slope~ - Inside source: true *** True Line Result m = (state.tileSize[1] / state.tileSize[0]) #slope ** Processing line: ~ state.tileCords.map do~ - Inside source: true *** True Line Result state.tileCords.map do ** Processing line: ~ |val|~ - Inside source: true *** True Line Result |val| ** Processing line: ~ #Conditions that makes runtime faster. Checks if the mouse click was between tile dimensions (rectangle collision)~ - Inside source: true *** True Line Result #Conditions that makes runtime faster. Checks if the mouse click was between tile dimensions (rectangle collision) ** Processing line: ~ next unless val[0] < x && x < val[0] + state.tileSize[0]~ - Inside source: true *** True Line Result next unless val[0] < x && x < val[0] + state.tileSize[0] ** Processing line: ~ next unless val[1] < y && y < val[1] + state.tileSize[1]~ - Inside source: true *** True Line Result next unless val[1] < y && y < val[1] + state.tileSize[1] ** Processing line: ~ next unless val[2] == true~ - Inside source: true *** True Line Result next unless val[2] == true ** Processing line: ~ tempBool = false~ - Inside source: true *** True Line Result tempBool = false ** Processing line: ~ if x == val[0] + (state.tileSize[0] / 2)~ - Inside source: true *** True Line Result if x == val[0] + (state.tileSize[0] / 2) ** Processing line: ~ #The height of a diamond is the height of the diamond, so if x equals that exact point, it must be inside the diamond~ - Inside source: true *** True Line Result #The height of a diamond is the height of the diamond, so if x equals that exact point, it must be inside the diamond ** Processing line: ~ tempBool = true~ - Inside source: true *** True Line Result tempBool = true ** Processing line: ~ elsif x < state.tileSize[0] / 2 + val[0]~ - Inside source: true *** True Line Result elsif x < state.tileSize[0] / 2 + val[0] ** Processing line: ~ #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the left half of diamond~ - Inside source: true *** True Line Result #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the left half of diamond ** Processing line: ~ tempY1 = (m * (x - val[0])) + val[1] + (state.tileSize[1] / 2)~ - Inside source: true *** True Line Result tempY1 = (m * (x - val[0])) + val[1] + (state.tileSize[1] / 2) ** Processing line: ~ tempY2 = (-1 * m * (x - val[0])) + val[1] + (state.tileSize[1] / 2)~ - Inside source: true *** True Line Result tempY2 = (-1 * m * (x - val[0])) + val[1] + (state.tileSize[1] / 2) ** Processing line: ~ #Checks to see if the mouse click y value is between those temp y values~ - Inside source: true *** True Line Result #Checks to see if the mouse click y value is between those temp y values ** Processing line: ~ tempBool = true if y < tempY1 && y > tempY2~ - Inside source: true *** True Line Result tempBool = true if y < tempY1 && y > tempY2 ** Processing line: ~ elsif x > state.tileSize[0] / 2 + val[0]~ - Inside source: true *** True Line Result elsif x > state.tileSize[0] / 2 + val[0] ** Processing line: ~ #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the right half of diamond~ - Inside source: true *** True Line Result #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the right half of diamond ** Processing line: ~ tempY1 = (m * (x - val[0] - (state.tileSize[0] / 2))) + val[1]~ - Inside source: true *** True Line Result tempY1 = (m * (x - val[0] - (state.tileSize[0] / 2))) + val[1] ** Processing line: ~ tempY2 = (-1 * m * (x - val[0] - (state.tileSize[0] / 2))) + val[1] + state.tileSize[1]~ - Inside source: true *** True Line Result tempY2 = (-1 * m * (x - val[0] - (state.tileSize[0] / 2))) + val[1] + state.tileSize[1] ** Processing line: ~ #Checks to see if the mouse click y value is between those temp y values~ - Inside source: true *** True Line Result #Checks to see if the mouse click y value is between those temp y values ** Processing line: ~ tempBool = true if y > tempY1 && y < tempY2~ - Inside source: true *** True Line Result tempBool = true if y > tempY1 && y < tempY2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if tempBool == true~ - Inside source: true *** True Line Result if tempBool == true ** Processing line: ~ state.currentSpriteLocation = val[5] #Current sprite location set to the order value~ - Inside source: true *** True Line Result state.currentSpriteLocation = val[5] #Current sprite location set to the order value ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_inputs~ - Inside source: true *** True Line Result def process_inputs ** Processing line: ~ #Makes development much faster and easier~ - Inside source: true *** True Line Result #Makes development much faster and easier ** Processing line: ~ if inputs.keyboard.key_up.r~ - Inside source: true *** True Line Result if inputs.keyboard.key_up.r ** Processing line: ~ $dragon.reset~ - Inside source: true *** True Line Result $dragon.reset ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ checkTileSelected~ - Inside source: true *** True Line Result checkTileSelected ** Processing line: ~ switchModes~ - Inside source: true *** True Line Result switchModes ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def checkTileSelected~ - Inside source: true *** True Line Result def checkTileSelected ** Processing line: ~ if inputs.mouse.down~ - Inside source: true *** True Line Result if inputs.mouse.down ** Processing line: ~ x = inputs.mouse.down.point.x~ - Inside source: true *** True Line Result x = inputs.mouse.down.point.x ** Processing line: ~ y = inputs.mouse.down.point.y~ - Inside source: true *** True Line Result y = inputs.mouse.down.point.y ** Processing line: ~ m = (state.tileSize[1] / state.tileSize[0]) #slope~ - Inside source: true *** True Line Result m = (state.tileSize[1] / state.tileSize[0]) #slope ** Processing line: ~ state.tileCords.map do~ - Inside source: true *** True Line Result state.tileCords.map do ** Processing line: ~ |val|~ - Inside source: true *** True Line Result |val| ** Processing line: ~ #Conditions that makes runtime faster. Checks if the mouse click was between tile dimensions (rectangle collision)~ - Inside source: true *** True Line Result #Conditions that makes runtime faster. Checks if the mouse click was between tile dimensions (rectangle collision) ** Processing line: ~ next unless val[0] < x && x < val[0] + state.tileSize[0]~ - Inside source: true *** True Line Result next unless val[0] < x && x < val[0] + state.tileSize[0] ** Processing line: ~ next unless val[1] < y && y < val[1] + state.tileSize[1]~ - Inside source: true *** True Line Result next unless val[1] < y && y < val[1] + state.tileSize[1] ** Processing line: ~ next unless val[2] == true~ - Inside source: true *** True Line Result next unless val[2] == true ** Processing line: ~ tempBool = false~ - Inside source: true *** True Line Result tempBool = false ** Processing line: ~ if x == val[0] + (state.tileSize[0] / 2)~ - Inside source: true *** True Line Result if x == val[0] + (state.tileSize[0] / 2) ** Processing line: ~ #The height of a diamond is the height of the diamond, so if x equals that exact point, it must be inside the diamond~ - Inside source: true *** True Line Result #The height of a diamond is the height of the diamond, so if x equals that exact point, it must be inside the diamond ** Processing line: ~ tempBool = true~ - Inside source: true *** True Line Result tempBool = true ** Processing line: ~ elsif x < state.tileSize[0] / 2 + val[0]~ - Inside source: true *** True Line Result elsif x < state.tileSize[0] / 2 + val[0] ** Processing line: ~ #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the left half of diamond~ - Inside source: true *** True Line Result #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the left half of diamond ** Processing line: ~ tempY1 = (m * (x - val[0])) + val[1] + (state.tileSize[1] / 2)~ - Inside source: true *** True Line Result tempY1 = (m * (x - val[0])) + val[1] + (state.tileSize[1] / 2) ** Processing line: ~ tempY2 = (-1 * m * (x - val[0])) + val[1] + (state.tileSize[1] / 2)~ - Inside source: true *** True Line Result tempY2 = (-1 * m * (x - val[0])) + val[1] + (state.tileSize[1] / 2) ** Processing line: ~ #Checks to see if the mouse click y value is between those temp y values~ - Inside source: true *** True Line Result #Checks to see if the mouse click y value is between those temp y values ** Processing line: ~ tempBool = true if y < tempY1 && y > tempY2~ - Inside source: true *** True Line Result tempBool = true if y < tempY1 && y > tempY2 ** Processing line: ~ elsif x > state.tileSize[0] / 2 + val[0]~ - Inside source: true *** True Line Result elsif x > state.tileSize[0] / 2 + val[0] ** Processing line: ~ #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the right half of diamond~ - Inside source: true *** True Line Result #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the right half of diamond ** Processing line: ~ tempY1 = (m * (x - val[0] - (state.tileSize[0] / 2))) + val[1]~ - Inside source: true *** True Line Result tempY1 = (m * (x - val[0] - (state.tileSize[0] / 2))) + val[1] ** Processing line: ~ tempY2 = (-1 * m * (x - val[0] - (state.tileSize[0] / 2))) + val[1] + state.tileSize[1]~ - Inside source: true *** True Line Result tempY2 = (-1 * m * (x - val[0] - (state.tileSize[0] / 2))) + val[1] + state.tileSize[1] ** Processing line: ~ #Checks to see if the mouse click y value is between those temp y values~ - Inside source: true *** True Line Result #Checks to see if the mouse click y value is between those temp y values ** Processing line: ~ tempBool = true if y > tempY1 && y < tempY2~ - Inside source: true *** True Line Result tempBool = true if y > tempY1 && y < tempY2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if tempBool == true~ - Inside source: true *** True Line Result if tempBool == true ** Processing line: ~ if state.mode == :delete~ - Inside source: true *** True Line Result if state.mode == :delete ** Processing line: ~ val[2] = false~ - Inside source: true *** True Line Result val[2] = false ** Processing line: ~ state.tileGrid[val[5]][2] = false #Unnecessary because never used again but eh, I like consistency~ - Inside source: true *** True Line Result state.tileGrid[val[5]][2] = false #Unnecessary because never used again but eh, I like consistency ** Processing line: ~ state.tileCords[val[5]][2] = false #Ensures that the tile isn't rendered~ - Inside source: true *** True Line Result state.tileCords[val[5]][2] = false #Ensures that the tile isn't rendered ** Processing line: ~ unless state.tileGrid[val[5]][0] == 0 #If tile is the left most tile in the row, right doesn't get rendered~ - Inside source: true *** True Line Result unless state.tileGrid[val[5]][0] == 0 #If tile is the left most tile in the row, right doesn't get rendered ** Processing line: ~ state.tileGrid[val[5] - 1][4] = true #Why the order value is amazing~ - Inside source: true *** True Line Result state.tileGrid[val[5] - 1][4] = true #Why the order value is amazing ** Processing line: ~ state.tileCords[val[5] - 1][4] = true~ - Inside source: true *** True Line Result state.tileCords[val[5] - 1][4] = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ unless state.tileGrid[val[5]][1] == state.quantity - 1 #Same but left side~ - Inside source: true *** True Line Result unless state.tileGrid[val[5]][1] == state.quantity - 1 #Same but left side ** Processing line: ~ state.tileGrid[val[5] + state.quantity][3] = true~ - Inside source: true *** True Line Result state.tileGrid[val[5] + state.quantity][3] = true ** Processing line: ~ state.tileCords[val[5] + state.quantity][3] = true~ - Inside source: true *** True Line Result state.tileCords[val[5] + state.quantity][3] = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif state.mode == :insert~ - Inside source: true *** True Line Result elsif state.mode == :insert ** Processing line: ~ #adds the current sprite value selected to tileCords. (changes from the -1 earlier)~ - Inside source: true *** True Line Result #adds the current sprite value selected to tileCords. (changes from the -1 earlier) ** Processing line: ~ val[6] = rand(state.spriteSelection.length)~ - Inside source: true *** True Line Result val[6] = rand(state.spriteSelection.length) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def switchModes~ - Inside source: true *** True Line Result def switchModes ** Processing line: ~ #Switches between insert and delete modes~ - Inside source: true *** True Line Result #Switches between insert and delete modes ** Processing line: ~ if inputs.keyboard.key_up.i && state.mode == :delete~ - Inside source: true *** True Line Result if inputs.keyboard.key_up.i && state.mode == :delete ** Processing line: ~ state.mode = :insert~ - Inside source: true *** True Line Result state.mode = :insert ** Processing line: ~ inputs.keyboard.clear~ - Inside source: true *** True Line Result inputs.keyboard.clear ** Processing line: ~ elsif inputs.keyboard.key_up.d && state.mode == :insert~ - Inside source: true *** True Line Result elsif inputs.keyboard.key_up.d && state.mode == :insert ** Processing line: ~ state.mode = :delete~ - Inside source: true *** True Line Result state.mode = :delete ** Processing line: ~ inputs.keyboard.clear~ - Inside source: true *** True Line Result inputs.keyboard.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $isometric = Isometric.new~ - Inside source: true *** True Line Result $isometric = Isometric.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ $isometric.grid = args.grid~ - Inside source: true *** True Line Result $isometric.grid = args.grid ** Processing line: ~ $isometric.inputs = args.inputs~ - Inside source: true *** True Line Result $isometric.inputs = args.inputs ** Processing line: ~ $isometric.state = args.state~ - Inside source: true *** True Line Result $isometric.state = args.state ** Processing line: ~ $isometric.outputs = args.outputs~ - Inside source: true *** True Line Result $isometric.outputs = args.outputs ** Processing line: ~ $isometric.tick~ - Inside source: true *** True Line Result $isometric.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Topdown - Topdown Casino - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Topdown - Topdown Casino - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_topdown/topdown_casino/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_topdown/topdown_casino/app/main.rb ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def coinflip~ - Inside source: true *** True Line Result def coinflip ** Processing line: ~ rand < 0.5~ - Inside source: true *** True Line Result rand < 0.5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Game~ - Inside source: true *** True Line Result class Game ** Processing line: ~ attr_accessor :args~ - Inside source: true *** True Line Result attr_accessor :args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def text_font~ - Inside source: true *** True Line Result def text_font ** Processing line: ~ return nil #"rpg.ttf"~ - Inside source: true *** True Line Result return nil #"rpg.ttf" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def text_color~ - Inside source: true *** True Line Result def text_color ** Processing line: ~ [ 255, 255, 255, 255 ]~ - Inside source: true *** True Line Result [ 255, 255, 255, 255 ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_gem_values~ - Inside source: true *** True Line Result def set_gem_values ** Processing line: ~ @args.state.gem0 = ((coinflip) ? 100 : 20)~ - Inside source: true *** True Line Result @args.state.gem0 = ((coinflip) ? 100 : 20) ** Processing line: ~ @args.state.gem1 = ((coinflip) ? -10 : -50)~ - Inside source: true *** True Line Result @args.state.gem1 = ((coinflip) ? -10 : -50) ** Processing line: ~ @args.state.gem2 = ((coinflip) ? -10 : -30)~ - Inside source: true *** True Line Result @args.state.gem2 = ((coinflip) ? -10 : -30) ** Processing line: ~ if coinflip~ - Inside source: true *** True Line Result if coinflip ** Processing line: ~ tmp = @args.state.gem0~ - Inside source: true *** True Line Result tmp = @args.state.gem0 ** Processing line: ~ @args.state.gem0 = @args.state.gem1~ - Inside source: true *** True Line Result @args.state.gem0 = @args.state.gem1 ** Processing line: ~ @args.state.gem1 = tmp~ - Inside source: true *** True Line Result @args.state.gem1 = tmp ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if coinflip~ - Inside source: true *** True Line Result if coinflip ** Processing line: ~ tmp = @args.state.gem1~ - Inside source: true *** True Line Result tmp = @args.state.gem1 ** Processing line: ~ @args.state.gem1 = @args.state.gem2~ - Inside source: true *** True Line Result @args.state.gem1 = @args.state.gem2 ** Processing line: ~ @args.state.gem2 = tmp~ - Inside source: true *** True Line Result @args.state.gem2 = tmp ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if coinflip~ - Inside source: true *** True Line Result if coinflip ** Processing line: ~ tmp = @args.state.gem0~ - Inside source: true *** True Line Result tmp = @args.state.gem0 ** Processing line: ~ @args.state.gem0 = @args.state.gem2~ - Inside source: true *** True Line Result @args.state.gem0 = @args.state.gem2 ** Processing line: ~ @args.state.gem2 = tmp~ - Inside source: true *** True Line Result @args.state.gem2 = tmp ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize args~ - Inside source: true *** True Line Result def initialize args ** Processing line: ~ @args = args~ - Inside source: true *** True Line Result @args = args ** Processing line: ~ @args.state.animticks = 0~ - Inside source: true *** True Line Result @args.state.animticks = 0 ** Processing line: ~ @args.state.score = 0~ - Inside source: true *** True Line Result @args.state.score = 0 ** Processing line: ~ @args.state.gem_chosen = false~ - Inside source: true *** True Line Result @args.state.gem_chosen = false ** Processing line: ~ @args.state.round_finished = false~ - Inside source: true *** True Line Result @args.state.round_finished = false ** Processing line: ~ @args.state.gem0_x = 197~ - Inside source: true *** True Line Result @args.state.gem0_x = 197 ** Processing line: ~ @args.state.gem0_y = 720-274~ - Inside source: true *** True Line Result @args.state.gem0_y = 720-274 ** Processing line: ~ @args.state.gem1_x = 623~ - Inside source: true *** True Line Result @args.state.gem1_x = 623 ** Processing line: ~ @args.state.gem1_y = 720-274~ - Inside source: true *** True Line Result @args.state.gem1_y = 720-274 ** Processing line: ~ @args.state.gem2_x = 1049~ - Inside source: true *** True Line Result @args.state.gem2_x = 1049 ** Processing line: ~ @args.state.gem2_y = 720-274~ - Inside source: true *** True Line Result @args.state.gem2_y = 720-274 ** Processing line: ~ @args.state.hero_sprite = "sprites/herodown100.png"~ - Inside source: true *** True Line Result @args.state.hero_sprite = "sprites/herodown100.png" ** Processing line: ~ @args.state.hero_x = 608~ - Inside source: true *** True Line Result @args.state.hero_x = 608 ** Processing line: ~ @args.state.hero_y = 720-656~ - Inside source: true *** True Line Result @args.state.hero_y = 720-656 ** Processing line: ~ set_gem_values~ - Inside source: true *** True Line Result set_gem_values ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_gem_value x, y, gem~ - Inside source: true *** True Line Result def render_gem_value x, y, gem ** Processing line: ~ if @args.state.gem_chosen~ - Inside source: true *** True Line Result if @args.state.gem_chosen ** Processing line: ~ @args.outputs.labels << [ x, y + 96, gem.to_s, 1, 1, *text_color, text_font ]~ - Inside source: true *** True Line Result @args.outputs.labels << [ x, y + 96, gem.to_s, 1, 1, *text_color, text_font ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render~ - Inside source: true *** True Line Result def render ** Processing line: ~ gemsprite = ((@args.state.animticks % 400) < 200) ? 'sprites/gem200.png' : 'sprites/gem400.png'~ - Inside source: true *** True Line Result gemsprite = ((@args.state.animticks % 400) < 200) ? 'sprites/gem200.png' : 'sprites/gem400.png' ** Processing line: ~ @args.outputs.background_color = [ 0, 0, 0, 255 ]~ - Inside source: true *** True Line Result @args.outputs.background_color = [ 0, 0, 0, 255 ] ** Processing line: ~ @args.outputs.sprites << [608, 720-150, 64, 64, 'sprites/oldman.png']~ - Inside source: true *** True Line Result @args.outputs.sprites << [608, 720-150, 64, 64, 'sprites/oldman.png'] ** Processing line: ~ @args.outputs.sprites << [300, 720-150, 64, 64, 'sprites/fire.png']~ - Inside source: true *** True Line Result @args.outputs.sprites << [300, 720-150, 64, 64, 'sprites/fire.png'] ** Processing line: ~ @args.outputs.sprites << [900, 720-150, 64, 64, 'sprites/fire.png']~ - Inside source: true *** True Line Result @args.outputs.sprites << [900, 720-150, 64, 64, 'sprites/fire.png'] ** Processing line: ~ @args.outputs.sprites << [@args.state.gem0_x, @args.state.gem0_y, 32, 64, gemsprite]~ - Inside source: true *** True Line Result @args.outputs.sprites << [@args.state.gem0_x, @args.state.gem0_y, 32, 64, gemsprite] ** Processing line: ~ @args.outputs.sprites << [@args.state.gem1_x, @args.state.gem1_y, 32, 64, gemsprite]~ - Inside source: true *** True Line Result @args.outputs.sprites << [@args.state.gem1_x, @args.state.gem1_y, 32, 64, gemsprite] ** Processing line: ~ @args.outputs.sprites << [@args.state.gem2_x, @args.state.gem2_y, 32, 64, gemsprite]~ - Inside source: true *** True Line Result @args.outputs.sprites << [@args.state.gem2_x, @args.state.gem2_y, 32, 64, gemsprite] ** Processing line: ~ @args.outputs.sprites << [@args.state.hero_x, @args.state.hero_y, 64, 64, @args.state.hero_sprite]~ - Inside source: true *** True Line Result @args.outputs.sprites << [@args.state.hero_x, @args.state.hero_y, 64, 64, @args.state.hero_sprite] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.outputs.labels << [ 630, 720-30, "IT'S A SECRET TO EVERYONE.", 1, 1, *text_color, text_font ]~ - Inside source: true *** True Line Result @args.outputs.labels << [ 630, 720-30, "IT'S A SECRET TO EVERYONE.", 1, 1, *text_color, text_font ] ** Processing line: ~ @args.outputs.labels << [ 50, 720-85, @args.state.score.to_s, 1, 1, *text_color, text_font ]~ - Inside source: true *** True Line Result @args.outputs.labels << [ 50, 720-85, @args.state.score.to_s, 1, 1, *text_color, text_font ] ** Processing line: ~ render_gem_value @args.state.gem0_x, @args.state.gem0_y, @args.state.gem0~ - Inside source: true *** True Line Result render_gem_value @args.state.gem0_x, @args.state.gem0_y, @args.state.gem0 ** Processing line: ~ render_gem_value @args.state.gem1_x, @args.state.gem1_y, @args.state.gem1~ - Inside source: true *** True Line Result render_gem_value @args.state.gem1_x, @args.state.gem1_y, @args.state.gem1 ** Processing line: ~ render_gem_value @args.state.gem2_x, @args.state.gem2_y, @args.state.gem2~ - Inside source: true *** True Line Result render_gem_value @args.state.gem2_x, @args.state.gem2_y, @args.state.gem2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc~ - Inside source: true *** True Line Result def calc ** Processing line: ~ @args.state.animticks += 16~ - Inside source: true *** True Line Result @args.state.animticks += 16 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless @args.state.gem_chosen~ - Inside source: true *** True Line Result return unless @args.state.gem_chosen ** Processing line: ~ @args.state.round_finished_debounce ||= 60 * 3~ - Inside source: true *** True Line Result @args.state.round_finished_debounce ||= 60 * 3 ** Processing line: ~ @args.state.round_finished_debounce -= 1~ - Inside source: true *** True Line Result @args.state.round_finished_debounce -= 1 ** Processing line: ~ return if @args.state.round_finished_debounce > 0~ - Inside source: true *** True Line Result return if @args.state.round_finished_debounce > 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @args.state.gem_chosen = false~ - Inside source: true *** True Line Result @args.state.gem_chosen = false ** Processing line: ~ @args.state.hero.sprite[0] = 'sprites/herodown100.png'~ - Inside source: true *** True Line Result @args.state.hero.sprite[0] = 'sprites/herodown100.png' ** Processing line: ~ @args.state.hero.sprite[1] = 608~ - Inside source: true *** True Line Result @args.state.hero.sprite[1] = 608 ** Processing line: ~ @args.state.hero.sprite[2] = 656~ - Inside source: true *** True Line Result @args.state.hero.sprite[2] = 656 ** Processing line: ~ @args.state.round_finished_debounce = nil~ - Inside source: true *** True Line Result @args.state.round_finished_debounce = nil ** Processing line: ~ set_gem_values~ - Inside source: true *** True Line Result set_gem_values ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def walk xdir, ydir, anim~ - Inside source: true *** True Line Result def walk xdir, ydir, anim ** Processing line: ~ @args.state.hero_sprite = "sprites/#{anim}#{(((@args.state.animticks % 200) < 100) ? '100' : '200')}.png"~ - Inside source: true *** True Line Result @args.state.hero_sprite = "sprites/#{anim}#{(((@args.state.animticks % 200) < 100) ? '100' : '200')}.png" ** Processing line: ~ @args.state.hero_x += 5 * xdir~ - Inside source: true *** True Line Result @args.state.hero_x += 5 * xdir ** Processing line: ~ @args.state.hero_y += 5 * ydir~ - Inside source: true *** True Line Result @args.state.hero_y += 5 * ydir ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def check_gem_touching gem_x, gem_y, gem~ - Inside source: true *** True Line Result def check_gem_touching gem_x, gem_y, gem ** Processing line: ~ return if @args.state.gem_chosen~ - Inside source: true *** True Line Result return if @args.state.gem_chosen ** Processing line: ~ herorect = [ @args.state.hero_x, @args.state.hero_y, 64, 64 ]~ - Inside source: true *** True Line Result herorect = [ @args.state.hero_x, @args.state.hero_y, 64, 64 ] ** Processing line: ~ return if !herorect.intersect_rect?([gem_x, gem_y, 32, 64])~ - Inside source: true *** True Line Result return if !herorect.intersect_rect?([gem_x, gem_y, 32, 64]) ** Processing line: ~ @args.state.gem_chosen = true~ - Inside source: true *** True Line Result @args.state.gem_chosen = true ** Processing line: ~ @args.state.score += gem~ - Inside source: true *** True Line Result @args.state.score += gem ** Processing line: ~ @args.outputs.sounds << ((gem < 0) ? 'sounds/lose.wav' : 'sounds/win.wav')~ - Inside source: true *** True Line Result @args.outputs.sounds << ((gem < 0) ? 'sounds/lose.wav' : 'sounds/win.wav') ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def input~ - Inside source: true *** True Line Result def input ** Processing line: ~ if @args.inputs.keyboard.key_held.left~ - Inside source: true *** True Line Result if @args.inputs.keyboard.key_held.left ** Processing line: ~ walk(-1.0, 0.0, 'heroleft')~ - Inside source: true *** True Line Result walk(-1.0, 0.0, 'heroleft') ** Processing line: ~ elsif @args.inputs.keyboard.key_held.right~ - Inside source: true *** True Line Result elsif @args.inputs.keyboard.key_held.right ** Processing line: ~ walk(1.0, 0.0, 'heroright')~ - Inside source: true *** True Line Result walk(1.0, 0.0, 'heroright') ** Processing line: ~ elsif @args.inputs.keyboard.key_held.up~ - Inside source: true *** True Line Result elsif @args.inputs.keyboard.key_held.up ** Processing line: ~ walk(0.0, 1.0, 'heroup')~ - Inside source: true *** True Line Result walk(0.0, 1.0, 'heroup') ** Processing line: ~ elsif @args.inputs.keyboard.key_held.down~ - Inside source: true *** True Line Result elsif @args.inputs.keyboard.key_held.down ** Processing line: ~ walk(0.0, -1.0, 'herodown')~ - Inside source: true *** True Line Result walk(0.0, -1.0, 'herodown') ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ check_gem_touching(@args.state.gem0_x, @args.state.gem0_y, @args.state.gem0)~ - Inside source: true *** True Line Result check_gem_touching(@args.state.gem0_x, @args.state.gem0_y, @args.state.gem0) ** Processing line: ~ check_gem_touching(@args.state.gem1_x, @args.state.gem1_y, @args.state.gem1)~ - Inside source: true *** True Line Result check_gem_touching(@args.state.gem1_x, @args.state.gem1_y, @args.state.gem1) ** Processing line: ~ check_gem_touching(@args.state.gem2_x, @args.state.gem2_y, @args.state.gem2)~ - Inside source: true *** True Line Result check_gem_touching(@args.state.gem2_x, @args.state.gem2_y, @args.state.gem2) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ input~ - Inside source: true *** True Line Result input ** Processing line: ~ calc~ - Inside source: true *** True Line Result calc ** Processing line: ~ render~ - Inside source: true *** True Line Result render ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.game ||= Game.new args~ - Inside source: true *** True Line Result args.state.game ||= Game.new args ** Processing line: ~ args.state.game.args = args~ - Inside source: true *** True Line Result args.state.game.args = args ** Processing line: ~ args.state.game.tick~ - Inside source: true *** True Line Result args.state.game.tick ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Rpg Topdown - Topdown Starting Point - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Rpg Topdown - Topdown Starting Point - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_rpg_topdown/topdown_starting_point/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_rpg_topdown/topdown_starting_point/app/main.rb ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ - Inside source: true *** True Line Result APIs listing that haven't been encountered in previous sample apps: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - reverse: Returns a new string with the characters from original string in reverse order.~ - Inside source: true *** True Line Result - reverse: Returns a new string with the characters from original string in reverse order. ** Processing line: ~ For example, the command~ - Inside source: true *** True Line Result For example, the command ** Processing line: ~ "dragonruby".reverse~ - Inside source: true *** True Line Result "dragonruby".reverse ** Processing line: ~ would return the string~ - Inside source: true *** True Line Result would return the string ** Processing line: ~ "yburnogard".~ - Inside source: true *** True Line Result "yburnogard". ** Processing line: ~ Reverse is not only limited to strings, but can be applied to arrays and other collections.~ - Inside source: true *** True Line Result Reverse is not only limited to strings, but can be applied to arrays and other collections. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Reminders:~ - Inside source: true *** True Line Result Reminders: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - ARRAY#intersect_rect?: Returns true or false depending on if two rectangles intersect.~ - Inside source: true *** True Line Result - ARRAY#intersect_rect?: Returns true or false depending on if two rectangles intersect. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ - Inside source: true *** True Line Result - args.outputs.labels: An array. The values generate a label. ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ - Inside source: true *** True Line Result The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE] ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ - Inside source: true *** True Line Result For more information about labels, go to mygame/documentation/02-labels.md. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This code shows a maze and uses input from the keyboard to move the user around the screen.~ - Inside source: true *** True Line Result # This code shows a maze and uses input from the keyboard to move the user around the screen. ** Processing line: ~ # The objective is to reach the goal.~ - Inside source: true *** True Line Result # The objective is to reach the goal. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets values of tile size and player's movement speed~ - Inside source: true *** True Line Result # Sets values of tile size and player's movement speed ** Processing line: ~ # Also creates tile or box for player and generates map~ - Inside source: true *** True Line Result # Also creates tile or box for player and generates map ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.state.tile_size = 80~ - Inside source: true *** True Line Result args.state.tile_size = 80 ** Processing line: ~ args.state.player_speed = 4~ - Inside source: true *** True Line Result args.state.player_speed = 4 ** Processing line: ~ args.state.player ||= tile(args, 7, 3, 0, 128, 180)~ - Inside source: true *** True Line Result args.state.player ||= tile(args, 7, 3, 0, 128, 180) ** Processing line: ~ generate_map args~ - Inside source: true *** True Line Result generate_map args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Adds walls, goal, and player to args.outputs.solids so they appear on screen~ - Inside source: true *** True Line Result # Adds walls, goal, and player to args.outputs.solids so they appear on screen ** Processing line: ~ args.outputs.solids << args.state.walls~ - Inside source: true *** True Line Result args.outputs.solids << args.state.walls ** Processing line: ~ args.outputs.solids << args.state.goal~ - Inside source: true *** True Line Result args.outputs.solids << args.state.goal ** Processing line: ~ args.outputs.solids << args.state.player~ - Inside source: true *** True Line Result args.outputs.solids << args.state.player ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If player's box intersects with goal, a label is output onto the screen~ - Inside source: true *** True Line Result # If player's box intersects with goal, a label is output onto the screen ** Processing line: ~ if args.state.player.intersect_rect? args.state.goal~ - Inside source: true *** True Line Result if args.state.player.intersect_rect? args.state.goal ** Processing line: ~ args.outputs.labels << [30, 720 - 30, "You're a wizard Harry!!"] # 30 pixels lower than top of screen~ - Inside source: true *** True Line Result args.outputs.labels << [30, 720 - 30, "You're a wizard Harry!!"] # 30 pixels lower than top of screen ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ move_player args, -1, 0 if args.inputs.keyboard.left # x position decreases by 1 if left key is pressed~ - Inside source: true *** True Line Result move_player args, -1, 0 if args.inputs.keyboard.left # x position decreases by 1 if left key is pressed ** Processing line: ~ move_player args, 1, 0 if args.inputs.keyboard.right # x position increases by 1 if right key is pressed~ - Inside source: true *** True Line Result move_player args, 1, 0 if args.inputs.keyboard.right # x position increases by 1 if right key is pressed ** Processing line: ~ move_player args, 0, 1 if args.inputs.keyboard.up # y position increases by 1 if up is pressed~ - Inside source: true *** True Line Result move_player args, 0, 1 if args.inputs.keyboard.up # y position increases by 1 if up is pressed ** Processing line: ~ move_player args, 0, -1 if args.inputs.keyboard.down # y position decreases by 1 if down is pressed~ - Inside source: true *** True Line Result move_player args, 0, -1 if args.inputs.keyboard.down # y position decreases by 1 if down is pressed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets position, size, and color of the tile~ - Inside source: true *** True Line Result # Sets position, size, and color of the tile ** Processing line: ~ def tile args, x, y, *color~ - Inside source: true *** True Line Result def tile args, x, y, *color ** Processing line: ~ [x * args.state.tile_size, # sets definition for array using method parameters~ - Inside source: true *** True Line Result [x * args.state.tile_size, # sets definition for array using method parameters ** Processing line: ~ y * args.state.tile_size, # multiplying by tile_size sets x and y to correct position using pixel values~ - Inside source: true *** True Line Result y * args.state.tile_size, # multiplying by tile_size sets x and y to correct position using pixel values ** Processing line: ~ args.state.tile_size,~ - Inside source: true *** True Line Result args.state.tile_size, ** Processing line: ~ args.state.tile_size,~ - Inside source: true *** True Line Result args.state.tile_size, ** Processing line: ~ *color]~ - Inside source: true *** True Line Result *color] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates map by adding tiles to the wall, as well as a goal (that the player needs to reach)~ - Inside source: true *** True Line Result # Creates map by adding tiles to the wall, as well as a goal (that the player needs to reach) ** Processing line: ~ def generate_map args~ - Inside source: true *** True Line Result def generate_map args ** Processing line: ~ return if args.state.area~ - Inside source: true *** True Line Result return if args.state.area ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Creates the area of the map. There are 9 rows running horizontally across the screen~ - Inside source: true *** True Line Result # Creates the area of the map. There are 9 rows running horizontally across the screen ** Processing line: ~ # and 16 columns running vertically on the screen. Any spot with a "1" is not~ - Inside source: true *** True Line Result # and 16 columns running vertically on the screen. Any spot with a "1" is not ** Processing line: ~ # open for the player to move into (and is green), and any spot with a "0" is available~ - Inside source: true *** True Line Result # open for the player to move into (and is green), and any spot with a "0" is available ** Processing line: ~ # for the player to move in.~ - Inside source: true *** True Line Result # for the player to move in. ** Processing line: ~ args.state.area = [~ - Inside source: true *** True Line Result args.state.area = [ ** Processing line: ~ [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,],~ - Inside source: true *** True Line Result [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,], ** Processing line: ~ [1, 1, 1, 2, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,], # the "2" represents the goal~ - Inside source: true *** True Line Result [1, 1, 1, 2, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,], # the "2" represents the goal ** Processing line: ~ [1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,],~ - Inside source: true *** True Line Result [1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,], ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,],~ - Inside source: true *** True Line Result [1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,], ** Processing line: ~ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,],~ - Inside source: true *** True Line Result [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,], ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,],~ - Inside source: true *** True Line Result [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,], ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,],~ - Inside source: true *** True Line Result [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,], ** Processing line: ~ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,],~ - Inside source: true *** True Line Result [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,], ** Processing line: ~ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],~ - Inside source: true *** True Line Result [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], ** Processing line: ~ ].reverse # reverses the order of the area collection~ - Inside source: true *** True Line Result ].reverse # reverses the order of the area collection ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # By reversing the order, the way that the area appears above is how it appears~ - Inside source: true *** True Line Result # By reversing the order, the way that the area appears above is how it appears ** Processing line: ~ # on the screen in the game. If we did not reverse, the map would appear inverted.~ - Inside source: true *** True Line Result # on the screen in the game. If we did not reverse, the map would appear inverted. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #The wall starts off with no tiles.~ - Inside source: true *** True Line Result #The wall starts off with no tiles. ** Processing line: ~ args.state.walls = []~ - Inside source: true *** True Line Result args.state.walls = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If v is 1, a green tile is added to args.state.walls.~ - Inside source: true *** True Line Result # If v is 1, a green tile is added to args.state.walls. ** Processing line: ~ # If v is 2, a black tile is created as the goal.~ - Inside source: true *** True Line Result # If v is 2, a black tile is created as the goal. ** Processing line: ~ args.state.area.map_2d do |y, x, v|~ - Inside source: true *** True Line Result args.state.area.map_2d do |y, x, v| ** Processing line: ~ if v == 1~ - Inside source: true *** True Line Result if v == 1 ** Processing line: ~ args.state.walls << tile(args, x, y, 0, 255, 0) # green tile~ - Inside source: true *** True Line Result args.state.walls << tile(args, x, y, 0, 255, 0) # green tile ** Processing line: ~ elsif v == 2 # notice there is only one "2" above because there is only one single goal~ - Inside source: true *** True Line Result elsif v == 2 # notice there is only one "2" above because there is only one single goal ** Processing line: ~ args.state.goal = tile(args, x, y, 0, 0, 0) # black tile~ - Inside source: true *** True Line Result args.state.goal = tile(args, x, y, 0, 0, 0) # black tile ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Allows the player to move their box around the screen~ - Inside source: true *** True Line Result # Allows the player to move their box around the screen ** Processing line: ~ def move_player args, *vector~ - Inside source: true *** True Line Result def move_player args, *vector ** Processing line: ~ box = args.state.player.shift_rect(vector) # box is able to move at an angle~ - Inside source: true *** True Line Result box = args.state.player.shift_rect(vector) # box is able to move at an angle ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If the player's box hits a wall, it is not able to move further in that direction~ - Inside source: true *** True Line Result # If the player's box hits a wall, it is not able to move further in that direction ** Processing line: ~ return if args.state.walls~ - Inside source: true *** True Line Result return if args.state.walls ** Processing line: ~ .any_intersect_rect?(box)~ - Inside source: true *** True Line Result .any_intersect_rect?(box) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Player's box is able to move at angles (not just the four general directions) fast~ - Inside source: true *** True Line Result # Player's box is able to move at angles (not just the four general directions) fast ** Processing line: ~ args.state.player =~ - Inside source: true *** True Line Result args.state.player = ** Processing line: ~ args.state.player~ - Inside source: true *** True Line Result args.state.player ** Processing line: ~ .shift_rect(vector.x * args.state.player_speed, # if we don't multiply by speed, then~ - Inside source: true *** True Line Result .shift_rect(vector.x * args.state.player_speed, # if we don't multiply by speed, then ** Processing line: ~ vector.y * args.state.player_speed) # the box will move extremely slow~ - Inside source: true *** True Line Result vector.y * args.state.player_speed) # the box will move extremely slow ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Teenytiny - Teenytiny Starting Point - main.rb~ - Header detected. *** True Line Result *** True Line Result *** Teenytiny - Teenytiny Starting Point - main.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_teenytiny/teenytiny_starting_point/app/main.rb~ - Inside source: true *** True Line Result # ./samples/99_genre_teenytiny/teenytiny_starting_point/app/main.rb ** Processing line: ~ # full documenation is at http://docs.dragonruby.org~ - Inside source: true *** True Line Result # full documenation is at http://docs.dragonruby.org ** Processing line: ~ # be sure to come to the discord if you hit any snags: http://discord.dragonruby.org~ - Inside source: true *** True Line Result # be sure to come to the discord if you hit any snags: http://discord.dragonruby.org ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # ====================================================~ - Inside source: true *** True Line Result # ==================================================== ** Processing line: ~ # initialize default variables~ - Inside source: true *** True Line Result # initialize default variables ** Processing line: ~ # ====================================================~ - Inside source: true *** True Line Result # ==================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ruby has an operator called ||= which means "only initialize this if it's nil"~ - Inside source: true *** True Line Result # ruby has an operator called ||= which means "only initialize this if it's nil" ** Processing line: ~ args.state.count_down ||= 20 * 60 # set the count down to 20 seconds~ - Inside source: true *** True Line Result args.state.count_down ||= 20 * 60 # set the count down to 20 seconds ** Processing line: ~ # set the initial position of the target~ - Inside source: true *** True Line Result # set the initial position of the target ** Processing line: ~ args.state.target ||= { x: args.grid.w.half,~ - Inside source: true *** True Line Result args.state.target ||= { x: args.grid.w.half, ** Processing line: ~ y: args.grid.h.half,~ - Inside source: true *** True Line Result y: args.grid.h.half, ** Processing line: ~ w: 20,~ - Inside source: true *** True Line Result w: 20, ** Processing line: ~ h: 20 }~ - Inside source: true *** True Line Result h: 20 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # set the initial position of the player~ - Inside source: true *** True Line Result # set the initial position of the player ** Processing line: ~ args.state.player ||= { x: 50,~ - Inside source: true *** True Line Result args.state.player ||= { x: 50, ** Processing line: ~ y: 50,~ - Inside source: true *** True Line Result y: 50, ** Processing line: ~ w: 20,~ - Inside source: true *** True Line Result w: 20, ** Processing line: ~ h: 20 }~ - Inside source: true *** True Line Result h: 20 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # set the player movement speed~ - Inside source: true *** True Line Result # set the player movement speed ** Processing line: ~ args.state.player_speed ||= 5~ - Inside source: true *** True Line Result args.state.player_speed ||= 5 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # set the score~ - Inside source: true *** True Line Result # set the score ** Processing line: ~ args.state.score ||= 0~ - Inside source: true *** True Line Result args.state.score ||= 0 ** Processing line: ~ args.state.teleports ||= 3~ - Inside source: true *** True Line Result args.state.teleports ||= 3 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # set the instructions~ - Inside source: true *** True Line Result # set the instructions ** Processing line: ~ args.state.instructions ||= "Get to the red goal! Use arrow keys to move. Spacebar to teleport (use them carefully)!"~ - Inside source: true *** True Line Result args.state.instructions ||= "Get to the red goal! Use arrow keys to move. Spacebar to teleport (use them carefully)!" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================~ - Inside source: true *** True Line Result # ==================================================== ** Processing line: ~ # render the game~ - Inside source: true *** True Line Result # render the game ** Processing line: ~ # ====================================================~ - Inside source: true *** True Line Result # ==================================================== ** Processing line: ~ args.outputs.labels << { x: args.grid.w.half, y: args.grid.h - 10,~ - Inside source: true *** True Line Result args.outputs.labels << { x: args.grid.w.half, y: args.grid.h - 10, ** Processing line: ~ text: args.state.instructions,~ - Inside source: true *** True Line Result text: args.state.instructions, ** Processing line: ~ alignment_enum: 1 }~ - Inside source: true *** True Line Result alignment_enum: 1 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # check if it's game over. if so, then render game over~ - Inside source: true *** True Line Result # check if it's game over. if so, then render game over ** Processing line: ~ # otherwise render the current time left~ - Inside source: true *** True Line Result # otherwise render the current time left ** Processing line: ~ if game_over? args~ - Inside source: true *** True Line Result if game_over? args ** Processing line: ~ args.outputs.labels << { x: args.grid.w.half,~ - Inside source: true *** True Line Result args.outputs.labels << { x: args.grid.w.half, ** Processing line: ~ y: args.grid.h - 40,~ - Inside source: true *** True Line Result y: args.grid.h - 40, ** Processing line: ~ text: "game over! (press r to start over)",~ - Inside source: true *** True Line Result text: "game over! (press r to start over)", ** Processing line: ~ alignment_enum: 1 }~ - Inside source: true *** True Line Result alignment_enum: 1 } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ args.outputs.labels << { x: args.grid.w.half,~ - Inside source: true *** True Line Result args.outputs.labels << { x: args.grid.w.half, ** Processing line: ~ y: args.grid.h - 40,~ - Inside source: true *** True Line Result y: args.grid.h - 40, ** Processing line: ~ text: "time left: #{(args.state.count_down.idiv 60) + 1}",~ - Inside source: true *** True Line Result text: "time left: #{(args.state.count_down.idiv 60) + 1}", ** Processing line: ~ alignment_enum: 1 }~ - Inside source: true *** True Line Result alignment_enum: 1 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render the score~ - Inside source: true *** True Line Result # render the score ** Processing line: ~ args.outputs.labels << { x: args.grid.w.half,~ - Inside source: true *** True Line Result args.outputs.labels << { x: args.grid.w.half, ** Processing line: ~ y: args.grid.h - 70,~ - Inside source: true *** True Line Result y: args.grid.h - 70, ** Processing line: ~ text: "score: #{args.state.score}",~ - Inside source: true *** True Line Result text: "score: #{args.state.score}", ** Processing line: ~ alignment_enum: 1 }~ - Inside source: true *** True Line Result alignment_enum: 1 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render the player with teleport count~ - Inside source: true *** True Line Result # render the player with teleport count ** Processing line: ~ args.outputs.sprites << { x: args.state.player.x,~ - Inside source: true *** True Line Result args.outputs.sprites << { x: args.state.player.x, ** Processing line: ~ y: args.state.player.y,~ - Inside source: true *** True Line Result y: args.state.player.y, ** Processing line: ~ w: args.state.player.w,~ - Inside source: true *** True Line Result w: args.state.player.w, ** Processing line: ~ h: args.state.player.h,~ - Inside source: true *** True Line Result h: args.state.player.h, ** Processing line: ~ path: 'sprites/square-green.png' }~ - Inside source: true *** True Line Result path: 'sprites/square-green.png' } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.labels << { x: args.state.player.x + 10,~ - Inside source: true *** True Line Result args.outputs.labels << { x: args.state.player.x + 10, ** Processing line: ~ y: args.state.player.y + 40,~ - Inside source: true *** True Line Result y: args.state.player.y + 40, ** Processing line: ~ text: "teleports: #{args.state.teleports}",~ - Inside source: true *** True Line Result text: "teleports: #{args.state.teleports}", ** Processing line: ~ alignment_enum: 1, size_enum: -2 }~ - Inside source: true *** True Line Result alignment_enum: 1, size_enum: -2 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render the target~ - Inside source: true *** True Line Result # render the target ** Processing line: ~ args.outputs.sprites << { x: args.state.target.x,~ - Inside source: true *** True Line Result args.outputs.sprites << { x: args.state.target.x, ** Processing line: ~ y: args.state.target.y,~ - Inside source: true *** True Line Result y: args.state.target.y, ** Processing line: ~ w: args.state.target.w,~ - Inside source: true *** True Line Result w: args.state.target.w, ** Processing line: ~ h: args.state.target.h,~ - Inside source: true *** True Line Result h: args.state.target.h, ** Processing line: ~ path: 'sprites/square-red.png' }~ - Inside source: true *** True Line Result path: 'sprites/square-red.png' } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================~ - Inside source: true *** True Line Result # ==================================================== ** Processing line: ~ # run simulation~ - Inside source: true *** True Line Result # run simulation ** Processing line: ~ # ====================================================~ - Inside source: true *** True Line Result # ==================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # count down calculation~ - Inside source: true *** True Line Result # count down calculation ** Processing line: ~ args.state.count_down -= 1~ - Inside source: true *** True Line Result args.state.count_down -= 1 ** Processing line: ~ args.state.count_down = -1 if args.state.count_down < -1~ - Inside source: true *** True Line Result args.state.count_down = -1 if args.state.count_down < -1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================~ - Inside source: true *** True Line Result # ==================================================== ** Processing line: ~ # process player input~ - Inside source: true *** True Line Result # process player input ** Processing line: ~ # ====================================================~ - Inside source: true *** True Line Result # ==================================================== ** Processing line: ~ # if it isn't game over let them move~ - Inside source: true *** True Line Result # if it isn't game over let them move ** Processing line: ~ if !game_over? args~ - Inside source: true *** True Line Result if !game_over? args ** Processing line: ~ dir_y = 0~ - Inside source: true *** True Line Result dir_y = 0 ** Processing line: ~ dir_x = 0~ - Inside source: true *** True Line Result dir_x = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # determine the change horizontally~ - Inside source: true *** True Line Result # determine the change horizontally ** Processing line: ~ if args.inputs.keyboard.up~ - Inside source: true *** True Line Result if args.inputs.keyboard.up ** Processing line: ~ dir_y += args.state.player_speed~ - Inside source: true *** True Line Result dir_y += args.state.player_speed ** Processing line: ~ elsif args.inputs.keyboard.down~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.down ** Processing line: ~ dir_y -= args.state.player_speed~ - Inside source: true *** True Line Result dir_y -= args.state.player_speed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # determine the change vertically~ - Inside source: true *** True Line Result # determine the change vertically ** Processing line: ~ if args.inputs.keyboard.left~ - Inside source: true *** True Line Result if args.inputs.keyboard.left ** Processing line: ~ dir_x -= args.state.player_speed~ - Inside source: true *** True Line Result dir_x -= args.state.player_speed ** Processing line: ~ elsif args.inputs.keyboard.right~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.right ** Processing line: ~ dir_x += args.state.player_speed~ - Inside source: true *** True Line Result dir_x += args.state.player_speed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # determine if teleport can be used~ - Inside source: true *** True Line Result # determine if teleport can be used ** Processing line: ~ if args.inputs.keyboard.key_down.space && args.state.teleports > 0~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.space && args.state.teleports > 0 ** Processing line: ~ args.state.teleports -= 1~ - Inside source: true *** True Line Result args.state.teleports -= 1 ** Processing line: ~ dir_x *= 20~ - Inside source: true *** True Line Result dir_x *= 20 ** Processing line: ~ dir_y *= 20~ - Inside source: true *** True Line Result dir_y *= 20 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # apply change to player~ - Inside source: true *** True Line Result # apply change to player ** Processing line: ~ args.state.player.x += dir_x~ - Inside source: true *** True Line Result args.state.player.x += dir_x ** Processing line: ~ args.state.player.y += dir_y~ - Inside source: true *** True Line Result args.state.player.y += dir_y ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ # if r is pressed, reset the game~ - Inside source: true *** True Line Result # if r is pressed, reset the game ** Processing line: ~ if args.inputs.keyboard.key_down.r~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.r ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # ====================================================~ - Inside source: true *** True Line Result # ==================================================== ** Processing line: ~ # determine score~ - Inside source: true *** True Line Result # determine score ** Processing line: ~ # ====================================================~ - Inside source: true *** True Line Result # ==================================================== ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # calculate new score if the player is at goal~ - Inside source: true *** True Line Result # calculate new score if the player is at goal ** Processing line: ~ if !game_over? args~ - Inside source: true *** True Line Result if !game_over? args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the player is at the goal, then move the goal~ - Inside source: true *** True Line Result # if the player is at the goal, then move the goal ** Processing line: ~ if args.state.player.intersect_rect? args.state.target~ - Inside source: true *** True Line Result if args.state.player.intersect_rect? args.state.target ** Processing line: ~ # increment the goal~ - Inside source: true *** True Line Result # increment the goal ** Processing line: ~ args.state.score += 1~ - Inside source: true *** True Line Result args.state.score += 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # move the goal to a random location~ - Inside source: true *** True Line Result # move the goal to a random location ** Processing line: ~ args.state.target = { x: (rand args.grid.w), y: (rand args.grid.h), w: 20, h: 20 }~ - Inside source: true *** True Line Result args.state.target = { x: (rand args.grid.w), y: (rand args.grid.h), w: 20, h: 20 } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # make sure the goal is inside the view area~ - Inside source: true *** True Line Result # make sure the goal is inside the view area ** Processing line: ~ if args.state.target.x < 0~ - Inside source: true *** True Line Result if args.state.target.x < 0 ** Processing line: ~ args.state.target.x += 20~ - Inside source: true *** True Line Result args.state.target.x += 20 ** Processing line: ~ elsif args.state.target.x > 1280~ - Inside source: true *** True Line Result elsif args.state.target.x > 1280 ** Processing line: ~ args.state.target.x -= 20~ - Inside source: true *** True Line Result args.state.target.x -= 20 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # make sure the goal is inside the view area~ - Inside source: true *** True Line Result # make sure the goal is inside the view area ** Processing line: ~ if args.state.target.y < 0~ - Inside source: true *** True Line Result if args.state.target.y < 0 ** Processing line: ~ args.state.target.y += 20~ - Inside source: true *** True Line Result args.state.target.y += 20 ** Processing line: ~ elsif args.state.target.y > 720~ - Inside source: true *** True Line Result elsif args.state.target.y > 720 ** Processing line: ~ args.state.target.y -= 20~ - Inside source: true *** True Line Result args.state.target.y -= 20 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def game_over? args~ - Inside source: true *** True Line Result def game_over? args ** Processing line: ~ args.state.count_down < 0~ - Inside source: true *** True Line Result args.state.count_down < 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** Teenytiny - Teenytiny Starting Point - license.txt~ - Header detected. *** True Line Result *** True Line Result *** Teenytiny - Teenytiny Starting Point - license.txt ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./samples/99_genre_teenytiny/teenytiny_starting_point/license.txt~ - Inside source: true *** True Line Result # ./samples/99_genre_teenytiny/teenytiny_starting_point/license.txt ** Processing line: ~ Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result Copyright 2019 DragonRuby LLC ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ MIT License~ - Inside source: true *** True Line Result MIT License ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:~ - Inside source: true *** True Line Result Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.~ - Inside source: true *** True Line Result The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.~ - Inside source: true *** True Line Result THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~** OSS~ - Header detected. *** True Line Result *** True Line Result ** OSS ** Processing line: ~Follows is a source code listing for all files that have been open sourced. This code can be found online at [[https://github.com/DragonRuby/dragonruby-game-toolkit-contrib/]].~ ** Processing line: ~*** api.rb~ - Header detected. *** True Line Result Follows is a source code listing for all files that have been open sourced. This code can be found online at [[https://github.com/DragonRuby/dragonruby-game-toolkit-contrib/]]. *** True Line Result *** api.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/api.rb~ - Inside source: true *** True Line Result # ./dragon/api.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # api.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # api.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Api~ - Inside source: true *** True Line Result class Api ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_api_autocomplete args, req~ - Inside source: true *** True Line Result def get_api_autocomplete args, req ** Processing line: ~ html = <<-S~ - Inside source: true *** True Line Result html = <<-S ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ DragonRuby Game Toolkit Documentation~ - Inside source: true *** True Line Result DragonRuby Game Toolkit Documentation ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~
~ - Inside source: true *** True Line Result ** Processing line: ~
index
~ - Inside source: true *** True Line Result
index
** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~
code
~ - Inside source: true *** True Line Result
code
** Processing line: ~ ~ - Inside source: true *** True Line Result end ** Processing line: ~
~ - Inside source: true *** True Line Result
** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~
~ - Inside source: true *** True Line Result ** Processing line: ~
~
- Inside source: true
*** True Line Result
        
** Processing line: ~        
~ - Inside source: true *** True Line Result
** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #{links}~ - Inside source: true *** True Line Result #{links} ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ html,~ - Inside source: true *** True Line Result html, ** Processing line: ~ { 'Content-Type' => 'text/html' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/html' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def post_api_autocomplete args, req~ - Inside source: true *** True Line Result def post_api_autocomplete args, req ** Processing line: ~ json = ($gtk.parse_json req.body)~ - Inside source: true *** True Line Result json = ($gtk.parse_json req.body) ** Processing line: ~ index = json["index"].to_i~ - Inside source: true *** True Line Result index = json["index"].to_i ** Processing line: ~ text = json["text"]~ - Inside source: true *** True Line Result text = json["text"] ** Processing line: ~ suggestions = args.gtk.suggest_autocompletion index: index, text: text~ - Inside source: true *** True Line Result suggestions = args.gtk.suggest_autocompletion index: index, text: text ** Processing line: ~ list_as_string = suggestions.join("\n")~ - Inside source: true *** True Line Result list_as_string = suggestions.join("\n") ** Processing line: ~ req.respond 200, list_as_string, { 'Content-Type' => 'text/plain' }~ - Inside source: true *** True Line Result req.respond 200, list_as_string, { 'Content-Type' => 'text/plain' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ define_method :links do~ - Inside source: true *** True Line Result define_method :links do ** Processing line: ~ <<-S~ - Inside source: true *** True Line Result <<-S ** Processing line: ~
    ~ - Inside source: true *** True Line Result
      ** Processing line: ~
    • Home
    • ~ - Inside source: true *** True Line Result
    • Home
    • ** Processing line: ~
    • Docs
    • ~ - Inside source: true *** True Line Result
    • Docs
    • ** Processing line: ~
    • Control Panel
    • ~ - Inside source: true *** True Line Result
    • Control Panel
    • ** Processing line: ~
    • Console
    • ~ - Inside source: true *** True Line Result
    • Console
    • ** Processing line: ~
    • Logs
    • ~ - Inside source: true *** True Line Result
    • Logs
    • ** Processing line: ~
    • Puts
    • ~ - Inside source: true *** True Line Result
    • Puts
    • ** Processing line: ~
    • Code
    • ~ - Inside source: true *** True Line Result
    • Code
    • ** Processing line: ~
    ~ - Inside source: true *** True Line Result
** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_index args, req~ - Inside source: true *** True Line Result def get_index args, req ** Processing line: ~ req.respond 200, <<-S, { 'Content-Type' => 'text/html' }~ - Inside source: true *** True Line Result req.respond 200, <<-S, { 'Content-Type' => 'text/html' } ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ DragonRuby Game Toolkit Documentation~ - Inside source: true *** True Line Result DragonRuby Game Toolkit Documentation ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ #{links}~ - Inside source: true *** True Line Result #{links} ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def source_code_links args~ - Inside source: true *** True Line Result def source_code_links args ** Processing line: ~ links = args.gtk.reload_list_history.keys.map do |f|~ - Inside source: true *** True Line Result links = args.gtk.reload_list_history.keys.map do |f| ** Processing line: ~ "
  • #{f}
  • "~ - Inside source: true *** True Line Result "
  • #{f}
  • " ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ <<-S~ - Inside source: true *** True Line Result <<-S ** Processing line: ~
      ~ - Inside source: true *** True Line Result
        ** Processing line: ~ #{links.join("\n")}~ - Inside source: true *** True Line Result #{links.join("\n")} ** Processing line: ~
      ~ - Inside source: true *** True Line Result
    ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_api_code args, req~ - Inside source: true *** True Line Result def get_api_code args, req ** Processing line: ~ view = <<-S~ - Inside source: true *** True Line Result view = <<-S ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ DragonRuby Game Toolkit Documentation~ - Inside source: true *** True Line Result DragonRuby Game Toolkit Documentation ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ #{source_code_links args}~ - Inside source: true *** True Line Result #{source_code_links args} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #{links}~ - Inside source: true *** True Line Result #{links} ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ view,~ - Inside source: true *** True Line Result view, ** Processing line: ~ { 'Content-Type' => 'text/html' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/html' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def code_edit_view args, file~ - Inside source: true *** True Line Result def code_edit_view args, file ** Processing line: ~ view = <<-S~ - Inside source: true *** True Line Result view = <<-S ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ DragonRuby Game Toolkit Documentation~ - Inside source: true *** True Line Result DragonRuby Game Toolkit Documentation ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result ** Processing line: ~
    #{file}:
    ~ - Inside source: true *** True Line Result
    #{file}:
    ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result
    ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result ** Processing line: ~ #{source_code_links args}~ - Inside source: true *** True Line Result #{source_code_links args} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #{links}~ - Inside source: true *** True Line Result #{links} ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_api_code_edit args, req~ - Inside source: true *** True Line Result def get_api_code_edit args, req ** Processing line: ~ file = req.uri.split('?').last.gsub("file=", "")~ - Inside source: true *** True Line Result file = req.uri.split('?').last.gsub("file=", "") ** Processing line: ~ view = code_edit_view args, file~ - Inside source: true *** True Line Result view = code_edit_view args, file ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ view,~ - Inside source: true *** True Line Result view, ** Processing line: ~ { 'Content-Type' => 'text/html' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/html' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def post_api_code_update args, req~ - Inside source: true *** True Line Result def post_api_code_update args, req ** Processing line: ~ file = req.uri.split('?').last.gsub("file=", "")~ - Inside source: true *** True Line Result file = req.uri.split('?').last.gsub("file=", "") ** Processing line: ~ code = ($gtk.parse_json req.body)["code"]~ - Inside source: true *** True Line Result code = ($gtk.parse_json req.body)["code"] ** Processing line: ~ args.gtk.write_file file, code~ - Inside source: true *** True Line Result args.gtk.write_file file, code ** Processing line: ~ view = code_edit_view args, file~ - Inside source: true *** True Line Result view = code_edit_view args, file ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ view,~ - Inside source: true *** True Line Result view, ** Processing line: ~ { 'Content-Type' => 'text/html' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/html' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_api_boot args, req~ - Inside source: true *** True Line Result def get_api_boot args, req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ args.gtk.read_file("tmp/src_backup/boot.txt"),~ - Inside source: true *** True Line Result args.gtk.read_file("tmp/src_backup/boot.txt"), ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/plain' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_api_trace args, req~ - Inside source: true *** True Line Result def get_api_trace args, req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ args.gtk.read_file("logs/trace.txt"),~ - Inside source: true *** True Line Result args.gtk.read_file("logs/trace.txt"), ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/plain' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_api_log args, req~ - Inside source: true *** True Line Result def get_api_log args, req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ args.gtk.read_file("logs/log.txt"),~ - Inside source: true *** True Line Result args.gtk.read_file("logs/log.txt"), ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/plain' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def post_api_log args, req~ - Inside source: true *** True Line Result def post_api_log args, req ** Processing line: ~ Log.log req.body~ - Inside source: true *** True Line Result Log.log req.body ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ "ok",~ - Inside source: true *** True Line Result "ok", ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/plain' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_api_puts args, req~ - Inside source: true *** True Line Result def get_api_puts args, req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ args.gtk.read_file("logs/puts.txt"),~ - Inside source: true *** True Line Result args.gtk.read_file("logs/puts.txt"), ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/plain' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_api_changes args, req~ - Inside source: true *** True Line Result def get_api_changes args, req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ args.gtk.read_file("tmp/src_backup/src_backup_changes.txt"),~ - Inside source: true *** True Line Result args.gtk.read_file("tmp/src_backup/src_backup_changes.txt"), ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/plain' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_favicon_ico args, req~ - Inside source: true *** True Line Result def get_favicon_ico args, req ** Processing line: ~ @favicon ||= args.gtk.read_file('docs/favicon.ico')~ - Inside source: true *** True Line Result @favicon ||= args.gtk.read_file('docs/favicon.ico') ** Processing line: ~ req.respond 200, @favicon, { "Content-Type" => 'image/x-icon' }~ - Inside source: true *** True Line Result req.respond 200, @favicon, { "Content-Type" => 'image/x-icon' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_src_backup args, req~ - Inside source: true *** True Line Result def get_src_backup args, req ** Processing line: ~ file_name = req.uri.gsub("/dragon/", "")~ - Inside source: true *** True Line Result file_name = req.uri.gsub("/dragon/", "") ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ args.gtk.read_file("tmp/src_backup/#{file_name}"),~ - Inside source: true *** True Line Result args.gtk.read_file("tmp/src_backup/#{file_name}"), ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/plain' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_not_found args, req~ - Inside source: true *** True Line Result def get_not_found args, req ** Processing line: ~ puts("METHOD: #{req.method}");~ - Inside source: true *** True Line Result puts("METHOD: #{req.method}"); ** Processing line: ~ puts("URI: #{req.uri}");~ - Inside source: true *** True Line Result puts("URI: #{req.uri}"); ** Processing line: ~ puts("HEADERS:");~ - Inside source: true *** True Line Result puts("HEADERS:"); ** Processing line: ~ req.headers.each { |k,v| puts(" #{k}: #{v}") }~ - Inside source: true *** True Line Result req.headers.each { |k,v| puts(" #{k}: #{v}") } ** Processing line: ~ req.respond 404, "not found: #{req.uri}", { }~ - Inside source: true *** True Line Result req.respond 404, "not found: #{req.uri}", { } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_docs_html args, req~ - Inside source: true *** True Line Result def get_docs_html args, req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ args.gtk.read_file("docs/docs.html"),~ - Inside source: true *** True Line Result args.gtk.read_file("docs/docs.html"), ** Processing line: ~ { 'Content-Type' => 'text/html' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/html' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_docs_css args, req~ - Inside source: true *** True Line Result def get_docs_css args, req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ args.gtk.read_file("docs/docs.css"),~ - Inside source: true *** True Line Result args.gtk.read_file("docs/docs.css"), ** Processing line: ~ { 'Content-Type' => 'text/css' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/css' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_docs_search_gif args, req~ - Inside source: true *** True Line Result def get_docs_search_gif args, req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ args.gtk.read_file("docs/docs_search.gif"),~ - Inside source: true *** True Line Result args.gtk.read_file("docs/docs_search.gif"), ** Processing line: ~ { 'Content-Type' => 'image/gif' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'image/gif' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_src_backup_index_html args, req~ - Inside source: true *** True Line Result def get_src_backup_index_html args, req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ args.gtk.read_file("/tmp/src_backup/src_backup_index.html"),~ - Inside source: true *** True Line Result args.gtk.read_file("/tmp/src_backup/src_backup_index.html"), ** Processing line: ~ { 'Content-Type' => 'text/html' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/html' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_src_backup_index_txt args, req~ - Inside source: true *** True Line Result def get_src_backup_index_txt args, req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ args.gtk.read_file("/tmp/src_backup/src_backup_index.txt"),~ - Inside source: true *** True Line Result args.gtk.read_file("/tmp/src_backup/src_backup_index.txt"), ** Processing line: ~ { 'Content-Type' => 'text/txt' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/txt' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_src_backup_css args, req~ - Inside source: true *** True Line Result def get_src_backup_css args, req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ args.gtk.read_file("/tmp/src_backup/src_backup.css"),~ - Inside source: true *** True Line Result args.gtk.read_file("/tmp/src_backup/src_backup.css"), ** Processing line: ~ { 'Content-Type' => 'text/css' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/css' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_src_backup_changes_html args, req~ - Inside source: true *** True Line Result def get_src_backup_changes_html args, req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ args.gtk.read_file("/tmp/src_backup/src_backup_changes.html"),~ - Inside source: true *** True Line Result args.gtk.read_file("/tmp/src_backup/src_backup_changes.html"), ** Processing line: ~ { 'Content-Type' => 'text/html' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/html' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_src_backup_changes_txt args, req~ - Inside source: true *** True Line Result def get_src_backup_changes_txt args, req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ args.gtk.read_file("/tmp/src_backup/src_backup_changes.txt"),~ - Inside source: true *** True Line Result args.gtk.read_file("/tmp/src_backup/src_backup_changes.txt"), ** Processing line: ~ { 'Content-Type' => 'text/txt' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/txt' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_api_eval args, req~ - Inside source: true *** True Line Result def get_api_eval args, req ** Processing line: ~ eval_view = <<-S~ - Inside source: true *** True Line Result eval_view = <<-S ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ Eval~ - Inside source: true *** True Line Result Eval ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result
    ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result ** Processing line: ~
    curl -H "Content-Type: application/json" --data '{ "code": "$result = $args.state" }' -X POST http://localhost:9001/dragon/eval/
    ~ - Inside source: true *** True Line Result
    curl -H "Content-Type: application/json" --data '{ "code": "$result = $args.state" }' -X POST http://localhost:9001/dragon/eval/
    ** Processing line: ~
    Eval Result:
    ~ - Inside source: true *** True Line Result
    Eval Result:
    ** Processing line: ~
    ~
    - Inside source: true
    *** True Line Result
          
    
    ** Processing line: ~      #{links}~
    - Inside source: true
    *** True Line Result
          #{links}
    ** Processing line: ~    ~
    - Inside source: true
    *** True Line Result
        
    ** Processing line: ~  ~
    - Inside source: true
    *** True Line Result
      
    ** Processing line: ~  S~
    - Inside source: true
    *** True Line Result
      S
    ** Processing line: ~        req.respond 200,~
    - Inside source: true
    *** True Line Result
            req.respond 200,
    ** Processing line: ~                    eval_view,~
    - Inside source: true
    *** True Line Result
                        eval_view,
    ** Processing line: ~                    { 'Content-Type' => 'text/html' }~
    - Inside source: true
    *** True Line Result
                        { 'Content-Type' => 'text/html' }
    ** Processing line: ~      end~
    - Inside source: true
    *** True Line Result
          end
    ** Processing line: ~~
    - Inside source: true
    *** True Line Result
    
    ** Processing line: ~      def post_api_eval args, req~
    - Inside source: true
    *** True Line Result
          def post_api_eval args, req
    ** Processing line: ~        if json? req~
    - Inside source: true
    *** True Line Result
            if json? req
    ** Processing line: ~          code = ($gtk.parse_json req.body)["code"]~
    - Inside source: true
    *** True Line Result
              code = ($gtk.parse_json req.body)["code"]
    ** Processing line: ~          code = code.gsub("$result", "$eval_result")~
    - Inside source: true
    *** True Line Result
              code = code.gsub("$result", "$eval_result")
    ** Processing line: ~          Object.new.instance_eval do~
    - Inside source: true
    *** True Line Result
              Object.new.instance_eval do
    ** Processing line: ~            begin~
    - Inside source: true
    *** True Line Result
                begin
    ** Processing line: ~              Kernel.eval code~
    - Inside source: true
    *** True Line Result
                  Kernel.eval code
    ** Processing line: ~            rescue Exception => e~
    - Inside source: true
    *** True Line Result
                rescue Exception => e
    ** Processing line: ~              $eval_result = e~
    - Inside source: true
    *** True Line Result
                  $eval_result = e
    ** Processing line: ~            end~
    - Inside source: true
    *** True Line Result
                end
    ** Processing line: ~          end~
    - Inside source: true
    *** True Line Result
              end
    ** Processing line: ~        end~
    - Inside source: true
    *** True Line Result
            end
    ** Processing line: ~~
    - Inside source: true
    *** True Line Result
    
    ** Processing line: ~        req.respond 200,~
    - Inside source: true
    *** True Line Result
            req.respond 200,
    ** Processing line: ~                    "#{$eval_result || $eval_results || "nil"}",~
    - Inside source: true
    *** True Line Result
                        "#{$eval_result || $eval_results || "nil"}",
    ** Processing line: ~                    { 'Content-Type' => 'text/plain' }~
    - Inside source: true
    *** True Line Result
                        { 'Content-Type' => 'text/plain' }
    ** Processing line: ~~
    - Inside source: true
    *** True Line Result
    
    ** Processing line: ~        $eval_result  = nil~
    - Inside source: true
    *** True Line Result
            $eval_result  = nil
    ** Processing line: ~        $eval_results = nil~
    - Inside source: true
    *** True Line Result
            $eval_results = nil
    ** Processing line: ~      end~
    - Inside source: true
    *** True Line Result
          end
    ** Processing line: ~~
    - Inside source: true
    *** True Line Result
    
    ** Processing line: ~      def api_css_string~
    - Inside source: true
    *** True Line Result
          def api_css_string
    ** Processing line: ~~
    - Inside source: true
    *** True Line Result
    
    ** Processing line: ~      end~
    - Inside source: true
    *** True Line Result
          end
    ** Processing line: ~~
    - Inside source: true
    *** True Line Result
    
    ** Processing line: ~      def get_api_console args, req~
    - Inside source: true
    *** True Line Result
          def get_api_console args, req
    ** Processing line: ~        html = console_view "# write your code here and set $result.\n$result = $gtk.args.state"~
    - Inside source: true
    *** True Line Result
            html = console_view "# write your code here and set $result.\n$result = $gtk.args.state"
    ** Processing line: ~        req.respond 200,~
    - Inside source: true
    *** True Line Result
            req.respond 200,
    ** Processing line: ~                    html,~
    - Inside source: true
    *** True Line Result
                        html,
    ** Processing line: ~                    { 'Content-Type' => 'text/html' }~
    - Inside source: true
    *** True Line Result
                        { 'Content-Type' => 'text/html' }
    ** Processing line: ~      end~
    - Inside source: true
    *** True Line Result
          end
    ** Processing line: ~~
    - Inside source: true
    *** True Line Result
    
    ** Processing line: ~      def control_panel_view~
    - Inside source: true
    *** True Line Result
          def control_panel_view
    ** Processing line: ~        <<-S~
    - Inside source: true
    *** True Line Result
            <<-S
    ** Processing line: ~  ~
    - Inside source: true
    *** True Line Result
      
    ** Processing line: ~    console~
    - Inside source: true
    *** True Line Result
        console
    ** Processing line: ~    ~
    - Inside source: true
    *** True Line Result
        
    ** Processing line: ~      ~
    - Inside source: true
    *** True Line Result
          
    ** Processing line: ~      
    ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result ** Processing line: ~
    ~ - Inside source: true *** True Line Result
    ** Processing line: ~ #{links}~ - Inside source: true *** True Line Result #{links} ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_api_control_panel args, req~ - Inside source: true *** True Line Result def get_api_control_panel args, req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ control_panel_view,~ - Inside source: true *** True Line Result control_panel_view, ** Processing line: ~ { 'Content-Type' => 'text/html' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/html' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def json? req~ - Inside source: true *** True Line Result def json? req ** Processing line: ~ req.headers.find { |k, v| k == "Content-Type" && (v.include? "application/json") }~ - Inside source: true *** True Line Result req.headers.find { |k, v| k == "Content-Type" && (v.include? "application/json") } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def post_api_reset args, req~ - Inside source: true *** True Line Result def post_api_reset args, req ** Processing line: ~ $gtk.reset if json? req~ - Inside source: true *** True Line Result $gtk.reset if json? req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ control_panel_view,~ - Inside source: true *** True Line Result control_panel_view, ** Processing line: ~ { 'Content-Type' => 'text/html' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/html' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def post_api_record args, req~ - Inside source: true *** True Line Result def post_api_record args, req ** Processing line: ~ $recording.start 100 if json? req~ - Inside source: true *** True Line Result $recording.start 100 if json? req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ control_panel_view,~ - Inside source: true *** True Line Result control_panel_view, ** Processing line: ~ { 'Content-Type' => 'text/html' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/html' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def post_api_record_stop args, req~ - Inside source: true *** True Line Result def post_api_record_stop args, req ** Processing line: ~ $recording.stop 'replay.txt' if json? req~ - Inside source: true *** True Line Result $recording.stop 'replay.txt' if json? req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ control_panel_view,~ - Inside source: true *** True Line Result control_panel_view, ** Processing line: ~ { 'Content-Type' => 'text/html' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/html' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def post_api_replay args, req~ - Inside source: true *** True Line Result def post_api_replay args, req ** Processing line: ~ $replay.start 'replay.txt' if json? req~ - Inside source: true *** True Line Result $replay.start 'replay.txt' if json? req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ control_panel_view,~ - Inside source: true *** True Line Result control_panel_view, ** Processing line: ~ { 'Content-Type' => 'text/html' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/html' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def post_api_show_console args, req~ - Inside source: true *** True Line Result def post_api_show_console args, req ** Processing line: ~ $gtk.console.show if json? req~ - Inside source: true *** True Line Result $gtk.console.show if json? req ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ control_panel_view,~ - Inside source: true *** True Line Result control_panel_view, ** Processing line: ~ { 'Content-Type' => 'text/html' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/html' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ args.inputs.http_requests.each do |req|~ - Inside source: true *** True Line Result args.inputs.http_requests.each do |req| ** Processing line: ~ match_candidate = { method: req.method.downcase.to_sym,~ - Inside source: true *** True Line Result match_candidate = { method: req.method.downcase.to_sym, ** Processing line: ~ uri: req.uri,~ - Inside source: true *** True Line Result uri: req.uri, ** Processing line: ~ uri_without_query_string: (req.uri.split '?').first,~ - Inside source: true *** True Line Result uri_without_query_string: (req.uri.split '?').first, ** Processing line: ~ query_string: (req.uri.split '?').last,~ - Inside source: true *** True Line Result query_string: (req.uri.split '?').last, ** Processing line: ~ has_query_string: !!(req.uri.split '?').last,~ - Inside source: true *** True Line Result has_query_string: !!(req.uri.split '?').last, ** Processing line: ~ has_api_prefix: (req.uri.start_with? "/dragon"),~ - Inside source: true *** True Line Result has_api_prefix: (req.uri.start_with? "/dragon"), ** Processing line: ~ end_with_rb: (req.uri.end_with? ".rb"),~ - Inside source: true *** True Line Result end_with_rb: (req.uri.end_with? ".rb"), ** Processing line: ~ has_file_extension: file_extensions.find { |f| req.uri.include? f },~ - Inside source: true *** True Line Result has_file_extension: file_extensions.find { |f| req.uri.include? f }, ** Processing line: ~ has_trailing_slash: (req.uri.split('?').first.end_with? "/") }~ - Inside source: true *** True Line Result has_trailing_slash: (req.uri.split('?').first.end_with? "/") } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !match_candidate[:has_file_extension]~ - Inside source: true *** True Line Result if !match_candidate[:has_file_extension] ** Processing line: ~ if !match_candidate[:has_trailing_slash]~ - Inside source: true *** True Line Result if !match_candidate[:has_trailing_slash] ** Processing line: ~ match_candidate[:uri] = match_candidate[:uri_without_query_string] + "/"~ - Inside source: true *** True Line Result match_candidate[:uri] = match_candidate[:uri_without_query_string] + "/" ** Processing line: ~ if match_candidate[:query_string]~ - Inside source: true *** True Line Result if match_candidate[:query_string] ** Processing line: ~ match_candidate[:uri] += "?#{match_candidate[:query_string]}"~ - Inside source: true *** True Line Result match_candidate[:uri] += "?#{match_candidate[:query_string]}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ context = { args: args, req: req, match_candidate: match_candidate }~ - Inside source: true *** True Line Result context = { args: args, req: req, match_candidate: match_candidate } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ process! context: context, routes: routes~ - Inside source: true *** True Line Result process! context: context, routes: routes ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def url_decode args, string~ - Inside source: true *** True Line Result def url_decode args, string ** Processing line: ~ args.fn.gsub string,~ - Inside source: true *** True Line Result args.fn.gsub string, ** Processing line: ~ '+', " ",~ - Inside source: true *** True Line Result '+', " ", ** Processing line: ~ '%27', "'",~ - Inside source: true *** True Line Result '%27', "'", ** Processing line: ~ '%22', '"',~ - Inside source: true *** True Line Result '%22', '"', ** Processing line: ~ '%0D%0A', "\n",~ - Inside source: true *** True Line Result '%0D%0A', "\n", ** Processing line: ~ '%3D', "=",~ - Inside source: true *** True Line Result '%3D', "=", ** Processing line: ~ '%3B', ";",~ - Inside source: true *** True Line Result '%3B', ";", ** Processing line: ~ '%7C', "|",~ - Inside source: true *** True Line Result '%7C', "|", ** Processing line: ~ '%28', "(",~ - Inside source: true *** True Line Result '%28', "(", ** Processing line: ~ '%29', ")",~ - Inside source: true *** True Line Result '%29', ")", ** Processing line: ~ '%7B', "{",~ - Inside source: true *** True Line Result '%7B', "{", ** Processing line: ~ '%7D', "}",~ - Inside source: true *** True Line Result '%7D', "}", ** Processing line: ~ '%2C', ",",~ - Inside source: true *** True Line Result '%2C', ",", ** Processing line: ~ '%3A', ":",~ - Inside source: true *** True Line Result '%3A', ":", ** Processing line: ~ '%5B', "[",~ - Inside source: true *** True Line Result '%5B', "[", ** Processing line: ~ '%5D', "]",~ - Inside source: true *** True Line Result '%5D', "]", ** Processing line: ~ '%23', "#",~ - Inside source: true *** True Line Result '%23', "#", ** Processing line: ~ '%21', "!",~ - Inside source: true *** True Line Result '%21', "!", ** Processing line: ~ '%3C', "<",~ - Inside source: true *** True Line Result '%3C', "<", ** Processing line: ~ '%3E', ">",~ - Inside source: true *** True Line Result '%3E', ">", ** Processing line: ~ '%2B', "+",~ - Inside source: true *** True Line Result '%2B', "+", ** Processing line: ~ '%2F', "/",~ - Inside source: true *** True Line Result '%2F', "/", ** Processing line: ~ '%40', "@",~ - Inside source: true *** True Line Result '%40', "@", ** Processing line: ~ '%3F', "?",~ - Inside source: true *** True Line Result '%3F', "?", ** Processing line: ~ '%26', "&",~ - Inside source: true *** True Line Result '%26', "&", ** Processing line: ~ '%24', "$",~ - Inside source: true *** True Line Result '%24', "$", ** Processing line: ~ '%5C', "\\",~ - Inside source: true *** True Line Result '%5C', "\\", ** Processing line: ~ '%60', "`",~ - Inside source: true *** True Line Result '%60', "`", ** Processing line: ~ '%7E', "~",~ - Inside source: true *** True Line Result '%7E', "~", ** Processing line: ~ '%C2%B2', "²",~ - Inside source: true *** True Line Result '%C2%B2', "²", ** Processing line: ~ '%5E', "^",~ - Inside source: true *** True Line Result '%5E', "^", ** Processing line: ~ '%C2%BA', "º",~ - Inside source: true *** True Line Result '%C2%BA', "º", ** Processing line: ~ '%C2%A7', "§",~ - Inside source: true *** True Line Result '%C2%A7', "§", ** Processing line: ~ '%20', " ",~ - Inside source: true *** True Line Result '%20', " ", ** Processing line: ~ '%0A', "\n",~ - Inside source: true *** True Line Result '%0A', "\n", ** Processing line: ~ '%25', "%",~ - Inside source: true *** True Line Result '%25', "%", ** Processing line: ~ '%2A', "*"~ - Inside source: true *** True Line Result '%2A', "*" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def file_extensions~ - Inside source: true *** True Line Result def file_extensions ** Processing line: ~ [".html", ".css", ".gif", ".txt", ".ico", ".rb"]~ - Inside source: true *** True Line Result [".html", ".css", ".gif", ".txt", ".ico", ".rb"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def routes~ - Inside source: true *** True Line Result def routes ** Processing line: ~ [{ match_criteria: { method: :get, uri: "/" },~ - Inside source: true *** True Line Result [{ match_criteria: { method: :get, uri: "/" }, ** Processing line: ~ handler: :get_index },~ - Inside source: true *** True Line Result handler: :get_index }, ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/dragon/" }, ** Processing line: ~ handler: :get_index },~ - Inside source: true *** True Line Result handler: :get_index }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/boot/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/dragon/boot/" }, ** Processing line: ~ handler: :get_api_boot },~ - Inside source: true *** True Line Result handler: :get_api_boot }, ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/trace/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/dragon/trace/" }, ** Processing line: ~ handler: :get_api_trace },~ - Inside source: true *** True Line Result handler: :get_api_trace }, ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/puts/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/dragon/puts/" }, ** Processing line: ~ handler: :get_api_puts },~ - Inside source: true *** True Line Result handler: :get_api_puts }, ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/log/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/dragon/log/" }, ** Processing line: ~ handler: :get_api_log },~ - Inside source: true *** True Line Result handler: :get_api_log }, ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/log/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :post, uri: "/dragon/log/" }, ** Processing line: ~ handler: :post_api_log },~ - Inside source: true *** True Line Result handler: :post_api_log }, ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/changes/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/dragon/changes/" }, ** Processing line: ~ handler: :get_api_changes },~ - Inside source: true *** True Line Result handler: :get_api_changes }, ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/eval/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/dragon/eval/" }, ** Processing line: ~ handler: :get_api_eval },~ - Inside source: true *** True Line Result handler: :get_api_eval }, ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/eval/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :post, uri: "/dragon/eval/" }, ** Processing line: ~ handler: :post_api_eval },~ - Inside source: true *** True Line Result handler: :post_api_eval }, ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/console/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/dragon/console/" }, ** Processing line: ~ handler: :get_api_console },~ - Inside source: true *** True Line Result handler: :get_api_console }, ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/console/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :post, uri: "/dragon/console/" }, ** Processing line: ~ handler: :post_api_console },~ - Inside source: true *** True Line Result handler: :post_api_console }, ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/control_panel/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/dragon/control_panel/" }, ** Processing line: ~ handler: :get_api_control_panel },~ - Inside source: true *** True Line Result handler: :get_api_control_panel }, ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/reset/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :post, uri: "/dragon/reset/" }, ** Processing line: ~ handler: :post_api_reset },~ - Inside source: true *** True Line Result handler: :post_api_reset }, ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/record/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :post, uri: "/dragon/record/" }, ** Processing line: ~ handler: :post_api_record },~ - Inside source: true *** True Line Result handler: :post_api_record }, ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/record_stop/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :post, uri: "/dragon/record_stop/" }, ** Processing line: ~ handler: :post_api_record_stop },~ - Inside source: true *** True Line Result handler: :post_api_record_stop }, ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/replay/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :post, uri: "/dragon/replay/" }, ** Processing line: ~ handler: :post_api_replay },~ - Inside source: true *** True Line Result handler: :post_api_replay }, ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/show_console/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :post, uri: "/dragon/show_console/" }, ** Processing line: ~ handler: :post_api_show_console },~ - Inside source: true *** True Line Result handler: :post_api_show_console }, ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/code/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/dragon/code/" }, ** Processing line: ~ handler: :get_api_code },~ - Inside source: true *** True Line Result handler: :get_api_code }, ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/autocomplete/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/dragon/autocomplete/" }, ** Processing line: ~ handler: :get_api_autocomplete },~ - Inside source: true *** True Line Result handler: :get_api_autocomplete }, ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/autocomplete/" },~ - Inside source: true *** True Line Result { match_criteria: { method: :post, uri: "/dragon/autocomplete/" }, ** Processing line: ~ handler: :post_api_autocomplete },~ - Inside source: true *** True Line Result handler: :post_api_autocomplete }, ** Processing line: ~ { match_criteria: { method: :get, uri_without_query_string: "/dragon/code/edit/", has_query_string: true },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri_without_query_string: "/dragon/code/edit/", has_query_string: true }, ** Processing line: ~ handler: :get_api_code_edit },~ - Inside source: true *** True Line Result handler: :get_api_code_edit }, ** Processing line: ~ { match_criteria: { method: :post, uri_without_query_string: "/dragon/code/update/", has_query_string: true },~ - Inside source: true *** True Line Result { match_criteria: { method: :post, uri_without_query_string: "/dragon/code/update/", has_query_string: true }, ** Processing line: ~ handler: :post_api_code_update },~ - Inside source: true *** True Line Result handler: :post_api_code_update }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { match_criteria: { method: :get, uri: "/docs.html" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/docs.html" }, ** Processing line: ~ handler: :get_docs_html },~ - Inside source: true *** True Line Result handler: :get_docs_html }, ** Processing line: ~ { match_criteria: { method: :get, uri_without_query_string: "/docs.css" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri_without_query_string: "/docs.css" }, ** Processing line: ~ handler: :get_docs_css },~ - Inside source: true *** True Line Result handler: :get_docs_css }, ** Processing line: ~ { match_criteria: { method: :get, uri: "/docs_search.gif" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/docs_search.gif" }, ** Processing line: ~ handler: :get_docs_search_gif },~ - Inside source: true *** True Line Result handler: :get_docs_search_gif }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { match_criteria: { method: :get, uri: "/src_backup_index.html" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/src_backup_index.html" }, ** Processing line: ~ handler: :get_src_backup_index_html },~ - Inside source: true *** True Line Result handler: :get_src_backup_index_html }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { match_criteria: { method: :get, uri: "/src_backup_index.txt" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/src_backup_index.txt" }, ** Processing line: ~ handler: :get_src_backup_index_txt },~ - Inside source: true *** True Line Result handler: :get_src_backup_index_txt }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { match_criteria: { method: :get, uri: "/src_backup_changes.html" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/src_backup_changes.html" }, ** Processing line: ~ handler: :get_src_backup_changes_html },~ - Inside source: true *** True Line Result handler: :get_src_backup_changes_html }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { match_criteria: { method: :get, uri: "/src_backup_changes.txt" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/src_backup_changes.txt" }, ** Processing line: ~ handler: :get_src_backup_changes_txt },~ - Inside source: true *** True Line Result handler: :get_src_backup_changes_txt }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { match_criteria: { method: :get, uri: "/src_backup.css" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/src_backup.css" }, ** Processing line: ~ handler: :get_src_backup_css },~ - Inside source: true *** True Line Result handler: :get_src_backup_css }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { match_criteria: { method: :get, uri: "/favicon.ico" },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, uri: "/favicon.ico" }, ** Processing line: ~ handler: :get_favicon_ico },~ - Inside source: true *** True Line Result handler: :get_favicon_ico }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { match_criteria: { method: :get, end_with_rb: true },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, end_with_rb: true }, ** Processing line: ~ handler: :get_src_backup },~ - Inside source: true *** True Line Result handler: :get_src_backup }, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { match_criteria: { method: :get, end_with_rb: true },~ - Inside source: true *** True Line Result { match_criteria: { method: :get, end_with_rb: true }, ** Processing line: ~ handler: :get_src_backup }~ - Inside source: true *** True Line Result handler: :get_src_backup } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process! opts~ - Inside source: true *** True Line Result def process! opts ** Processing line: ~ routes = opts[:routes]~ - Inside source: true *** True Line Result routes = opts[:routes] ** Processing line: ~ context = opts[:context]~ - Inside source: true *** True Line Result context = opts[:context] ** Processing line: ~ routes.each do |route|~ - Inside source: true *** True Line Result routes.each do |route| ** Processing line: ~ match_found = (process_single! route: route, context: context)~ - Inside source: true *** True Line Result match_found = (process_single! route: route, context: context) ** Processing line: ~ return if match_found~ - Inside source: true *** True Line Result return if match_found ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_single! opts~ - Inside source: true *** True Line Result def process_single! opts ** Processing line: ~ match_criteria = opts[:route][:match_criteria]~ - Inside source: true *** True Line Result match_criteria = opts[:route][:match_criteria] ** Processing line: ~ m = opts[:route][:handler]~ - Inside source: true *** True Line Result m = opts[:route][:handler] ** Processing line: ~ args = opts[:context][:args]~ - Inside source: true *** True Line Result args = opts[:context][:args] ** Processing line: ~ req = opts[:context][:req]~ - Inside source: true *** True Line Result req = opts[:context][:req] ** Processing line: ~ match_candidate = opts[:context][:match_candidate]~ - Inside source: true *** True Line Result match_candidate = opts[:context][:match_candidate] ** Processing line: ~ match_criteria.each do |k, v|~ - Inside source: true *** True Line Result match_criteria.each do |k, v| ** Processing line: ~ return false if match_candidate[k] != v~ - Inside source: true *** True Line Result return false if match_candidate[k] != v ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ begin~ - Inside source: true *** True Line Result begin ** Processing line: ~ send m, args, req~ - Inside source: true *** True Line Result send m, args, req ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ req.respond 200,~ - Inside source: true *** True Line Result req.respond 200, ** Processing line: ~ "#{e}\n#{e.__backtrace_to_org__}",~ - Inside source: true *** True Line Result "#{e}\n#{e.__backtrace_to_org__}", ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ - Inside source: true *** True Line Result { 'Content-Type' => 'text/plain' } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ return true~ - Inside source: true *** True Line Result return true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** args.rb~ - Header detected. *** True Line Result *** True Line Result *** args.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/args.rb~ - Inside source: true *** True Line Result # ./dragon/args.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # args.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # args.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ # This class is the one you'll interact with the most. It's~ - Inside source: true *** True Line Result # This class is the one you'll interact with the most. It's ** Processing line: ~ # constructed by the DragonRuby Runtime and is provided to you on~ - Inside source: true *** True Line Result # constructed by the DragonRuby Runtime and is provided to you on ** Processing line: ~ # each tick.~ - Inside source: true *** True Line Result # each tick. ** Processing line: ~ class Args~ - Inside source: true *** True Line Result class Args ** Processing line: ~ include ArgsDeprecated~ - Inside source: true *** True Line Result include ArgsDeprecated ** Processing line: ~ include Serialize~ - Inside source: true *** True Line Result include Serialize ** Processing line: ~ attr_accessor :cvars~ - Inside source: true *** True Line Result attr_accessor :cvars ** Processing line: ~ attr_accessor :inputs~ - Inside source: true *** True Line Result attr_accessor :inputs ** Processing line: ~ attr_accessor :outputs~ - Inside source: true *** True Line Result attr_accessor :outputs ** Processing line: ~ attr_accessor :audio~ - Inside source: true *** True Line Result attr_accessor :audio ** Processing line: ~ attr_accessor :grid~ - Inside source: true *** True Line Result attr_accessor :grid ** Processing line: ~ attr_accessor :recording~ - Inside source: true *** True Line Result attr_accessor :recording ** Processing line: ~ attr_accessor :geometry~ - Inside source: true *** True Line Result attr_accessor :geometry ** Processing line: ~ attr_accessor :fn~ - Inside source: true *** True Line Result attr_accessor :fn ** Processing line: ~ attr_accessor :state~ - Inside source: true *** True Line Result attr_accessor :state ** Processing line: ~ attr_accessor :temp_state~ - Inside source: true *** True Line Result attr_accessor :temp_state ** Processing line: ~ attr_accessor :runtime~ - Inside source: true *** True Line Result attr_accessor :runtime ** Processing line: ~ alias_method :gtk, :runtime~ - Inside source: true *** True Line Result alias_method :gtk, :runtime ** Processing line: ~ attr_accessor :passes~ - Inside source: true *** True Line Result attr_accessor :passes ** Processing line: ~ attr_accessor :wizards~ - Inside source: true *** True Line Result attr_accessor :wizards ** Processing line: ~ attr_accessor :layout~ - Inside source: true *** True Line Result attr_accessor :layout ** Processing line: ~ attr_accessor :easing~ - Inside source: true *** True Line Result attr_accessor :easing ** Processing line: ~ attr_accessor :string~ - Inside source: true *** True Line Result attr_accessor :string ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize runtime, recording~ - Inside source: true *** True Line Result def initialize runtime, recording ** Processing line: ~ @inputs = Inputs.new~ - Inside source: true *** True Line Result @inputs = Inputs.new ** Processing line: ~ @outputs = Outputs.new args: self~ - Inside source: true *** True Line Result @outputs = Outputs.new args: self ** Processing line: ~ @cvars = {}~ - Inside source: true *** True Line Result @cvars = {} ** Processing line: ~ @audio = {}~ - Inside source: true *** True Line Result @audio = {} ** Processing line: ~ @passes = []~ - Inside source: true *** True Line Result @passes = [] ** Processing line: ~ @state = OpenEntity.new~ - Inside source: true *** True Line Result @state = OpenEntity.new ** Processing line: ~ @temp_state = OpenEntity.new~ - Inside source: true *** True Line Result @temp_state = OpenEntity.new ** Processing line: ~ @state.tick_count = -1~ - Inside source: true *** True Line Result @state.tick_count = -1 ** Processing line: ~ @runtime = runtime~ - Inside source: true *** True Line Result @runtime = runtime ** Processing line: ~ @recording = recording~ - Inside source: true *** True Line Result @recording = recording ** Processing line: ~ @grid = Grid.new runtime~ - Inside source: true *** True Line Result @grid = Grid.new runtime ** Processing line: ~ @render_targets = {}~ - Inside source: true *** True Line Result @render_targets = {} ** Processing line: ~ @pixel_arrays = {}~ - Inside source: true *** True Line Result @pixel_arrays = {} ** Processing line: ~ @all_tests = []~ - Inside source: true *** True Line Result @all_tests = [] ** Processing line: ~ @geometry = GTK::Geometry~ - Inside source: true *** True Line Result @geometry = GTK::Geometry ** Processing line: ~ @fn = GTK::Fn~ - Inside source: true *** True Line Result @fn = GTK::Fn ** Processing line: ~ @wizards = Wizards.new~ - Inside source: true *** True Line Result @wizards = Wizards.new ** Processing line: ~ @layout = GTK::Layout.new @grid.w, @grid.h~ - Inside source: true *** True Line Result @layout = GTK::Layout.new @grid.w, @grid.h ** Processing line: ~ @easing = GTK::Easing~ - Inside source: true *** True Line Result @easing = GTK::Easing ** Processing line: ~ @string = String~ - Inside source: true *** True Line Result @string = String ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The number of ticks since the start of the game.~ - Inside source: true *** True Line Result # The number of ticks since the start of the game. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Integer]~ - Inside source: true *** True Line Result # @return [Integer] ** Processing line: ~ def tick_count~ - Inside source: true *** True Line Result def tick_count ** Processing line: ~ @state.tick_count~ - Inside source: true *** True Line Result @state.tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_count= value~ - Inside source: true *** True Line Result def tick_count= value ** Processing line: ~ @state.tick_count = value~ - Inside source: true *** True Line Result @state.tick_count = value ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ state: state.as_hash,~ - Inside source: true *** True Line Result state: state.as_hash, ** Processing line: ~ temp_state: temp_state.as_hash,~ - Inside source: true *** True Line Result temp_state: temp_state.as_hash, ** Processing line: ~ inputs: inputs.serialize,~ - Inside source: true *** True Line Result inputs: inputs.serialize, ** Processing line: ~ passes: passes.serialize,~ - Inside source: true *** True Line Result passes: passes.serialize, ** Processing line: ~ outputs: outputs.serialize,~ - Inside source: true *** True Line Result outputs: outputs.serialize, ** Processing line: ~ grid: grid.serialize~ - Inside source: true *** True Line Result grid: grid.serialize ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def destructure~ - Inside source: true *** True Line Result def destructure ** Processing line: ~ [grid, inputs, state, outputs, runtime, passes]~ - Inside source: true *** True Line Result [grid, inputs, state, outputs, runtime, passes] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def clear_pixel_arrays~ - Inside source: true *** True Line Result def clear_pixel_arrays ** Processing line: ~ pixel_arrays_clear~ - Inside source: true *** True Line Result pixel_arrays_clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def pixel_arrays_clear~ - Inside source: true *** True Line Result def pixel_arrays_clear ** Processing line: ~ @pixel_arrays = {}~ - Inside source: true *** True Line Result @pixel_arrays = {} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def pixel_arrays~ - Inside source: true *** True Line Result def pixel_arrays ** Processing line: ~ @pixel_arrays~ - Inside source: true *** True Line Result @pixel_arrays ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def pixel_array name~ - Inside source: true *** True Line Result def pixel_array name ** Processing line: ~ name = name.to_s~ - Inside source: true *** True Line Result name = name.to_s ** Processing line: ~ if !@pixel_arrays[name]~ - Inside source: true *** True Line Result if !@pixel_arrays[name] ** Processing line: ~ @pixel_arrays[name] = PixelArray.new~ - Inside source: true *** True Line Result @pixel_arrays[name] = PixelArray.new ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ @pixel_arrays[name]~ - Inside source: true *** True Line Result @pixel_arrays[name] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def clear_render_targets~ - Inside source: true *** True Line Result def clear_render_targets ** Processing line: ~ render_targets_clear~ - Inside source: true *** True Line Result render_targets_clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_targets_clear~ - Inside source: true *** True Line Result def render_targets_clear ** Processing line: ~ @render_targets = {}~ - Inside source: true *** True Line Result @render_targets = {} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_targets~ - Inside source: true *** True Line Result def render_targets ** Processing line: ~ @render_targets~ - Inside source: true *** True Line Result @render_targets ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_target name~ - Inside source: true *** True Line Result def render_target name ** Processing line: ~ name = name.to_s~ - Inside source: true *** True Line Result name = name.to_s ** Processing line: ~ if !@render_targets[name]~ - Inside source: true *** True Line Result if !@render_targets[name] ** Processing line: ~ @render_targets[name] = Outputs.new(args: self, target: name, background_color_override: [255, 255, 255, 0])~ - Inside source: true *** True Line Result @render_targets[name] = Outputs.new(args: self, target: name, background_color_override: [255, 255, 255, 0]) ** Processing line: ~ @passes << @render_targets[name]~ - Inside source: true *** True Line Result @passes << @render_targets[name] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ @render_targets[name]~ - Inside source: true *** True Line Result @render_targets[name] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def solids~ - Inside source: true *** True Line Result def solids ** Processing line: ~ @outputs.solids~ - Inside source: true *** True Line Result @outputs.solids ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def static_solids~ - Inside source: true *** True Line Result def static_solids ** Processing line: ~ @outputs.static_solids~ - Inside source: true *** True Line Result @outputs.static_solids ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def sprites~ - Inside source: true *** True Line Result def sprites ** Processing line: ~ @outputs.sprites~ - Inside source: true *** True Line Result @outputs.sprites ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def static_sprites~ - Inside source: true *** True Line Result def static_sprites ** Processing line: ~ @outputs.static_sprites~ - Inside source: true *** True Line Result @outputs.static_sprites ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def labels~ - Inside source: true *** True Line Result def labels ** Processing line: ~ @outputs.labels~ - Inside source: true *** True Line Result @outputs.labels ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def static_labels~ - Inside source: true *** True Line Result def static_labels ** Processing line: ~ @outputs.static_labels~ - Inside source: true *** True Line Result @outputs.static_labels ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def lines~ - Inside source: true *** True Line Result def lines ** Processing line: ~ @outputs.lines~ - Inside source: true *** True Line Result @outputs.lines ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def static_lines~ - Inside source: true *** True Line Result def static_lines ** Processing line: ~ @outputs.static_lines~ - Inside source: true *** True Line Result @outputs.static_lines ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def borders~ - Inside source: true *** True Line Result def borders ** Processing line: ~ @outputs.borders~ - Inside source: true *** True Line Result @outputs.borders ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def static_borders~ - Inside source: true *** True Line Result def static_borders ** Processing line: ~ @outputs.static_borders~ - Inside source: true *** True Line Result @outputs.static_borders ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def primitives~ - Inside source: true *** True Line Result def primitives ** Processing line: ~ @outputs.primitives~ - Inside source: true *** True Line Result @outputs.primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def static_primitives~ - Inside source: true *** True Line Result def static_primitives ** Processing line: ~ @outputs.static_primitives~ - Inside source: true *** True Line Result @outputs.static_primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def keyboard~ - Inside source: true *** True Line Result def keyboard ** Processing line: ~ @inputs.keyboard~ - Inside source: true *** True Line Result @inputs.keyboard ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def click~ - Inside source: true *** True Line Result def click ** Processing line: ~ return nil unless @inputs.mouse.click~ - Inside source: true *** True Line Result return nil unless @inputs.mouse.click ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @inputs.mouse.click.point~ - Inside source: true *** True Line Result @inputs.mouse.click.point ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def click_at~ - Inside source: true *** True Line Result def click_at ** Processing line: ~ return nil unless @inputs.mouse.click~ - Inside source: true *** True Line Result return nil unless @inputs.mouse.click ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @inputs.mouse.click.created_at~ - Inside source: true *** True Line Result @inputs.mouse.click.created_at ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mouse~ - Inside source: true *** True Line Result def mouse ** Processing line: ~ @inputs.mouse~ - Inside source: true *** True Line Result @inputs.mouse ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @see Inputs#controller_one~ - Inside source: true *** True Line Result # @see Inputs#controller_one ** Processing line: ~ # @return (see Inputs#controller_one)~ - Inside source: true *** True Line Result # @return (see Inputs#controller_one) ** Processing line: ~ def controller_one~ - Inside source: true *** True Line Result def controller_one ** Processing line: ~ @inputs.controller_one~ - Inside source: true *** True Line Result @inputs.controller_one ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @see Inputs#controller_two~ - Inside source: true *** True Line Result # @see Inputs#controller_two ** Processing line: ~ # @return (see Inputs#controller_two)~ - Inside source: true *** True Line Result # @return (see Inputs#controller_two) ** Processing line: ~ def controller_two~ - Inside source: true *** True Line Result def controller_two ** Processing line: ~ @inputs.controller_two~ - Inside source: true *** True Line Result @inputs.controller_two ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def autocomplete_methods~ - Inside source: true *** True Line Result def autocomplete_methods ** Processing line: ~ [:inputs, :outputs, :gtk, :state, :geometry, :audio, :grid, :layout, :fn]~ - Inside source: true *** True Line Result [:inputs, :outputs, :gtk, :state, :geometry, :audio, :grid, :layout, :fn] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def method_missing name, *args, &block~ - Inside source: true *** True Line Result def method_missing name, *args, &block ** Processing line: ~ if (args.length <= 1) && (@state.as_hash.key? name)~ - Inside source: true *** True Line Result if (args.length <= 1) && (@state.as_hash.key? name) ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ * ERROR - :#{name} method missing on ~#{self.class.name}~.~ - Inside source: true *** True Line Result * ERROR - :#{name} method missing on ~#{self.class.name}~. ** Processing line: ~ The method~ - Inside source: true *** True Line Result The method ** Processing line: ~ :#{name}~ - Inside source: true *** True Line Result :#{name} ** Processing line: ~ with args~ - Inside source: true *** True Line Result with args ** Processing line: ~ #{args}~ - Inside source: true *** True Line Result #{args} ** Processing line: ~ doesn't exist on #{inspect}.~ - Inside source: true *** True Line Result doesn't exist on #{inspect}. ** Processing line: ~ ** POSSIBLE SOLUTION - ~args.state.#{name}~ exists.~ - Inside source: true *** True Line Result ** POSSIBLE SOLUTION - ~args.state.#{name}~ exists. ** Processing line: ~ Did you forget ~.state~ before ~.#{name}~?~ - Inside source: true *** True Line Result Did you forget ~.state~ before ~.#{name}~? ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ super~ - Inside source: true *** True Line Result super ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** assert.rb~ - Header detected. *** True Line Result *** True Line Result *** assert.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/assert.rb~ - Inside source: true *** True Line Result # ./dragon/assert.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # assert.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # assert.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~ This is a tiny assertion api for the unit testing portion of Game Toolkit.~ - Inside source: true *** True Line Result This is a tiny assertion api for the unit testing portion of Game Toolkit. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @example~ - Inside source: true *** True Line Result @example ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ 1. Create a file called tests.rb under mygame.~ - Inside source: true *** True Line Result 1. Create a file called tests.rb under mygame. ** Processing line: ~ 2. Any method that begins with the word test_ will be considered a test.~ - Inside source: true *** True Line Result 2. Any method that begins with the word test_ will be considered a test. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_this_works args, assert~ - Inside source: true *** True Line Result def test_this_works args, assert ** Processing line: ~ assert.equal! 1, 1~ - Inside source: true *** True Line Result assert.equal! 1, 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ 3. To run a test, save the file while the game is running.~ - Inside source: true *** True Line Result 3. To run a test, save the file while the game is running. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @example~ - Inside source: true *** True Line Result @example ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ To add an assertion open up this class and write:~ - Inside source: true *** True Line Result To add an assertion open up this class and write: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Assert~ - Inside source: true *** True Line Result class Assert ** Processing line: ~ def custom_assertion actual, expected, message = nil~ - Inside source: true *** True Line Result def custom_assertion actual, expected, message = nil ** Processing line: ~ # this tells Game Toolkit that an assertion was performed (so that the test isn't marked inconclusive).~ - Inside source: true *** True Line Result # this tells Game Toolkit that an assertion was performed (so that the test isn't marked inconclusive). ** Processing line: ~ @assertion_performed = true~ - Inside source: true *** True Line Result @assertion_performed = true ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # perform your custom logic here and raise an exception to denote a failure.~ - Inside source: true *** True Line Result # perform your custom logic here and raise an exception to denote a failure. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ raise "Some Error. #{message}."~ - Inside source: true *** True Line Result raise "Some Error. #{message}." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~ class Assert~ - Inside source: true *** True Line Result class Assert ** Processing line: ~ attr :assertion_performed~ - Inside source: true *** True Line Result attr :assertion_performed ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~ Use this if you are throwing your own exceptions and you want to mark the tests as ran (so that it wont be marked as inconclusive).~ - Inside source: true *** True Line Result Use this if you are throwing your own exceptions and you want to mark the tests as ran (so that it wont be marked as inconclusive). ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~ def ok!~ - Inside source: true *** True Line Result def ok! ** Processing line: ~ @assertion_performed = true~ - Inside source: true *** True Line Result @assertion_performed = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~ Assert if a value is a truthy value. All assert methods take an optional final parameter that is the message to display to the user.~ - Inside source: true *** True Line Result Assert if a value is a truthy value. All assert methods take an optional final parameter that is the message to display to the user. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @example~ - Inside source: true *** True Line Result @example ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_does_this_work args, assert~ - Inside source: true *** True Line Result def test_does_this_work args, assert ** Processing line: ~ some_result = Person.new~ - Inside source: true *** True Line Result some_result = Person.new ** Processing line: ~ assert.true! some_result~ - Inside source: true *** True Line Result assert.true! some_result ** Processing line: ~ # OR~ - Inside source: true *** True Line Result # OR ** Processing line: ~ assert.true! some_result, "Person was not created."~ - Inside source: true *** True Line Result assert.true! some_result, "Person was not created." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~ def true! value, message = nil~ - Inside source: true *** True Line Result def true! value, message = nil ** Processing line: ~ @assertion_performed = true~ - Inside source: true *** True Line Result @assertion_performed = true ** Processing line: ~ if !value~ - Inside source: true *** True Line Result if !value ** Processing line: ~ message = "#{value} was not truthy.\n#{message}"~ - Inside source: true *** True Line Result message = "#{value} was not truthy.\n#{message}" ** Processing line: ~ raise "#{message}"~ - Inside source: true *** True Line Result raise "#{message}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~ Assert if a value is a falsey value.~ - Inside source: true *** True Line Result Assert if a value is a falsey value. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @example~ - Inside source: true *** True Line Result @example ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_does_this_work args, assert~ - Inside source: true *** True Line Result def test_does_this_work args, assert ** Processing line: ~ some_result = nil~ - Inside source: true *** True Line Result some_result = nil ** Processing line: ~ assert.false! some_result~ - Inside source: true *** True Line Result assert.false! some_result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~ def false! value, message = nil~ - Inside source: true *** True Line Result def false! value, message = nil ** Processing line: ~ @assertion_performed = true~ - Inside source: true *** True Line Result @assertion_performed = true ** Processing line: ~ if value~ - Inside source: true *** True Line Result if value ** Processing line: ~ message = "#{value} was not falsey.\n#{message}"~ - Inside source: true *** True Line Result message = "#{value} was not falsey.\n#{message}" ** Processing line: ~ raise message~ - Inside source: true *** True Line Result raise message ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~ Assert if two values are equal.~ - Inside source: true *** True Line Result Assert if two values are equal. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @example~ - Inside source: true *** True Line Result @example ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_does_this_work args, assert~ - Inside source: true *** True Line Result def test_does_this_work args, assert ** Processing line: ~ a = 1~ - Inside source: true *** True Line Result a = 1 ** Processing line: ~ b = 1~ - Inside source: true *** True Line Result b = 1 ** Processing line: ~ assert.equal! a, b~ - Inside source: true *** True Line Result assert.equal! a, b ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~ def equal! actual, expected, message = nil~ - Inside source: true *** True Line Result def equal! actual, expected, message = nil ** Processing line: ~ @assertion_performed = true~ - Inside source: true *** True Line Result @assertion_performed = true ** Processing line: ~ if actual != expected~ - Inside source: true *** True Line Result if actual != expected ** Processing line: ~ actual_string = "#{actual}#{actual.nil? ? " (nil) " : " " }".strip~ - Inside source: true *** True Line Result actual_string = "#{actual}#{actual.nil? ? " (nil) " : " " }".strip ** Processing line: ~ message = "actual:\n#{actual_string}\n\ndid not equal\n\nexpected:\n#{expected}\n#{message}"~ - Inside source: true *** True Line Result message = "actual:\n#{actual_string}\n\ndid not equal\n\nexpected:\n#{expected}\n#{message}" ** Processing line: ~ raise message~ - Inside source: true *** True Line Result raise message ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def not_equal! actual, expected, message = nil~ - Inside source: true *** True Line Result def not_equal! actual, expected, message = nil ** Processing line: ~ @assertion_performed = true~ - Inside source: true *** True Line Result @assertion_performed = true ** Processing line: ~ if actual == expected~ - Inside source: true *** True Line Result if actual == expected ** Processing line: ~ actual_string = "#{actual}#{actual.nil? ? " (nil) " : " " }".strip~ - Inside source: true *** True Line Result actual_string = "#{actual}#{actual.nil? ? " (nil) " : " " }".strip ** Processing line: ~ message = "actual:\n#{actual_string}\n\nequaled\n\nexpected:\n#{expected}\n#{message}"~ - Inside source: true *** True Line Result message = "actual:\n#{actual_string}\n\nequaled\n\nexpected:\n#{expected}\n#{message}" ** Processing line: ~ raise message~ - Inside source: true *** True Line Result raise message ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~ Assert if a value is explicitly nil (not false).~ - Inside source: true *** True Line Result Assert if a value is explicitly nil (not false). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @example~ - Inside source: true *** True Line Result @example ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_does_this_work args, assert~ - Inside source: true *** True Line Result def test_does_this_work args, assert ** Processing line: ~ a = nil~ - Inside source: true *** True Line Result a = nil ** Processing line: ~ b = false~ - Inside source: true *** True Line Result b = false ** Processing line: ~ assert.nil! a # this will pass~ - Inside source: true *** True Line Result assert.nil! a # this will pass ** Processing line: ~ assert.nil! b # this will throw an exception.~ - Inside source: true *** True Line Result assert.nil! b # this will throw an exception. ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~ def nil! value, message = nil~ - Inside source: true *** True Line Result def nil! value, message = nil ** Processing line: ~ @assertion_performed = true~ - Inside source: true *** True Line Result @assertion_performed = true ** Processing line: ~ if !value.nil?~ - Inside source: true *** True Line Result if !value.nil? ** Processing line: ~ message = "#{value} was supposed to be nil, but wasn't.\n#{message}"~ - Inside source: true *** True Line Result message = "#{value} was supposed to be nil, but wasn't.\n#{message}" ** Processing line: ~ raise message~ - Inside source: true *** True Line Result raise message ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** attr_gtk.rb~ - Header detected. *** True Line Result *** True Line Result *** attr_gtk.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/attr_gtk.rb~ - Inside source: true *** True Line Result # ./dragon/attr_gtk.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # attr_gtk.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # attr_gtk.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @private~ - Inside source: true *** True Line Result # @private ** Processing line: ~ module AttrGTK~ - Inside source: true *** True Line Result module AttrGTK ** Processing line: ~ attr_accessor :args~ - Inside source: true *** True Line Result attr_accessor :args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def keyboard~ - Inside source: true *** True Line Result def keyboard ** Processing line: ~ args.inputs.keyboard~ - Inside source: true *** True Line Result args.inputs.keyboard ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def grid~ - Inside source: true *** True Line Result def grid ** Processing line: ~ args.grid~ - Inside source: true *** True Line Result args.grid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def state~ - Inside source: true *** True Line Result def state ** Processing line: ~ args.state~ - Inside source: true *** True Line Result args.state ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def temp_state~ - Inside source: true *** True Line Result def temp_state ** Processing line: ~ args.temp_state~ - Inside source: true *** True Line Result args.temp_state ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inputs~ - Inside source: true *** True Line Result def inputs ** Processing line: ~ args.inputs~ - Inside source: true *** True Line Result args.inputs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def outputs~ - Inside source: true *** True Line Result def outputs ** Processing line: ~ args.outputs~ - Inside source: true *** True Line Result args.outputs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def gtk~ - Inside source: true *** True Line Result def gtk ** Processing line: ~ args.gtk~ - Inside source: true *** True Line Result args.gtk ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def passes~ - Inside source: true *** True Line Result def passes ** Processing line: ~ args.passes~ - Inside source: true *** True Line Result args.passes ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def pixel_arrays~ - Inside source: true *** True Line Result def pixel_arrays ** Processing line: ~ args.pixel_arrays~ - Inside source: true *** True Line Result args.pixel_arrays ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def geometry~ - Inside source: true *** True Line Result def geometry ** Processing line: ~ args.geometry~ - Inside source: true *** True Line Result args.geometry ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def layout~ - Inside source: true *** True Line Result def layout ** Processing line: ~ args.layout~ - Inside source: true *** True Line Result args.layout ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_entity entity_type, init_hash = nil, &block~ - Inside source: true *** True Line Result def new_entity entity_type, init_hash = nil, &block ** Processing line: ~ args.state.new_entity entity_type, init_hash, &block~ - Inside source: true *** True Line Result args.state.new_entity entity_type, init_hash, &block ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new_entity_strict entity_type, init_hash = nil, &block~ - Inside source: true *** True Line Result def new_entity_strict entity_type, init_hash = nil, &block ** Processing line: ~ args.state.new_entity_strict entity_type, init_hash, &block~ - Inside source: true *** True Line Result args.state.new_entity_strict entity_type, init_hash, &block ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** attr_sprite.rb~ - Header detected. *** True Line Result *** True Line Result *** attr_sprite.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/attr_sprite.rb~ - Inside source: true *** True Line Result # ./dragon/attr_sprite.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # attr_sprite.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # attr_sprite.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @private~ - Inside source: true *** True Line Result # @private ** Processing line: ~ module AttrRect~ - Inside source: true *** True Line Result module AttrRect ** Processing line: ~ include GTK::Geometry~ - Inside source: true *** True Line Result include GTK::Geometry ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def left~ - Inside source: true *** True Line Result def left ** Processing line: ~ (@x || self.x)~ - Inside source: true *** True Line Result (@x || self.x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def right~ - Inside source: true *** True Line Result def right ** Processing line: ~ (@x || self.x) + (@w || self.w)~ - Inside source: true *** True Line Result (@x || self.x) + (@w || self.w) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def bottom~ - Inside source: true *** True Line Result def bottom ** Processing line: ~ (@y || self.y)~ - Inside source: true *** True Line Result (@y || self.y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def top~ - Inside source: true *** True Line Result def top ** Processing line: ~ (@y || self.y) + (@h || self.h)~ - Inside source: true *** True Line Result (@y || self.y) + (@h || self.h) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def x1~ - Inside source: true *** True Line Result def x1 ** Processing line: ~ (@x || self.x)~ - Inside source: true *** True Line Result (@x || self.x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def y1~ - Inside source: true *** True Line Result def y1 ** Processing line: ~ (@y || self.y)~ - Inside source: true *** True Line Result (@y || self.y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module AttrSprite~ - Inside source: true *** True Line Result module AttrSprite ** Processing line: ~ include AttrRect~ - Inside source: true *** True Line Result include AttrRect ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ attr_accessor :x, :y, :w, :h, :path, :angle, :a, :r, :g, :b, :tile_x,~ - Inside source: true *** True Line Result attr_accessor :x, :y, :w, :h, :path, :angle, :a, :r, :g, :b, :tile_x, ** Processing line: ~ :tile_y, :tile_w, :tile_h, :flip_horizontally,~ - Inside source: true *** True Line Result :tile_y, :tile_w, :tile_h, :flip_horizontally, ** Processing line: ~ :flip_vertically, :angle_anchor_x, :angle_anchor_y, :id,~ - Inside source: true *** True Line Result :flip_vertically, :angle_anchor_x, :angle_anchor_y, :id, ** Processing line: ~ :source_x, :source_y, :source_w, :source_h, :blendmode_enum~ - Inside source: true *** True Line Result :source_x, :source_y, :source_w, :source_h, :blendmode_enum ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def primitive_marker~ - Inside source: true *** True Line Result def primitive_marker ** Processing line: ~ :sprite~ - Inside source: true *** True Line Result :sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def sprite~ - Inside source: true *** True Line Result def sprite ** Processing line: ~ self~ - Inside source: true *** True Line Result self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def x1= value~ - Inside source: true *** True Line Result def x1= value ** Processing line: ~ @x = value~ - Inside source: true *** True Line Result @x = value ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def y1= value~ - Inside source: true *** True Line Result def y1= value ** Processing line: ~ @y = value~ - Inside source: true *** True Line Result @y = value ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** console.rb~ - Header detected. *** True Line Result *** True Line Result *** console.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/console.rb~ - Inside source: true *** True Line Result # ./dragon/console.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # console.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # console.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright:~ - Inside source: true *** True Line Result # Contributors outside of DragonRuby who also hold Copyright: ** Processing line: ~ # - Kevin Fischer: https://github.com/kfischer-okarin~ - Inside source: true *** True Line Result # - Kevin Fischer: https://github.com/kfischer-okarin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Console~ - Inside source: true *** True Line Result class Console ** Processing line: ~ include ConsoleDeprecated~ - Inside source: true *** True Line Result include ConsoleDeprecated ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ attr_accessor :show_reason, :log, :logo,~ - Inside source: true *** True Line Result attr_accessor :show_reason, :log, :logo, ** Processing line: ~ :animation_duration,~ - Inside source: true *** True Line Result :animation_duration, ** Processing line: ~ :max_log_lines, :max_history, :log,~ - Inside source: true *** True Line Result :max_log_lines, :max_history, :log, ** Processing line: ~ :last_command_errored, :last_command, :shown_at,~ - Inside source: true *** True Line Result :last_command_errored, :last_command, :shown_at, ** Processing line: ~ :archived_log, :last_log_lines, :last_log_lines_count,~ - Inside source: true *** True Line Result :archived_log, :last_log_lines, :last_log_lines_count, ** Processing line: ~ :suppress_left_arrow_behavior, :command_set_at,~ - Inside source: true *** True Line Result :suppress_left_arrow_behavior, :command_set_at, ** Processing line: ~ :toast_ids, :bottom,~ - Inside source: true *** True Line Result :toast_ids, :bottom, ** Processing line: ~ :font_style, :menu,~ - Inside source: true *** True Line Result :font_style, :menu, ** Processing line: ~ :background_color, :spam_color, :text_color, :warn_color,~ - Inside source: true *** True Line Result :background_color, :spam_color, :text_color, :warn_color, ** Processing line: ~ :error_color, :header_color, :code_color, :comment_color,~ - Inside source: true *** True Line Result :error_color, :header_color, :code_color, :comment_color, ** Processing line: ~ :debug_color, :unfiltered_color~ - Inside source: true *** True Line Result :debug_color, :unfiltered_color ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @font_style = FontStyle.new(font: 'font.ttf', size_enum: -1.5, line_height: 1.1)~ - Inside source: true *** True Line Result @font_style = FontStyle.new(font: 'font.ttf', size_enum: -1.5, line_height: 1.1) ** Processing line: ~ @menu = Menu.new self~ - Inside source: true *** True Line Result @menu = Menu.new self ** Processing line: ~ @disabled = false~ - Inside source: true *** True Line Result @disabled = false ** Processing line: ~ @log_offset = 0~ - Inside source: true *** True Line Result @log_offset = 0 ** Processing line: ~ @visible = false~ - Inside source: true *** True Line Result @visible = false ** Processing line: ~ @toast_ids = []~ - Inside source: true *** True Line Result @toast_ids = [] ** Processing line: ~ @archived_log = []~ - Inside source: true *** True Line Result @archived_log = [] ** Processing line: ~ @log = [ 'Console ready.' ]~ - Inside source: true *** True Line Result @log = [ 'Console ready.' ] ** Processing line: ~ @max_log_lines = 1000 # I guess...?~ - Inside source: true *** True Line Result @max_log_lines = 1000 # I guess...? ** Processing line: ~ @max_history = 1000 # I guess...?~ - Inside source: true *** True Line Result @max_history = 1000 # I guess...? ** Processing line: ~ @log_invocation_count = 0~ - Inside source: true *** True Line Result @log_invocation_count = 0 ** Processing line: ~ @command_history = []~ - Inside source: true *** True Line Result @command_history = [] ** Processing line: ~ @command_history_index = -1~ - Inside source: true *** True Line Result @command_history_index = -1 ** Processing line: ~ @nonhistory_input = ''~ - Inside source: true *** True Line Result @nonhistory_input = '' ** Processing line: ~ @logo = 'console-logo.png'~ - Inside source: true *** True Line Result @logo = 'console-logo.png' ** Processing line: ~ @history_fname = 'logs/console_history.txt'~ - Inside source: true *** True Line Result @history_fname = 'logs/console_history.txt' ** Processing line: ~ @background_color = Color.new [0, 0, 0, 224]~ - Inside source: true *** True Line Result @background_color = Color.new [0, 0, 0, 224] ** Processing line: ~ @header_color = Color.new [100, 200, 220]~ - Inside source: true *** True Line Result @header_color = Color.new [100, 200, 220] ** Processing line: ~ @code_color = Color.new [210, 168, 255]~ - Inside source: true *** True Line Result @code_color = Color.new [210, 168, 255] ** Processing line: ~ @comment_color = Color.new [0, 200, 100]~ - Inside source: true *** True Line Result @comment_color = Color.new [0, 200, 100] ** Processing line: ~ @animation_duration = 1.seconds~ - Inside source: true *** True Line Result @animation_duration = 1.seconds ** Processing line: ~ @shown_at = -1~ - Inside source: true *** True Line Result @shown_at = -1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # these are the colors for text at various log levels.~ - Inside source: true *** True Line Result # these are the colors for text at various log levels. ** Processing line: ~ @spam_color = Color.new [160, 160, 160]~ - Inside source: true *** True Line Result @spam_color = Color.new [160, 160, 160] ** Processing line: ~ @debug_color = Color.new [0, 255, 0]~ - Inside source: true *** True Line Result @debug_color = Color.new [0, 255, 0] ** Processing line: ~ @text_color = Color.new [255, 255, 255]~ - Inside source: true *** True Line Result @text_color = Color.new [255, 255, 255] ** Processing line: ~ @warn_color = Color.new [255, 255, 0]~ - Inside source: true *** True Line Result @warn_color = Color.new [255, 255, 0] ** Processing line: ~ @error_color = Color.new [200, 50, 50]~ - Inside source: true *** True Line Result @error_color = Color.new [200, 50, 50] ** Processing line: ~ @unfiltered_color = Color.new [0, 255, 255]~ - Inside source: true *** True Line Result @unfiltered_color = Color.new [0, 255, 255] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ load_history~ - Inside source: true *** True Line Result load_history ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def console_text_width~ - Inside source: true *** True Line Result def console_text_width ** Processing line: ~ @console_text_width ||= ($gtk.logical_width - 20).idiv(font_style.letter_size.x)~ - Inside source: true *** True Line Result @console_text_width ||= ($gtk.logical_width - 20).idiv(font_style.letter_size.x) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def save_history~ - Inside source: true *** True Line Result def save_history ** Processing line: ~ $gtk.ffi_file.write_root @history_fname, (@command_history.reverse.join "\n")~ - Inside source: true *** True Line Result $gtk.ffi_file.write_root @history_fname, (@command_history.reverse.join "\n") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def load_history~ - Inside source: true *** True Line Result def load_history ** Processing line: ~ @command_history.clear~ - Inside source: true *** True Line Result @command_history.clear ** Processing line: ~ str = $gtk.ffi_file.read @history_fname~ - Inside source: true *** True Line Result str = $gtk.ffi_file.read @history_fname ** Processing line: ~ return if str.nil? # no history to load.~ - Inside source: true *** True Line Result return if str.nil? # no history to load. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ str.chomp!("\n") # Don't let endlines at the end cause extra blank line.~ - Inside source: true *** True Line Result str.chomp!("\n") # Don't let endlines at the end cause extra blank line. ** Processing line: ~ str.chomp!("\r")~ - Inside source: true *** True Line Result str.chomp!("\r") ** Processing line: ~ str.each_line { |s|~ - Inside source: true *** True Line Result str.each_line { |s| ** Processing line: ~ s.chomp!("\n")~ - Inside source: true *** True Line Result s.chomp!("\n") ** Processing line: ~ s.chomp!("\r")~ - Inside source: true *** True Line Result s.chomp!("\r") ** Processing line: ~ if s.length > 0~ - Inside source: true *** True Line Result if s.length > 0 ** Processing line: ~ @command_history.unshift s~ - Inside source: true *** True Line Result @command_history.unshift s ** Processing line: ~ break if @command_history.length >= @max_history~ - Inside source: true *** True Line Result break if @command_history.length >= @max_history ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @command_history.uniq!~ - Inside source: true *** True Line Result @command_history.uniq! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def disable~ - Inside source: true *** True Line Result def disable ** Processing line: ~ @disabled = true~ - Inside source: true *** True Line Result @disabled = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def enable~ - Inside source: true *** True Line Result def enable ** Processing line: ~ @disabled = false~ - Inside source: true *** True Line Result @disabled = false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def add_sprite obj~ - Inside source: true *** True Line Result def add_sprite obj ** Processing line: ~ @log_invocation_count += 1~ - Inside source: true *** True Line Result @log_invocation_count += 1 ** Processing line: ~ obj[:id] ||= "id_#{obj[:path]}_#{Time.now.to_i}".to_sym~ - Inside source: true *** True Line Result obj[:id] ||= "id_#{obj[:path]}_#{Time.now.to_i}".to_sym ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @last_line_log_index &&~ - Inside source: true *** True Line Result if @last_line_log_index && ** Processing line: ~ @last_sprite_line.is_a?(Hash) &&~ - Inside source: true *** True Line Result @last_sprite_line.is_a?(Hash) && ** Processing line: ~ @last_sprite_line[:id] == obj[:id]~ - Inside source: true *** True Line Result @last_sprite_line[:id] == obj[:id] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @log[@last_line_log_index] = obj~ - Inside source: true *** True Line Result @log[@last_line_log_index] = obj ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @log << obj~ - Inside source: true *** True Line Result @log << obj ** Processing line: ~ @last_line_log_index = @log.length - 1~ - Inside source: true *** True Line Result @last_line_log_index = @log.length - 1 ** Processing line: ~ @last_sprite_line = obj~ - Inside source: true *** True Line Result @last_sprite_line = obj ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def add_primitive obj~ - Inside source: true *** True Line Result def add_primitive obj ** Processing line: ~ if obj.is_a? Hash~ - Inside source: true *** True Line Result if obj.is_a? Hash ** Processing line: ~ add_sprite obj~ - Inside source: true *** True Line Result add_sprite obj ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ add_text obj~ - Inside source: true *** True Line Result add_text obj ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def add_text obj, loglevel=-1~ - Inside source: true *** True Line Result def add_text obj, loglevel=-1 ** Processing line: ~ # loglevel is one of the values of LogLevel in logging.h, or -1 to say "we don't care, colorize it with your special string parsing magic"~ - Inside source: true *** True Line Result # loglevel is one of the values of LogLevel in logging.h, or -1 to say "we don't care, colorize it with your special string parsing magic" ** Processing line: ~ loglevel = -1 if loglevel < 0~ - Inside source: true *** True Line Result loglevel = -1 if loglevel < 0 ** Processing line: ~ loglevel = 5 if loglevel > 5 # 5 == unfiltered (it's 0x7FFFFFFE in C, clamp it down)~ - Inside source: true *** True Line Result loglevel = 5 if loglevel > 5 # 5 == unfiltered (it's 0x7FFFFFFE in C, clamp it down) ** Processing line: ~ loglevel = 2 if (loglevel == -1) && obj.start_with?('!c!') # oh well~ - Inside source: true *** True Line Result loglevel = 2 if (loglevel == -1) && obj.start_with?('!c!') # oh well ** Processing line: ~ colorstr = (loglevel != -1) ? "!c!#{loglevel}" : nil~ - Inside source: true *** True Line Result colorstr = (loglevel != -1) ? "!c!#{loglevel}" : nil ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @last_log_lines_count ||= 1~ - Inside source: true *** True Line Result @last_log_lines_count ||= 1 ** Processing line: ~ @log_invocation_count += 1~ - Inside source: true *** True Line Result @log_invocation_count += 1 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ str = obj.to_s~ - Inside source: true *** True Line Result str = obj.to_s ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ log_lines = []~ - Inside source: true *** True Line Result log_lines = [] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ str.each_line do |s|~ - Inside source: true *** True Line Result str.each_line do |s| ** Processing line: ~ if colorstr.nil?~ - Inside source: true *** True Line Result if colorstr.nil? ** Processing line: ~ s.wrapped_lines(self.console_text_width).each do |l|~ - Inside source: true *** True Line Result s.wrapped_lines(self.console_text_width).each do |l| ** Processing line: ~ log_lines << l~ - Inside source: true *** True Line Result log_lines << l ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ s.wrapped_lines(self.console_text_width).each do |l|~ - Inside source: true *** True Line Result s.wrapped_lines(self.console_text_width).each do |l| ** Processing line: ~ log_lines << "#{colorstr}#{l}"~ - Inside source: true *** True Line Result log_lines << "#{colorstr}#{l}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if log_lines == @last_log_lines && log_lines.length != 0~ - Inside source: true *** True Line Result if log_lines == @last_log_lines && log_lines.length != 0 ** Processing line: ~ @last_log_lines_count += 1~ - Inside source: true *** True Line Result @last_log_lines_count += 1 ** Processing line: ~ new_log_line_with_count = @last_log_lines.last + " (#{@last_log_lines_count})"~ - Inside source: true *** True Line Result new_log_line_with_count = @last_log_lines.last + " (#{@last_log_lines_count})" ** Processing line: ~ if log_lines.length > 1~ - Inside source: true *** True Line Result if log_lines.length > 1 ** Processing line: ~ @log = @log[0..-(@log.length - log_lines.length)] + log_lines[0..-2] + [new_log_line_with_count]~ - Inside source: true *** True Line Result @log = @log[0..-(@log.length - log_lines.length)] + log_lines[0..-2] + [new_log_line_with_count] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ @log = @log[0..-2] + [new_log_line_with_count]~ - Inside source: true *** True Line Result @log = @log[0..-2] + [new_log_line_with_count] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ log_lines.each do |l|~ - Inside source: true *** True Line Result log_lines.each do |l| ** Processing line: ~ @log.shift if @log.length > @max_log_lines~ - Inside source: true *** True Line Result @log.shift if @log.length > @max_log_lines ** Processing line: ~ @log << l~ - Inside source: true *** True Line Result @log << l ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @last_log_lines_count = 1~ - Inside source: true *** True Line Result @last_log_lines_count = 1 ** Processing line: ~ @last_log_lines = log_lines~ - Inside source: true *** True Line Result @last_log_lines = log_lines ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def ready?~ - Inside source: true *** True Line Result def ready? ** Processing line: ~ visible? && @toggled_at.elapsed?(@animation_duration, Kernel.global_tick_count)~ - Inside source: true *** True Line Result visible? && @toggled_at.elapsed?(@animation_duration, Kernel.global_tick_count) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def hidden?~ - Inside source: true *** True Line Result def hidden? ** Processing line: ~ !@visible~ - Inside source: true *** True Line Result !@visible ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def visible?~ - Inside source: true *** True Line Result def visible? ** Processing line: ~ @visible~ - Inside source: true *** True Line Result @visible ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def open reason = nil~ - Inside source: true *** True Line Result def open reason = nil ** Processing line: ~ show reason~ - Inside source: true *** True Line Result show reason ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def show reason = nil~ - Inside source: true *** True Line Result def show reason = nil ** Processing line: ~ @shown_at = Kernel.global_tick_count~ - Inside source: true *** True Line Result @shown_at = Kernel.global_tick_count ** Processing line: ~ @show_reason = reason~ - Inside source: true *** True Line Result @show_reason = reason ** Processing line: ~ toggle if hidden?~ - Inside source: true *** True Line Result toggle if hidden? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def hide~ - Inside source: true *** True Line Result def hide ** Processing line: ~ if visible?~ - Inside source: true *** True Line Result if visible? ** Processing line: ~ toggle~ - Inside source: true *** True Line Result toggle ** Processing line: ~ @archived_log += @log~ - Inside source: true *** True Line Result @archived_log += @log ** Processing line: ~ if @archived_log.length > @max_log_lines~ - Inside source: true *** True Line Result if @archived_log.length > @max_log_lines ** Processing line: ~ @archived_log = @archived_log.drop(@archived_log.length - @max_log_lines)~ - Inside source: true *** True Line Result @archived_log = @archived_log.drop(@archived_log.length - @max_log_lines) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ @log.clear~ - Inside source: true *** True Line Result @log.clear ** Processing line: ~ @show_reason = nil~ - Inside source: true *** True Line Result @show_reason = nil ** Processing line: ~ clear_toast~ - Inside source: true *** True Line Result clear_toast ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def close~ - Inside source: true *** True Line Result def close ** Processing line: ~ hide~ - Inside source: true *** True Line Result hide ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def clear_toast~ - Inside source: true *** True Line Result def clear_toast ** Processing line: ~ @toasted_at = nil~ - Inside source: true *** True Line Result @toasted_at = nil ** Processing line: ~ @toast_duration = 0~ - Inside source: true *** True Line Result @toast_duration = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def toggle~ - Inside source: true *** True Line Result def toggle ** Processing line: ~ @visible = !@visible~ - Inside source: true *** True Line Result @visible = !@visible ** Processing line: ~ @toggled_at = Kernel.global_tick_count~ - Inside source: true *** True Line Result @toggled_at = Kernel.global_tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def currently_toasting?~ - Inside source: true *** True Line Result def currently_toasting? ** Processing line: ~ return false if hidden?~ - Inside source: true *** True Line Result return false if hidden? ** Processing line: ~ return false unless @show_reason == :toast~ - Inside source: true *** True Line Result return false unless @show_reason == :toast ** Processing line: ~ return false unless @toasted_at~ - Inside source: true *** True Line Result return false unless @toasted_at ** Processing line: ~ return false if @toasted_at.elapsed?(5.seconds, Kernel.global_tick_count)~ - Inside source: true *** True Line Result return false if @toasted_at.elapsed?(5.seconds, Kernel.global_tick_count) ** Processing line: ~ return true~ - Inside source: true *** True Line Result return true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def toast_extended id = nil, duration = nil, *messages~ - Inside source: true *** True Line Result def toast_extended id = nil, duration = nil, *messages ** Processing line: ~ if !id.is_a?(Symbol)~ - Inside source: true *** True Line Result if !id.is_a?(Symbol) ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ args.gtk.console.toast has the following signature:~ - Inside source: true *** True Line Result args.gtk.console.toast has the following signature: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def toast id, *messages~ - Inside source: true *** True Line Result def toast id, *messages ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ The id property uniquely defines the message and must be~ - Inside source: true *** True Line Result The id property uniquely defines the message and must be ** Processing line: ~ a symbol.~ - Inside source: true *** True Line Result a symbol. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ After that, you can provide all the objects you want to~ - Inside source: true *** True Line Result After that, you can provide all the objects you want to ** Processing line: ~ look at.~ - Inside source: true *** True Line Result look at. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Example:~ - Inside source: true *** True Line Result Example: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.gtk.console.toast :say_hello,~ - Inside source: true *** True Line Result args.gtk.console.toast :say_hello, ** Processing line: ~ \"Hello world.\",~ - Inside source: true *** True Line Result \"Hello world.\", ** Processing line: ~ args.state.tick_count~ - Inside source: true *** True Line Result args.state.tick_count ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Toast messages autohide after 5 seconds.~ - Inside source: true *** True Line Result Toast messages autohide after 5 seconds. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ If you need to look at something for longer, use~ - Inside source: true *** True Line Result If you need to look at something for longer, use ** Processing line: ~ args.gtk.console.perma_toast instead (which you can manually dismiss).~ - Inside source: true *** True Line Result args.gtk.console.perma_toast instead (which you can manually dismiss). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return if currently_toasting?~ - Inside source: true *** True Line Result return if currently_toasting? ** Processing line: ~ return if @toast_ids.include? id~ - Inside source: true *** True Line Result return if @toast_ids.include? id ** Processing line: ~ @toasted_at = Kernel.global_tick_count~ - Inside source: true *** True Line Result @toasted_at = Kernel.global_tick_count ** Processing line: ~ log_once_info :perma_toast_tip, "Use console.perma_toast to show the toast for longer."~ - Inside source: true *** True Line Result log_once_info :perma_toast_tip, "Use console.perma_toast to show the toast for longer." ** Processing line: ~ dwim_duration = 5.seconds~ - Inside source: true *** True Line Result dwim_duration = 5.seconds ** Processing line: ~ add_text "* toast :#{id}"~ - Inside source: true *** True Line Result add_text "* toast :#{id}" ** Processing line: ~ puts "* TOAST: :#{id}"~ - Inside source: true *** True Line Result puts "* TOAST: :#{id}" ** Processing line: ~ messages.each do |message|~ - Inside source: true *** True Line Result messages.each do |message| ** Processing line: ~ lines = message.to_s.wrapped_lines(self.console_text_width)~ - Inside source: true *** True Line Result lines = message.to_s.wrapped_lines(self.console_text_width) ** Processing line: ~ dwim_duration += lines.length.seconds~ - Inside source: true *** True Line Result dwim_duration += lines.length.seconds ** Processing line: ~ add_text "** #{message}"~ - Inside source: true *** True Line Result add_text "** #{message}" ** Processing line: ~ puts "** #{message}"~ - Inside source: true *** True Line Result puts "** #{message}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ show :toast~ - Inside source: true *** True Line Result show :toast ** Processing line: ~ @toast_duration += duration || dwim_duration~ - Inside source: true *** True Line Result @toast_duration += duration || dwim_duration ** Processing line: ~ @toast_ids << id~ - Inside source: true *** True Line Result @toast_ids << id ** Processing line: ~ set_command "$gtk.console.hide"~ - Inside source: true *** True Line Result set_command "$gtk.console.hide" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def perma_toast id = nil, messages~ - Inside source: true *** True Line Result def perma_toast id = nil, messages ** Processing line: ~ toast_extended id, 600.seconds, *messages~ - Inside source: true *** True Line Result toast_extended id, 600.seconds, *messages ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def toast id = nil, *messages~ - Inside source: true *** True Line Result def toast id = nil, *messages ** Processing line: ~ toast_extended id, nil, *messages~ - Inside source: true *** True Line Result toast_extended id, nil, *messages ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def console_toggle_keys~ - Inside source: true *** True Line Result def console_toggle_keys ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ :backtick!,~ - Inside source: true *** True Line Result :backtick!, ** Processing line: ~ :tilde!,~ - Inside source: true *** True Line Result :tilde!, ** Processing line: ~ :superscript_two!,~ - Inside source: true *** True Line Result :superscript_two!, ** Processing line: ~ :section_sign!,~ - Inside source: true *** True Line Result :section_sign!, ** Processing line: ~ :ordinal_indicator!,~ - Inside source: true *** True Line Result :ordinal_indicator!, ** Processing line: ~ :circumflex!,~ - Inside source: true *** True Line Result :circumflex!, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def console_toggle_key_down? args~ - Inside source: true *** True Line Result def console_toggle_key_down? args ** Processing line: ~ args.inputs.keyboard.key_down.any? console_toggle_keys~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.any? console_toggle_keys ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def try_search_docs exception~ - Inside source: true *** True Line Result def try_search_docs exception ** Processing line: ~ string_e = "#{exception}"~ - Inside source: true *** True Line Result string_e = "#{exception}" ** Processing line: ~ @last_command_errored = true~ - Inside source: true *** True Line Result @last_command_errored = true ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (string_e.include? "wrong number of arguments")~ - Inside source: true *** True Line Result if (string_e.include? "wrong number of arguments") ** Processing line: ~ method_name = ((string_e.split ":")[0].gsub "'", "")~ - Inside source: true *** True Line Result method_name = ((string_e.split ":")[0].gsub "'", "") ** Processing line: ~ if !(method_name.include? " ")~ - Inside source: true *** True Line Result if !(method_name.include? " ") ** Processing line: ~ results = (Kernel.__docs_search_results__ method_name)~ - Inside source: true *** True Line Result results = (Kernel.__docs_search_results__ method_name) ** Processing line: ~ if !results.include? "* DOCS: No results found."~ - Inside source: true *** True Line Result if !results.include? "* DOCS: No results found." ** Processing line: ~ puts (results.join "\n")~ - Inside source: true *** True Line Result puts (results.join "\n") ** Processing line: ~ puts <<-S~ - Inside source: true *** True Line Result puts <<-S ** Processing line: ~ * INFO: #{results.length} matches(s) found in DOCS for ~#{method_name}~ (see above).~ - Inside source: true *** True Line Result * INFO: #{results.length} matches(s) found in DOCS for ~#{method_name}~ (see above). ** Processing line: ~ You can search the documentation yourself using the following command in the Console:~ - Inside source: true *** True Line Result You can search the documentation yourself using the following command in the Console: ** Processing line: ~ #+begin_src ruby~ - Inside source: true *** True Line Result #+begin_src ruby ** Processing line: ~ docs_search \"#{method_name}\"~ - Inside source: true *** True Line Result docs_search \"#{method_name}\" ** Processing line: ~ #+end_src~ - Inside source: true *** True Line Result #+end_src ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ log_once_info :exported_search_results, "The search results above has been seen in logs/puts.txt and docs/search_results.txt."~ - Inside source: true *** True Line Result log_once_info :exported_search_results, "The search results above has been seen in logs/puts.txt and docs/search_results.txt." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue Exception => se~ - Inside source: true *** True Line Result rescue Exception => se ** Processing line: ~ puts <<-S~ - Inside source: true *** True Line Result puts <<-S ** Processing line: ~ * FATAL: ~GTK::Console#try_search_docs~~ - Inside source: true *** True Line Result * FATAL: ~GTK::Console#try_search_docs~ ** Processing line: ~ There was an exception searching for docs (~GTK::Console#try_search_docs~). You might want to let DragonRuby know about this.~ - Inside source: true *** True Line Result There was an exception searching for docs (~GTK::Console#try_search_docs~). You might want to let DragonRuby know about this. ** Processing line: ~ ** INNER EXCEPTION~ - Inside source: true *** True Line Result ** INNER EXCEPTION ** Processing line: ~ #{se}~ - Inside source: true *** True Line Result #{se} ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def eval_the_set_command~ - Inside source: true *** True Line Result def eval_the_set_command ** Processing line: ~ cmd = current_input_str.strip~ - Inside source: true *** True Line Result cmd = current_input_str.strip ** Processing line: ~ if cmd.length != 0~ - Inside source: true *** True Line Result if cmd.length != 0 ** Processing line: ~ @log_offset = 0~ - Inside source: true *** True Line Result @log_offset = 0 ** Processing line: ~ prompt.clear~ - Inside source: true *** True Line Result prompt.clear ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @command_history.pop while @command_history.length >= @max_history~ - Inside source: true *** True Line Result @command_history.pop while @command_history.length >= @max_history ** Processing line: ~ @command_history.unshift cmd~ - Inside source: true *** True Line Result @command_history.unshift cmd ** Processing line: ~ @command_history_index = -1~ - Inside source: true *** True Line Result @command_history_index = -1 ** Processing line: ~ @nonhistory_input = ''~ - Inside source: true *** True Line Result @nonhistory_input = '' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if cmd == 'quit' || cmd == ':wq' || cmd == ':q!' || cmd == ':q' || cmd == ':wqa'~ - Inside source: true *** True Line Result if cmd == 'quit' || cmd == ':wq' || cmd == ':q!' || cmd == ':q' || cmd == ':wqa' ** Processing line: ~ $gtk.request_quit~ - Inside source: true *** True Line Result $gtk.request_quit ** Processing line: ~ elsif cmd.start_with? ':'~ - Inside source: true *** True Line Result elsif cmd.start_with? ':' ** Processing line: ~ send ((cmd.gsub '-', '_').gsub ':', '')~ - Inside source: true *** True Line Result send ((cmd.gsub '-', '_').gsub ':', '') ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ puts "-> #{cmd}"~ - Inside source: true *** True Line Result puts "-> #{cmd}" ** Processing line: ~ begin~ - Inside source: true *** True Line Result begin ** Processing line: ~ @last_command = cmd~ - Inside source: true *** True Line Result @last_command = cmd ** Processing line: ~ Kernel.eval("$results = (#{cmd})")~ - Inside source: true *** True Line Result Kernel.eval("$results = (#{cmd})") ** Processing line: ~ if $results.nil?~ - Inside source: true *** True Line Result if $results.nil? ** Processing line: ~ puts "=> nil"~ - Inside source: true *** True Line Result puts "=> nil" ** Processing line: ~ elsif $results == :console_silent_eval~ - Inside source: true *** True Line Result elsif $results == :console_silent_eval ** Processing line: ~ # do nothing since the console is silent~ - Inside source: true *** True Line Result # do nothing since the console is silent ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ puts "=> #{$results}"~ - Inside source: true *** True Line Result puts "=> #{$results}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ @last_command_errored = false~ - Inside source: true *** True Line Result @last_command_errored = false ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ try_search_docs e~ - Inside source: true *** True Line Result try_search_docs e ** Processing line: ~ # if an exception is thrown and the bactrace includes something helpful, then show it~ - Inside source: true *** True Line Result # if an exception is thrown and the bactrace includes something helpful, then show it ** Processing line: ~ if (e.backtrace || []).first && (e.backtrace.first.include? "(eval)")~ - Inside source: true *** True Line Result if (e.backtrace || []).first && (e.backtrace.first.include? "(eval)") ** Processing line: ~ puts "* EXCEPTION: #{e}"~ - Inside source: true *** True Line Result puts "* EXCEPTION: #{e}" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ puts "* EXCEPTION: #{e}\n#{e.__backtrace_to_org__}"~ - Inside source: true *** True Line Result puts "* EXCEPTION: #{e}\n#{e.__backtrace_to_org__}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inputs_scroll_up_full? args~ - Inside source: true *** True Line Result def inputs_scroll_up_full? args ** Processing line: ~ return false if @disabled~ - Inside source: true *** True Line Result return false if @disabled ** Processing line: ~ args.inputs.keyboard.key_down.pageup ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.pageup || ** Processing line: ~ (args.inputs.keyboard.key_up.b && args.inputs.keyboard.key_up.control)~ - Inside source: true *** True Line Result (args.inputs.keyboard.key_up.b && args.inputs.keyboard.key_up.control) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def scroll_to_bottom~ - Inside source: true *** True Line Result def scroll_to_bottom ** Processing line: ~ @log_offset = 0~ - Inside source: true *** True Line Result @log_offset = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def scroll_up_full~ - Inside source: true *** True Line Result def scroll_up_full ** Processing line: ~ @log_offset += lines_on_one_page~ - Inside source: true *** True Line Result @log_offset += lines_on_one_page ** Processing line: ~ @log_offset = @log.size if @log_offset > @log.size~ - Inside source: true *** True Line Result @log_offset = @log.size if @log_offset > @log.size ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inputs_scroll_up_half? args~ - Inside source: true *** True Line Result def inputs_scroll_up_half? args ** Processing line: ~ return false if @disabled~ - Inside source: true *** True Line Result return false if @disabled ** Processing line: ~ args.inputs.keyboard.ctrl_u~ - Inside source: true *** True Line Result args.inputs.keyboard.ctrl_u ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def scroll_up_half~ - Inside source: true *** True Line Result def scroll_up_half ** Processing line: ~ @log_offset += lines_on_one_page.idiv(2)~ - Inside source: true *** True Line Result @log_offset += lines_on_one_page.idiv(2) ** Processing line: ~ @log_offset = @log.size if @log_offset > @log.size~ - Inside source: true *** True Line Result @log_offset = @log.size if @log_offset > @log.size ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inputs_scroll_down_full? args~ - Inside source: true *** True Line Result def inputs_scroll_down_full? args ** Processing line: ~ return false if @disabled~ - Inside source: true *** True Line Result return false if @disabled ** Processing line: ~ args.inputs.keyboard.key_down.pagedown ||~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.pagedown || ** Processing line: ~ (args.inputs.keyboard.key_up.f && args.inputs.keyboard.key_up.control)~ - Inside source: true *** True Line Result (args.inputs.keyboard.key_up.f && args.inputs.keyboard.key_up.control) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def scroll_down_full~ - Inside source: true *** True Line Result def scroll_down_full ** Processing line: ~ @log_offset -= lines_on_one_page~ - Inside source: true *** True Line Result @log_offset -= lines_on_one_page ** Processing line: ~ @log_offset = 0 if @log_offset < 0~ - Inside source: true *** True Line Result @log_offset = 0 if @log_offset < 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inputs_scroll_down_half? args~ - Inside source: true *** True Line Result def inputs_scroll_down_half? args ** Processing line: ~ return false if @disabled~ - Inside source: true *** True Line Result return false if @disabled ** Processing line: ~ args.inputs.keyboard.ctrl_d~ - Inside source: true *** True Line Result args.inputs.keyboard.ctrl_d ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inputs_clear_command? args~ - Inside source: true *** True Line Result def inputs_clear_command? args ** Processing line: ~ return false if @disabled~ - Inside source: true *** True Line Result return false if @disabled ** Processing line: ~ args.inputs.keyboard.escape || args.inputs.keyboard.ctrl_g~ - Inside source: true *** True Line Result args.inputs.keyboard.escape || args.inputs.keyboard.ctrl_g ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def scroll_down_half~ - Inside source: true *** True Line Result def scroll_down_half ** Processing line: ~ @log_offset -= lines_on_one_page.idiv(2)~ - Inside source: true *** True Line Result @log_offset -= lines_on_one_page.idiv(2) ** Processing line: ~ @log_offset = 0 if @log_offset < 0~ - Inside source: true *** True Line Result @log_offset = 0 if @log_offset < 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mouse_wheel_scroll args~ - Inside source: true *** True Line Result def mouse_wheel_scroll args ** Processing line: ~ @inertia ||= 0~ - Inside source: true *** True Line Result @inertia ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.mouse.wheel~ - Inside source: true *** True Line Result if args.inputs.mouse.wheel ** Processing line: ~ if args.inputs.mouse.wheel.y > 0~ - Inside source: true *** True Line Result if args.inputs.mouse.wheel.y > 0 ** Processing line: ~ @inertia = 1~ - Inside source: true *** True Line Result @inertia = 1 ** Processing line: ~ elsif args.inputs.mouse.wheel.y < 0~ - Inside source: true *** True Line Result elsif args.inputs.mouse.wheel.y < 0 ** Processing line: ~ @inertia = -1~ - Inside source: true *** True Line Result @inertia = -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.mouse.click~ - Inside source: true *** True Line Result if args.inputs.mouse.click ** Processing line: ~ @inertia = 0~ - Inside source: true *** True Line Result @inertia = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return if @inertia == 0~ - Inside source: true *** True Line Result return if @inertia == 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @inertia = (@inertia * 0.7)~ - Inside source: true *** True Line Result @inertia = (@inertia * 0.7) ** Processing line: ~ if @inertia > 0~ - Inside source: true *** True Line Result if @inertia > 0 ** Processing line: ~ @log_offset += 1~ - Inside source: true *** True Line Result @log_offset += 1 ** Processing line: ~ elsif @inertia < 0~ - Inside source: true *** True Line Result elsif @inertia < 0 ** Processing line: ~ @log_offset -= 1~ - Inside source: true *** True Line Result @log_offset -= 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @inertia.abs < 0.01~ - Inside source: true *** True Line Result if @inertia.abs < 0.01 ** Processing line: ~ @inertia = 0~ - Inside source: true *** True Line Result @inertia = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @log_offset > @log.size~ - Inside source: true *** True Line Result if @log_offset > @log.size ** Processing line: ~ @log_offset = @log.size~ - Inside source: true *** True Line Result @log_offset = @log.size ** Processing line: ~ elsif @log_offset < 0~ - Inside source: true *** True Line Result elsif @log_offset < 0 ** Processing line: ~ @log_offset = 0~ - Inside source: true *** True Line Result @log_offset = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def process_inputs args~ - Inside source: true *** True Line Result def process_inputs args ** Processing line: ~ if console_toggle_key_down? args~ - Inside source: true *** True Line Result if console_toggle_key_down? args ** Processing line: ~ args.inputs.text.clear~ - Inside source: true *** True Line Result args.inputs.text.clear ** Processing line: ~ toggle~ - Inside source: true *** True Line Result toggle ** Processing line: ~ args.inputs.keyboard.clear if !@visible~ - Inside source: true *** True Line Result args.inputs.keyboard.clear if !@visible ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless visible?~ - Inside source: true *** True Line Result return unless visible? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.inputs.text.each { |str| prompt << str }~ - Inside source: true *** True Line Result args.inputs.text.each { |str| prompt << str } ** Processing line: ~ args.inputs.text.clear~ - Inside source: true *** True Line Result args.inputs.text.clear ** Processing line: ~ mouse_wheel_scroll args~ - Inside source: true *** True Line Result mouse_wheel_scroll args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @log_offset = 0 if @log_offset < 0~ - Inside source: true *** True Line Result @log_offset = 0 if @log_offset < 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.keyboard.key_down.enter~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.enter ** Processing line: ~ if slide_progress > 0.5~ - Inside source: true *** True Line Result if slide_progress > 0.5 ** Processing line: ~ # in the event of an exception, the console window pops up~ - Inside source: true *** True Line Result # in the event of an exception, the console window pops up ** Processing line: ~ # and is pre-filled with $gtk.reset.~ - Inside source: true *** True Line Result # and is pre-filled with $gtk.reset. ** Processing line: ~ # there is an annoying scenario where the exception could be thrown~ - Inside source: true *** True Line Result # there is an annoying scenario where the exception could be thrown ** Processing line: ~ # by pressing enter (while playing the game). if you press enter again~ - Inside source: true *** True Line Result # by pressing enter (while playing the game). if you press enter again ** Processing line: ~ # quickly, then the game is reset which closes the console.~ - Inside source: true *** True Line Result # quickly, then the game is reset which closes the console. ** Processing line: ~ # so enter in the console is only evaluated if the slide_progress~ - Inside source: true *** True Line Result # so enter in the console is only evaluated if the slide_progress ** Processing line: ~ # is atleast half way down the page.~ - Inside source: true *** True Line Result # is atleast half way down the page. ** Processing line: ~ eval_the_set_command~ - Inside source: true *** True Line Result eval_the_set_command ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif args.inputs.keyboard.key_down.v~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.v ** Processing line: ~ if args.inputs.keyboard.key_down.control || args.inputs.keyboard.key_down.meta~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.control || args.inputs.keyboard.key_down.meta ** Processing line: ~ prompt << $gtk.ffi_misc.getclipboard~ - Inside source: true *** True Line Result prompt << $gtk.ffi_misc.getclipboard ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif args.inputs.keyboard.key_down.home~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.home ** Processing line: ~ prompt.move_cursor_home~ - Inside source: true *** True Line Result prompt.move_cursor_home ** Processing line: ~ elsif args.inputs.keyboard.key_down.end~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.end ** Processing line: ~ prompt.move_cursor_end~ - Inside source: true *** True Line Result prompt.move_cursor_end ** Processing line: ~ elsif args.inputs.keyboard.key_down.up~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.up ** Processing line: ~ if @command_history_index == -1~ - Inside source: true *** True Line Result if @command_history_index == -1 ** Processing line: ~ @nonhistory_input = current_input_str~ - Inside source: true *** True Line Result @nonhistory_input = current_input_str ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ if @command_history_index < (@command_history.length - 1)~ - Inside source: true *** True Line Result if @command_history_index < (@command_history.length - 1) ** Processing line: ~ @command_history_index += 1~ - Inside source: true *** True Line Result @command_history_index += 1 ** Processing line: ~ self.current_input_str = @command_history[@command_history_index].dup~ - Inside source: true *** True Line Result self.current_input_str = @command_history[@command_history_index].dup ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif args.inputs.keyboard.key_down.down~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.down ** Processing line: ~ if @command_history_index == 0~ - Inside source: true *** True Line Result if @command_history_index == 0 ** Processing line: ~ @command_history_index = -1~ - Inside source: true *** True Line Result @command_history_index = -1 ** Processing line: ~ self.current_input_str = @nonhistory_input~ - Inside source: true *** True Line Result self.current_input_str = @nonhistory_input ** Processing line: ~ @nonhistory_input = ''~ - Inside source: true *** True Line Result @nonhistory_input = '' ** Processing line: ~ elsif @command_history_index > 0~ - Inside source: true *** True Line Result elsif @command_history_index > 0 ** Processing line: ~ @command_history_index -= 1~ - Inside source: true *** True Line Result @command_history_index -= 1 ** Processing line: ~ self.current_input_str = @command_history[@command_history_index].dup~ - Inside source: true *** True Line Result self.current_input_str = @command_history[@command_history_index].dup ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif args.inputs.keyboard.key_down.left~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.left ** Processing line: ~ if args.inputs.keyboard.key_down.control~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.control ** Processing line: ~ prompt.move_cursor_left_word~ - Inside source: true *** True Line Result prompt.move_cursor_left_word ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ prompt.move_cursor_left~ - Inside source: true *** True Line Result prompt.move_cursor_left ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif args.inputs.keyboard.key_down.right~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.right ** Processing line: ~ if args.inputs.keyboard.key_down.control~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.control ** Processing line: ~ prompt.move_cursor_right_word~ - Inside source: true *** True Line Result prompt.move_cursor_right_word ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ prompt.move_cursor_right~ - Inside source: true *** True Line Result prompt.move_cursor_right ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif inputs_scroll_up_full? args~ - Inside source: true *** True Line Result elsif inputs_scroll_up_full? args ** Processing line: ~ scroll_up_full~ - Inside source: true *** True Line Result scroll_up_full ** Processing line: ~ elsif inputs_scroll_down_full? args~ - Inside source: true *** True Line Result elsif inputs_scroll_down_full? args ** Processing line: ~ scroll_down_full~ - Inside source: true *** True Line Result scroll_down_full ** Processing line: ~ elsif inputs_scroll_up_half? args~ - Inside source: true *** True Line Result elsif inputs_scroll_up_half? args ** Processing line: ~ scroll_up_half~ - Inside source: true *** True Line Result scroll_up_half ** Processing line: ~ elsif inputs_scroll_down_half? args~ - Inside source: true *** True Line Result elsif inputs_scroll_down_half? args ** Processing line: ~ scroll_down_half~ - Inside source: true *** True Line Result scroll_down_half ** Processing line: ~ elsif inputs_clear_command? args~ - Inside source: true *** True Line Result elsif inputs_clear_command? args ** Processing line: ~ prompt.clear~ - Inside source: true *** True Line Result prompt.clear ** Processing line: ~ @command_history_index = -1~ - Inside source: true *** True Line Result @command_history_index = -1 ** Processing line: ~ @nonhistory_input = ''~ - Inside source: true *** True Line Result @nonhistory_input = '' ** Processing line: ~ elsif args.inputs.keyboard.key_down.backspace~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.backspace ** Processing line: ~ prompt.backspace~ - Inside source: true *** True Line Result prompt.backspace ** Processing line: ~ elsif args.inputs.keyboard.key_down.delete~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.delete ** Processing line: ~ prompt.delete~ - Inside source: true *** True Line Result prompt.delete ** Processing line: ~ elsif args.inputs.keyboard.key_down.tab~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.tab ** Processing line: ~ prompt.autocomplete~ - Inside source: true *** True Line Result prompt.autocomplete ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.inputs.keyboard.key_down.clear~ - Inside source: true *** True Line Result args.inputs.keyboard.key_down.clear ** Processing line: ~ args.inputs.keyboard.key_up.clear~ - Inside source: true *** True Line Result args.inputs.keyboard.key_up.clear ** Processing line: ~ args.inputs.keyboard.key_held.clear~ - Inside source: true *** True Line Result args.inputs.keyboard.key_held.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def write_primitive_and_return_offset(args, left, y, str, archived: false)~ - Inside source: true *** True Line Result def write_primitive_and_return_offset(args, left, y, str, archived: false) ** Processing line: ~ if str.is_a?(Hash)~ - Inside source: true *** True Line Result if str.is_a?(Hash) ** Processing line: ~ padding = 10~ - Inside source: true *** True Line Result padding = 10 ** Processing line: ~ args.outputs.reserved << [left + 10, y + 5, str[:w], str[:h], str[:path]].sprite~ - Inside source: true *** True Line Result args.outputs.reserved << [left + 10, y + 5, str[:w], str[:h], str[:path]].sprite ** Processing line: ~ return str[:h] + padding~ - Inside source: true *** True Line Result return str[:h] + padding ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ write_line args, left, y, str, archived: archived~ - Inside source: true *** True Line Result write_line args, left, y, str, archived: archived ** Processing line: ~ return line_height_px~ - Inside source: true *** True Line Result return line_height_px ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def write_line(args, left, y, str, archived: false)~ - Inside source: true *** True Line Result def write_line(args, left, y, str, archived: false) ** Processing line: ~ color = color_for_log_entry(str)~ - Inside source: true *** True Line Result color = color_for_log_entry(str) ** Processing line: ~ color = color.mult_alpha(0.5) if archived~ - Inside source: true *** True Line Result color = color.mult_alpha(0.5) if archived ** Processing line: ~ str = str[4..-1] if str.start_with?('!c!') # chop off loglevel color~ - Inside source: true *** True Line Result str = str[4..-1] if str.start_with?('!c!') # chop off loglevel color ** Processing line: ~ args.outputs.reserved << font_style.label(x: left.shift_right(10), y: y, text: str, color: color)~ - Inside source: true *** True Line Result args.outputs.reserved << font_style.label(x: left.shift_right(10), y: y, text: str, color: color) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def should_tick?~ - Inside source: true *** True Line Result def should_tick? ** Processing line: ~ return false if !@toggled_at~ - Inside source: true *** True Line Result return false if !@toggled_at ** Processing line: ~ return false if slide_progress == 0~ - Inside source: true *** True Line Result return false if slide_progress == 0 ** Processing line: ~ return false if @disabled~ - Inside source: true *** True Line Result return false if @disabled ** Processing line: ~ return visible?~ - Inside source: true *** True Line Result return visible? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render args~ - Inside source: true *** True Line Result def render args ** Processing line: ~ return if !@toggled_at~ - Inside source: true *** True Line Result return if !@toggled_at ** Processing line: ~ return if slide_progress == 0~ - Inside source: true *** True Line Result return if slide_progress == 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @bottom = top - (h * slide_progress)~ - Inside source: true *** True Line Result @bottom = top - (h * slide_progress) ** Processing line: ~ args.outputs.reserved << [left, @bottom, w, h, *@background_color.mult_alpha(slide_progress)].solid~ - Inside source: true *** True Line Result args.outputs.reserved << [left, @bottom, w, h, *@background_color.mult_alpha(slide_progress)].solid ** Processing line: ~ args.outputs.reserved << [right.shift_left(110), @bottom.shift_up(630), 100, 100, @logo, 0, (80.0 * slide_progress).to_i].sprite~ - Inside source: true *** True Line Result args.outputs.reserved << [right.shift_left(110), @bottom.shift_up(630), 100, 100, @logo, 0, (80.0 * slide_progress).to_i].sprite ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ y = @bottom + 2 # just give us a little padding at the bottom.~ - Inside source: true *** True Line Result y = @bottom + 2 # just give us a little padding at the bottom. ** Processing line: ~ prompt.render args, x: left.shift_right(10), y: y~ - Inside source: true *** True Line Result prompt.render args, x: left.shift_right(10), y: y ** Processing line: ~ y += line_height_px * 1.5~ - Inside source: true *** True Line Result y += line_height_px * 1.5 ** Processing line: ~ args.outputs.reserved << line(y: y, color: @text_color.mult_alpha(slide_progress))~ - Inside source: true *** True Line Result args.outputs.reserved << line(y: y, color: @text_color.mult_alpha(slide_progress)) ** Processing line: ~ y += line_height_px.to_f / 2.0~ - Inside source: true *** True Line Result y += line_height_px.to_f / 2.0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ((@log.size - @log_offset) - 1).downto(0) do |idx|~ - Inside source: true *** True Line Result ((@log.size - @log_offset) - 1).downto(0) do |idx| ** Processing line: ~ offset_after_write = write_primitive_and_return_offset args, left, y, @log[idx]~ - Inside source: true *** True Line Result offset_after_write = write_primitive_and_return_offset args, left, y, @log[idx] ** Processing line: ~ y += offset_after_write~ - Inside source: true *** True Line Result y += offset_after_write ** Processing line: ~ break if y > top~ - Inside source: true *** True Line Result break if y > top ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # past log separator~ - Inside source: true *** True Line Result # past log separator ** Processing line: ~ args.outputs.reserved << line(y: y + line_height_px.half, color: @text_color.mult_alpha(0.25 * slide_progress))~ - Inside source: true *** True Line Result args.outputs.reserved << line(y: y + line_height_px.half, color: @text_color.mult_alpha(0.25 * slide_progress)) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ y += line_height_px~ - Inside source: true *** True Line Result y += line_height_px ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ((@archived_log.size - @log_offset) - 1).downto(0) do |idx|~ - Inside source: true *** True Line Result ((@archived_log.size - @log_offset) - 1).downto(0) do |idx| ** Processing line: ~ offset_after_write = write_primitive_and_return_offset args, left, y, @archived_log[idx], archived: true~ - Inside source: true *** True Line Result offset_after_write = write_primitive_and_return_offset args, left, y, @archived_log[idx], archived: true ** Processing line: ~ y += offset_after_write~ - Inside source: true *** True Line Result y += offset_after_write ** Processing line: ~ break if y > top~ - Inside source: true *** True Line Result break if y > top ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_log_offset args~ - Inside source: true *** True Line Result render_log_offset args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.reserved << { x: 10.from_right, y: @bottom + 10,~ - Inside source: true *** True Line Result args.outputs.reserved << { x: 10.from_right, y: @bottom + 10, ** Processing line: ~ text: "Press CTRL+g or ESCAPE to clear the prompt.",~ - Inside source: true *** True Line Result text: "Press CTRL+g or ESCAPE to clear the prompt.", ** Processing line: ~ vertical_alignment_enum: 0,~ - Inside source: true *** True Line Result vertical_alignment_enum: 0, ** Processing line: ~ alignment_enum: 2, r: 80, g: 80, b: 80 }.label!~ - Inside source: true *** True Line Result alignment_enum: 2, r: 80, g: 80, b: 80 }.label! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_log_offset args~ - Inside source: true *** True Line Result def render_log_offset args ** Processing line: ~ return if @log_offset <= 0~ - Inside source: true *** True Line Result return if @log_offset <= 0 ** Processing line: ~ args.outputs.reserved << font_style.label(~ - Inside source: true *** True Line Result args.outputs.reserved << font_style.label( ** Processing line: ~ x: right.shift_left(5),~ - Inside source: true *** True Line Result x: right.shift_left(5), ** Processing line: ~ y: top.shift_down(5 + line_height_px),~ - Inside source: true *** True Line Result y: top.shift_down(5 + line_height_px), ** Processing line: ~ text: "[#{@log_offset}/#{@log.size}]",~ - Inside source: true *** True Line Result text: "[#{@log_offset}/#{@log.size}]", ** Processing line: ~ color: @text_color,~ - Inside source: true *** True Line Result color: @text_color, ** Processing line: ~ alignment_enum: 2~ - Inside source: true *** True Line Result alignment_enum: 2 ** Processing line: ~ )~ - Inside source: true *** True Line Result ) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def include_error_marker? text~ - Inside source: true *** True Line Result def include_error_marker? text ** Processing line: ~ include_any_words?(text.gsub('OutputsDeprecated', ''), error_markers)~ - Inside source: true *** True Line Result include_any_words?(text.gsub('OutputsDeprecated', ''), error_markers) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def error_markers~ - Inside source: true *** True Line Result def error_markers ** Processing line: ~ ["exception:", "error:", "undefined method", "failed", "syntax", "deprecated"]~ - Inside source: true *** True Line Result ["exception:", "error:", "undefined method", "failed", "syntax", "deprecated"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def include_subdued_markers? text~ - Inside source: true *** True Line Result def include_subdued_markers? text ** Processing line: ~ (text.start_with? "* INFO: ") && (include_any_words? text, subdued_markers)~ - Inside source: true *** True Line Result (text.start_with? "* INFO: ") && (include_any_words? text, subdued_markers) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def include_any_words? text, words~ - Inside source: true *** True Line Result def include_any_words? text, words ** Processing line: ~ words.any? { |w| text.downcase.include?(w) && !text.downcase.include?(":#{w}") }~ - Inside source: true *** True Line Result words.any? { |w| text.downcase.include?(w) && !text.downcase.include?(":#{w}") } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def subdued_markers~ - Inside source: true *** True Line Result def subdued_markers ** Processing line: ~ ["reloaded", "exported the", "~require~"]~ - Inside source: true *** True Line Result ["reloaded", "exported the", "~require~"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc args~ - Inside source: true *** True Line Result def calc args ** Processing line: ~ if visible? &&~ - Inside source: true *** True Line Result if visible? && ** Processing line: ~ @show_reason == :toast &&~ - Inside source: true *** True Line Result @show_reason == :toast && ** Processing line: ~ @toasted_at &&~ - Inside source: true *** True Line Result @toasted_at && ** Processing line: ~ @toasted_at.elapsed?(@toast_duration, Kernel.global_tick_count)~ - Inside source: true *** True Line Result @toasted_at.elapsed?(@toast_duration, Kernel.global_tick_count) ** Processing line: ~ hide~ - Inside source: true *** True Line Result hide ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !$gtk.paused? && visible? && (show_reason == :exception || show_reason == :exception_on_load)~ - Inside source: true *** True Line Result if !$gtk.paused? && visible? && (show_reason == :exception || show_reason == :exception_on_load) ** Processing line: ~ hide~ - Inside source: true *** True Line Result hide ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if $gtk.files_reloaded.length > 0~ - Inside source: true *** True Line Result if $gtk.files_reloaded.length > 0 ** Processing line: ~ clear_toast~ - Inside source: true *** True Line Result clear_toast ** Processing line: ~ @toast_ids.clear~ - Inside source: true *** True Line Result @toast_ids.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ begin~ - Inside source: true *** True Line Result begin ** Processing line: ~ return if @disabled~ - Inside source: true *** True Line Result return if @disabled ** Processing line: ~ render args~ - Inside source: true *** True Line Result render args ** Processing line: ~ process_inputs args~ - Inside source: true *** True Line Result process_inputs args ** Processing line: ~ return unless should_tick?~ - Inside source: true *** True Line Result return unless should_tick? ** Processing line: ~ calc args~ - Inside source: true *** True Line Result calc args ** Processing line: ~ prompt.tick~ - Inside source: true *** True Line Result prompt.tick ** Processing line: ~ menu.tick args~ - Inside source: true *** True Line Result menu.tick args ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ begin~ - Inside source: true *** True Line Result begin ** Processing line: ~ puts "#{e}"~ - Inside source: true *** True Line Result puts "#{e}" ** Processing line: ~ puts "* FATAL: The GTK::Console console threw an unhandled exception and has been reset. You should report this exception (along with reproduction steps) to DragonRuby."~ - Inside source: true *** True Line Result puts "* FATAL: The GTK::Console console threw an unhandled exception and has been reset. You should report this exception (along with reproduction steps) to DragonRuby." ** Processing line: ~ rescue~ - Inside source: true *** True Line Result rescue ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ @disabled = true~ - Inside source: true *** True Line Result @disabled = true ** Processing line: ~ $stdout.puts e~ - Inside source: true *** True Line Result $stdout.puts e ** Processing line: ~ $stdout.puts "* FATAL: The GTK::Console console threw an unhandled exception and has been reset. You should report this exception (along with reproduction steps) to DragonRuby."~ - Inside source: true *** True Line Result $stdout.puts "* FATAL: The GTK::Console console threw an unhandled exception and has been reset. You should report this exception (along with reproduction steps) to DragonRuby." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_command_with_history_silent command, histories, show_reason = nil~ - Inside source: true *** True Line Result def set_command_with_history_silent command, histories, show_reason = nil ** Processing line: ~ set_command_extended command: command, histories: histories, show_reason: show_reason~ - Inside source: true *** True Line Result set_command_extended command: command, histories: histories, show_reason: show_reason ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def defaults_set_command_extended~ - Inside source: true *** True Line Result def defaults_set_command_extended ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ command: "puts 'Hello World'",~ - Inside source: true *** True Line Result command: "puts 'Hello World'", ** Processing line: ~ histories: [],~ - Inside source: true *** True Line Result histories: [], ** Processing line: ~ show_reason: nil,~ - Inside source: true *** True Line Result show_reason: nil, ** Processing line: ~ force: false~ - Inside source: true *** True Line Result force: false ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_command_extended opts~ - Inside source: true *** True Line Result def set_command_extended opts ** Processing line: ~ opts = defaults_set_command_extended.merge opts~ - Inside source: true *** True Line Result opts = defaults_set_command_extended.merge opts ** Processing line: ~ @command_history.concat opts[:histories]~ - Inside source: true *** True Line Result @command_history.concat opts[:histories] ** Processing line: ~ @command_history << opts[:command] if @command_history[-1] != opts[:command]~ - Inside source: true *** True Line Result @command_history << opts[:command] if @command_history[-1] != opts[:command] ** Processing line: ~ self.current_input_str = opts[:command] if @command_set_at != Kernel.global_tick_count || opts[:force]~ - Inside source: true *** True Line Result self.current_input_str = opts[:command] if @command_set_at != Kernel.global_tick_count || opts[:force] ** Processing line: ~ @command_set_at = Kernel.global_tick_count~ - Inside source: true *** True Line Result @command_set_at = Kernel.global_tick_count ** Processing line: ~ @command_history_index = -1~ - Inside source: true *** True Line Result @command_history_index = -1 ** Processing line: ~ save_history~ - Inside source: true *** True Line Result save_history ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_command_with_history command, histories, show_reason = nil~ - Inside source: true *** True Line Result def set_command_with_history command, histories, show_reason = nil ** Processing line: ~ set_command_with_history_silent command, histories, show_reason~ - Inside source: true *** True Line Result set_command_with_history_silent command, histories, show_reason ** Processing line: ~ show show_reason~ - Inside source: true *** True Line Result show show_reason ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def set_command command, show_reason = nil~ - Inside source: true *** True Line Result def set_command command, show_reason = nil ** Processing line: ~ set_command_silent command, show_reason~ - Inside source: true *** True Line Result set_command_silent command, show_reason ** Processing line: ~ show show_reason~ - Inside source: true *** True Line Result show show_reason ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_command_silent command, show_reason = nil~ - Inside source: true *** True Line Result def set_command_silent command, show_reason = nil ** Processing line: ~ set_command_with_history_silent command, [], show_reason~ - Inside source: true *** True Line Result set_command_with_history_silent command, [], show_reason ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_system_command command, show_reason = nil~ - Inside source: true *** True Line Result def set_system_command command, show_reason = nil ** Processing line: ~ if $gtk.platform == "Mac OS X"~ - Inside source: true *** True Line Result if $gtk.platform == "Mac OS X" ** Processing line: ~ set_command_silent "$gtk.system \"open #{command}\""~ - Inside source: true *** True Line Result set_command_silent "$gtk.system \"open #{command}\"" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ set_command_silent "$gtk.system \"start #{command}\""~ - Inside source: true *** True Line Result set_command_silent "$gtk.system \"start #{command}\"" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def system_command~ - Inside source: true *** True Line Result def system_command ** Processing line: ~ if $gtk.platform == "Mac OS X"~ - Inside source: true *** True Line Result if $gtk.platform == "Mac OS X" ** Processing line: ~ "open"~ - Inside source: true *** True Line Result "open" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ "start"~ - Inside source: true *** True Line Result "start" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ private~ - Inside source: true *** True Line Result private ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def w~ - Inside source: true *** True Line Result def w ** Processing line: ~ $gtk.logical_width~ - Inside source: true *** True Line Result $gtk.logical_width ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def h~ - Inside source: true *** True Line Result def h ** Processing line: ~ $gtk.logical_height~ - Inside source: true *** True Line Result $gtk.logical_height ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # methods top; left; right~ - Inside source: true *** True Line Result # methods top; left; right ** Processing line: ~ # Forward to grid~ - Inside source: true *** True Line Result # Forward to grid ** Processing line: ~ %i[top left right].each do |method|~ - Inside source: true *** True Line Result %i[top left right].each do |method| ** Processing line: ~ define_method method do~ - Inside source: true *** True Line Result define_method method do ** Processing line: ~ $gtk.args.grid.send(method)~ - Inside source: true *** True Line Result $gtk.args.grid.send(method) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def line_height_px~ - Inside source: true *** True Line Result def line_height_px ** Processing line: ~ font_style.line_height_px~ - Inside source: true *** True Line Result font_style.line_height_px ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def lines_on_one_page~ - Inside source: true *** True Line Result def lines_on_one_page ** Processing line: ~ (h - 4).idiv(line_height_px)~ - Inside source: true *** True Line Result (h - 4).idiv(line_height_px) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def line(y:, color:)~ - Inside source: true *** True Line Result def line(y:, color:) ** Processing line: ~ [left, y, right, y, *color].line~ - Inside source: true *** True Line Result [left, y, right, y, *color].line ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def include_row_marker? log_entry~ - Inside source: true *** True Line Result def include_row_marker? log_entry ** Processing line: ~ log_entry[0] == "|"~ - Inside source: true *** True Line Result log_entry[0] == "|" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def include_header_marker? log_entry~ - Inside source: true *** True Line Result def include_header_marker? log_entry ** Processing line: ~ return false if (log_entry.strip.include? ".rb")~ - Inside source: true *** True Line Result return false if (log_entry.strip.include? ".rb") ** Processing line: ~ (log_entry.start_with? "* ") ||~ - Inside source: true *** True Line Result (log_entry.start_with? "* ") || ** Processing line: ~ (log_entry.start_with? "** ") ||~ - Inside source: true *** True Line Result (log_entry.start_with? "** ") || ** Processing line: ~ (log_entry.start_with? "*** ") ||~ - Inside source: true *** True Line Result (log_entry.start_with? "*** ") || ** Processing line: ~ (log_entry.start_with? "**** ")~ - Inside source: true *** True Line Result (log_entry.start_with? "**** ") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def code? log_entry~ - Inside source: true *** True Line Result def code? log_entry ** Processing line: ~ (just_symbol? log_entry) || (codeblock_marker? log_entry)~ - Inside source: true *** True Line Result (just_symbol? log_entry) || (codeblock_marker? log_entry) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def just_symbol? log_entry~ - Inside source: true *** True Line Result def just_symbol? log_entry ** Processing line: ~ scrubbed = log_entry.gsub("*", "").strip~ - Inside source: true *** True Line Result scrubbed = log_entry.gsub("*", "").strip ** Processing line: ~ (scrubbed.start_with? ":") && (!scrubbed.include? " ") && (!scrubbed.include? "=>")~ - Inside source: true *** True Line Result (scrubbed.start_with? ":") && (!scrubbed.include? " ") && (!scrubbed.include? "=>") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def code_comment? log_entry~ - Inside source: true *** True Line Result def code_comment? log_entry ** Processing line: ~ return true if log_entry.strip.start_with?("# ")~ - Inside source: true *** True Line Result return true if log_entry.strip.start_with?("# ") ** Processing line: ~ return false~ - Inside source: true *** True Line Result return false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def codeblock_marker? log_entry~ - Inside source: true *** True Line Result def codeblock_marker? log_entry ** Processing line: ~ return true if log_entry.strip.start_with?("#+begin_src")~ - Inside source: true *** True Line Result return true if log_entry.strip.start_with?("#+begin_src") ** Processing line: ~ return true if log_entry.strip.start_with?("#+end_src")~ - Inside source: true *** True Line Result return true if log_entry.strip.start_with?("#+end_src") ** Processing line: ~ return false~ - Inside source: true *** True Line Result return false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def color_for_plain_text log_entry~ - Inside source: true *** True Line Result def color_for_plain_text log_entry ** Processing line: ~ log_entry = log_entry[4..-1] if log_entry.start_with? "!c!"~ - Inside source: true *** True Line Result log_entry = log_entry[4..-1] if log_entry.start_with? "!c!" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if code? log_entry~ - Inside source: true *** True Line Result if code? log_entry ** Processing line: ~ @code_color~ - Inside source: true *** True Line Result @code_color ** Processing line: ~ elsif code_comment? log_entry~ - Inside source: true *** True Line Result elsif code_comment? log_entry ** Processing line: ~ @comment_color~ - Inside source: true *** True Line Result @comment_color ** Processing line: ~ elsif include_row_marker? log_entry~ - Inside source: true *** True Line Result elsif include_row_marker? log_entry ** Processing line: ~ @text_color~ - Inside source: true *** True Line Result @text_color ** Processing line: ~ elsif include_error_marker? log_entry~ - Inside source: true *** True Line Result elsif include_error_marker? log_entry ** Processing line: ~ @error_color~ - Inside source: true *** True Line Result @error_color ** Processing line: ~ elsif include_subdued_markers? log_entry~ - Inside source: true *** True Line Result elsif include_subdued_markers? log_entry ** Processing line: ~ @text_color.mult_alpha(0.5)~ - Inside source: true *** True Line Result @text_color.mult_alpha(0.5) ** Processing line: ~ elsif include_header_marker? log_entry~ - Inside source: true *** True Line Result elsif include_header_marker? log_entry ** Processing line: ~ @header_color~ - Inside source: true *** True Line Result @header_color ** Processing line: ~ elsif log_entry.start_with?("====")~ - Inside source: true *** True Line Result elsif log_entry.start_with?("====") ** Processing line: ~ @header_color~ - Inside source: true *** True Line Result @header_color ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ @text_color~ - Inside source: true *** True Line Result @text_color ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def color_for_log_entry(log_entry)~ - Inside source: true *** True Line Result def color_for_log_entry(log_entry) ** Processing line: ~ if log_entry.start_with?('!c!') # loglevel color specified.~ - Inside source: true *** True Line Result if log_entry.start_with?('!c!') # loglevel color specified. ** Processing line: ~ return case log_entry[3..3].to_i~ - Inside source: true *** True Line Result return case log_entry[3..3].to_i ** Processing line: ~ when 0 # spam~ - Inside source: true *** True Line Result when 0 # spam ** Processing line: ~ @spam_color~ - Inside source: true *** True Line Result @spam_color ** Processing line: ~ when 1 # debug~ - Inside source: true *** True Line Result when 1 # debug ** Processing line: ~ @debug_color~ - Inside source: true *** True Line Result @debug_color ** Processing line: ~ #when 2 # info (caught by the `else` block.)~ - Inside source: true *** True Line Result #when 2 # info (caught by the `else` block.) ** Processing line: ~ # @text_color~ - Inside source: true *** True Line Result # @text_color ** Processing line: ~ when 3 # warn~ - Inside source: true *** True Line Result when 3 # warn ** Processing line: ~ @warn_color~ - Inside source: true *** True Line Result @warn_color ** Processing line: ~ when 4 # error~ - Inside source: true *** True Line Result when 4 # error ** Processing line: ~ @error_color~ - Inside source: true *** True Line Result @error_color ** Processing line: ~ when 5 # unfiltered~ - Inside source: true *** True Line Result when 5 # unfiltered ** Processing line: ~ @unfiltered_color~ - Inside source: true *** True Line Result @unfiltered_color ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ color_for_plain_text log_entry~ - Inside source: true *** True Line Result color_for_plain_text log_entry ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return color_for_plain_text log_entry~ - Inside source: true *** True Line Result return color_for_plain_text log_entry ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def prompt~ - Inside source: true *** True Line Result def prompt ** Processing line: ~ @prompt ||= Prompt.new(font_style: font_style, text_color: @text_color, console_text_width: console_text_width)~ - Inside source: true *** True Line Result @prompt ||= Prompt.new(font_style: font_style, text_color: @text_color, console_text_width: console_text_width) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def current_input_str~ - Inside source: true *** True Line Result def current_input_str ** Processing line: ~ prompt.current_input_str~ - Inside source: true *** True Line Result prompt.current_input_str ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def current_input_str=(str)~ - Inside source: true *** True Line Result def current_input_str=(str) ** Processing line: ~ prompt.current_input_str = str~ - Inside source: true *** True Line Result prompt.current_input_str = str ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def clear~ - Inside source: true *** True Line Result def clear ** Processing line: ~ @archived_log.clear~ - Inside source: true *** True Line Result @archived_log.clear ** Processing line: ~ @log.clear~ - Inside source: true *** True Line Result @log.clear ** Processing line: ~ @prompt.clear~ - Inside source: true *** True Line Result @prompt.clear ** Processing line: ~ :console_silent_eval~ - Inside source: true *** True Line Result :console_silent_eval ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def slide_progress~ - Inside source: true *** True Line Result def slide_progress ** Processing line: ~ return 0 if !@toggled_at~ - Inside source: true *** True Line Result return 0 if !@toggled_at ** Processing line: ~ if visible?~ - Inside source: true *** True Line Result if visible? ** Processing line: ~ @slide_progress = @toggled_at.global_ease(@animation_duration, :flip, :quint, :flip)~ - Inside source: true *** True Line Result @slide_progress = @toggled_at.global_ease(@animation_duration, :flip, :quint, :flip) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ @slide_progress = @toggled_at.global_ease(@animation_duration, :flip, :quint)~ - Inside source: true *** True Line Result @slide_progress = @toggled_at.global_ease(@animation_duration, :flip, :quint) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ @slide_progress~ - Inside source: true *** True Line Result @slide_progress ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** console_color.rb~ - Header detected. *** True Line Result *** True Line Result *** console_color.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/console_color.rb~ - Inside source: true *** True Line Result # ./dragon/console_color.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # console_color.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # console_color.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright:~ - Inside source: true *** True Line Result # Contributors outside of DragonRuby who also hold Copyright: ** Processing line: ~ # - Kevin Fischer: https://github.com/kfischer-okarin~ - Inside source: true *** True Line Result # - Kevin Fischer: https://github.com/kfischer-okarin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Console~ - Inside source: true *** True Line Result class Console ** Processing line: ~ class Color~ - Inside source: true *** True Line Result class Color ** Processing line: ~ def initialize(color)~ - Inside source: true *** True Line Result def initialize(color) ** Processing line: ~ @color = color~ - Inside source: true *** True Line Result @color = color ** Processing line: ~ @color << 255 if @color.size == 3~ - Inside source: true *** True Line Result @color << 255 if @color.size == 3 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mult_alpha(alpha_modifier)~ - Inside source: true *** True Line Result def mult_alpha(alpha_modifier) ** Processing line: ~ Color.new [@color[0], @color[1], @color[2], (@color[3].to_f * alpha_modifier).to_i]~ - Inside source: true *** True Line Result Color.new [@color[0], @color[1], @color[2], (@color[3].to_f * alpha_modifier).to_i] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Support splat operator~ - Inside source: true *** True Line Result # Support splat operator ** Processing line: ~ def to_a~ - Inside source: true *** True Line Result def to_a ** Processing line: ~ @color~ - Inside source: true *** True Line Result @color ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ "GTK::Console::Color #{to_h}"~ - Inside source: true *** True Line Result "GTK::Console::Color #{to_h}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_h~ - Inside source: true *** True Line Result def to_h ** Processing line: ~ { r: @color[0], g: @color[1], b: @color[2], a: @color[3] }~ - Inside source: true *** True Line Result { r: @color[0], g: @color[1], b: @color[2], a: @color[3] } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** console_font_style.rb~ - Header detected. *** True Line Result *** True Line Result *** console_font_style.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/console_font_style.rb~ - Inside source: true *** True Line Result # ./dragon/console_font_style.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # console_font_style.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # console_font_style.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright:~ - Inside source: true *** True Line Result # Contributors outside of DragonRuby who also hold Copyright: ** Processing line: ~ # - Kevin Fischer: https://github.com/kfischer-okarin~ - Inside source: true *** True Line Result # - Kevin Fischer: https://github.com/kfischer-okarin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Console~ - Inside source: true *** True Line Result class Console ** Processing line: ~ class FontStyle~ - Inside source: true *** True Line Result class FontStyle ** Processing line: ~ attr_reader :font, :size_enum, :line_height~ - Inside source: true *** True Line Result attr_reader :font, :size_enum, :line_height ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize(font:, size_enum:, line_height:)~ - Inside source: true *** True Line Result def initialize(font:, size_enum:, line_height:) ** Processing line: ~ @font = font~ - Inside source: true *** True Line Result @font = font ** Processing line: ~ @size_enum = size_enum~ - Inside source: true *** True Line Result @size_enum = size_enum ** Processing line: ~ @line_height = line_height~ - Inside source: true *** True Line Result @line_height = line_height ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def letter_size~ - Inside source: true *** True Line Result def letter_size ** Processing line: ~ @letter_size ||= $gtk.calcstringbox 'W', size_enum, font~ - Inside source: true *** True Line Result @letter_size ||= $gtk.calcstringbox 'W', size_enum, font ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def line_height_px~ - Inside source: true *** True Line Result def line_height_px ** Processing line: ~ @line_height_px ||= letter_size.y * line_height~ - Inside source: true *** True Line Result @line_height_px ||= letter_size.y * line_height ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def label(x:, y:, text:, color:, alignment_enum: 0)~ - Inside source: true *** True Line Result def label(x:, y:, text:, color:, alignment_enum: 0) ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: x,~ - Inside source: true *** True Line Result x: x, ** Processing line: ~ y: y.shift_up(line_height_px), # !!! FIXME: remove .shift_up(line_height_px) when we fix coordinate origin on labels.~ - Inside source: true *** True Line Result y: y.shift_up(line_height_px), # !!! FIXME: remove .shift_up(line_height_px) when we fix coordinate origin on labels. ** Processing line: ~ text: text,~ - Inside source: true *** True Line Result text: text, ** Processing line: ~ font: font,~ - Inside source: true *** True Line Result font: font, ** Processing line: ~ size_enum: size_enum,~ - Inside source: true *** True Line Result size_enum: size_enum, ** Processing line: ~ alignment_enum: alignment_enum,~ - Inside source: true *** True Line Result alignment_enum: alignment_enum, ** Processing line: ~ **color.to_h,~ - Inside source: true *** True Line Result **color.to_h, ** Processing line: ~ }.label!~ - Inside source: true *** True Line Result }.label! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** console_menu.rb~ - Header detected. *** True Line Result *** True Line Result *** console_menu.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/console_menu.rb~ - Inside source: true *** True Line Result # ./dragon/console_menu.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # console_menu.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # console_menu.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Console~ - Inside source: true *** True Line Result class Console ** Processing line: ~ class Menu~ - Inside source: true *** True Line Result class Menu ** Processing line: ~ attr_accessor :buttons~ - Inside source: true *** True Line Result attr_accessor :buttons ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize console~ - Inside source: true *** True Line Result def initialize console ** Processing line: ~ @console = console~ - Inside source: true *** True Line Result @console = console ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def record_clicked~ - Inside source: true *** True Line Result def record_clicked ** Processing line: ~ $recording.start 100~ - Inside source: true *** True Line Result $recording.start 100 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replay_clicked~ - Inside source: true *** True Line Result def replay_clicked ** Processing line: ~ $replay.start 'replay.txt'~ - Inside source: true *** True Line Result $replay.start 'replay.txt' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset_clicked~ - Inside source: true *** True Line Result def reset_clicked ** Processing line: ~ $gtk.reset~ - Inside source: true *** True Line Result $gtk.reset ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def scroll_up_clicked~ - Inside source: true *** True Line Result def scroll_up_clicked ** Processing line: ~ @console.scroll_up_half~ - Inside source: true *** True Line Result @console.scroll_up_half ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def scroll_down_clicked~ - Inside source: true *** True Line Result def scroll_down_clicked ** Processing line: ~ @console.scroll_down_half~ - Inside source: true *** True Line Result @console.scroll_down_half ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def show_menu_clicked~ - Inside source: true *** True Line Result def show_menu_clicked ** Processing line: ~ @menu_shown = :visible~ - Inside source: true *** True Line Result @menu_shown = :visible ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def close_clicked~ - Inside source: true *** True Line Result def close_clicked ** Processing line: ~ @menu_shown = :hidden~ - Inside source: true *** True Line Result @menu_shown = :hidden ** Processing line: ~ @console.hide~ - Inside source: true *** True Line Result @console.hide ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def hide_menu_clicked~ - Inside source: true *** True Line Result def hide_menu_clicked ** Processing line: ~ @menu_shown = :hidden~ - Inside source: true *** True Line Result @menu_shown = :hidden ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def framerate_diagnostics_clicked~ - Inside source: true *** True Line Result def framerate_diagnostics_clicked ** Processing line: ~ @console.scroll_to_bottom~ - Inside source: true *** True Line Result @console.scroll_to_bottom ** Processing line: ~ $gtk.framerate_diagnostics~ - Inside source: true *** True Line Result $gtk.framerate_diagnostics ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def itch_wizard_clicked~ - Inside source: true *** True Line Result def itch_wizard_clicked ** Processing line: ~ @console.scroll_to_bottom~ - Inside source: true *** True Line Result @console.scroll_to_bottom ** Processing line: ~ $wizards.itch.restart~ - Inside source: true *** True Line Result $wizards.itch.restart ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def docs_clicked~ - Inside source: true *** True Line Result def docs_clicked ** Processing line: ~ @console.scroll_to_bottom~ - Inside source: true *** True Line Result @console.scroll_to_bottom ** Processing line: ~ log Kernel.docs_classes~ - Inside source: true *** True Line Result log Kernel.docs_classes ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def scroll_end_clicked~ - Inside source: true *** True Line Result def scroll_end_clicked ** Processing line: ~ @console.scroll_to_bottom~ - Inside source: true *** True Line Result @console.scroll_to_bottom ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def custom_buttons~ - Inside source: true *** True Line Result def custom_buttons ** Processing line: ~ []~ - Inside source: true *** True Line Result [] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ return unless @console.visible?~ - Inside source: true *** True Line Result return unless @console.visible? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @menu_shown ||= :hidden~ - Inside source: true *** True Line Result @menu_shown ||= :hidden ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if $gtk.production~ - Inside source: true *** True Line Result if $gtk.production ** Processing line: ~ @buttons = [~ - Inside source: true *** True Line Result @buttons = [ ** Processing line: ~ (button id: :record, row: 0, col: 9, text: "record gameplay", method: :record_clicked),~ - Inside source: true *** True Line Result (button id: :record, row: 0, col: 9, text: "record gameplay", method: :record_clicked), ** Processing line: ~ (button id: :replay, row: 0, col: 10, text: "start replay", method: :replay_clicked),~ - Inside source: true *** True Line Result (button id: :replay, row: 0, col: 10, text: "start replay", method: :replay_clicked), ** Processing line: ~ *custom_buttons~ - Inside source: true *** True Line Result *custom_buttons ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ elsif @menu_shown == :hidden~ - Inside source: true *** True Line Result elsif @menu_shown == :hidden ** Processing line: ~ @buttons = [~ - Inside source: true *** True Line Result @buttons = [ ** Processing line: ~ (button id: :show_menu, row: 0, col: 10, text: "show menu", method: :show_menu_clicked),~ - Inside source: true *** True Line Result (button id: :show_menu, row: 0, col: 10, text: "show menu", method: :show_menu_clicked), ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ @buttons = [~ - Inside source: true *** True Line Result @buttons = [ ** Processing line: ~ (button id: :scroll_up, row: 0, col: 6, text: "scroll up", method: :scroll_up_clicked),~ - Inside source: true *** True Line Result (button id: :scroll_up, row: 0, col: 6, text: "scroll up", method: :scroll_up_clicked), ** Processing line: ~ (button id: :scroll_down, row: 0, col: 7, text: "scroll down", method: :scroll_down_clicked),~ - Inside source: true *** True Line Result (button id: :scroll_down, row: 0, col: 7, text: "scroll down", method: :scroll_down_clicked), ** Processing line: ~ (button id: :scroll_down, row: 0, col: 8, text: "scroll end", method: :scroll_end_clicked),~ - Inside source: true *** True Line Result (button id: :scroll_down, row: 0, col: 8, text: "scroll end", method: :scroll_end_clicked), ** Processing line: ~ (button id: :close, row: 0, col: 9, text: "close console", method: :close_clicked),~ - Inside source: true *** True Line Result (button id: :close, row: 0, col: 9, text: "close console", method: :close_clicked), ** Processing line: ~ (button id: :hide, row: 0, col: 10, text: "hide menu", method: :hide_menu_clicked),~ - Inside source: true *** True Line Result (button id: :hide, row: 0, col: 10, text: "hide menu", method: :hide_menu_clicked), ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ (button id: :record, row: 1, col: 7, text: "record gameplay", method: :record_clicked),~ - Inside source: true *** True Line Result (button id: :record, row: 1, col: 7, text: "record gameplay", method: :record_clicked), ** Processing line: ~ (button id: :replay, row: 1, col: 8, text: "start replay", method: :replay_clicked),~ - Inside source: true *** True Line Result (button id: :replay, row: 1, col: 8, text: "start replay", method: :replay_clicked), ** Processing line: ~ (button id: :record, row: 1, col: 9, text: "framerate diagnostics", method: :framerate_diagnostics_clicked),~ - Inside source: true *** True Line Result (button id: :record, row: 1, col: 9, text: "framerate diagnostics", method: :framerate_diagnostics_clicked), ** Processing line: ~ (button id: :reset, row: 1, col: 10, text: "reset game", method: :reset_clicked),~ - Inside source: true *** True Line Result (button id: :reset, row: 1, col: 10, text: "reset game", method: :reset_clicked), ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ (button id: :reset, row: 2, col: 10, text: "docs", method: :docs_clicked),~ - Inside source: true *** True Line Result (button id: :reset, row: 2, col: 10, text: "docs", method: :docs_clicked), ** Processing line: ~ (button id: :reset, row: 2, col: 9, text: "itch wizard", method: :itch_wizard_clicked),~ - Inside source: true *** True Line Result (button id: :reset, row: 2, col: 9, text: "itch wizard", method: :itch_wizard_clicked), ** Processing line: ~ *custom_buttons~ - Inside source: true *** True Line Result *custom_buttons ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # render~ - Inside source: true *** True Line Result # render ** Processing line: ~ args.outputs.reserved << @buttons.map { |b| b[:primitives] }~ - Inside source: true *** True Line Result args.outputs.reserved << @buttons.map { |b| b[:primitives] } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # inputs~ - Inside source: true *** True Line Result # inputs ** Processing line: ~ if args.inputs.mouse.click~ - Inside source: true *** True Line Result if args.inputs.mouse.click ** Processing line: ~ clicked = @buttons.find { |b| args.inputs.mouse.inside_rect? b[:rect] }~ - Inside source: true *** True Line Result clicked = @buttons.find { |b| args.inputs.mouse.inside_rect? b[:rect] } ** Processing line: ~ if clicked~ - Inside source: true *** True Line Result if clicked ** Processing line: ~ args.inputs.mouse.click = nil~ - Inside source: true *** True Line Result args.inputs.mouse.click = nil ** Processing line: ~ send clicked[:method]~ - Inside source: true *** True Line Result send clicked[:method] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rect_for_layout row, col~ - Inside source: true *** True Line Result def rect_for_layout row, col ** Processing line: ~ col_width = 100~ - Inside source: true *** True Line Result col_width = 100 ** Processing line: ~ row_height = 50~ - Inside source: true *** True Line Result row_height = 50 ** Processing line: ~ col_margin = 5~ - Inside source: true *** True Line Result col_margin = 5 ** Processing line: ~ row_margin = 5~ - Inside source: true *** True Line Result row_margin = 5 ** Processing line: ~ x = (col_margin + (col * col_width) + (col * col_margin))~ - Inside source: true *** True Line Result x = (col_margin + (col * col_width) + (col * col_margin)) ** Processing line: ~ y = (row_margin + (row * row_height) + (row * row_margin) + row_height).from_top~ - Inside source: true *** True Line Result y = (row_margin + (row * row_height) + (row * row_margin) + row_height).from_top ** Processing line: ~ { x: x, y: y, w: col_width, h: row_height }~ - Inside source: true *** True Line Result { x: x, y: y, w: col_width, h: row_height } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def button args~ - Inside source: true *** True Line Result def button args ** Processing line: ~ id, row, col, text, method = args[:id], args[:row], args[:col], args[:text], args[:method]~ - Inside source: true *** True Line Result id, row, col, text, method = args[:id], args[:row], args[:col], args[:text], args[:method] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ font_height = @console.font_style.line_height_px.half~ - Inside source: true *** True Line Result font_height = @console.font_style.line_height_px.half ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ id: id,~ - Inside source: true *** True Line Result id: id, ** Processing line: ~ rect: (rect_for_layout row, col),~ - Inside source: true *** True Line Result rect: (rect_for_layout row, col), ** Processing line: ~ text: text,~ - Inside source: true *** True Line Result text: text, ** Processing line: ~ method: method~ - Inside source: true *** True Line Result method: method ** Processing line: ~ }.let do |entity|~ - Inside source: true *** True Line Result }.let do |entity| ** Processing line: ~ primitives = []~ - Inside source: true *** True Line Result primitives = [] ** Processing line: ~ primitives << entity[:rect].solid!(a: 164)~ - Inside source: true *** True Line Result primitives << entity[:rect].solid!(a: 164) ** Processing line: ~ primitives << entity[:rect].border!(r: 255, g: 255, b: 255)~ - Inside source: true *** True Line Result primitives << entity[:rect].border!(r: 255, g: 255, b: 255) ** Processing line: ~ primitives << text.wrapped_lines(5)~ - Inside source: true *** True Line Result primitives << text.wrapped_lines(5) ** Processing line: ~ .map_with_index do |l, i|~ - Inside source: true *** True Line Result .map_with_index do |l, i| ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ entity[:rect][:x] + entity[:rect][:w].half,~ - Inside source: true *** True Line Result entity[:rect][:x] + entity[:rect][:w].half, ** Processing line: ~ entity[:rect][:y] + entity[:rect][:h].half + font_height - (i * (font_height + 2)),~ - Inside source: true *** True Line Result entity[:rect][:y] + entity[:rect][:h].half + font_height - (i * (font_height + 2)), ** Processing line: ~ l, -3, 1, 255, 255, 255~ - Inside source: true *** True Line Result l, -3, 1, 255, 255, 255 ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end.labels~ - Inside source: true *** True Line Result end.labels ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ entity.merge(primitives: primitives)~ - Inside source: true *** True Line Result entity.merge(primitives: primitives) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ not_supported: "#{self}"~ - Inside source: true *** True Line Result not_supported: "#{self}" ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** console_prompt.rb~ - Header detected. *** True Line Result *** True Line Result *** console_prompt.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/console_prompt.rb~ - Inside source: true *** True Line Result # ./dragon/console_prompt.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # console_prompt.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # console_prompt.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright:~ - Inside source: true *** True Line Result # Contributors outside of DragonRuby who also hold Copyright: ** Processing line: ~ # - Kevin Fischer: https://github.com/kfischer-okarin~ - Inside source: true *** True Line Result # - Kevin Fischer: https://github.com/kfischer-okarin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Console~ - Inside source: true *** True Line Result class Console ** Processing line: ~ class Prompt~ - Inside source: true *** True Line Result class Prompt ** Processing line: ~ # ? Can be changed, it was just taken from my editor settings :>~ - Inside source: true *** True Line Result # ? Can be changed, it was just taken from my editor settings :> ** Processing line: ~ WORD_LIMITER_CHARS = "`~!@#$%^&*-=+()[]{}\|;:'\",.<>/?_ \t\n\0".chars~ - Inside source: true *** True Line Result WORD_LIMITER_CHARS = "`~!@#$%^&*-=+()[]{}\|;:'\",.<>/?_ \t\n\0".chars ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ attr_accessor :current_input_str, :font_style, :console_text_width, :last_input_str, :last_input_str_changed~ - Inside source: true *** True Line Result attr_accessor :current_input_str, :font_style, :console_text_width, :last_input_str, :last_input_str_changed ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize(font_style:, text_color:, console_text_width:)~ - Inside source: true *** True Line Result def initialize(font_style:, text_color:, console_text_width:) ** Processing line: ~ @prompt = '-> '~ - Inside source: true *** True Line Result @prompt = '-> ' ** Processing line: ~ @current_input_str = ''~ - Inside source: true *** True Line Result @current_input_str = '' ** Processing line: ~ @font_style = font_style~ - Inside source: true *** True Line Result @font_style = font_style ** Processing line: ~ @text_color = text_color~ - Inside source: true *** True Line Result @text_color = text_color ** Processing line: ~ @cursor_color = Color.new [187, 21, 6]~ - Inside source: true *** True Line Result @cursor_color = Color.new [187, 21, 6] ** Processing line: ~ @console_text_width = console_text_width~ - Inside source: true *** True Line Result @console_text_width = console_text_width ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @cursor_position = 0~ - Inside source: true *** True Line Result @cursor_position = 0 ** Processing line: ~ update_cursor_position_px~ - Inside source: true *** True Line Result update_cursor_position_px ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @last_autocomplete_prefix = nil~ - Inside source: true *** True Line Result @last_autocomplete_prefix = nil ** Processing line: ~ @next_candidate_index = 0~ - Inside source: true *** True Line Result @next_candidate_index = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def update_cursor_position_px~ - Inside source: true *** True Line Result def update_cursor_position_px ** Processing line: ~ @cursor_position_px = ($gtk.calcstringbox (@prompt + @current_input_str[0...@cursor_position]), @font_style.size_enum, @font_style.font).x~ - Inside source: true *** True Line Result @cursor_position_px = ($gtk.calcstringbox (@prompt + @current_input_str[0...@cursor_position]), @font_style.size_enum, @font_style.font).x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def current_input_str=(str)~ - Inside source: true *** True Line Result def current_input_str=(str) ** Processing line: ~ @current_input_str = str~ - Inside source: true *** True Line Result @current_input_str = str ** Processing line: ~ @cursor_position = str.length~ - Inside source: true *** True Line Result @cursor_position = str.length ** Processing line: ~ update_cursor_position_px~ - Inside source: true *** True Line Result update_cursor_position_px ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def <<(str)~ - Inside source: true *** True Line Result def <<(str) ** Processing line: ~ @current_input_str = @current_input_str[0...@cursor_position] + str + @current_input_str[@cursor_position..-1]~ - Inside source: true *** True Line Result @current_input_str = @current_input_str[0...@cursor_position] + str + @current_input_str[@cursor_position..-1] ** Processing line: ~ @cursor_position += str.length~ - Inside source: true *** True Line Result @cursor_position += str.length ** Processing line: ~ update_cursor_position_px~ - Inside source: true *** True Line Result update_cursor_position_px ** Processing line: ~ @current_input_changed_at = Kernel.global_tick_count~ - Inside source: true *** True Line Result @current_input_changed_at = Kernel.global_tick_count ** Processing line: ~ reset_autocomplete~ - Inside source: true *** True Line Result reset_autocomplete ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def backspace~ - Inside source: true *** True Line Result def backspace ** Processing line: ~ return if current_input_str.length.zero? || @cursor_position.zero?~ - Inside source: true *** True Line Result return if current_input_str.length.zero? || @cursor_position.zero? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @current_input_str = @current_input_str[0...(@cursor_position - 1)] + @current_input_str[@cursor_position..-1]~ - Inside source: true *** True Line Result @current_input_str = @current_input_str[0...(@cursor_position - 1)] + @current_input_str[@cursor_position..-1] ** Processing line: ~ @cursor_position -= 1~ - Inside source: true *** True Line Result @cursor_position -= 1 ** Processing line: ~ update_cursor_position_px~ - Inside source: true *** True Line Result update_cursor_position_px ** Processing line: ~ reset_autocomplete~ - Inside source: true *** True Line Result reset_autocomplete ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def delete~ - Inside source: true *** True Line Result def delete ** Processing line: ~ return if current_input_str.length.zero? || @cursor_position == current_input_str.length~ - Inside source: true *** True Line Result return if current_input_str.length.zero? || @cursor_position == current_input_str.length ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @cursor_position += 1~ - Inside source: true *** True Line Result @cursor_position += 1 ** Processing line: ~ backspace~ - Inside source: true *** True Line Result backspace ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_cursor_left~ - Inside source: true *** True Line Result def move_cursor_left ** Processing line: ~ @cursor_position -= 1 if @cursor_position > 0~ - Inside source: true *** True Line Result @cursor_position -= 1 if @cursor_position > 0 ** Processing line: ~ update_cursor_position_px~ - Inside source: true *** True Line Result update_cursor_position_px ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_cursor_left_word~ - Inside source: true *** True Line Result def move_cursor_left_word ** Processing line: ~ return if @cursor_position.zero?~ - Inside source: true *** True Line Result return if @cursor_position.zero? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ new_pos = @cursor_position - 1~ - Inside source: true *** True Line Result new_pos = @cursor_position - 1 ** Processing line: ~ (is_word_boundary? @current_input_str[new_pos]) ?~ - Inside source: true *** True Line Result (is_word_boundary? @current_input_str[new_pos]) ? ** Processing line: ~ (new_pos -= 1 until !(is_word_boundary? @current_input_str[new_pos - 1]) || new_pos.zero?):~ - Inside source: true *** True Line Result (new_pos -= 1 until !(is_word_boundary? @current_input_str[new_pos - 1]) || new_pos.zero?): ** Processing line: ~ (new_pos -= 1 until (is_word_boundary? @current_input_str[new_pos - 1]) || new_pos.zero?)~ - Inside source: true *** True Line Result (new_pos -= 1 until (is_word_boundary? @current_input_str[new_pos - 1]) || new_pos.zero?) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @cursor_position = new_pos~ - Inside source: true *** True Line Result @cursor_position = new_pos ** Processing line: ~ update_cursor_position_px~ - Inside source: true *** True Line Result update_cursor_position_px ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_cursor_right~ - Inside source: true *** True Line Result def move_cursor_right ** Processing line: ~ @cursor_position += 1 if @cursor_position < current_input_str.length~ - Inside source: true *** True Line Result @cursor_position += 1 if @cursor_position < current_input_str.length ** Processing line: ~ update_cursor_position_px~ - Inside source: true *** True Line Result update_cursor_position_px ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_cursor_right_word~ - Inside source: true *** True Line Result def move_cursor_right_word ** Processing line: ~ return if @cursor_position.equal? str_len~ - Inside source: true *** True Line Result return if @cursor_position.equal? str_len ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ new_pos = @cursor_position + 1~ - Inside source: true *** True Line Result new_pos = @cursor_position + 1 ** Processing line: ~ (is_word_boundary? @current_input_str[new_pos]) ?~ - Inside source: true *** True Line Result (is_word_boundary? @current_input_str[new_pos]) ? ** Processing line: ~ (new_pos += 1 until !(is_word_boundary? @current_input_str[new_pos]) || (new_pos.equal? str_len)):~ - Inside source: true *** True Line Result (new_pos += 1 until !(is_word_boundary? @current_input_str[new_pos]) || (new_pos.equal? str_len)): ** Processing line: ~ (new_pos += 1 until (is_word_boundary? @current_input_str[new_pos]) || (new_pos.equal? str_len))~ - Inside source: true *** True Line Result (new_pos += 1 until (is_word_boundary? @current_input_str[new_pos]) || (new_pos.equal? str_len)) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @cursor_position = new_pos~ - Inside source: true *** True Line Result @cursor_position = new_pos ** Processing line: ~ update_cursor_position_px~ - Inside source: true *** True Line Result update_cursor_position_px ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_cursor_home~ - Inside source: true *** True Line Result def move_cursor_home ** Processing line: ~ @cursor_position = 0~ - Inside source: true *** True Line Result @cursor_position = 0 ** Processing line: ~ update_cursor_position_px~ - Inside source: true *** True Line Result update_cursor_position_px ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_cursor_end~ - Inside source: true *** True Line Result def move_cursor_end ** Processing line: ~ @cursor_position = str_len~ - Inside source: true *** True Line Result @cursor_position = str_len ** Processing line: ~ update_cursor_position_px~ - Inside source: true *** True Line Result update_cursor_position_px ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def clear~ - Inside source: true *** True Line Result def clear ** Processing line: ~ @current_input_str = ''~ - Inside source: true *** True Line Result @current_input_str = '' ** Processing line: ~ @cursor_position = 0~ - Inside source: true *** True Line Result @cursor_position = 0 ** Processing line: ~ update_cursor_position_px~ - Inside source: true *** True Line Result update_cursor_position_px ** Processing line: ~ reset_autocomplete~ - Inside source: true *** True Line Result reset_autocomplete ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def autocomplete~ - Inside source: true *** True Line Result def autocomplete ** Processing line: ~ if !@last_autocomplete_prefix~ - Inside source: true *** True Line Result if !@last_autocomplete_prefix ** Processing line: ~ @last_autocomplete_prefix = calc_autocomplete_prefix~ - Inside source: true *** True Line Result @last_autocomplete_prefix = calc_autocomplete_prefix ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts "* AUTOCOMPLETE CANDIDATES: #{current_input_str}.."~ - Inside source: true *** True Line Result puts "* AUTOCOMPLETE CANDIDATES: #{current_input_str}.." ** Processing line: ~ pretty_print_strings_as_table method_candidates(@last_autocomplete_prefix)~ - Inside source: true *** True Line Result pretty_print_strings_as_table method_candidates(@last_autocomplete_prefix) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ candidates = method_candidates(@last_autocomplete_prefix)~ - Inside source: true *** True Line Result candidates = method_candidates(@last_autocomplete_prefix) ** Processing line: ~ return if candidates.empty?~ - Inside source: true *** True Line Result return if candidates.empty? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ candidate = candidates[@next_candidate_index]~ - Inside source: true *** True Line Result candidate = candidates[@next_candidate_index] ** Processing line: ~ candidate = candidate[0..-2] + " = " if candidate.end_with? '='~ - Inside source: true *** True Line Result candidate = candidate[0..-2] + " = " if candidate.end_with? '=' ** Processing line: ~ @next_candidate_index += 1~ - Inside source: true *** True Line Result @next_candidate_index += 1 ** Processing line: ~ @next_candidate_index = 0 if @next_candidate_index >= candidates.length~ - Inside source: true *** True Line Result @next_candidate_index = 0 if @next_candidate_index >= candidates.length ** Processing line: ~ self.current_input_str = display_autocomplete_candidate(candidate)~ - Inside source: true *** True Line Result self.current_input_str = display_autocomplete_candidate(candidate) ** Processing line: ~ update_cursor_position_px~ - Inside source: true *** True Line Result update_cursor_position_px ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ puts "* BUG: Tab autocompletion failed. Let us know about this.\n#{e}"~ - Inside source: true *** True Line Result puts "* BUG: Tab autocompletion failed. Let us know about this.\n#{e}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def pretty_print_strings_as_table items~ - Inside source: true *** True Line Result def pretty_print_strings_as_table items ** Processing line: ~ if items.length == 0~ - Inside source: true *** True Line Result if items.length == 0 ** Processing line: ~ puts <<-S.strip~ - Inside source: true *** True Line Result puts <<-S.strip ** Processing line: ~ +--------+~ - Inside source: true *** True Line Result +--------+ ** Processing line: ~ | (none) |~ - Inside source: true *** True Line Result | (none) | ** Processing line: ~ +--------+~ - Inside source: true *** True Line Result +--------+ ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ # figure out the largest string~ - Inside source: true *** True Line Result # figure out the largest string ** Processing line: ~ string_width = items.sort_by { |c| -c.to_s.length }.first~ - Inside source: true *** True Line Result string_width = items.sort_by { |c| -c.to_s.length }.first ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # add spacing to each side of the string which represents the cell width~ - Inside source: true *** True Line Result # add spacing to each side of the string which represents the cell width ** Processing line: ~ cell_width = string_width.length + 2~ - Inside source: true *** True Line Result cell_width = string_width.length + 2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # add spacing to each side of the cell to represent the column width~ - Inside source: true *** True Line Result # add spacing to each side of the cell to represent the column width ** Processing line: ~ column_width = cell_width + 2~ - Inside source: true *** True Line Result column_width = cell_width + 2 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # determine the max number of columns that can fit on the screen~ - Inside source: true *** True Line Result # determine the max number of columns that can fit on the screen ** Processing line: ~ columns = @console_text_width.idiv column_width~ - Inside source: true *** True Line Result columns = @console_text_width.idiv column_width ** Processing line: ~ columns = items.length if items.length < columns~ - Inside source: true *** True Line Result columns = items.length if items.length < columns ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # partition the original list of items into a string to be printed~ - Inside source: true *** True Line Result # partition the original list of items into a string to be printed ** Processing line: ~ items.each_slice(columns).each_with_index do |cells, i|~ - Inside source: true *** True Line Result items.each_slice(columns).each_with_index do |cells, i| ** Processing line: ~ pretty_print_row_separator string_width, cell_width, column_width, columns~ - Inside source: true *** True Line Result pretty_print_row_separator string_width, cell_width, column_width, columns ** Processing line: ~ pretty_print_row cells, string_width, cell_width, column_width, columns~ - Inside source: true *** True Line Result pretty_print_row cells, string_width, cell_width, column_width, columns ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ pretty_print_row_separator string_width, cell_width, column_width, columns~ - Inside source: true *** True Line Result pretty_print_row_separator string_width, cell_width, column_width, columns ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def pretty_print_row cells, string_width, cell_width, column_width, columns~ - Inside source: true *** True Line Result def pretty_print_row cells, string_width, cell_width, column_width, columns ** Processing line: ~ # if the number of cells doesn't match the number of columns, then pad the array with empty values~ - Inside source: true *** True Line Result # if the number of cells doesn't match the number of columns, then pad the array with empty values ** Processing line: ~ cells += (columns - cells.length).map { "" }~ - Inside source: true *** True Line Result cells += (columns - cells.length).map { "" } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # right align each cell value~ - Inside source: true *** True Line Result # right align each cell value ** Processing line: ~ formated_row = "|" + cells.map do |c|~ - Inside source: true *** True Line Result formated_row = "|" + cells.map do |c| ** Processing line: ~ "#{" " * (string_width.length - c.length) } #{c} |"~ - Inside source: true *** True Line Result "#{" " * (string_width.length - c.length) } #{c} |" ** Processing line: ~ end.join~ - Inside source: true *** True Line Result end.join ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # remove separators between empty values~ - Inside source: true *** True Line Result # remove separators between empty values ** Processing line: ~ formated_row = formated_row.gsub(" | ", " ")~ - Inside source: true *** True Line Result formated_row = formated_row.gsub(" | ", " ") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts formated_row~ - Inside source: true *** True Line Result puts formated_row ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def pretty_print_row_separator string_width, cell_width, column_width, columns~ - Inside source: true *** True Line Result def pretty_print_row_separator string_width, cell_width, column_width, columns ** Processing line: ~ # this is a joint: +--------~ - Inside source: true *** True Line Result # this is a joint: +-------- ** Processing line: ~ column_joint = "+#{"-" * cell_width}"~ - Inside source: true *** True Line Result column_joint = "+#{"-" * cell_width}" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # multiple joints create a row separator: +----+----+~ - Inside source: true *** True Line Result # multiple joints create a row separator: +----+----+ ** Processing line: ~ puts (column_joint * columns) + "+"~ - Inside source: true *** True Line Result puts (column_joint * columns) + "+" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render(args, x:, y:)~ - Inside source: true *** True Line Result def render(args, x:, y:) ** Processing line: ~ args.outputs.reserved << font_style.label(x: x, y: y, text: "#{@prompt}#{current_input_str}", color: @text_color)~ - Inside source: true *** True Line Result args.outputs.reserved << font_style.label(x: x, y: y, text: "#{@prompt}#{current_input_str}", color: @text_color) ** Processing line: ~ args.outputs.reserved << (@cursor_color.to_h.merge x: x + @cursor_position_px + 0.5,~ - Inside source: true *** True Line Result args.outputs.reserved << (@cursor_color.to_h.merge x: x + @cursor_position_px + 0.5, ** Processing line: ~ y: y + 5,~ - Inside source: true *** True Line Result y: y + 5, ** Processing line: ~ x2: x + @cursor_position_px + 0.5,~ - Inside source: true *** True Line Result x2: x + @cursor_position_px + 0.5, ** Processing line: ~ y2: y + @font_style.letter_size.y + 4)~ - Inside source: true *** True Line Result y2: y + @font_style.letter_size.y + 4) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ args.outputs.reserved << (@cursor_color.to_h.merge x: x + @cursor_position_px + 1,~ - Inside source: true *** True Line Result args.outputs.reserved << (@cursor_color.to_h.merge x: x + @cursor_position_px + 1, ** Processing line: ~ y: y + 5,~ - Inside source: true *** True Line Result y: y + 5, ** Processing line: ~ x2: x + @cursor_position_px + 1,~ - Inside source: true *** True Line Result x2: x + @cursor_position_px + 1, ** Processing line: ~ y2: y + @font_style.letter_size.y + 4)~ - Inside source: true *** True Line Result y2: y + @font_style.letter_size.y + 4) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # debugging rectangle for string~ - Inside source: true *** True Line Result # debugging rectangle for string ** Processing line: ~ # args.outputs.reserved << (@cursor_color.to_h.merge x: x,~ - Inside source: true *** True Line Result # args.outputs.reserved << (@cursor_color.to_h.merge x: x, ** Processing line: ~ # y: y + 5,~ - Inside source: true *** True Line Result # y: y + 5, ** Processing line: ~ # w: @cursor_position_px,~ - Inside source: true *** True Line Result # w: @cursor_position_px, ** Processing line: ~ # h: @font_style.letter_size.y).border~ - Inside source: true *** True Line Result # h: @font_style.letter_size.y).border ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ if (@current_input_changed_at) &&~ - Inside source: true *** True Line Result if (@current_input_changed_at) && ** Processing line: ~ (@current_input_changed_at < Kernel.global_tick_count) &&~ - Inside source: true *** True Line Result (@current_input_changed_at < Kernel.global_tick_count) && ** Processing line: ~ (@last_input_str != @current_input_str)~ - Inside source: true *** True Line Result (@last_input_str != @current_input_str) ** Processing line: ~ @last_input_str_changed = true~ - Inside source: true *** True Line Result @last_input_str_changed = true ** Processing line: ~ @last_input_str = "#{@current_input_str}"~ - Inside source: true *** True Line Result @last_input_str = "#{@current_input_str}" ** Processing line: ~ @current_input_changed_at = nil~ - Inside source: true *** True Line Result @current_input_changed_at = nil ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ @last_input_str_changed = false~ - Inside source: true *** True Line Result @last_input_str_changed = false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ private~ - Inside source: true *** True Line Result private ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def last_period_index~ - Inside source: true *** True Line Result def last_period_index ** Processing line: ~ current_input_str.rindex('.')~ - Inside source: true *** True Line Result current_input_str.rindex('.') ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_autocomplete_prefix~ - Inside source: true *** True Line Result def calc_autocomplete_prefix ** Processing line: ~ if last_period_index~ - Inside source: true *** True Line Result if last_period_index ** Processing line: ~ current_input_str[(last_period_index + 1)..-1]~ - Inside source: true *** True Line Result current_input_str[(last_period_index + 1)..-1] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ current_input_str~ - Inside source: true *** True Line Result current_input_str ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def current_object~ - Inside source: true *** True Line Result def current_object ** Processing line: ~ return Kernel unless last_period_index~ - Inside source: true *** True Line Result return Kernel unless last_period_index ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Kernel.eval(current_input_str[0...last_period_index])~ - Inside source: true *** True Line Result Kernel.eval(current_input_str[0...last_period_index]) ** Processing line: ~ rescue NameError~ - Inside source: true *** True Line Result rescue NameError ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def method_candidates(prefix)~ - Inside source: true *** True Line Result def method_candidates(prefix) ** Processing line: ~ current_object.autocomplete_methods.map(&:to_s).select { |m| m.start_with? prefix }~ - Inside source: true *** True Line Result current_object.autocomplete_methods.map(&:to_s).select { |m| m.start_with? prefix } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def display_autocomplete_candidate(candidate)~ - Inside source: true *** True Line Result def display_autocomplete_candidate(candidate) ** Processing line: ~ if last_period_index~ - Inside source: true *** True Line Result if last_period_index ** Processing line: ~ @current_input_str[0..last_period_index] + candidate.to_s~ - Inside source: true *** True Line Result @current_input_str[0..last_period_index] + candidate.to_s ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ candidate.to_s~ - Inside source: true *** True Line Result candidate.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset_autocomplete~ - Inside source: true *** True Line Result def reset_autocomplete ** Processing line: ~ @last_autocomplete_prefix = nil~ - Inside source: true *** True Line Result @last_autocomplete_prefix = nil ** Processing line: ~ @next_candidate_index = 0~ - Inside source: true *** True Line Result @next_candidate_index = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def is_word_boundary? char~ - Inside source: true *** True Line Result def is_word_boundary? char ** Processing line: ~ # Alternative method~ - Inside source: true *** True Line Result # Alternative method ** Processing line: ~ # (WORD_LIMITER_CHARS - [char]).length != WORD_LIMITER_CHARS.length~ - Inside source: true *** True Line Result # (WORD_LIMITER_CHARS - [char]).length != WORD_LIMITER_CHARS.length ** Processing line: ~ # Production code~ - Inside source: true *** True Line Result # Production code ** Processing line: ~ WORD_LIMITER_CHARS.include? char~ - Inside source: true *** True Line Result WORD_LIMITER_CHARS.include? char ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def str_len~ - Inside source: true *** True Line Result def str_len ** Processing line: ~ @current_input_str.length~ - Inside source: true *** True Line Result @current_input_str.length ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** controller.rb~ - Header detected. *** True Line Result *** True Line Result *** controller.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/controller.rb~ - Inside source: true *** True Line Result # ./dragon/controller.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # controller.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # controller.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ class Controller~ - Inside source: true *** True Line Result class Controller ** Processing line: ~ # Access to keys that have been pressed down.~ - Inside source: true *** True Line Result # Access to keys that have been pressed down. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Controller::Keys]~ - Inside source: true *** True Line Result # @return [Controller::Keys] ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_reader :key_down~ - Inside source: true *** True Line Result attr_reader :key_down ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Access to keys that have been released up.~ - Inside source: true *** True Line Result # Access to keys that have been released up. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Controller::Keys]~ - Inside source: true *** True Line Result # @return [Controller::Keys] ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_reader :key_up~ - Inside source: true *** True Line Result attr_reader :key_up ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Access to keys that have been held down.~ - Inside source: true *** True Line Result # Access to keys that have been held down. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Controller::Keys]~ - Inside source: true *** True Line Result # @return [Controller::Keys] ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_reader :key_held~ - Inside source: true *** True Line Result attr_reader :key_held ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_accessor :left_analog_x_raw,~ - Inside source: true *** True Line Result attr_accessor :left_analog_x_raw, ** Processing line: ~ :left_analog_y_raw,~ - Inside source: true *** True Line Result :left_analog_y_raw, ** Processing line: ~ :left_analog_x_perc,~ - Inside source: true *** True Line Result :left_analog_x_perc, ** Processing line: ~ :left_analog_y_perc,~ - Inside source: true *** True Line Result :left_analog_y_perc, ** Processing line: ~ :right_analog_x_raw,~ - Inside source: true *** True Line Result :right_analog_x_raw, ** Processing line: ~ :right_analog_y_raw,~ - Inside source: true *** True Line Result :right_analog_y_raw, ** Processing line: ~ :right_analog_x_perc,~ - Inside source: true *** True Line Result :right_analog_x_perc, ** Processing line: ~ :right_analog_y_perc~ - Inside source: true *** True Line Result :right_analog_y_perc ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @key_down = Controller::Keys.new~ - Inside source: true *** True Line Result @key_down = Controller::Keys.new ** Processing line: ~ @key_up = Controller::Keys.new~ - Inside source: true *** True Line Result @key_up = Controller::Keys.new ** Processing line: ~ @key_held = Controller::Keys.new~ - Inside source: true *** True Line Result @key_held = Controller::Keys.new ** Processing line: ~ @left_analog_x_raw = 0~ - Inside source: true *** True Line Result @left_analog_x_raw = 0 ** Processing line: ~ @left_analog_y_raw = 0~ - Inside source: true *** True Line Result @left_analog_y_raw = 0 ** Processing line: ~ @left_analog_x_perc = 0~ - Inside source: true *** True Line Result @left_analog_x_perc = 0 ** Processing line: ~ @left_analog_y_perc = 0~ - Inside source: true *** True Line Result @left_analog_y_perc = 0 ** Processing line: ~ @right_analog_x_raw = 0~ - Inside source: true *** True Line Result @right_analog_x_raw = 0 ** Processing line: ~ @right_analog_y_raw = 0~ - Inside source: true *** True Line Result @right_analog_y_raw = 0 ** Processing line: ~ @right_analog_x_perc = 0~ - Inside source: true *** True Line Result @right_analog_x_perc = 0 ** Processing line: ~ @right_analog_y_perc = 0~ - Inside source: true *** True Line Result @right_analog_y_perc = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ key_down: @key_down.serialize,~ - Inside source: true *** True Line Result key_down: @key_down.serialize, ** Processing line: ~ key_held: @key_held.serialize,~ - Inside source: true *** True Line Result key_held: @key_held.serialize, ** Processing line: ~ key_up: @key_up.serialize~ - Inside source: true *** True Line Result key_up: @key_up.serialize ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Clear all current key presses.~ - Inside source: true *** True Line Result # Clear all current key presses. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [void]~ - Inside source: true *** True Line Result # @return [void] ** Processing line: ~ def clear~ - Inside source: true *** True Line Result def clear ** Processing line: ~ @key_down.clear~ - Inside source: true *** True Line Result @key_down.clear ** Processing line: ~ @key_up.clear~ - Inside source: true *** True Line Result @key_up.clear ** Processing line: ~ @key_held.clear~ - Inside source: true *** True Line Result @key_held.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def up~ - Inside source: true *** True Line Result def up ** Processing line: ~ @key_up.up || @key_held.up~ - Inside source: true *** True Line Result @key_up.up || @key_held.up ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def down~ - Inside source: true *** True Line Result def down ** Processing line: ~ @key_up.down || @key_held.down~ - Inside source: true *** True Line Result @key_up.down || @key_held.down ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def left~ - Inside source: true *** True Line Result def left ** Processing line: ~ @key_up.left || @key_held.left~ - Inside source: true *** True Line Result @key_up.left || @key_held.left ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def right~ - Inside source: true *** True Line Result def right ** Processing line: ~ @key_up.right || @key_held.right~ - Inside source: true *** True Line Result @key_up.right || @key_held.right ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Activates a key into the down position.~ - Inside source: true *** True Line Result # Activates a key into the down position. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @param key [Symbol] The key to press down.~ - Inside source: true *** True Line Result # @param key [Symbol] The key to press down. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [void]~ - Inside source: true *** True Line Result # @return [void] ** Processing line: ~ def activate_down(key)~ - Inside source: true *** True Line Result def activate_down(key) ** Processing line: ~ key_down.activate(key)~ - Inside source: true *** True Line Result key_down.activate(key) ** Processing line: ~ key_held.deactivate(key)~ - Inside source: true *** True Line Result key_held.deactivate(key) ** Processing line: ~ key_up.deactivate(key)~ - Inside source: true *** True Line Result key_up.deactivate(key) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Activates a key into the held down position.~ - Inside source: true *** True Line Result # Activates a key into the held down position. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @param key [Symbol] The key to hold down.~ - Inside source: true *** True Line Result # @param key [Symbol] The key to hold down. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [void]~ - Inside source: true *** True Line Result # @return [void] ** Processing line: ~ def activate_held(key)~ - Inside source: true *** True Line Result def activate_held(key) ** Processing line: ~ key_down.deactivate(key)~ - Inside source: true *** True Line Result key_down.deactivate(key) ** Processing line: ~ key_held.activate(key) unless key_held.send(key)~ - Inside source: true *** True Line Result key_held.activate(key) unless key_held.send(key) ** Processing line: ~ key_up.deactivate(key)~ - Inside source: true *** True Line Result key_up.deactivate(key) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Activates a key release into the up position.~ - Inside source: true *** True Line Result # Activates a key release into the up position. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @param key [Symbol] The key release up.~ - Inside source: true *** True Line Result # @param key [Symbol] The key release up. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [void]~ - Inside source: true *** True Line Result # @return [void] ** Processing line: ~ def activate_up(key)~ - Inside source: true *** True Line Result def activate_up(key) ** Processing line: ~ key_down.deactivate(key)~ - Inside source: true *** True Line Result key_down.deactivate(key) ** Processing line: ~ key_held.deactivate(key)~ - Inside source: true *** True Line Result key_held.deactivate(key) ** Processing line: ~ key_up.activate(key)~ - Inside source: true *** True Line Result key_up.activate(key) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ include DirectionalInputHelperMethods~ - Inside source: true *** True Line Result include DirectionalInputHelperMethods ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** controller/config.rb~ - Header detected. *** True Line Result *** True Line Result *** controller/config.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/controller/config.rb~ - Inside source: true *** True Line Result # ./dragon/controller/config.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # controller/config.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # controller/config.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # !!! FIXME: add console command to forget custom binding(s)~ - Inside source: true *** True Line Result # !!! FIXME: add console command to forget custom binding(s) ** Processing line: ~ # !!! FIXME: add console command to forget replace existing binding(s)~ - Inside source: true *** True Line Result # !!! FIXME: add console command to forget replace existing binding(s) ** Processing line: ~ # !!! FIXME: add console command go into play_around mode to make sure controller isn't wonky.~ - Inside source: true *** True Line Result # !!! FIXME: add console command go into play_around mode to make sure controller isn't wonky. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Controller~ - Inside source: true *** True Line Result class Controller ** Processing line: ~ class Config~ - Inside source: true *** True Line Result class Config ** Processing line: ~ def initialize runtime~ - Inside source: true *** True Line Result def initialize runtime ** Processing line: ~ @runtime = runtime~ - Inside source: true *** True Line Result @runtime = runtime ** Processing line: ~ @raw_joysticks = {} # things that aren't game controllers to try to configure.~ - Inside source: true *** True Line Result @raw_joysticks = {} # things that aren't game controllers to try to configure. ** Processing line: ~ @target = nil~ - Inside source: true *** True Line Result @target = nil ** Processing line: ~ @animation_duration = (1.5).seconds~ - Inside source: true *** True Line Result @animation_duration = (1.5).seconds ** Processing line: ~ @toggled_at = 0~ - Inside source: true *** True Line Result @toggled_at = 0 ** Processing line: ~ @fading = 0~ - Inside source: true *** True Line Result @fading = 0 ** Processing line: ~ @current_part = 0~ - Inside source: true *** True Line Result @current_part = 0 ** Processing line: ~ @part_alpha = 0~ - Inside source: true *** True Line Result @part_alpha = 0 ** Processing line: ~ @part_alpha_increment = 10~ - Inside source: true *** True Line Result @part_alpha_increment = 10 ** Processing line: ~ @joystick_state = {}~ - Inside source: true *** True Line Result @joystick_state = {} ** Processing line: ~ @playing_around = false~ - Inside source: true *** True Line Result @playing_around = false ** Processing line: ~ @used_bindings = {}~ - Inside source: true *** True Line Result @used_bindings = {} ** Processing line: ~ @bindings = []~ - Inside source: true *** True Line Result @bindings = [] ** Processing line: ~ @parts = [~ - Inside source: true *** True Line Result @parts = [ ** Processing line: ~ [ 919, 282, 'A button', 'a' ],~ - Inside source: true *** True Line Result [ 919, 282, 'A button', 'a' ], ** Processing line: ~ [ 960, 323, 'B button', 'b' ],~ - Inside source: true *** True Line Result [ 960, 323, 'B button', 'b' ], ** Processing line: ~ [ 878, 323, 'X button', 'x' ],~ - Inside source: true *** True Line Result [ 878, 323, 'X button', 'x' ], ** Processing line: ~ [ 919, 365, 'Y button', 'y' ],~ - Inside source: true *** True Line Result [ 919, 365, 'Y button', 'y' ], ** Processing line: ~ [ 433, 246, 'left stick left', '-leftx' ],~ - Inside source: true *** True Line Result [ 433, 246, 'left stick left', '-leftx' ], ** Processing line: ~ [ 497, 246, 'left stick right', '+leftx' ],~ - Inside source: true *** True Line Result [ 497, 246, 'left stick right', '+leftx' ], ** Processing line: ~ [ 466, 283, 'left stick up', '-lefty' ],~ - Inside source: true *** True Line Result [ 466, 283, 'left stick up', '-lefty' ], ** Processing line: ~ [ 466, 218, 'left stick down', '+lefty' ],~ - Inside source: true *** True Line Result [ 466, 218, 'left stick down', '+lefty' ], ** Processing line: ~ [ 466, 246, 'left stick button', 'leftstick' ],~ - Inside source: true *** True Line Result [ 466, 246, 'left stick button', 'leftstick' ], ** Processing line: ~ [ 741, 246, 'right stick left', '-rightx' ],~ - Inside source: true *** True Line Result [ 741, 246, 'right stick left', '-rightx' ], ** Processing line: ~ [ 802, 246, 'right stick right', '+rightx' ],~ - Inside source: true *** True Line Result [ 802, 246, 'right stick right', '+rightx' ], ** Processing line: ~ [ 773, 283, 'right stick up', '-righty' ],~ - Inside source: true *** True Line Result [ 773, 283, 'right stick up', '-righty' ], ** Processing line: ~ [ 773, 218, 'right stick down', '+righty' ],~ - Inside source: true *** True Line Result [ 773, 218, 'right stick down', '+righty' ], ** Processing line: ~ [ 772, 246, 'right stick button', 'rightstick' ],~ - Inside source: true *** True Line Result [ 772, 246, 'right stick button', 'rightstick' ], ** Processing line: ~ [ 263, 465, 'left shoulder button', 'leftshoulder' ],~ - Inside source: true *** True Line Result [ 263, 465, 'left shoulder button', 'leftshoulder' ], ** Processing line: ~ [ 263, 503, 'left trigger', 'lefttrigger' ],~ - Inside source: true *** True Line Result [ 263, 503, 'left trigger', 'lefttrigger' ], ** Processing line: ~ [ 977, 465, 'right shoulder button', 'rightshoulder' ],~ - Inside source: true *** True Line Result [ 977, 465, 'right shoulder button', 'rightshoulder' ], ** Processing line: ~ [ 977, 503, 'right trigger', 'righttrigger' ],~ - Inside source: true *** True Line Result [ 977, 503, 'right trigger', 'righttrigger' ], ** Processing line: ~ [ 318, 365, 'D-pad up', 'dpup' ],~ - Inside source: true *** True Line Result [ 318, 365, 'D-pad up', 'dpup' ], ** Processing line: ~ [ 360, 322, 'D-pad right', 'dpright' ],~ - Inside source: true *** True Line Result [ 360, 322, 'D-pad right', 'dpright' ], ** Processing line: ~ [ 318, 280, 'D-pad down', 'dpdown' ],~ - Inside source: true *** True Line Result [ 318, 280, 'D-pad down', 'dpdown' ], ** Processing line: ~ [ 275, 322, 'D-pad left', 'dpleft' ],~ - Inside source: true *** True Line Result [ 275, 322, 'D-pad left', 'dpleft' ], ** Processing line: ~ [ 570, 402, 'select/back button', 'back'],~ - Inside source: true *** True Line Result [ 570, 402, 'select/back button', 'back'], ** Processing line: ~ [ 619, 448, 'guide/home button', 'guide' ],~ - Inside source: true *** True Line Result [ 619, 448, 'guide/home button', 'guide' ], ** Processing line: ~ [ 669, 402, 'start button', 'start' ],~ - Inside source: true *** True Line Result [ 669, 402, 'start button', 'start' ], ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rawjoystick_connected jid, joystickname, guid~ - Inside source: true *** True Line Result def rawjoystick_connected jid, joystickname, guid ** Processing line: ~ return if jid < 0~ - Inside source: true *** True Line Result return if jid < 0 ** Processing line: ~ @raw_joysticks[jid] = { name: joystickname, guid: guid }~ - Inside source: true *** True Line Result @raw_joysticks[jid] = { name: joystickname, guid: guid } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rawjoystick_disconnected jid~ - Inside source: true *** True Line Result def rawjoystick_disconnected jid ** Processing line: ~ return if jid < 0~ - Inside source: true *** True Line Result return if jid < 0 ** Processing line: ~ if @raw_joysticks[jid] != nil~ - Inside source: true *** True Line Result if @raw_joysticks[jid] != nil ** Processing line: ~ @raw_joysticks.delete(jid)~ - Inside source: true *** True Line Result @raw_joysticks.delete(jid) ** Processing line: ~ @runtime.ffi_misc.close_raw_joystick(jid)~ - Inside source: true *** True Line Result @runtime.ffi_misc.close_raw_joystick(jid) ** Processing line: ~ # Fade out the config screen if we were literally configuring this controller right now.~ - Inside source: true *** True Line Result # Fade out the config screen if we were literally configuring this controller right now. ** Processing line: ~ if !@target.nil? && @target[0] == jid~ - Inside source: true *** True Line Result if !@target.nil? && @target[0] == jid ** Processing line: ~ @target[0] = nil~ - Inside source: true *** True Line Result @target[0] = nil ** Processing line: ~ @toggled_at = Kernel.global_tick_count~ - Inside source: true *** True Line Result @toggled_at = Kernel.global_tick_count ** Processing line: ~ @fading = -1~ - Inside source: true *** True Line Result @fading = -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def build_binding_string~ - Inside source: true *** True Line Result def build_binding_string ** Processing line: ~ bindingstr = ''~ - Inside source: true *** True Line Result bindingstr = '' ** Processing line: ~ skip = false~ - Inside source: true *** True Line Result skip = false ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ for i in 0..@parts.length-1~ - Inside source: true *** True Line Result for i in 0..@parts.length-1 ** Processing line: ~ if skip ; skip = false ; next ; end~ - Inside source: true *** True Line Result if skip ; skip = false ; next ; end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ binding = @bindings[i]~ - Inside source: true *** True Line Result binding = @bindings[i] ** Processing line: ~ next if binding.nil?~ - Inside source: true *** True Line Result next if binding.nil? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ part = @parts[i][3]~ - Inside source: true *** True Line Result part = @parts[i][3] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # clean up string:~ - Inside source: true *** True Line Result # clean up string: ** Processing line: ~ # if axis uses -a0 for negative and +a0 for positive, just make it "leftx:a0" instead of "-leftx:-a0,+leftx:+a0"~ - Inside source: true *** True Line Result # if axis uses -a0 for negative and +a0 for positive, just make it "leftx:a0" instead of "-leftx:-a0,+leftx:+a0" ** Processing line: ~ # if axis uses +a0 for negative and -a0 for positive, just make it "leftx:a0~" instead of "-leftx:+a0,+leftx:-a0"~ - Inside source: true *** True Line Result # if axis uses +a0 for negative and -a0 for positive, just make it "leftx:a0~" instead of "-leftx:+a0,+leftx:-a0" ** Processing line: ~ if part == '-leftx' || part == '-lefty' || part == '-rightx' || part == '-righty'~ - Inside source: true *** True Line Result if part == '-leftx' || part == '-lefty' || part == '-rightx' || part == '-righty' ** Processing line: ~ nextbinding = @bindings[i+1]~ - Inside source: true *** True Line Result nextbinding = @bindings[i+1] ** Processing line: ~ if binding.start_with?('-a') && nextbinding.start_with?('+a') && binding[2..-1] == nextbinding[2..-1]~ - Inside source: true *** True Line Result if binding.start_with?('-a') && nextbinding.start_with?('+a') && binding[2..-1] == nextbinding[2..-1] ** Processing line: ~ skip = true~ - Inside source: true *** True Line Result skip = true ** Processing line: ~ part = part[1..-1]~ - Inside source: true *** True Line Result part = part[1..-1] ** Processing line: ~ binding = binding[1..-1]~ - Inside source: true *** True Line Result binding = binding[1..-1] ** Processing line: ~ elsif binding.start_with?('+a') && nextbinding.start_with?('-a') && binding[2..-1] == nextbinding[2..-1]~ - Inside source: true *** True Line Result elsif binding.start_with?('+a') && nextbinding.start_with?('-a') && binding[2..-1] == nextbinding[2..-1] ** Processing line: ~ skip = true~ - Inside source: true *** True Line Result skip = true ** Processing line: ~ part = part[1..-1]~ - Inside source: true *** True Line Result part = part[1..-1] ** Processing line: ~ binding = "#{binding[1..-1]}~"~ - Inside source: true *** True Line Result binding = "#{binding[1..-1]}~" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ bindingstr += "#{!bindingstr.empty? ? ',' : ''}#{part}:#{binding}"~ - Inside source: true *** True Line Result bindingstr += "#{!bindingstr.empty? ? ',' : ''}#{part}:#{binding}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ details = @target[1]~ - Inside source: true *** True Line Result details = @target[1] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # !!! FIXME: no String.delete in mRuby?!?! Maybe so when upgrading.~ - Inside source: true *** True Line Result # !!! FIXME: no String.delete in mRuby?!?! Maybe so when upgrading. ** Processing line: ~ #name = details[:name].delete(',')~ - Inside source: true *** True Line Result #name = details[:name].delete(',') ** Processing line: ~ # !!! FIXME: ...no regexp either... :/~ - Inside source: true *** True Line Result # !!! FIXME: ...no regexp either... :/ ** Processing line: ~ #name = details[:name].gsub(/,/, ' ') # !!! FIXME: will SDL let you escape these instead?~ - Inside source: true *** True Line Result #name = details[:name].gsub(/,/, ' ') # !!! FIXME: will SDL let you escape these instead? ** Processing line: ~ unescaped = details[:name]~ - Inside source: true *** True Line Result unescaped = details[:name] ** Processing line: ~ name = ''~ - Inside source: true *** True Line Result name = '' ** Processing line: ~ for i in 0..unescaped.length-1~ - Inside source: true *** True Line Result for i in 0..unescaped.length-1 ** Processing line: ~ ch = unescaped[i]~ - Inside source: true *** True Line Result ch = unescaped[i] ** Processing line: ~ name += (ch == ',') ? ' ' : ch~ - Inside source: true *** True Line Result name += (ch == ',') ? ' ' : ch ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ return "#{details[:guid]},#{name},platform:#{@runtime.platform},#{bindingstr}"~ - Inside source: true *** True Line Result return "#{details[:guid]},#{name},platform:#{@runtime.platform},#{bindingstr}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def move_to_different_part part~ - Inside source: true *** True Line Result def move_to_different_part part ** Processing line: ~ if !@joystick_state[:axes].nil?~ - Inside source: true *** True Line Result if !@joystick_state[:axes].nil? ** Processing line: ~ @joystick_state[:axes].each { |i| i[:farthestval] = i[:startingval] if !i.nil? }~ - Inside source: true *** True Line Result @joystick_state[:axes].each { |i| i[:farthestval] = i[:startingval] if !i.nil? } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ @current_part = part~ - Inside source: true *** True Line Result @current_part = part ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def previous_part~ - Inside source: true *** True Line Result def previous_part ** Processing line: ~ if @current_part > 0~ - Inside source: true *** True Line Result if @current_part > 0 ** Processing line: ~ # remove the binding that we previous had here so it can be reused.~ - Inside source: true *** True Line Result # remove the binding that we previous had here so it can be reused. ** Processing line: ~ bindstr = @bindings[@current_part - 1]~ - Inside source: true *** True Line Result bindstr = @bindings[@current_part - 1] ** Processing line: ~ @bindings[@current_part - 1] = nil~ - Inside source: true *** True Line Result @bindings[@current_part - 1] = nil ** Processing line: ~ @used_bindings[bindstr] = nil~ - Inside source: true *** True Line Result @used_bindings[bindstr] = nil ** Processing line: ~ move_to_different_part @current_part - 1~ - Inside source: true *** True Line Result move_to_different_part @current_part - 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def next_part~ - Inside source: true *** True Line Result def next_part ** Processing line: ~ if @current_part < (@parts.length - 1)~ - Inside source: true *** True Line Result if @current_part < (@parts.length - 1) ** Processing line: ~ move_to_different_part @current_part + 1~ - Inside source: true *** True Line Result move_to_different_part @current_part + 1 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ @playing_around = true~ - Inside source: true *** True Line Result @playing_around = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_binding bindstr~ - Inside source: true *** True Line Result def set_binding bindstr ** Processing line: ~ return false if !@used_bindings[bindstr].nil?~ - Inside source: true *** True Line Result return false if !@used_bindings[bindstr].nil? ** Processing line: ~ @used_bindings[bindstr] = @current_part~ - Inside source: true *** True Line Result @used_bindings[bindstr] = @current_part ** Processing line: ~ @bindings[@current_part] = bindstr~ - Inside source: true *** True Line Result @bindings[@current_part] = bindstr ** Processing line: ~ return true~ - Inside source: true *** True Line Result return true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Called when a lowlevel joystick moves an axis.~ - Inside source: true *** True Line Result # Called when a lowlevel joystick moves an axis. ** Processing line: ~ def rawjoystick_axis jid, axis, value~ - Inside source: true *** True Line Result def rawjoystick_axis jid, axis, value ** Processing line: ~ return if @target.nil? || jid != @target[0] || @fading != 0 # skip if not currently considering this joystick.~ - Inside source: true *** True Line Result return if @target.nil? || jid != @target[0] || @fading != 0 # skip if not currently considering this joystick. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @joystick_state[:axes] ||= []~ - Inside source: true *** True Line Result @joystick_state[:axes] ||= [] ** Processing line: ~ @joystick_state[:axes][axis] ||= {~ - Inside source: true *** True Line Result @joystick_state[:axes][axis] ||= { ** Processing line: ~ moving: false,~ - Inside source: true *** True Line Result moving: false, ** Processing line: ~ startingval: 0,~ - Inside source: true *** True Line Result startingval: 0, ** Processing line: ~ currentval: 0,~ - Inside source: true *** True Line Result currentval: 0, ** Processing line: ~ farthestval: 0~ - Inside source: true *** True Line Result farthestval: 0 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # this is the logic from SDL's controllermap.c, more or less, since this is hard to get right from scratch.~ - Inside source: true *** True Line Result # this is the logic from SDL's controllermap.c, more or less, since this is hard to get right from scratch. ** Processing line: ~ state = @joystick_state[:axes][axis]~ - Inside source: true *** True Line Result state = @joystick_state[:axes][axis] ** Processing line: ~ state[:currentval] = value~ - Inside source: true *** True Line Result state[:currentval] = value ** Processing line: ~ if !state[:moving]~ - Inside source: true *** True Line Result if !state[:moving] ** Processing line: ~ state[:moving] = true~ - Inside source: true *** True Line Result state[:moving] = true ** Processing line: ~ state[:startingval] = value~ - Inside source: true *** True Line Result state[:startingval] = value ** Processing line: ~ state[:farthestval] = value~ - Inside source: true *** True Line Result state[:farthestval] = value ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ current_distance = (value - state[:startingval]).abs~ - Inside source: true *** True Line Result current_distance = (value - state[:startingval]).abs ** Processing line: ~ farthest_distance = (state[:farthestval] - state[:startingval]).abs~ - Inside source: true *** True Line Result farthest_distance = (state[:farthestval] - state[:startingval]).abs ** Processing line: ~ if current_distance > farthest_distance~ - Inside source: true *** True Line Result if current_distance > farthest_distance ** Processing line: ~ state[:farthestval] = value~ - Inside source: true *** True Line Result state[:farthestval] = value ** Processing line: ~ farthest_distance = (state[:farthestval] - state[:startingval]).abs~ - Inside source: true *** True Line Result farthest_distance = (state[:farthestval] - state[:startingval]).abs ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # If we've gone out far enough and started to come back, let's bind this axis~ - Inside source: true *** True Line Result # If we've gone out far enough and started to come back, let's bind this axis ** Processing line: ~ if (farthest_distance >= 16000) && (current_distance <= 10000)~ - Inside source: true *** True Line Result if (farthest_distance >= 16000) && (current_distance <= 10000) ** Processing line: ~ next_part if set_binding("#{(state[:farthestval] < 0) ? '-' : '+'}a#{axis}")~ - Inside source: true *** True Line Result next_part if set_binding("#{(state[:farthestval] < 0) ? '-' : '+'}a#{axis}") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Called when a lowlevel joystick moves a hat.~ - Inside source: true *** True Line Result # Called when a lowlevel joystick moves a hat. ** Processing line: ~ def rawjoystick_hat jid, hat, value~ - Inside source: true *** True Line Result def rawjoystick_hat jid, hat, value ** Processing line: ~ return if @target.nil? || jid != @target[0] || @fading != 0 # skip if not currently considering this joystick.~ - Inside source: true *** True Line Result return if @target.nil? || jid != @target[0] || @fading != 0 # skip if not currently considering this joystick. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @joystick_state[:hats] ||= []~ - Inside source: true *** True Line Result @joystick_state[:hats] ||= [] ** Processing line: ~ @joystick_state[:hats][hat] = value~ - Inside source: true *** True Line Result @joystick_state[:hats][hat] = value ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return if value == 0 # 0 == centered, skip it~ - Inside source: true *** True Line Result return if value == 0 # 0 == centered, skip it ** Processing line: ~ next_part if set_binding("h#{hat}.#{value}")~ - Inside source: true *** True Line Result next_part if set_binding("h#{hat}.#{value}") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Called when a lowlevel joystick moves a button.~ - Inside source: true *** True Line Result # Called when a lowlevel joystick moves a button. ** Processing line: ~ def rawjoystick_button jid, button, pressed~ - Inside source: true *** True Line Result def rawjoystick_button jid, button, pressed ** Processing line: ~ return if @target.nil? || jid != @target[0] || @fading != 0 # skip if not currently considering this joystick.~ - Inside source: true *** True Line Result return if @target.nil? || jid != @target[0] || @fading != 0 # skip if not currently considering this joystick. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @joystick_state[:buttons] ||= []~ - Inside source: true *** True Line Result @joystick_state[:buttons] ||= [] ** Processing line: ~ @joystick_state[:buttons][button] = pressed~ - Inside source: true *** True Line Result @joystick_state[:buttons][button] = pressed ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return if !pressed~ - Inside source: true *** True Line Result return if !pressed ** Processing line: ~ next_part if set_binding("b#{button}")~ - Inside source: true *** True Line Result next_part if set_binding("b#{button}") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_fading~ - Inside source: true *** True Line Result def calc_fading ** Processing line: ~ if @fading == 0~ - Inside source: true *** True Line Result if @fading == 0 ** Processing line: ~ return 255~ - Inside source: true *** True Line Result return 255 ** Processing line: ~ elsif @fading > 0 # fading in~ - Inside source: true *** True Line Result elsif @fading > 0 # fading in ** Processing line: ~ percent = @toggled_at.global_ease(@animation_duration, :flip, :quint, :flip)~ - Inside source: true *** True Line Result percent = @toggled_at.global_ease(@animation_duration, :flip, :quint, :flip) ** Processing line: ~ if percent >= 1.0~ - Inside source: true *** True Line Result if percent >= 1.0 ** Processing line: ~ percent = 1.0~ - Inside source: true *** True Line Result percent = 1.0 ** Processing line: ~ @fading = 0~ - Inside source: true *** True Line Result @fading = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else # fading out~ - Inside source: true *** True Line Result else # fading out ** Processing line: ~ percent = @toggled_at.global_ease(@animation_duration, :flip, :quint)~ - Inside source: true *** True Line Result percent = @toggled_at.global_ease(@animation_duration, :flip, :quint) ** Processing line: ~ if percent <= 0.0~ - Inside source: true *** True Line Result if percent <= 0.0 ** Processing line: ~ percent = 0.0~ - Inside source: true *** True Line Result percent = 0.0 ** Processing line: ~ @fading = 0~ - Inside source: true *** True Line Result @fading = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return (percent * 255.0).to_i~ - Inside source: true *** True Line Result return (percent * 255.0).to_i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_basics args, msg, fade=255~ - Inside source: true *** True Line Result def render_basics args, msg, fade=255 ** Processing line: ~ joystickname = @target[1][:name]~ - Inside source: true *** True Line Result joystickname = @target[1][:name] ** Processing line: ~ args.outputs.primitives << [0, 0, $gtk.logical_width, $gtk.logical_height, 255, 255, 255, fade].solid~ - Inside source: true *** True Line Result args.outputs.primitives << [0, 0, $gtk.logical_width, $gtk.logical_height, 255, 255, 255, fade].solid ** Processing line: ~ args.outputs.primitives << [0, 0, $gtk.logical_width, $gtk.logical_height, 'dragonruby-controller.png', 0, fade, 255, 255, 255].sprite~ - Inside source: true *** True Line Result args.outputs.primitives << [0, 0, $gtk.logical_width, $gtk.logical_height, 'dragonruby-controller.png', 0, fade, 255, 255, 255].sprite ** Processing line: ~ args.outputs.primitives << [$gtk.logical_width / 2, 700, joystickname, 2, 1, 0, 0, 0, fade].label~ - Inside source: true *** True Line Result args.outputs.primitives << [$gtk.logical_width / 2, 700, joystickname, 2, 1, 0, 0, 0, fade].label ** Processing line: ~ args.outputs.primitives << [$gtk.logical_height / 2, 650, msg, 0, 1, 0, 0, 0, 255].label if !msg.empty?~ - Inside source: true *** True Line Result args.outputs.primitives << [$gtk.logical_height / 2, 650, msg, 0, 1, 0, 0, 0, 255].label if !msg.empty? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_part_highlight args, part, alpha=255~ - Inside source: true *** True Line Result def render_part_highlight args, part, alpha=255 ** Processing line: ~ partsize = 41~ - Inside source: true *** True Line Result partsize = 41 ** Processing line: ~ args.outputs.primitives << [part[0], part[1], partsize, partsize, 255, 0, 0, alpha].border~ - Inside source: true *** True Line Result args.outputs.primitives << [part[0], part[1], partsize, partsize, 255, 0, 0, alpha].border ** Processing line: ~ args.outputs.primitives << [part[0]-1, part[1]-1, partsize+2, partsize+2, 255, 0, 0, alpha].border~ - Inside source: true *** True Line Result args.outputs.primitives << [part[0]-1, part[1]-1, partsize+2, partsize+2, 255, 0, 0, alpha].border ** Processing line: ~ args.outputs.primitives << [part[0]-2, part[1]-2, partsize+4, partsize+4, 255, 0, 0, alpha].border~ - Inside source: true *** True Line Result args.outputs.primitives << [part[0]-2, part[1]-2, partsize+4, partsize+4, 255, 0, 0, alpha].border ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def choose_target~ - Inside source: true *** True Line Result def choose_target ** Processing line: ~ if @target.nil?~ - Inside source: true *** True Line Result if @target.nil? ** Processing line: ~ while !@raw_joysticks.empty?~ - Inside source: true *** True Line Result while !@raw_joysticks.empty? ** Processing line: ~ t = @raw_joysticks.shift # see if there's a joystick waiting on us.~ - Inside source: true *** True Line Result t = @raw_joysticks.shift # see if there's a joystick waiting on us. ** Processing line: ~ next if t[0] < 0 # just in case.~ - Inside source: true *** True Line Result next if t[0] < 0 # just in case. ** Processing line: ~ next if t[1][:guid].nil? # did we already handle this guid? Dump it.~ - Inside source: true *** True Line Result next if t[1][:guid].nil? # did we already handle this guid? Dump it. ** Processing line: ~ @target = t~ - Inside source: true *** True Line Result @target = t ** Processing line: ~ break~ - Inside source: true *** True Line Result break ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ return false if @target.nil? # nothing to configure at the moment.~ - Inside source: true *** True Line Result return false if @target.nil? # nothing to configure at the moment. ** Processing line: ~ @toggled_at = Kernel.global_tick_count~ - Inside source: true *** True Line Result @toggled_at = Kernel.global_tick_count ** Processing line: ~ @fading = 1~ - Inside source: true *** True Line Result @fading = 1 ** Processing line: ~ @current_part = 0~ - Inside source: true *** True Line Result @current_part = 0 ** Processing line: ~ @part_alpha = 0~ - Inside source: true *** True Line Result @part_alpha = 0 ** Processing line: ~ @part_alpha_increment = 10~ - Inside source: true *** True Line Result @part_alpha_increment = 10 ** Processing line: ~ @joystick_state = {}~ - Inside source: true *** True Line Result @joystick_state = {} ** Processing line: ~ @used_bindings = {}~ - Inside source: true *** True Line Result @used_bindings = {} ** Processing line: ~ @playing_around = false~ - Inside source: true *** True Line Result @playing_around = false ** Processing line: ~ @bindings = []~ - Inside source: true *** True Line Result @bindings = [] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ return true~ - Inside source: true *** True Line Result return true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def render_part_highlight_from_bindstr args, bindstr, alpha=255~ - Inside source: true *** True Line Result def render_part_highlight_from_bindstr args, bindstr, alpha=255 ** Processing line: ~ partidx = @used_bindings[bindstr]~ - Inside source: true *** True Line Result partidx = @used_bindings[bindstr] ** Processing line: ~ return if partidx.nil?~ - Inside source: true *** True Line Result return if partidx.nil? ** Processing line: ~ render_part_highlight args, @parts[partidx], alpha~ - Inside source: true *** True Line Result render_part_highlight args, @parts[partidx], alpha ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def play_around args~ - Inside source: true *** True Line Result def play_around args ** Processing line: ~ return false if !@playing_around~ - Inside source: true *** True Line Result return false if !@playing_around ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.escape ** Processing line: ~ @current_part = 0~ - Inside source: true *** True Line Result @current_part = 0 ** Processing line: ~ @part_alpha = 0~ - Inside source: true *** True Line Result @part_alpha = 0 ** Processing line: ~ @part_alpha_increment = 10~ - Inside source: true *** True Line Result @part_alpha_increment = 10 ** Processing line: ~ @used_bindings = {}~ - Inside source: true *** True Line Result @used_bindings = {} ** Processing line: ~ @playing_around = false~ - Inside source: true *** True Line Result @playing_around = false ** Processing line: ~ @bindings = []~ - Inside source: true *** True Line Result @bindings = [] ** Processing line: ~ elsif args.inputs.keyboard.key_down.space~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.space ** Processing line: ~ jid = @target[0]~ - Inside source: true *** True Line Result jid = @target[0] ** Processing line: ~ bindingstr = build_binding_string~ - Inside source: true *** True Line Result bindingstr = build_binding_string ** Processing line: ~ #puts("new controller binding: '#{bindingstr}'")~ - Inside source: true *** True Line Result #puts("new controller binding: '#{bindingstr}'") ** Processing line: ~ @runtime.ffi_misc.add_controller_config bindingstr~ - Inside source: true *** True Line Result @runtime.ffi_misc.add_controller_config bindingstr ** Processing line: ~ @runtime.ffi_misc.convert_rawjoystick_to_controller jid~ - Inside source: true *** True Line Result @runtime.ffi_misc.convert_rawjoystick_to_controller jid ** Processing line: ~ @target[0] = -1 # Conversion closes the raw joystick.~ - Inside source: true *** True Line Result @target[0] = -1 # Conversion closes the raw joystick. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Handle any other pending joysticks that have the same GUID (so if you plug in four of the same model, we're already done!)~ - Inside source: true *** True Line Result # Handle any other pending joysticks that have the same GUID (so if you plug in four of the same model, we're already done!) ** Processing line: ~ guid = @target[1][:guid]~ - Inside source: true *** True Line Result guid = @target[1][:guid] ** Processing line: ~ @raw_joysticks.each { |jid, details|~ - Inside source: true *** True Line Result @raw_joysticks.each { |jid, details| ** Processing line: ~ if details[:guid] == guid~ - Inside source: true *** True Line Result if details[:guid] == guid ** Processing line: ~ @runtime.ffi_misc.convert_rawjoystick_to_controller jid~ - Inside source: true *** True Line Result @runtime.ffi_misc.convert_rawjoystick_to_controller jid ** Processing line: ~ details[:guid] = nil~ - Inside source: true *** True Line Result details[:guid] = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Done with this guy.~ - Inside source: true *** True Line Result # Done with this guy. ** Processing line: ~ @playing_around = false~ - Inside source: true *** True Line Result @playing_around = false ** Processing line: ~ @toggled_at = Kernel.global_tick_count~ - Inside source: true *** True Line Result @toggled_at = Kernel.global_tick_count ** Processing line: ~ @fading = -1~ - Inside source: true *** True Line Result @fading = -1 ** Processing line: ~ return false~ - Inside source: true *** True Line Result return false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_basics args, 'Now play around with the controller, and make sure it feels right!'~ - Inside source: true *** True Line Result render_basics args, 'Now play around with the controller, and make sure it feels right!' ** Processing line: ~ args.outputs.primitives << [$gtk.logical_width / 2, 90, '[ESCAPE]: Reconfigure, [SPACE]: Save this configuration', 0, 1, 0, 0, 0, 255].label~ - Inside source: true *** True Line Result args.outputs.primitives << [$gtk.logical_width / 2, 90, '[ESCAPE]: Reconfigure, [SPACE]: Save this configuration', 0, 1, 0, 0, 0, 255].label ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ axes = @joystick_state[:axes]~ - Inside source: true *** True Line Result axes = @joystick_state[:axes] ** Processing line: ~ if !axes.nil?~ - Inside source: true *** True Line Result if !axes.nil? ** Processing line: ~ for i in 0..axes.length-1~ - Inside source: true *** True Line Result for i in 0..axes.length-1 ** Processing line: ~ next if axes[i].nil?~ - Inside source: true *** True Line Result next if axes[i].nil? ** Processing line: ~ value = axes[i][:currentval]~ - Inside source: true *** True Line Result value = axes[i][:currentval] ** Processing line: ~ next if value.nil? || (value.abs < 16000)~ - Inside source: true *** True Line Result next if value.nil? || (value.abs < 16000) ** Processing line: ~ render_part_highlight_from_bindstr args, "#{value < 0 ? '-' : '+'}a#{i}"~ - Inside source: true *** True Line Result render_part_highlight_from_bindstr args, "#{value < 0 ? '-' : '+'}a#{i}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ hats = @joystick_state[:hats]~ - Inside source: true *** True Line Result hats = @joystick_state[:hats] ** Processing line: ~ if !hats.nil?~ - Inside source: true *** True Line Result if !hats.nil? ** Processing line: ~ for i in 0..hats.length-1~ - Inside source: true *** True Line Result for i in 0..hats.length-1 ** Processing line: ~ value = hats[i]~ - Inside source: true *** True Line Result value = hats[i] ** Processing line: ~ next if value.nil? || (value == 0)~ - Inside source: true *** True Line Result next if value.nil? || (value == 0) ** Processing line: ~ render_part_highlight_from_bindstr args, "h#{i}.#{value}"~ - Inside source: true *** True Line Result render_part_highlight_from_bindstr args, "h#{i}.#{value}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ buttons = @joystick_state[:buttons]~ - Inside source: true *** True Line Result buttons = @joystick_state[:buttons] ** Processing line: ~ if !buttons.nil?~ - Inside source: true *** True Line Result if !buttons.nil? ** Processing line: ~ for i in 0..buttons.length-1~ - Inside source: true *** True Line Result for i in 0..buttons.length-1 ** Processing line: ~ value = buttons[i]~ - Inside source: true *** True Line Result value = buttons[i] ** Processing line: ~ next if value.nil? || !value~ - Inside source: true *** True Line Result next if value.nil? || !value ** Processing line: ~ render_part_highlight_from_bindstr args, "b#{i}"~ - Inside source: true *** True Line Result render_part_highlight_from_bindstr args, "b#{i}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return true~ - Inside source: true *** True Line Result return true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def should_tick?~ - Inside source: true *** True Line Result def should_tick? ** Processing line: ~ return true if @play_around~ - Inside source: true *** True Line Result return true if @play_around ** Processing line: ~ return true if @target~ - Inside source: true *** True Line Result return true if @target ** Processing line: ~ return false~ - Inside source: true *** True Line Result return false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ return true if play_around args~ - Inside source: true *** True Line Result return true if play_around args ** Processing line: ~ return false if !choose_target~ - Inside source: true *** True Line Result return false if !choose_target ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ jid = @target[0]~ - Inside source: true *** True Line Result jid = @target[0] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @fading == 0~ - Inside source: true *** True Line Result if @fading == 0 ** Processing line: ~ # Cancel config?~ - Inside source: true *** True Line Result # Cancel config? ** Processing line: ~ if args.inputs.keyboard.key_down.escape~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.escape ** Processing line: ~ # !!! FIXME: prompt to ignore this joystick forever or just this run~ - Inside source: true *** True Line Result # !!! FIXME: prompt to ignore this joystick forever or just this run ** Processing line: ~ @toggled_at = Kernel.global_tick_count~ - Inside source: true *** True Line Result @toggled_at = Kernel.global_tick_count ** Processing line: ~ @fading = -1~ - Inside source: true *** True Line Result @fading = -1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @fading == 0~ - Inside source: true *** True Line Result if @fading == 0 ** Processing line: ~ if args.inputs.keyboard.key_down.backspace~ - Inside source: true *** True Line Result if args.inputs.keyboard.key_down.backspace ** Processing line: ~ previous_part~ - Inside source: true *** True Line Result previous_part ** Processing line: ~ elsif args.inputs.keyboard.key_down.space~ - Inside source: true *** True Line Result elsif args.inputs.keyboard.key_down.space ** Processing line: ~ next_part~ - Inside source: true *** True Line Result next_part ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ fade = calc_fading~ - Inside source: true *** True Line Result fade = calc_fading ** Processing line: ~ if (@fading < 0) && (fade == 0)~ - Inside source: true *** True Line Result if (@fading < 0) && (fade == 0) ** Processing line: ~ @runtime.ffi_misc.close_raw_joystick(jid) if jid >= 0~ - Inside source: true *** True Line Result @runtime.ffi_misc.close_raw_joystick(jid) if jid >= 0 ** Processing line: ~ @target = nil # done with this controller~ - Inside source: true *** True Line Result @target = nil # done with this controller ** Processing line: ~ return false~ - Inside source: true *** True Line Result return false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ render_basics args, (@fading >= 0) ? "We don't recognize this controller, so tell us about it!" : '', fade~ - Inside source: true *** True Line Result render_basics args, (@fading >= 0) ? "We don't recognize this controller, so tell us about it!" : '', fade ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return true if fade < 255 # all done for now~ - Inside source: true *** True Line Result return true if fade < 255 # all done for now ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ part = @parts[@current_part]~ - Inside source: true *** True Line Result part = @parts[@current_part] ** Processing line: ~ args.outputs.primitives << [$gtk.logical_width / 2, 575, "Please press the #{part[2]}.", 0, 1, 0, 0, 0, 255].label~ - Inside source: true *** True Line Result args.outputs.primitives << [$gtk.logical_width / 2, 575, "Please press the #{part[2]}.", 0, 1, 0, 0, 0, 255].label ** Processing line: ~ render_part_highlight args, part, @part_alpha~ - Inside source: true *** True Line Result render_part_highlight args, part, @part_alpha ** Processing line: ~ args.outputs.primitives << [$gtk.logical_width / 2, 90, '[ESCAPE]: Ignore controller, [BACKSPACE]: Go back one button, [SPACE]: Skip this button', 0, 1, 0, 0, 0, 255].label~ - Inside source: true *** True Line Result args.outputs.primitives << [$gtk.logical_width / 2, 90, '[ESCAPE]: Ignore controller, [BACKSPACE]: Go back one button, [SPACE]: Skip this button', 0, 1, 0, 0, 0, 255].label ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @part_alpha += @part_alpha_increment~ - Inside source: true *** True Line Result @part_alpha += @part_alpha_increment ** Processing line: ~ if (@part_alpha_increment > 0) && (@part_alpha >= 255)~ - Inside source: true *** True Line Result if (@part_alpha_increment > 0) && (@part_alpha >= 255) ** Processing line: ~ @part_alpha = 255~ - Inside source: true *** True Line Result @part_alpha = 255 ** Processing line: ~ @part_alpha_increment = -10~ - Inside source: true *** True Line Result @part_alpha_increment = -10 ** Processing line: ~ elsif (@part_alpha_increment < 0) && (@part_alpha <= 0)~ - Inside source: true *** True Line Result elsif (@part_alpha_increment < 0) && (@part_alpha <= 0) ** Processing line: ~ @part_alpha = 0~ - Inside source: true *** True Line Result @part_alpha = 0 ** Processing line: ~ @part_alpha_increment = 10~ - Inside source: true *** True Line Result @part_alpha_increment = 10 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return true~ - Inside source: true *** True Line Result return true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** controller/keys.rb~ - Header detected. *** True Line Result *** True Line Result *** controller/keys.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/controller/keys.rb~ - Inside source: true *** True Line Result # ./dragon/controller/keys.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # controller/keys.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # controller/keys.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Controller~ - Inside source: true *** True Line Result class Controller ** Processing line: ~ class Keys~ - Inside source: true *** True Line Result class Keys ** Processing line: ~ include Serialize~ - Inside source: true *** True Line Result include Serialize ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ LABELS = [~ - Inside source: true *** True Line Result LABELS = [ ** Processing line: ~ :up, :down, :left, :right,~ - Inside source: true *** True Line Result :up, :down, :left, :right, ** Processing line: ~ :a, :b, :x, :y,~ - Inside source: true *** True Line Result :a, :b, :x, :y, ** Processing line: ~ :l1, :r1,~ - Inside source: true *** True Line Result :l1, :r1, ** Processing line: ~ :l2, :r2,~ - Inside source: true *** True Line Result :l2, :r2, ** Processing line: ~ :l3, :r3,~ - Inside source: true *** True Line Result :l3, :r3, ** Processing line: ~ :start, :select, :home,~ - Inside source: true *** True Line Result :start, :select, :home, ** Processing line: ~ :directional_up, :directional_down, :directional_left, :directional_right~ - Inside source: true *** True Line Result :directional_up, :directional_down, :directional_left, :directional_right ** Processing line: ~ ].freeze~ - Inside source: true *** True Line Result ].freeze ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ LABELS.each do |label|~ - Inside source: true *** True Line Result LABELS.each do |label| ** Processing line: ~ attr label~ - Inside source: true *** True Line Result attr label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def back~ - Inside source: true *** True Line Result def back ** Processing line: ~ @select~ - Inside source: true *** True Line Result @select ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def back= value~ - Inside source: true *** True Line Result def back= value ** Processing line: ~ @select = value~ - Inside source: true *** True Line Result @select = value ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def guide~ - Inside source: true *** True Line Result def guide ** Processing line: ~ @home~ - Inside source: true *** True Line Result @home ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def guide= value~ - Inside source: true *** True Line Result def guide= value ** Processing line: ~ @home = value~ - Inside source: true *** True Line Result @home = value ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Activate a key.~ - Inside source: true *** True Line Result # Activate a key. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [void]~ - Inside source: true *** True Line Result # @return [void] ** Processing line: ~ def activate key~ - Inside source: true *** True Line Result def activate key ** Processing line: ~ instance_variable_set("@#{key}", Kernel.tick_count + 1)~ - Inside source: true *** True Line Result instance_variable_set("@#{key}", Kernel.tick_count + 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Deactivate a key.~ - Inside source: true *** True Line Result # Deactivate a key. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [void]~ - Inside source: true *** True Line Result # @return [void] ** Processing line: ~ def deactivate key~ - Inside source: true *** True Line Result def deactivate key ** Processing line: ~ instance_variable_set("@#{key}", nil)~ - Inside source: true *** True Line Result instance_variable_set("@#{key}", nil) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Clear all key inputs.~ - Inside source: true *** True Line Result # Clear all key inputs. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [void]~ - Inside source: true *** True Line Result # @return [void] ** Processing line: ~ def clear~ - Inside source: true *** True Line Result def clear ** Processing line: ~ LABELS.each { |label| deactivate(label) }~ - Inside source: true *** True Line Result LABELS.each { |label| deactivate(label) } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def truthy_keys~ - Inside source: true *** True Line Result def truthy_keys ** Processing line: ~ LABELS.select { |label| send(label) }~ - Inside source: true *** True Line Result LABELS.select { |label| send(label) } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** directional_input_helper_methods.rb~ - Header detected. *** True Line Result *** True Line Result *** directional_input_helper_methods.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/directional_input_helper_methods.rb~ - Inside source: true *** True Line Result # ./dragon/directional_input_helper_methods.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # directional_input_helper_methods.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # directional_input_helper_methods.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ # This is a module that contains normalization of behavior related to `up`|`down`|`left`|`right` on keyboards and controllers.~ - Inside source: true *** True Line Result # This is a module that contains normalization of behavior related to `up`|`down`|`left`|`right` on keyboards and controllers. ** Processing line: ~ module DirectionalInputHelperMethods~ - Inside source: true *** True Line Result module DirectionalInputHelperMethods ** Processing line: ~ def self.included klass~ - Inside source: true *** True Line Result def self.included klass ** Processing line: ~ key_state_methods = [:key_held, :key_down]~ - Inside source: true *** True Line Result key_state_methods = [:key_held, :key_down] ** Processing line: ~ directional_methods = [:up, :down, :left, :right]~ - Inside source: true *** True Line Result directional_methods = [:up, :down, :left, :right] ** Processing line: ~ method_results = (directional_methods + key_state_methods).map {|m| [m, klass.instance_methods.include?(m)] }~ - Inside source: true *** True Line Result method_results = (directional_methods + key_state_methods).map {|m| [m, klass.instance_methods.include?(m)] } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ error_message = <<-S~ - Inside source: true *** True Line Result error_message = <<-S ** Processing line: ~ * ERROR~ - Inside source: true *** True Line Result * ERROR ** Processing line: ~ The GTK::DirectionalKeys module should only be included in objects that respond to the following api hierarchy:~ - Inside source: true *** True Line Result The GTK::DirectionalKeys module should only be included in objects that respond to the following api hierarchy: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ - (#{ directional_methods.join("|") })~ - Inside source: true *** True Line Result - (#{ directional_methods.join("|") }) ** Processing line: ~ - key_held.(#{ directional_methods.join("|") })~ - Inside source: true *** True Line Result - key_held.(#{ directional_methods.join("|") }) ** Processing line: ~ - key_down.(#{ directional_methods.join("|") })~ - Inside source: true *** True Line Result - key_down.(#{ directional_methods.join("|") }) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #{klass} does not respond to all of these methods (here is the diagnostics):~ - Inside source: true *** True Line Result #{klass} does not respond to all of these methods (here is the diagnostics): ** Processing line: ~ #{method_results.map {|m, r| "- #{m}: #{r}"}.join("\n")}~ - Inside source: true *** True Line Result #{method_results.map {|m, r| "- #{m}: #{r}"}.join("\n")} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Please implement the methods that returned false inthe list above.~ - Inside source: true *** True Line Result Please implement the methods that returned false inthe list above. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ unless method_results.map {|m, result| result}.all?~ - Inside source: true *** True Line Result unless method_results.map {|m, result| result}.all? ** Processing line: ~ raise error_message~ - Inside source: true *** True Line Result raise error_message ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a signal indicating left (`-1`), right (`1`), or neither ('0').~ - Inside source: true *** True Line Result # Returns a signal indicating left (`-1`), right (`1`), or neither ('0'). ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Integer]~ - Inside source: true *** True Line Result # @return [Integer] ** Processing line: ~ def left_right~ - Inside source: true *** True Line Result def left_right ** Processing line: ~ return -1 if self.left~ - Inside source: true *** True Line Result return -1 if self.left ** Processing line: ~ return 1 if self.right~ - Inside source: true *** True Line Result return 1 if self.right ** Processing line: ~ return 0~ - Inside source: true *** True Line Result return 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a signal indicating up (`1`), down (`-1`), or neither ('0').~ - Inside source: true *** True Line Result # Returns a signal indicating up (`1`), down (`-1`), or neither ('0'). ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Integer]~ - Inside source: true *** True Line Result # @return [Integer] ** Processing line: ~ def up_down~ - Inside source: true *** True Line Result def up_down ** Processing line: ~ return 1 if self.up~ - Inside source: true *** True Line Result return 1 if self.up ** Processing line: ~ return -1 if self.down~ - Inside source: true *** True Line Result return -1 if self.down ** Processing line: ~ return 0~ - Inside source: true *** True Line Result return 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a normal vector (in the form of an Array with two values). If no directionals are held/down, the function returns nil.~ - Inside source: true *** True Line Result # Returns a normal vector (in the form of an Array with two values). If no directionals are held/down, the function returns nil. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # The possible results are:~ - Inside source: true *** True Line Result # The possible results are: ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # - ~nil~ which denotes that no directional input exists.~ - Inside source: true *** True Line Result # - ~nil~ which denotes that no directional input exists. ** Processing line: ~ # - ~[ 0, 1]~ which denotes that only up is being held/pressed.~ - Inside source: true *** True Line Result # - ~[ 0, 1]~ which denotes that only up is being held/pressed. ** Processing line: ~ # - ~[ 0, -1]~ which denotes that only down is being held/pressed.~ - Inside source: true *** True Line Result # - ~[ 0, -1]~ which denotes that only down is being held/pressed. ** Processing line: ~ # - ~[-0.707, 0.707]~ which denotes that right and up are being pressed/held.~ - Inside source: true *** True Line Result # - ~[-0.707, 0.707]~ which denotes that right and up are being pressed/held. ** Processing line: ~ # - ~[-0.707, -0.707]~ which denotes that left and down are being pressed/held.~ - Inside source: true *** True Line Result # - ~[-0.707, -0.707]~ which denotes that left and down are being pressed/held. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def directional_vector~ - Inside source: true *** True Line Result def directional_vector ** Processing line: ~ lr, ud = [self.left_right, self.up_down]~ - Inside source: true *** True Line Result lr, ud = [self.left_right, self.up_down] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if lr == 0 && ud == 0~ - Inside source: true *** True Line Result if lr == 0 && ud == 0 ** Processing line: ~ return nil~ - Inside source: true *** True Line Result return nil ** Processing line: ~ elsif lr.abs == ud.abs~ - Inside source: true *** True Line Result elsif lr.abs == ud.abs ** Processing line: ~ return [45.vector_x * lr.sign, 45.vector_y * ud.sign, ud.sign]~ - Inside source: true *** True Line Result return [45.vector_x * lr.sign, 45.vector_y * ud.sign, ud.sign] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return [lr, ud]~ - Inside source: true *** True Line Result return [lr, ud] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def directional_angle~ - Inside source: true *** True Line Result def directional_angle ** Processing line: ~ return nil unless directional_vector~ - Inside source: true *** True Line Result return nil unless directional_vector ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Math.atan2(up_down, left_right).to_degrees~ - Inside source: true *** True Line Result Math.atan2(up_down, left_right).to_degrees ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def method_missing m, *args~ - Inside source: true *** True Line Result def method_missing m, *args ** Processing line: ~ # combine the key with ctrl_~ - Inside source: true *** True Line Result # combine the key with ctrl_ ** Processing line: ~ if m.to_s.start_with?("ctrl_")~ - Inside source: true *** True Line Result if m.to_s.start_with?("ctrl_") ** Processing line: ~ other_key = m.to_s.split("_").last~ - Inside source: true *** True Line Result other_key = m.to_s.split("_").last ** Processing line: ~ define_singleton_method(m) do~ - Inside source: true *** True Line Result define_singleton_method(m) do ** Processing line: ~ return self.key_up.send(other_key.to_sym) && self.key_up.control~ - Inside source: true *** True Line Result return self.key_up.send(other_key.to_sym) && self.key_up.control ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return send(m)~ - Inside source: true *** True Line Result return send(m) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ # see if the key is either held or down~ - Inside source: true *** True Line Result # see if the key is either held or down ** Processing line: ~ define_singleton_method(m) do~ - Inside source: true *** True Line Result define_singleton_method(m) do ** Processing line: ~ self.key_down.send(m) || self.key_held.send(m)~ - Inside source: true *** True Line Result self.key_down.send(m) || self.key_held.send(m) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return send(m)~ - Inside source: true *** True Line Result return send(m) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** easing.rb~ - Header detected. *** True Line Result *** True Line Result *** easing.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/easing.rb~ - Inside source: true *** True Line Result # ./dragon/easing.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # easing.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # easing.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ module Easing~ - Inside source: true *** True Line Result module Easing ** Processing line: ~ def self.ease start_tick, current_tick, duration, *definitions~ - Inside source: true *** True Line Result def self.ease start_tick, current_tick, duration, *definitions ** Processing line: ~ ease_extended start_tick,~ - Inside source: true *** True Line Result ease_extended start_tick, ** Processing line: ~ current_tick,~ - Inside source: true *** True Line Result current_tick, ** Processing line: ~ start_tick + duration,~ - Inside source: true *** True Line Result start_tick + duration, ** Processing line: ~ initial_value(*definitions),~ - Inside source: true *** True Line Result initial_value(*definitions), ** Processing line: ~ final_value(*definitions),~ - Inside source: true *** True Line Result final_value(*definitions), ** Processing line: ~ *definitions~ - Inside source: true *** True Line Result *definitions ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.ease_extended start_tick, current_tick, end_tick, default_before, default_after, *definitions~ - Inside source: true *** True Line Result def self.ease_extended start_tick, current_tick, end_tick, default_before, default_after, *definitions ** Processing line: ~ definitions.flatten!~ - Inside source: true *** True Line Result definitions.flatten! ** Processing line: ~ definitions = [:identity] if definitions.length == 0~ - Inside source: true *** True Line Result definitions = [:identity] if definitions.length == 0 ** Processing line: ~ duration = end_tick - start_tick~ - Inside source: true *** True Line Result duration = end_tick - start_tick ** Processing line: ~ elapsed = current_tick - start_tick~ - Inside source: true *** True Line Result elapsed = current_tick - start_tick ** Processing line: ~ y = elapsed.percentage_of(duration).cap_min_max(0, 1)~ - Inside source: true *** True Line Result y = elapsed.percentage_of(duration).cap_min_max(0, 1) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ definitions.map do |definition|~ - Inside source: true *** True Line Result definitions.map do |definition| ** Processing line: ~ y = Easing.exec_definition(definition, start_tick, duration, y)~ - Inside source: true *** True Line Result y = Easing.exec_definition(definition, start_tick, duration, y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ y~ - Inside source: true *** True Line Result y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.ease_spline start_tick, current_tick, duration, spline~ - Inside source: true *** True Line Result def self.ease_spline start_tick, current_tick, duration, spline ** Processing line: ~ ease_spline_extended start_tick, current_tick, start_tick + duration, spline~ - Inside source: true *** True Line Result ease_spline_extended start_tick, current_tick, start_tick + duration, spline ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.ease_spline_extended start_tick, current_tick, end_tick, spline~ - Inside source: true *** True Line Result def self.ease_spline_extended start_tick, current_tick, end_tick, spline ** Processing line: ~ return spline[-1][-1] if current_tick >= end_tick~ - Inside source: true *** True Line Result return spline[-1][-1] if current_tick >= end_tick ** Processing line: ~ duration = end_tick - start_tick~ - Inside source: true *** True Line Result duration = end_tick - start_tick ** Processing line: ~ t = (current_tick - start_tick).fdiv duration~ - Inside source: true *** True Line Result t = (current_tick - start_tick).fdiv duration ** Processing line: ~ time_allocation_per_curve = 1.fdiv(spline.length)~ - Inside source: true *** True Line Result time_allocation_per_curve = 1.fdiv(spline.length) ** Processing line: ~ curve_index, curve_t = t.fdiv(time_allocation_per_curve).let do |spline_t|~ - Inside source: true *** True Line Result curve_index, curve_t = t.fdiv(time_allocation_per_curve).let do |spline_t| ** Processing line: ~ [spline_t.to_i, spline_t - spline_t.to_i]~ - Inside source: true *** True Line Result [spline_t.to_i, spline_t - spline_t.to_i] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ Geometry.cubic_bezier curve_t, *spline[curve_index]~ - Inside source: true *** True Line Result Geometry.cubic_bezier curve_t, *spline[curve_index] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.initial_value *definitions~ - Inside source: true *** True Line Result def self.initial_value *definitions ** Processing line: ~ definitions.flatten!~ - Inside source: true *** True Line Result definitions.flatten! ** Processing line: ~ return Easing.exec_definition (definitions.at(-1) || :identity), 0, 10, 0~ - Inside source: true *** True Line Result return Easing.exec_definition (definitions.at(-1) || :identity), 0, 10, 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.final_value *definitions~ - Inside source: true *** True Line Result def self.final_value *definitions ** Processing line: ~ definitions.flatten!~ - Inside source: true *** True Line Result definitions.flatten! ** Processing line: ~ return Easing.exec_definition (definitions.at(-1) || :identity), 0, 10, 1.0~ - Inside source: true *** True Line Result return Easing.exec_definition (definitions.at(-1) || :identity), 0, 10, 1.0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.exec_definition definition, start_tick, duration, x~ - Inside source: true *** True Line Result def self.exec_definition definition, start_tick, duration, x ** Processing line: ~ if definition.is_a? Symbol~ - Inside source: true *** True Line Result if definition.is_a? Symbol ** Processing line: ~ return Easing.send(definition, x).cap_min_max(0, 1)~ - Inside source: true *** True Line Result return Easing.send(definition, x).cap_min_max(0, 1) ** Processing line: ~ elsif definition.is_a? Proc~ - Inside source: true *** True Line Result elsif definition.is_a? Proc ** Processing line: ~ return definition.call(x, start_tick, duration).cap_min_max(0, 1)~ - Inside source: true *** True Line Result return definition.call(x, start_tick, duration).cap_min_max(0, 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ I don't know how to execute easing function with definition #{definition}.~ - Inside source: true *** True Line Result I don't know how to execute easing function with definition #{definition}. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.identity x~ - Inside source: true *** True Line Result def self.identity x ** Processing line: ~ x~ - Inside source: true *** True Line Result x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.flip x~ - Inside source: true *** True Line Result def self.flip x ** Processing line: ~ 1 - x~ - Inside source: true *** True Line Result 1 - x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.quad x~ - Inside source: true *** True Line Result def self.quad x ** Processing line: ~ x * x~ - Inside source: true *** True Line Result x * x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.cube x~ - Inside source: true *** True Line Result def self.cube x ** Processing line: ~ x * x * x~ - Inside source: true *** True Line Result x * x * x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.quart x~ - Inside source: true *** True Line Result def self.quart x ** Processing line: ~ x * x * x * x * x~ - Inside source: true *** True Line Result x * x * x * x * x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.quint x~ - Inside source: true *** True Line Result def self.quint x ** Processing line: ~ x * x * x * x * x * x~ - Inside source: true *** True Line Result x * x * x * x * x * x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Easing = GTK::Easing~ - Inside source: true *** True Line Result Easing = GTK::Easing ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** entity.rb~ - Header detected. *** True Line Result *** True Line Result *** entity.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/entity.rb~ - Inside source: true *** True Line Result # ./dragon/entity.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # entity.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # entity.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Entity~ - Inside source: true *** True Line Result class Entity ** Processing line: ~ def self.id!~ - Inside source: true *** True Line Result def self.id! ** Processing line: ~ @id ||= 0~ - Inside source: true *** True Line Result @id ||= 0 ** Processing line: ~ @id += 1~ - Inside source: true *** True Line Result @id += 1 ** Processing line: ~ @id~ - Inside source: true *** True Line Result @id ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.__reset_id__!~ - Inside source: true *** True Line Result def self.__reset_id__! ** Processing line: ~ @id = 0~ - Inside source: true *** True Line Result @id = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.strict_entities~ - Inside source: true *** True Line Result def self.strict_entities ** Processing line: ~ @strict_entities ||= {}~ - Inside source: true *** True Line Result @strict_entities ||= {} ** Processing line: ~ @strict_entities~ - Inside source: true *** True Line Result @strict_entities ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.parse_serialization_data data~ - Inside source: true *** True Line Result def self.parse_serialization_data data ** Processing line: ~ r = Entity.parse_serialization_data data~ - Inside source: true *** True Line Result r = Entity.parse_serialization_data data ** Processing line: ~ return r if r.is_a? OpenEntity~ - Inside source: true *** True Line Result return r if r.is_a? OpenEntity ** Processing line: ~ return r if r.is_a? StrictEntity~ - Inside source: true *** True Line Result return r if r.is_a? StrictEntity ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ The save data looks to be corrupt.~ - Inside source: true *** True Line Result The save data looks to be corrupt. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.parse_serialization_data value~ - Inside source: true *** True Line Result def self.parse_serialization_data value ** Processing line: ~ if value.is_a?(Hash) && value[:entity_id] && value[:entity_strict]~ - Inside source: true *** True Line Result if value.is_a?(Hash) && value[:entity_id] && value[:entity_strict] ** Processing line: ~ o = new_entity_strict value[:entity_name], value~ - Inside source: true *** True Line Result o = new_entity_strict value[:entity_name], value ** Processing line: ~ o.load_entity_data! value~ - Inside source: true *** True Line Result o.load_entity_data! value ** Processing line: ~ return o~ - Inside source: true *** True Line Result return o ** Processing line: ~ elsif value.is_a?(Hash) && value[:entity_id]~ - Inside source: true *** True Line Result elsif value.is_a?(Hash) && value[:entity_id] ** Processing line: ~ o = OpenEntity.new~ - Inside source: true *** True Line Result o = OpenEntity.new ** Processing line: ~ o.load_entity_data! value~ - Inside source: true *** True Line Result o.load_entity_data! value ** Processing line: ~ return o~ - Inside source: true *** True Line Result return o ** Processing line: ~ elsif value.is_a? Array~ - Inside source: true *** True Line Result elsif value.is_a? Array ** Processing line: ~ return value.map { |entry| Entity.parse_serialization_data entry }~ - Inside source: true *** True Line Result return value.map { |entry| Entity.parse_serialization_data entry } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return value~ - Inside source: true *** True Line Result return value ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.new_entity entity_type, init_hash = nil, block = nil~ - Inside source: true *** True Line Result def self.new_entity entity_type, init_hash = nil, block = nil ** Processing line: ~ n = OpenEntity.new(entity_type)~ - Inside source: true *** True Line Result n = OpenEntity.new(entity_type) ** Processing line: ~ n.entity_type = entity_type~ - Inside source: true *** True Line Result n.entity_type = entity_type ** Processing line: ~ n.created_at = Kernel.tick_count~ - Inside source: true *** True Line Result n.created_at = Kernel.tick_count ** Processing line: ~ n.global_created_at = Kernel.global_tick_count~ - Inside source: true *** True Line Result n.global_created_at = Kernel.global_tick_count ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if init_hash~ - Inside source: true *** True Line Result if init_hash ** Processing line: ~ init_hash.each do |k, v|~ - Inside source: true *** True Line Result init_hash.each do |k, v| ** Processing line: ~ n.as_hash[k] = v~ - Inside source: true *** True Line Result n.as_hash[k] = v ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ block.call(n) if block~ - Inside source: true *** True Line Result block.call(n) if block ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ n~ - Inside source: true *** True Line Result n ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.new_entity_strict entity_type, init_hash = nil, block = nil~ - Inside source: true *** True Line Result def self.new_entity_strict entity_type, init_hash = nil, block = nil ** Processing line: ~ if !Entity.strict_entities[entity_type]~ - Inside source: true *** True Line Result if !Entity.strict_entities[entity_type] ** Processing line: ~ init_hash ||= { }~ - Inside source: true *** True Line Result init_hash ||= { } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ n = new_entity entity_type, init_hash, block~ - Inside source: true *** True Line Result n = new_entity entity_type, init_hash, block ** Processing line: ~ klass = Class.new(StrictEntity)~ - Inside source: true *** True Line Result klass = Class.new(StrictEntity) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ klass.class_eval do~ - Inside source: true *** True Line Result klass.class_eval do ** Processing line: ~ init_hash.each do |k, v|~ - Inside source: true *** True Line Result init_hash.each do |k, v| ** Processing line: ~ attr_accessor k~ - Inside source: true *** True Line Result attr_accessor k ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ n.as_hash.each do |k, v|~ - Inside source: true *** True Line Result n.as_hash.each do |k, v| ** Processing line: ~ attr_accessor k if !init_hash[k]~ - Inside source: true *** True Line Result attr_accessor k if !init_hash[k] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Entity.strict_entities[entity_type] = klass~ - Inside source: true *** True Line Result Entity.strict_entities[entity_type] = klass ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ klass = Entity.strict_entities[entity_type]~ - Inside source: true *** True Line Result klass = Entity.strict_entities[entity_type] ** Processing line: ~ (klass.new entity_type, init_hash, block)~ - Inside source: true *** True Line Result (klass.new entity_type, init_hash, block) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** geometry.rb~ - Header detected. *** True Line Result *** True Line Result *** geometry.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/geometry.rb~ - Inside source: true *** True Line Result # ./dragon/geometry.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # geometry.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # geometry.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ module Geometry~ - Inside source: true *** True Line Result module Geometry ** Processing line: ~ def self.rotate_point point, angle, around = nil~ - Inside source: true *** True Line Result def self.rotate_point point, angle, around = nil ** Processing line: ~ s = Math.sin angle.to_radians~ - Inside source: true *** True Line Result s = Math.sin angle.to_radians ** Processing line: ~ c = Math.cos angle.to_radians~ - Inside source: true *** True Line Result c = Math.cos angle.to_radians ** Processing line: ~ px = point.x~ - Inside source: true *** True Line Result px = point.x ** Processing line: ~ py = point.y~ - Inside source: true *** True Line Result py = point.y ** Processing line: ~ cx = 0~ - Inside source: true *** True Line Result cx = 0 ** Processing line: ~ cy = 0~ - Inside source: true *** True Line Result cy = 0 ** Processing line: ~ if around~ - Inside source: true *** True Line Result if around ** Processing line: ~ cx = around.x~ - Inside source: true *** True Line Result cx = around.x ** Processing line: ~ cy = around.y~ - Inside source: true *** True Line Result cy = around.y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ point.merge(x: ((px - cx) * c - (py - cy) * s) + cx,~ - Inside source: true *** True Line Result point.merge(x: ((px - cx) * c - (py - cy) * s) + cx, ** Processing line: ~ y: ((px - cx) * s + (py - cy) * c) + cy)~ - Inside source: true *** True Line Result y: ((px - cx) * s + (py - cy) * c) + cy) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns f(t) for a cubic Bezier curve.~ - Inside source: true *** True Line Result # Returns f(t) for a cubic Bezier curve. ** Processing line: ~ def self.cubic_bezier t, a, b, c, d~ - Inside source: true *** True Line Result def self.cubic_bezier t, a, b, c, d ** Processing line: ~ s = 1 - t~ - Inside source: true *** True Line Result s = 1 - t ** Processing line: ~ s0 = 1~ - Inside source: true *** True Line Result s0 = 1 ** Processing line: ~ s1 = s~ - Inside source: true *** True Line Result s1 = s ** Processing line: ~ s2 = s * s~ - Inside source: true *** True Line Result s2 = s * s ** Processing line: ~ s3 = s * s * s~ - Inside source: true *** True Line Result s3 = s * s * s ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ t0 = 1~ - Inside source: true *** True Line Result t0 = 1 ** Processing line: ~ t1 = t~ - Inside source: true *** True Line Result t1 = t ** Processing line: ~ t2 = t * t~ - Inside source: true *** True Line Result t2 = t * t ** Processing line: ~ t3 = t * t * t~ - Inside source: true *** True Line Result t3 = t * t * t ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ 1 * s3 * t0 * a +~ - Inside source: true *** True Line Result 1 * s3 * t0 * a + ** Processing line: ~ 3 * s2 * t1 * b +~ - Inside source: true *** True Line Result 3 * s2 * t1 * b + ** Processing line: ~ 3 * s1 * t2 * c +~ - Inside source: true *** True Line Result 3 * s1 * t2 * c + ** Processing line: ~ 1 * s0 * t3 * d~ - Inside source: true *** True Line Result 1 * s0 * t3 * d ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns true if a primitive's rectangle is entirely inside another primitive's rectangle.~ - Inside source: true *** True Line Result # Returns true if a primitive's rectangle is entirely inside another primitive's rectangle. ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def inside_rect? outer, tolerance = 0.0~ - Inside source: true *** True Line Result def inside_rect? outer, tolerance = 0.0 ** Processing line: ~ Geometry.inside_rect? self, outer, tolerance~ - Inside source: true *** True Line Result Geometry.inside_rect? self, outer, tolerance ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns true if a primitive's rectangle overlaps another primitive's rectangle.~ - Inside source: true *** True Line Result # Returns true if a primitive's rectangle overlaps another primitive's rectangle. ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def intersect_rect? other, tolerance = 0.1~ - Inside source: true *** True Line Result def intersect_rect? other, tolerance = 0.1 ** Processing line: ~ Geometry.intersect_rect? self, other, tolerance~ - Inside source: true *** True Line Result Geometry.intersect_rect? self, other, tolerance ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def intersects_rect? *args~ - Inside source: true *** True Line Result def intersects_rect? *args ** Processing line: ~ Geometry.intersects_rect?(*args)~ - Inside source: true *** True Line Result Geometry.intersects_rect?(*args) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def scale_rect_extended percentage_x: percentage_x,~ - Inside source: true *** True Line Result def scale_rect_extended percentage_x: percentage_x, ** Processing line: ~ percentage_y: percentage_y,~ - Inside source: true *** True Line Result percentage_y: percentage_y, ** Processing line: ~ anchor_x: anchor_x,~ - Inside source: true *** True Line Result anchor_x: anchor_x, ** Processing line: ~ anchor_y: anchor_y~ - Inside source: true *** True Line Result anchor_y: anchor_y ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Geometry.scale_rect_extended self,~ - Inside source: true *** True Line Result Geometry.scale_rect_extended self, ** Processing line: ~ percentage_x: percentage_x,~ - Inside source: true *** True Line Result percentage_x: percentage_x, ** Processing line: ~ percentage_y: percentage_y,~ - Inside source: true *** True Line Result percentage_y: percentage_y, ** Processing line: ~ anchor_x: anchor_x,~ - Inside source: true *** True Line Result anchor_x: anchor_x, ** Processing line: ~ anchor_y: anchor_y~ - Inside source: true *** True Line Result anchor_y: anchor_y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Scales a primitive rect by a percentage.~ - Inside source: true *** True Line Result # Scales a primitive rect by a percentage. ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def scale_rect percentage, *anchors~ - Inside source: true *** True Line Result def scale_rect percentage, *anchors ** Processing line: ~ Geometry.scale_rect self, percentage, *anchors~ - Inside source: true *** True Line Result Geometry.scale_rect self, percentage, *anchors ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the angle from one primitive to another primitive.~ - Inside source: true *** True Line Result # Returns the angle from one primitive to another primitive. ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def angle_to other_point~ - Inside source: true *** True Line Result def angle_to other_point ** Processing line: ~ Geometry.angle_to self, other_point~ - Inside source: true *** True Line Result Geometry.angle_to self, other_point ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the angle to one primitive from another primitive.~ - Inside source: true *** True Line Result # Returns the angle to one primitive from another primitive. ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def angle_from other_point~ - Inside source: true *** True Line Result def angle_from other_point ** Processing line: ~ Geometry.angle_from self, other_point~ - Inside source: true *** True Line Result Geometry.angle_from self, other_point ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns true if a primitive is within a circle specified by the circle's center and radius.~ - Inside source: true *** True Line Result # Returns true if a primitive is within a circle specified by the circle's center and radius. ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def point_inside_circle? circle_center_point, radius~ - Inside source: true *** True Line Result def point_inside_circle? circle_center_point, radius ** Processing line: ~ Geometry.point_inside_circle? self, circle_center_point, radius~ - Inside source: true *** True Line Result Geometry.point_inside_circle? self, circle_center_point, radius ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.center_inside_rect rect, other_rect~ - Inside source: true *** True Line Result def self.center_inside_rect rect, other_rect ** Processing line: ~ offset_x = (other_rect.w - rect.w).half~ - Inside source: true *** True Line Result offset_x = (other_rect.w - rect.w).half ** Processing line: ~ offset_y = (other_rect.h - rect.h).half~ - Inside source: true *** True Line Result offset_y = (other_rect.h - rect.h).half ** Processing line: ~ new_rect = rect.shift_rect(0, 0)~ - Inside source: true *** True Line Result new_rect = rect.shift_rect(0, 0) ** Processing line: ~ new_rect.x = other_rect.x + offset_x~ - Inside source: true *** True Line Result new_rect.x = other_rect.x + offset_x ** Processing line: ~ new_rect.y = other_rect.y + offset_y~ - Inside source: true *** True Line Result new_rect.y = other_rect.y + offset_y ** Processing line: ~ new_rect~ - Inside source: true *** True Line Result new_rect ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise e, <<-S~ - Inside source: true *** True Line Result raise e, <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ center_inside_rect for self #{self} and other_rect #{other_rect}.\n#{e}.~ - Inside source: true *** True Line Result center_inside_rect for self #{self} and other_rect #{other_rect}.\n#{e}. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def center_inside_rect other_rect~ - Inside source: true *** True Line Result def center_inside_rect other_rect ** Processing line: ~ Geometry.center_inside_rect self, other_rect~ - Inside source: true *** True Line Result Geometry.center_inside_rect self, other_rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.center_inside_rect_x rect, other_rect~ - Inside source: true *** True Line Result def self.center_inside_rect_x rect, other_rect ** Processing line: ~ offset_x = (other_rect.w - rect.w).half~ - Inside source: true *** True Line Result offset_x = (other_rect.w - rect.w).half ** Processing line: ~ new_rect = rect.shift_rect(0, 0)~ - Inside source: true *** True Line Result new_rect = rect.shift_rect(0, 0) ** Processing line: ~ new_rect.x = other_rect.x + offset_x~ - Inside source: true *** True Line Result new_rect.x = other_rect.x + offset_x ** Processing line: ~ new_rect.y = other_rect.y~ - Inside source: true *** True Line Result new_rect.y = other_rect.y ** Processing line: ~ new_rect~ - Inside source: true *** True Line Result new_rect ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise e, <<-S~ - Inside source: true *** True Line Result raise e, <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ center_inside_rect_x for self #{self} and other_rect #{other_rect}.\n#{e}.~ - Inside source: true *** True Line Result center_inside_rect_x for self #{self} and other_rect #{other_rect}.\n#{e}. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def center_inside_rect_x other_rect~ - Inside source: true *** True Line Result def center_inside_rect_x other_rect ** Processing line: ~ Geometry.center_inside_rect_x self, other_rect~ - Inside source: true *** True Line Result Geometry.center_inside_rect_x self, other_rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.center_inside_rect_y rect, other_rect~ - Inside source: true *** True Line Result def self.center_inside_rect_y rect, other_rect ** Processing line: ~ offset_y = (other_rect.h - rect.h).half~ - Inside source: true *** True Line Result offset_y = (other_rect.h - rect.h).half ** Processing line: ~ new_rect = rect.shift_rect(0, 0)~ - Inside source: true *** True Line Result new_rect = rect.shift_rect(0, 0) ** Processing line: ~ new_rect.x = other_rect.x~ - Inside source: true *** True Line Result new_rect.x = other_rect.x ** Processing line: ~ new_rect.y = other_rect.y + offset_y~ - Inside source: true *** True Line Result new_rect.y = other_rect.y + offset_y ** Processing line: ~ new_rect~ - Inside source: true *** True Line Result new_rect ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise e, <<-S~ - Inside source: true *** True Line Result raise e, <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ center_inside_rect_y for self #{self} and other_rect #{other_rect}.\n#{e}.~ - Inside source: true *** True Line Result center_inside_rect_y for self #{self} and other_rect #{other_rect}.\n#{e}. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def center_inside_rect_y other_rect~ - Inside source: true *** True Line Result def center_inside_rect_y other_rect ** Processing line: ~ Geometry.center_inside_rect_y self, other_rect~ - Inside source: true *** True Line Result Geometry.center_inside_rect_y self, other_rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a primitive that is anchored/repositioned based off its rectangle.~ - Inside source: true *** True Line Result # Returns a primitive that is anchored/repositioned based off its rectangle. ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def anchor_rect anchor_x, anchor_y~ - Inside source: true *** True Line Result def anchor_rect anchor_x, anchor_y ** Processing line: ~ current_w = self.w~ - Inside source: true *** True Line Result current_w = self.w ** Processing line: ~ current_h = self.h~ - Inside source: true *** True Line Result current_h = self.h ** Processing line: ~ delta_x = -1 * (anchor_x * current_w)~ - Inside source: true *** True Line Result delta_x = -1 * (anchor_x * current_w) ** Processing line: ~ delta_y = -1 * (anchor_y * current_h)~ - Inside source: true *** True Line Result delta_y = -1 * (anchor_y * current_h) ** Processing line: ~ self.shift_rect(delta_x, delta_y)~ - Inside source: true *** True Line Result self.shift_rect(delta_x, delta_y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def angle_given_point other_point~ - Inside source: true *** True Line Result def angle_given_point other_point ** Processing line: ~ raise ":angle_given_point has been deprecated use :angle_from instead."~ - Inside source: true *** True Line Result raise ":angle_given_point has been deprecated use :angle_from instead." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.shift_line line, x, y~ - Inside source: true *** True Line Result def self.shift_line line, x, y ** Processing line: ~ if line.is_a?(Array) || line.is_a?(Hash)~ - Inside source: true *** True Line Result if line.is_a?(Array) || line.is_a?(Hash) ** Processing line: ~ new_line = line.dup~ - Inside source: true *** True Line Result new_line = line.dup ** Processing line: ~ new_line.x += x~ - Inside source: true *** True Line Result new_line.x += x ** Processing line: ~ new_line.x2 += x~ - Inside source: true *** True Line Result new_line.x2 += x ** Processing line: ~ new_line.y += y~ - Inside source: true *** True Line Result new_line.y += y ** Processing line: ~ new_line.y2 += y~ - Inside source: true *** True Line Result new_line.y2 += y ** Processing line: ~ new_line~ - Inside source: true *** True Line Result new_line ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ raise "shift_line for #{line} is not supported."~ - Inside source: true *** True Line Result raise "shift_line for #{line} is not supported." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.intersects_rect? *args~ - Inside source: true *** True Line Result def self.intersects_rect? *args ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ intersects_rect? (with an \"s\") has been deprecated.~ - Inside source: true *** True Line Result intersects_rect? (with an \"s\") has been deprecated. ** Processing line: ~ Use intersect_rect? instead (remove the \"s\").~ - Inside source: true *** True Line Result Use intersect_rect? instead (remove the \"s\"). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ * NOTE:~ - Inside source: true *** True Line Result * NOTE: ** Processing line: ~ Ruby's naming convention is to *never* include the \"s\" for~ - Inside source: true *** True Line Result Ruby's naming convention is to *never* include the \"s\" for ** Processing line: ~ interrogative method names (methods that end with a ?). It~ - Inside source: true *** True Line Result interrogative method names (methods that end with a ?). It ** Processing line: ~ doesn't sound grammatically correct, but that has been the~ - Inside source: true *** True Line Result doesn't sound grammatically correct, but that has been the ** Processing line: ~ rule for a long time (and why intersects_rect? has been deprecated).~ - Inside source: true *** True Line Result rule for a long time (and why intersects_rect? has been deprecated). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.line_y_intercept line, replace_infinity: nil~ - Inside source: true *** True Line Result def self.line_y_intercept line, replace_infinity: nil ** Processing line: ~ line.y - line_slope(line, replace_infinity: replace_infinity) * line.x~ - Inside source: true *** True Line Result line.y - line_slope(line, replace_infinity: replace_infinity) * line.x ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ * ERROR: ~Geometry::line_y_intercept~~ - Inside source: true *** True Line Result * ERROR: ~Geometry::line_y_intercept~ ** Processing line: ~ The following exception was thrown for line: #{line}~ - Inside source: true *** True Line Result The following exception was thrown for line: #{line} ** Processing line: ~ #{e}~ - Inside source: true *** True Line Result #{e} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Consider passing in ~replace_infinity: VALUE~ to handle for vertical lines.~ - Inside source: true *** True Line Result Consider passing in ~replace_infinity: VALUE~ to handle for vertical lines. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.angle_between_lines line_one, line_two, replace_infinity: nil~ - Inside source: true *** True Line Result def self.angle_between_lines line_one, line_two, replace_infinity: nil ** Processing line: ~ m_line_one = line_slope line_one, replace_infinity: replace_infinity~ - Inside source: true *** True Line Result m_line_one = line_slope line_one, replace_infinity: replace_infinity ** Processing line: ~ m_line_two = line_slope line_two, replace_infinity: replace_infinity~ - Inside source: true *** True Line Result m_line_two = line_slope line_two, replace_infinity: replace_infinity ** Processing line: ~ Math.atan((m_line_one - m_line_two) / (1 + m_line_two * m_line_one)).to_degrees~ - Inside source: true *** True Line Result Math.atan((m_line_one - m_line_two) / (1 + m_line_two * m_line_one)).to_degrees ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.line_slope line, replace_infinity: nil~ - Inside source: true *** True Line Result def self.line_slope line, replace_infinity: nil ** Processing line: ~ return replace_infinity if line.x2 == line.x~ - Inside source: true *** True Line Result return replace_infinity if line.x2 == line.x ** Processing line: ~ (line.y2 - line.y).fdiv(line.x2 - line.x)~ - Inside source: true *** True Line Result (line.y2 - line.y).fdiv(line.x2 - line.x) ** Processing line: ~ .replace_infinity(replace_infinity)~ - Inside source: true *** True Line Result .replace_infinity(replace_infinity) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.line_rise_run line~ - Inside source: true *** True Line Result def self.line_rise_run line ** Processing line: ~ rise = (line.y2 - line.y).to_f~ - Inside source: true *** True Line Result rise = (line.y2 - line.y).to_f ** Processing line: ~ run = (line.x2 - line.x).to_f~ - Inside source: true *** True Line Result run = (line.x2 - line.x).to_f ** Processing line: ~ if rise.abs > run.abs && rise != 0~ - Inside source: true *** True Line Result if rise.abs > run.abs && rise != 0 ** Processing line: ~ rise = rise.fdiv rise.abs~ - Inside source: true *** True Line Result rise = rise.fdiv rise.abs ** Processing line: ~ run = run.fdiv rise.abs~ - Inside source: true *** True Line Result run = run.fdiv rise.abs ** Processing line: ~ elsif run.abs > rise.abs && run != 0~ - Inside source: true *** True Line Result elsif run.abs > rise.abs && run != 0 ** Processing line: ~ rise = rise.fdiv run.abs~ - Inside source: true *** True Line Result rise = rise.fdiv run.abs ** Processing line: ~ run = run.fdiv run.abs~ - Inside source: true *** True Line Result run = run.fdiv run.abs ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ rise = rise / rise.abs if rise != 0~ - Inside source: true *** True Line Result rise = rise / rise.abs if rise != 0 ** Processing line: ~ run = run / run.abs if run != 0~ - Inside source: true *** True Line Result run = run / run.abs if run != 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ return { x: run , y: rise }~ - Inside source: true *** True Line Result return { x: run , y: rise } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.ray_test point, line~ - Inside source: true *** True Line Result def self.ray_test point, line ** Processing line: ~ slope = (line.y2 - line.y).fdiv(line.x2 - line.x)~ - Inside source: true *** True Line Result slope = (line.y2 - line.y).fdiv(line.x2 - line.x) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if line.x > line.x2~ - Inside source: true *** True Line Result if line.x > line.x2 ** Processing line: ~ point_two, point_one = [point_one, point_two]~ - Inside source: true *** True Line Result point_two, point_one = [point_one, point_two] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ r = ((line.x2 - line.x) * (point.y - line.y) -~ - Inside source: true *** True Line Result r = ((line.x2 - line.x) * (point.y - line.y) - ** Processing line: ~ (point.x - line.x) * (line.y2 - line.y))~ - Inside source: true *** True Line Result (point.x - line.x) * (line.y2 - line.y)) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if r == 0~ - Inside source: true *** True Line Result if r == 0 ** Processing line: ~ return :on~ - Inside source: true *** True Line Result return :on ** Processing line: ~ elsif r < 0~ - Inside source: true *** True Line Result elsif r < 0 ** Processing line: ~ return :right if slope >= 0~ - Inside source: true *** True Line Result return :right if slope >= 0 ** Processing line: ~ return :left~ - Inside source: true *** True Line Result return :left ** Processing line: ~ elsif r > 0~ - Inside source: true *** True Line Result elsif r > 0 ** Processing line: ~ return :left if slope >= 0~ - Inside source: true *** True Line Result return :left if slope >= 0 ** Processing line: ~ return :right~ - Inside source: true *** True Line Result return :right ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.line_rect line~ - Inside source: true *** True Line Result def self.line_rect line ** Processing line: ~ if line.x > line.x2~ - Inside source: true *** True Line Result if line.x > line.x2 ** Processing line: ~ x = line.x2~ - Inside source: true *** True Line Result x = line.x2 ** Processing line: ~ y = line.y2~ - Inside source: true *** True Line Result y = line.y2 ** Processing line: ~ x2 = line.x~ - Inside source: true *** True Line Result x2 = line.x ** Processing line: ~ y2 = line.y~ - Inside source: true *** True Line Result y2 = line.y ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ x = line.x~ - Inside source: true *** True Line Result x = line.x ** Processing line: ~ y = line.y~ - Inside source: true *** True Line Result y = line.y ** Processing line: ~ x2 = line.x2~ - Inside source: true *** True Line Result x2 = line.x2 ** Processing line: ~ y2 = line.y2~ - Inside source: true *** True Line Result y2 = line.y2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ w = x2 - x~ - Inside source: true *** True Line Result w = x2 - x ** Processing line: ~ h = y2 - y~ - Inside source: true *** True Line Result h = y2 - y ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { x: x, y: y, w: w, h: h }~ - Inside source: true *** True Line Result { x: x, y: y, w: w, h: h } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.line_intersect line_one, line_two, replace_infinity: nil~ - Inside source: true *** True Line Result def self.line_intersect line_one, line_two, replace_infinity: nil ** Processing line: ~ m1 = line_slope(line_one, replace_infinity: replace_infinity)~ - Inside source: true *** True Line Result m1 = line_slope(line_one, replace_infinity: replace_infinity) ** Processing line: ~ m2 = line_slope(line_two, replace_infinity: replace_infinity)~ - Inside source: true *** True Line Result m2 = line_slope(line_two, replace_infinity: replace_infinity) ** Processing line: ~ b1 = line_y_intercept(line_one, replace_infinity: replace_infinity)~ - Inside source: true *** True Line Result b1 = line_y_intercept(line_one, replace_infinity: replace_infinity) ** Processing line: ~ b2 = line_y_intercept(line_two, replace_infinity: replace_infinity)~ - Inside source: true *** True Line Result b2 = line_y_intercept(line_two, replace_infinity: replace_infinity) ** Processing line: ~ x = (b1 - b2) / (m2 - m1)~ - Inside source: true *** True Line Result x = (b1 - b2) / (m2 - m1) ** Processing line: ~ y = (-b2.fdiv(m2) + b1.fdiv(m1)).fdiv(1.fdiv(m1) - 1.fdiv(m2))~ - Inside source: true *** True Line Result y = (-b2.fdiv(m2) + b1.fdiv(m1)).fdiv(1.fdiv(m1) - 1.fdiv(m2)) ** Processing line: ~ [x, y]~ - Inside source: true *** True Line Result [x, y] ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ * ERROR: ~Geometry::line_intersect~~ - Inside source: true *** True Line Result * ERROR: ~Geometry::line_intersect~ ** Processing line: ~ The following exception was thrown for line_one: #{line_one}, line_two: #{line_two}~ - Inside source: true *** True Line Result The following exception was thrown for line_one: #{line_one}, line_two: #{line_two} ** Processing line: ~ #{e}~ - Inside source: true *** True Line Result #{e} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Consider passing in ~replace_infinity: VALUE~ to handle for vertical lines.~ - Inside source: true *** True Line Result Consider passing in ~replace_infinity: VALUE~ to handle for vertical lines. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.contract_intersect_rect?~ - Inside source: true *** True Line Result def self.contract_intersect_rect? ** Processing line: ~ [:left, :right, :top, :bottom]~ - Inside source: true *** True Line Result [:left, :right, :top, :bottom] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.intersect_rect? rect_one, rect_two, tolerance = 0.1~ - Inside source: true *** True Line Result def self.intersect_rect? rect_one, rect_two, tolerance = 0.1 ** Processing line: ~ return false if ((rect_one.x + rect_one.w) - tolerance) < (rect_two.x + tolerance)~ - Inside source: true *** True Line Result return false if ((rect_one.x + rect_one.w) - tolerance) < (rect_two.x + tolerance) ** Processing line: ~ return false if (rect_one.x + tolerance) > ((rect_two.x + rect_two.w) - tolerance)~ - Inside source: true *** True Line Result return false if (rect_one.x + tolerance) > ((rect_two.x + rect_two.w) - tolerance) ** Processing line: ~ return false if ((rect_one.y + rect_one.h) - tolerance) < (rect_two.y + tolerance)~ - Inside source: true *** True Line Result return false if ((rect_one.y + rect_one.h) - tolerance) < (rect_two.y + tolerance) ** Processing line: ~ return false if (rect_one.y + tolerance) > ((rect_two.y + rect_two.h) - tolerance)~ - Inside source: true *** True Line Result return false if (rect_one.y + tolerance) > ((rect_two.y + rect_two.h) - tolerance) ** Processing line: ~ return true~ - Inside source: true *** True Line Result return true ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ context_help_rect_one = (rect_one.__help_contract_implementation contract_intersect_rect?)[:not_implemented_methods]~ - Inside source: true *** True Line Result context_help_rect_one = (rect_one.__help_contract_implementation contract_intersect_rect?)[:not_implemented_methods] ** Processing line: ~ context_help_rect_two = (rect_two.__help_contract_implementation contract_intersect_rect?)[:not_implemented_methods]~ - Inside source: true *** True Line Result context_help_rect_two = (rect_two.__help_contract_implementation contract_intersect_rect?)[:not_implemented_methods] ** Processing line: ~ context_help = ""~ - Inside source: true *** True Line Result context_help = "" ** Processing line: ~ if context_help_rect_one && context_help_rect_one.length > 0~ - Inside source: true *** True Line Result if context_help_rect_one && context_help_rect_one.length > 0 ** Processing line: ~ context_help += <<-S~ - Inside source: true *** True Line Result context_help += <<-S ** Processing line: ~ rect_one needs to implement the following methods: #{context_help_rect_one}~ - Inside source: true *** True Line Result rect_one needs to implement the following methods: #{context_help_rect_one} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ You may want to try include the ~AttrRect~ module which will give you these methods.~ - Inside source: true *** True Line Result You may want to try include the ~AttrRect~ module which will give you these methods. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if context_help_rect_two && context_help_rect_two.length > 0~ - Inside source: true *** True Line Result if context_help_rect_two && context_help_rect_two.length > 0 ** Processing line: ~ context_help += <<-S~ - Inside source: true *** True Line Result context_help += <<-S ** Processing line: ~ * FAILURE REASON:~ - Inside source: true *** True Line Result * FAILURE REASON: ** Processing line: ~ rect_two needs to implement the following methods: #{context_help_rect_two}~ - Inside source: true *** True Line Result rect_two needs to implement the following methods: #{context_help_rect_two} ** Processing line: ~ NOTE: You may want to try include the ~GTK::Geometry~ module which will give you these methods.~ - Inside source: true *** True Line Result NOTE: You may want to try include the ~GTK::Geometry~ module which will give you these methods. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ raise e, <<-S~ - Inside source: true *** True Line Result raise e, <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ :intersect_rect? failed for~ - Inside source: true *** True Line Result :intersect_rect? failed for ** Processing line: ~ - rect_one: #{rect_one}~ - Inside source: true *** True Line Result - rect_one: #{rect_one} ** Processing line: ~ - rect_two: #{rect_two}~ - Inside source: true *** True Line Result - rect_two: #{rect_two} ** Processing line: ~ #{context_help}~ - Inside source: true *** True Line Result #{context_help} ** Processing line: ~ \n#{e}~ - Inside source: true *** True Line Result \n#{e} ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.to_square size, x, y, anchor_x = 0.5, anchor_y = nil~ - Inside source: true *** True Line Result def self.to_square size, x, y, anchor_x = 0.5, anchor_y = nil ** Processing line: ~ anchor_y ||= anchor_x~ - Inside source: true *** True Line Result anchor_y ||= anchor_x ** Processing line: ~ x = x.shift_left(size * anchor_x)~ - Inside source: true *** True Line Result x = x.shift_left(size * anchor_x) ** Processing line: ~ y = y.shift_down(size * anchor_y)~ - Inside source: true *** True Line Result y = y.shift_down(size * anchor_y) ** Processing line: ~ [x, y, size, size]~ - Inside source: true *** True Line Result [x, y, size, size] ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise e, ":to_square failed for size: #{size} x: #{x} y: #{y} anchor_x: #{anchor_x} anchor_y: #{anchor_y}.\n#{e}"~ - Inside source: true *** True Line Result raise e, ":to_square failed for size: #{size} x: #{x} y: #{y} anchor_x: #{anchor_x} anchor_y: #{anchor_y}.\n#{e}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.distance point_one, point_two~ - Inside source: true *** True Line Result def self.distance point_one, point_two ** Processing line: ~ Math.sqrt((point_two.x - point_one.x)**2 + (point_two.y - point_one.y)**2)~ - Inside source: true *** True Line Result Math.sqrt((point_two.x - point_one.x)**2 + (point_two.y - point_one.y)**2) ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise e, ":distance failed for point_one: #{point_one} point_two #{point_two}.\n#{e}"~ - Inside source: true *** True Line Result raise e, ":distance failed for point_one: #{point_one} point_two #{point_two}.\n#{e}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.angle_from start_point, end_point~ - Inside source: true *** True Line Result def self.angle_from start_point, end_point ** Processing line: ~ d_y = end_point.y - start_point.y~ - Inside source: true *** True Line Result d_y = end_point.y - start_point.y ** Processing line: ~ d_x = end_point.x - start_point.x~ - Inside source: true *** True Line Result d_x = end_point.x - start_point.x ** Processing line: ~ Math::PI.+(Math.atan2(d_y, d_x)).to_degrees~ - Inside source: true *** True Line Result Math::PI.+(Math.atan2(d_y, d_x)).to_degrees ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise e, ":angle_from failed for start_point: #{start_point} end_point: #{end_point}.\n#{e}"~ - Inside source: true *** True Line Result raise e, ":angle_from failed for start_point: #{start_point} end_point: #{end_point}.\n#{e}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.angle_to start_point, end_point~ - Inside source: true *** True Line Result def self.angle_to start_point, end_point ** Processing line: ~ angle_from end_point, start_point~ - Inside source: true *** True Line Result angle_from end_point, start_point ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise e, ":angle_to failed for start_point: #{start_point} end_point: #{end_point}.\n#{e}"~ - Inside source: true *** True Line Result raise e, ":angle_to failed for start_point: #{start_point} end_point: #{end_point}.\n#{e}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.point_inside_circle? point, circle_center_point, radius~ - Inside source: true *** True Line Result def self.point_inside_circle? point, circle_center_point, radius ** Processing line: ~ (point.x - circle_center_point.x) ** 2 + (point.y - circle_center_point.y) ** 2 < radius ** 2~ - Inside source: true *** True Line Result (point.x - circle_center_point.x) ** 2 + (point.y - circle_center_point.y) ** 2 < radius ** 2 ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise e, ":point_inside_circle? failed for point: #{point} circle_center_point: #{circle_center_point} radius: #{radius}.\n#{e}"~ - Inside source: true *** True Line Result raise e, ":point_inside_circle? failed for point: #{point} circle_center_point: #{circle_center_point} radius: #{radius}.\n#{e}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.inside_rect? inner_rect, outer_rect, tolerance = 0.0~ - Inside source: true *** True Line Result def self.inside_rect? inner_rect, outer_rect, tolerance = 0.0 ** Processing line: ~ return nil if !inner_rect~ - Inside source: true *** True Line Result return nil if !inner_rect ** Processing line: ~ return nil if !outer_rect~ - Inside source: true *** True Line Result return nil if !outer_rect ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ inner_rect.x + tolerance >= outer_rect.x - tolerance &&~ - Inside source: true *** True Line Result inner_rect.x + tolerance >= outer_rect.x - tolerance && ** Processing line: ~ (inner_rect.x + inner_rect.w) - tolerance <= (outer_rect.x + outer_rect.w) + tolerance &&~ - Inside source: true *** True Line Result (inner_rect.x + inner_rect.w) - tolerance <= (outer_rect.x + outer_rect.w) + tolerance && ** Processing line: ~ inner_rect.y + tolerance >= outer_rect.y - tolerance &&~ - Inside source: true *** True Line Result inner_rect.y + tolerance >= outer_rect.y - tolerance && ** Processing line: ~ (inner_rect.y + inner_rect.h) - tolerance <= (outer_rect.y + outer_rect.h) + tolerance~ - Inside source: true *** True Line Result (inner_rect.y + inner_rect.h) - tolerance <= (outer_rect.y + outer_rect.h) + tolerance ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise e, ":inside_rect? failed for inner_rect: #{inner_rect} outer_rect: #{outer_rect}.\n#{e}"~ - Inside source: true *** True Line Result raise e, ":inside_rect? failed for inner_rect: #{inner_rect} outer_rect: #{outer_rect}.\n#{e}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.scale_rect_extended rect,~ - Inside source: true *** True Line Result def self.scale_rect_extended rect, ** Processing line: ~ percentage_x: percentage_x,~ - Inside source: true *** True Line Result percentage_x: percentage_x, ** Processing line: ~ percentage_y: percentage_y,~ - Inside source: true *** True Line Result percentage_y: percentage_y, ** Processing line: ~ anchor_x: anchor_x,~ - Inside source: true *** True Line Result anchor_x: anchor_x, ** Processing line: ~ anchor_y: anchor_y~ - Inside source: true *** True Line Result anchor_y: anchor_y ** Processing line: ~ anchor_x ||= 0.0~ - Inside source: true *** True Line Result anchor_x ||= 0.0 ** Processing line: ~ anchor_y ||= 0.0~ - Inside source: true *** True Line Result anchor_y ||= 0.0 ** Processing line: ~ percentage_x ||= 1.0~ - Inside source: true *** True Line Result percentage_x ||= 1.0 ** Processing line: ~ percentage_y ||= 1.0~ - Inside source: true *** True Line Result percentage_y ||= 1.0 ** Processing line: ~ new_w = rect.w * percentage_x~ - Inside source: true *** True Line Result new_w = rect.w * percentage_x ** Processing line: ~ new_h = rect.h * percentage_y~ - Inside source: true *** True Line Result new_h = rect.h * percentage_y ** Processing line: ~ new_x = rect.x + (rect.w - new_w) * anchor_x~ - Inside source: true *** True Line Result new_x = rect.x + (rect.w - new_w) * anchor_x ** Processing line: ~ new_y = rect.y + (rect.h - new_h) * anchor_y~ - Inside source: true *** True Line Result new_y = rect.y + (rect.h - new_h) * anchor_y ** Processing line: ~ if rect.is_a? Array~ - Inside source: true *** True Line Result if rect.is_a? Array ** Processing line: ~ return [~ - Inside source: true *** True Line Result return [ ** Processing line: ~ new_x,~ - Inside source: true *** True Line Result new_x, ** Processing line: ~ new_y,~ - Inside source: true *** True Line Result new_y, ** Processing line: ~ new_w,~ - Inside source: true *** True Line Result new_w, ** Processing line: ~ new_h,~ - Inside source: true *** True Line Result new_h, ** Processing line: ~ *rect[4..-1]~ - Inside source: true *** True Line Result *rect[4..-1] ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ elsif rect.is_a? Hash~ - Inside source: true *** True Line Result elsif rect.is_a? Hash ** Processing line: ~ return rect.merge(x: new_x, y: new_y, w: new_w, h: new_h)~ - Inside source: true *** True Line Result return rect.merge(x: new_x, y: new_y, w: new_w, h: new_h) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ rect.x = new_x~ - Inside source: true *** True Line Result rect.x = new_x ** Processing line: ~ rect.y = new_y~ - Inside source: true *** True Line Result rect.y = new_y ** Processing line: ~ rect.w = new_w~ - Inside source: true *** True Line Result rect.w = new_w ** Processing line: ~ rect.h = new_h~ - Inside source: true *** True Line Result rect.h = new_h ** Processing line: ~ return rect~ - Inside source: true *** True Line Result return rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise e, ":scale_rect_extended failed for rect: #{rect} percentage_x: #{percentage_x} percentage_y: #{percentage_y} anchors_x: #{anchor_x} anchor_y: #{anchor_y}.\n#{e}"~ - Inside source: true *** True Line Result raise e, ":scale_rect_extended failed for rect: #{rect} percentage_x: #{percentage_x} percentage_y: #{percentage_y} anchors_x: #{anchor_x} anchor_y: #{anchor_y}.\n#{e}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.scale_rect rect, percentage, *anchors~ - Inside source: true *** True Line Result def self.scale_rect rect, percentage, *anchors ** Processing line: ~ anchor_x, anchor_y = *anchors.flatten~ - Inside source: true *** True Line Result anchor_x, anchor_y = *anchors.flatten ** Processing line: ~ anchor_x ||= 0~ - Inside source: true *** True Line Result anchor_x ||= 0 ** Processing line: ~ anchor_y ||= anchor_x~ - Inside source: true *** True Line Result anchor_y ||= anchor_x ** Processing line: ~ Geometry.scale_rect_extended rect,~ - Inside source: true *** True Line Result Geometry.scale_rect_extended rect, ** Processing line: ~ percentage_x: percentage,~ - Inside source: true *** True Line Result percentage_x: percentage, ** Processing line: ~ percentage_y: percentage,~ - Inside source: true *** True Line Result percentage_y: percentage, ** Processing line: ~ anchor_x: anchor_x,~ - Inside source: true *** True Line Result anchor_x: anchor_x, ** Processing line: ~ anchor_y: anchor_y~ - Inside source: true *** True Line Result anchor_y: anchor_y ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise e, ":scale_rect failed for rect: #{rect} percentage: #{percentage} anchors [#{anchor_x} (x), #{anchor_y} (y)].\n#{e}"~ - Inside source: true *** True Line Result raise e, ":scale_rect failed for rect: #{rect} percentage: #{percentage} anchors [#{anchor_x} (x), #{anchor_y} (y)].\n#{e}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.rect_to_line rect~ - Inside source: true *** True Line Result def self.rect_to_line rect ** Processing line: ~ l = rect.to_hash.line~ - Inside source: true *** True Line Result l = rect.to_hash.line ** Processing line: ~ l.merge(x2: l.x + l.w - 1,~ - Inside source: true *** True Line Result l.merge(x2: l.x + l.w - 1, ** Processing line: ~ y2: l.y + l.h)~ - Inside source: true *** True Line Result y2: l.y + l.h) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.rect_center_point rect~ - Inside source: true *** True Line Result def self.rect_center_point rect ** Processing line: ~ { x: rect.x + rect.w.half, y: rect.y + rect.h.half }~ - Inside source: true *** True Line Result { x: rect.x + rect.w.half, y: rect.y + rect.h.half } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rect_center_point~ - Inside source: true *** True Line Result def rect_center_point ** Processing line: ~ Geometry.rect_center_point self~ - Inside source: true *** True Line Result Geometry.rect_center_point self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end # module Geometry~ - Inside source: true *** True Line Result end # module Geometry ** Processing line: ~ end # module GTK~ - Inside source: true *** True Line Result end # module GTK ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** grid.rb~ - Header detected. *** True Line Result *** True Line Result *** grid.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/grid.rb~ - Inside source: true *** True Line Result # ./dragon/grid.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # grid.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # grid.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Grid~ - Inside source: true *** True Line Result class Grid ** Processing line: ~ include Serialize~ - Inside source: true *** True Line Result include Serialize ** Processing line: ~ SCREEN_Y_DIRECTION = -1.0~ - Inside source: true *** True Line Result SCREEN_Y_DIRECTION = -1.0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The coordinate system currently in use.~ - Inside source: true *** True Line Result # The coordinate system currently in use. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Symbol] `:bottom_left` or `:center`~ - Inside source: true *** True Line Result # @return [Symbol] `:bottom_left` or `:center` ** Processing line: ~ attr_accessor :name~ - Inside source: true *** True Line Result attr_accessor :name ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the "x" coordinate indicating the bottom of the screen.~ - Inside source: true *** True Line Result # Returns the "x" coordinate indicating the bottom of the screen. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ attr_accessor :bottom~ - Inside source: true *** True Line Result attr_accessor :bottom ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the "x" coordinate indicating the top of the screen.~ - Inside source: true *** True Line Result # Returns the "x" coordinate indicating the top of the screen. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ attr_accessor :top~ - Inside source: true *** True Line Result attr_accessor :top ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the "y" coordinate indicating the left of the screen.~ - Inside source: true *** True Line Result # Returns the "y" coordinate indicating the left of the screen. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ attr_accessor :left~ - Inside source: true *** True Line Result attr_accessor :left ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the "y" coordinate indicating the right of the screen.~ - Inside source: true *** True Line Result # Returns the "y" coordinate indicating the right of the screen. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ attr_accessor :right~ - Inside source: true *** True Line Result attr_accessor :right ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the "x" coordinate indicating the center of the screen.~ - Inside source: true *** True Line Result # Returns the "x" coordinate indicating the center of the screen. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ attr_accessor :center_x~ - Inside source: true *** True Line Result attr_accessor :center_x ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the "y" coordinate indicating the center of the screen.~ - Inside source: true *** True Line Result # Returns the "y" coordinate indicating the center of the screen. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ attr_accessor :center_y~ - Inside source: true *** True Line Result attr_accessor :center_y ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the bottom left and top right coordinates in a single list.~ - Inside source: true *** True Line Result # Returns the bottom left and top right coordinates in a single list. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [[Float, Float, Float, Float]]~ - Inside source: true *** True Line Result # @return [[Float, Float, Float, Float]] ** Processing line: ~ attr_accessor :rect~ - Inside source: true *** True Line Result attr_accessor :rect ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the "x" coordinate of the origin.~ - Inside source: true *** True Line Result # Returns the "x" coordinate of the origin. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ attr_accessor :origin_x~ - Inside source: true *** True Line Result attr_accessor :origin_x ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the "y" coordinate of the origin.~ - Inside source: true *** True Line Result # Returns the "y" coordinate of the origin. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ attr_accessor :origin_y~ - Inside source: true *** True Line Result attr_accessor :origin_y ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ attr_accessor :left_margin, :bottom_margin~ - Inside source: true *** True Line Result attr_accessor :left_margin, :bottom_margin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize runtime~ - Inside source: true *** True Line Result def initialize runtime ** Processing line: ~ @runtime = runtime~ - Inside source: true *** True Line Result @runtime = runtime ** Processing line: ~ @ffi_draw = runtime.ffi_draw~ - Inside source: true *** True Line Result @ffi_draw = runtime.ffi_draw ** Processing line: ~ origin_bottom_left!~ - Inside source: true *** True Line Result origin_bottom_left! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns `x` plus the origin "x".~ - Inside source: true *** True Line Result # Returns `x` plus the origin "x". ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ def transform_x x~ - Inside source: true *** True Line Result def transform_x x ** Processing line: ~ @origin_x + x~ - Inside source: true *** True Line Result @origin_x + x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns `x` minus the origin "x".~ - Inside source: true *** True Line Result # Returns `x` minus the origin "x". ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ def untransform_x x~ - Inside source: true *** True Line Result def untransform_x x ** Processing line: ~ x - @origin_x~ - Inside source: true *** True Line Result x - @origin_x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns `y` plus the origin "y".~ - Inside source: true *** True Line Result # Returns `y` plus the origin "y". ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ def transform_y y~ - Inside source: true *** True Line Result def transform_y y ** Processing line: ~ @origin_y + y * SCREEN_Y_DIRECTION~ - Inside source: true *** True Line Result @origin_y + y * SCREEN_Y_DIRECTION ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns `y` minus the origin "y".~ - Inside source: true *** True Line Result # Returns `y` minus the origin "y". ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ def untransform_y y~ - Inside source: true *** True Line Result def untransform_y y ** Processing line: ~ @origin_y + y * SCREEN_Y_DIRECTION~ - Inside source: true *** True Line Result @origin_y + y * SCREEN_Y_DIRECTION ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def ffi_draw~ - Inside source: true *** True Line Result def ffi_draw ** Processing line: ~ @ffi_draw~ - Inside source: true *** True Line Result @ffi_draw ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def ffi_draw= value~ - Inside source: true *** True Line Result def ffi_draw= value ** Processing line: ~ @ffi_draw = value~ - Inside source: true *** True Line Result @ffi_draw = value ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the rendering coordinate system to have its origin in the bottom left.~ - Inside source: true *** True Line Result # Sets the rendering coordinate system to have its origin in the bottom left. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [void]~ - Inside source: true *** True Line Result # @return [void] ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def origin_bottom_left!~ - Inside source: true *** True Line Result def origin_bottom_left! ** Processing line: ~ return if @name == :bottom_left~ - Inside source: true *** True Line Result return if @name == :bottom_left ** Processing line: ~ @name = :bottom_left~ - Inside source: true *** True Line Result @name = :bottom_left ** Processing line: ~ @origin_x = 0.0~ - Inside source: true *** True Line Result @origin_x = 0.0 ** Processing line: ~ @origin_y = @runtime.logical_height~ - Inside source: true *** True Line Result @origin_y = @runtime.logical_height ** Processing line: ~ @left = 0.0~ - Inside source: true *** True Line Result @left = 0.0 ** Processing line: ~ @right = @runtime.logical_width~ - Inside source: true *** True Line Result @right = @runtime.logical_width ** Processing line: ~ @top = @runtime.logical_height~ - Inside source: true *** True Line Result @top = @runtime.logical_height ** Processing line: ~ @bottom = 0.0~ - Inside source: true *** True Line Result @bottom = 0.0 ** Processing line: ~ @left_margin = 0.0~ - Inside source: true *** True Line Result @left_margin = 0.0 ** Processing line: ~ @bottom_margin = 0.0~ - Inside source: true *** True Line Result @bottom_margin = 0.0 ** Processing line: ~ @center_x = @runtime.logical_width.half~ - Inside source: true *** True Line Result @center_x = @runtime.logical_width.half ** Processing line: ~ @center_y = @runtime.logical_height.half~ - Inside source: true *** True Line Result @center_y = @runtime.logical_height.half ** Processing line: ~ @rect = [@left, @bottom, @runtime.logical_width, @runtime.logical_height].rect~ - Inside source: true *** True Line Result @rect = [@left, @bottom, @runtime.logical_width, @runtime.logical_height].rect ** Processing line: ~ @center = [@center_x, @center_y].point~ - Inside source: true *** True Line Result @center = [@center_x, @center_y].point ** Processing line: ~ @ffi_draw.set_grid @origin_x, @origin_y, SCREEN_Y_DIRECTION~ - Inside source: true *** True Line Result @ffi_draw.set_grid @origin_x, @origin_y, SCREEN_Y_DIRECTION ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Sets the rendering coordinate system to have its origin in the center.~ - Inside source: true *** True Line Result # Sets the rendering coordinate system to have its origin in the center. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [void]~ - Inside source: true *** True Line Result # @return [void] ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def origin_center!~ - Inside source: true *** True Line Result def origin_center! ** Processing line: ~ return if @name == :center~ - Inside source: true *** True Line Result return if @name == :center ** Processing line: ~ @name = :center~ - Inside source: true *** True Line Result @name = :center ** Processing line: ~ @origin_x = @runtime.logical_width.half~ - Inside source: true *** True Line Result @origin_x = @runtime.logical_width.half ** Processing line: ~ @origin_y = @runtime.logical_height.half~ - Inside source: true *** True Line Result @origin_y = @runtime.logical_height.half ** Processing line: ~ @left = -@runtime.logical_width.half~ - Inside source: true *** True Line Result @left = -@runtime.logical_width.half ** Processing line: ~ @right = @runtime.logical_width.half~ - Inside source: true *** True Line Result @right = @runtime.logical_width.half ** Processing line: ~ @top = @runtime.logical_height.half~ - Inside source: true *** True Line Result @top = @runtime.logical_height.half ** Processing line: ~ @bottom = -@runtime.logical_height.half~ - Inside source: true *** True Line Result @bottom = -@runtime.logical_height.half ** Processing line: ~ @center_x = 0.0~ - Inside source: true *** True Line Result @center_x = 0.0 ** Processing line: ~ @center_y = 0.0~ - Inside source: true *** True Line Result @center_y = 0.0 ** Processing line: ~ @rect = [@left, @bottom, @runtime.logical_width, @runtime.logical_height].rect~ - Inside source: true *** True Line Result @rect = [@left, @bottom, @runtime.logical_width, @runtime.logical_height].rect ** Processing line: ~ @center = [@center_x, @center_y].point~ - Inside source: true *** True Line Result @center = [@center_x, @center_y].point ** Processing line: ~ @ffi_draw.set_grid @origin_x, @origin_y, SCREEN_Y_DIRECTION~ - Inside source: true *** True Line Result @ffi_draw.set_grid @origin_x, @origin_y, SCREEN_Y_DIRECTION ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The logical width used for rendering.~ - Inside source: true *** True Line Result # The logical width used for rendering. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ def w~ - Inside source: true *** True Line Result def w ** Processing line: ~ @runtime.logical_width~ - Inside source: true *** True Line Result @runtime.logical_width ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Half the logical width used for rendering.~ - Inside source: true *** True Line Result # Half the logical width used for rendering. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ def w_half~ - Inside source: true *** True Line Result def w_half ** Processing line: ~ w.half~ - Inside source: true *** True Line Result w.half ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The logical height used for rendering.~ - Inside source: true *** True Line Result # The logical height used for rendering. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ def h~ - Inside source: true *** True Line Result def h ** Processing line: ~ @runtime.logical_height~ - Inside source: true *** True Line Result @runtime.logical_height ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Half the logical height used for rendering.~ - Inside source: true *** True Line Result # Half the logical height used for rendering. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float]~ - Inside source: true *** True Line Result # @return [Float] ** Processing line: ~ def h_half~ - Inside source: true *** True Line Result def h_half ** Processing line: ~ h.half~ - Inside source: true *** True Line Result h.half ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the coordinates indicating the center of the screen.~ - Inside source: true *** True Line Result # Returns the coordinates indicating the center of the screen. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [[Float, Float]]~ - Inside source: true *** True Line Result # @return [[Float, Float]] ** Processing line: ~ def center~ - Inside source: true *** True Line Result def center ** Processing line: ~ @center~ - Inside source: true *** True Line Result @center ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the coordinates indicating the bottom right of the screen.~ - Inside source: true *** True Line Result # Returns the coordinates indicating the bottom right of the screen. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [[Float, Float]]~ - Inside source: true *** True Line Result # @return [[Float, Float]] ** Processing line: ~ def bottom_right~ - Inside source: true *** True Line Result def bottom_right ** Processing line: ~ [@right, @bottom].point~ - Inside source: true *** True Line Result [@right, @bottom].point ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def x~ - Inside source: true *** True Line Result def x ** Processing line: ~ 0~ - Inside source: true *** True Line Result 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def y~ - Inside source: true *** True Line Result def y ** Processing line: ~ 0~ - Inside source: true *** True Line Result 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** inputs.rb~ - Header detected. *** True Line Result *** True Line Result *** inputs.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/inputs.rb~ - Inside source: true *** True Line Result # ./dragon/inputs.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # inputs.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # inputs.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ # Represents all the keys available on the keyboard.~ - Inside source: true *** True Line Result # Represents all the keys available on the keyboard. ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ class KeyboardKeys~ - Inside source: true *** True Line Result class KeyboardKeys ** Processing line: ~ include Serialize~ - Inside source: true *** True Line Result include Serialize ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_accessor :exclamation_point,~ - Inside source: true *** True Line Result attr_accessor :exclamation_point, ** Processing line: ~ :zero, :one, :two, :three, :four,~ - Inside source: true *** True Line Result :zero, :one, :two, :three, :four, ** Processing line: ~ :five, :six, :seven, :eight, :nine,~ - Inside source: true *** True Line Result :five, :six, :seven, :eight, :nine, ** Processing line: ~ :backspace, :delete, :escape, :enter, :tab,~ - Inside source: true *** True Line Result :backspace, :delete, :escape, :enter, :tab, ** Processing line: ~ :open_round_brace, :close_round_brace,~ - Inside source: true *** True Line Result :open_round_brace, :close_round_brace, ** Processing line: ~ :open_curly_brace, :close_curly_brace,~ - Inside source: true *** True Line Result :open_curly_brace, :close_curly_brace, ** Processing line: ~ :open_square_brace, :close_square_brace,~ - Inside source: true *** True Line Result :open_square_brace, :close_square_brace, ** Processing line: ~ :colon, :semicolon, :equal_sign,~ - Inside source: true *** True Line Result :colon, :semicolon, :equal_sign, ** Processing line: ~ :hyphen, :space, :dollar_sign,~ - Inside source: true *** True Line Result :hyphen, :space, :dollar_sign, ** Processing line: ~ :double_quotation_mark,~ - Inside source: true *** True Line Result :double_quotation_mark, ** Processing line: ~ :single_quotation_mark,~ - Inside source: true *** True Line Result :single_quotation_mark, ** Processing line: ~ :backtick,~ - Inside source: true *** True Line Result :backtick, ** Processing line: ~ :tilde, :period, :comma, :pipe,~ - Inside source: true *** True Line Result :tilde, :period, :comma, :pipe, ** Processing line: ~ :underscore,~ - Inside source: true *** True Line Result :underscore, ** Processing line: ~ :a, :b, :c, :d, :e, :f, :g, :h,~ - Inside source: true *** True Line Result :a, :b, :c, :d, :e, :f, :g, :h, ** Processing line: ~ :i, :j, :k, :l, :m, :n, :o, :p,~ - Inside source: true *** True Line Result :i, :j, :k, :l, :m, :n, :o, :p, ** Processing line: ~ :q, :r, :s, :t, :u, :v, :w, :x,~ - Inside source: true *** True Line Result :q, :r, :s, :t, :u, :v, :w, :x, ** Processing line: ~ :y, :z,~ - Inside source: true *** True Line Result :y, :z, ** Processing line: ~ :shift, :control, :alt, :meta,~ - Inside source: true *** True Line Result :shift, :control, :alt, :meta, ** Processing line: ~ :shift_left, :shift_right,~ - Inside source: true *** True Line Result :shift_left, :shift_right, ** Processing line: ~ :control_left, :control_right,~ - Inside source: true *** True Line Result :control_left, :control_right, ** Processing line: ~ :alt_left, :alt_right,~ - Inside source: true *** True Line Result :alt_left, :alt_right, ** Processing line: ~ :meta_left, :meta_right,~ - Inside source: true *** True Line Result :meta_left, :meta_right, ** Processing line: ~ :home, :end,~ - Inside source: true *** True Line Result :home, :end, ** Processing line: ~ :left, :right, :up, :down, :pageup, :pagedown,~ - Inside source: true *** True Line Result :left, :right, :up, :down, :pageup, :pagedown, ** Processing line: ~ :char, :plus, :at, :forward_slash, :back_slash, :asterisk,~ - Inside source: true *** True Line Result :char, :plus, :at, :forward_slash, :back_slash, :asterisk, ** Processing line: ~ :less_than, :greater_than, :carat, :ampersand, :superscript_two,~ - Inside source: true *** True Line Result :less_than, :greater_than, :carat, :ampersand, :superscript_two, ** Processing line: ~ :circumflex,~ - Inside source: true *** True Line Result :circumflex, ** Processing line: ~ :question_mark, :section_sign, :ordinal_indicator,~ - Inside source: true *** True Line Result :question_mark, :section_sign, :ordinal_indicator, ** Processing line: ~ :raw_key~ - Inside source: true *** True Line Result :raw_key ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.sdl_to_key raw_key, modifier~ - Inside source: true *** True Line Result def self.sdl_to_key raw_key, modifier ** Processing line: ~ return nil unless (raw_key >= 0 && raw_key <= 255) ||~ - Inside source: true *** True Line Result return nil unless (raw_key >= 0 && raw_key <= 255) || ** Processing line: ~ raw_key == 1073741903 ||~ - Inside source: true *** True Line Result raw_key == 1073741903 || ** Processing line: ~ raw_key == 1073741904 ||~ - Inside source: true *** True Line Result raw_key == 1073741904 || ** Processing line: ~ raw_key == 1073741905 ||~ - Inside source: true *** True Line Result raw_key == 1073741905 || ** Processing line: ~ raw_key == 1073741906 ||~ - Inside source: true *** True Line Result raw_key == 1073741906 || ** Processing line: ~ raw_key == 1073741899 ||~ - Inside source: true *** True Line Result raw_key == 1073741899 || ** Processing line: ~ raw_key == 1073741902 ||~ - Inside source: true *** True Line Result raw_key == 1073741902 || ** Processing line: ~ raw_key == 1073741898 ||~ - Inside source: true *** True Line Result raw_key == 1073741898 || ** Processing line: ~ raw_key == 1073741901 ||~ - Inside source: true *** True Line Result raw_key == 1073741901 || ** Processing line: ~ (raw_key >= 1073742048 && raw_key <= 1073742055) # Modifier Keys~ - Inside source: true *** True Line Result (raw_key >= 1073742048 && raw_key <= 1073742055) # Modifier Keys ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ char = KeyboardKeys.char_with_shift raw_key, modifier~ - Inside source: true *** True Line Result char = KeyboardKeys.char_with_shift raw_key, modifier ** Processing line: ~ names = KeyboardKeys.char_to_method char, raw_key~ - Inside source: true *** True Line Result names = KeyboardKeys.char_to_method char, raw_key ** Processing line: ~ names << :alt if (modifier & (256|512)) != 0 # alt key~ - Inside source: true *** True Line Result names << :alt if (modifier & (256|512)) != 0 # alt key ** Processing line: ~ names << :meta if (modifier & (1024|2048)) != 0 # meta key (command/apple/windows key)~ - Inside source: true *** True Line Result names << :meta if (modifier & (1024|2048)) != 0 # meta key (command/apple/windows key) ** Processing line: ~ names << :control if (modifier & (64|128)) != 0 # ctrl key~ - Inside source: true *** True Line Result names << :control if (modifier & (64|128)) != 0 # ctrl key ** Processing line: ~ names << :shift if (modifier & (1|2)) != 0 # shift key~ - Inside source: true *** True Line Result names << :shift if (modifier & (1|2)) != 0 # shift key ** Processing line: ~ names~ - Inside source: true *** True Line Result names ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.utf_8_char raw_key~ - Inside source: true *** True Line Result def self.utf_8_char raw_key ** Processing line: ~ return "²" if raw_key == 178~ - Inside source: true *** True Line Result return "²" if raw_key == 178 ** Processing line: ~ return "§" if raw_key == 167~ - Inside source: true *** True Line Result return "§" if raw_key == 167 ** Processing line: ~ return "º" if raw_key == 186~ - Inside source: true *** True Line Result return "º" if raw_key == 186 ** Processing line: ~ return raw_key.chr~ - Inside source: true *** True Line Result return raw_key.chr ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.char_with_shift raw_key, modifier~ - Inside source: true *** True Line Result def self.char_with_shift raw_key, modifier ** Processing line: ~ return nil unless raw_key >= 0 && raw_key <= 255~ - Inside source: true *** True Line Result return nil unless raw_key >= 0 && raw_key <= 255 ** Processing line: ~ if modifier != 1 && modifier != 2 && modifier != 3~ - Inside source: true *** True Line Result if modifier != 1 && modifier != 2 && modifier != 3 ** Processing line: ~ return utf_8_char raw_key~ - Inside source: true *** True Line Result return utf_8_char raw_key ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ @shift_keys ||= {~ - Inside source: true *** True Line Result @shift_keys ||= { ** Processing line: ~ '`' => '~', '-' => '_', "'" => '"', "1" => '!',~ - Inside source: true *** True Line Result '`' => '~', '-' => '_', "'" => '"', "1" => '!', ** Processing line: ~ "2" => '@', "3" => '#', "4" => '$', "5" => '%',~ - Inside source: true *** True Line Result "2" => '@', "3" => '#', "4" => '$', "5" => '%', ** Processing line: ~ "6" => '^', "7" => '&', "8" => '*', "9" => '(',~ - Inside source: true *** True Line Result "6" => '^', "7" => '&', "8" => '*', "9" => '(', ** Processing line: ~ "0" => ')', ";" => ":", "=" => "+", "[" => "{",~ - Inside source: true *** True Line Result "0" => ')', ";" => ":", "=" => "+", "[" => "{", ** Processing line: ~ "]" => "}", '\\'=> "|", '/' => "?", '.' => ">",~ - Inside source: true *** True Line Result "]" => "}", '\\'=> "|", '/' => "?", '.' => ">", ** Processing line: ~ ',' => "<", 'a' => 'A', 'b' => 'B', 'c' => 'C',~ - Inside source: true *** True Line Result ',' => "<", 'a' => 'A', 'b' => 'B', 'c' => 'C', ** Processing line: ~ 'd' => 'D', 'e' => 'E', 'f' => 'F', 'g' => 'G',~ - Inside source: true *** True Line Result 'd' => 'D', 'e' => 'E', 'f' => 'F', 'g' => 'G', ** Processing line: ~ 'h' => 'H', 'i' => 'I', 'j' => 'J', 'k' => 'K',~ - Inside source: true *** True Line Result 'h' => 'H', 'i' => 'I', 'j' => 'J', 'k' => 'K', ** Processing line: ~ 'l' => 'L', 'm' => 'M', 'n' => 'N', 'o' => 'O',~ - Inside source: true *** True Line Result 'l' => 'L', 'm' => 'M', 'n' => 'N', 'o' => 'O', ** Processing line: ~ 'p' => 'P', 'q' => 'Q', 'r' => 'R', 's' => 'S',~ - Inside source: true *** True Line Result 'p' => 'P', 'q' => 'Q', 'r' => 'R', 's' => 'S', ** Processing line: ~ 't' => 'T', 'u' => 'U', 'v' => 'V', 'w' => 'W',~ - Inside source: true *** True Line Result 't' => 'T', 'u' => 'U', 'v' => 'V', 'w' => 'W', ** Processing line: ~ 'x' => 'X', 'y' => 'Y', 'z' => 'Z'~ - Inside source: true *** True Line Result 'x' => 'X', 'y' => 'Y', 'z' => 'Z' ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @shift_keys[raw_key.chr.to_s] || raw_key.chr.to_s~ - Inside source: true *** True Line Result @shift_keys[raw_key.chr.to_s] || raw_key.chr.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.char_to_method_hash~ - Inside source: true *** True Line Result def self.char_to_method_hash ** Processing line: ~ @char_to_method ||= {~ - Inside source: true *** True Line Result @char_to_method ||= { ** Processing line: ~ 'A' => [:a],~ - Inside source: true *** True Line Result 'A' => [:a], ** Processing line: ~ 'B' => [:b],~ - Inside source: true *** True Line Result 'B' => [:b], ** Processing line: ~ 'C' => [:c],~ - Inside source: true *** True Line Result 'C' => [:c], ** Processing line: ~ 'D' => [:d],~ - Inside source: true *** True Line Result 'D' => [:d], ** Processing line: ~ 'E' => [:e],~ - Inside source: true *** True Line Result 'E' => [:e], ** Processing line: ~ 'F' => [:f],~ - Inside source: true *** True Line Result 'F' => [:f], ** Processing line: ~ 'G' => [:g],~ - Inside source: true *** True Line Result 'G' => [:g], ** Processing line: ~ 'H' => [:h],~ - Inside source: true *** True Line Result 'H' => [:h], ** Processing line: ~ 'I' => [:i],~ - Inside source: true *** True Line Result 'I' => [:i], ** Processing line: ~ 'J' => [:j],~ - Inside source: true *** True Line Result 'J' => [:j], ** Processing line: ~ 'K' => [:k],~ - Inside source: true *** True Line Result 'K' => [:k], ** Processing line: ~ 'L' => [:l],~ - Inside source: true *** True Line Result 'L' => [:l], ** Processing line: ~ 'M' => [:m],~ - Inside source: true *** True Line Result 'M' => [:m], ** Processing line: ~ 'N' => [:n],~ - Inside source: true *** True Line Result 'N' => [:n], ** Processing line: ~ 'O' => [:o],~ - Inside source: true *** True Line Result 'O' => [:o], ** Processing line: ~ 'P' => [:p],~ - Inside source: true *** True Line Result 'P' => [:p], ** Processing line: ~ 'Q' => [:q],~ - Inside source: true *** True Line Result 'Q' => [:q], ** Processing line: ~ 'R' => [:r],~ - Inside source: true *** True Line Result 'R' => [:r], ** Processing line: ~ 'S' => [:s],~ - Inside source: true *** True Line Result 'S' => [:s], ** Processing line: ~ 'T' => [:t],~ - Inside source: true *** True Line Result 'T' => [:t], ** Processing line: ~ 'U' => [:u],~ - Inside source: true *** True Line Result 'U' => [:u], ** Processing line: ~ 'V' => [:v],~ - Inside source: true *** True Line Result 'V' => [:v], ** Processing line: ~ 'W' => [:w],~ - Inside source: true *** True Line Result 'W' => [:w], ** Processing line: ~ 'X' => [:x],~ - Inside source: true *** True Line Result 'X' => [:x], ** Processing line: ~ 'Y' => [:y],~ - Inside source: true *** True Line Result 'Y' => [:y], ** Processing line: ~ 'Z' => [:z],~ - Inside source: true *** True Line Result 'Z' => [:z], ** Processing line: ~ "!" => [:exclamation_point],~ - Inside source: true *** True Line Result "!" => [:exclamation_point], ** Processing line: ~ "0" => [:zero],~ - Inside source: true *** True Line Result "0" => [:zero], ** Processing line: ~ "1" => [:one],~ - Inside source: true *** True Line Result "1" => [:one], ** Processing line: ~ "2" => [:two],~ - Inside source: true *** True Line Result "2" => [:two], ** Processing line: ~ "3" => [:three],~ - Inside source: true *** True Line Result "3" => [:three], ** Processing line: ~ "4" => [:four],~ - Inside source: true *** True Line Result "4" => [:four], ** Processing line: ~ "5" => [:five],~ - Inside source: true *** True Line Result "5" => [:five], ** Processing line: ~ "6" => [:six],~ - Inside source: true *** True Line Result "6" => [:six], ** Processing line: ~ "7" => [:seven],~ - Inside source: true *** True Line Result "7" => [:seven], ** Processing line: ~ "8" => [:eight],~ - Inside source: true *** True Line Result "8" => [:eight], ** Processing line: ~ "9" => [:nine],~ - Inside source: true *** True Line Result "9" => [:nine], ** Processing line: ~ "\b" => [:backspace],~ - Inside source: true *** True Line Result "\b" => [:backspace], ** Processing line: ~ "\e" => [:escape],~ - Inside source: true *** True Line Result "\e" => [:escape], ** Processing line: ~ "\r" => [:enter],~ - Inside source: true *** True Line Result "\r" => [:enter], ** Processing line: ~ "\t" => [:tab],~ - Inside source: true *** True Line Result "\t" => [:tab], ** Processing line: ~ "(" => [:open_round_brace],~ - Inside source: true *** True Line Result "(" => [:open_round_brace], ** Processing line: ~ ")" => [:close_round_brace],~ - Inside source: true *** True Line Result ")" => [:close_round_brace], ** Processing line: ~ "{" => [:open_curly_brace],~ - Inside source: true *** True Line Result "{" => [:open_curly_brace], ** Processing line: ~ "}" => [:close_curly_brace],~ - Inside source: true *** True Line Result "}" => [:close_curly_brace], ** Processing line: ~ "[" => [:open_square_brace],~ - Inside source: true *** True Line Result "[" => [:open_square_brace], ** Processing line: ~ "]" => [:close_square_brace],~ - Inside source: true *** True Line Result "]" => [:close_square_brace], ** Processing line: ~ ":" => [:colon],~ - Inside source: true *** True Line Result ":" => [:colon], ** Processing line: ~ ";" => [:semicolon],~ - Inside source: true *** True Line Result ";" => [:semicolon], ** Processing line: ~ "=" => [:equal_sign],~ - Inside source: true *** True Line Result "=" => [:equal_sign], ** Processing line: ~ "-" => [:hyphen],~ - Inside source: true *** True Line Result "-" => [:hyphen], ** Processing line: ~ " " => [:space],~ - Inside source: true *** True Line Result " " => [:space], ** Processing line: ~ "$" => [:dollar_sign],~ - Inside source: true *** True Line Result "$" => [:dollar_sign], ** Processing line: ~ "\"" => [:double_quotation_mark],~ - Inside source: true *** True Line Result "\"" => [:double_quotation_mark], ** Processing line: ~ "'" => [:single_quotation_mark],~ - Inside source: true *** True Line Result "'" => [:single_quotation_mark], ** Processing line: ~ "`" => [:backtick],~ - Inside source: true *** True Line Result "`" => [:backtick], ** Processing line: ~ "~" => [:tilde],~ - Inside source: true *** True Line Result "~" => [:tilde], ** Processing line: ~ "." => [:period],~ - Inside source: true *** True Line Result "." => [:period], ** Processing line: ~ "," => [:comma],~ - Inside source: true *** True Line Result "," => [:comma], ** Processing line: ~ "|" => [:pipe],~ - Inside source: true *** True Line Result "|" => [:pipe], ** Processing line: ~ "_" => [:underscore],~ - Inside source: true *** True Line Result "_" => [:underscore], ** Processing line: ~ "#" => [:hash],~ - Inside source: true *** True Line Result "#" => [:hash], ** Processing line: ~ "+" => [:plus],~ - Inside source: true *** True Line Result "+" => [:plus], ** Processing line: ~ "@" => [:at],~ - Inside source: true *** True Line Result "@" => [:at], ** Processing line: ~ "/" => [:forward_slash],~ - Inside source: true *** True Line Result "/" => [:forward_slash], ** Processing line: ~ "\\" => [:back_slash],~ - Inside source: true *** True Line Result "\\" => [:back_slash], ** Processing line: ~ "*" => [:asterisk],~ - Inside source: true *** True Line Result "*" => [:asterisk], ** Processing line: ~ "<" => [:less_than],~ - Inside source: true *** True Line Result "<" => [:less_than], ** Processing line: ~ ">" => [:greater_than],~ - Inside source: true *** True Line Result ">" => [:greater_than], ** Processing line: ~ "^" => [:circumflex],~ - Inside source: true *** True Line Result "^" => [:circumflex], ** Processing line: ~ "&" => [:ampersand],~ - Inside source: true *** True Line Result "&" => [:ampersand], ** Processing line: ~ "²" => [:superscript_two],~ - Inside source: true *** True Line Result "²" => [:superscript_two], ** Processing line: ~ "§" => [:section_sign],~ - Inside source: true *** True Line Result "§" => [:section_sign], ** Processing line: ~ "?" => [:question_mark],~ - Inside source: true *** True Line Result "?" => [:question_mark], ** Processing line: ~ '%' => [:percent_sign],~ - Inside source: true *** True Line Result '%' => [:percent_sign], ** Processing line: ~ "º" => [:ordinal_indicator],~ - Inside source: true *** True Line Result "º" => [:ordinal_indicator], ** Processing line: ~ 1073741898 => [:home],~ - Inside source: true *** True Line Result 1073741898 => [:home], ** Processing line: ~ 1073741901 => [:end],~ - Inside source: true *** True Line Result 1073741901 => [:end], ** Processing line: ~ 1073741903 => [:right],~ - Inside source: true *** True Line Result 1073741903 => [:right], ** Processing line: ~ 1073741904 => [:left],~ - Inside source: true *** True Line Result 1073741904 => [:left], ** Processing line: ~ 1073741905 => [:down],~ - Inside source: true *** True Line Result 1073741905 => [:down], ** Processing line: ~ 1073741906 => [:up],~ - Inside source: true *** True Line Result 1073741906 => [:up], ** Processing line: ~ 1073741899 => [:pageup],~ - Inside source: true *** True Line Result 1073741899 => [:pageup], ** Processing line: ~ 1073741902 => [:pagedown],~ - Inside source: true *** True Line Result 1073741902 => [:pagedown], ** Processing line: ~ 127 => [:delete],~ - Inside source: true *** True Line Result 127 => [:delete], ** Processing line: ~ 1073742049 => [:shift_left, :shift],~ - Inside source: true *** True Line Result 1073742049 => [:shift_left, :shift], ** Processing line: ~ 1073742053 => [:shift_right, :shift],~ - Inside source: true *** True Line Result 1073742053 => [:shift_right, :shift], ** Processing line: ~ 1073742048 => [:control_left, :control],~ - Inside source: true *** True Line Result 1073742048 => [:control_left, :control], ** Processing line: ~ 1073742052 => [:control_right, :control],~ - Inside source: true *** True Line Result 1073742052 => [:control_right, :control], ** Processing line: ~ 1073742050 => [:alt_left, :alt],~ - Inside source: true *** True Line Result 1073742050 => [:alt_left, :alt], ** Processing line: ~ 1073742054 => [:alt_right, :alt],~ - Inside source: true *** True Line Result 1073742054 => [:alt_right, :alt], ** Processing line: ~ 1073742051 => [:meta_left, :meta],~ - Inside source: true *** True Line Result 1073742051 => [:meta_left, :meta], ** Processing line: ~ 1073742055 => [:meta_right, :meta]~ - Inside source: true *** True Line Result 1073742055 => [:meta_right, :meta] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.method_to_key_hash~ - Inside source: true *** True Line Result def self.method_to_key_hash ** Processing line: ~ return @method_to_key_hash if @method_to_key_hash~ - Inside source: true *** True Line Result return @method_to_key_hash if @method_to_key_hash ** Processing line: ~ @method_to_key_hash = {}~ - Inside source: true *** True Line Result @method_to_key_hash = {} ** Processing line: ~ string_representation_overrides ||= {~ - Inside source: true *** True Line Result string_representation_overrides ||= { ** Processing line: ~ backspace: '\b'~ - Inside source: true *** True Line Result backspace: '\b' ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ char_to_method_hash.each do |k, v|~ - Inside source: true *** True Line Result char_to_method_hash.each do |k, v| ** Processing line: ~ v.each do |vi|~ - Inside source: true *** True Line Result v.each do |vi| ** Processing line: ~ t = { char_or_raw_key: k }~ - Inside source: true *** True Line Result t = { char_or_raw_key: k } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if k.is_a? Numeric~ - Inside source: true *** True Line Result if k.is_a? Numeric ** Processing line: ~ t[:raw_key] = k~ - Inside source: true *** True Line Result t[:raw_key] = k ** Processing line: ~ t[:string_representation] = "raw_key == #{k}"~ - Inside source: true *** True Line Result t[:string_representation] = "raw_key == #{k}" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ t[:char] = k~ - Inside source: true *** True Line Result t[:char] = k ** Processing line: ~ t[:string_representation] = "\"#{k.strip}\""~ - Inside source: true *** True Line Result t[:string_representation] = "\"#{k.strip}\"" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @method_to_key_hash[vi] = t~ - Inside source: true *** True Line Result @method_to_key_hash[vi] = t ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ @method_to_key_hash~ - Inside source: true *** True Line Result @method_to_key_hash ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.char_to_method char, int = nil~ - Inside source: true *** True Line Result def self.char_to_method char, int = nil ** Processing line: ~ methods = char_to_method_hash[char] || char_to_method_hash[int]~ - Inside source: true *** True Line Result methods = char_to_method_hash[char] || char_to_method_hash[int] ** Processing line: ~ methods ? methods.dup : [char.to_sym || int]~ - Inside source: true *** True Line Result methods ? methods.dup : [char.to_sym || int] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def clear~ - Inside source: true *** True Line Result def clear ** Processing line: ~ set truthy_keys, false~ - Inside source: true *** True Line Result set truthy_keys, false ** Processing line: ~ @scrubbed_ivars = nil~ - Inside source: true *** True Line Result @scrubbed_ivars = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def left_right~ - Inside source: true *** True Line Result def left_right ** Processing line: ~ return -1 if self.left~ - Inside source: true *** True Line Result return -1 if self.left ** Processing line: ~ return 1 if self.right~ - Inside source: true *** True Line Result return 1 if self.right ** Processing line: ~ return 0~ - Inside source: true *** True Line Result return 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def up_down~ - Inside source: true *** True Line Result def up_down ** Processing line: ~ return 1 if self.up~ - Inside source: true *** True Line Result return 1 if self.up ** Processing line: ~ return -1 if self.down~ - Inside source: true *** True Line Result return -1 if self.down ** Processing line: ~ return 0~ - Inside source: true *** True Line Result return 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def truthy_keys~ - Inside source: true *** True Line Result def truthy_keys ** Processing line: ~ get(all).find_all { |_, v| v }~ - Inside source: true *** True Line Result get(all).find_all { |_, v| v } ** Processing line: ~ .map { |k, _| k.to_sym }~ - Inside source: true *** True Line Result .map { |k, _| k.to_sym } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def all? keys~ - Inside source: true *** True Line Result def all? keys ** Processing line: ~ values = get(keys.map { |k| k.without_ending_bang })~ - Inside source: true *** True Line Result values = get(keys.map { |k| k.without_ending_bang }) ** Processing line: ~ all_true = values.all? do |k, v|~ - Inside source: true *** True Line Result all_true = values.all? do |k, v| ** Processing line: ~ v~ - Inside source: true *** True Line Result v ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if all_true~ - Inside source: true *** True Line Result if all_true ** Processing line: ~ keys.each do |k|~ - Inside source: true *** True Line Result keys.each do |k| ** Processing line: ~ clear_key k if k.end_with_bang?~ - Inside source: true *** True Line Result clear_key k if k.end_with_bang? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ all_true~ - Inside source: true *** True Line Result all_true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def any? keys~ - Inside source: true *** True Line Result def any? keys ** Processing line: ~ values = get(keys.map { |k| k.without_ending_bang })~ - Inside source: true *** True Line Result values = get(keys.map { |k| k.without_ending_bang }) ** Processing line: ~ any_true = values.any? do |k, v|~ - Inside source: true *** True Line Result any_true = values.any? do |k, v| ** Processing line: ~ v~ - Inside source: true *** True Line Result v ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if any_true~ - Inside source: true *** True Line Result if any_true ** Processing line: ~ keys.each do |k|~ - Inside source: true *** True Line Result keys.each do |k| ** Processing line: ~ clear_key k if k.end_with_bang?~ - Inside source: true *** True Line Result clear_key k if k.end_with_bang? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ any_true~ - Inside source: true *** True Line Result any_true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def clear_key key~ - Inside source: true *** True Line Result def clear_key key ** Processing line: ~ @scrubbed_ivars = nil~ - Inside source: true *** True Line Result @scrubbed_ivars = nil ** Processing line: ~ self.instance_variable_set("@#{key.without_ending_bang}", false)~ - Inside source: true *** True Line Result self.instance_variable_set("@#{key.without_ending_bang}", false) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def all~ - Inside source: true *** True Line Result def all ** Processing line: ~ @scrubbed_ivars ||= self.instance_variables~ - Inside source: true *** True Line Result @scrubbed_ivars ||= self.instance_variables ** Processing line: ~ .reject { |i| i == :@all || i == :@scrubbed_ivars }~ - Inside source: true *** True Line Result .reject { |i| i == :@all || i == :@scrubbed_ivars } ** Processing line: ~ .map { |i| i.to_s.gsub("@", "") }~ - Inside source: true *** True Line Result .map { |i| i.to_s.gsub("@", "") } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ get(@scrubbed_ivars).map { |k, _| k }~ - Inside source: true *** True Line Result get(@scrubbed_ivars).map { |k, _| k } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def get collection~ - Inside source: true *** True Line Result def get collection ** Processing line: ~ return [] if collection.length == 0~ - Inside source: true *** True Line Result return [] if collection.length == 0 ** Processing line: ~ collection.map do |m|~ - Inside source: true *** True Line Result collection.map do |m| ** Processing line: ~ if m.end_with_bang?~ - Inside source: true *** True Line Result if m.end_with_bang? ** Processing line: ~ clear_after_return = true~ - Inside source: true *** True Line Result clear_after_return = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ value = self.instance_variable_get("@#{m.without_ending_bang}".to_sym)~ - Inside source: true *** True Line Result value = self.instance_variable_get("@#{m.without_ending_bang}".to_sym) ** Processing line: ~ clear_key m if clear_after_return~ - Inside source: true *** True Line Result clear_key m if clear_after_return ** Processing line: ~ [m.without_ending_bang, value]~ - Inside source: true *** True Line Result [m.without_ending_bang, value] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def set collection, value = true~ - Inside source: true *** True Line Result def set collection, value = true ** Processing line: ~ return if collection.length == 0~ - Inside source: true *** True Line Result return if collection.length == 0 ** Processing line: ~ @scrubbed_ivars = nil~ - Inside source: true *** True Line Result @scrubbed_ivars = nil ** Processing line: ~ value = Kernel.tick_count if value~ - Inside source: true *** True Line Result value = Kernel.tick_count if value ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ collection.each do |m|~ - Inside source: true *** True Line Result collection.each do |m| ** Processing line: ~ m_to_s = m.to_s~ - Inside source: true *** True Line Result m_to_s = m.to_s ** Processing line: ~ self.instance_variable_set("@#{m_to_s}".to_sym, value) if m_to_s.strip.length > 0~ - Inside source: true *** True Line Result self.instance_variable_set("@#{m_to_s}".to_sym, value) if m_to_s.strip.length > 0 ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise e, <<-S~ - Inside source: true *** True Line Result raise e, <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ Attempted to set the a key on the DragonRuby GTK's Keyboard data~ - Inside source: true *** True Line Result Attempted to set the a key on the DragonRuby GTK's Keyboard data ** Processing line: ~ structure, but the property isn't available for raw_key #{raw_key} #{m}.~ - Inside source: true *** True Line Result structure, but the property isn't available for raw_key #{raw_key} #{m}. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ You should contact DragonRuby and tell them to associate the raw_key #{raw_key}~ - Inside source: true *** True Line Result You should contact DragonRuby and tell them to associate the raw_key #{raw_key} ** Processing line: ~ with a friendly property name (we are open to suggestions if you have any).~ - Inside source: true *** True Line Result with a friendly property name (we are open to suggestions if you have any). ** Processing line: ~ [GTK::KeyboardKeys#set, GTK::KeyboardKeys#char_to_method]~ - Inside source: true *** True Line Result [GTK::KeyboardKeys#set, GTK::KeyboardKeys#char_to_method] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def method_missing m, *args~ - Inside source: true *** True Line Result def method_missing m, *args ** Processing line: ~ if KeyboardKeys.method_to_key_hash[m.without_ending_bang]~ - Inside source: true *** True Line Result if KeyboardKeys.method_to_key_hash[m.without_ending_bang] ** Processing line: ~ begin~ - Inside source: true *** True Line Result begin ** Processing line: ~ define_singleton_method(m) do~ - Inside source: true *** True Line Result define_singleton_method(m) do ** Processing line: ~ r = self.instance_variable_get("@#{m.without_ending_bang}".to_sym)~ - Inside source: true *** True Line Result r = self.instance_variable_get("@#{m.without_ending_bang}".to_sym) ** Processing line: ~ clear_key m~ - Inside source: true *** True Line Result clear_key m ** Processing line: ~ return r~ - Inside source: true *** True Line Result return r ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return self.send m~ - Inside source: true *** True Line Result return self.send m ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ log_important "#{e}"~ - Inside source: true *** True Line Result log_important "#{e}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ did_you_mean = KeyboardKeys.method_to_key_hash.find_all do |k, v|~ - Inside source: true *** True Line Result did_you_mean = KeyboardKeys.method_to_key_hash.find_all do |k, v| ** Processing line: ~ k.to_s[0..1] == m.to_s[0..1]~ - Inside source: true *** True Line Result k.to_s[0..1] == m.to_s[0..1] ** Processing line: ~ end.map {|k, v| ":#{k} (#{v[:string_representation]})" }~ - Inside source: true *** True Line Result end.map {|k, v| ":#{k} (#{v[:string_representation]})" } ** Processing line: ~ did_you_mean_string = ""~ - Inside source: true *** True Line Result did_you_mean_string = "" ** Processing line: ~ did_you_mean_string = ". Did you mean #{did_you_mean.join ", "}?"~ - Inside source: true *** True Line Result did_you_mean_string = ". Did you mean #{did_you_mean.join ", "}?" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ #{KeyboardKeys.method_to_key_hash.map { |k, v| "** :#{k} #{v.string_representation}" }.join("\n")}~ - Inside source: true *** True Line Result #{KeyboardKeys.method_to_key_hash.map { |k, v| "** :#{k} #{v.string_representation}" }.join("\n")} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ There is no key on the keyboard called :#{m}#{did_you_mean_string}.~ - Inside source: true *** True Line Result There is no key on the keyboard called :#{m}#{did_you_mean_string}. ** Processing line: ~ Full list of available keys =:points_up:=.~ - Inside source: true *** True Line Result Full list of available keys =:points_up:=. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ hash = super~ - Inside source: true *** True Line Result hash = super ** Processing line: ~ hash.delete(:scrubbed_ivars)~ - Inside source: true *** True Line Result hash.delete(:scrubbed_ivars) ** Processing line: ~ hash[:truthy_keys] = self.truthy_keys~ - Inside source: true *** True Line Result hash[:truthy_keys] = self.truthy_keys ** Processing line: ~ hash~ - Inside source: true *** True Line Result hash ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ class Keyboard~ - Inside source: true *** True Line Result class Keyboard ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @return [KeyboardKeys]~ - Inside source: true *** True Line Result # @return [KeyboardKeys] ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_accessor :key_up~ - Inside source: true *** True Line Result attr_accessor :key_up ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @return [KeyboardKeys]~ - Inside source: true *** True Line Result # @return [KeyboardKeys] ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_accessor :key_held~ - Inside source: true *** True Line Result attr_accessor :key_held ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @return [KeyboardKeys]~ - Inside source: true *** True Line Result # @return [KeyboardKeys] ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_accessor :key_down~ - Inside source: true *** True Line Result attr_accessor :key_down ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @return [Boolean]~ - Inside source: true *** True Line Result # @return [Boolean] ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_accessor :has_focus~ - Inside source: true *** True Line Result attr_accessor :has_focus ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @key_up = KeyboardKeys.new~ - Inside source: true *** True Line Result @key_up = KeyboardKeys.new ** Processing line: ~ @key_held = KeyboardKeys.new~ - Inside source: true *** True Line Result @key_held = KeyboardKeys.new ** Processing line: ~ @key_down = KeyboardKeys.new~ - Inside source: true *** True Line Result @key_down = KeyboardKeys.new ** Processing line: ~ @has_focus = false~ - Inside source: true *** True Line Result @has_focus = false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def p~ - Inside source: true *** True Line Result def p ** Processing line: ~ @key_down.p || @key_held.p~ - Inside source: true *** True Line Result @key_down.p || @key_held.p ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The left arrow or "a" was pressed.~ - Inside source: true *** True Line Result # The left arrow or "a" was pressed. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Boolean]~ - Inside source: true *** True Line Result # @return [Boolean] ** Processing line: ~ def left~ - Inside source: true *** True Line Result def left ** Processing line: ~ @key_up.left || @key_held.left || a~ - Inside source: true *** True Line Result @key_up.left || @key_held.left || a ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The right arrow or "d" was pressed.~ - Inside source: true *** True Line Result # The right arrow or "d" was pressed. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Boolean]~ - Inside source: true *** True Line Result # @return [Boolean] ** Processing line: ~ def right~ - Inside source: true *** True Line Result def right ** Processing line: ~ @key_up.right || @key_held.right || d~ - Inside source: true *** True Line Result @key_up.right || @key_held.right || d ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The up arrow or "w" was pressed.~ - Inside source: true *** True Line Result # The up arrow or "w" was pressed. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Boolean]~ - Inside source: true *** True Line Result # @return [Boolean] ** Processing line: ~ def up~ - Inside source: true *** True Line Result def up ** Processing line: ~ @key_up.up || @key_held.up || w~ - Inside source: true *** True Line Result @key_up.up || @key_held.up || w ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The down arrow or "s" was pressed.~ - Inside source: true *** True Line Result # The down arrow or "s" was pressed. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Boolean]~ - Inside source: true *** True Line Result # @return [Boolean] ** Processing line: ~ def down~ - Inside source: true *** True Line Result def down ** Processing line: ~ @key_up.down || @key_held.down || s~ - Inside source: true *** True Line Result @key_up.down || @key_held.down || s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Clear all current key presses.~ - Inside source: true *** True Line Result # Clear all current key presses. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [void]~ - Inside source: true *** True Line Result # @return [void] ** Processing line: ~ def clear~ - Inside source: true *** True Line Result def clear ** Processing line: ~ @key_up.clear~ - Inside source: true *** True Line Result @key_up.clear ** Processing line: ~ @key_held.clear~ - Inside source: true *** True Line Result @key_held.clear ** Processing line: ~ @key_down.clear~ - Inside source: true *** True Line Result @key_down.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ key_up: @key_up.serialize,~ - Inside source: true *** True Line Result key_up: @key_up.serialize, ** Processing line: ~ key_held: @key_held.serialize,~ - Inside source: true *** True Line Result key_held: @key_held.serialize, ** Processing line: ~ key_down: @key_down.serialize,~ - Inside source: true *** True Line Result key_down: @key_down.serialize, ** Processing line: ~ has_focus: @has_focus~ - Inside source: true *** True Line Result has_focus: @has_focus ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ alias_method :inspect, :serialize~ - Inside source: true *** True Line Result alias_method :inspect, :serialize ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @return [String]~ - Inside source: true *** True Line Result # @return [String] ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def key~ - Inside source: true *** True Line Result def key ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ down: @key_down.truthy_keys,~ - Inside source: true *** True Line Result down: @key_down.truthy_keys, ** Processing line: ~ held: @key_held.truthy_keys,~ - Inside source: true *** True Line Result held: @key_held.truthy_keys, ** Processing line: ~ down_or_held: (@key_down.truthy_keys + @key_held.truthy_keys).uniq,~ - Inside source: true *** True Line Result down_or_held: (@key_down.truthy_keys + @key_held.truthy_keys).uniq, ** Processing line: ~ up: @key_up.truthy_keys,~ - Inside source: true *** True Line Result up: @key_up.truthy_keys, ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ alias_method :keys, :key~ - Inside source: true *** True Line Result alias_method :keys, :key ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ include DirectionalInputHelperMethods~ - Inside source: true *** True Line Result include DirectionalInputHelperMethods ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class MousePoint~ - Inside source: true *** True Line Result class MousePoint ** Processing line: ~ include GTK::Geometry~ - Inside source: true *** True Line Result include GTK::Geometry ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_accessor :x, :y, :point, :created_at, :global_created_at~ - Inside source: true *** True Line Result attr_accessor :x, :y, :point, :created_at, :global_created_at ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize x, y~ - Inside source: true *** True Line Result def initialize x, y ** Processing line: ~ @x = x~ - Inside source: true *** True Line Result @x = x ** Processing line: ~ @y = y~ - Inside source: true *** True Line Result @y = y ** Processing line: ~ @point = [x, y]~ - Inside source: true *** True Line Result @point = [x, y] ** Processing line: ~ @created_at = Kernel.tick_count~ - Inside source: true *** True Line Result @created_at = Kernel.tick_count ** Processing line: ~ @global_created_at = Kernel.global_tick_count~ - Inside source: true *** True Line Result @global_created_at = Kernel.global_tick_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def w; 0; end~ - Inside source: true *** True Line Result def w; 0; end ** Processing line: ~ def h; 0; end~ - Inside source: true *** True Line Result def h; 0; end ** Processing line: ~ def left; x; end~ - Inside source: true *** True Line Result def left; x; end ** Processing line: ~ def right; x; end~ - Inside source: true *** True Line Result def right; x; end ** Processing line: ~ def top; y; end~ - Inside source: true *** True Line Result def top; y; end ** Processing line: ~ def bottom; y; end~ - Inside source: true *** True Line Result def bottom; y; end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def created_at_elapsed~ - Inside source: true *** True Line Result def created_at_elapsed ** Processing line: ~ @created_at.elapsed_time~ - Inside source: true *** True Line Result @created_at.elapsed_time ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_hash~ - Inside source: true *** True Line Result def to_hash ** Processing line: ~ serialize~ - Inside source: true *** True Line Result serialize ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: @x,~ - Inside source: true *** True Line Result x: @x, ** Processing line: ~ y: @y,~ - Inside source: true *** True Line Result y: @y, ** Processing line: ~ created_at: @created_at,~ - Inside source: true *** True Line Result created_at: @created_at, ** Processing line: ~ global_created_at: @global_created_at~ - Inside source: true *** True Line Result global_created_at: @global_created_at ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inspect~ - Inside source: true *** True Line Result def inspect ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Provides access to the mouse.~ - Inside source: true *** True Line Result # Provides access to the mouse. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ class Mouse~ - Inside source: true *** True Line Result class Mouse ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_accessor :moved,~ - Inside source: true *** True Line Result attr_accessor :moved, ** Processing line: ~ :moved_at,~ - Inside source: true *** True Line Result :moved_at, ** Processing line: ~ :global_moved_at,~ - Inside source: true *** True Line Result :global_moved_at, ** Processing line: ~ :up, :has_focus,~ - Inside source: true *** True Line Result :up, :has_focus, ** Processing line: ~ :button_bits, :button_left,~ - Inside source: true *** True Line Result :button_bits, :button_left, ** Processing line: ~ :button_middle, :button_right,~ - Inside source: true *** True Line Result :button_middle, :button_right, ** Processing line: ~ :button_x1, :button_x2,~ - Inside source: true *** True Line Result :button_x1, :button_x2, ** Processing line: ~ :wheel~ - Inside source: true *** True Line Result :wheel ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ attr_accessor :click~ - Inside source: true *** True Line Result attr_accessor :click ** Processing line: ~ attr_accessor :previous_click~ - Inside source: true *** True Line Result attr_accessor :previous_click ** Processing line: ~ attr_accessor :x~ - Inside source: true *** True Line Result attr_accessor :x ** Processing line: ~ attr_accessor :y~ - Inside source: true *** True Line Result attr_accessor :y ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @x = 0~ - Inside source: true *** True Line Result @x = 0 ** Processing line: ~ @y = 0~ - Inside source: true *** True Line Result @y = 0 ** Processing line: ~ @has_focus = false~ - Inside source: true *** True Line Result @has_focus = false ** Processing line: ~ @button_bits = 0~ - Inside source: true *** True Line Result @button_bits = 0 ** Processing line: ~ @button_left = false~ - Inside source: true *** True Line Result @button_left = false ** Processing line: ~ @button_middle = false~ - Inside source: true *** True Line Result @button_middle = false ** Processing line: ~ @button_right = false~ - Inside source: true *** True Line Result @button_right = false ** Processing line: ~ @button_x1 = false~ - Inside source: true *** True Line Result @button_x1 = false ** Processing line: ~ @button_x2 = false~ - Inside source: true *** True Line Result @button_x2 = false ** Processing line: ~ clear~ - Inside source: true *** True Line Result clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def point~ - Inside source: true *** True Line Result def point ** Processing line: ~ [@x, @y].point~ - Inside source: true *** True Line Result [@x, @y].point ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inside_rect? rect~ - Inside source: true *** True Line Result def inside_rect? rect ** Processing line: ~ point.inside_rect? rect~ - Inside source: true *** True Line Result point.inside_rect? rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inside_circle? center, radius~ - Inside source: true *** True Line Result def inside_circle? center, radius ** Processing line: ~ point.point_inside_circle? center, radius~ - Inside source: true *** True Line Result point.point_inside_circle? center, radius ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def intersect_rect? other_rect~ - Inside source: true *** True Line Result def intersect_rect? other_rect ** Processing line: ~ { x: point.x, y: point.y, w: 0, h: 0 }.intersect_rect? other_rect~ - Inside source: true *** True Line Result { x: point.x, y: point.y, w: 0, h: 0 }.intersect_rect? other_rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ alias_method :position, :point~ - Inside source: true *** True Line Result alias_method :position, :point ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def clear~ - Inside source: true *** True Line Result def clear ** Processing line: ~ if @click~ - Inside source: true *** True Line Result if @click ** Processing line: ~ @previous_click = MousePoint.new @click.point.x, @click.point.y~ - Inside source: true *** True Line Result @previous_click = MousePoint.new @click.point.x, @click.point.y ** Processing line: ~ @previous_click.created_at = @click.created_at~ - Inside source: true *** True Line Result @previous_click.created_at = @click.created_at ** Processing line: ~ @previous_click.global_created_at = @click.global_created_at~ - Inside source: true *** True Line Result @previous_click.global_created_at = @click.global_created_at ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @click = nil~ - Inside source: true *** True Line Result @click = nil ** Processing line: ~ @up = nil~ - Inside source: true *** True Line Result @up = nil ** Processing line: ~ @moved = nil~ - Inside source: true *** True Line Result @moved = nil ** Processing line: ~ @wheel = nil~ - Inside source: true *** True Line Result @wheel = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def up~ - Inside source: true *** True Line Result def up ** Processing line: ~ @up~ - Inside source: true *** True Line Result @up ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def down~ - Inside source: true *** True Line Result def down ** Processing line: ~ @click~ - Inside source: true *** True Line Result @click ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ result = {}~ - Inside source: true *** True Line Result result = {} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @click~ - Inside source: true *** True Line Result if @click ** Processing line: ~ result[:click] = @click.to_hash~ - Inside source: true *** True Line Result result[:click] = @click.to_hash ** Processing line: ~ result[:down] = @click.to_hash~ - Inside source: true *** True Line Result result[:down] = @click.to_hash ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result[:up] = @up.to_hash if @up~ - Inside source: true *** True Line Result result[:up] = @up.to_hash if @up ** Processing line: ~ result[:x] = @x~ - Inside source: true *** True Line Result result[:x] = @x ** Processing line: ~ result[:y] = @y~ - Inside source: true *** True Line Result result[:y] = @y ** Processing line: ~ result[:moved] = @moved~ - Inside source: true *** True Line Result result[:moved] = @moved ** Processing line: ~ result[:moved_at] = @moved_at~ - Inside source: true *** True Line Result result[:moved_at] = @moved_at ** Processing line: ~ result[:has_focus] = @has_focus~ - Inside source: true *** True Line Result result[:has_focus] = @has_focus ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result~ - Inside source: true *** True Line Result result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ alias_method :inspect, :to_s~ - Inside source: true *** True Line Result alias_method :inspect, :to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Provides access to multitouch input~ - Inside source: true *** True Line Result # Provides access to multitouch input ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ class FingerTouch~ - Inside source: true *** True Line Result class FingerTouch ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_accessor :moved,~ - Inside source: true *** True Line Result attr_accessor :moved, ** Processing line: ~ :moved_at,~ - Inside source: true *** True Line Result :moved_at, ** Processing line: ~ :global_moved_at,~ - Inside source: true *** True Line Result :global_moved_at, ** Processing line: ~ :down_at,~ - Inside source: true *** True Line Result :down_at, ** Processing line: ~ :global_down_at,~ - Inside source: true *** True Line Result :global_down_at, ** Processing line: ~ :touch_order,~ - Inside source: true *** True Line Result :touch_order, ** Processing line: ~ :first_tick_down,~ - Inside source: true *** True Line Result :first_tick_down, ** Processing line: ~ :x, :y~ - Inside source: true *** True Line Result :x, :y ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @moved = false~ - Inside source: true *** True Line Result @moved = false ** Processing line: ~ @moved_at = 0~ - Inside source: true *** True Line Result @moved_at = 0 ** Processing line: ~ @global_moved_at = 0~ - Inside source: true *** True Line Result @global_moved_at = 0 ** Processing line: ~ @down_at = 0~ - Inside source: true *** True Line Result @down_at = 0 ** Processing line: ~ @global_down_at = 0~ - Inside source: true *** True Line Result @global_down_at = 0 ** Processing line: ~ @touch_order = 0~ - Inside source: true *** True Line Result @touch_order = 0 ** Processing line: ~ @first_tick_down = true~ - Inside source: true *** True Line Result @first_tick_down = true ** Processing line: ~ @x = 0~ - Inside source: true *** True Line Result @x = 0 ** Processing line: ~ @y = 0~ - Inside source: true *** True Line Result @y = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def point~ - Inside source: true *** True Line Result def point ** Processing line: ~ [@x, @y].point~ - Inside source: true *** True Line Result [@x, @y].point ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inside_rect? rect~ - Inside source: true *** True Line Result def inside_rect? rect ** Processing line: ~ point.inside_rect? rect~ - Inside source: true *** True Line Result point.inside_rect? rect ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inside_circle? center, radius~ - Inside source: true *** True Line Result def inside_circle? center, radius ** Processing line: ~ point.point_inside_circle? center, radius~ - Inside source: true *** True Line Result point.point_inside_circle? center, radius ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ alias_method :position, :point~ - Inside source: true *** True Line Result alias_method :position, :point ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ result = {}~ - Inside source: true *** True Line Result result = {} ** Processing line: ~ result[:x] = @x~ - Inside source: true *** True Line Result result[:x] = @x ** Processing line: ~ result[:y] = @y~ - Inside source: true *** True Line Result result[:y] = @y ** Processing line: ~ result[:touch_order] = @touch_order~ - Inside source: true *** True Line Result result[:touch_order] = @touch_order ** Processing line: ~ result[:moved] = @moved~ - Inside source: true *** True Line Result result[:moved] = @moved ** Processing line: ~ result[:moved_at] = @moved_at~ - Inside source: true *** True Line Result result[:moved_at] = @moved_at ** Processing line: ~ result[:global_moved_at] = @global_moved_at~ - Inside source: true *** True Line Result result[:global_moved_at] = @global_moved_at ** Processing line: ~ result[:down_at] = @down_at~ - Inside source: true *** True Line Result result[:down_at] = @down_at ** Processing line: ~ result[:global_down_at] = @global_down_at~ - Inside source: true *** True Line Result result[:global_down_at] = @global_down_at ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result~ - Inside source: true *** True Line Result result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ alias_method :inspect, :to_s~ - Inside source: true *** True Line Result alias_method :inspect, :to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ class Inputs~ - Inside source: true *** True Line Result class Inputs ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # A list of all controllers.~ - Inside source: true *** True Line Result # A list of all controllers. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Controller[]]~ - Inside source: true *** True Line Result # @return [Controller[]] ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_reader :controllers~ - Inside source: true *** True Line Result attr_reader :controllers ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @return [Keyboard]~ - Inside source: true *** True Line Result # @return [Keyboard] ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_reader :keyboard~ - Inside source: true *** True Line Result attr_reader :keyboard ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @return [Mouse]~ - Inside source: true *** True Line Result # @return [Mouse] ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_reader :mouse~ - Inside source: true *** True Line Result attr_reader :mouse ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @return [HTTPRequest[]]~ - Inside source: true *** True Line Result # @return [HTTPRequest[]] ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_accessor :http_requests~ - Inside source: true *** True Line Result attr_accessor :http_requests ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @return {FingerTouch}~ - Inside source: true *** True Line Result # @return {FingerTouch} ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_reader :touch~ - Inside source: true *** True Line Result attr_reader :touch ** Processing line: ~ attr_accessor :finger_one, :finger_two~ - Inside source: true *** True Line Result attr_accessor :finger_one, :finger_two ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ attr_accessor :text, :history~ - Inside source: true *** True Line Result attr_accessor :text, :history ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @controllers = [Controller.new, Controller.new]~ - Inside source: true *** True Line Result @controllers = [Controller.new, Controller.new] ** Processing line: ~ @keyboard = Keyboard.new~ - Inside source: true *** True Line Result @keyboard = Keyboard.new ** Processing line: ~ @mouse = Mouse.new~ - Inside source: true *** True Line Result @mouse = Mouse.new ** Processing line: ~ @touch = {}~ - Inside source: true *** True Line Result @touch = {} ** Processing line: ~ @finger_one = nil~ - Inside source: true *** True Line Result @finger_one = nil ** Processing line: ~ @finger_two = nil~ - Inside source: true *** True Line Result @finger_two = nil ** Processing line: ~ @text = []~ - Inside source: true *** True Line Result @text = [] ** Processing line: ~ @http_requests = []~ - Inside source: true *** True Line Result @http_requests = [] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def up~ - Inside source: true *** True Line Result def up ** Processing line: ~ keyboard.up ||~ - Inside source: true *** True Line Result keyboard.up || ** Processing line: ~ (controller_one && controller_one.up)~ - Inside source: true *** True Line Result (controller_one && controller_one.up) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def down~ - Inside source: true *** True Line Result def down ** Processing line: ~ keyboard.down ||~ - Inside source: true *** True Line Result keyboard.down || ** Processing line: ~ (controller_one && controller_one.down)~ - Inside source: true *** True Line Result (controller_one && controller_one.down) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def left~ - Inside source: true *** True Line Result def left ** Processing line: ~ keyboard.left ||~ - Inside source: true *** True Line Result keyboard.left || ** Processing line: ~ (controller_one && controller_one.left)~ - Inside source: true *** True Line Result (controller_one && controller_one.left) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def right~ - Inside source: true *** True Line Result def right ** Processing line: ~ keyboard.right ||~ - Inside source: true *** True Line Result keyboard.right || ** Processing line: ~ (controller_one && controller_one.right)~ - Inside source: true *** True Line Result (controller_one && controller_one.right) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def directional_vector~ - Inside source: true *** True Line Result def directional_vector ** Processing line: ~ keyboard.directional_vector ||~ - Inside source: true *** True Line Result keyboard.directional_vector || ** Processing line: ~ (controller_one && controller_one.directional_vector)~ - Inside source: true *** True Line Result (controller_one && controller_one.directional_vector) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def directional_angle~ - Inside source: true *** True Line Result def directional_angle ** Processing line: ~ keyboard.directional_angle || (controller_one && controller_one.directional_angle)~ - Inside source: true *** True Line Result keyboard.directional_angle || (controller_one && controller_one.directional_angle) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a signal indicating right (`1`), left (`-1`), or neither ('0').~ - Inside source: true *** True Line Result # Returns a signal indicating right (`1`), left (`-1`), or neither ('0'). ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Integer]~ - Inside source: true *** True Line Result # @return [Integer] ** Processing line: ~ def left_right~ - Inside source: true *** True Line Result def left_right ** Processing line: ~ return -1 if self.left~ - Inside source: true *** True Line Result return -1 if self.left ** Processing line: ~ return 1 if self.right~ - Inside source: true *** True Line Result return 1 if self.right ** Processing line: ~ return 0~ - Inside source: true *** True Line Result return 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a signal indicating up (`1`), down (`-1`), or neither ('0').~ - Inside source: true *** True Line Result # Returns a signal indicating up (`1`), down (`-1`), or neither ('0'). ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Integer]~ - Inside source: true *** True Line Result # @return [Integer] ** Processing line: ~ def up_down~ - Inside source: true *** True Line Result def up_down ** Processing line: ~ return 1 if self.up~ - Inside source: true *** True Line Result return 1 if self.up ** Processing line: ~ return -1 if self.down~ - Inside source: true *** True Line Result return -1 if self.down ** Processing line: ~ return 0~ - Inside source: true *** True Line Result return 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the coordinates of the last click.~ - Inside source: true *** True Line Result # Returns the coordinates of the last click. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Float, Float]~ - Inside source: true *** True Line Result # @return [Float, Float] ** Processing line: ~ def click~ - Inside source: true *** True Line Result def click ** Processing line: ~ return nil unless @mouse.click~ - Inside source: true *** True Line Result return nil unless @mouse.click ** Processing line: ~ return @mouse.click.point~ - Inside source: true *** True Line Result return @mouse.click.point ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The first controller.~ - Inside source: true *** True Line Result # The first controller. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Controller]~ - Inside source: true *** True Line Result # @return [Controller] ** Processing line: ~ def controller_one~ - Inside source: true *** True Line Result def controller_one ** Processing line: ~ @controllers[0]~ - Inside source: true *** True Line Result @controllers[0] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # The second controller.~ - Inside source: true *** True Line Result # The second controller. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [Controller]~ - Inside source: true *** True Line Result # @return [Controller] ** Processing line: ~ def controller_two~ - Inside source: true *** True Line Result def controller_two ** Processing line: ~ @controllers[1]~ - Inside source: true *** True Line Result @controllers[1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Clears all inputs.~ - Inside source: true *** True Line Result # Clears all inputs. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @return [void]~ - Inside source: true *** True Line Result # @return [void] ** Processing line: ~ def clear~ - Inside source: true *** True Line Result def clear ** Processing line: ~ @mouse.clear~ - Inside source: true *** True Line Result @mouse.clear ** Processing line: ~ @keyboard.clear~ - Inside source: true *** True Line Result @keyboard.clear ** Processing line: ~ @controllers.each(&:clear)~ - Inside source: true *** True Line Result @controllers.each(&:clear) ** Processing line: ~ @touch.clear~ - Inside source: true *** True Line Result @touch.clear ** Processing line: ~ @http_requests.clear~ - Inside source: true *** True Line Result @http_requests.clear ** Processing line: ~ @finger_one = nil~ - Inside source: true *** True Line Result @finger_one = nil ** Processing line: ~ @finger_two = nil~ - Inside source: true *** True Line Result @finger_two = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @return [Hash]~ - Inside source: true *** True Line Result # @return [Hash] ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ controller_one: controller_one.serialize,~ - Inside source: true *** True Line Result controller_one: controller_one.serialize, ** Processing line: ~ controller_two: controller_two.serialize,~ - Inside source: true *** True Line Result controller_two: controller_two.serialize, ** Processing line: ~ keyboard: keyboard.serialize,~ - Inside source: true *** True Line Result keyboard: keyboard.serialize, ** Processing line: ~ mouse: mouse.serialize,~ - Inside source: true *** True Line Result mouse: mouse.serialize, ** Processing line: ~ text: text.serialize~ - Inside source: true *** True Line Result text: text.serialize ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** ios_wizard.rb~ - Header detected. *** True Line Result *** True Line Result *** ios_wizard.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/ios_wizard.rb~ - Inside source: true *** True Line Result # ./dragon/ios_wizard.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # ios_wizard.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # ios_wizard.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright: Michał Dudziński~ - Inside source: true *** True Line Result # Contributors outside of DragonRuby who also hold Copyright: Michał Dudziński ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class IOSWizard < Wizard~ - Inside source: true *** True Line Result class IOSWizard < Wizard ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @doctor_executed_at = 0~ - Inside source: true *** True Line Result @doctor_executed_at = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def relative_path~ - Inside source: true *** True Line Result def relative_path ** Processing line: ~ (File.dirname $gtk.binary_path)~ - Inside source: true *** True Line Result (File.dirname $gtk.binary_path) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def steps~ - Inside source: true *** True Line Result def steps ** Processing line: ~ @steps ||= []~ - Inside source: true *** True Line Result @steps ||= [] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def prerequisite_steps~ - Inside source: true *** True Line Result def prerequisite_steps ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ :check_for_xcode,~ - Inside source: true *** True Line Result :check_for_xcode, ** Processing line: ~ :check_for_brew,~ - Inside source: true *** True Line Result :check_for_brew, ** Processing line: ~ :check_for_certs,~ - Inside source: true *** True Line Result :check_for_certs, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def app_metadata_retrieval_steps~ - Inside source: true *** True Line Result def app_metadata_retrieval_steps ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ :determine_team_identifier,~ - Inside source: true *** True Line Result :determine_team_identifier, ** Processing line: ~ :determine_app_name,~ - Inside source: true *** True Line Result :determine_app_name, ** Processing line: ~ :determine_app_id,~ - Inside source: true *** True Line Result :determine_app_id, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def steps_development_build~ - Inside source: true *** True Line Result def steps_development_build ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ *prerequisite_steps,~ - Inside source: true *** True Line Result *prerequisite_steps, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :check_for_device,~ - Inside source: true *** True Line Result :check_for_device, ** Processing line: ~ :check_for_dev_profile,~ - Inside source: true *** True Line Result :check_for_dev_profile, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ *app_metadata_retrieval_steps,~ - Inside source: true *** True Line Result *app_metadata_retrieval_steps, ** Processing line: ~ :determine_devcert,~ - Inside source: true *** True Line Result :determine_devcert, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :clear_tmp_directory,~ - Inside source: true *** True Line Result :clear_tmp_directory, ** Processing line: ~ :stage_app,~ - Inside source: true *** True Line Result :stage_app, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :development_write_info_plist,~ - Inside source: true *** True Line Result :development_write_info_plist, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :write_entitlements_plist,~ - Inside source: true *** True Line Result :write_entitlements_plist, ** Processing line: ~ :compile_icons,~ - Inside source: true *** True Line Result :compile_icons, ** Processing line: ~ :clear_payload_directory,~ - Inside source: true *** True Line Result :clear_payload_directory, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :create_payload_directory_dev,~ - Inside source: true *** True Line Result :create_payload_directory_dev, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :create_payload,~ - Inside source: true *** True Line Result :create_payload, ** Processing line: ~ :code_sign_payload,~ - Inside source: true *** True Line Result :code_sign_payload, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :create_ipa,~ - Inside source: true *** True Line Result :create_ipa, ** Processing line: ~ :deploy~ - Inside source: true *** True Line Result :deploy ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def steps_production_build~ - Inside source: true *** True Line Result def steps_production_build ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ *prerequisite_steps,~ - Inside source: true *** True Line Result *prerequisite_steps, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :check_for_distribution_profile,~ - Inside source: true *** True Line Result :check_for_distribution_profile, ** Processing line: ~ :determine_app_version,~ - Inside source: true *** True Line Result :determine_app_version, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ *app_metadata_retrieval_steps,~ - Inside source: true *** True Line Result *app_metadata_retrieval_steps, ** Processing line: ~ :determine_prodcert,~ - Inside source: true *** True Line Result :determine_prodcert, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :clear_tmp_directory,~ - Inside source: true *** True Line Result :clear_tmp_directory, ** Processing line: ~ :stage_app,~ - Inside source: true *** True Line Result :stage_app, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :production_write_info_plist,~ - Inside source: true *** True Line Result :production_write_info_plist, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :write_entitlements_plist,~ - Inside source: true *** True Line Result :write_entitlements_plist, ** Processing line: ~ :compile_icons,~ - Inside source: true *** True Line Result :compile_icons, ** Processing line: ~ :clear_payload_directory,~ - Inside source: true *** True Line Result :clear_payload_directory, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :create_payload_directory_prod,~ - Inside source: true *** True Line Result :create_payload_directory_prod, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :create_payload,~ - Inside source: true *** True Line Result :create_payload, ** Processing line: ~ :code_sign_payload,~ - Inside source: true *** True Line Result :code_sign_payload, ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :create_ipa,~ - Inside source: true *** True Line Result :create_ipa, ** Processing line: ~ :print_publish_help~ - Inside source: true *** True Line Result :print_publish_help ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_reserved_sprite png~ - Inside source: true *** True Line Result def get_reserved_sprite png ** Processing line: ~ sprite_path = ".dragonruby/sprites/wizards/ios/#{png}"~ - Inside source: true *** True Line Result sprite_path = ".dragonruby/sprites/wizards/ios/#{png}" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !$gtk.ivar :rcb_release_mode~ - Inside source: true *** True Line Result if !$gtk.ivar :rcb_release_mode ** Processing line: ~ sprite_path = "deploy_template/#{sprite_path}"~ - Inside source: true *** True Line Result sprite_path = "deploy_template/#{sprite_path}" ** Processing line: ~ $gtk.reset_sprite sprite_path~ - Inside source: true *** True Line Result $gtk.reset_sprite sprite_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !$gtk.read_file sprite_path~ - Inside source: true *** True Line Result if !$gtk.read_file sprite_path ** Processing line: ~ log_error "png #{png} not found."~ - Inside source: true *** True Line Result log_error "png #{png} not found." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sprite_path~ - Inside source: true *** True Line Result sprite_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def start opts = nil~ - Inside source: true *** True Line Result def start opts = nil ** Processing line: ~ @opts = opts || {}~ - Inside source: true *** True Line Result @opts = opts || {} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !(@opts.is_a? Hash) || !($gtk.args.fn.eq_any? @opts[:env], :dev, :prod)~ - Inside source: true *** True Line Result if !(@opts.is_a? Hash) || !($gtk.args.fn.eq_any? @opts[:env], :dev, :prod) ** Processing line: ~ raise WizardException.new(~ - Inside source: true *** True Line Result raise WizardException.new( ** Processing line: ~ "* $wizards.ios.start needs to be provided an environment option.",~ - Inside source: true *** True Line Result "* $wizards.ios.start needs to be provided an environment option.", ** Processing line: ~ "** For development builds type: $wizards.ios.start env: :dev",~ - Inside source: true *** True Line Result "** For development builds type: $wizards.ios.start env: :dev", ** Processing line: ~ "** For production builds type: $wizards.ios.start env: :prod"~ - Inside source: true *** True Line Result "** For production builds type: $wizards.ios.start env: :prod" ** Processing line: ~ )~ - Inside source: true *** True Line Result ) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @production_build = (@opts[:env] == :prod)~ - Inside source: true *** True Line Result @production_build = (@opts[:env] == :prod) ** Processing line: ~ @steps = steps_development_build~ - Inside source: true *** True Line Result @steps = steps_development_build ** Processing line: ~ @steps = steps_production_build if @production_build~ - Inside source: true *** True Line Result @steps = steps_production_build if @production_build ** Processing line: ~ @certificate_name = nil~ - Inside source: true *** True Line Result @certificate_name = nil ** Processing line: ~ @app_version = opts[:version]~ - Inside source: true *** True Line Result @app_version = opts[:version] ** Processing line: ~ @app_version = "1.0" if @opts[:env] == :dev && !@app_version~ - Inside source: true *** True Line Result @app_version = "1.0" if @opts[:env] == :dev && !@app_version ** Processing line: ~ init_wizard_status~ - Inside source: true *** True Line Result init_wizard_status ** Processing line: ~ log_info "Starting iOS Wizard so we can deploy to your device."~ - Inside source: true *** True Line Result log_info "Starting iOS Wizard so we can deploy to your device." ** Processing line: ~ @start_at = Kernel.global_tick_count~ - Inside source: true *** True Line Result @start_at = Kernel.global_tick_count ** Processing line: ~ steps.each do |m|~ - Inside source: true *** True Line Result steps.each do |m| ** Processing line: ~ log_info "Running step ~:#{m}~."~ - Inside source: true *** True Line Result log_info "Running step ~:#{m}~." ** Processing line: ~ result = (send m) || :success if @wizard_status[m][:result] != :success~ - Inside source: true *** True Line Result result = (send m) || :success if @wizard_status[m][:result] != :success ** Processing line: ~ @wizard_status[m][:result] = result~ - Inside source: true *** True Line Result @wizard_status[m][:result] = result ** Processing line: ~ log_info "Running step ~:#{m}~ complete."~ - Inside source: true *** True Line Result log_info "Running step ~:#{m}~ complete." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ if e.is_a? WizardException~ - Inside source: true *** True Line Result if e.is_a? WizardException ** Processing line: ~ $console.log.clear~ - Inside source: true *** True Line Result $console.log.clear ** Processing line: ~ $console.archived_log.clear~ - Inside source: true *** True Line Result $console.archived_log.clear ** Processing line: ~ log "=" * $console.console_text_width~ - Inside source: true *** True Line Result log "=" * $console.console_text_width ** Processing line: ~ e.console_primitives.each do |p|~ - Inside source: true *** True Line Result e.console_primitives.each do |p| ** Processing line: ~ $console.add_primitive p~ - Inside source: true *** True Line Result $console.add_primitive p ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ log "=" * $console.console_text_width~ - Inside source: true *** True Line Result log "=" * $console.console_text_width ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ log_error e.to_s~ - Inside source: true *** True Line Result log_error e.to_s ** Processing line: ~ log e.__backtrace_to_org__~ - Inside source: true *** True Line Result log e.__backtrace_to_org__ ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ init_wizard_status~ - Inside source: true *** True Line Result init_wizard_status ** Processing line: ~ $console.set_command "$wizards.ios.start env: :#{@opts[:env]}"~ - Inside source: true *** True Line Result $console.set_command "$wizards.ios.start env: :#{@opts[:env]}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def always_fail~ - Inside source: true *** True Line Result def always_fail ** Processing line: ~ return false if $gtk.ivar :rcb_release_mode~ - Inside source: true *** True Line Result return false if $gtk.ivar :rcb_release_mode ** Processing line: ~ return true~ - Inside source: true *** True Line Result return true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def check_for_xcode~ - Inside source: true *** True Line Result def check_for_xcode ** Processing line: ~ if !cli_app_exist?(xcodebuild_cli_app)~ - Inside source: true *** True Line Result if !cli_app_exist?(xcodebuild_cli_app) ** Processing line: ~ raise WizardException.new(~ - Inside source: true *** True Line Result raise WizardException.new( ** Processing line: ~ "* You need Xcode to use $wizards.ios.start.",~ - Inside source: true *** True Line Result "* You need Xcode to use $wizards.ios.start.", ** Processing line: ~ { w: 75, h: 75, path: get_reserved_sprite("xcode.png") },~ - Inside source: true *** True Line Result { w: 75, h: 75, path: get_reserved_sprite("xcode.png") }, ** Processing line: ~ "** 1. Go to http://developer.apple.com and register.",~ - Inside source: true *** True Line Result "** 1. Go to http://developer.apple.com and register.", ** Processing line: ~ "** 2. Download Xcode 11.3+ from http://developer.apple.com/downloads.",~ - Inside source: true *** True Line Result "** 2. Download Xcode 11.3+ from http://developer.apple.com/downloads.", ** Processing line: ~ " NOTE: DO NOT install Xcode from the App Store. Use the link above.",~ - Inside source: true *** True Line Result " NOTE: DO NOT install Xcode from the App Store. Use the link above.", ** Processing line: ~ { w: 700, h: 359, path: get_reserved_sprite("xcode-downloads.png") },~ - Inside source: true *** True Line Result { w: 700, h: 359, path: get_reserved_sprite("xcode-downloads.png") }, ** Processing line: ~ "** 3. After installing. Open up Xcode to accept the EULA."~ - Inside source: true *** True Line Result "** 3. After installing. Open up Xcode to accept the EULA." ** Processing line: ~ )~ - Inside source: true *** True Line Result ) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def check_for_brew~ - Inside source: true *** True Line Result def check_for_brew ** Processing line: ~ if !cli_app_exist?('brew')~ - Inside source: true *** True Line Result if !cli_app_exist?('brew') ** Processing line: ~ raise WizardException.new(~ - Inside source: true *** True Line Result raise WizardException.new( ** Processing line: ~ "* You need to install Brew.",~ - Inside source: true *** True Line Result "* You need to install Brew.", ** Processing line: ~ { w: 700, h: 388, path: get_reserved_sprite("brew.png") },~ - Inside source: true *** True Line Result { w: 700, h: 388, path: get_reserved_sprite("brew.png") }, ** Processing line: ~ "** 1. Go to http://brew.sh.",~ - Inside source: true *** True Line Result "** 1. Go to http://brew.sh.", ** Processing line: ~ "** 2. Copy the command that starts with `/bin/bash -c` on the site.",~ - Inside source: true *** True Line Result "** 2. Copy the command that starts with `/bin/bash -c` on the site.", ** Processing line: ~ "** 3. Open Terminal and run the command you copied from the website.",~ - Inside source: true *** True Line Result "** 3. Open Terminal and run the command you copied from the website.", ** Processing line: ~ { w: 700, h: 99, path: get_reserved_sprite("terminal.png") },~ - Inside source: true *** True Line Result { w: 700, h: 99, path: get_reserved_sprite("terminal.png") }, ** Processing line: ~ )~ - Inside source: true *** True Line Result ) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def init_wizard_status~ - Inside source: true *** True Line Result def init_wizard_status ** Processing line: ~ @wizard_status = {}~ - Inside source: true *** True Line Result @wizard_status = {} ** Processing line: ~ steps.each do |m|~ - Inside source: true *** True Line Result steps.each do |m| ** Processing line: ~ @wizard_status[m] = { result: :not_started }~ - Inside source: true *** True Line Result @wizard_status[m] = { result: :not_started } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ previous_step = nil~ - Inside source: true *** True Line Result previous_step = nil ** Processing line: ~ next_step = nil~ - Inside source: true *** True Line Result next_step = nil ** Processing line: ~ steps.each_cons(2) do |current_step, next_step|~ - Inside source: true *** True Line Result steps.each_cons(2) do |current_step, next_step| ** Processing line: ~ @wizard_status[current_step][:next_step] = next_step~ - Inside source: true *** True Line Result @wizard_status[current_step][:next_step] = next_step ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ steps.reverse.each_cons(2) do |current_step, previous_step|~ - Inside source: true *** True Line Result steps.reverse.each_cons(2) do |current_step, previous_step| ** Processing line: ~ @wizard_status[current_step][:previous_step] = previous_step~ - Inside source: true *** True Line Result @wizard_status[current_step][:previous_step] = previous_step ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def restart~ - Inside source: true *** True Line Result def restart ** Processing line: ~ init_wizard_status~ - Inside source: true *** True Line Result init_wizard_status ** Processing line: ~ start~ - Inside source: true *** True Line Result start ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def check_for_distribution_profile~ - Inside source: true *** True Line Result def check_for_distribution_profile ** Processing line: ~ @provisioning_profile_path = "profiles/distribution.mobileprovision"~ - Inside source: true *** True Line Result @provisioning_profile_path = "profiles/distribution.mobileprovision" ** Processing line: ~ if !($gtk.read_file @provisioning_profile_path)~ - Inside source: true *** True Line Result if !($gtk.read_file @provisioning_profile_path) ** Processing line: ~ $gtk.system "mkdir -p #{relative_path}/profiles"~ - Inside source: true *** True Line Result $gtk.system "mkdir -p #{relative_path}/profiles" ** Processing line: ~ $gtk.system "open #{relative_path}/profiles"~ - Inside source: true *** True Line Result $gtk.system "open #{relative_path}/profiles" ** Processing line: ~ $gtk.system "echo Download the mobile provisioning profile and place it here with the name distribution.mobileprovision > #{relative_path}/profiles/README.txt"~ - Inside source: true *** True Line Result $gtk.system "echo Download the mobile provisioning profile and place it here with the name distribution.mobileprovision > #{relative_path}/profiles/README.txt" ** Processing line: ~ raise WizardException.new(~ - Inside source: true *** True Line Result raise WizardException.new( ** Processing line: ~ "* I didn't find a mobile provision.",~ - Inside source: true *** True Line Result "* I didn't find a mobile provision.", ** Processing line: ~ "** 1. Go to http://developer.apple.com and click \"Certificates, IDs & Profiles\".",~ - Inside source: true *** True Line Result "** 1. Go to http://developer.apple.com and click \"Certificates, IDs & Profiles\".", ** Processing line: ~ "** 2. Add an App Identifier.",~ - Inside source: true *** True Line Result "** 2. Add an App Identifier.", ** Processing line: ~ "** 3. Select the App IDs option from the list.",~ - Inside source: true *** True Line Result "** 3. Select the App IDs option from the list.", ** Processing line: ~ { w: 700, h: 75, path: get_reserved_sprite("identifiers.png") },~ - Inside source: true *** True Line Result { w: 700, h: 75, path: get_reserved_sprite("identifiers.png") }, ** Processing line: ~ "** 4. Add your Device next. You can use idevice_id -l to get the UUID of your device.",~ - Inside source: true *** True Line Result "** 4. Add your Device next. You can use idevice_id -l to get the UUID of your device.", ** Processing line: ~ { w: 365, h: 69, path: get_reserved_sprite("device-link.png") },~ - Inside source: true *** True Line Result { w: 365, h: 69, path: get_reserved_sprite("device-link.png") }, ** Processing line: ~ "** 5. Create a Profile. Associate your certs, id, and device.",~ - Inside source: true *** True Line Result "** 5. Create a Profile. Associate your certs, id, and device.", ** Processing line: ~ { w: 300, h: 122, path: get_reserved_sprite("profiles.png") },~ - Inside source: true *** True Line Result { w: 300, h: 122, path: get_reserved_sprite("profiles.png") }, ** Processing line: ~ "** 6. Download the mobile provision and save it to 'profiles/development.mobileprovision'.",~ - Inside source: true *** True Line Result "** 6. Download the mobile provision and save it to 'profiles/development.mobileprovision'.", ** Processing line: ~ { w: 200, h: 124, path: get_reserved_sprite("profiles-folder.png") },~ - Inside source: true *** True Line Result { w: 200, h: 124, path: get_reserved_sprite("profiles-folder.png") }, ** Processing line: ~ )~ - Inside source: true *** True Line Result ) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def check_for_dev_profile~ - Inside source: true *** True Line Result def check_for_dev_profile ** Processing line: ~ @provisioning_profile_path = "profiles/development.mobileprovision"~ - Inside source: true *** True Line Result @provisioning_profile_path = "profiles/development.mobileprovision" ** Processing line: ~ if !($gtk.read_file @provisioning_profile_path)~ - Inside source: true *** True Line Result if !($gtk.read_file @provisioning_profile_path) ** Processing line: ~ $gtk.system "mkdir -p #{relative_path}/profiles"~ - Inside source: true *** True Line Result $gtk.system "mkdir -p #{relative_path}/profiles" ** Processing line: ~ $gtk.system "open #{relative_path}/profiles"~ - Inside source: true *** True Line Result $gtk.system "open #{relative_path}/profiles" ** Processing line: ~ $gtk.system "echo Download the mobile provisioning profile and place it here with the name development.mobileprovision > #{relative_path}/profiles/README.txt"~ - Inside source: true *** True Line Result $gtk.system "echo Download the mobile provisioning profile and place it here with the name development.mobileprovision > #{relative_path}/profiles/README.txt" ** Processing line: ~ raise WizardException.new(~ - Inside source: true *** True Line Result raise WizardException.new( ** Processing line: ~ "* I didn't find a mobile provision.",~ - Inside source: true *** True Line Result "* I didn't find a mobile provision.", ** Processing line: ~ "** 1. Go to http://developer.apple.com and click \"Certificates, IDs & Profiles\".",~ - Inside source: true *** True Line Result "** 1. Go to http://developer.apple.com and click \"Certificates, IDs & Profiles\".", ** Processing line: ~ "** 2. Add an App Identifier.",~ - Inside source: true *** True Line Result "** 2. Add an App Identifier.", ** Processing line: ~ "** 3. Select the App IDs option from the list.",~ - Inside source: true *** True Line Result "** 3. Select the App IDs option from the list.", ** Processing line: ~ { w: 700, h: 75, path: get_reserved_sprite("identifiers.png") },~ - Inside source: true *** True Line Result { w: 700, h: 75, path: get_reserved_sprite("identifiers.png") }, ** Processing line: ~ "** 4. Add your Device next. You can use idevice_id -l to get the UUID of your device.",~ - Inside source: true *** True Line Result "** 4. Add your Device next. You can use idevice_id -l to get the UUID of your device.", ** Processing line: ~ { w: 365, h: 69, path: get_reserved_sprite("device-link.png") },~ - Inside source: true *** True Line Result { w: 365, h: 69, path: get_reserved_sprite("device-link.png") }, ** Processing line: ~ "** 5. Create a Profile. Associate your certs, id, and device.",~ - Inside source: true *** True Line Result "** 5. Create a Profile. Associate your certs, id, and device.", ** Processing line: ~ { w: 300, h: 122, path: get_reserved_sprite("profiles.png") },~ - Inside source: true *** True Line Result { w: 300, h: 122, path: get_reserved_sprite("profiles.png") }, ** Processing line: ~ "** 6. Download the mobile provision and save it to 'profiles/development.mobileprovision'.",~ - Inside source: true *** True Line Result "** 6. Download the mobile provision and save it to 'profiles/development.mobileprovision'.", ** Processing line: ~ { w: 200, h: 124, path: get_reserved_sprite("profiles-folder.png") },~ - Inside source: true *** True Line Result { w: 200, h: 124, path: get_reserved_sprite("profiles-folder.png") }, ** Processing line: ~ )~ - Inside source: true *** True Line Result ) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def provisioning_profile_path environment~ - Inside source: true *** True Line Result def provisioning_profile_path environment ** Processing line: ~ return "profiles/distribution.mobileprovision" if environment == :prod~ - Inside source: true *** True Line Result return "profiles/distribution.mobileprovision" if environment == :prod ** Processing line: ~ return "profiles/development.mobileprovision"~ - Inside source: true *** True Line Result return "profiles/development.mobileprovision" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def ios_metadata_template~ - Inside source: true *** True Line Result def ios_metadata_template ** Processing line: ~ <<-S~ - Inside source: true *** True Line Result <<-S ** Processing line: ~ # ios_metadata.txt is used by the Pro version of DragonRuby Game Toolkit to create iOS apps.~ - Inside source: true *** True Line Result # ios_metadata.txt is used by the Pro version of DragonRuby Game Toolkit to create iOS apps. ** Processing line: ~ # Information about the Pro version can be found at: http://dragonruby.org/toolkit/game#purchase~ - Inside source: true *** True Line Result # Information about the Pro version can be found at: http://dragonruby.org/toolkit/game#purchase ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # teamid needs to be set to your assigned Team Id which can be found at https://developer.apple.com/account/#/membership/~ - Inside source: true *** True Line Result # teamid needs to be set to your assigned Team Id which can be found at https://developer.apple.com/account/#/membership/ ** Processing line: ~ teamid=~ - Inside source: true *** True Line Result teamid= ** Processing line: ~ # appid needs to be set to your application identifier which can be found at https://developer.apple.com/account/resources/identifiers/list~ - Inside source: true *** True Line Result # appid needs to be set to your application identifier which can be found at https://developer.apple.com/account/resources/identifiers/list ** Processing line: ~ appid=~ - Inside source: true *** True Line Result appid= ** Processing line: ~ # appname is the name you want to show up underneath the app icon on the device. Keep it under 10 characters.~ - Inside source: true *** True Line Result # appname is the name you want to show up underneath the app icon on the device. Keep it under 10 characters. ** Processing line: ~ appname=~ - Inside source: true *** True Line Result appname= ** Processing line: ~ # devcert is the certificate to use for development/deploying to your local device~ - Inside source: true *** True Line Result # devcert is the certificate to use for development/deploying to your local device ** Processing line: ~ devcert=~ - Inside source: true *** True Line Result devcert= ** Processing line: ~ # prodcert is the certificate to use for distribution to the app store~ - Inside source: true *** True Line Result # prodcert is the certificate to use for distribution to the app store ** Processing line: ~ prodcert=~ - Inside source: true *** True Line Result prodcert= ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def ios_metadata~ - Inside source: true *** True Line Result def ios_metadata ** Processing line: ~ contents = $gtk.read_file 'metadata/ios_metadata.txt'~ - Inside source: true *** True Line Result contents = $gtk.read_file 'metadata/ios_metadata.txt' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !contents~ - Inside source: true *** True Line Result if !contents ** Processing line: ~ $gtk.write_file 'metadata/ios_metadata.txt', ios_metadata_template~ - Inside source: true *** True Line Result $gtk.write_file 'metadata/ios_metadata.txt', ios_metadata_template ** Processing line: ~ contents = $gtk.read_file 'metadata/ios_metadata.txt'~ - Inside source: true *** True Line Result contents = $gtk.read_file 'metadata/ios_metadata.txt' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ kvps = contents.each_line~ - Inside source: true *** True Line Result kvps = contents.each_line ** Processing line: ~ .reject { |l| l.strip.length == 0 || (l.strip.start_with? "#") }~ - Inside source: true *** True Line Result .reject { |l| l.strip.length == 0 || (l.strip.start_with? "#") } ** Processing line: ~ .map do |l|~ - Inside source: true *** True Line Result .map do |l| ** Processing line: ~ key, value = l.split("=")~ - Inside source: true *** True Line Result key, value = l.split("=") ** Processing line: ~ [key.strip.to_sym, value.strip]~ - Inside source: true *** True Line Result [key.strip.to_sym, value.strip] ** Processing line: ~ end.flatten~ - Inside source: true *** True Line Result end.flatten ** Processing line: ~ Hash[*kvps]~ - Inside source: true *** True Line Result Hash[*kvps] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def game_metadata~ - Inside source: true *** True Line Result def game_metadata ** Processing line: ~ contents = $gtk.read_file 'metadata/game_metadata.txt'~ - Inside source: true *** True Line Result contents = $gtk.read_file 'metadata/game_metadata.txt' ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ kvps = contents.each_line~ - Inside source: true *** True Line Result kvps = contents.each_line ** Processing line: ~ .reject { |l| l.strip.length == 0 || (l.strip.start_with? "#") }~ - Inside source: true *** True Line Result .reject { |l| l.strip.length == 0 || (l.strip.start_with? "#") } ** Processing line: ~ .map do |l|~ - Inside source: true *** True Line Result .map do |l| ** Processing line: ~ key, value = l.split("=")~ - Inside source: true *** True Line Result key, value = l.split("=") ** Processing line: ~ [key.strip.to_sym, value.strip]~ - Inside source: true *** True Line Result [key.strip.to_sym, value.strip] ** Processing line: ~ end.flatten~ - Inside source: true *** True Line Result end.flatten ** Processing line: ~ Hash[*kvps]~ - Inside source: true *** True Line Result Hash[*kvps] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def raise_ios_metadata_required~ - Inside source: true *** True Line Result def raise_ios_metadata_required ** Processing line: ~ raise WizardException.new(~ - Inside source: true *** True Line Result raise WizardException.new( ** Processing line: ~ "* mygame/metadata/ios_metadata.txt needs to be filled out.",~ - Inside source: true *** True Line Result "* mygame/metadata/ios_metadata.txt needs to be filled out.", ** Processing line: ~ "You need to update metadata/ios_metadata.txt with a valid teamid, appname, appid, devcert, and prodcert.",~ - Inside source: true *** True Line Result "You need to update metadata/ios_metadata.txt with a valid teamid, appname, appid, devcert, and prodcert.", ** Processing line: ~ "Instructions for where the values should come from are within metadata/ios_metadata.txt."~ - Inside source: true *** True Line Result "Instructions for where the values should come from are within metadata/ios_metadata.txt." ** Processing line: ~ )~ - Inside source: true *** True Line Result ) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def determine_team_identifier~ - Inside source: true *** True Line Result def determine_team_identifier ** Processing line: ~ @team_id = (ios_metadata.teamid || "")~ - Inside source: true *** True Line Result @team_id = (ios_metadata.teamid || "") ** Processing line: ~ raise_ios_metadata_required if @team_id.strip.length == 0~ - Inside source: true *** True Line Result raise_ios_metadata_required if @team_id.strip.length == 0 ** Processing line: ~ log_info "Team Identifer is: #{@team_id}"~ - Inside source: true *** True Line Result log_info "Team Identifer is: #{@team_id}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def determine_app_name~ - Inside source: true *** True Line Result def determine_app_name ** Processing line: ~ @app_name = (ios_metadata.appname || "")~ - Inside source: true *** True Line Result @app_name = (ios_metadata.appname || "") ** Processing line: ~ raise_ios_metadata_required if @app_name.strip.length == 0~ - Inside source: true *** True Line Result raise_ios_metadata_required if @app_name.strip.length == 0 ** Processing line: ~ log_info "App name is: #{@app_name}."~ - Inside source: true *** True Line Result log_info "App name is: #{@app_name}." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def provisioning_profile_xml environment~ - Inside source: true *** True Line Result def provisioning_profile_xml environment ** Processing line: ~ xml = $gtk.read_file (provisioning_profile_path environment)~ - Inside source: true *** True Line Result xml = $gtk.read_file (provisioning_profile_path environment) ** Processing line: ~ scrubbed = xml.each_line.map do |l|~ - Inside source: true *** True Line Result scrubbed = xml.each_line.map do |l| ** Processing line: ~ if l.strip.start_with? "<"~ - Inside source: true *** True Line Result if l.strip.start_with? "<" ** Processing line: ~ if l.start_with? ''~ - Inside source: true *** True Line Result if l.start_with? '' ** Processing line: ~ ''~ - Inside source: true *** True Line Result '' ** Processing line: ~ elsif l.include? "Apple Inc."~ - Inside source: true *** True Line Result elsif l.include? "Apple Inc." ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ elsif l.include? ''~ - Inside source: true *** True Line Result elsif l.include? '' ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ l~ - Inside source: true *** True Line Result l ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end.reject { |l| !l }.join~ - Inside source: true *** True Line Result end.reject { |l| !l }.join ** Processing line: ~ $gtk.parse_xml scrubbed~ - Inside source: true *** True Line Result $gtk.parse_xml scrubbed ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def determine_app_id~ - Inside source: true *** True Line Result def determine_app_id ** Processing line: ~ @app_id = ios_metadata.appid~ - Inside source: true *** True Line Result @app_id = ios_metadata.appid ** Processing line: ~ raise_ios_metadata_required if @app_id.strip.length == 0~ - Inside source: true *** True Line Result raise_ios_metadata_required if @app_id.strip.length == 0 ** Processing line: ~ log_info "App Identifier is set to: #{@app_id}"~ - Inside source: true *** True Line Result log_info "App Identifier is set to: #{@app_id}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def determine_devcert~ - Inside source: true *** True Line Result def determine_devcert ** Processing line: ~ @certificate_name = ios_metadata.devcert~ - Inside source: true *** True Line Result @certificate_name = ios_metadata.devcert ** Processing line: ~ raise_ios_metadata_required if @certificate_name.strip.length == 0~ - Inside source: true *** True Line Result raise_ios_metadata_required if @certificate_name.strip.length == 0 ** Processing line: ~ log_info "Dev Certificate is set to: #{@certificate_name}"~ - Inside source: true *** True Line Result log_info "Dev Certificate is set to: #{@certificate_name}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def determine_prodcert~ - Inside source: true *** True Line Result def determine_prodcert ** Processing line: ~ @certificate_name = ios_metadata.prodcert~ - Inside source: true *** True Line Result @certificate_name = ios_metadata.prodcert ** Processing line: ~ raise_ios_metadata_required if @certificate_name.strip.length == 0~ - Inside source: true *** True Line Result raise_ios_metadata_required if @certificate_name.strip.length == 0 ** Processing line: ~ log_info "Production (Distribution) Certificate is set to: #{@certificate_name}"~ - Inside source: true *** True Line Result log_info "Production (Distribution) Certificate is set to: #{@certificate_name}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_app_name name~ - Inside source: true *** True Line Result def set_app_name name ** Processing line: ~ @app_name = name~ - Inside source: true *** True Line Result @app_name = name ** Processing line: ~ start~ - Inside source: true *** True Line Result start ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_dev_profile path~ - Inside source: true *** True Line Result def set_dev_profile path ** Processing line: ~ if !$gtk.read_file path~ - Inside source: true *** True Line Result if !$gtk.read_file path ** Processing line: ~ log_error "I couldn't find a development profile at #{path}."~ - Inside source: true *** True Line Result log_error "I couldn't find a development profile at #{path}." ** Processing line: ~ ask_for_dev_profile~ - Inside source: true *** True Line Result ask_for_dev_profile ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ @provisioning_profile_path = path~ - Inside source: true *** True Line Result @provisioning_profile_path = path ** Processing line: ~ start~ - Inside source: true *** True Line Result start ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def clear_tmp_directory~ - Inside source: true *** True Line Result def clear_tmp_directory ** Processing line: ~ sh "rm -rf #{tmp_directory}"~ - Inside source: true *** True Line Result sh "rm -rf #{tmp_directory}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_app_id id~ - Inside source: true *** True Line Result def set_app_id id ** Processing line: ~ log_info = "App Id set to: #{id}"~ - Inside source: true *** True Line Result log_info = "App Id set to: #{id}" ** Processing line: ~ @app_id = id~ - Inside source: true *** True Line Result @app_id = id ** Processing line: ~ start~ - Inside source: true *** True Line Result start ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def check_for_device~ - Inside source: true *** True Line Result def check_for_device ** Processing line: ~ log_info "Looking for device."~ - Inside source: true *** True Line Result log_info "Looking for device." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !cli_app_exist?(idevice_id_cli_app)~ - Inside source: true *** True Line Result if !cli_app_exist?(idevice_id_cli_app) ** Processing line: ~ raise WizardException.new(~ - Inside source: true *** True Line Result raise WizardException.new( ** Processing line: ~ "* It doesn't look like you have the libimobiledevice iOS protocol library installed.",~ - Inside source: true *** True Line Result "* It doesn't look like you have the libimobiledevice iOS protocol library installed.", ** Processing line: ~ "** 1. Open Terminal.",~ - Inside source: true *** True Line Result "** 1. Open Terminal.", ** Processing line: ~ { w: 700, h: 99, path: get_reserved_sprite("terminal.png") },~ - Inside source: true *** True Line Result { w: 700, h: 99, path: get_reserved_sprite("terminal.png") }, ** Processing line: ~ "** 2. Run: `brew install libimobiledevice`.",~ - Inside source: true *** True Line Result "** 2. Run: `brew install libimobiledevice`.", ** Processing line: ~ { w: 500, h: 93, path: get_reserved_sprite("brew-install-libimobiledevice.png") },~ - Inside source: true *** True Line Result { w: 500, h: 93, path: get_reserved_sprite("brew-install-libimobiledevice.png") }, ** Processing line: ~ )~ - Inside source: true *** True Line Result ) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if connected_devices.length == 0~ - Inside source: true *** True Line Result if connected_devices.length == 0 ** Processing line: ~ raise WizardException.new("* I couldn't find any connected devices. Connect your iOS device to your Mac and try again.")~ - Inside source: true *** True Line Result raise WizardException.new("* I couldn't find any connected devices. Connect your iOS device to your Mac and try again.") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @device_id = connected_devices.first~ - Inside source: true *** True Line Result @device_id = connected_devices.first ** Processing line: ~ log_info "I will be using device with UUID #{@device_id}"~ - Inside source: true *** True Line Result log_info "I will be using device with UUID #{@device_id}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def check_for_certs~ - Inside source: true *** True Line Result def check_for_certs ** Processing line: ~ log_info "Attempting to find certificates on your computer."~ - Inside source: true *** True Line Result log_info "Attempting to find certificates on your computer." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @production_build~ - Inside source: true *** True Line Result if @production_build ** Processing line: ~ @certificate_name = ios_metadata[:prodcert]~ - Inside source: true *** True Line Result @certificate_name = ios_metadata[:prodcert] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ @certificate_name = ios_metadata[:devcert]~ - Inside source: true *** True Line Result @certificate_name = ios_metadata[:devcert] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ log_info "I will be using certificate: '#{@certificate_name}'."~ - Inside source: true *** True Line Result log_info "I will be using certificate: '#{@certificate_name}'." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def idevice_id_cli_app~ - Inside source: true *** True Line Result def idevice_id_cli_app ** Processing line: ~ "idevice_id"~ - Inside source: true *** True Line Result "idevice_id" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def security_cli_app~ - Inside source: true *** True Line Result def security_cli_app ** Processing line: ~ "/usr/bin/security"~ - Inside source: true *** True Line Result "/usr/bin/security" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def xcodebuild_cli_app~ - Inside source: true *** True Line Result def xcodebuild_cli_app ** Processing line: ~ "xcodebuild"~ - Inside source: true *** True Line Result "xcodebuild" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def connected_devices~ - Inside source: true *** True Line Result def connected_devices ** Processing line: ~ sh("idevice_id -l").strip.each_line.map do |l|~ - Inside source: true *** True Line Result sh("idevice_id -l").strip.each_line.map do |l| ** Processing line: ~ l.strip~ - Inside source: true *** True Line Result l.strip ** Processing line: ~ end.reject { |l| l.length == 0 }~ - Inside source: true *** True Line Result end.reject { |l| l.length == 0 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def cli_app_exist? app~ - Inside source: true *** True Line Result def cli_app_exist? app ** Processing line: ~ `which #{app}`.strip.length != 0~ - Inside source: true *** True Line Result `which #{app}`.strip.length != 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def write_entitlements_plist~ - Inside source: true *** True Line Result def write_entitlements_plist ** Processing line: ~ if @production_build~ - Inside source: true *** True Line Result if @production_build ** Processing line: ~ entitlement_plist_string = <<-XML~ - Inside source: true *** True Line Result entitlement_plist_string = <<-XML ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ application-identifier~ - Inside source: true *** True Line Result application-identifier ** Processing line: ~ :app_id~ - Inside source: true *** True Line Result :app_id ** Processing line: ~ beta-reports-active~ - Inside source: true *** True Line Result beta-reports-active ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ XML~ - Inside source: true *** True Line Result XML ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ entitlement_plist_string = <<-XML~ - Inside source: true *** True Line Result entitlement_plist_string = <<-XML ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ application-identifier~ - Inside source: true *** True Line Result application-identifier ** Processing line: ~ :app_id~ - Inside source: true *** True Line Result :app_id ** Processing line: ~ get-task-allow~ - Inside source: true *** True Line Result get-task-allow ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ XML~ - Inside source: true *** True Line Result XML ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ log_info "Creating Entitlements.plist"~ - Inside source: true *** True Line Result log_info "Creating Entitlements.plist" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.write_file_root "tmp/ios/Entitlements.plist", entitlement_plist_string.gsub(":app_id", "#{@team_id}.#{@app_id}").strip~ - Inside source: true *** True Line Result $gtk.write_file_root "tmp/ios/Entitlements.plist", entitlement_plist_string.gsub(":app_id", "#{@team_id}.#{@app_id}").strip ** Processing line: ~ $gtk.write_file_root "tmp/ios/Entitlements.txt", entitlement_plist_string.gsub(":app_id", "#{@team_id}.#{@app_id}").strip~ - Inside source: true *** True Line Result $gtk.write_file_root "tmp/ios/Entitlements.txt", entitlement_plist_string.gsub(":app_id", "#{@team_id}.#{@app_id}").strip ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sh "/usr/bin/plutil -convert binary1 \"#{tmp_directory}/Entitlements.plist\""~ - Inside source: true *** True Line Result sh "/usr/bin/plutil -convert binary1 \"#{tmp_directory}/Entitlements.plist\"" ** Processing line: ~ sh "/usr/bin/plutil -convert xml1 \"#{tmp_directory}/Entitlements.plist\""~ - Inside source: true *** True Line Result sh "/usr/bin/plutil -convert xml1 \"#{tmp_directory}/Entitlements.plist\"" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @entitlement_plist_written = true~ - Inside source: true *** True Line Result @entitlement_plist_written = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def code_sign_payload~ - Inside source: true *** True Line Result def code_sign_payload ** Processing line: ~ log_info "Signing app with #{@certificate_name}."~ - Inside source: true *** True Line Result log_info "Signing app with #{@certificate_name}." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sh "CODESIGN_ALLOCATE=\"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate\" /usr/bin/codesign -f -s \"#{@certificate_name}\" --entitlements #{tmp_directory}/Entitlements.plist \"#{tmp_directory}/ipa_root/Payload/#{@app_name}.app\""~ - Inside source: true *** True Line Result sh "CODESIGN_ALLOCATE=\"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate\" /usr/bin/codesign -f -s \"#{@certificate_name}\" --entitlements #{tmp_directory}/Entitlements.plist \"#{tmp_directory}/ipa_root/Payload/#{@app_name}.app\"" ** Processing line: ~ sh "CODESIGN_ALLOCATE=\"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate\" /usr/bin/codesign -f -s \"#{@certificate_name}\" --entitlements #{tmp_directory}/Entitlements.plist \"#{tmp_directory}/ipa_root/Payload/#{@app_name}.app/Runtime\""~ - Inside source: true *** True Line Result sh "CODESIGN_ALLOCATE=\"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate\" /usr/bin/codesign -f -s \"#{@certificate_name}\" --entitlements #{tmp_directory}/Entitlements.plist \"#{tmp_directory}/ipa_root/Payload/#{@app_name}.app/Runtime\"" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @code_sign_completed = true~ - Inside source: true *** True Line Result @code_sign_completed = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def write_info_plist_distribution~ - Inside source: true *** True Line Result def write_info_plist_distribution ** Processing line: ~ log_info "Adding Info.plist."~ - Inside source: true *** True Line Result log_info "Adding Info.plist." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ <<-XML~ - Inside source: true *** True Line Result <<-XML ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ BuildMachineOSBuild~ - Inside source: true *** True Line Result BuildMachineOSBuild ** Processing line: ~ 20D91~ - Inside source: true *** True Line Result 20D91 ** Processing line: ~ CFBundleDevelopmentRegion~ - Inside source: true *** True Line Result CFBundleDevelopmentRegion ** Processing line: ~ en~ - Inside source: true *** True Line Result en ** Processing line: ~ CFBundleName~ - Inside source: true *** True Line Result CFBundleName ** Processing line: ~ :app_name~ - Inside source: true *** True Line Result :app_name ** Processing line: ~ CFBundleDisplayName~ - Inside source: true *** True Line Result CFBundleDisplayName ** Processing line: ~ A Dark Room~ - Inside source: true *** True Line Result A Dark Room ** Processing line: ~ CFBundleIdentifier~ - Inside source: true *** True Line Result CFBundleIdentifier ** Processing line: ~ :app_id~ - Inside source: true *** True Line Result :app_id ** Processing line: ~ CFBundleExecutable~ - Inside source: true *** True Line Result CFBundleExecutable ** Processing line: ~ :app_name~ - Inside source: true *** True Line Result :app_name ** Processing line: ~ CFBundleInfoDictionaryVersion~ - Inside source: true *** True Line Result CFBundleInfoDictionaryVersion ** Processing line: ~ :app_version~ - Inside source: true *** True Line Result :app_version ** Processing line: ~ CFBundlePackageType~ - Inside source: true *** True Line Result CFBundlePackageType ** Processing line: ~ APPL~ - Inside source: true *** True Line Result APPL ** Processing line: ~ CFBundleShortVersionString~ - Inside source: true *** True Line Result CFBundleShortVersionString ** Processing line: ~ :app_version~ - Inside source: true *** True Line Result :app_version ** Processing line: ~ CFBundleSignature~ - Inside source: true *** True Line Result CFBundleSignature ** Processing line: ~ ????~ - Inside source: true *** True Line Result ???? ** Processing line: ~ CFBundleVersion~ - Inside source: true *** True Line Result CFBundleVersion ** Processing line: ~ :app_version~ - Inside source: true *** True Line Result :app_version ** Processing line: ~ CFBundleIcons~ - Inside source: true *** True Line Result CFBundleIcons ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundlePrimaryIcon~ - Inside source: true *** True Line Result CFBundlePrimaryIcon ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIconName~ - Inside source: true *** True Line Result CFBundleIconName ** Processing line: ~ AppIcon~ - Inside source: true *** True Line Result AppIcon ** Processing line: ~ CFBundleIconFiles~ - Inside source: true *** True Line Result CFBundleIconFiles ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ AppIcon60x60~ - Inside source: true *** True Line Result AppIcon60x60 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIcons~ipad~ - Inside source: true *** True Line Result CFBundleIcons~ipad ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundlePrimaryIcon~ - Inside source: true *** True Line Result CFBundlePrimaryIcon ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIconName~ - Inside source: true *** True Line Result CFBundleIconName ** Processing line: ~ AppIcon~ - Inside source: true *** True Line Result AppIcon ** Processing line: ~ CFBundleIconFiles~ - Inside source: true *** True Line Result CFBundleIconFiles ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ AppIcon60x60~ - Inside source: true *** True Line Result AppIcon60x60 ** Processing line: ~ AppIcon76x76~ - Inside source: true *** True Line Result AppIcon76x76 ** Processing line: ~ AppIcon83.5x83.5~ - Inside source: true *** True Line Result AppIcon83.5x83.5 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UILaunchStoryboardName~ - Inside source: true *** True Line Result UILaunchStoryboardName ** Processing line: ~ SimpleSplash~ - Inside source: true *** True Line Result SimpleSplash ** Processing line: ~ UIRequiresFullScreen~ - Inside source: true *** True Line Result UIRequiresFullScreen ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ITSAppUsesNonExemptEncryption~ - Inside source: true *** True Line Result ITSAppUsesNonExemptEncryption ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UIRequiredDeviceCapabilities~ - Inside source: true *** True Line Result UIRequiredDeviceCapabilities ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ arm64~ - Inside source: true *** True Line Result arm64 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ MinimumOSVersion~ - Inside source: true *** True Line Result MinimumOSVersion ** Processing line: ~ 10.3~ - Inside source: true *** True Line Result 10.3 ** Processing line: ~ CFBundleSupportedPlatforms~ - Inside source: true *** True Line Result CFBundleSupportedPlatforms ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ iPhoneOS~ - Inside source: true *** True Line Result iPhoneOS ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIconFiles~ - Inside source: true *** True Line Result CFBundleIconFiles ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ AppIcon20x20~ - Inside source: true *** True Line Result AppIcon20x20 ** Processing line: ~ AppIcon29x29~ - Inside source: true *** True Line Result AppIcon29x29 ** Processing line: ~ AppIcon40x40~ - Inside source: true *** True Line Result AppIcon40x40 ** Processing line: ~ AppIcon60x60~ - Inside source: true *** True Line Result AppIcon60x60 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UIDeviceFamily~ - Inside source: true *** True Line Result UIDeviceFamily ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ 1~ - Inside source: true *** True Line Result 1 ** Processing line: ~ 2~ - Inside source: true *** True Line Result 2 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UISupportedInterfaceOrientations~ - Inside source: true *** True Line Result UISupportedInterfaceOrientations ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UIInterfaceOrientationPortrait~ - Inside source: true *** True Line Result UIInterfaceOrientationPortrait ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UIStatusBarStyle~ - Inside source: true *** True Line Result UIStatusBarStyle ** Processing line: ~ UIStatusBarStyleDefault~ - Inside source: true *** True Line Result UIStatusBarStyleDefault ** Processing line: ~ UIBackgroundModes~ - Inside source: true *** True Line Result UIBackgroundModes ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ DTXcode~ - Inside source: true *** True Line Result DTXcode ** Processing line: ~ 0124~ - Inside source: true *** True Line Result 0124 ** Processing line: ~ DTXcodeBuild~ - Inside source: true *** True Line Result DTXcodeBuild ** Processing line: ~ 12D4e~ - Inside source: true *** True Line Result 12D4e ** Processing line: ~ DTSDKName~ - Inside source: true *** True Line Result DTSDKName ** Processing line: ~ iphoneos14.4~ - Inside source: true *** True Line Result iphoneos14.4 ** Processing line: ~ DTSDKBuild~ - Inside source: true *** True Line Result DTSDKBuild ** Processing line: ~ 18D46~ - Inside source: true *** True Line Result 18D46 ** Processing line: ~ DTPlatformName~ - Inside source: true *** True Line Result DTPlatformName ** Processing line: ~ iphoneos~ - Inside source: true *** True Line Result iphoneos ** Processing line: ~ DTCompiler~ - Inside source: true *** True Line Result DTCompiler ** Processing line: ~ com.apple.compilers.llvm.clang.1_0~ - Inside source: true *** True Line Result com.apple.compilers.llvm.clang.1_0 ** Processing line: ~ DTPlatformVersion~ - Inside source: true *** True Line Result DTPlatformVersion ** Processing line: ~ 14.4~ - Inside source: true *** True Line Result 14.4 ** Processing line: ~ DTPlatformBuild~ - Inside source: true *** True Line Result DTPlatformBuild ** Processing line: ~ 18D46~ - Inside source: true *** True Line Result 18D46 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ XML~ - Inside source: true *** True Line Result XML ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def development_write_info_plist~ - Inside source: true *** True Line Result def development_write_info_plist ** Processing line: ~ log_info "Adding Info.plist."~ - Inside source: true *** True Line Result log_info "Adding Info.plist." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ info_plist_string = <<-XML~ - Inside source: true *** True Line Result info_plist_string = <<-XML ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ NSAppTransportSecurity~ - Inside source: true *** True Line Result NSAppTransportSecurity ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ NSAllowsArbitraryLoads~ - Inside source: true *** True Line Result NSAllowsArbitraryLoads ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ NSExceptionDomains~ - Inside source: true *** True Line Result NSExceptionDomains ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ google.com~ - Inside source: true *** True Line Result google.com ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ NSExceptionAllowsInsecureHTTPLoads~ - Inside source: true *** True Line Result NSExceptionAllowsInsecureHTTPLoads ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ NSIncludesSubdomains~ - Inside source: true *** True Line Result NSIncludesSubdomains ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ BuildMachineOSBuild~ - Inside source: true *** True Line Result BuildMachineOSBuild ** Processing line: ~ 20D91~ - Inside source: true *** True Line Result 20D91 ** Processing line: ~ CFBundleDevelopmentRegion~ - Inside source: true *** True Line Result CFBundleDevelopmentRegion ** Processing line: ~ en~ - Inside source: true *** True Line Result en ** Processing line: ~ CFBundleDisplayName~ - Inside source: true *** True Line Result CFBundleDisplayName ** Processing line: ~ :app_name~ - Inside source: true *** True Line Result :app_name ** Processing line: ~ CFBundleExecutable~ - Inside source: true *** True Line Result CFBundleExecutable ** Processing line: ~ Runtime~ - Inside source: true *** True Line Result Runtime ** Processing line: ~ CFBundleIconFiles~ - Inside source: true *** True Line Result CFBundleIconFiles ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ AppIcon60x60~ - Inside source: true *** True Line Result AppIcon60x60 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIcons~ - Inside source: true *** True Line Result CFBundleIcons ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundlePrimaryIcon~ - Inside source: true *** True Line Result CFBundlePrimaryIcon ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIconFiles~ - Inside source: true *** True Line Result CFBundleIconFiles ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ AppIcon60x60~ - Inside source: true *** True Line Result AppIcon60x60 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIconName~ - Inside source: true *** True Line Result CFBundleIconName ** Processing line: ~ AppIcon~ - Inside source: true *** True Line Result AppIcon ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIcons~ipad~ - Inside source: true *** True Line Result CFBundleIcons~ipad ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundlePrimaryIcon~ - Inside source: true *** True Line Result CFBundlePrimaryIcon ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIconFiles~ - Inside source: true *** True Line Result CFBundleIconFiles ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ AppIcon60x60~ - Inside source: true *** True Line Result AppIcon60x60 ** Processing line: ~ AppIcon76x76~ - Inside source: true *** True Line Result AppIcon76x76 ** Processing line: ~ AppIcon83.5x83.5~ - Inside source: true *** True Line Result AppIcon83.5x83.5 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIconName~ - Inside source: true *** True Line Result CFBundleIconName ** Processing line: ~ AppIcon~ - Inside source: true *** True Line Result AppIcon ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIdentifier~ - Inside source: true *** True Line Result CFBundleIdentifier ** Processing line: ~ :app_id~ - Inside source: true *** True Line Result :app_id ** Processing line: ~ CFBundleInfoDictionaryVersion~ - Inside source: true *** True Line Result CFBundleInfoDictionaryVersion ** Processing line: ~ :app_version~ - Inside source: true *** True Line Result :app_version ** Processing line: ~ CFBundleName~ - Inside source: true *** True Line Result CFBundleName ** Processing line: ~ :app_name~ - Inside source: true *** True Line Result :app_name ** Processing line: ~ CFBundlePackageType~ - Inside source: true *** True Line Result CFBundlePackageType ** Processing line: ~ APPL~ - Inside source: true *** True Line Result APPL ** Processing line: ~ CFBundleShortVersionString~ - Inside source: true *** True Line Result CFBundleShortVersionString ** Processing line: ~ :app_version~ - Inside source: true *** True Line Result :app_version ** Processing line: ~ CFBundleSignature~ - Inside source: true *** True Line Result CFBundleSignature ** Processing line: ~ ????~ - Inside source: true *** True Line Result ???? ** Processing line: ~ CFBundleSupportedPlatforms~ - Inside source: true *** True Line Result CFBundleSupportedPlatforms ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ iPhoneOS~ - Inside source: true *** True Line Result iPhoneOS ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleVersion~ - Inside source: true *** True Line Result CFBundleVersion ** Processing line: ~ :app_version~ - Inside source: true *** True Line Result :app_version ** Processing line: ~ DTCompiler~ - Inside source: true *** True Line Result DTCompiler ** Processing line: ~ com.apple.compilers.llvm.clang.1_0~ - Inside source: true *** True Line Result com.apple.compilers.llvm.clang.1_0 ** Processing line: ~ DTPlatformBuild~ - Inside source: true *** True Line Result DTPlatformBuild ** Processing line: ~ 18D46~ - Inside source: true *** True Line Result 18D46 ** Processing line: ~ DTPlatformName~ - Inside source: true *** True Line Result DTPlatformName ** Processing line: ~ iphoneos~ - Inside source: true *** True Line Result iphoneos ** Processing line: ~ DTPlatformVersion~ - Inside source: true *** True Line Result DTPlatformVersion ** Processing line: ~ 14.4~ - Inside source: true *** True Line Result 14.4 ** Processing line: ~ DTSDKBuild~ - Inside source: true *** True Line Result DTSDKBuild ** Processing line: ~ 18D46~ - Inside source: true *** True Line Result 18D46 ** Processing line: ~ DTSDKName~ - Inside source: true *** True Line Result DTSDKName ** Processing line: ~ iphoneos14.4~ - Inside source: true *** True Line Result iphoneos14.4 ** Processing line: ~ DTXcode~ - Inside source: true *** True Line Result DTXcode ** Processing line: ~ 0124~ - Inside source: true *** True Line Result 0124 ** Processing line: ~ DTXcodeBuild~ - Inside source: true *** True Line Result DTXcodeBuild ** Processing line: ~ 12D4e~ - Inside source: true *** True Line Result 12D4e ** Processing line: ~ MinimumOSVersion~ - Inside source: true *** True Line Result MinimumOSVersion ** Processing line: ~ 14.4~ - Inside source: true *** True Line Result 14.4 ** Processing line: ~ UIAppFonts~ - Inside source: true *** True Line Result UIAppFonts ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UIBackgroundModes~ - Inside source: true *** True Line Result UIBackgroundModes ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UIDeviceFamily~ - Inside source: true *** True Line Result UIDeviceFamily ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ 1~ - Inside source: true *** True Line Result 1 ** Processing line: ~ 2~ - Inside source: true *** True Line Result 2 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UILaunchImages~ - Inside source: true *** True Line Result UILaunchImages ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UILaunchImageMinimumOSVersion~ - Inside source: true *** True Line Result UILaunchImageMinimumOSVersion ** Processing line: ~ 7.0~ - Inside source: true *** True Line Result 7.0 ** Processing line: ~ UILaunchImageName~ - Inside source: true *** True Line Result UILaunchImageName ** Processing line: ~ Default-568h@2x~ - Inside source: true *** True Line Result Default-568h@2x ** Processing line: ~ UILaunchImageOrientation~ - Inside source: true *** True Line Result UILaunchImageOrientation ** Processing line: ~ Portrait~ - Inside source: true *** True Line Result Portrait ** Processing line: ~ UILaunchImageSize~ - Inside source: true *** True Line Result UILaunchImageSize ** Processing line: ~ {320, 568}~ - Inside source: true *** True Line Result {320, 568} ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UILaunchImageMinimumOSVersion~ - Inside source: true *** True Line Result UILaunchImageMinimumOSVersion ** Processing line: ~ 7.0~ - Inside source: true *** True Line Result 7.0 ** Processing line: ~ UILaunchImageName~ - Inside source: true *** True Line Result UILaunchImageName ** Processing line: ~ Default-667h@2x~ - Inside source: true *** True Line Result Default-667h@2x ** Processing line: ~ UILaunchImageOrientation~ - Inside source: true *** True Line Result UILaunchImageOrientation ** Processing line: ~ Portrait~ - Inside source: true *** True Line Result Portrait ** Processing line: ~ UILaunchImageSize~ - Inside source: true *** True Line Result UILaunchImageSize ** Processing line: ~ {375, 667}~ - Inside source: true *** True Line Result {375, 667} ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UILaunchImageMinimumOSVersion~ - Inside source: true *** True Line Result UILaunchImageMinimumOSVersion ** Processing line: ~ 7.0~ - Inside source: true *** True Line Result 7.0 ** Processing line: ~ UILaunchImageName~ - Inside source: true *** True Line Result UILaunchImageName ** Processing line: ~ Default-736h@3x~ - Inside source: true *** True Line Result Default-736h@3x ** Processing line: ~ UILaunchImageOrientation~ - Inside source: true *** True Line Result UILaunchImageOrientation ** Processing line: ~ Portrait~ - Inside source: true *** True Line Result Portrait ** Processing line: ~ UILaunchImageSize~ - Inside source: true *** True Line Result UILaunchImageSize ** Processing line: ~ {414, 736}~ - Inside source: true *** True Line Result {414, 736} ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UILaunchStoryboardName~ - Inside source: true *** True Line Result UILaunchStoryboardName ** Processing line: ~ SimpleSplash~ - Inside source: true *** True Line Result SimpleSplash ** Processing line: ~ UIRequiredDeviceCapabilities~ - Inside source: true *** True Line Result UIRequiredDeviceCapabilities ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ arm64~ - Inside source: true *** True Line Result arm64 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UIRequiresFullScreen~ - Inside source: true *** True Line Result UIRequiresFullScreen ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UIStatusBarStyle~ - Inside source: true *** True Line Result UIStatusBarStyle ** Processing line: ~ UIStatusBarStyleDefault~ - Inside source: true *** True Line Result UIStatusBarStyleDefault ** Processing line: ~ UISupportedInterfaceOrientations~ - Inside source: true *** True Line Result UISupportedInterfaceOrientations ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UIInterfaceOrientationLandscapeRight~ - Inside source: true *** True Line Result UIInterfaceOrientationLandscapeRight ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ XML~ - Inside source: true *** True Line Result XML ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # UIInterfaceOrientationPortrait~ - Inside source: true *** True Line Result # UIInterfaceOrientationPortrait ** Processing line: ~ # UIInterfaceOrientationLandscapeRight~ - Inside source: true *** True Line Result # UIInterfaceOrientationLandscapeRight ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ info_plist_string.gsub!(":app_name", @app_name)~ - Inside source: true *** True Line Result info_plist_string.gsub!(":app_name", @app_name) ** Processing line: ~ info_plist_string.gsub!(":app_id", @app_id)~ - Inside source: true *** True Line Result info_plist_string.gsub!(":app_id", @app_id) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.write_file_root "tmp/ios/#{@app_name}.app/Info.plist", info_plist_string.strip~ - Inside source: true *** True Line Result $gtk.write_file_root "tmp/ios/#{@app_name}.app/Info.plist", info_plist_string.strip ** Processing line: ~ $gtk.write_file_root "tmp/ios/Info.txt", info_plist_string.strip~ - Inside source: true *** True Line Result $gtk.write_file_root "tmp/ios/Info.txt", info_plist_string.strip ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @info_plist_written = true~ - Inside source: true *** True Line Result @info_plist_written = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def production_write_info_plist~ - Inside source: true *** True Line Result def production_write_info_plist ** Processing line: ~ log_info "Adding Info.plist."~ - Inside source: true *** True Line Result log_info "Adding Info.plist." ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ info_plist_string = <<-XML~ - Inside source: true *** True Line Result info_plist_string = <<-XML ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ BuildMachineOSBuild~ - Inside source: true *** True Line Result BuildMachineOSBuild ** Processing line: ~ 20D91~ - Inside source: true *** True Line Result 20D91 ** Processing line: ~ CFBundleDevelopmentRegion~ - Inside source: true *** True Line Result CFBundleDevelopmentRegion ** Processing line: ~ en~ - Inside source: true *** True Line Result en ** Processing line: ~ CFBundleDisplayName~ - Inside source: true *** True Line Result CFBundleDisplayName ** Processing line: ~ :app_name~ - Inside source: true *** True Line Result :app_name ** Processing line: ~ CFBundleExecutable~ - Inside source: true *** True Line Result CFBundleExecutable ** Processing line: ~ Runtime~ - Inside source: true *** True Line Result Runtime ** Processing line: ~ CFBundleIconFiles~ - Inside source: true *** True Line Result CFBundleIconFiles ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ AppIcon60x60~ - Inside source: true *** True Line Result AppIcon60x60 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIcons~ - Inside source: true *** True Line Result CFBundleIcons ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundlePrimaryIcon~ - Inside source: true *** True Line Result CFBundlePrimaryIcon ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIconFiles~ - Inside source: true *** True Line Result CFBundleIconFiles ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ AppIcon60x60~ - Inside source: true *** True Line Result AppIcon60x60 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIconName~ - Inside source: true *** True Line Result CFBundleIconName ** Processing line: ~ AppIcon~ - Inside source: true *** True Line Result AppIcon ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIcons~ipad~ - Inside source: true *** True Line Result CFBundleIcons~ipad ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundlePrimaryIcon~ - Inside source: true *** True Line Result CFBundlePrimaryIcon ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIconFiles~ - Inside source: true *** True Line Result CFBundleIconFiles ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ AppIcon60x60~ - Inside source: true *** True Line Result AppIcon60x60 ** Processing line: ~ AppIcon76x76~ - Inside source: true *** True Line Result AppIcon76x76 ** Processing line: ~ AppIcon83.5x83.5~ - Inside source: true *** True Line Result AppIcon83.5x83.5 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIconName~ - Inside source: true *** True Line Result CFBundleIconName ** Processing line: ~ AppIcon~ - Inside source: true *** True Line Result AppIcon ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleIdentifier~ - Inside source: true *** True Line Result CFBundleIdentifier ** Processing line: ~ :app_id~ - Inside source: true *** True Line Result :app_id ** Processing line: ~ CFBundleInfoDictionaryVersion~ - Inside source: true *** True Line Result CFBundleInfoDictionaryVersion ** Processing line: ~ :app_version~ - Inside source: true *** True Line Result :app_version ** Processing line: ~ CFBundleName~ - Inside source: true *** True Line Result CFBundleName ** Processing line: ~ :app_name~ - Inside source: true *** True Line Result :app_name ** Processing line: ~ CFBundlePackageType~ - Inside source: true *** True Line Result CFBundlePackageType ** Processing line: ~ APPL~ - Inside source: true *** True Line Result APPL ** Processing line: ~ CFBundleShortVersionString~ - Inside source: true *** True Line Result CFBundleShortVersionString ** Processing line: ~ :app_version~ - Inside source: true *** True Line Result :app_version ** Processing line: ~ CFBundleSignature~ - Inside source: true *** True Line Result CFBundleSignature ** Processing line: ~ ????~ - Inside source: true *** True Line Result ???? ** Processing line: ~ CFBundleSupportedPlatforms~ - Inside source: true *** True Line Result CFBundleSupportedPlatforms ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ iPhoneOS~ - Inside source: true *** True Line Result iPhoneOS ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ CFBundleVersion~ - Inside source: true *** True Line Result CFBundleVersion ** Processing line: ~ :app_version~ - Inside source: true *** True Line Result :app_version ** Processing line: ~ DTCompiler~ - Inside source: true *** True Line Result DTCompiler ** Processing line: ~ com.apple.compilers.llvm.clang.1_0~ - Inside source: true *** True Line Result com.apple.compilers.llvm.clang.1_0 ** Processing line: ~ DTPlatformBuild~ - Inside source: true *** True Line Result DTPlatformBuild ** Processing line: ~ 18D46~ - Inside source: true *** True Line Result 18D46 ** Processing line: ~ DTPlatformName~ - Inside source: true *** True Line Result DTPlatformName ** Processing line: ~ iphoneos~ - Inside source: true *** True Line Result iphoneos ** Processing line: ~ DTPlatformVersion~ - Inside source: true *** True Line Result DTPlatformVersion ** Processing line: ~ 14.4~ - Inside source: true *** True Line Result 14.4 ** Processing line: ~ DTSDKBuild~ - Inside source: true *** True Line Result DTSDKBuild ** Processing line: ~ 18D46~ - Inside source: true *** True Line Result 18D46 ** Processing line: ~ DTSDKName~ - Inside source: true *** True Line Result DTSDKName ** Processing line: ~ iphoneos14.4~ - Inside source: true *** True Line Result iphoneos14.4 ** Processing line: ~ DTXcode~ - Inside source: true *** True Line Result DTXcode ** Processing line: ~ 0124~ - Inside source: true *** True Line Result 0124 ** Processing line: ~ DTXcodeBuild~ - Inside source: true *** True Line Result DTXcodeBuild ** Processing line: ~ 12D4e~ - Inside source: true *** True Line Result 12D4e ** Processing line: ~ MinimumOSVersion~ - Inside source: true *** True Line Result MinimumOSVersion ** Processing line: ~ 14.4~ - Inside source: true *** True Line Result 14.4 ** Processing line: ~ UIAppFonts~ - Inside source: true *** True Line Result UIAppFonts ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UIBackgroundModes~ - Inside source: true *** True Line Result UIBackgroundModes ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UIDeviceFamily~ - Inside source: true *** True Line Result UIDeviceFamily ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ 1~ - Inside source: true *** True Line Result 1 ** Processing line: ~ 2~ - Inside source: true *** True Line Result 2 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UILaunchImages~ - Inside source: true *** True Line Result UILaunchImages ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UILaunchImageMinimumOSVersion~ - Inside source: true *** True Line Result UILaunchImageMinimumOSVersion ** Processing line: ~ 7.0~ - Inside source: true *** True Line Result 7.0 ** Processing line: ~ UILaunchImageName~ - Inside source: true *** True Line Result UILaunchImageName ** Processing line: ~ Default-568h@2x~ - Inside source: true *** True Line Result Default-568h@2x ** Processing line: ~ UILaunchImageOrientation~ - Inside source: true *** True Line Result UILaunchImageOrientation ** Processing line: ~ Portrait~ - Inside source: true *** True Line Result Portrait ** Processing line: ~ UILaunchImageSize~ - Inside source: true *** True Line Result UILaunchImageSize ** Processing line: ~ {320, 568}~ - Inside source: true *** True Line Result {320, 568} ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UILaunchImageMinimumOSVersion~ - Inside source: true *** True Line Result UILaunchImageMinimumOSVersion ** Processing line: ~ 7.0~ - Inside source: true *** True Line Result 7.0 ** Processing line: ~ UILaunchImageName~ - Inside source: true *** True Line Result UILaunchImageName ** Processing line: ~ Default-667h@2x~ - Inside source: true *** True Line Result Default-667h@2x ** Processing line: ~ UILaunchImageOrientation~ - Inside source: true *** True Line Result UILaunchImageOrientation ** Processing line: ~ Portrait~ - Inside source: true *** True Line Result Portrait ** Processing line: ~ UILaunchImageSize~ - Inside source: true *** True Line Result UILaunchImageSize ** Processing line: ~ {375, 667}~ - Inside source: true *** True Line Result {375, 667} ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UILaunchImageMinimumOSVersion~ - Inside source: true *** True Line Result UILaunchImageMinimumOSVersion ** Processing line: ~ 7.0~ - Inside source: true *** True Line Result 7.0 ** Processing line: ~ UILaunchImageName~ - Inside source: true *** True Line Result UILaunchImageName ** Processing line: ~ Default-736h@3x~ - Inside source: true *** True Line Result Default-736h@3x ** Processing line: ~ UILaunchImageOrientation~ - Inside source: true *** True Line Result UILaunchImageOrientation ** Processing line: ~ Portrait~ - Inside source: true *** True Line Result Portrait ** Processing line: ~ UILaunchImageSize~ - Inside source: true *** True Line Result UILaunchImageSize ** Processing line: ~ {414, 736}~ - Inside source: true *** True Line Result {414, 736} ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UILaunchStoryboardName~ - Inside source: true *** True Line Result UILaunchStoryboardName ** Processing line: ~ SimpleSplash~ - Inside source: true *** True Line Result SimpleSplash ** Processing line: ~ UIRequiredDeviceCapabilities~ - Inside source: true *** True Line Result UIRequiredDeviceCapabilities ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ arm64~ - Inside source: true *** True Line Result arm64 ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UIRequiresFullScreen~ - Inside source: true *** True Line Result UIRequiresFullScreen ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UIStatusBarStyle~ - Inside source: true *** True Line Result UIStatusBarStyle ** Processing line: ~ UIStatusBarStyleDefault~ - Inside source: true *** True Line Result UIStatusBarStyleDefault ** Processing line: ~ UISupportedInterfaceOrientations~ - Inside source: true *** True Line Result UISupportedInterfaceOrientations ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ UIInterfaceOrientationLandscapeRight~ - Inside source: true *** True Line Result UIInterfaceOrientationLandscapeRight ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ ~ - Inside source: true *** True Line Result ** Processing line: ~ XML~ - Inside source: true *** True Line Result XML ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # UIInterfaceOrientationPortrait~ - Inside source: true *** True Line Result # UIInterfaceOrientationPortrait ** Processing line: ~ # UIInterfaceOrientationLandscapeRight~ - Inside source: true *** True Line Result # UIInterfaceOrientationLandscapeRight ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ info_plist_string.gsub!(":app_name", @app_name)~ - Inside source: true *** True Line Result info_plist_string.gsub!(":app_name", @app_name) ** Processing line: ~ info_plist_string.gsub!(":app_id", @app_id)~ - Inside source: true *** True Line Result info_plist_string.gsub!(":app_id", @app_id) ** Processing line: ~ info_plist_string.gsub!(":app_version", @app_version)~ - Inside source: true *** True Line Result info_plist_string.gsub!(":app_version", @app_version) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.write_file_root "tmp/ios/#{@app_name}.app/Info.plist", info_plist_string.strip~ - Inside source: true *** True Line Result $gtk.write_file_root "tmp/ios/#{@app_name}.app/Info.plist", info_plist_string.strip ** Processing line: ~ $gtk.write_file_root "tmp/ios/Info.txt", info_plist_string.strip~ - Inside source: true *** True Line Result $gtk.write_file_root "tmp/ios/Info.txt", info_plist_string.strip ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @info_plist_written = true~ - Inside source: true *** True Line Result @info_plist_written = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def device_orientation_xml~ - Inside source: true *** True Line Result def device_orientation_xml ** Processing line: ~ return "UIInterfaceOrientationLandscapeRight" if $gtk.logical_width > $gtk.logical_height~ - Inside source: true *** True Line Result return "UIInterfaceOrientationLandscapeRight" if $gtk.logical_width > $gtk.logical_height ** Processing line: ~ return "UIInterfaceOrientationPortrait"~ - Inside source: true *** True Line Result return "UIInterfaceOrientationPortrait" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tmp_directory~ - Inside source: true *** True Line Result def tmp_directory ** Processing line: ~ "#{relative_path}/tmp/ios"~ - Inside source: true *** True Line Result "#{relative_path}/tmp/ios" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def app_path~ - Inside source: true *** True Line Result def app_path ** Processing line: ~ "#{tmp_directory}/#{@app_name}.app"~ - Inside source: true *** True Line Result "#{tmp_directory}/#{@app_name}.app" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def root_folder~ - Inside source: true *** True Line Result def root_folder ** Processing line: ~ "#{relative_path}/#{$gtk.cli_arguments[:dragonruby]}"~ - Inside source: true *** True Line Result "#{relative_path}/#{$gtk.cli_arguments[:dragonruby]}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def embed_mobileprovision~ - Inside source: true *** True Line Result def embed_mobileprovision ** Processing line: ~ sh %Q[cp #{@provisioning_profile_path} "#{app_path}/embedded.mobileprovision"]~ - Inside source: true *** True Line Result sh %Q[cp #{@provisioning_profile_path} "#{app_path}/embedded.mobileprovision"] ** Processing line: ~ sh %Q[/usr/bin/plutil -convert binary1 "#{app_path}/Info.plist"]~ - Inside source: true *** True Line Result sh %Q[/usr/bin/plutil -convert binary1 "#{app_path}/Info.plist"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def clear_payload_directory~ - Inside source: true *** True Line Result def clear_payload_directory ** Processing line: ~ sh %Q[rm "#{@app_name}".ipa]~ - Inside source: true *** True Line Result sh %Q[rm "#{@app_name}".ipa] ** Processing line: ~ sh %Q[rm -rf "#{app_path}/app"]~ - Inside source: true *** True Line Result sh %Q[rm -rf "#{app_path}/app"] ** Processing line: ~ sh %Q[rm -rf "#{app_path}/sounds"]~ - Inside source: true *** True Line Result sh %Q[rm -rf "#{app_path}/sounds"] ** Processing line: ~ sh %Q[rm -rf "#{app_path}/sprites"]~ - Inside source: true *** True Line Result sh %Q[rm -rf "#{app_path}/sprites"] ** Processing line: ~ sh %Q[rm -rf "#{app_path}/data"]~ - Inside source: true *** True Line Result sh %Q[rm -rf "#{app_path}/data"] ** Processing line: ~ sh %Q[rm -rf "#{app_path}/fonts"]~ - Inside source: true *** True Line Result sh %Q[rm -rf "#{app_path}/fonts"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def stage_app~ - Inside source: true *** True Line Result def stage_app ** Processing line: ~ log_info "Staging."~ - Inside source: true *** True Line Result log_info "Staging." ** Processing line: ~ sh "mkdir -p #{tmp_directory}"~ - Inside source: true *** True Line Result sh "mkdir -p #{tmp_directory}" ** Processing line: ~ sh "cp -R #{relative_path}/dragonruby-ios.app \"#{tmp_directory}/#{@app_name}.app\""~ - Inside source: true *** True Line Result sh "cp -R #{relative_path}/dragonruby-ios.app \"#{tmp_directory}/#{@app_name}.app\"" ** Processing line: ~ sh %Q[cp -r "#{root_folder}/app/" "#{app_path}/app/"]~ - Inside source: true *** True Line Result sh %Q[cp -r "#{root_folder}/app/" "#{app_path}/app/"] ** Processing line: ~ sh %Q[cp -r "#{root_folder}/sounds/" "#{app_path}/sounds/"]~ - Inside source: true *** True Line Result sh %Q[cp -r "#{root_folder}/sounds/" "#{app_path}/sounds/"] ** Processing line: ~ sh %Q[cp -r "#{root_folder}/sprites/" "#{app_path}/sprites/"]~ - Inside source: true *** True Line Result sh %Q[cp -r "#{root_folder}/sprites/" "#{app_path}/sprites/"] ** Processing line: ~ sh %Q[cp -r "#{root_folder}/data/" "#{app_path}/data/"]~ - Inside source: true *** True Line Result sh %Q[cp -r "#{root_folder}/data/" "#{app_path}/data/"] ** Processing line: ~ sh %Q[cp -r "#{root_folder}/fonts/" "#{app_path}/fonts/"]~ - Inside source: true *** True Line Result sh %Q[cp -r "#{root_folder}/fonts/" "#{app_path}/fonts/"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def create_payload~ - Inside source: true *** True Line Result def create_payload ** Processing line: ~ sh %Q[mkdir -p #{tmp_directory}/ipa_root/Payload]~ - Inside source: true *** True Line Result sh %Q[mkdir -p #{tmp_directory}/ipa_root/Payload] ** Processing line: ~ sh %Q[cp -r "#{app_path}" "#{tmp_directory}/ipa_root/Payload"]~ - Inside source: true *** True Line Result sh %Q[cp -r "#{app_path}" "#{tmp_directory}/ipa_root/Payload"] ** Processing line: ~ sh %Q[chmod -R 755 "#{tmp_directory}/ipa_root/Payload"]~ - Inside source: true *** True Line Result sh %Q[chmod -R 755 "#{tmp_directory}/ipa_root/Payload"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def create_payload_directory_dev~ - Inside source: true *** True Line Result def create_payload_directory_dev ** Processing line: ~ # write dev machine's ip address for hotloading~ - Inside source: true *** True Line Result # write dev machine's ip address for hotloading ** Processing line: ~ $gtk.write_file "app/server_ip_address.txt", $gtk.ffi_misc.get_local_ip_address.strip~ - Inside source: true *** True Line Result $gtk.write_file "app/server_ip_address.txt", $gtk.ffi_misc.get_local_ip_address.strip ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ embed_mobileprovision~ - Inside source: true *** True Line Result embed_mobileprovision ** Processing line: ~ clear_payload_directory~ - Inside source: true *** True Line Result clear_payload_directory ** Processing line: ~ stage_app~ - Inside source: true *** True Line Result stage_app ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def create_payload_directory_prod~ - Inside source: true *** True Line Result def create_payload_directory_prod ** Processing line: ~ # production builds does not hotload ip address~ - Inside source: true *** True Line Result # production builds does not hotload ip address ** Processing line: ~ sh %Q[rm "#{root_folder}/app/server_ip_address.txt"]~ - Inside source: true *** True Line Result sh %Q[rm "#{root_folder}/app/server_ip_address.txt"] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ embed_mobileprovision~ - Inside source: true *** True Line Result embed_mobileprovision ** Processing line: ~ stage_app~ - Inside source: true *** True Line Result stage_app ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # production build marker~ - Inside source: true *** True Line Result # production build marker ** Processing line: ~ sh %Q[mkdir -p "#{app_path}/metadata/"]~ - Inside source: true *** True Line Result sh %Q[mkdir -p "#{app_path}/metadata/"] ** Processing line: ~ sh %Q[touch metadata/DRAGONRUBY_PRODUCTION_BUILD]~ - Inside source: true *** True Line Result sh %Q[touch metadata/DRAGONRUBY_PRODUCTION_BUILD] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def create_ipa~ - Inside source: true *** True Line Result def create_ipa ** Processing line: ~ do_zip~ - Inside source: true *** True Line Result do_zip ** Processing line: ~ sh "cp \"#{tmp_directory}/ipa_root/archive.zip\" \"#{tmp_directory}/#{@app_name}.ipa\""~ - Inside source: true *** True Line Result sh "cp \"#{tmp_directory}/ipa_root/archive.zip\" \"#{tmp_directory}/#{@app_name}.ipa\"" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def do_zip~ - Inside source: true *** True Line Result def do_zip ** Processing line: ~ $gtk.write_file_root "tmp/ios/do_zip.sh", <<-SCRIPT~ - Inside source: true *** True Line Result $gtk.write_file_root "tmp/ios/do_zip.sh", <<-SCRIPT ** Processing line: ~ pushd #{tmp_directory}/ipa_root/~ - Inside source: true *** True Line Result pushd #{tmp_directory}/ipa_root/ ** Processing line: ~ zip -q -r archive.zip Payload~ - Inside source: true *** True Line Result zip -q -r archive.zip Payload ** Processing line: ~ popd~ - Inside source: true *** True Line Result popd ** Processing line: ~ SCRIPT~ - Inside source: true *** True Line Result SCRIPT ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sh "sh #{tmp_directory}/do_zip.sh"~ - Inside source: true *** True Line Result sh "sh #{tmp_directory}/do_zip.sh" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def sh cmd~ - Inside source: true *** True Line Result def sh cmd ** Processing line: ~ log_info cmd.strip~ - Inside source: true *** True Line Result log_info cmd.strip ** Processing line: ~ result = `#{cmd}`~ - Inside source: true *** True Line Result result = `#{cmd}` ** Processing line: ~ if result.strip.length > 0~ - Inside source: true *** True Line Result if result.strip.length > 0 ** Processing line: ~ log_info result.strip.each_line.map(&:strip).join("\n")~ - Inside source: true *** True Line Result log_info result.strip.each_line.map(&:strip).join("\n") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ result~ - Inside source: true *** True Line Result result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def deploy~ - Inside source: true *** True Line Result def deploy ** Processing line: ~ sh "XCODE_DIR=\"/Applications/Xcode.app/Contents/Developer\" \"#{relative_path}/dragonruby-deploy-ios\" -d \"#{@device_id}\" \"#{tmp_directory}/#{@app_name}.ipa\""~ - Inside source: true *** True Line Result sh "XCODE_DIR=\"/Applications/Xcode.app/Contents/Developer\" \"#{relative_path}/dragonruby-deploy-ios\" -d \"#{@device_id}\" \"#{tmp_directory}/#{@app_name}.ipa\"" ** Processing line: ~ log_info "Check your device!!"~ - Inside source: true *** True Line Result log_info "Check your device!!" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def print_publish_help~ - Inside source: true *** True Line Result def print_publish_help ** Processing line: ~ has_transporter = (sh "ls /Applications/Transporter.app").include? "Contents"~ - Inside source: true *** True Line Result has_transporter = (sh "ls /Applications/Transporter.app").include? "Contents" ** Processing line: ~ if !has_transporter~ - Inside source: true *** True Line Result if !has_transporter ** Processing line: ~ $gtk.openurl "https://apps.apple.com/us/app/transporter/id1450874784?mt=12"~ - Inside source: true *** True Line Result $gtk.openurl "https://apps.apple.com/us/app/transporter/id1450874784?mt=12" ** Processing line: ~ $console.set_command "$wizards.ios.start env: :#{@opts[:env]}, version: \"#{@opts[:version]}\""~ - Inside source: true *** True Line Result $console.set_command "$wizards.ios.start env: :#{@opts[:env]}, version: \"#{@opts[:version]}\"" ** Processing line: ~ raise WizardException.new(~ - Inside source: true *** True Line Result raise WizardException.new( ** Processing line: ~ "* To upload your app, Download Transporter from the App Store https://apps.apple.com/us/app/transporter/id1450874784?mt=12."~ - Inside source: true *** True Line Result "* To upload your app, Download Transporter from the App Store https://apps.apple.com/us/app/transporter/id1450874784?mt=12." ** Processing line: ~ )~ - Inside source: true *** True Line Result ) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ sh "mkdir ./tmp/ios/intermediary_artifacts"~ - Inside source: true *** True Line Result sh "mkdir ./tmp/ios/intermediary_artifacts" ** Processing line: ~ sh "mv \"#{tmp_directory}/#{@app_name}.app\" #{tmp_directory}/intermediary_artifacts/"~ - Inside source: true *** True Line Result sh "mv \"#{tmp_directory}/#{@app_name}.app\" #{tmp_directory}/intermediary_artifacts/" ** Processing line: ~ sh "mv \"#{tmp_directory}/do_zip.sh\" #{tmp_directory}/intermediary_artifacts"~ - Inside source: true *** True Line Result sh "mv \"#{tmp_directory}/do_zip.sh\" #{tmp_directory}/intermediary_artifacts" ** Processing line: ~ sh "mv \"#{tmp_directory}/Entitlements.plist\" #{tmp_directory}/intermediary_artifacts"~ - Inside source: true *** True Line Result sh "mv \"#{tmp_directory}/Entitlements.plist\" #{tmp_directory}/intermediary_artifacts" ** Processing line: ~ sh "mv \"#{tmp_directory}/ipa_root\" #{tmp_directory}/intermediary_artifacts/"~ - Inside source: true *** True Line Result sh "mv \"#{tmp_directory}/ipa_root\" #{tmp_directory}/intermediary_artifacts/" ** Processing line: ~ sh "open /Applications/Transporter.app"~ - Inside source: true *** True Line Result sh "open /Applications/Transporter.app" ** Processing line: ~ sh "open ./tmp/ios/"~ - Inside source: true *** True Line Result sh "open ./tmp/ios/" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def compile_icons~ - Inside source: true *** True Line Result def compile_icons ** Processing line: ~ cmd = <<-S~ - Inside source: true *** True Line Result cmd = <<-S ** Processing line: ~ "/Applications/Xcode.app/Contents/Developer/usr/bin/actool" --output-format human-readable-text \~ - Inside source: true *** True Line Result "/Applications/Xcode.app/Contents/Developer/usr/bin/actool" --output-format human-readable-text \ ** Processing line: ~ --notices --warnings --platform iphoneos \~ - Inside source: true *** True Line Result --notices --warnings --platform iphoneos \ ** Processing line: ~ --minimum-deployment-target 10.3 \~ - Inside source: true *** True Line Result --minimum-deployment-target 10.3 \ ** Processing line: ~ --target-device iphone \~ - Inside source: true *** True Line Result --target-device iphone \ ** Processing line: ~ --target-device ipad --app-icon 'AppIcon' \~ - Inside source: true *** True Line Result --target-device ipad --app-icon 'AppIcon' \ ** Processing line: ~ --output-partial-info-plist '#{app_path}/AssetCatalog-Info.plist' \~ - Inside source: true *** True Line Result --output-partial-info-plist '#{app_path}/AssetCatalog-Info.plist' \ ** Processing line: ~ --compress-pngs --compile "#{app_path}" \~ - Inside source: true *** True Line Result --compress-pngs --compile "#{app_path}" \ ** Processing line: ~ "#{app_path}/Assets.xcassets"~ - Inside source: true *** True Line Result "#{app_path}/Assets.xcassets" ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ sh cmd~ - Inside source: true *** True Line Result sh cmd ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def stage_native_libs~ - Inside source: true *** True Line Result def stage_native_libs ** Processing line: ~ sh "cp -r \"#{root_folder}/native/\" \"#{app_path}/native/\""~ - Inside source: true *** True Line Result sh "cp -r \"#{root_folder}/native/\" \"#{app_path}/native/\"" ** Processing line: ~ sh "CODESIGN_ALLOCATE=\"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate\" /usr/bin/codesign -f -s \"#{@certificate_name}\" --entitlements #{tmp_directory}/Entitlements.plist \"#{tmp_directory}/#{@app_name}.app/native/ios-device/ext.dylib\""~ - Inside source: true *** True Line Result sh "CODESIGN_ALLOCATE=\"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate\" /usr/bin/codesign -f -s \"#{@certificate_name}\" --entitlements #{tmp_directory}/Entitlements.plist \"#{tmp_directory}/#{@app_name}.app/native/ios-device/ext.dylib\"" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_version version~ - Inside source: true *** True Line Result def set_version version ** Processing line: ~ @app_version = version~ - Inside source: true *** True Line Result @app_version = version ** Processing line: ~ start env: @opts[:env], version: version~ - Inside source: true *** True Line Result start env: @opts[:env], version: version ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def app_version~ - Inside source: true *** True Line Result def app_version ** Processing line: ~ log_info "Attempting to retrieve App Version from metadata/ios_metadata.txt."~ - Inside source: true *** True Line Result log_info "Attempting to retrieve App Version from metadata/ios_metadata.txt." ** Processing line: ~ ios_version_number = (ios_metadata.version || "").strip~ - Inside source: true *** True Line Result ios_version_number = (ios_metadata.version || "").strip ** Processing line: ~ if ios_version_number.length == 0~ - Inside source: true *** True Line Result if ios_version_number.length == 0 ** Processing line: ~ log_info "Not found. Attempting to retrieve App Version from metadata/game_metadata.txt."~ - Inside source: true *** True Line Result log_info "Not found. Attempting to retrieve App Version from metadata/game_metadata.txt." ** Processing line: ~ ios_version_number = (game_metadata.version || "").strip~ - Inside source: true *** True Line Result ios_version_number = (game_metadata.version || "").strip ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ ios_version_number~ - Inside source: true *** True Line Result ios_version_number ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def determine_app_version~ - Inside source: true *** True Line Result def determine_app_version ** Processing line: ~ @app_version = app_version~ - Inside source: true *** True Line Result @app_version = app_version ** Processing line: ~ return if @app_version~ - Inside source: true *** True Line Result return if @app_version ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** itch_wizard.rb~ - Header detected. *** True Line Result *** True Line Result *** itch_wizard.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/itch_wizard.rb~ - Inside source: true *** True Line Result # ./dragon/itch_wizard.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # itch_wizard.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # itch_wizard.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class ItchWizard < Wizard~ - Inside source: true *** True Line Result class ItchWizard < Wizard ** Processing line: ~ def steps~ - Inside source: true *** True Line Result def steps ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ :check_metadata,~ - Inside source: true *** True Line Result :check_metadata, ** Processing line: ~ :deploy,~ - Inside source: true *** True Line Result :deploy, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def write_blank_metadata~ - Inside source: true *** True Line Result def write_blank_metadata ** Processing line: ~ $gtk.write_file metadata_file_path, <<-S.strip~ - Inside source: true *** True Line Result $gtk.write_file metadata_file_path, <<-S.strip ** Processing line: ~ #devid=myname~ - Inside source: true *** True Line Result #devid=myname ** Processing line: ~ #devtitle=My Name~ - Inside source: true *** True Line Result #devtitle=My Name ** Processing line: ~ #gameid=mygame~ - Inside source: true *** True Line Result #gameid=mygame ** Processing line: ~ #gametitle=My Game~ - Inside source: true *** True Line Result #gametitle=My Game ** Processing line: ~ #version=0.1~ - Inside source: true *** True Line Result #version=0.1 ** Processing line: ~ #icon=metadata/icon.png~ - Inside source: true *** True Line Result #icon=metadata/icon.png ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def check_metadata~ - Inside source: true *** True Line Result def check_metadata ** Processing line: ~ metadata_text = $gtk.read_file metadata_file_path~ - Inside source: true *** True Line Result metadata_text = $gtk.read_file metadata_file_path ** Processing line: ~ if !metadata_text~ - Inside source: true *** True Line Result if !metadata_text ** Processing line: ~ write_blank_metadata~ - Inside source: true *** True Line Result write_blank_metadata ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if metadata_text.strip.each_line.to_a.length < 6~ - Inside source: true *** True Line Result if metadata_text.strip.each_line.to_a.length < 6 ** Processing line: ~ write_blank_metadata~ - Inside source: true *** True Line Result write_blank_metadata ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ log "* INFO: Contents of #{metadata_file_path}:"~ - Inside source: true *** True Line Result log "* INFO: Contents of #{metadata_file_path}:" ** Processing line: ~ log "#+begin_src txt"~ - Inside source: true *** True Line Result log "#+begin_src txt" ** Processing line: ~ metadata_text.each_line { |l| log " #{l}" }~ - Inside source: true *** True Line Result metadata_text.each_line { |l| log " #{l}" } ** Processing line: ~ log "#+end_src"~ - Inside source: true *** True Line Result log "#+end_src" ** Processing line: ~ metadata = get_metadata~ - Inside source: true *** True Line Result metadata = get_metadata ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if metadata[:dev_id].start_with?("#") || !@dev_id~ - Inside source: true *** True Line Result if metadata[:dev_id].start_with?("#") || !@dev_id ** Processing line: ~ log "* PROMPT: Please provide your username for Itch."~ - Inside source: true *** True Line Result log "* PROMPT: Please provide your username for Itch." ** Processing line: ~ $console.set_command "$wizards.itch.set_dev_id \"#{metadata[:dev_id]}\""~ - Inside source: true *** True Line Result $console.set_command "$wizards.itch.set_dev_id \"#{metadata[:dev_id]}\"" ** Processing line: ~ return :need_dev_id~ - Inside source: true *** True Line Result return :need_dev_id ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if metadata[:dev_title].start_with?("#") || !@dev_title~ - Inside source: true *** True Line Result if metadata[:dev_title].start_with?("#") || !@dev_title ** Processing line: ~ log "* PROMPT: Please provide developer's/company's name that you want displayed."~ - Inside source: true *** True Line Result log "* PROMPT: Please provide developer's/company's name that you want displayed." ** Processing line: ~ $console.set_command "$wizards.itch.set_dev_title \"#{metadata[:dev_title]}\""~ - Inside source: true *** True Line Result $console.set_command "$wizards.itch.set_dev_title \"#{metadata[:dev_title]}\"" ** Processing line: ~ return :need_dev_title~ - Inside source: true *** True Line Result return :need_dev_title ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if metadata[:game_id].start_with?("#") || !@game_id~ - Inside source: true *** True Line Result if metadata[:game_id].start_with?("#") || !@game_id ** Processing line: ~ log "* PROMPT: Please provide the id for you game. This is the id you specified when you set up a new game page on Itch."~ - Inside source: true *** True Line Result log "* PROMPT: Please provide the id for you game. This is the id you specified when you set up a new game page on Itch." ** Processing line: ~ $console.set_command "$wizards.itch.set_game_id \"#{metadata[:game_id]}\""~ - Inside source: true *** True Line Result $console.set_command "$wizards.itch.set_game_id \"#{metadata[:game_id]}\"" ** Processing line: ~ return :need_game_id~ - Inside source: true *** True Line Result return :need_game_id ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if metadata[:game_title].start_with?("#") || !@game_title~ - Inside source: true *** True Line Result if metadata[:game_title].start_with?("#") || !@game_title ** Processing line: ~ log "* PROMPT: Please provide the display name for your game. (This can include spaces)"~ - Inside source: true *** True Line Result log "* PROMPT: Please provide the display name for your game. (This can include spaces)" ** Processing line: ~ $console.set_command "$wizards.itch.set_game_title \"#{metadata[:game_title]}\""~ - Inside source: true *** True Line Result $console.set_command "$wizards.itch.set_game_title \"#{metadata[:game_title]}\"" ** Processing line: ~ return :need_game_title~ - Inside source: true *** True Line Result return :need_game_title ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if metadata[:version].start_with?("#") || !@version~ - Inside source: true *** True Line Result if metadata[:version].start_with?("#") || !@version ** Processing line: ~ log "* PROMPT: Please provide the version for your game."~ - Inside source: true *** True Line Result log "* PROMPT: Please provide the version for your game." ** Processing line: ~ $console.set_command "$wizards.itch.set_version \"#{metadata[:version]}\""~ - Inside source: true *** True Line Result $console.set_command "$wizards.itch.set_version \"#{metadata[:version]}\"" ** Processing line: ~ return :need_version~ - Inside source: true *** True Line Result return :need_version ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if metadata[:icon].start_with?("#") || !@icon~ - Inside source: true *** True Line Result if metadata[:icon].start_with?("#") || !@icon ** Processing line: ~ log "* PROMPT: Please provide icon path for your game."~ - Inside source: true *** True Line Result log "* PROMPT: Please provide icon path for your game." ** Processing line: ~ $console.set_command "$wizards.itch.set_icon \"#{metadata[:icon]}\""~ - Inside source: true *** True Line Result $console.set_command "$wizards.itch.set_icon \"#{metadata[:icon]}\"" ** Processing line: ~ return :need_icon~ - Inside source: true *** True Line Result return :need_icon ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ puts "here!! success!!!"~ - Inside source: true *** True Line Result puts "here!! success!!!" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return :success~ - Inside source: true *** True Line Result return :success ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_dev_id value~ - Inside source: true *** True Line Result def set_dev_id value ** Processing line: ~ @dev_id = value~ - Inside source: true *** True Line Result @dev_id = value ** Processing line: ~ start~ - Inside source: true *** True Line Result start ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_dev_title value~ - Inside source: true *** True Line Result def set_dev_title value ** Processing line: ~ @dev_title = value~ - Inside source: true *** True Line Result @dev_title = value ** Processing line: ~ start~ - Inside source: true *** True Line Result start ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_game_id value~ - Inside source: true *** True Line Result def set_game_id value ** Processing line: ~ @game_id = value~ - Inside source: true *** True Line Result @game_id = value ** Processing line: ~ start~ - Inside source: true *** True Line Result start ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_game_title value~ - Inside source: true *** True Line Result def set_game_title value ** Processing line: ~ @game_title = value~ - Inside source: true *** True Line Result @game_title = value ** Processing line: ~ start~ - Inside source: true *** True Line Result start ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_version value~ - Inside source: true *** True Line Result def set_version value ** Processing line: ~ @version = value~ - Inside source: true *** True Line Result @version = value ** Processing line: ~ start~ - Inside source: true *** True Line Result start ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def set_icon value~ - Inside source: true *** True Line Result def set_icon value ** Processing line: ~ @icon = value~ - Inside source: true *** True Line Result @icon = value ** Processing line: ~ write_metadata~ - Inside source: true *** True Line Result write_metadata ** Processing line: ~ start~ - Inside source: true *** True Line Result start ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def write_metadata~ - Inside source: true *** True Line Result def write_metadata ** Processing line: ~ text = ""~ - Inside source: true *** True Line Result text = "" ** Processing line: ~ if @dev_id~ - Inside source: true *** True Line Result if @dev_id ** Processing line: ~ text += "devid=#{@dev_id}\n"~ - Inside source: true *** True Line Result text += "devid=#{@dev_id}\n" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ text += "#devid=myname\n"~ - Inside source: true *** True Line Result text += "#devid=myname\n" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @dev_title~ - Inside source: true *** True Line Result if @dev_title ** Processing line: ~ text += "devtitle=#{@dev_title}\n"~ - Inside source: true *** True Line Result text += "devtitle=#{@dev_title}\n" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ text += "#devtitle=My Name\n"~ - Inside source: true *** True Line Result text += "#devtitle=My Name\n" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @game_id~ - Inside source: true *** True Line Result if @game_id ** Processing line: ~ text += "gameid=#{@game_id}\n"~ - Inside source: true *** True Line Result text += "gameid=#{@game_id}\n" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ text += "#gameid=gameid\n"~ - Inside source: true *** True Line Result text += "#gameid=gameid\n" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @game_title~ - Inside source: true *** True Line Result if @game_title ** Processing line: ~ text += "gametitle=#{@game_title}\n"~ - Inside source: true *** True Line Result text += "gametitle=#{@game_title}\n" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ text += "#gametitle=Game Name\n"~ - Inside source: true *** True Line Result text += "#gametitle=Game Name\n" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @version~ - Inside source: true *** True Line Result if @version ** Processing line: ~ text += "version=#{@version}\n"~ - Inside source: true *** True Line Result text += "version=#{@version}\n" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ text += "#version=0.1\n"~ - Inside source: true *** True Line Result text += "#version=0.1\n" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @icon~ - Inside source: true *** True Line Result if @icon ** Processing line: ~ text += "icon=#{@icon}\n"~ - Inside source: true *** True Line Result text += "icon=#{@icon}\n" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ text += "#icon=metadata/icon.png\n"~ - Inside source: true *** True Line Result text += "#icon=metadata/icon.png\n" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.write_file metadata_file_path, text~ - Inside source: true *** True Line Result $gtk.write_file metadata_file_path, text ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def relative_path~ - Inside source: true *** True Line Result def relative_path ** Processing line: ~ (File.dirname $gtk.binary_path)~ - Inside source: true *** True Line Result (File.dirname $gtk.binary_path) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def package_command~ - Inside source: true *** True Line Result def package_command ** Processing line: ~ "#{File.join $gtk.get_base_dir, 'dragonruby-publish'}"~ - Inside source: true *** True Line Result "#{File.join $gtk.get_base_dir, 'dragonruby-publish'}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def deploy~ - Inside source: true *** True Line Result def deploy ** Processing line: ~ log_info "* Running dragonruby-publish: #{package_command}"~ - Inside source: true *** True Line Result log_info "* Running dragonruby-publish: #{package_command}" ** Processing line: ~ $gtk.openurl "http://itch.io/dashboard" if $gtk.platform == "Mac OS X"~ - Inside source: true *** True Line Result $gtk.openurl "http://itch.io/dashboard" if $gtk.platform == "Mac OS X" ** Processing line: ~ if $gtk.platform? :mac~ - Inside source: true *** True Line Result if $gtk.platform? :mac ** Processing line: ~ $gtk.exec "rm -rf ./builds"~ - Inside source: true *** True Line Result $gtk.exec "rm -rf ./builds" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ results = $gtk.exec "#{package_command} --only-package"~ - Inside source: true *** True Line Result results = $gtk.exec "#{package_command} --only-package" ** Processing line: ~ puts File.expand_path("./builds")~ - Inside source: true *** True Line Result puts File.expand_path("./builds") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ log "#+begin_src"~ - Inside source: true *** True Line Result log "#+begin_src" ** Processing line: ~ log results~ - Inside source: true *** True Line Result log results ** Processing line: ~ log "#+end_src"~ - Inside source: true *** True Line Result log "#+end_src" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if $gtk.platform? :mac~ - Inside source: true *** True Line Result if $gtk.platform? :mac ** Processing line: ~ $gtk.exec "open ./builds/"~ - Inside source: true *** True Line Result $gtk.exec "open ./builds/" ** Processing line: ~ elsif $gtk.platform? :windows~ - Inside source: true *** True Line Result elsif $gtk.platform? :windows ** Processing line: ~ $gtk.exec "powershell \"ii .\""~ - Inside source: true *** True Line Result $gtk.exec "powershell \"ii .\"" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $gtk.openurl "https://itch.io/dashboard"~ - Inside source: true *** True Line Result $gtk.openurl "https://itch.io/dashboard" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ :success~ - Inside source: true *** True Line Result :success ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def start~ - Inside source: true *** True Line Result def start ** Processing line: ~ log "================"~ - Inside source: true *** True Line Result log "================" ** Processing line: ~ log "* INFO: Starting Itch Wizard."~ - Inside source: true *** True Line Result log "* INFO: Starting Itch Wizard." ** Processing line: ~ @start_at = Kernel.global_tick_count~ - Inside source: true *** True Line Result @start_at = Kernel.global_tick_count ** Processing line: ~ steps.each do |m|~ - Inside source: true *** True Line Result steps.each do |m| ** Processing line: ~ begin~ - Inside source: true *** True Line Result begin ** Processing line: ~ log_info "Running Itch Wizard Step: ~$wizards.itch.#{m}~"~ - Inside source: true *** True Line Result log_info "Running Itch Wizard Step: ~$wizards.itch.#{m}~" ** Processing line: ~ result = (send m) || :success~ - Inside source: true *** True Line Result result = (send m) || :success ** Processing line: ~ @wizard_status[m][:result] = result~ - Inside source: true *** True Line Result @wizard_status[m][:result] = result ** Processing line: ~ if result != :success~ - Inside source: true *** True Line Result if result != :success ** Processing line: ~ log_info "Exiting wizard. :#{result}"~ - Inside source: true *** True Line Result log_info "Exiting wizard. :#{result}" ** Processing line: ~ break~ - Inside source: true *** True Line Result break ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ if e.is_a? WizardException~ - Inside source: true *** True Line Result if e.is_a? WizardException ** Processing line: ~ $console.log.clear~ - Inside source: true *** True Line Result $console.log.clear ** Processing line: ~ $console.archived_log.clear~ - Inside source: true *** True Line Result $console.archived_log.clear ** Processing line: ~ log "=" * $console.console_text_width~ - Inside source: true *** True Line Result log "=" * $console.console_text_width ** Processing line: ~ e.console_primitives.each do |p|~ - Inside source: true *** True Line Result e.console_primitives.each do |p| ** Processing line: ~ $console.add_primitive p~ - Inside source: true *** True Line Result $console.add_primitive p ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ log "=" * $console.console_text_width~ - Inside source: true *** True Line Result log "=" * $console.console_text_width ** Processing line: ~ $console.set_command (e.console_command || "$wizards.itch.start")~ - Inside source: true *** True Line Result $console.set_command (e.console_command || "$wizards.itch.start") ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ log_error "Step #{m} failed."~ - Inside source: true *** True Line Result log_error "Step #{m} failed." ** Processing line: ~ log_error e.to_s~ - Inside source: true *** True Line Result log_error e.to_s ** Processing line: ~ $console.set_command "$wizards.itch.start"~ - Inside source: true *** True Line Result $console.set_command "$wizards.itch.start" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ break~ - Inside source: true *** True Line Result break ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset~ - Inside source: true *** True Line Result def reset ** Processing line: ~ @dev_id = nil~ - Inside source: true *** True Line Result @dev_id = nil ** Processing line: ~ @dev_title = nil~ - Inside source: true *** True Line Result @dev_title = nil ** Processing line: ~ @game_id = nil~ - Inside source: true *** True Line Result @game_id = nil ** Processing line: ~ @game_title = nil~ - Inside source: true *** True Line Result @game_title = nil ** Processing line: ~ @version = nil~ - Inside source: true *** True Line Result @version = nil ** Processing line: ~ @icon = nil~ - Inside source: true *** True Line Result @icon = nil ** Processing line: ~ init_wizard_status~ - Inside source: true *** True Line Result init_wizard_status ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def restart~ - Inside source: true *** True Line Result def restart ** Processing line: ~ reset~ - Inside source: true *** True Line Result reset ** Processing line: ~ start~ - Inside source: true *** True Line Result start ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ reset~ - Inside source: true *** True Line Result reset ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def init_wizard_status~ - Inside source: true *** True Line Result def init_wizard_status ** Processing line: ~ @wizard_status = {}~ - Inside source: true *** True Line Result @wizard_status = {} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ steps.each do |m|~ - Inside source: true *** True Line Result steps.each do |m| ** Processing line: ~ @wizard_status[m] = { result: :not_started }~ - Inside source: true *** True Line Result @wizard_status[m] = { result: :not_started } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ previous_step = nil~ - Inside source: true *** True Line Result previous_step = nil ** Processing line: ~ next_step = nil~ - Inside source: true *** True Line Result next_step = nil ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ steps.each_cons(2) do |current_step, next_step|~ - Inside source: true *** True Line Result steps.each_cons(2) do |current_step, next_step| ** Processing line: ~ @wizard_status[current_step][:next_step] = next_step~ - Inside source: true *** True Line Result @wizard_status[current_step][:next_step] = next_step ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ steps.reverse.each_cons(2) do |current_step, previous_step|~ - Inside source: true *** True Line Result steps.reverse.each_cons(2) do |current_step, previous_step| ** Processing line: ~ @wizard_status[current_step][:previous_step] = previous_step~ - Inside source: true *** True Line Result @wizard_status[current_step][:previous_step] = previous_step ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** layout.rb~ - Header detected. *** True Line Result *** True Line Result *** layout.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/layout.rb~ - Inside source: true *** True Line Result # ./dragon/layout.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # layout.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # layout.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Margin~ - Inside source: true *** True Line Result class Margin ** Processing line: ~ attr :left, :right, :top, :bottom~ - Inside source: true *** True Line Result attr :left, :right, :top, :bottom ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @left = 0~ - Inside source: true *** True Line Result @left = 0 ** Processing line: ~ @right = 0~ - Inside source: true *** True Line Result @right = 0 ** Processing line: ~ @top = 0~ - Inside source: true *** True Line Result @top = 0 ** Processing line: ~ @bottom = 0~ - Inside source: true *** True Line Result @bottom = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ left: @left,~ - Inside source: true *** True Line Result left: @left, ** Processing line: ~ right: @right,~ - Inside source: true *** True Line Result right: @right, ** Processing line: ~ top: @top,~ - Inside source: true *** True Line Result top: @top, ** Processing line: ~ bottom: @bottom,~ - Inside source: true *** True Line Result bottom: @bottom, ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inspect~ - Inside source: true *** True Line Result def inspect ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class SafeArea~ - Inside source: true *** True Line Result class SafeArea ** Processing line: ~ attr :w, :h, :margin~ - Inside source: true *** True Line Result attr :w, :h, :margin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @w = 0~ - Inside source: true *** True Line Result @w = 0 ** Processing line: ~ @h = 0~ - Inside source: true *** True Line Result @h = 0 ** Processing line: ~ @margin = Margin.new~ - Inside source: true *** True Line Result @margin = Margin.new ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ w: @w,~ - Inside source: true *** True Line Result w: @w, ** Processing line: ~ h: @h,~ - Inside source: true *** True Line Result h: @h, ** Processing line: ~ margin: @margin.serialize~ - Inside source: true *** True Line Result margin: @margin.serialize ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inspect~ - Inside source: true *** True Line Result def inspect ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class GridArea~ - Inside source: true *** True Line Result class GridArea ** Processing line: ~ attr :w, :h, :margin, :gutter, :col_count, :row_count, :cell_w, :cell_h, :outer_gutter~ - Inside source: true *** True Line Result attr :w, :h, :margin, :gutter, :col_count, :row_count, :cell_w, :cell_h, :outer_gutter ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @w = 0~ - Inside source: true *** True Line Result @w = 0 ** Processing line: ~ @h = 0~ - Inside source: true *** True Line Result @h = 0 ** Processing line: ~ @gutter = 0~ - Inside source: true *** True Line Result @gutter = 0 ** Processing line: ~ @outer_gutter = 0~ - Inside source: true *** True Line Result @outer_gutter = 0 ** Processing line: ~ @col_count = 0~ - Inside source: true *** True Line Result @col_count = 0 ** Processing line: ~ @row_count = 0~ - Inside source: true *** True Line Result @row_count = 0 ** Processing line: ~ @margin = Margin.new~ - Inside source: true *** True Line Result @margin = Margin.new ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ w: @w,~ - Inside source: true *** True Line Result w: @w, ** Processing line: ~ h: @h,~ - Inside source: true *** True Line Result h: @h, ** Processing line: ~ gutter: @gutter,~ - Inside source: true *** True Line Result gutter: @gutter, ** Processing line: ~ outer_gutter: @outer_gutter,~ - Inside source: true *** True Line Result outer_gutter: @outer_gutter, ** Processing line: ~ col_count: @col_count,~ - Inside source: true *** True Line Result col_count: @col_count, ** Processing line: ~ row_count: @row_count,~ - Inside source: true *** True Line Result row_count: @row_count, ** Processing line: ~ margin: @margin.serialize~ - Inside source: true *** True Line Result margin: @margin.serialize ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inspect~ - Inside source: true *** True Line Result def inspect ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class ControlArea~ - Inside source: true *** True Line Result class ControlArea ** Processing line: ~ attr :cell_size, :w, :h, :margin~ - Inside source: true *** True Line Result attr :cell_size, :w, :h, :margin ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @margin = Margin.new~ - Inside source: true *** True Line Result @margin = Margin.new ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ cell_size: @cell_size,~ - Inside source: true *** True Line Result cell_size: @cell_size, ** Processing line: ~ w: @w,~ - Inside source: true *** True Line Result w: @w, ** Processing line: ~ h: @h,~ - Inside source: true *** True Line Result h: @h, ** Processing line: ~ margin: @margin.serialize,~ - Inside source: true *** True Line Result margin: @margin.serialize, ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inspect~ - Inside source: true *** True Line Result def inspect ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Device~ - Inside source: true *** True Line Result class Device ** Processing line: ~ attr :w, :h, :safe_area, :grid_area, :control_area, :name, :aspect~ - Inside source: true *** True Line Result attr :w, :h, :safe_area, :grid_area, :control_area, :name, :aspect ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @name = ""~ - Inside source: true *** True Line Result @name = "" ** Processing line: ~ @w = 0~ - Inside source: true *** True Line Result @w = 0 ** Processing line: ~ @h = 0~ - Inside source: true *** True Line Result @h = 0 ** Processing line: ~ @safe_area = SafeArea.new~ - Inside source: true *** True Line Result @safe_area = SafeArea.new ** Processing line: ~ @grid_area = GridArea.new~ - Inside source: true *** True Line Result @grid_area = GridArea.new ** Processing line: ~ @control_area = ControlArea.new~ - Inside source: true *** True Line Result @control_area = ControlArea.new ** Processing line: ~ @aspect = AspectRatio.new~ - Inside source: true *** True Line Result @aspect = AspectRatio.new ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def assert! result, message~ - Inside source: true *** True Line Result def assert! result, message ** Processing line: ~ return if result~ - Inside source: true *** True Line Result return if result ** Processing line: ~ raise message~ - Inside source: true *** True Line Result raise message ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def check_math!~ - Inside source: true *** True Line Result def check_math! ** Processing line: ~ assert! (@control_area.w + @control_area.margin.left + @control_area.margin.right) == @w, "Math for Width didn't pan out."~ - Inside source: true *** True Line Result assert! (@control_area.w + @control_area.margin.left + @control_area.margin.right) == @w, "Math for Width didn't pan out." ** Processing line: ~ assert! (@control_area.h + @control_area.margin.top + @control_area.margin.bottom) == @h, "Math for Height didn't pan out."~ - Inside source: true *** True Line Result assert! (@control_area.h + @control_area.margin.top + @control_area.margin.bottom) == @h, "Math for Height didn't pan out." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ name: @name,~ - Inside source: true *** True Line Result name: @name, ** Processing line: ~ w: @w,~ - Inside source: true *** True Line Result w: @w, ** Processing line: ~ h: @h,~ - Inside source: true *** True Line Result h: @h, ** Processing line: ~ aspect: @aspect.serialize,~ - Inside source: true *** True Line Result aspect: @aspect.serialize, ** Processing line: ~ safe_area: @safe_area.serialize,~ - Inside source: true *** True Line Result safe_area: @safe_area.serialize, ** Processing line: ~ grid_area: @grid_area.serialize,~ - Inside source: true *** True Line Result grid_area: @grid_area.serialize, ** Processing line: ~ control_area: @control_area.serialize~ - Inside source: true *** True Line Result control_area: @control_area.serialize ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inspect~ - Inside source: true *** True Line Result def inspect ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class AspectRatio~ - Inside source: true *** True Line Result class AspectRatio ** Processing line: ~ attr :w, :h, :u~ - Inside source: true *** True Line Result attr :w, :h, :u ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @w = 0~ - Inside source: true *** True Line Result @w = 0 ** Processing line: ~ @h = 0~ - Inside source: true *** True Line Result @h = 0 ** Processing line: ~ @u = 0~ - Inside source: true *** True Line Result @u = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ w: @w,~ - Inside source: true *** True Line Result w: @w, ** Processing line: ~ h: @h,~ - Inside source: true *** True Line Result h: @h, ** Processing line: ~ u: @u~ - Inside source: true *** True Line Result u: @u ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inspect~ - Inside source: true *** True Line Result def inspect ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Layout~ - Inside source: true *** True Line Result class Layout ** Processing line: ~ attr :w, :h, :rect_cache~ - Inside source: true *** True Line Result attr :w, :h, :rect_cache ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize w, h~ - Inside source: true *** True Line Result def initialize w, h ** Processing line: ~ @w = w~ - Inside source: true *** True Line Result @w = w ** Processing line: ~ @h = h~ - Inside source: true *** True Line Result @h = h ** Processing line: ~ @rect_cache = {}~ - Inside source: true *** True Line Result @rect_cache = {} ** Processing line: ~ init_device @w, @h~ - Inside source: true *** True Line Result init_device @w, @h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def u_for_16x9 w, h~ - Inside source: true *** True Line Result def u_for_16x9 w, h ** Processing line: ~ u = (w.fdiv 16).floor~ - Inside source: true *** True Line Result u = (w.fdiv 16).floor ** Processing line: ~ u = (h.fdiv 9).floor if (u * 9) > h~ - Inside source: true *** True Line Result u = (h.fdiv 9).floor if (u * 9) > h ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ u: u,~ - Inside source: true *** True Line Result u: u, ** Processing line: ~ w: u * 16,~ - Inside source: true *** True Line Result w: u * 16, ** Processing line: ~ h: u * 9~ - Inside source: true *** True Line Result h: u * 9 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def font_relative_size_enum size_enum~ - Inside source: true *** True Line Result def font_relative_size_enum size_enum ** Processing line: ~ base_line_logical = 22~ - Inside source: true *** True Line Result base_line_logical = 22 ** Processing line: ~ base_line_actual = font_size_med~ - Inside source: true *** True Line Result base_line_actual = font_size_med ** Processing line: ~ target_logical = size_enum~ - Inside source: true *** True Line Result target_logical = size_enum ** Processing line: ~ target_logical = 1 if target_logical <= 0~ - Inside source: true *** True Line Result target_logical = 1 if target_logical <= 0 ** Processing line: ~ (base_line_actual / base_line_logical) * target_logical~ - Inside source: true *** True Line Result (base_line_actual / base_line_logical) * target_logical ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def font_px_to_pt px~ - Inside source: true *** True Line Result def font_px_to_pt px ** Processing line: ~ (px / 1.33333).floor~ - Inside source: true *** True Line Result (px / 1.33333).floor ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def font_pt_to_px pt~ - Inside source: true *** True Line Result def font_pt_to_px pt ** Processing line: ~ pt * 1.333333~ - Inside source: true *** True Line Result pt * 1.333333 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def font_size_cell~ - Inside source: true *** True Line Result def font_size_cell ** Processing line: ~ (cell_height / 1.33333)~ - Inside source: true *** True Line Result (cell_height / 1.33333) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def font_size_xl~ - Inside source: true *** True Line Result def font_size_xl ** Processing line: ~ font_size_cell~ - Inside source: true *** True Line Result font_size_cell ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def font_size_lg~ - Inside source: true *** True Line Result def font_size_lg ** Processing line: ~ font_size_cell * 0.8~ - Inside source: true *** True Line Result font_size_cell * 0.8 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def font_size_med~ - Inside source: true *** True Line Result def font_size_med ** Processing line: ~ font_size_cell * 0.7~ - Inside source: true *** True Line Result font_size_cell * 0.7 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def font_size_sm~ - Inside source: true *** True Line Result def font_size_sm ** Processing line: ~ font_size_cell * 0.6~ - Inside source: true *** True Line Result font_size_cell * 0.6 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def font_size_xs~ - Inside source: true *** True Line Result def font_size_xs ** Processing line: ~ font_size_cell * 0.5~ - Inside source: true *** True Line Result font_size_cell * 0.5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def font_size~ - Inside source: true *** True Line Result def font_size ** Processing line: ~ font_size_cell * 0.7~ - Inside source: true *** True Line Result font_size_cell * 0.7 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def logical_rect~ - Inside source: true *** True Line Result def logical_rect ** Processing line: ~ @logical_rect ||= { x: 0,~ - Inside source: true *** True Line Result @logical_rect ||= { x: 0, ** Processing line: ~ y: 0,~ - Inside source: true *** True Line Result y: 0, ** Processing line: ~ w: @w,~ - Inside source: true *** True Line Result w: @w, ** Processing line: ~ h: @h }~ - Inside source: true *** True Line Result h: @h } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def safe_rect~ - Inside source: true *** True Line Result def safe_rect ** Processing line: ~ @safe_rect ||= { x: 0,~ - Inside source: true *** True Line Result @safe_rect ||= { x: 0, ** Processing line: ~ y: 0,~ - Inside source: true *** True Line Result y: 0, ** Processing line: ~ w: @w,~ - Inside source: true *** True Line Result w: @w, ** Processing line: ~ h: @h }~ - Inside source: true *** True Line Result h: @h } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def control_rect~ - Inside source: true *** True Line Result def control_rect ** Processing line: ~ @control_rect ||= { x: device.control_area.margin.left,~ - Inside source: true *** True Line Result @control_rect ||= { x: device.control_area.margin.left, ** Processing line: ~ y: device.control_area.margin.top,~ - Inside source: true *** True Line Result y: device.control_area.margin.top, ** Processing line: ~ w: device.control_area.w,~ - Inside source: true *** True Line Result w: device.control_area.w, ** Processing line: ~ h: device.control_area.h }~ - Inside source: true *** True Line Result h: device.control_area.h } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def row_count~ - Inside source: true *** True Line Result def row_count ** Processing line: ~ device.grid_area.row_count~ - Inside source: true *** True Line Result device.grid_area.row_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def row_max_index~ - Inside source: true *** True Line Result def row_max_index ** Processing line: ~ row_count - 1~ - Inside source: true *** True Line Result row_count - 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def col_count~ - Inside source: true *** True Line Result def col_count ** Processing line: ~ device.grid_area.col_count~ - Inside source: true *** True Line Result device.grid_area.col_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def col_max_index~ - Inside source: true *** True Line Result def col_max_index ** Processing line: ~ col_count - 1~ - Inside source: true *** True Line Result col_count - 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def gutter_height~ - Inside source: true *** True Line Result def gutter_height ** Processing line: ~ device.grid_area.gutter~ - Inside source: true *** True Line Result device.grid_area.gutter ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def gutter_width~ - Inside source: true *** True Line Result def gutter_width ** Processing line: ~ device.grid_area.gutter~ - Inside source: true *** True Line Result device.grid_area.gutter ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def outer_gutter~ - Inside source: true *** True Line Result def outer_gutter ** Processing line: ~ device.grid_area.outer_gutter~ - Inside source: true *** True Line Result device.grid_area.outer_gutter ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def cell_height~ - Inside source: true *** True Line Result def cell_height ** Processing line: ~ device.control_area.cell_size~ - Inside source: true *** True Line Result device.control_area.cell_size ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def cell_width~ - Inside source: true *** True Line Result def cell_width ** Processing line: ~ device.control_area.cell_size~ - Inside source: true *** True Line Result device.control_area.cell_size ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rect_defaults~ - Inside source: true *** True Line Result def rect_defaults ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ row: nil,~ - Inside source: true *** True Line Result row: nil, ** Processing line: ~ col: nil,~ - Inside source: true *** True Line Result col: nil, ** Processing line: ~ h: 1,~ - Inside source: true *** True Line Result h: 1, ** Processing line: ~ w: 1,~ - Inside source: true *** True Line Result w: 1, ** Processing line: ~ dx: 0,~ - Inside source: true *** True Line Result dx: 0, ** Processing line: ~ dx_ratio: 1,~ - Inside source: true *** True Line Result dx_ratio: 1, ** Processing line: ~ dy: 0,~ - Inside source: true *** True Line Result dy: 0, ** Processing line: ~ dy_ratio: 1,~ - Inside source: true *** True Line Result dy_ratio: 1, ** Processing line: ~ dh_ratio: 1,~ - Inside source: true *** True Line Result dh_ratio: 1, ** Processing line: ~ dw_ratio: 1,~ - Inside source: true *** True Line Result dw_ratio: 1, ** Processing line: ~ merge: nil,~ - Inside source: true *** True Line Result merge: nil, ** Processing line: ~ rect: :control_rect~ - Inside source: true *** True Line Result rect: :control_rect ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def row n~ - Inside source: true *** True Line Result def row n ** Processing line: ~ (rect row: n, col: 0, w: 0, h: 0).x~ - Inside source: true *** True Line Result (rect row: n, col: 0, w: 0, h: 0).x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def row_from_bottom n~ - Inside source: true *** True Line Result def row_from_bottom n ** Processing line: ~ (rect row: row_count - n, col: 0, w: 0, h: 0).x~ - Inside source: true *** True Line Result (rect row: row_count - n, col: 0, w: 0, h: 0).x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def col n~ - Inside source: true *** True Line Result def col n ** Processing line: ~ (rect row: 0, col: n, w: 0, h: 0).y~ - Inside source: true *** True Line Result (rect row: 0, col: n, w: 0, h: 0).y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def col_from_right n~ - Inside source: true *** True Line Result def col_from_right n ** Processing line: ~ (rect row: 0, col: col_max_index - n, w: 0, h: 0).y~ - Inside source: true *** True Line Result (rect row: 0, col: col_max_index - n, w: 0, h: 0).y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def w n~ - Inside source: true *** True Line Result def w n ** Processing line: ~ (rect row: 0, col: 0, w: n, h: 1).w~ - Inside source: true *** True Line Result (rect row: 0, col: 0, w: n, h: 1).w ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def h n~ - Inside source: true *** True Line Result def h n ** Processing line: ~ (rect row: 0, col: 0, w: 1, h: n).h~ - Inside source: true *** True Line Result (rect row: 0, col: 0, w: 1, h: n).h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rect_group opts~ - Inside source: true *** True Line Result def rect_group opts ** Processing line: ~ group = opts.group~ - Inside source: true *** True Line Result group = opts.group ** Processing line: ~ r = opts.row || 0~ - Inside source: true *** True Line Result r = opts.row || 0 ** Processing line: ~ r = row_max_index - opts.row_from_bottom if opts.row_from_bottom~ - Inside source: true *** True Line Result r = row_max_index - opts.row_from_bottom if opts.row_from_bottom ** Processing line: ~ c = opts.col || 0~ - Inside source: true *** True Line Result c = opts.col || 0 ** Processing line: ~ c = col_max_index - opts.col_from_right if opts.col_from_right~ - Inside source: true *** True Line Result c = col_max_index - opts.col_from_right if opts.col_from_right ** Processing line: ~ drow = opts.drow || 0~ - Inside source: true *** True Line Result drow = opts.drow || 0 ** Processing line: ~ dcol = opts.dcol || 0~ - Inside source: true *** True Line Result dcol = opts.dcol || 0 ** Processing line: ~ w = opts.w || 0~ - Inside source: true *** True Line Result w = opts.w || 0 ** Processing line: ~ h = opts.h || 0~ - Inside source: true *** True Line Result h = opts.h || 0 ** Processing line: ~ merge = opts[:merge]~ - Inside source: true *** True Line Result merge = opts[:merge] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ running_row = r~ - Inside source: true *** True Line Result running_row = r ** Processing line: ~ running_col = c~ - Inside source: true *** True Line Result running_col = c ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ running_col = calc_col_offset(opts.col_offset) if opts.col_offset~ - Inside source: true *** True Line Result running_col = calc_col_offset(opts.col_offset) if opts.col_offset ** Processing line: ~ running_row = calc_row_offset(opts.row_offset) if opts.row_offset~ - Inside source: true *** True Line Result running_row = calc_row_offset(opts.row_offset) if opts.row_offset ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ group.map do |i|~ - Inside source: true *** True Line Result group.map do |i| ** Processing line: ~ group_layout_opts = i.layout || {}~ - Inside source: true *** True Line Result group_layout_opts = i.layout || {} ** Processing line: ~ group_layout_opts = group_layout_opts.merge row: running_row,~ - Inside source: true *** True Line Result group_layout_opts = group_layout_opts.merge row: running_row, ** Processing line: ~ col: running_col,~ - Inside source: true *** True Line Result col: running_col, ** Processing line: ~ merge: merge,~ - Inside source: true *** True Line Result merge: merge, ** Processing line: ~ w: w, h: h~ - Inside source: true *** True Line Result w: w, h: h ** Processing line: ~ result = (rect group_layout_opts).merge i~ - Inside source: true *** True Line Result result = (rect group_layout_opts).merge i ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if (i.is_a? Hash) && (i.primitive_marker == :label)~ - Inside source: true *** True Line Result if (i.is_a? Hash) && (i.primitive_marker == :label) ** Processing line: ~ if i.alignment_enum == 1~ - Inside source: true *** True Line Result if i.alignment_enum == 1 ** Processing line: ~ result.x += result.w.half~ - Inside source: true *** True Line Result result.x += result.w.half ** Processing line: ~ elsif i.alignment_enum == 2~ - Inside source: true *** True Line Result elsif i.alignment_enum == 2 ** Processing line: ~ result.x += result.w~ - Inside source: true *** True Line Result result.x += result.w ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ running_row += drow~ - Inside source: true *** True Line Result running_row += drow ** Processing line: ~ running_col += dcol~ - Inside source: true *** True Line Result running_col += dcol ** Processing line: ~ result~ - Inside source: true *** True Line Result result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_row_offset opts = {}~ - Inside source: true *** True Line Result def calc_row_offset opts = {} ** Processing line: ~ count = opts[:count] || opts[:length] || 0~ - Inside source: true *** True Line Result count = opts[:count] || opts[:length] || 0 ** Processing line: ~ h = opts.h || 1~ - Inside source: true *** True Line Result h = opts.h || 1 ** Processing line: ~ (row_count - (count * h)) / 2.0~ - Inside source: true *** True Line Result (row_count - (count * h)) / 2.0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def calc_col_offset opts = {}~ - Inside source: true *** True Line Result def calc_col_offset opts = {} ** Processing line: ~ count = opts[:count] || opts[:length] || 0~ - Inside source: true *** True Line Result count = opts[:count] || opts[:length] || 0 ** Processing line: ~ w = opts.w || 1~ - Inside source: true *** True Line Result w = opts.w || 1 ** Processing line: ~ (col_count - (count * w)) / 2.0~ - Inside source: true *** True Line Result (col_count - (count * w)) / 2.0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def point opts = {}~ - Inside source: true *** True Line Result def point opts = {} ** Processing line: ~ opts.w = 1~ - Inside source: true *** True Line Result opts.w = 1 ** Processing line: ~ opts.h = 1~ - Inside source: true *** True Line Result opts.h = 1 ** Processing line: ~ opts.row ||= 0~ - Inside source: true *** True Line Result opts.row ||= 0 ** Processing line: ~ opts.col ||= 0~ - Inside source: true *** True Line Result opts.col ||= 0 ** Processing line: ~ r = rect opts~ - Inside source: true *** True Line Result r = rect opts ** Processing line: ~ r.x += r.w * opts.col_anchor if opts.col_anchor~ - Inside source: true *** True Line Result r.x += r.w * opts.col_anchor if opts.col_anchor ** Processing line: ~ r.y += r.h * opts.row_anchor if opts.row_anchor~ - Inside source: true *** True Line Result r.y += r.h * opts.row_anchor if opts.row_anchor ** Processing line: ~ r~ - Inside source: true *** True Line Result r ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rect *all_opts~ - Inside source: true *** True Line Result def rect *all_opts ** Processing line: ~ if all_opts.length == 1~ - Inside source: true *** True Line Result if all_opts.length == 1 ** Processing line: ~ opts = all_opts.first~ - Inside source: true *** True Line Result opts = all_opts.first ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ opts = {}~ - Inside source: true *** True Line Result opts = {} ** Processing line: ~ all_opts.each do |o|~ - Inside source: true *** True Line Result all_opts.each do |o| ** Processing line: ~ opts.merge! o~ - Inside source: true *** True Line Result opts.merge! o ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ opts.row = row_max_index - opts.row_from_bottom if opts.row_from_bottom~ - Inside source: true *** True Line Result opts.row = row_max_index - opts.row_from_bottom if opts.row_from_bottom ** Processing line: ~ opts.col = col_max_index - opts.col_from_right if opts.col_from_right~ - Inside source: true *** True Line Result opts.col = col_max_index - opts.col_from_right if opts.col_from_right ** Processing line: ~ opts = rect_defaults.merge opts~ - Inside source: true *** True Line Result opts = rect_defaults.merge opts ** Processing line: ~ opts.row ||= 0~ - Inside source: true *** True Line Result opts.row ||= 0 ** Processing line: ~ opts.col ||= 0~ - Inside source: true *** True Line Result opts.col ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result = send opts[:rect]~ - Inside source: true *** True Line Result result = send opts[:rect] ** Processing line: ~ if opts[:row] && opts[:col] && opts[:w] && opts[:h]~ - Inside source: true *** True Line Result if opts[:row] && opts[:col] && opts[:w] && opts[:h] ** Processing line: ~ col = rect_col opts[:col], opts[:w]~ - Inside source: true *** True Line Result col = rect_col opts[:col], opts[:w] ** Processing line: ~ row = rect_row opts[:row], opts[:h]~ - Inside source: true *** True Line Result row = rect_row opts[:row], opts[:h] ** Processing line: ~ result = control_rect.merge x: col.x,~ - Inside source: true *** True Line Result result = control_rect.merge x: col.x, ** Processing line: ~ y: row.y,~ - Inside source: true *** True Line Result y: row.y, ** Processing line: ~ w: col.w,~ - Inside source: true *** True Line Result w: col.w, ** Processing line: ~ h: row.h,~ - Inside source: true *** True Line Result h: row.h, ** Processing line: ~ center_x: col.center_x,~ - Inside source: true *** True Line Result center_x: col.center_x, ** Processing line: ~ center_y: row.center_y~ - Inside source: true *** True Line Result center_y: row.center_y ** Processing line: ~ elsif opts[:row] && !opts[:col]~ - Inside source: true *** True Line Result elsif opts[:row] && !opts[:col] ** Processing line: ~ result = rect_row opts[:row], opts[:h]~ - Inside source: true *** True Line Result result = rect_row opts[:row], opts[:h] ** Processing line: ~ elsif !opts[:row] && opts[:col]~ - Inside source: true *** True Line Result elsif !opts[:row] && opts[:col] ** Processing line: ~ result = rect_col opts[:col], opts[:w]~ - Inside source: true *** True Line Result result = rect_col opts[:col], opts[:w] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ raise "LayoutTheory::rect unable to process opts #{opts}."~ - Inside source: true *** True Line Result raise "LayoutTheory::rect unable to process opts #{opts}." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if opts[:max_height] && opts[:max_height] >= 0~ - Inside source: true *** True Line Result if opts[:max_height] && opts[:max_height] >= 0 ** Processing line: ~ if result[:h] > opts[:max_height]~ - Inside source: true *** True Line Result if result[:h] > opts[:max_height] ** Processing line: ~ delta = (result[:h] - opts[:max_height]) * 2~ - Inside source: true *** True Line Result delta = (result[:h] - opts[:max_height]) * 2 ** Processing line: ~ result[:y] += delta~ - Inside source: true *** True Line Result result[:y] += delta ** Processing line: ~ result[:h] = opts[:max_height]~ - Inside source: true *** True Line Result result[:h] = opts[:max_height] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if opts[:max_width] && opts[:max_width] >= 0~ - Inside source: true *** True Line Result if opts[:max_width] && opts[:max_width] >= 0 ** Processing line: ~ if result[:w] > opts[:max_width]~ - Inside source: true *** True Line Result if result[:w] > opts[:max_width] ** Processing line: ~ delta = (result[:w] - opts[:max_width]) * 2~ - Inside source: true *** True Line Result delta = (result[:w] - opts[:max_width]) * 2 ** Processing line: ~ result[:x] += delta~ - Inside source: true *** True Line Result result[:x] += delta ** Processing line: ~ result[:w] = opts[:max_width]~ - Inside source: true *** True Line Result result[:w] = opts[:max_width] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result[:x] += opts[:dx]~ - Inside source: true *** True Line Result result[:x] += opts[:dx] ** Processing line: ~ result[:y] += opts[:dy]~ - Inside source: true *** True Line Result result[:y] += opts[:dy] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if opts[:include_row_gutter]~ - Inside source: true *** True Line Result if opts[:include_row_gutter] ** Processing line: ~ result[:x] -= device.grid_area.gutter~ - Inside source: true *** True Line Result result[:x] -= device.grid_area.gutter ** Processing line: ~ result[:w] += device.grid_area.gutter * 2~ - Inside source: true *** True Line Result result[:w] += device.grid_area.gutter * 2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if opts[:include_col_gutter]~ - Inside source: true *** True Line Result if opts[:include_col_gutter] ** Processing line: ~ result[:y] -= device.grid_area.gutter~ - Inside source: true *** True Line Result result[:y] -= device.grid_area.gutter ** Processing line: ~ result[:h] += device.grid_area.gutter * 2~ - Inside source: true *** True Line Result result[:h] += device.grid_area.gutter * 2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result[:x] += opts[:dx] if opts[:dx]~ - Inside source: true *** True Line Result result[:x] += opts[:dx] if opts[:dx] ** Processing line: ~ result[:x] *= opts[:dx_ratio] if opts[:dx_ratio]~ - Inside source: true *** True Line Result result[:x] *= opts[:dx_ratio] if opts[:dx_ratio] ** Processing line: ~ result[:y] += opts[:dy] if opts[:dy]~ - Inside source: true *** True Line Result result[:y] += opts[:dy] if opts[:dy] ** Processing line: ~ result[:y] *= opts[:dy_ratio] if opts[:dy_ratio]~ - Inside source: true *** True Line Result result[:y] *= opts[:dy_ratio] if opts[:dy_ratio] ** Processing line: ~ result[:w] += opts[:dw] if opts[:dw]~ - Inside source: true *** True Line Result result[:w] += opts[:dw] if opts[:dw] ** Processing line: ~ result[:w] *= opts[:dw_ratio] if opts[:dw_ratio]~ - Inside source: true *** True Line Result result[:w] *= opts[:dw_ratio] if opts[:dw_ratio] ** Processing line: ~ result[:h] += opts[:dh] if opts[:dh]~ - Inside source: true *** True Line Result result[:h] += opts[:dh] if opts[:dh] ** Processing line: ~ result[:h] *= opts[:dh_ratio] if opts[:dh_ratio]~ - Inside source: true *** True Line Result result[:h] *= opts[:dh_ratio] if opts[:dh_ratio] ** Processing line: ~ result.merge! opts[:merge] if opts[:merge]~ - Inside source: true *** True Line Result result.merge! opts[:merge] if opts[:merge] ** Processing line: ~ result[:row] = opts[:row]~ - Inside source: true *** True Line Result result[:row] = opts[:row] ** Processing line: ~ result[:col] = opts[:col]~ - Inside source: true *** True Line Result result[:col] = opts[:col] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result[:h] = result[:h].clamp 0~ - Inside source: true *** True Line Result result[:h] = result[:h].clamp 0 ** Processing line: ~ result[:w] = result[:w].clamp 0~ - Inside source: true *** True Line Result result[:w] = result[:w].clamp 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if $gtk.args.grid.name == :center~ - Inside source: true *** True Line Result if $gtk.args.grid.name == :center ** Processing line: ~ result[:x] -= 640~ - Inside source: true *** True Line Result result[:x] -= 640 ** Processing line: ~ result[:y] -= 360~ - Inside source: true *** True Line Result result[:y] -= 360 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result~ - Inside source: true *** True Line Result result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rect_center reference, target~ - Inside source: true *** True Line Result def rect_center reference, target ** Processing line: ~ delta_x = (reference.w - target.w).fdiv 2~ - Inside source: true *** True Line Result delta_x = (reference.w - target.w).fdiv 2 ** Processing line: ~ delta_y = (reference.h - target.h).fdiv 2~ - Inside source: true *** True Line Result delta_y = (reference.h - target.h).fdiv 2 ** Processing line: ~ [target.x - delta_x, target.y - delta_y, target.w, target.h]~ - Inside source: true *** True Line Result [target.x - delta_x, target.y - delta_y, target.w, target.h] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rect_row index, h~ - Inside source: true *** True Line Result def rect_row index, h ** Processing line: ~ @rect_cache[:row] ||= {}~ - Inside source: true *** True Line Result @rect_cache[:row] ||= {} ** Processing line: ~ @rect_cache[:row][index] ||= {}~ - Inside source: true *** True Line Result @rect_cache[:row][index] ||= {} ** Processing line: ~ return @rect_cache[:row][index][h] if @rect_cache[:row][index][h]~ - Inside source: true *** True Line Result return @rect_cache[:row][index][h] if @rect_cache[:row][index][h] ** Processing line: ~ row_h = (device.grid_area.gutter * (h - 1)) +~ - Inside source: true *** True Line Result row_h = (device.grid_area.gutter * (h - 1)) + ** Processing line: ~ (device.control_area.cell_size * h)~ - Inside source: true *** True Line Result (device.control_area.cell_size * h) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ row_h = row_h.to_i~ - Inside source: true *** True Line Result row_h = row_h.to_i ** Processing line: ~ row_h -= 1 if row_h.odd?~ - Inside source: true *** True Line Result row_h -= 1 if row_h.odd? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ row_y = (control_rect.y) +~ - Inside source: true *** True Line Result row_y = (control_rect.y) + ** Processing line: ~ (device.grid_area.gutter * index) +~ - Inside source: true *** True Line Result (device.grid_area.gutter * index) + ** Processing line: ~ (device.control_area.cell_size * index)~ - Inside source: true *** True Line Result (device.control_area.cell_size * index) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ row_y = row_y.to_i~ - Inside source: true *** True Line Result row_y = row_y.to_i ** Processing line: ~ row_y += 1 if row_y.odd? && (index + 1) > @device.grid_area.row_count.half~ - Inside source: true *** True Line Result row_y += 1 if row_y.odd? && (index + 1) > @device.grid_area.row_count.half ** Processing line: ~ row_y += 1 if row_y.odd? && (index + 1) <= @device.grid_area.row_count.half~ - Inside source: true *** True Line Result row_y += 1 if row_y.odd? && (index + 1) <= @device.grid_area.row_count.half ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ row_y = device.h - row_y - row_h~ - Inside source: true *** True Line Result row_y = device.h - row_y - row_h ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result = control_rect.merge y: row_y, h: row_h, center_y: (row_y + row_h.half)~ - Inside source: true *** True Line Result result = control_rect.merge y: row_y, h: row_h, center_y: (row_y + row_h.half) ** Processing line: ~ @rect_cache[:row][index][h] = result~ - Inside source: true *** True Line Result @rect_cache[:row][index][h] = result ** Processing line: ~ @rect_cache[:row][index][h]~ - Inside source: true *** True Line Result @rect_cache[:row][index][h] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rect_col index, w~ - Inside source: true *** True Line Result def rect_col index, w ** Processing line: ~ @rect_cache[:col] ||= {}~ - Inside source: true *** True Line Result @rect_cache[:col] ||= {} ** Processing line: ~ @rect_cache[:col][index] ||= {}~ - Inside source: true *** True Line Result @rect_cache[:col][index] ||= {} ** Processing line: ~ return @rect_cache[:col][index][w] if @rect_cache[:col][index][w]~ - Inside source: true *** True Line Result return @rect_cache[:col][index][w] if @rect_cache[:col][index][w] ** Processing line: ~ col_x = (control_rect.x) +~ - Inside source: true *** True Line Result col_x = (control_rect.x) + ** Processing line: ~ (device.grid_area.gutter * index) +~ - Inside source: true *** True Line Result (device.grid_area.gutter * index) + ** Processing line: ~ (device.control_area.cell_size * index)~ - Inside source: true *** True Line Result (device.control_area.cell_size * index) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ col_x = col_x.to_i~ - Inside source: true *** True Line Result col_x = col_x.to_i ** Processing line: ~ col_x -= 1 if col_x.odd? && (index + 1) < @device.grid_area.col_count.half~ - Inside source: true *** True Line Result col_x -= 1 if col_x.odd? && (index + 1) < @device.grid_area.col_count.half ** Processing line: ~ col_x += 1 if col_x.odd? && (index + 1) >= @device.grid_area.col_count.half~ - Inside source: true *** True Line Result col_x += 1 if col_x.odd? && (index + 1) >= @device.grid_area.col_count.half ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ col_w = (device.grid_area.gutter * (w - 1)) +~ - Inside source: true *** True Line Result col_w = (device.grid_area.gutter * (w - 1)) + ** Processing line: ~ (device.control_area.cell_size * w)~ - Inside source: true *** True Line Result (device.control_area.cell_size * w) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ col_w = col_w.to_i~ - Inside source: true *** True Line Result col_w = col_w.to_i ** Processing line: ~ col_w -= 1 if col_w.odd?~ - Inside source: true *** True Line Result col_w -= 1 if col_w.odd? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result = control_rect.merge x: col_x, w: col_w, center_x: (col_x + col_w.half)~ - Inside source: true *** True Line Result result = control_rect.merge x: col_x, w: col_w, center_x: (col_x + col_w.half) ** Processing line: ~ @rect_cache[:col][index][w] = result~ - Inside source: true *** True Line Result @rect_cache[:col][index][w] = result ** Processing line: ~ @rect_cache[:col][index][w]~ - Inside source: true *** True Line Result @rect_cache[:col][index][w] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def device~ - Inside source: true *** True Line Result def device ** Processing line: ~ @device~ - Inside source: true *** True Line Result @device ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def init_device w, h~ - Inside source: true *** True Line Result def init_device w, h ** Processing line: ~ @device = Device.new~ - Inside source: true *** True Line Result @device = Device.new ** Processing line: ~ @device.w = w~ - Inside source: true *** True Line Result @device.w = w ** Processing line: ~ @device.h = h~ - Inside source: true *** True Line Result @device.h = h ** Processing line: ~ @device.name = "Device"~ - Inside source: true *** True Line Result @device.name = "Device" ** Processing line: ~ @device.aspect.w = (u_for_16x9 w, h)[:w]~ - Inside source: true *** True Line Result @device.aspect.w = (u_for_16x9 w, h)[:w] ** Processing line: ~ @device.aspect.h = (u_for_16x9 w, h)[:h]~ - Inside source: true *** True Line Result @device.aspect.h = (u_for_16x9 w, h)[:h] ** Processing line: ~ @device.aspect.u = (u_for_16x9 w, h)[:u]~ - Inside source: true *** True Line Result @device.aspect.u = (u_for_16x9 w, h)[:u] ** Processing line: ~ @device.safe_area.w = @device.aspect.u * 16~ - Inside source: true *** True Line Result @device.safe_area.w = @device.aspect.u * 16 ** Processing line: ~ @device.safe_area.h = @device.aspect.u * 9~ - Inside source: true *** True Line Result @device.safe_area.h = @device.aspect.u * 9 ** Processing line: ~ @device.safe_area.margin.left = ((@device.w - @device.safe_area.w).fdiv 2).floor~ - Inside source: true *** True Line Result @device.safe_area.margin.left = ((@device.w - @device.safe_area.w).fdiv 2).floor ** Processing line: ~ @device.safe_area.margin.right = ((@device.w - @device.safe_area.w).fdiv 2).floor~ - Inside source: true *** True Line Result @device.safe_area.margin.right = ((@device.w - @device.safe_area.w).fdiv 2).floor ** Processing line: ~ @device.safe_area.margin.top = ((@device.h - @device.safe_area.h).fdiv 2).floor~ - Inside source: true *** True Line Result @device.safe_area.margin.top = ((@device.h - @device.safe_area.h).fdiv 2).floor ** Processing line: ~ @device.safe_area.margin.bottom = ((@device.h - @device.safe_area.h).fdiv 2).floor~ - Inside source: true *** True Line Result @device.safe_area.margin.bottom = ((@device.h - @device.safe_area.h).fdiv 2).floor ** Processing line: ~ @device.grid_area.outer_gutter = @device.w / 80~ - Inside source: true *** True Line Result @device.grid_area.outer_gutter = @device.w / 80 ** Processing line: ~ @device.grid_area.gutter = @device.w / 160~ - Inside source: true *** True Line Result @device.grid_area.gutter = @device.w / 160 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @device.grid_area.w = @device.safe_area.w - (@device.grid_area.outer_gutter * 2)~ - Inside source: true *** True Line Result @device.grid_area.w = @device.safe_area.w - (@device.grid_area.outer_gutter * 2) ** Processing line: ~ @device.grid_area.h = @device.safe_area.h - (@device.grid_area.outer_gutter * 2)~ - Inside source: true *** True Line Result @device.grid_area.h = @device.safe_area.h - (@device.grid_area.outer_gutter * 2) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @device.grid_area.margin.left = ((@device.w - @device.grid_area.w).fdiv 2).floor~ - Inside source: true *** True Line Result @device.grid_area.margin.left = ((@device.w - @device.grid_area.w).fdiv 2).floor ** Processing line: ~ @device.grid_area.margin.right = ((@device.w - @device.grid_area.w).fdiv 2).floor~ - Inside source: true *** True Line Result @device.grid_area.margin.right = ((@device.w - @device.grid_area.w).fdiv 2).floor ** Processing line: ~ @device.grid_area.margin.top = ((@device.h - @device.grid_area.h).fdiv 2).floor~ - Inside source: true *** True Line Result @device.grid_area.margin.top = ((@device.h - @device.grid_area.h).fdiv 2).floor ** Processing line: ~ @device.grid_area.margin.bottom = ((@device.h - @device.grid_area.h).fdiv 2).floor~ - Inside source: true *** True Line Result @device.grid_area.margin.bottom = ((@device.h - @device.grid_area.h).fdiv 2).floor ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @device.grid_area.col_count = 24~ - Inside source: true *** True Line Result @device.grid_area.col_count = 24 ** Processing line: ~ @device.grid_area.row_count = 12~ - Inside source: true *** True Line Result @device.grid_area.row_count = 12 ** Processing line: ~ @device.grid_area.cell_w = ((@device.aspect.w - (@device.grid_area.outer_gutter * 2)) - ((@device.grid_area.col_count - 1) * @device.grid_area.gutter)).fdiv @device.grid_area.col_count~ - Inside source: true *** True Line Result @device.grid_area.cell_w = ((@device.aspect.w - (@device.grid_area.outer_gutter * 2)) - ((@device.grid_area.col_count - 1) * @device.grid_area.gutter)).fdiv @device.grid_area.col_count ** Processing line: ~ @device.grid_area.cell_h = ((@device.aspect.h - (@device.grid_area.outer_gutter * 2)) - ((@device.grid_area.row_count - 1) * @device.grid_area.gutter)).fdiv @device.grid_area.row_count~ - Inside source: true *** True Line Result @device.grid_area.cell_h = ((@device.aspect.h - (@device.grid_area.outer_gutter * 2)) - ((@device.grid_area.row_count - 1) * @device.grid_area.gutter)).fdiv @device.grid_area.row_count ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @device.control_area.cell_size = @device.grid_area.cell_w~ - Inside source: true *** True Line Result @device.control_area.cell_size = @device.grid_area.cell_w ** Processing line: ~ @device.control_area.cell_size = @device.grid_area.cell_h if @device.grid_area.cell_h < @device.grid_area.cell_w && @device.grid_area.cell_h > 0~ - Inside source: true *** True Line Result @device.control_area.cell_size = @device.grid_area.cell_h if @device.grid_area.cell_h < @device.grid_area.cell_w && @device.grid_area.cell_h > 0 ** Processing line: ~ @device.control_area.cell_size = @device.control_area.cell_size.floor~ - Inside source: true *** True Line Result @device.control_area.cell_size = @device.control_area.cell_size.floor ** Processing line: ~ @device.control_area.w = (@device.control_area.cell_size * @device.grid_area.col_count) + (@device.grid_area.gutter * (@device.grid_area.col_count - 1))~ - Inside source: true *** True Line Result @device.control_area.w = (@device.control_area.cell_size * @device.grid_area.col_count) + (@device.grid_area.gutter * (@device.grid_area.col_count - 1)) ** Processing line: ~ @device.control_area.h = (@device.control_area.cell_size * @device.grid_area.row_count) + (@device.grid_area.gutter * (@device.grid_area.row_count - 1))~ - Inside source: true *** True Line Result @device.control_area.h = (@device.control_area.cell_size * @device.grid_area.row_count) + (@device.grid_area.gutter * (@device.grid_area.row_count - 1)) ** Processing line: ~ @device.control_area.margin.left = (@device.w - @device.control_area.w).fdiv 2~ - Inside source: true *** True Line Result @device.control_area.margin.left = (@device.w - @device.control_area.w).fdiv 2 ** Processing line: ~ @device.control_area.margin.right = (@device.w - @device.control_area.w).fdiv 2~ - Inside source: true *** True Line Result @device.control_area.margin.right = (@device.w - @device.control_area.w).fdiv 2 ** Processing line: ~ @device.control_area.margin.top = (@device.h - @device.control_area.h).fdiv 2~ - Inside source: true *** True Line Result @device.control_area.margin.top = (@device.h - @device.control_area.h).fdiv 2 ** Processing line: ~ @device.control_area.margin.bottom = (@device.h - @device.control_area.h).fdiv 2~ - Inside source: true *** True Line Result @device.control_area.margin.bottom = (@device.h - @device.control_area.h).fdiv 2 ** Processing line: ~ @device~ - Inside source: true *** True Line Result @device ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def debug_primitives opts = {}~ - Inside source: true *** True Line Result def debug_primitives opts = {} ** Processing line: ~ @primitives ||= col_count.map_with_index do |col|~ - Inside source: true *** True Line Result @primitives ||= col_count.map_with_index do |col| ** Processing line: ~ row_count.map_with_index do |row|~ - Inside source: true *** True Line Result row_count.map_with_index do |row| ** Processing line: ~ cell = rect row: row, col: col~ - Inside source: true *** True Line Result cell = rect row: row, col: col ** Processing line: ~ center = Geometry.rect_center_point cell~ - Inside source: true *** True Line Result center = Geometry.rect_center_point cell ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ cell.merge(opts).border,~ - Inside source: true *** True Line Result cell.merge(opts).border, ** Processing line: ~ cell.merge(opts)~ - Inside source: true *** True Line Result cell.merge(opts) ** Processing line: ~ .label!(x: center.x,~ - Inside source: true *** True Line Result .label!(x: center.x, ** Processing line: ~ y: center.y,~ - Inside source: true *** True Line Result y: center.y, ** Processing line: ~ text: "#{row},#{col}",~ - Inside source: true *** True Line Result text: "#{row},#{col}", ** Processing line: ~ size_enum: -3,~ - Inside source: true *** True Line Result size_enum: -3, ** Processing line: ~ vertical_alignment_enum: 1,~ - Inside source: true *** True Line Result vertical_alignment_enum: 1, ** Processing line: ~ alignment_enum: 1)~ - Inside source: true *** True Line Result alignment_enum: 1) ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ @primitives~ - Inside source: true *** True Line Result @primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ device: @device.serialize,~ - Inside source: true *** True Line Result device: @device.serialize, ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def inspect~ - Inside source: true *** True Line Result def inspect ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_s~ - Inside source: true *** True Line Result def to_s ** Processing line: ~ serialize.to_s~ - Inside source: true *** True Line Result serialize.to_s ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset~ - Inside source: true *** True Line Result def reset ** Processing line: ~ @primitives = nil~ - Inside source: true *** True Line Result @primitives = nil ** Processing line: ~ @rect_cache ||= {}~ - Inside source: true *** True Line Result @rect_cache ||= {} ** Processing line: ~ @rect_cache.clear~ - Inside source: true *** True Line Result @rect_cache.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** log.rb~ - Header detected. *** True Line Result *** True Line Result *** log.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/log.rb~ - Inside source: true *** True Line Result # ./dragon/log.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # log.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # log.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ XTERM_COLOR = {~ - Inside source: true *** True Line Result XTERM_COLOR = { ** Processing line: ~ black: "\u001b[30m",~ - Inside source: true *** True Line Result black: "\u001b[30m", ** Processing line: ~ red: "\u001b[31m",~ - Inside source: true *** True Line Result red: "\u001b[31m", ** Processing line: ~ green: "\u001b[32m",~ - Inside source: true *** True Line Result green: "\u001b[32m", ** Processing line: ~ yellow: "\u001b[33m",~ - Inside source: true *** True Line Result yellow: "\u001b[33m", ** Processing line: ~ blue: "\u001b[34m",~ - Inside source: true *** True Line Result blue: "\u001b[34m", ** Processing line: ~ magenta: "\u001b[35m",~ - Inside source: true *** True Line Result magenta: "\u001b[35m", ** Processing line: ~ cyan: "\u001b[36m",~ - Inside source: true *** True Line Result cyan: "\u001b[36m", ** Processing line: ~ white: "\u001b[37m",~ - Inside source: true *** True Line Result white: "\u001b[37m", ** Processing line: ~ bright_black: "\u001b[30;1m",~ - Inside source: true *** True Line Result bright_black: "\u001b[30;1m", ** Processing line: ~ bright_red: "\u001b[31;1m",~ - Inside source: true *** True Line Result bright_red: "\u001b[31;1m", ** Processing line: ~ bright_green: "\u001b[32;1m",~ - Inside source: true *** True Line Result bright_green: "\u001b[32;1m", ** Processing line: ~ bright_yellow: "\u001b[33;1m",~ - Inside source: true *** True Line Result bright_yellow: "\u001b[33;1m", ** Processing line: ~ bright_blue: "\u001b[34;1m",~ - Inside source: true *** True Line Result bright_blue: "\u001b[34;1m", ** Processing line: ~ bright_magenta: "\u001b[35;1m",~ - Inside source: true *** True Line Result bright_magenta: "\u001b[35;1m", ** Processing line: ~ bright_cyan: "\u001b[36;1m",~ - Inside source: true *** True Line Result bright_cyan: "\u001b[36;1m", ** Processing line: ~ bright_white: "\u001b[37;1m",~ - Inside source: true *** True Line Result bright_white: "\u001b[37;1m", ** Processing line: ~ reset: "\u001b[0m",~ - Inside source: true *** True Line Result reset: "\u001b[0m", ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Log~ - Inside source: true *** True Line Result class Log ** Processing line: ~ def self.write_to_log_and_puts *args~ - Inside source: true *** True Line Result def self.write_to_log_and_puts *args ** Processing line: ~ return if $gtk.production~ - Inside source: true *** True Line Result return if $gtk.production ** Processing line: ~ $gtk.append_file_root 'logs/log.txt', args.join("\n") + "\n"~ - Inside source: true *** True Line Result $gtk.append_file_root 'logs/log.txt', args.join("\n") + "\n" ** Processing line: ~ args.each { |obj| $gtk.log obj, self }~ - Inside source: true *** True Line Result args.each { |obj| $gtk.log obj, self } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.write_to_log_and_print *args~ - Inside source: true *** True Line Result def self.write_to_log_and_print *args ** Processing line: ~ return if $gtk.production~ - Inside source: true *** True Line Result return if $gtk.production ** Processing line: ~ $gtk.append_file_root 'logs/log.txt', args.join("\n")~ - Inside source: true *** True Line Result $gtk.append_file_root 'logs/log.txt', args.join("\n") ** Processing line: ~ Object.print(*args)~ - Inside source: true *** True Line Result Object.print(*args) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.puts_important *args~ - Inside source: true *** True Line Result def self.puts_important *args ** Processing line: ~ return if $gtk.production~ - Inside source: true *** True Line Result return if $gtk.production ** Processing line: ~ $gtk.append_file_root 'logs/log.txt', args.join("\n")~ - Inside source: true *** True Line Result $gtk.append_file_root 'logs/log.txt', args.join("\n") ** Processing line: ~ $gtk.notify! "Important notification occurred."~ - Inside source: true *** True Line Result $gtk.notify! "Important notification occurred." ** Processing line: ~ args.each { |obj| $gtk.log obj }~ - Inside source: true *** True Line Result args.each { |obj| $gtk.log obj } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.puts *args~ - Inside source: true *** True Line Result def self.puts *args ** Processing line: ~ message_id, message = args~ - Inside source: true *** True Line Result message_id, message = args ** Processing line: ~ message ||= message_id~ - Inside source: true *** True Line Result message ||= message_id ** Processing line: ~ write_to_log_and_puts message~ - Inside source: true *** True Line Result write_to_log_and_puts message ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.multiline? *args~ - Inside source: true *** True Line Result def self.multiline? *args ** Processing line: ~ return true if args.length > 1~ - Inside source: true *** True Line Result return true if args.length > 1 ** Processing line: ~ return !args[0].to_s.multiline?~ - Inside source: true *** True Line Result return !args[0].to_s.multiline? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.join_lines args~ - Inside source: true *** True Line Result def self.join_lines args ** Processing line: ~ return "" if args.length == 0~ - Inside source: true *** True Line Result return "" if args.length == 0 ** Processing line: ~ return args if args.is_a? String~ - Inside source: true *** True Line Result return args if args.is_a? String ** Processing line: ~ return args[0] if args.length == 1~ - Inside source: true *** True Line Result return args[0] if args.length == 1 ** Processing line: ~ return args.to_s.join("\n")~ - Inside source: true *** True Line Result return args.to_s.join("\n") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.headline name~ - Inside source: true *** True Line Result def self.headline name ** Processing line: ~ @asterisk_count ||= 1~ - Inside source: true *** True Line Result @asterisk_count ||= 1 ** Processing line: ~ @asterisk_count = @asterisk_count.greater(1)~ - Inside source: true *** True Line Result @asterisk_count = @asterisk_count.greater(1) ** Processing line: ~ result_from_yield = join_lines yield~ - Inside source: true *** True Line Result result_from_yield = join_lines yield ** Processing line: ~ result_from_yield = result_from_yield.each_line.map { |l| " #{l}" }.join~ - Inside source: true *** True Line Result result_from_yield = result_from_yield.each_line.map { |l| " #{l}" }.join ** Processing line: ~ r ="#{"*" * @asterisk_count} #{name}\n#{result_from_yield}"~ - Inside source: true *** True Line Result r ="#{"*" * @asterisk_count} #{name}\n#{result_from_yield}" ** Processing line: ~ @asterisk_count -= 1~ - Inside source: true *** True Line Result @asterisk_count -= 1 ** Processing line: ~ @asterisk_count = @asterisk_count.greater(1)~ - Inside source: true *** True Line Result @asterisk_count = @asterisk_count.greater(1) ** Processing line: ~ r~ - Inside source: true *** True Line Result r ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.dynamic_block~ - Inside source: true *** True Line Result def self.dynamic_block ** Processing line: ~ "#+BEGIN:~ - Inside source: true *** True Line Result "#+BEGIN: ** Processing line: ~ #{join_lines yield}~ - Inside source: true *** True Line Result #{join_lines yield} ** Processing line: ~ #+END:~ - Inside source: true *** True Line Result #+END: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ "~ - Inside source: true *** True Line Result " ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.puts_error *args~ - Inside source: true *** True Line Result def self.puts_error *args ** Processing line: ~ args ||= []~ - Inside source: true *** True Line Result args ||= [] ** Processing line: ~ title = args[0]~ - Inside source: true *** True Line Result title = args[0] ** Processing line: ~ additional = args[1..-1] || []~ - Inside source: true *** True Line Result additional = args[1..-1] || [] ** Processing line: ~ additional = "" if additional.length == 0~ - Inside source: true *** True Line Result additional = "" if additional.length == 0 ** Processing line: ~ if !title.multiline? && join_lines(additional).multiline?~ - Inside source: true *** True Line Result if !title.multiline? && join_lines(additional).multiline? ** Processing line: ~ message = headline "ERROR: #{title}" do~ - Inside source: true *** True Line Result message = headline "ERROR: #{title}" do ** Processing line: ~ dynamic_block do~ - Inside source: true *** True Line Result dynamic_block do ** Processing line: ~ additional~ - Inside source: true *** True Line Result additional ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif title.multiline?~ - Inside source: true *** True Line Result elsif title.multiline? ** Processing line: ~ message = headline "ERROR: " do~ - Inside source: true *** True Line Result message = headline "ERROR: " do ** Processing line: ~ dynamic_block do~ - Inside source: true *** True Line Result dynamic_block do ** Processing line: ~ args~ - Inside source: true *** True Line Result args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ message = "* ERROR: #{title} #{additional}".strip~ - Inside source: true *** True Line Result message = "* ERROR: #{title} #{additional}".strip ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ self.puts message~ - Inside source: true *** True Line Result self.puts message ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.puts_info *args~ - Inside source: true *** True Line Result def self.puts_info *args ** Processing line: ~ args ||= []~ - Inside source: true *** True Line Result args ||= [] ** Processing line: ~ title = args[0]~ - Inside source: true *** True Line Result title = args[0] ** Processing line: ~ additional = args[1..-1] || []~ - Inside source: true *** True Line Result additional = args[1..-1] || [] ** Processing line: ~ additional = "" if additional.length == 0~ - Inside source: true *** True Line Result additional = "" if additional.length == 0 ** Processing line: ~ if !title.multiline? && join_lines(additional).multiline?~ - Inside source: true *** True Line Result if !title.multiline? && join_lines(additional).multiline? ** Processing line: ~ message = headline "INFO: #{title}" do~ - Inside source: true *** True Line Result message = headline "INFO: #{title}" do ** Processing line: ~ dynamic_block do~ - Inside source: true *** True Line Result dynamic_block do ** Processing line: ~ additional~ - Inside source: true *** True Line Result additional ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ elsif title.multiline?~ - Inside source: true *** True Line Result elsif title.multiline? ** Processing line: ~ message = headline "INFO: " do~ - Inside source: true *** True Line Result message = headline "INFO: " do ** Processing line: ~ dynamic_block do~ - Inside source: true *** True Line Result dynamic_block do ** Processing line: ~ args~ - Inside source: true *** True Line Result args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ message = "* INFO: #{title} #{additional}".strip~ - Inside source: true *** True Line Result message = "* INFO: #{title} #{additional}".strip ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ self.puts message~ - Inside source: true *** True Line Result self.puts message ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.reset~ - Inside source: true *** True Line Result def self.reset ** Processing line: ~ @once = {}~ - Inside source: true *** True Line Result @once = {} ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.puts_once *ids, message~ - Inside source: true *** True Line Result def self.puts_once *ids, message ** Processing line: ~ id = "#{ids}"~ - Inside source: true *** True Line Result id = "#{ids}" ** Processing line: ~ @once ||= {}~ - Inside source: true *** True Line Result @once ||= {} ** Processing line: ~ return if @once[id]~ - Inside source: true *** True Line Result return if @once[id] ** Processing line: ~ @once[id] = id~ - Inside source: true *** True Line Result @once[id] = id ** Processing line: ~ if !$gtk.cli_arguments[:replay] && !$gtk.cli_arguments[:record]~ - Inside source: true *** True Line Result if !$gtk.cli_arguments[:replay] && !$gtk.cli_arguments[:record] ** Processing line: ~ $gtk.notify!("Open the DragonRuby Console by pressing [`] [~] [²] [^] [º] or [§]. [Message ID: #{id}].")~ - Inside source: true *** True Line Result $gtk.notify!("Open the DragonRuby Console by pressing [`] [~] [²] [^] [º] or [§]. [Message ID: #{id}].") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ write_to_log_and_puts ""~ - Inside source: true *** True Line Result write_to_log_and_puts "" ** Processing line: ~ write_to_log_and_puts "#{message.strip}"~ - Inside source: true *** True Line Result write_to_log_and_puts "#{message.strip}" ** Processing line: ~ write_to_log_and_puts ""~ - Inside source: true *** True Line Result write_to_log_and_puts "" ** Processing line: ~ write_to_log_and_puts "[Message ID: #{id}]"~ - Inside source: true *** True Line Result write_to_log_and_puts "[Message ID: #{id}]" ** Processing line: ~ write_to_log_and_puts ""~ - Inside source: true *** True Line Result write_to_log_and_puts "" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.puts_once_info *ids, message~ - Inside source: true *** True Line Result def self.puts_once_info *ids, message ** Processing line: ~ id = "#{ids}"~ - Inside source: true *** True Line Result id = "#{ids}" ** Processing line: ~ @once ||= {}~ - Inside source: true *** True Line Result @once ||= {} ** Processing line: ~ return if @once[id]~ - Inside source: true *** True Line Result return if @once[id] ** Processing line: ~ @once[id] = id~ - Inside source: true *** True Line Result @once[id] = id ** Processing line: ~ log_info message~ - Inside source: true *** True Line Result log_info message ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.print *args~ - Inside source: true *** True Line Result def self.print *args ** Processing line: ~ write_to_log_and_print(*args)~ - Inside source: true *** True Line Result write_to_log_and_print(*args) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Object~ - Inside source: true *** True Line Result class Object ** Processing line: ~ def log_print *args~ - Inside source: true *** True Line Result def log_print *args ** Processing line: ~ GTK::Log.print(*args)~ - Inside source: true *** True Line Result GTK::Log.print(*args) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_important *args~ - Inside source: true *** True Line Result def log_important *args ** Processing line: ~ GTK::Log.puts_important(*args)~ - Inside source: true *** True Line Result GTK::Log.puts_important(*args) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log *args~ - Inside source: true *** True Line Result def log *args ** Processing line: ~ GTK::Log.puts(*args)~ - Inside source: true *** True Line Result GTK::Log.puts(*args) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_with_color xterm_escape_code, *args~ - Inside source: true *** True Line Result def log_with_color xterm_escape_code, *args ** Processing line: ~ log_print xterm_escape_code~ - Inside source: true *** True Line Result log_print xterm_escape_code ** Processing line: ~ log(*args)~ - Inside source: true *** True Line Result log(*args) ** Processing line: ~ ensure~ - Inside source: true *** True Line Result ensure ** Processing line: ~ log_reset_color~ - Inside source: true *** True Line Result log_reset_color ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_reset_color~ - Inside source: true *** True Line Result def log_reset_color ** Processing line: ~ log_print XTERM_COLOR[:reset]~ - Inside source: true *** True Line Result log_print XTERM_COLOR[:reset] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_black *args~ - Inside source: true *** True Line Result def log_black *args ** Processing line: ~ log_with_color XTERM_COLOR[:black], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:black], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_red *args~ - Inside source: true *** True Line Result def log_red *args ** Processing line: ~ log_with_color XTERM_COLOR[:red], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:red], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_green *args~ - Inside source: true *** True Line Result def log_green *args ** Processing line: ~ log_with_color XTERM_COLOR[:green], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:green], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_yellow *args~ - Inside source: true *** True Line Result def log_yellow *args ** Processing line: ~ log_with_color XTERM_COLOR[:yellow], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:yellow], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_blue *args~ - Inside source: true *** True Line Result def log_blue *args ** Processing line: ~ log_with_color XTERM_COLOR[:blue], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:blue], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_magenta *args~ - Inside source: true *** True Line Result def log_magenta *args ** Processing line: ~ log_with_color XTERM_COLOR[:magenta], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:magenta], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_cyan *args~ - Inside source: true *** True Line Result def log_cyan *args ** Processing line: ~ log_with_color XTERM_COLOR[:cyan], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:cyan], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_white *args~ - Inside source: true *** True Line Result def log_white *args ** Processing line: ~ log_with_color XTERM_COLOR[:white], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:white], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_bright_black *args~ - Inside source: true *** True Line Result def log_bright_black *args ** Processing line: ~ log_with_color XTERM_COLOR[:bright_black], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:bright_black], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_bright_red *args~ - Inside source: true *** True Line Result def log_bright_red *args ** Processing line: ~ log_with_color XTERM_COLOR[:bright_red], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:bright_red], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_bright_green *args~ - Inside source: true *** True Line Result def log_bright_green *args ** Processing line: ~ log_with_color XTERM_COLOR[:bright_green], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:bright_green], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_bright_yellow *args~ - Inside source: true *** True Line Result def log_bright_yellow *args ** Processing line: ~ log_with_color XTERM_COLOR[:bright_yellow], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:bright_yellow], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_bright_blue *args~ - Inside source: true *** True Line Result def log_bright_blue *args ** Processing line: ~ log_with_color XTERM_COLOR[:bright_blue], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:bright_blue], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_bright_magenta *args~ - Inside source: true *** True Line Result def log_bright_magenta *args ** Processing line: ~ log_with_color XTERM_COLOR[:bright_magenta], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:bright_magenta], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_bright_cyan *args~ - Inside source: true *** True Line Result def log_bright_cyan *args ** Processing line: ~ log_with_color XTERM_COLOR[:bright_cyan], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:bright_cyan], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_bright_white *args~ - Inside source: true *** True Line Result def log_bright_white *args ** Processing line: ~ log_with_color XTERM_COLOR[:bright_white], *args~ - Inside source: true *** True Line Result log_with_color XTERM_COLOR[:bright_white], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_error *args~ - Inside source: true *** True Line Result def log_error *args ** Processing line: ~ GTK::Log.puts_error(*args)~ - Inside source: true *** True Line Result GTK::Log.puts_error(*args) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_info *args~ - Inside source: true *** True Line Result def log_info *args ** Processing line: ~ GTK::Log.puts_info(*args)~ - Inside source: true *** True Line Result GTK::Log.puts_info(*args) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_once *ids, message~ - Inside source: true *** True Line Result def log_once *ids, message ** Processing line: ~ GTK::Log.puts_once(*ids, message)~ - Inside source: true *** True Line Result GTK::Log.puts_once(*ids, message) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_once_info *ids, message~ - Inside source: true *** True Line Result def log_once_info *ids, message ** Processing line: ~ GTK::Log.puts_once_info(*ids, message)~ - Inside source: true *** True Line Result GTK::Log.puts_once_info(*ids, message) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** metadata.rb~ - Header detected. *** True Line Result *** True Line Result *** metadata.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/metadata.rb~ - Inside source: true *** True Line Result # ./dragon/metadata.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2021 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2021 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # metadata.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # metadata.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright: Michał Dudziński~ - Inside source: true *** True Line Result # Contributors outside of DragonRuby who also hold Copyright: Michał Dudziński ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module Metadata~ - Inside source: true *** True Line Result module Metadata ** Processing line: ~ def metadata_file_path~ - Inside source: true *** True Line Result def metadata_file_path ** Processing line: ~ "metadata/game_metadata.txt"~ - Inside source: true *** True Line Result "metadata/game_metadata.txt" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_metadata~ - Inside source: true *** True Line Result def get_metadata ** Processing line: ~ metadata = $gtk.read_file metadata_file_path~ - Inside source: true *** True Line Result metadata = $gtk.read_file metadata_file_path ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !metadata~ - Inside source: true *** True Line Result if !metadata ** Processing line: ~ write_blank_metadata~ - Inside source: true *** True Line Result write_blank_metadata ** Processing line: ~ metadata = $gtk.read_file metadata_file_path~ - Inside source: true *** True Line Result metadata = $gtk.read_file metadata_file_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ dev_id, dev_title, game_id, game_title, version, icon = *metadata.each_line.to_a~ - Inside source: true *** True Line Result dev_id, dev_title, game_id, game_title, version, icon = *metadata.each_line.to_a ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ dev_id: dev_id.strip,~ - Inside source: true *** True Line Result dev_id: dev_id.strip, ** Processing line: ~ dev_title: dev_title.strip,~ - Inside source: true *** True Line Result dev_title: dev_title.strip, ** Processing line: ~ game_id: game_id.strip,~ - Inside source: true *** True Line Result game_id: game_id.strip, ** Processing line: ~ game_title: game_title.strip,~ - Inside source: true *** True Line Result game_title: game_title.strip, ** Processing line: ~ version: version.strip,~ - Inside source: true *** True Line Result version: version.strip, ** Processing line: ~ icon: icon.strip~ - Inside source: true *** True Line Result icon: icon.strip ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def write_blank_metadata~ - Inside source: true *** True Line Result def write_blank_metadata ** Processing line: ~ $gtk.write_file metadata_file_path, <<-S.strip~ - Inside source: true *** True Line Result $gtk.write_file metadata_file_path, <<-S.strip ** Processing line: ~ #devid=myname~ - Inside source: true *** True Line Result #devid=myname ** Processing line: ~ #devtitle=My Name~ - Inside source: true *** True Line Result #devtitle=My Name ** Processing line: ~ #gameid=mygame~ - Inside source: true *** True Line Result #gameid=mygame ** Processing line: ~ #gametitle=My Game~ - Inside source: true *** True Line Result #gametitle=My Game ** Processing line: ~ #version=0.1~ - Inside source: true *** True Line Result #version=0.1 ** Processing line: ~ #icon=metadata/icon.png~ - Inside source: true *** True Line Result #icon=metadata/icon.png ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** numeric.rb~ - Header detected. *** True Line Result *** True Line Result *** numeric.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/numeric.rb~ - Inside source: true *** True Line Result # ./dragon/numeric.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # numeric.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # numeric.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Numeric~ - Inside source: true *** True Line Result class Numeric ** Processing line: ~ include ValueType~ - Inside source: true *** True Line Result include ValueType ** Processing line: ~ include NumericDeprecated~ - Inside source: true *** True Line Result include NumericDeprecated ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ alias_method :gt, :>~ - Inside source: true *** True Line Result alias_method :gt, :> ** Processing line: ~ alias_method :gte, :>=~ - Inside source: true *** True Line Result alias_method :gte, :>= ** Processing line: ~ alias_method :lt, :<~ - Inside source: true *** True Line Result alias_method :lt, :< ** Processing line: ~ alias_method :lte, :<=~ - Inside source: true *** True Line Result alias_method :lte, :<= ** Processing line: ~ alias_method :__original_eq_eq__, :== unless Numeric.instance_methods.include? :__original_eq_eq__~ - Inside source: true *** True Line Result alias_method :__original_eq_eq__, :== unless Numeric.instance_methods.include? :__original_eq_eq__ ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_layout_row opts = {}~ - Inside source: true *** True Line Result def to_layout_row opts = {} ** Processing line: ~ $layout.rect(row: self,~ - Inside source: true *** True Line Result $layout.rect(row: self, ** Processing line: ~ col: opts.col || 0,~ - Inside source: true *** True Line Result col: opts.col || 0, ** Processing line: ~ w: opts.w || 0,~ - Inside source: true *** True Line Result w: opts.w || 0, ** Processing line: ~ h: opts.h || 0).y~ - Inside source: true *** True Line Result h: opts.h || 0).y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_layout_col opts = {}~ - Inside source: true *** True Line Result def to_layout_col opts = {} ** Processing line: ~ $layout.rect(row: 0,~ - Inside source: true *** True Line Result $layout.rect(row: 0, ** Processing line: ~ col: self,~ - Inside source: true *** True Line Result col: self, ** Processing line: ~ w: opts.w || 0,~ - Inside source: true *** True Line Result w: opts.w || 0, ** Processing line: ~ h: opts.h || 0).x~ - Inside source: true *** True Line Result h: opts.h || 0).x ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_layout_w~ - Inside source: true *** True Line Result def to_layout_w ** Processing line: ~ $layout.rect(row: 0, col: 0, w: self, h: 1).w~ - Inside source: true *** True Line Result $layout.rect(row: 0, col: 0, w: self, h: 1).w ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_layout_h~ - Inside source: true *** True Line Result def to_layout_h ** Processing line: ~ $layout.rect(row: 0, col: 0, w: 1, h: self).h~ - Inside source: true *** True Line Result $layout.rect(row: 0, col: 0, w: 1, h: self).h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_layout_row_from_bottom opts = {}~ - Inside source: true *** True Line Result def to_layout_row_from_bottom opts = {} ** Processing line: ~ ($layout.row_max_index - self).to_layout_row opts~ - Inside source: true *** True Line Result ($layout.row_max_index - self).to_layout_row opts ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_layout_col_from_right opts = {}~ - Inside source: true *** True Line Result def to_layout_col_from_right opts = {} ** Processing line: ~ ($layout.col_max_index - self).to_layout_col opts~ - Inside source: true *** True Line Result ($layout.col_max_index - self).to_layout_col opts ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Converts a numeric value representing seconds into frames.~ - Inside source: true *** True Line Result # Converts a numeric value representing seconds into frames. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def seconds~ - Inside source: true *** True Line Result def seconds ** Processing line: ~ self * 60~ - Inside source: true *** True Line Result self * 60 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Divides the number by `2.0` and returns a `float`.~ - Inside source: true *** True Line Result # Divides the number by `2.0` and returns a `float`. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def half~ - Inside source: true *** True Line Result def half ** Processing line: ~ self / 2.0~ - Inside source: true *** True Line Result self / 2.0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def third~ - Inside source: true *** True Line Result def third ** Processing line: ~ self / 3.0~ - Inside source: true *** True Line Result self / 3.0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def quarter~ - Inside source: true *** True Line Result def quarter ** Processing line: ~ self / 4.0~ - Inside source: true *** True Line Result self / 4.0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_byte~ - Inside source: true *** True Line Result def to_byte ** Processing line: ~ clamp(0, 255).to_i~ - Inside source: true *** True Line Result clamp(0, 255).to_i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def clamp *opts~ - Inside source: true *** True Line Result def clamp *opts ** Processing line: ~ min = (opts.at 0)~ - Inside source: true *** True Line Result min = (opts.at 0) ** Processing line: ~ max = (opts.at 1)~ - Inside source: true *** True Line Result max = (opts.at 1) ** Processing line: ~ return min if min && self < min~ - Inside source: true *** True Line Result return min if min && self < min ** Processing line: ~ return max if max && self > max~ - Inside source: true *** True Line Result return max if max && self > max ** Processing line: ~ return self~ - Inside source: true *** True Line Result return self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def clamp_wrap min, max~ - Inside source: true *** True Line Result def clamp_wrap min, max ** Processing line: ~ max, min = min, max if min > max~ - Inside source: true *** True Line Result max, min = min, max if min > max ** Processing line: ~ return self if self >= min && self <= max~ - Inside source: true *** True Line Result return self if self >= min && self <= max ** Processing line: ~ return min if min == max~ - Inside source: true *** True Line Result return min if min == max ** Processing line: ~ if self < min~ - Inside source: true *** True Line Result if self < min ** Processing line: ~ overflow = min - self~ - Inside source: true *** True Line Result overflow = min - self ** Processing line: ~ return (max - overflow).clamp_wrap min, max~ - Inside source: true *** True Line Result return (max - overflow).clamp_wrap min, max ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if self > max~ - Inside source: true *** True Line Result if self > max ** Processing line: ~ overflow = self - max~ - Inside source: true *** True Line Result overflow = self - max ** Processing line: ~ return (min + overflow).clamp_wrap min, max~ - Inside source: true *** True Line Result return (min + overflow).clamp_wrap min, max ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return self~ - Inside source: true *** True Line Result return self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def elapsed_time tick_count_override = nil~ - Inside source: true *** True Line Result def elapsed_time tick_count_override = nil ** Processing line: ~ (tick_count_override || Kernel.tick_count) - self~ - Inside source: true *** True Line Result (tick_count_override || Kernel.tick_count) - self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def elapsed_time_percent duration~ - Inside source: true *** True Line Result def elapsed_time_percent duration ** Processing line: ~ elapsed_time.percentage_of duration~ - Inside source: true *** True Line Result elapsed_time.percentage_of duration ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def new?~ - Inside source: true *** True Line Result def new? ** Processing line: ~ elapsed_time == 0~ - Inside source: true *** True Line Result elapsed_time == 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns `true` if the numeric value has passed a duration/offset number.~ - Inside source: true *** True Line Result # Returns `true` if the numeric value has passed a duration/offset number. ** Processing line: ~ # `Kernel.tick_count` is used to determine if a number represents an elapsed~ - Inside source: true *** True Line Result # `Kernel.tick_count` is used to determine if a number represents an elapsed ** Processing line: ~ # moment in time.~ - Inside source: true *** True Line Result # moment in time. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def elapsed? offset = 0, tick_count_override = Kernel.tick_count~ - Inside source: true *** True Line Result def elapsed? offset = 0, tick_count_override = Kernel.tick_count ** Processing line: ~ (self + offset) < tick_count_override~ - Inside source: true *** True Line Result (self + offset) < tick_count_override ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def frame_index *opts~ - Inside source: true *** True Line Result def frame_index *opts ** Processing line: ~ frame_count_or_hash, hold_for, repeat, tick_count_override = opts~ - Inside source: true *** True Line Result frame_count_or_hash, hold_for, repeat, tick_count_override = opts ** Processing line: ~ if frame_count_or_hash.is_a? Hash~ - Inside source: true *** True Line Result if frame_count_or_hash.is_a? Hash ** Processing line: ~ frame_count = frame_count_or_hash[:count]~ - Inside source: true *** True Line Result frame_count = frame_count_or_hash[:count] ** Processing line: ~ hold_for = frame_count_or_hash[:hold_for]~ - Inside source: true *** True Line Result hold_for = frame_count_or_hash[:hold_for] ** Processing line: ~ repeat = frame_count_or_hash[:repeat]~ - Inside source: true *** True Line Result repeat = frame_count_or_hash[:repeat] ** Processing line: ~ tick_count_override = frame_count_or_hash[:tick_count_override]~ - Inside source: true *** True Line Result tick_count_override = frame_count_or_hash[:tick_count_override] ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ frame_count = frame_count_or_hash~ - Inside source: true *** True Line Result frame_count = frame_count_or_hash ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ tick_count_override ||= Kernel.tick_count~ - Inside source: true *** True Line Result tick_count_override ||= Kernel.tick_count ** Processing line: ~ animation_frame_count = frame_count~ - Inside source: true *** True Line Result animation_frame_count = frame_count ** Processing line: ~ animation_frame_hold_time = hold_for~ - Inside source: true *** True Line Result animation_frame_hold_time = hold_for ** Processing line: ~ animation_length = animation_frame_hold_time * animation_frame_count~ - Inside source: true *** True Line Result animation_length = animation_frame_hold_time * animation_frame_count ** Processing line: ~ return nil if Kernel.tick_count < self~ - Inside source: true *** True Line Result return nil if Kernel.tick_count < self ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !repeat && (self + animation_length) < (tick_count_override - 1)~ - Inside source: true *** True Line Result if !repeat && (self + animation_length) < (tick_count_override - 1) ** Processing line: ~ return nil~ - Inside source: true *** True Line Result return nil ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return self.elapsed_time.-(1).idiv(animation_frame_hold_time) % animation_frame_count~ - Inside source: true *** True Line Result return self.elapsed_time.-(1).idiv(animation_frame_hold_time) % animation_frame_count ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ #{opts}~ - Inside source: true *** True Line Result #{opts} ** Processing line: ~ #{e}~ - Inside source: true *** True Line Result #{e} ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def zero?~ - Inside source: true *** True Line Result def zero? ** Processing line: ~ self == 0~ - Inside source: true *** True Line Result self == 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def zero~ - Inside source: true *** True Line Result def zero ** Processing line: ~ 0~ - Inside source: true *** True Line Result 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def one~ - Inside source: true *** True Line Result def one ** Processing line: ~ 1~ - Inside source: true *** True Line Result 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def two~ - Inside source: true *** True Line Result def two ** Processing line: ~ 2~ - Inside source: true *** True Line Result 2 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def five~ - Inside source: true *** True Line Result def five ** Processing line: ~ 5~ - Inside source: true *** True Line Result 5 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def ten~ - Inside source: true *** True Line Result def ten ** Processing line: ~ 10~ - Inside source: true *** True Line Result 10 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ alias_method :gt, :>~ - Inside source: true *** True Line Result alias_method :gt, :> ** Processing line: ~ alias_method :above?, :>~ - Inside source: true *** True Line Result alias_method :above?, :> ** Processing line: ~ alias_method :right_of?, :>~ - Inside source: true *** True Line Result alias_method :right_of?, :> ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ alias_method :lt, :<~ - Inside source: true *** True Line Result alias_method :lt, :< ** Processing line: ~ alias_method :below?, :<~ - Inside source: true *** True Line Result alias_method :below?, :< ** Processing line: ~ alias_method :left_of?, :<~ - Inside source: true *** True Line Result alias_method :left_of?, :< ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def shift_right i~ - Inside source: true *** True Line Result def shift_right i ** Processing line: ~ self + i~ - Inside source: true *** True Line Result self + i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def shift_left i~ - Inside source: true *** True Line Result def shift_left i ** Processing line: ~ shift_right(i * -1)~ - Inside source: true *** True Line Result shift_right(i * -1) ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise_immediately e, :shift_left, i~ - Inside source: true *** True Line Result raise_immediately e, :shift_left, i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def shift_up i~ - Inside source: true *** True Line Result def shift_up i ** Processing line: ~ self + i~ - Inside source: true *** True Line Result self + i ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise_immediately e, :shift_up, i~ - Inside source: true *** True Line Result raise_immediately e, :shift_up, i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def shift_down i~ - Inside source: true *** True Line Result def shift_down i ** Processing line: ~ shift_up(i * -1)~ - Inside source: true *** True Line Result shift_up(i * -1) ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise_immediately e, :shift_down, i~ - Inside source: true *** True Line Result raise_immediately e, :shift_down, i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # This provides a way for a numeric value to be randomized based on a combination~ - Inside source: true *** True Line Result # This provides a way for a numeric value to be randomized based on a combination ** Processing line: ~ # of two options: `:sign` and `:ratio`.~ - Inside source: true *** True Line Result # of two options: `:sign` and `:ratio`. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def randomize *definitions~ - Inside source: true *** True Line Result def randomize *definitions ** Processing line: ~ result = self~ - Inside source: true *** True Line Result result = self ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if definitions.include?(:sign)~ - Inside source: true *** True Line Result if definitions.include?(:sign) ** Processing line: ~ result = rand_sign~ - Inside source: true *** True Line Result result = rand_sign ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if definitions.include?(:ratio)~ - Inside source: true *** True Line Result if definitions.include?(:ratio) ** Processing line: ~ result = rand * result~ - Inside source: true *** True Line Result result = rand * result ** Processing line: ~ elsif definitions.include?(:int)~ - Inside source: true *** True Line Result elsif definitions.include?(:int) ** Processing line: ~ result = (rand result)~ - Inside source: true *** True Line Result result = (rand result) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result~ - Inside source: true *** True Line Result result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rand_sign~ - Inside source: true *** True Line Result def rand_sign ** Processing line: ~ return self * -1 if rand > 0.5~ - Inside source: true *** True Line Result return self * -1 if rand > 0.5 ** Processing line: ~ self~ - Inside source: true *** True Line Result self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rand_ratio~ - Inside source: true *** True Line Result def rand_ratio ** Processing line: ~ self * rand~ - Inside source: true *** True Line Result self * rand ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def remainder_of_divide n~ - Inside source: true *** True Line Result def remainder_of_divide n ** Processing line: ~ mod n~ - Inside source: true *** True Line Result mod n ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easing function progress/percentage for a specific point in time.~ - Inside source: true *** True Line Result # Easing function progress/percentage for a specific point in time. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def ease_extended tick_count_override, duration, default_before, default_after, *definitions~ - Inside source: true *** True Line Result def ease_extended tick_count_override, duration, default_before, default_after, *definitions ** Processing line: ~ GTK::Easing.ease_extended self,~ - Inside source: true *** True Line Result GTK::Easing.ease_extended self, ** Processing line: ~ tick_count_override,~ - Inside source: true *** True Line Result tick_count_override, ** Processing line: ~ self + duration,~ - Inside source: true *** True Line Result self + duration, ** Processing line: ~ default_before,~ - Inside source: true *** True Line Result default_before, ** Processing line: ~ default_after,~ - Inside source: true *** True Line Result default_after, ** Processing line: ~ *definitions~ - Inside source: true *** True Line Result *definitions ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easing function progress/percentage for a specific point in time.~ - Inside source: true *** True Line Result # Easing function progress/percentage for a specific point in time. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def global_ease duration, *definitions~ - Inside source: true *** True Line Result def global_ease duration, *definitions ** Processing line: ~ ease_extended Kernel.global_tick_count,~ - Inside source: true *** True Line Result ease_extended Kernel.global_tick_count, ** Processing line: ~ duration,~ - Inside source: true *** True Line Result duration, ** Processing line: ~ GTK::Easing.initial_value(*definitions),~ - Inside source: true *** True Line Result GTK::Easing.initial_value(*definitions), ** Processing line: ~ GTK::Easing.final_value(*definitions),~ - Inside source: true *** True Line Result GTK::Easing.final_value(*definitions), ** Processing line: ~ *definitions~ - Inside source: true *** True Line Result *definitions ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easing function progress/percentage for a specific point in time.~ - Inside source: true *** True Line Result # Easing function progress/percentage for a specific point in time. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def ease duration, *definitions~ - Inside source: true *** True Line Result def ease duration, *definitions ** Processing line: ~ ease_extended Kernel.tick_count,~ - Inside source: true *** True Line Result ease_extended Kernel.tick_count, ** Processing line: ~ duration,~ - Inside source: true *** True Line Result duration, ** Processing line: ~ GTK::Easing.initial_value(*definitions),~ - Inside source: true *** True Line Result GTK::Easing.initial_value(*definitions), ** Processing line: ~ GTK::Easing.final_value(*definitions),~ - Inside source: true *** True Line Result GTK::Easing.final_value(*definitions), ** Processing line: ~ *definitions~ - Inside source: true *** True Line Result *definitions ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easing function progress/percentage for a specific point in time.~ - Inside source: true *** True Line Result # Easing function progress/percentage for a specific point in time. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def ease_spline_extended tick_count_override, duration, spline~ - Inside source: true *** True Line Result def ease_spline_extended tick_count_override, duration, spline ** Processing line: ~ GTK::Easing.ease_spline_extended self,~ - Inside source: true *** True Line Result GTK::Easing.ease_spline_extended self, ** Processing line: ~ tick_count_override,~ - Inside source: true *** True Line Result tick_count_override, ** Processing line: ~ self + duration,~ - Inside source: true *** True Line Result self + duration, ** Processing line: ~ spline~ - Inside source: true *** True Line Result spline ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easing function progress/percentage for a specific point in time.~ - Inside source: true *** True Line Result # Easing function progress/percentage for a specific point in time. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def global_ease_spline duration, spline~ - Inside source: true *** True Line Result def global_ease_spline duration, spline ** Processing line: ~ ease_spline_extended Kernel.global_tick_count,~ - Inside source: true *** True Line Result ease_spline_extended Kernel.global_tick_count, ** Processing line: ~ duration,~ - Inside source: true *** True Line Result duration, ** Processing line: ~ spline~ - Inside source: true *** True Line Result spline ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Easing function progress/percentage for a specific point in time.~ - Inside source: true *** True Line Result # Easing function progress/percentage for a specific point in time. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def ease_spline duration, spline~ - Inside source: true *** True Line Result def ease_spline duration, spline ** Processing line: ~ ease_spline_extended Kernel.tick_count,~ - Inside source: true *** True Line Result ease_spline_extended Kernel.tick_count, ** Processing line: ~ duration,~ - Inside source: true *** True Line Result duration, ** Processing line: ~ spline~ - Inside source: true *** True Line Result spline ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Converts a number representing an angle in degrees to radians.~ - Inside source: true *** True Line Result # Converts a number representing an angle in degrees to radians. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def to_radians~ - Inside source: true *** True Line Result def to_radians ** Processing line: ~ self * Math::PI.fdiv(180)~ - Inside source: true *** True Line Result self * Math::PI.fdiv(180) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Converts a number representing an angle in radians to degrees.~ - Inside source: true *** True Line Result # Converts a number representing an angle in radians to degrees. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def to_degrees~ - Inside source: true *** True Line Result def to_degrees ** Processing line: ~ self / Math::PI.fdiv(180)~ - Inside source: true *** True Line Result self / Math::PI.fdiv(180) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Given `self`, a rectangle primitive is returned.~ - Inside source: true *** True Line Result # Given `self`, a rectangle primitive is returned. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @example~ - Inside source: true *** True Line Result # @example ** Processing line: ~ # 5.to_square 100, 300 # returns [100, 300, 5, 5]~ - Inside source: true *** True Line Result # 5.to_square 100, 300 # returns [100, 300, 5, 5] ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def to_square x, y, anchor_x = 0.5, anchor_y = nil~ - Inside source: true *** True Line Result def to_square x, y, anchor_x = 0.5, anchor_y = nil ** Processing line: ~ GTK::Geometry.to_square(self, x, y, anchor_x, anchor_y)~ - Inside source: true *** True Line Result GTK::Geometry.to_square(self, x, y, anchor_x, anchor_y) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a normal vector for a number that represents an angle in degrees.~ - Inside source: true *** True Line Result # Returns a normal vector for a number that represents an angle in degrees. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def vector max_value = 1~ - Inside source: true *** True Line Result def vector max_value = 1 ** Processing line: ~ [vector_x(max_value), vector_y(max_value)]~ - Inside source: true *** True Line Result [vector_x(max_value), vector_y(max_value)] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the y component of a normal vector for a number that represents an angle in degrees.~ - Inside source: true *** True Line Result # Returns the y component of a normal vector for a number that represents an angle in degrees. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def vector_y max_value = 1~ - Inside source: true *** True Line Result def vector_y max_value = 1 ** Processing line: ~ max_value * Math.sin(self.to_radians)~ - Inside source: true *** True Line Result max_value * Math.sin(self.to_radians) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the x component of a normal vector for a number that represents an angle in degrees.~ - Inside source: true *** True Line Result # Returns the x component of a normal vector for a number that represents an angle in degrees. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def vector_x max_value = 1~ - Inside source: true *** True Line Result def vector_x max_value = 1 ** Processing line: ~ max_value * Math.cos(self.to_radians)~ - Inside source: true *** True Line Result max_value * Math.cos(self.to_radians) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def x_vector max_value = 1~ - Inside source: true *** True Line Result def x_vector max_value = 1 ** Processing line: ~ vector_x max_value~ - Inside source: true *** True Line Result vector_x max_value ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def y_vector max_value = 1~ - Inside source: true *** True Line Result def y_vector max_value = 1 ** Processing line: ~ vector_y max_value~ - Inside source: true *** True Line Result vector_y max_value ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mod n~ - Inside source: true *** True Line Result def mod n ** Processing line: ~ self % n~ - Inside source: true *** True Line Result self % n ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mod_zero? *ns~ - Inside source: true *** True Line Result def mod_zero? *ns ** Processing line: ~ ns.any? { |n| mod(n) == 0 }~ - Inside source: true *** True Line Result ns.any? { |n| mod(n) == 0 } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def zmod? n~ - Inside source: true *** True Line Result def zmod? n ** Processing line: ~ (self % n) == 0~ - Inside source: true *** True Line Result (self % n) == 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def multiply n~ - Inside source: true *** True Line Result def multiply n ** Processing line: ~ self * n~ - Inside source: true *** True Line Result self * n ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def fmult n~ - Inside source: true *** True Line Result def fmult n ** Processing line: ~ self * n.to_f~ - Inside source: true *** True Line Result self * n.to_f ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def imult n~ - Inside source: true *** True Line Result def imult n ** Processing line: ~ (self * n).to_i~ - Inside source: true *** True Line Result (self * n).to_i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mult n~ - Inside source: true *** True Line Result def mult n ** Processing line: ~ self * n~ - Inside source: true *** True Line Result self * n ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def fdiv n~ - Inside source: true *** True Line Result def fdiv n ** Processing line: ~ self / n.to_f~ - Inside source: true *** True Line Result self / n.to_f ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Divides `self` by a number `n` as a float, and converts it `to_i`.~ - Inside source: true *** True Line Result # Divides `self` by a number `n` as a float, and converts it `to_i`. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def idiv n~ - Inside source: true *** True Line Result def idiv n ** Processing line: ~ (self / n.to_f).to_i~ - Inside source: true *** True Line Result (self / n.to_f).to_i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns a numeric value that is a quantity `magnitude` closer to~ - Inside source: true *** True Line Result # Returns a numeric value that is a quantity `magnitude` closer to ** Processing line: ~ #`self`. If the distance between `self` and `target` is less than~ - Inside source: true *** True Line Result #`self`. If the distance between `self` and `target` is less than ** Processing line: ~ #the `magnitude` then `target` is returned.~ - Inside source: true *** True Line Result #the `magnitude` then `target` is returned. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def towards target, magnitude~ - Inside source: true *** True Line Result def towards target, magnitude ** Processing line: ~ return self if self == target~ - Inside source: true *** True Line Result return self if self == target ** Processing line: ~ delta = (self - target).abs~ - Inside source: true *** True Line Result delta = (self - target).abs ** Processing line: ~ return target if delta < magnitude~ - Inside source: true *** True Line Result return target if delta < magnitude ** Processing line: ~ return self - magnitude if self > target~ - Inside source: true *** True Line Result return self - magnitude if self > target ** Processing line: ~ return self + magnitude~ - Inside source: true *** True Line Result return self + magnitude ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Given `self` and a number representing `y` of a grid. This~ - Inside source: true *** True Line Result # Given `self` and a number representing `y` of a grid. This ** Processing line: ~ # function will return a one dimensional array containing the value~ - Inside source: true *** True Line Result # function will return a one dimensional array containing the value ** Processing line: ~ # yielded by an implicit block.~ - Inside source: true *** True Line Result # yielded by an implicit block. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @example~ - Inside source: true *** True Line Result # @example ** Processing line: ~ # 3.map_with_ys 2 do |x, y|~ - Inside source: true *** True Line Result # 3.map_with_ys 2 do |x, y| ** Processing line: ~ # x * y~ - Inside source: true *** True Line Result # x * y ** Processing line: ~ # end~ - Inside source: true *** True Line Result # end ** Processing line: ~ # # x y x y x y x y x y x y~ - Inside source: true *** True Line Result # # x y x y x y x y x y x y ** Processing line: ~ # # 0*0, 0*1 1*0 1*1 2*0 2*1~ - Inside source: true *** True Line Result # # 0*0, 0*1 1*0 1*1 2*0 2*1 ** Processing line: ~ # # => [ 0, 0, 0, 1, 0, 2]~ - Inside source: true *** True Line Result # # => [ 0, 0, 0, 1, 0, 2] ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def map_with_ys ys, &block~ - Inside source: true *** True Line Result def map_with_ys ys, &block ** Processing line: ~ self.times.flat_map do |x|~ - Inside source: true *** True Line Result self.times.flat_map do |x| ** Processing line: ~ ys.map_with_index do |y|~ - Inside source: true *** True Line Result ys.map_with_index do |y| ** Processing line: ~ yield x, y~ - Inside source: true *** True Line Result yield x, y ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise_immediately e, :map_with_ys, [self, ys]~ - Inside source: true *** True Line Result raise_immediately e, :map_with_ys, [self, ys] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def combinations other_int~ - Inside source: true *** True Line Result def combinations other_int ** Processing line: ~ self.numbers.product(other_int.numbers)~ - Inside source: true *** True Line Result self.numbers.product(other_int.numbers) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def percentage_of n~ - Inside source: true *** True Line Result def percentage_of n ** Processing line: ~ (self / n.to_f).cap_min_max(0, 1)~ - Inside source: true *** True Line Result (self / n.to_f).cap_min_max(0, 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def cap i~ - Inside source: true *** True Line Result def cap i ** Processing line: ~ return i if self > i~ - Inside source: true *** True Line Result return i if self > i ** Processing line: ~ self~ - Inside source: true *** True Line Result self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def cap_min_max min, max~ - Inside source: true *** True Line Result def cap_min_max min, max ** Processing line: ~ return min if self < min~ - Inside source: true *** True Line Result return min if self < min ** Processing line: ~ return max if self > max~ - Inside source: true *** True Line Result return max if self > max ** Processing line: ~ self~ - Inside source: true *** True Line Result self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def lesser other~ - Inside source: true *** True Line Result def lesser other ** Processing line: ~ return other if other < self~ - Inside source: true *** True Line Result return other if other < self ** Processing line: ~ self~ - Inside source: true *** True Line Result self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def greater other~ - Inside source: true *** True Line Result def greater other ** Processing line: ~ return other if other > self~ - Inside source: true *** True Line Result return other if other > self ** Processing line: ~ self~ - Inside source: true *** True Line Result self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def subtract i~ - Inside source: true *** True Line Result def subtract i ** Processing line: ~ self - i~ - Inside source: true *** True Line Result self - i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def minus i~ - Inside source: true *** True Line Result def minus i ** Processing line: ~ self - i~ - Inside source: true *** True Line Result self - i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def add i~ - Inside source: true *** True Line Result def add i ** Processing line: ~ self + i~ - Inside source: true *** True Line Result self + i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def plus i~ - Inside source: true *** True Line Result def plus i ** Processing line: ~ self + i~ - Inside source: true *** True Line Result self + i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def numbers~ - Inside source: true *** True Line Result def numbers ** Processing line: ~ (0..self).to_a~ - Inside source: true *** True Line Result (0..self).to_a ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def map~ - Inside source: true *** True Line Result def map ** Processing line: ~ unless block_given?~ - Inside source: true *** True Line Result unless block_given? ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ A block is required for Numeric#map.~ - Inside source: true *** True Line Result A block is required for Numeric#map. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ self.to_i.times.map do~ - Inside source: true *** True Line Result self.to_i.times.map do ** Processing line: ~ yield~ - Inside source: true *** True Line Result yield ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def each~ - Inside source: true *** True Line Result def each ** Processing line: ~ unless block_given?~ - Inside source: true *** True Line Result unless block_given? ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ A block is required for Numeric#each.~ - Inside source: true *** True Line Result A block is required for Numeric#each. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ self.to_i.times do~ - Inside source: true *** True Line Result self.to_i.times do ** Processing line: ~ yield~ - Inside source: true *** True Line Result yield ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def times_with_index~ - Inside source: true *** True Line Result def times_with_index ** Processing line: ~ unless block_given?~ - Inside source: true *** True Line Result unless block_given? ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ A block is required for Numeric#times_with_index.~ - Inside source: true *** True Line Result A block is required for Numeric#times_with_index. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ self.to_i.times.with_index do |i|~ - Inside source: true *** True Line Result self.to_i.times.with_index do |i| ** Processing line: ~ yield i~ - Inside source: true *** True Line Result yield i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def each_with_index~ - Inside source: true *** True Line Result def each_with_index ** Processing line: ~ unless block_given?~ - Inside source: true *** True Line Result unless block_given? ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ A block is required for Numeric#each_with_index.~ - Inside source: true *** True Line Result A block is required for Numeric#each_with_index. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ self.to_i.times.with_index do |i|~ - Inside source: true *** True Line Result self.to_i.times.with_index do |i| ** Processing line: ~ yield i~ - Inside source: true *** True Line Result yield i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def map_with_index~ - Inside source: true *** True Line Result def map_with_index ** Processing line: ~ unless block_given?~ - Inside source: true *** True Line Result unless block_given? ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ A block is required for Numeric#map.~ - Inside source: true *** True Line Result A block is required for Numeric#map. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ self.to_i.times.map do |i|~ - Inside source: true *** True Line Result self.to_i.times.map do |i| ** Processing line: ~ yield i~ - Inside source: true *** True Line Result yield i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def __raise_arithmetic_exception__ other, m, e~ - Inside source: true *** True Line Result def __raise_arithmetic_exception__ other, m, e ** Processing line: ~ raise <<-S~ - Inside source: true *** True Line Result raise <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ Attempted to invoke :#{m} on #{self} with the right hand argument of:~ - Inside source: true *** True Line Result Attempted to invoke :#{m} on #{self} with the right hand argument of: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #{other}~ - Inside source: true *** True Line Result #{other} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ The object above is not a Numeric.~ - Inside source: true *** True Line Result The object above is not a Numeric. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #{e}~ - Inside source: true *** True Line Result #{e} ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ self~ - Inside source: true *** True Line Result self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.from_top n~ - Inside source: true *** True Line Result def self.from_top n ** Processing line: ~ return 720 - n unless $gtk~ - Inside source: true *** True Line Result return 720 - n unless $gtk ** Processing line: ~ $gtk.args.grid.top - n~ - Inside source: true *** True Line Result $gtk.args.grid.top - n ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def from_top~ - Inside source: true *** True Line Result def from_top ** Processing line: ~ Numeric.from_top self~ - Inside source: true *** True Line Result Numeric.from_top self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.from_right n~ - Inside source: true *** True Line Result def self.from_right n ** Processing line: ~ return 1280 - n unless $gtk~ - Inside source: true *** True Line Result return 1280 - n unless $gtk ** Processing line: ~ $gtk.args.grid.right - n~ - Inside source: true *** True Line Result $gtk.args.grid.right - n ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def from_right~ - Inside source: true *** True Line Result def from_right ** Processing line: ~ Numeric.from_right self~ - Inside source: true *** True Line Result Numeric.from_right self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.clamp n, min, max~ - Inside source: true *** True Line Result def self.clamp n, min, max ** Processing line: ~ n.clamp min, max~ - Inside source: true *** True Line Result n.clamp min, max ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mid? l, r~ - Inside source: true *** True Line Result def mid? l, r ** Processing line: ~ (between? l, r) || (between? r, l)~ - Inside source: true *** True Line Result (between? l, r) || (between? r, l) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Fixnum~ - Inside source: true *** True Line Result class Fixnum ** Processing line: ~ include ValueType~ - Inside source: true *** True Line Result include ValueType ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ alias_method :__original_eq_eq__, :== unless Fixnum.instance_methods.include? :__original_eq_eq__~ - Inside source: true *** True Line Result alias_method :__original_eq_eq__, :== unless Fixnum.instance_methods.include? :__original_eq_eq__ ** Processing line: ~ alias_method :__original_add__, :+ unless Fixnum.instance_methods.include? :__original_add__~ - Inside source: true *** True Line Result alias_method :__original_add__, :+ unless Fixnum.instance_methods.include? :__original_add__ ** Processing line: ~ alias_method :__original_subtract__, :- unless Fixnum.instance_methods.include? :__original_subtract__~ - Inside source: true *** True Line Result alias_method :__original_subtract__, :- unless Fixnum.instance_methods.include? :__original_subtract__ ** Processing line: ~ alias_method :__original_multiply__, :* unless Fixnum.instance_methods.include? :__original_multiply__~ - Inside source: true *** True Line Result alias_method :__original_multiply__, :* unless Fixnum.instance_methods.include? :__original_multiply__ ** Processing line: ~ alias_method :__original_divide__, :- unless Fixnum.instance_methods.include? :__original_divide__~ - Inside source: true *** True Line Result alias_method :__original_divide__, :- unless Fixnum.instance_methods.include? :__original_divide__ ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns `true` if the numeric value is evenly divisible by 2.~ - Inside source: true *** True Line Result # Returns `true` if the numeric value is evenly divisible by 2. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def even?~ - Inside source: true *** True Line Result def even? ** Processing line: ~ return (self % 2) == 0~ - Inside source: true *** True Line Result return (self % 2) == 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns `true` if the numeric value is *NOT* evenly divisible by 2.~ - Inside source: true *** True Line Result # Returns `true` if the numeric value is *NOT* evenly divisible by 2. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def odd?~ - Inside source: true *** True Line Result def odd? ** Processing line: ~ return !even?~ - Inside source: true *** True Line Result return !even? ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns `-1` if the number is less than `0`. `+1` if the number~ - Inside source: true *** True Line Result # Returns `-1` if the number is less than `0`. `+1` if the number ** Processing line: ~ # is greater than `0`. Returns `0` if the number is equal to `0`.~ - Inside source: true *** True Line Result # is greater than `0`. Returns `0` if the number is equal to `0`. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def sign~ - Inside source: true *** True Line Result def sign ** Processing line: ~ return -1 if self < 0~ - Inside source: true *** True Line Result return -1 if self < 0 ** Processing line: ~ return 1 if self > 0~ - Inside source: true *** True Line Result return 1 if self > 0 ** Processing line: ~ return 0~ - Inside source: true *** True Line Result return 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns `true` if number is greater than `0`.~ - Inside source: true *** True Line Result # Returns `true` if number is greater than `0`. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def pos?~ - Inside source: true *** True Line Result def pos? ** Processing line: ~ sign > 0~ - Inside source: true *** True Line Result sign > 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns `true` if number is less than `0`.~ - Inside source: true *** True Line Result # Returns `true` if number is less than `0`. ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def neg?~ - Inside source: true *** True Line Result def neg? ** Processing line: ~ sign < 0~ - Inside source: true *** True Line Result sign < 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the cosine of a represented in degrees (NOT radians).~ - Inside source: true *** True Line Result # Returns the cosine of a represented in degrees (NOT radians). ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def cos~ - Inside source: true *** True Line Result def cos ** Processing line: ~ Math.cos(self.to_radians)~ - Inside source: true *** True Line Result Math.cos(self.to_radians) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Returns the cosine of a represented in degrees (NOT radians).~ - Inside source: true *** True Line Result # Returns the cosine of a represented in degrees (NOT radians). ** Processing line: ~ #~ - Inside source: true *** True Line Result # ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def sin~ - Inside source: true *** True Line Result def sin ** Processing line: ~ Math.sin(self.to_radians)~ - Inside source: true *** True Line Result Math.sin(self.to_radians) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_sf~ - Inside source: true *** True Line Result def to_sf ** Processing line: ~ "%.2f" % self~ - Inside source: true *** True Line Result "%.2f" % self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def ifloor int~ - Inside source: true *** True Line Result def ifloor int ** Processing line: ~ (self.idiv int.to_i) * int.to_i~ - Inside source: true *** True Line Result (self.idiv int.to_i) * int.to_i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Float~ - Inside source: true *** True Line Result class Float ** Processing line: ~ include ValueType~ - Inside source: true *** True Line Result include ValueType ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ alias_method :__original_add__, :+ unless Float.instance_methods.include? :__original_add__~ - Inside source: true *** True Line Result alias_method :__original_add__, :+ unless Float.instance_methods.include? :__original_add__ ** Processing line: ~ alias_method :__original_subtract__, :- unless Float.instance_methods.include? :__original_subtract__~ - Inside source: true *** True Line Result alias_method :__original_subtract__, :- unless Float.instance_methods.include? :__original_subtract__ ** Processing line: ~ alias_method :__original_multiply__, :* unless Float.instance_methods.include? :__original_multiply__~ - Inside source: true *** True Line Result alias_method :__original_multiply__, :* unless Float.instance_methods.include? :__original_multiply__ ** Processing line: ~ alias_method :__original_divide__, :- unless Float.instance_methods.include? :__original_divide__~ - Inside source: true *** True Line Result alias_method :__original_divide__, :- unless Float.instance_methods.include? :__original_divide__ ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ self~ - Inside source: true *** True Line Result self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def sign~ - Inside source: true *** True Line Result def sign ** Processing line: ~ return -1 if self < 0~ - Inside source: true *** True Line Result return -1 if self < 0 ** Processing line: ~ return 1 if self > 0~ - Inside source: true *** True Line Result return 1 if self > 0 ** Processing line: ~ return 0~ - Inside source: true *** True Line Result return 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def replace_infinity scalar~ - Inside source: true *** True Line Result def replace_infinity scalar ** Processing line: ~ return self if !scalar~ - Inside source: true *** True Line Result return self if !scalar ** Processing line: ~ return self unless self.infinite?~ - Inside source: true *** True Line Result return self unless self.infinite? ** Processing line: ~ return -scalar if self < 0~ - Inside source: true *** True Line Result return -scalar if self < 0 ** Processing line: ~ return scalar if self > 0~ - Inside source: true *** True Line Result return scalar if self > 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def to_sf~ - Inside source: true *** True Line Result def to_sf ** Processing line: ~ "%.2f" % self~ - Inside source: true *** True Line Result "%.2f" % self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def ifloor int~ - Inside source: true *** True Line Result def ifloor int ** Processing line: ~ (self.idiv int.to_i) * int.to_i~ - Inside source: true *** True Line Result (self.idiv int.to_i) * int.to_i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Integer~ - Inside source: true *** True Line Result class Integer ** Processing line: ~ alias_method :__original_round__, :round unless Integer.instance_methods.include? :__original_round__~ - Inside source: true *** True Line Result alias_method :__original_round__, :round unless Integer.instance_methods.include? :__original_round__ ** Processing line: ~ alias_method :__original_add__, :+ unless Integer.instance_methods.include? :__original_add__~ - Inside source: true *** True Line Result alias_method :__original_add__, :+ unless Integer.instance_methods.include? :__original_add__ ** Processing line: ~ alias_method :__original_subtract__, :- unless Integer.instance_methods.include? :__original_subtract__~ - Inside source: true *** True Line Result alias_method :__original_subtract__, :- unless Integer.instance_methods.include? :__original_subtract__ ** Processing line: ~ alias_method :__original_multiply__, :* unless Integer.instance_methods.include? :__original_multiply__~ - Inside source: true *** True Line Result alias_method :__original_multiply__, :* unless Integer.instance_methods.include? :__original_multiply__ ** Processing line: ~ alias_method :__original_divide__, :- unless Integer.instance_methods.include? :__original_divide__~ - Inside source: true *** True Line Result alias_method :__original_divide__, :- unless Integer.instance_methods.include? :__original_divide__ ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def round *args~ - Inside source: true *** True Line Result def round *args ** Processing line: ~ __original_round__~ - Inside source: true *** True Line Result __original_round__ ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def nan?~ - Inside source: true *** True Line Result def nan? ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def center other~ - Inside source: true *** True Line Result def center other ** Processing line: ~ (self - other).abs.fdiv(2)~ - Inside source: true *** True Line Result (self - other).abs.fdiv(2) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** recording.rb~ - Header detected. *** True Line Result *** True Line Result *** recording.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/recording.rb~ - Inside source: true *** True Line Result # ./dragon/recording.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # recording.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # recording.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ # FIXME: Gross~ - Inside source: true *** True Line Result # FIXME: Gross ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ class Replay~ - Inside source: true *** True Line Result class Replay ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.start file_name = nil~ - Inside source: true *** True Line Result def self.start file_name = nil ** Processing line: ~ $recording.start_replay file_name~ - Inside source: true *** True Line Result $recording.start_replay file_name ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.stop~ - Inside source: true *** True Line Result def self.stop ** Processing line: ~ $recording.stop_replay~ - Inside source: true *** True Line Result $recording.stop_replay ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ class Recording~ - Inside source: true *** True Line Result class Recording ** Processing line: ~ def initialize runtime~ - Inside source: true *** True Line Result def initialize runtime ** Processing line: ~ @runtime = runtime~ - Inside source: true *** True Line Result @runtime = runtime ** Processing line: ~ @tick_count = 0~ - Inside source: true *** True Line Result @tick_count = 0 ** Processing line: ~ @global_input_order = 1~ - Inside source: true *** True Line Result @global_input_order = 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ @tick_count += 1~ - Inside source: true *** True Line Result @tick_count += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def start_recording seed_number = nil~ - Inside source: true *** True Line Result def start_recording seed_number = nil ** Processing line: ~ if !seed_number~ - Inside source: true *** True Line Result if !seed_number ** Processing line: ~ log <<-S~ - Inside source: true *** True Line Result log <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ To start recording, you must provide an integer value to~ - Inside source: true *** True Line Result To start recording, you must provide an integer value to ** Processing line: ~ seed random number generation.~ - Inside source: true *** True Line Result seed random number generation. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ $console.set_command "$recording.start SEED_NUMBER"~ - Inside source: true *** True Line Result $console.set_command "$recording.start SEED_NUMBER" ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @is_recording~ - Inside source: true *** True Line Result if @is_recording ** Processing line: ~ log <<-S~ - Inside source: true *** True Line Result log <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ You are already recording, first cancel (or stop) the current recording.~ - Inside source: true *** True Line Result You are already recording, first cancel (or stop) the current recording. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ $console.set_command "$recording.cancel"~ - Inside source: true *** True Line Result $console.set_command "$recording.cancel" ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @is_replaying~ - Inside source: true *** True Line Result if @is_replaying ** Processing line: ~ log <<-S~ - Inside source: true *** True Line Result log <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ You are currently replaying a recording, first stop the replay.~ - Inside source: true *** True Line Result You are currently replaying a recording, first stop the replay. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ log_info <<-S~ - Inside source: true *** True Line Result log_info <<-S ** Processing line: ~ Recording has begun with RNG seed value set to #{seed_number}.~ - Inside source: true *** True Line Result Recording has begun with RNG seed value set to #{seed_number}. ** Processing line: ~ To stop recording use stop_recording(filename).~ - Inside source: true *** True Line Result To stop recording use stop_recording(filename). ** Processing line: ~ The recording will stop without saving a file if a filename is nil.~ - Inside source: true *** True Line Result The recording will stop without saving a file if a filename is nil. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $console.set_command "$recording.stop 'replay.txt'"~ - Inside source: true *** True Line Result $console.set_command "$recording.stop 'replay.txt'" ** Processing line: ~ @runtime.__reset__~ - Inside source: true *** True Line Result @runtime.__reset__ ** Processing line: ~ @seed_number = seed_number~ - Inside source: true *** True Line Result @seed_number = seed_number ** Processing line: ~ @runtime.set_rng seed_number~ - Inside source: true *** True Line Result @runtime.set_rng seed_number ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @tick_count = 0~ - Inside source: true *** True Line Result @tick_count = 0 ** Processing line: ~ @global_input_order = 1~ - Inside source: true *** True Line Result @global_input_order = 1 ** Processing line: ~ @is_recording = true~ - Inside source: true *** True Line Result @is_recording = true ** Processing line: ~ @input_history = []~ - Inside source: true *** True Line Result @input_history = [] ** Processing line: ~ @runtime.notify! "Recording started. When completed, open the console to save it using $recording.stop FILE_NAME (or cancel).", 300~ - Inside source: true *** True Line Result @runtime.notify! "Recording started. When completed, open the console to save it using $recording.stop FILE_NAME (or cancel).", 300 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def start seed_number = nil~ - Inside source: true *** True Line Result def start seed_number = nil ** Processing line: ~ start_recording seed_number~ - Inside source: true *** True Line Result start_recording seed_number ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def is_replaying?~ - Inside source: true *** True Line Result def is_replaying? ** Processing line: ~ @is_replaying~ - Inside source: true *** True Line Result @is_replaying ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def is_recording?~ - Inside source: true *** True Line Result def is_recording? ** Processing line: ~ @is_recording~ - Inside source: true *** True Line Result @is_recording ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def stop file_name = nil~ - Inside source: true *** True Line Result def stop file_name = nil ** Processing line: ~ stop_recording file_name~ - Inside source: true *** True Line Result stop_recording file_name ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def cancel~ - Inside source: true *** True Line Result def cancel ** Processing line: ~ stop_recording_core~ - Inside source: true *** True Line Result stop_recording_core ** Processing line: ~ @runtime.notify! "Recording cancelled."~ - Inside source: true *** True Line Result @runtime.notify! "Recording cancelled." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def stop_recording file_name = nil~ - Inside source: true *** True Line Result def stop_recording file_name = nil ** Processing line: ~ if !file_name~ - Inside source: true *** True Line Result if !file_name ** Processing line: ~ log <<-S~ - Inside source: true *** True Line Result log <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ To please specify a file name when calling:~ - Inside source: true *** True Line Result To please specify a file name when calling: ** Processing line: ~ $recording.stop FILE_NAME~ - Inside source: true *** True Line Result $recording.stop FILE_NAME ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ If you do NOT want to save the recording, call:~ - Inside source: true *** True Line Result If you do NOT want to save the recording, call: ** Processing line: ~ $recording.cancel~ - Inside source: true *** True Line Result $recording.cancel ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ $console.set_command "$recording.stop 'replay.txt'"~ - Inside source: true *** True Line Result $console.set_command "$recording.stop 'replay.txt'" ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !@is_recording~ - Inside source: true *** True Line Result if !@is_recording ** Processing line: ~ log_info "You are not currently recording. Use start_recording(seed_number) to start recording."~ - Inside source: true *** True Line Result log_info "You are not currently recording. Use start_recording(seed_number) to start recording." ** Processing line: ~ $console.set_command "$recording.start"~ - Inside source: true *** True Line Result $console.set_command "$recording.start" ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if file_name~ - Inside source: true *** True Line Result if file_name ** Processing line: ~ text = "replay_version 2.0\n"~ - Inside source: true *** True Line Result text = "replay_version 2.0\n" ** Processing line: ~ text << "stopped_at #{@tick_count}\n"~ - Inside source: true *** True Line Result text << "stopped_at #{@tick_count}\n" ** Processing line: ~ text << "seed #{@seed_number}\n"~ - Inside source: true *** True Line Result text << "seed #{@seed_number}\n" ** Processing line: ~ text << "recorded_at #{Time.now.to_s}\n"~ - Inside source: true *** True Line Result text << "recorded_at #{Time.now.to_s}\n" ** Processing line: ~ @input_history.each do |items|~ - Inside source: true *** True Line Result @input_history.each do |items| ** Processing line: ~ text << "#{items}\n"~ - Inside source: true *** True Line Result text << "#{items}\n" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ @runtime.write_file file_name, text~ - Inside source: true *** True Line Result @runtime.write_file file_name, text ** Processing line: ~ @runtime.write_file 'last_replay.txt', text~ - Inside source: true *** True Line Result @runtime.write_file 'last_replay.txt', text ** Processing line: ~ log_info "The recording has been saved successfully at #{file_name}. You can use start_replay(\"#{file_name}\") to replay the recording."~ - Inside source: true *** True Line Result log_info "The recording has been saved successfully at #{file_name}. You can use start_replay(\"#{file_name}\") to replay the recording." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $console.set_command "$replay.start '#{file_name}'"~ - Inside source: true *** True Line Result $console.set_command "$replay.start '#{file_name}'" ** Processing line: ~ stop_recording_core~ - Inside source: true *** True Line Result stop_recording_core ** Processing line: ~ @runtime.notify! "Recording saved to #{file_name}. To replay it: $replay.start \"#{file_name}\"."~ - Inside source: true *** True Line Result @runtime.notify! "Recording saved to #{file_name}. To replay it: $replay.start \"#{file_name}\"." ** Processing line: ~ log_info "You can run the replay later on startup using: ./dragonruby mygame --replay #{@replay_file_name}"~ - Inside source: true *** True Line Result log_info "You can run the replay later on startup using: ./dragonruby mygame --replay #{@replay_file_name}" ** Processing line: ~ nil~ - Inside source: true *** True Line Result nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def stop_recording_core~ - Inside source: true *** True Line Result def stop_recording_core ** Processing line: ~ @is_recording = false~ - Inside source: true *** True Line Result @is_recording = false ** Processing line: ~ @input_history = nil~ - Inside source: true *** True Line Result @input_history = nil ** Processing line: ~ @last_history = nil~ - Inside source: true *** True Line Result @last_history = nil ** Processing line: ~ @runtime.__reset__~ - Inside source: true *** True Line Result @runtime.__reset__ ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def start_replay file_name = nil~ - Inside source: true *** True Line Result def start_replay file_name = nil ** Processing line: ~ if !file_name~ - Inside source: true *** True Line Result if !file_name ** Processing line: ~ log <<-S~ - Inside source: true *** True Line Result log <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ Please provide a file name to $recording.start.~ - Inside source: true *** True Line Result Please provide a file name to $recording.start. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ $console.set_command "$replay.start 'replay.txt'"~ - Inside source: true *** True Line Result $console.set_command "$replay.start 'replay.txt'" ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ text = @runtime.read_file file_name~ - Inside source: true *** True Line Result text = @runtime.read_file file_name ** Processing line: ~ return false unless text~ - Inside source: true *** True Line Result return false unless text ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if text.each_line.first.strip != "replay_version 2.0"~ - Inside source: true *** True Line Result if text.each_line.first.strip != "replay_version 2.0" ** Processing line: ~ raise "The replay file #{file_name} is not compatible with this version of DragonRuby Game Toolkit. Please recreate the replay (sorry)."~ - Inside source: true *** True Line Result raise "The replay file #{file_name} is not compatible with this version of DragonRuby Game Toolkit. Please recreate the replay (sorry)." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @replay_file_name = file_name~ - Inside source: true *** True Line Result @replay_file_name = file_name ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $replay_data = { input_history: { } }~ - Inside source: true *** True Line Result $replay_data = { input_history: { } } ** Processing line: ~ text.each_line do |l|~ - Inside source: true *** True Line Result text.each_line do |l| ** Processing line: ~ if l.strip.length == 0~ - Inside source: true *** True Line Result if l.strip.length == 0 ** Processing line: ~ next~ - Inside source: true *** True Line Result next ** Processing line: ~ elsif l.start_with? 'replay_version'~ - Inside source: true *** True Line Result elsif l.start_with? 'replay_version' ** Processing line: ~ next~ - Inside source: true *** True Line Result next ** Processing line: ~ elsif l.start_with? 'seed'~ - Inside source: true *** True Line Result elsif l.start_with? 'seed' ** Processing line: ~ $replay_data[:seed] = l.split(' ').last.to_i~ - Inside source: true *** True Line Result $replay_data[:seed] = l.split(' ').last.to_i ** Processing line: ~ elsif l.start_with? 'stopped_at'~ - Inside source: true *** True Line Result elsif l.start_with? 'stopped_at' ** Processing line: ~ $replay_data[:stopped_at] = l.split(' ').last.to_i~ - Inside source: true *** True Line Result $replay_data[:stopped_at] = l.split(' ').last.to_i ** Processing line: ~ elsif l.start_with? 'recorded_at'~ - Inside source: true *** True Line Result elsif l.start_with? 'recorded_at' ** Processing line: ~ $replay_data[:recorded_at] = l.split(' ')[1..-1].join(' ')~ - Inside source: true *** True Line Result $replay_data[:recorded_at] = l.split(' ')[1..-1].join(' ') ** Processing line: ~ elsif l.start_with? '['~ - Inside source: true *** True Line Result elsif l.start_with? '[' ** Processing line: ~ name, value_1, value_2, value_count, id, tick_count = l.strip.gsub('[', '').gsub(']', '').split(',')~ - Inside source: true *** True Line Result name, value_1, value_2, value_count, id, tick_count = l.strip.gsub('[', '').gsub(']', '').split(',') ** Processing line: ~ $replay_data[:input_history][tick_count.to_i] ||= []~ - Inside source: true *** True Line Result $replay_data[:input_history][tick_count.to_i] ||= [] ** Processing line: ~ $replay_data[:input_history][tick_count.to_i] << {~ - Inside source: true *** True Line Result $replay_data[:input_history][tick_count.to_i] << { ** Processing line: ~ id: id.to_i,~ - Inside source: true *** True Line Result id: id.to_i, ** Processing line: ~ name: name.gsub(':', '').to_sym,~ - Inside source: true *** True Line Result name: name.gsub(':', '').to_sym, ** Processing line: ~ value_1: value_1.to_f,~ - Inside source: true *** True Line Result value_1: value_1.to_f, ** Processing line: ~ value_2: value_2.to_f,~ - Inside source: true *** True Line Result value_2: value_2.to_f, ** Processing line: ~ value_count: value_count.to_i~ - Inside source: true *** True Line Result value_count: value_count.to_i ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ raise "Replay data seems corrupt. I don't know how to parse #{l}."~ - Inside source: true *** True Line Result raise "Replay data seems corrupt. I don't know how to parse #{l}." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $replay_data[:input_history].keys.each do |key|~ - Inside source: true *** True Line Result $replay_data[:input_history].keys.each do |key| ** Processing line: ~ $replay_data[:input_history][key] = $replay_data[:input_history][key].sort_by {|input| input[:id]}~ - Inside source: true *** True Line Result $replay_data[:input_history][key] = $replay_data[:input_history][key].sort_by {|input| input[:id]} ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @runtime.__reset__~ - Inside source: true *** True Line Result @runtime.__reset__ ** Processing line: ~ @runtime.set_rng $replay_data[:seed]~ - Inside source: true *** True Line Result @runtime.set_rng $replay_data[:seed] ** Processing line: ~ @tick_count = 0~ - Inside source: true *** True Line Result @tick_count = 0 ** Processing line: ~ @is_replaying = true~ - Inside source: true *** True Line Result @is_replaying = true ** Processing line: ~ log_info "Replay has been started."~ - Inside source: true *** True Line Result log_info "Replay has been started." ** Processing line: ~ @runtime.notify! "Replay started [#{@replay_file_name}]."~ - Inside source: true *** True Line Result @runtime.notify! "Replay started [#{@replay_file_name}]." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def stop_replay notification_message = "Replay has been stopped."~ - Inside source: true *** True Line Result def stop_replay notification_message = "Replay has been stopped." ** Processing line: ~ if !is_replaying?~ - Inside source: true *** True Line Result if !is_replaying? ** Processing line: ~ log <<-S~ - Inside source: true *** True Line Result log <<-S ** Processing line: ~ * ERROR:~ - Inside source: true *** True Line Result * ERROR: ** Processing line: ~ No replay is currently running. Call $replay.start FILE_NAME to start a replay.~ - Inside source: true *** True Line Result No replay is currently running. Call $replay.start FILE_NAME to start a replay. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $console.set_command "$replay.start 'replay.txt'"~ - Inside source: true *** True Line Result $console.set_command "$replay.start 'replay.txt'" ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ log_info notification_message~ - Inside source: true *** True Line Result log_info notification_message ** Processing line: ~ @is_replaying = false~ - Inside source: true *** True Line Result @is_replaying = false ** Processing line: ~ $replay_data = nil~ - Inside source: true *** True Line Result $replay_data = nil ** Processing line: ~ @tick_count = 0~ - Inside source: true *** True Line Result @tick_count = 0 ** Processing line: ~ @global_input_order = 1~ - Inside source: true *** True Line Result @global_input_order = 1 ** Processing line: ~ $console.set_command_silent "$replay.start '#{@replay_file_name}'"~ - Inside source: true *** True Line Result $console.set_command_silent "$replay.start '#{@replay_file_name}'" ** Processing line: ~ @runtime.__reset__~ - Inside source: true *** True Line Result @runtime.__reset__ ** Processing line: ~ @runtime.notify! notification_message~ - Inside source: true *** True Line Result @runtime.notify! notification_message ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def record_input_history name, value_1, value_2, value_count, clear_cache = false~ - Inside source: true *** True Line Result def record_input_history name, value_1, value_2, value_count, clear_cache = false ** Processing line: ~ return if @is_replaying~ - Inside source: true *** True Line Result return if @is_replaying ** Processing line: ~ return unless @is_recording~ - Inside source: true *** True Line Result return unless @is_recording ** Processing line: ~ @input_history << [name, value_1, value_2, value_count, @global_input_order, @tick_count]~ - Inside source: true *** True Line Result @input_history << [name, value_1, value_2, value_count, @global_input_order, @tick_count] ** Processing line: ~ @global_input_order += 1~ - Inside source: true *** True Line Result @global_input_order += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def stage_replay_values~ - Inside source: true *** True Line Result def stage_replay_values ** Processing line: ~ return unless @is_replaying~ - Inside source: true *** True Line Result return unless @is_replaying ** Processing line: ~ return unless $replay_data~ - Inside source: true *** True Line Result return unless $replay_data ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if $replay_data[:stopped_at] <= @tick_count~ - Inside source: true *** True Line Result if $replay_data[:stopped_at] <= @tick_count ** Processing line: ~ stop_replay "Replay completed [#{@replay_file_name}]. To rerun, bring up the Console and press enter."~ - Inside source: true *** True Line Result stop_replay "Replay completed [#{@replay_file_name}]. To rerun, bring up the Console and press enter." ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ inputs_this_tick = $replay_data[:input_history][@tick_count]~ - Inside source: true *** True Line Result inputs_this_tick = $replay_data[:input_history][@tick_count] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if @tick_count.zmod? 60~ - Inside source: true *** True Line Result if @tick_count.zmod? 60 ** Processing line: ~ log_info "Replay ends in #{($replay_data[:stopped_at] - @tick_count).idiv 60} second(s)."~ - Inside source: true *** True Line Result log_info "Replay ends in #{($replay_data[:stopped_at] - @tick_count).idiv 60} second(s)." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return unless inputs_this_tick~ - Inside source: true *** True Line Result return unless inputs_this_tick ** Processing line: ~ inputs_this_tick.each do |v|~ - Inside source: true *** True Line Result inputs_this_tick.each do |v| ** Processing line: ~ args = []~ - Inside source: true *** True Line Result args = [] ** Processing line: ~ args << v[:value_1] if v[:value_count] >= 1~ - Inside source: true *** True Line Result args << v[:value_1] if v[:value_count] >= 1 ** Processing line: ~ args << v[:value_2] if v[:value_count] >= 2~ - Inside source: true *** True Line Result args << v[:value_2] if v[:value_count] >= 2 ** Processing line: ~ args << :replay~ - Inside source: true *** True Line Result args << :replay ** Processing line: ~ $gtk.send v[:name], *args~ - Inside source: true *** True Line Result $gtk.send v[:name], *args ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** remote_hotload_client.rb~ - Header detected. *** True Line Result *** True Line Result *** remote_hotload_client.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/remote_hotload_client.rb~ - Inside source: true *** True Line Result # ./dragon/remote_hotload_client.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # hotload_client.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # hotload_client.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class RemoteHotloadClient~ - Inside source: true *** True Line Result class RemoteHotloadClient ** Processing line: ~ attr :args~ - Inside source: true *** True Line Result attr :args ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def gtk~ - Inside source: true *** True Line Result def gtk ** Processing line: ~ args.gtk~ - Inside source: true *** True Line Result args.gtk ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def state~ - Inside source: true *** True Line Result def state ** Processing line: ~ local_state~ - Inside source: true *** True Line Result local_state ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize local_ip_address~ - Inside source: true *** True Line Result def initialize local_ip_address ** Processing line: ~ local_state.local_ip_address = local_ip_address~ - Inside source: true *** True Line Result local_state.local_ip_address = local_ip_address ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick~ - Inside source: true *** True Line Result def tick ** Processing line: ~ return unless server_available?~ - Inside source: true *** True Line Result return unless server_available? ** Processing line: ~ return unless server_needed?~ - Inside source: true *** True Line Result return unless server_needed? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if should_tick? && server_needed? && !local_state.notified~ - Inside source: true *** True Line Result if should_tick? && server_needed? && !local_state.notified ** Processing line: ~ if server_available?~ - Inside source: true *** True Line Result if server_available? ** Processing line: ~ remote_log "* REMOTE CLIENT INFO: Hotload server found at #{get_server_ip_address}:9001."~ - Inside source: true *** True Line Result remote_log "* REMOTE CLIENT INFO: Hotload server found at #{get_server_ip_address}:9001." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ local_state.notified = true~ - Inside source: true *** True Line Result local_state.notified = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ tick_process_file_retrieval~ - Inside source: true *** True Line Result tick_process_file_retrieval ** Processing line: ~ tick_process_queue~ - Inside source: true *** True Line Result tick_process_queue ** Processing line: ~ tick_changes~ - Inside source: true *** True Line Result tick_changes ** Processing line: ~ tick_http_boot~ - Inside source: true *** True Line Result tick_http_boot ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def should_tick?~ - Inside source: true *** True Line Result def should_tick? ** Processing line: ~ (game_state.tick_count.mod_zero? 60) && game_state.tick_count > 5.seconds~ - Inside source: true *** True Line Result (game_state.tick_count.mod_zero? 60) && game_state.tick_count > 5.seconds ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def game_state~ - Inside source: true *** True Line Result def game_state ** Processing line: ~ args.state~ - Inside source: true *** True Line Result args.state ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def local_state~ - Inside source: true *** True Line Result def local_state ** Processing line: ~ @local_state ||= OpenEntity.new~ - Inside source: true *** True Line Result @local_state ||= OpenEntity.new ** Processing line: ~ @local_state.hotload_client ||= @local_state.new_entity(:hotload_client,~ - Inside source: true *** True Line Result @local_state.hotload_client ||= @local_state.new_entity(:hotload_client, ** Processing line: ~ notes: "This entity is used by DragonRuby Game Toolkit to provide you hotloading on remote machines.",~ - Inside source: true *** True Line Result notes: "This entity is used by DragonRuby Game Toolkit to provide you hotloading on remote machines.", ** Processing line: ~ changes: { },~ - Inside source: true *** True Line Result changes: { }, ** Processing line: ~ changes_queue: [],~ - Inside source: true *** True Line Result changes_queue: [], ** Processing line: ~ reloaded_files_times: [])~ - Inside source: true *** True Line Result reloaded_files_times: []) ** Processing line: ~ @local_state.hotload_client~ - Inside source: true *** True Line Result @local_state.hotload_client ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def remote_log message~ - Inside source: true *** True Line Result def remote_log message ** Processing line: ~ log message~ - Inside source: true *** True Line Result log message ** Processing line: ~ args.gtk.http_post "http://#{get_server_ip_address}:9001/dragon/log/", { message: "=======\n#{message}\n=======\n" }, ["Content-Type: application/x-www-form-urlencoded"]~ - Inside source: true *** True Line Result args.gtk.http_post "http://#{get_server_ip_address}:9001/dragon/log/", { message: "=======\n#{message}\n=======\n" }, ["Content-Type: application/x-www-form-urlencoded"] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_server_ip_address~ - Inside source: true *** True Line Result def get_server_ip_address ** Processing line: ~ return local_state.ip_address if local_state.ip_address~ - Inside source: true *** True Line Result return local_state.ip_address if local_state.ip_address ** Processing line: ~ local_state.ip_address ||= ((gtk.read_file 'app/server_ip_address.txt') || "").strip~ - Inside source: true *** True Line Result local_state.ip_address ||= ((gtk.read_file 'app/server_ip_address.txt') || "").strip ** Processing line: ~ local_state.ip_address~ - Inside source: true *** True Line Result local_state.ip_address ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def server_available?~ - Inside source: true *** True Line Result def server_available? ** Processing line: ~ return false if gtk.platform == 'Emscripten'~ - Inside source: true *** True Line Result return false if gtk.platform == 'Emscripten' ** Processing line: ~ get_server_ip_address.length != 0~ - Inside source: true *** True Line Result get_server_ip_address.length != 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def server_needed?~ - Inside source: true *** True Line Result def server_needed? ** Processing line: ~ return false if gtk.platform == 'Emscripten'~ - Inside source: true *** True Line Result return false if gtk.platform == 'Emscripten' ** Processing line: ~ local_state.local_ip_address != get_server_ip_address~ - Inside source: true *** True Line Result local_state.local_ip_address != get_server_ip_address ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_changes~ - Inside source: true *** True Line Result def tick_changes ** Processing line: ~ return unless should_tick?~ - Inside source: true *** True Line Result return unless should_tick? ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ local_state.greatest_tick ||= 0~ - Inside source: true *** True Line Result local_state.greatest_tick ||= 0 ** Processing line: ~ local_state.last_greatest_tick ||= 0~ - Inside source: true *** True Line Result local_state.last_greatest_tick ||= 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ tick_http_changes~ - Inside source: true *** True Line Result tick_http_changes ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_http_boot~ - Inside source: true *** True Line Result def tick_http_boot ** Processing line: ~ return if local_state.booted_at~ - Inside source: true *** True Line Result return if local_state.booted_at ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !local_state.http_boot~ - Inside source: true *** True Line Result if !local_state.http_boot ** Processing line: ~ # first retrieve changes.txt which has the following format~ - Inside source: true *** True Line Result # first retrieve changes.txt which has the following format ** Processing line: ~ # file with latest change,~ - Inside source: true *** True Line Result # file with latest change, ** Processing line: ~ # latest file update_time key~ - Inside source: true *** True Line Result # latest file update_time key ** Processing line: ~ # tmp/src_backup/src_backup_app_main.rb, 1597926596, app/main.rb~ - Inside source: true *** True Line Result # tmp/src_backup/src_backup_app_main.rb, 1597926596, app/main.rb ** Processing line: ~ local_state.http_boot = args.gtk.http_get "http://#{get_server_ip_address}:9001/dragon/boot/"~ - Inside source: true *** True Line Result local_state.http_boot = args.gtk.http_get "http://#{get_server_ip_address}:9001/dragon/boot/" ** Processing line: ~ elsif local_state.http_boot && local_state.http_boot[:http_response_code] == 200~ - Inside source: true *** True Line Result elsif local_state.http_boot && local_state.http_boot[:http_response_code] == 200 ** Processing line: ~ local_state.last_greatest_tick = local_state.http_boot[:response_data].strip.to_i~ - Inside source: true *** True Line Result local_state.last_greatest_tick = local_state.http_boot[:response_data].strip.to_i ** Processing line: ~ local_state.greatest_tick = local_state.http_boot[:response_data].strip.to_i~ - Inside source: true *** True Line Result local_state.greatest_tick = local_state.http_boot[:response_data].strip.to_i ** Processing line: ~ local_state.booted_at = local_state.greatest_tick~ - Inside source: true *** True Line Result local_state.booted_at = local_state.greatest_tick ** Processing line: ~ remote_log '* REMOTE CLIENT INFO: HTTP GET for local_state. boot.txt succeeded.'~ - Inside source: true *** True Line Result remote_log '* REMOTE CLIENT INFO: HTTP GET for local_state. boot.txt succeeded.' ** Processing line: ~ remote_log "* REMOTE CLIENT INFO: Looking for changes after: #{local_state.greatest_tick}."~ - Inside source: true *** True Line Result remote_log "* REMOTE CLIENT INFO: Looking for changes after: #{local_state.greatest_tick}." ** Processing line: ~ elsif local_state.http_boot && local_state.http_boot[:http_response_code] == -1 && local_state.http_boot[:complete]~ - Inside source: true *** True Line Result elsif local_state.http_boot && local_state.http_boot[:http_response_code] == -1 && local_state.http_boot[:complete] ** Processing line: ~ remote_log '* REMOTE CLIENT INFO: HTTP GET for boot.txt failed. Retrying.'~ - Inside source: true *** True Line Result remote_log '* REMOTE CLIENT INFO: HTTP GET for boot.txt failed. Retrying.' ** Processing line: ~ local_state.http_boot = nil~ - Inside source: true *** True Line Result local_state.http_boot = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_http_changes~ - Inside source: true *** True Line Result def tick_http_changes ** Processing line: ~ return unless local_state.booted_at~ - Inside source: true *** True Line Result return unless local_state.booted_at ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !local_state.http_changes~ - Inside source: true *** True Line Result if !local_state.http_changes ** Processing line: ~ local_state.http_changes = args.gtk.http_get "http://#{get_server_ip_address}:9001/dragon/changes/"~ - Inside source: true *** True Line Result local_state.http_changes = args.gtk.http_get "http://#{get_server_ip_address}:9001/dragon/changes/" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if local_state.http_changes && local_state.http_changes[:http_response_code] == 200 && local_state.booted_at~ - Inside source: true *** True Line Result if local_state.http_changes && local_state.http_changes[:http_response_code] == 200 && local_state.booted_at ** Processing line: ~ local_state.last_greatest_tick = local_state.greatest_tick~ - Inside source: true *** True Line Result local_state.last_greatest_tick = local_state.greatest_tick ** Processing line: ~ # if the retrieval of changes.txt was successful~ - Inside source: true *** True Line Result # if the retrieval of changes.txt was successful ** Processing line: ~ local_state.http_changes[:response_data].each_line do |l|~ - Inside source: true *** True Line Result local_state.http_changes[:response_data].each_line do |l| ** Processing line: ~ if l.strip.length != 0~ - Inside source: true *** True Line Result if l.strip.length != 0 ** Processing line: ~ # within reload state for that specific changes hash~ - Inside source: true *** True Line Result # within reload state for that specific changes hash ** Processing line: ~ # set the last time the file was updated~ - Inside source: true *** True Line Result # set the last time the file was updated ** Processing line: ~ file_name, updated_at, key = l.strip.split(',')~ - Inside source: true *** True Line Result file_name, updated_at, key = l.strip.split(',') ** Processing line: ~ file_name.strip!~ - Inside source: true *** True Line Result file_name.strip! ** Processing line: ~ updated_at.strip!~ - Inside source: true *** True Line Result updated_at.strip! ** Processing line: ~ key.strip!~ - Inside source: true *** True Line Result key.strip! ** Processing line: ~ updated_at = updated_at.to_i~ - Inside source: true *** True Line Result updated_at = updated_at.to_i ** Processing line: ~ file_name = file_name.gsub("tmp/src_backup/", "")~ - Inside source: true *** True Line Result file_name = file_name.gsub("tmp/src_backup/", "") ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # keep an internal clock that denotes that current time on the~ - Inside source: true *** True Line Result # keep an internal clock that denotes that current time on the ** Processing line: ~ # dev machine~ - Inside source: true *** True Line Result # dev machine ** Processing line: ~ if updated_at > local_state.greatest_tick~ - Inside source: true *** True Line Result if updated_at > local_state.greatest_tick ** Processing line: ~ local_state.greatest_tick = updated_at~ - Inside source: true *** True Line Result local_state.greatest_tick = updated_at ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # create a new entry in change tracking for the file~ - Inside source: true *** True Line Result # create a new entry in change tracking for the file ** Processing line: ~ # for every file where the file was last updated, find all the ones where the time is not the same~ - Inside source: true *** True Line Result # for every file where the file was last updated, find all the ones where the time is not the same ** Processing line: ~ # and queue those to be retrieved and required~ - Inside source: true *** True Line Result # and queue those to be retrieved and required ** Processing line: ~ # if the last time the dev machine time was retrieved is less than the file time changed~ - Inside source: true *** True Line Result # if the last time the dev machine time was retrieved is less than the file time changed ** Processing line: ~ # then queue the file for reload~ - Inside source: true *** True Line Result # then queue the file for reload ** Processing line: ~ current_updated_at = (local_state.changes[key] || { updated_at: 0 })[:updated_at]~ - Inside source: true *** True Line Result current_updated_at = (local_state.changes[key] || { updated_at: 0 })[:updated_at] ** Processing line: ~ if updated_at > current_updated_at~ - Inside source: true *** True Line Result if updated_at > current_updated_at ** Processing line: ~ remote_log "* REMOTE CLIENT INFO: Queueing file #{file_name} for update."~ - Inside source: true *** True Line Result remote_log "* REMOTE CLIENT INFO: Queueing file #{file_name} for update." ** Processing line: ~ local_state.changes[key] = { key: key,~ - Inside source: true *** True Line Result local_state.changes[key] = { key: key, ** Processing line: ~ latest_file: file_name,~ - Inside source: true *** True Line Result latest_file: file_name, ** Processing line: ~ updated_at: updated_at }~ - Inside source: true *** True Line Result updated_at: updated_at } ** Processing line: ~ local_state.changes_queue << local_state.changes[key]~ - Inside source: true *** True Line Result local_state.changes_queue << local_state.changes[key] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # set the greatest tick/current time of the machine~ - Inside source: true *** True Line Result # set the greatest tick/current time of the machine ** Processing line: ~ local_state.http_changes = nil~ - Inside source: true *** True Line Result local_state.http_changes = nil ** Processing line: ~ elsif local_state.http_changes && local_state.http_changes[:http_response_code] == -1 && local_state.http_change[:complete] && local_state.booted_at~ - Inside source: true *** True Line Result elsif local_state.http_changes && local_state.http_changes[:http_response_code] == -1 && local_state.http_change[:complete] && local_state.booted_at ** Processing line: ~ local_state.http_changes = nil~ - Inside source: true *** True Line Result local_state.http_changes = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_process_queue~ - Inside source: true *** True Line Result def tick_process_queue ** Processing line: ~ return if local_state.http_file_changes # don't pop a file off the queue if there is an http request in flight~ - Inside source: true *** True Line Result return if local_state.http_file_changes # don't pop a file off the queue if there is an http request in flight ** Processing line: ~ return if local_state.processing_file_changes # don't pop a file if there is a file currently being processed~ - Inside source: true *** True Line Result return if local_state.processing_file_changes # don't pop a file if there is a file currently being processed ** Processing line: ~ return unless local_state.changes_queue.length > 0 # return if the queue is empty~ - Inside source: true *** True Line Result return unless local_state.changes_queue.length > 0 # return if the queue is empty ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if it isn't empty, pop the first file off the queue (FIFO)~ - Inside source: true *** True Line Result # if it isn't empty, pop the first file off the queue (FIFO) ** Processing line: ~ local_state.processing_file_changes = local_state.changes_queue.shift~ - Inside source: true *** True Line Result local_state.processing_file_changes = local_state.changes_queue.shift ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # create an http request for the file~ - Inside source: true *** True Line Result # create an http request for the file ** Processing line: ~ url = "http://#{get_server_ip_address}:9001/dragon/#{local_state.processing_file_changes[:latest_file]}"~ - Inside source: true *** True Line Result url = "http://#{get_server_ip_address}:9001/dragon/#{local_state.processing_file_changes[:latest_file]}" ** Processing line: ~ remote_log "* REMOTE CLIENT INFO: Getting new version of #{local_state.processing_file_changes[:latest_file]} (#{url})."~ - Inside source: true *** True Line Result remote_log "* REMOTE CLIENT INFO: Getting new version of #{local_state.processing_file_changes[:latest_file]} (#{url})." ** Processing line: ~ local_state.http_file_changes = args.gtk.http_get url~ - Inside source: true *** True Line Result local_state.http_file_changes = args.gtk.http_get url ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def tick_process_file_retrieval~ - Inside source: true *** True Line Result def tick_process_file_retrieval ** Processing line: ~ return if !local_state.http_file_changes~ - Inside source: true *** True Line Result return if !local_state.http_file_changes ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # if the http request has finished successfully~ - Inside source: true *** True Line Result # if the http request has finished successfully ** Processing line: ~ if local_state.http_file_changes[:http_response_code] == 200~ - Inside source: true *** True Line Result if local_state.http_file_changes[:http_response_code] == 200 ** Processing line: ~ file_key = local_state.processing_file_changes[:key]~ - Inside source: true *** True Line Result file_key = local_state.processing_file_changes[:key] ** Processing line: ~ # notify that a file will be reloaded~ - Inside source: true *** True Line Result # notify that a file will be reloaded ** Processing line: ~ remote_log "* REMOTE CLIENT INFO: Loading #{file_key}: #{local_state.processing_file_changes[:latest_file]}"~ - Inside source: true *** True Line Result remote_log "* REMOTE CLIENT INFO: Loading #{file_key}: #{local_state.processing_file_changes[:latest_file]}" ** Processing line: ~ remote_log "#{local_state.http_file_changes[:response_data]}"~ - Inside source: true *** True Line Result remote_log "#{local_state.http_file_changes[:response_data]}" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # write the latest file with what came back from the response data~ - Inside source: true *** True Line Result # write the latest file with what came back from the response data ** Processing line: ~ gtk.write_file "#{file_key}", local_state.http_file_changes[:response_data]~ - Inside source: true *** True Line Result gtk.write_file "#{file_key}", local_state.http_file_changes[:response_data] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # nil out the currently processing file so a new item can be processed from the queue~ - Inside source: true *** True Line Result # nil out the currently processing file so a new item can be processed from the queue ** Processing line: ~ # local_state.reloaded_files_times << local_state.processing_file_changes[:key]~ - Inside source: true *** True Line Result # local_state.reloaded_files_times << local_state.processing_file_changes[:key] ** Processing line: ~ local_state.http_file_changes = nil~ - Inside source: true *** True Line Result local_state.http_file_changes = nil ** Processing line: ~ local_state.processing_file_changes = nil~ - Inside source: true *** True Line Result local_state.processing_file_changes = nil ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** runtime/autocomplete.rb~ - Header detected. *** True Line Result *** True Line Result *** runtime/autocomplete.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/runtime/autocomplete.rb~ - Inside source: true *** True Line Result # ./dragon/runtime/autocomplete.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # autocomplete.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # autocomplete.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Runtime~ - Inside source: true *** True Line Result class Runtime ** Processing line: ~ module Autocomplete~ - Inside source: true *** True Line Result module Autocomplete ** Processing line: ~ def autocomplete_parse opts~ - Inside source: true *** True Line Result def autocomplete_parse opts ** Processing line: ~ if opts[:file] && !opts[:text]~ - Inside source: true *** True Line Result if opts[:file] && !opts[:text] ** Processing line: ~ opts[:text] = read_file opts[:file]~ - Inside source: true *** True Line Result opts[:text] = read_file opts[:file] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ text = opts[:text]~ - Inside source: true *** True Line Result text = opts[:text] ** Processing line: ~ index = opts[:index]~ - Inside source: true *** True Line Result index = opts[:index] ** Processing line: ~ sum = 0~ - Inside source: true *** True Line Result sum = 0 ** Processing line: ~ lines = text.each_line.to_a.map do |l|~ - Inside source: true *** True Line Result lines = text.each_line.to_a.map do |l| ** Processing line: ~ sum += l.length~ - Inside source: true *** True Line Result sum += l.length ** Processing line: ~ { line: l, length: l.length, sum: sum }~ - Inside source: true *** True Line Result { line: l, length: l.length, sum: sum } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ cursor_line = lines.find { |l| l[:sum] >= index }~ - Inside source: true *** True Line Result cursor_line = lines.find { |l| l[:sum] >= index } ** Processing line: ~ previous_line = lines.find { |l| l[:sum] < index }~ - Inside source: true *** True Line Result previous_line = lines.find { |l| l[:sum] < index } ** Processing line: ~ previous_line ||= { sum: 0 }~ - Inside source: true *** True Line Result previous_line ||= { sum: 0 } ** Processing line: ~ if cursor_line~ - Inside source: true *** True Line Result if cursor_line ** Processing line: ~ sub_index = index - previous_line[:sum]~ - Inside source: true *** True Line Result sub_index = index - previous_line[:sum] ** Processing line: ~ word = (cursor_line[:line][0..sub_index - 1]).strip~ - Inside source: true *** True Line Result word = (cursor_line[:line][0..sub_index - 1]).strip ** Processing line: ~ token = (word.split " ")[-1]~ - Inside source: true *** True Line Result token = (word.split " ")[-1] ** Processing line: ~ dots = (token.split ".").flat_map { |s| s.split "[" }.flat_map { |s| s.split "]" }.flat_map { |s| s.split "(" }.flat_map { |s| s.split ")" }~ - Inside source: true *** True Line Result dots = (token.split ".").flat_map { |s| s.split "[" }.flat_map { |s| s.split "]" }.flat_map { |s| s.split "(" }.flat_map { |s| s.split ")" } ** Processing line: ~ dot = dots[-1]~ - Inside source: true *** True Line Result dot = dots[-1] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ text: opts[:text],~ - Inside source: true *** True Line Result text: opts[:text], ** Processing line: ~ file: opts[:file],~ - Inside source: true *** True Line Result file: opts[:file], ** Processing line: ~ index: opts[:index],~ - Inside source: true *** True Line Result index: opts[:index], ** Processing line: ~ cursor_line: cursor_line,~ - Inside source: true *** True Line Result cursor_line: cursor_line, ** Processing line: ~ previous_line: previous_line,~ - Inside source: true *** True Line Result previous_line: previous_line, ** Processing line: ~ word: word,~ - Inside source: true *** True Line Result word: word, ** Processing line: ~ token: token,~ - Inside source: true *** True Line Result token: token, ** Processing line: ~ dots: dots,~ - Inside source: true *** True Line Result dots: dots, ** Processing line: ~ dot: dot~ - Inside source: true *** True Line Result dot: dot ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def autocomplete_filter_methods keys, *ignores~ - Inside source: true *** True Line Result def autocomplete_filter_methods keys, *ignores ** Processing line: ~ ignores ||= []~ - Inside source: true *** True Line Result ignores ||= [] ** Processing line: ~ ignores = [ignores].flatten~ - Inside source: true *** True Line Result ignores = [ignores].flatten ** Processing line: ~ keys = keys.map { |k| k.to_s }~ - Inside source: true *** True Line Result keys = keys.map { |k| k.to_s } ** Processing line: ~ keys = keys.reject { |k| k.include? '"' }~ - Inside source: true *** True Line Result keys = keys.reject { |k| k.include? '"' } ** Processing line: ~ .reject { |k| k.start_with? "'" }~ - Inside source: true *** True Line Result .reject { |k| k.start_with? "'" } ** Processing line: ~ .reject { |k| k.include? "," }~ - Inside source: true *** True Line Result .reject { |k| k.include? "," } ** Processing line: ~ .reject { |k| k.start_with? "#" }~ - Inside source: true *** True Line Result .reject { |k| k.start_with? "#" } ** Processing line: ~ others = ["def", "end"] +~ - Inside source: true *** True Line Result others = ["def", "end"] + ** Processing line: ~ [ :entity_keys_by_ref,~ - Inside source: true *** True Line Result [ :entity_keys_by_ref, ** Processing line: ~ :entity_name,~ - Inside source: true *** True Line Result :entity_name, ** Processing line: ~ :as_hash,~ - Inside source: true *** True Line Result :as_hash, ** Processing line: ~ :clear!,~ - Inside source: true *** True Line Result :clear!, ** Processing line: ~ :created_at_elapsed,~ - Inside source: true *** True Line Result :created_at_elapsed, ** Processing line: ~ :entity_id,~ - Inside source: true *** True Line Result :entity_id, ** Processing line: ~ "entity_id=",~ - Inside source: true *** True Line Result "entity_id=", ** Processing line: ~ "tick_count=",~ - Inside source: true *** True Line Result "tick_count=", ** Processing line: ~ :global_created_at_elapsed,~ - Inside source: true *** True Line Result :global_created_at_elapsed, ** Processing line: ~ :load_entity_data!,~ - Inside source: true *** True Line Result :load_entity_data!, ** Processing line: ~ :meta,~ - Inside source: true *** True Line Result :meta, ** Processing line: ~ :meta!,~ - Inside source: true *** True Line Result :meta!, ** Processing line: ~ :new?,~ - Inside source: true *** True Line Result :new?, ** Processing line: ~ :old?,~ - Inside source: true *** True Line Result :old?, ** Processing line: ~ :__original_eq_eq__, :set!,~ - Inside source: true *** True Line Result :__original_eq_eq__, :set!, ** Processing line: ~ :update_entity_keys_by_ref,~ - Inside source: true *** True Line Result :update_entity_keys_by_ref, ** Processing line: ~ :with_meta] +~ - Inside source: true *** True Line Result :with_meta] + ** Processing line: ~ ignores + keys.find_all { |k| k.to_s.to_i.to_s == k.to_s }~ - Inside source: true *** True Line Result ignores + keys.find_all { |k| k.to_s.to_i.to_s == k.to_s } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ final = (keys - (others.map { |m| m.to_s })).uniq~ - Inside source: true *** True Line Result final = (keys - (others.map { |m| m.to_s })).uniq ** Processing line: ~ final~ - Inside source: true *** True Line Result final ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def suggest_autocompletion opts~ - Inside source: true *** True Line Result def suggest_autocompletion opts ** Processing line: ~ parse_result = autocomplete_parse opts~ - Inside source: true *** True Line Result parse_result = autocomplete_parse opts ** Processing line: ~ return [] unless parse_result[:cursor_line]~ - Inside source: true *** True Line Result return [] unless parse_result[:cursor_line] ** Processing line: ~ text = parse_result[:text]~ - Inside source: true *** True Line Result text = parse_result[:text] ** Processing line: ~ word = parse_result[:word]~ - Inside source: true *** True Line Result word = parse_result[:word] ** Processing line: ~ token = parse_result[:token]~ - Inside source: true *** True Line Result token = parse_result[:token] ** Processing line: ~ dots = parse_result[:dots]~ - Inside source: true *** True Line Result dots = parse_result[:dots] ** Processing line: ~ dot = parse_result[:dot]~ - Inside source: true *** True Line Result dot = parse_result[:dot] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return [] if word.strip.start_with? "#"~ - Inside source: true *** True Line Result return [] if word.strip.start_with? "#" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if word[-1] == "." && token~ - Inside source: true *** True Line Result if word[-1] == "." && token ** Processing line: ~ lookup = {~ - Inside source: true *** True Line Result lookup = { ** Processing line: ~ 'args' => lambda { $gtk.args.autocomplete_methods },~ - Inside source: true *** True Line Result 'args' => lambda { $gtk.args.autocomplete_methods }, ** Processing line: ~ 'inputs' => lambda { $gtk.args.inputs.autocomplete_methods },~ - Inside source: true *** True Line Result 'inputs' => lambda { $gtk.args.inputs.autocomplete_methods }, ** Processing line: ~ 'geometry' => lambda { $gtk.args.geometry.autocomplete_methods },~ - Inside source: true *** True Line Result 'geometry' => lambda { $gtk.args.geometry.autocomplete_methods }, ** Processing line: ~ 'outputs' => lambda { $gtk.args.outputs.autocomplete_methods },~ - Inside source: true *** True Line Result 'outputs' => lambda { $gtk.args.outputs.autocomplete_methods }, ** Processing line: ~ 'layout' => lambda { $gtk.args.layouts.autocomplete_methods },~ - Inside source: true *** True Line Result 'layout' => lambda { $gtk.args.layouts.autocomplete_methods }, ** Processing line: ~ 'keyboard' => lambda { $gtk.args.keyboard.autocomplete_methods },~ - Inside source: true *** True Line Result 'keyboard' => lambda { $gtk.args.keyboard.autocomplete_methods }, ** Processing line: ~ 'key_down' => lambda { $gtk.args.keyboard.key_down.autocomplete_methods },~ - Inside source: true *** True Line Result 'key_down' => lambda { $gtk.args.keyboard.key_down.autocomplete_methods }, ** Processing line: ~ 'key_up' => lambda { $gtk.args.keyboard.key_up.autocomplete_methods },~ - Inside source: true *** True Line Result 'key_up' => lambda { $gtk.args.keyboard.key_up.autocomplete_methods }, ** Processing line: ~ 'state' => lambda { $gtk.args.state.autocomplete_methods },~ - Inside source: true *** True Line Result 'state' => lambda { $gtk.args.state.autocomplete_methods }, ** Processing line: ~ 'fn' => lambda { $gtk.args.fn.autocomplete_methods },~ - Inside source: true *** True Line Result 'fn' => lambda { $gtk.args.fn.autocomplete_methods }, ** Processing line: ~ '$gtk' => lambda { $gtk.autocomplete_methods },~ - Inside source: true *** True Line Result '$gtk' => lambda { $gtk.autocomplete_methods }, ** Processing line: ~ 'gtk' => lambda { $gtk.autocomplete_methods },~ - Inside source: true *** True Line Result 'gtk' => lambda { $gtk.autocomplete_methods }, ** Processing line: ~ 'mouse' => lambda { $gtk.args.inputs.mouse.autocomplete_methods },~ - Inside source: true *** True Line Result 'mouse' => lambda { $gtk.args.inputs.mouse.autocomplete_methods }, ** Processing line: ~ 'click' => lambda { [:x, :y, :point] }~ - Inside source: true *** True Line Result 'click' => lambda { [:x, :y, :point] } ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ lookup_result = lookup[dot]~ - Inside source: true *** True Line Result lookup_result = lookup[dot] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ return autocomplete_filter_methods lookup_result.call if lookup_result~ - Inside source: true *** True Line Result return autocomplete_filter_methods lookup_result.call if lookup_result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if dot[0].upcase == dot[0] && (Object.const_defined? dot.to_sym)~ - Inside source: true *** True Line Result if dot[0].upcase == dot[0] && (Object.const_defined? dot.to_sym) ** Processing line: ~ return (Object.const_get dot.to_sym).autocomplete_methods~ - Inside source: true *** True Line Result return (Object.const_get dot.to_sym).autocomplete_methods ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ start_collecting = false~ - Inside source: true *** True Line Result start_collecting = false ** Processing line: ~ dots_after_state = dots.find_all do |s|~ - Inside source: true *** True Line Result dots_after_state = dots.find_all do |s| ** Processing line: ~ if s == "state"~ - Inside source: true *** True Line Result if s == "state" ** Processing line: ~ start_collecting = true~ - Inside source: true *** True Line Result start_collecting = true ** Processing line: ~ false~ - Inside source: true *** True Line Result false ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ start_collecting~ - Inside source: true *** True Line Result start_collecting ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ target = $gtk.args.state~ - Inside source: true *** True Line Result target = $gtk.args.state ** Processing line: ~ dots_after_state.each do |k|~ - Inside source: true *** True Line Result dots_after_state.each do |k| ** Processing line: ~ target = target.as_hash[k.to_sym] if target.respond_to? :as_hash~ - Inside source: true *** True Line Result target = target.as_hash[k.to_sym] if target.respond_to? :as_hash ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if target.respond_to? :as_hash~ - Inside source: true *** True Line Result if target.respond_to? :as_hash ** Processing line: ~ return autocomplete_filter_methods target.as_hash.keys~ - Inside source: true *** True Line Result return autocomplete_filter_methods target.as_hash.keys ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ return autocomplete_filter_methods target.autocomplete_methods~ - Inside source: true *** True Line Result return autocomplete_filter_methods target.autocomplete_methods ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ text = text.each_line.reject { |l| l.strip.start_with? "#" }.join "\n"~ - Inside source: true *** True Line Result text = text.each_line.reject { |l| l.strip.start_with? "#" }.join "\n" ** Processing line: ~ text = text.each_line.map { |l| l.split("#").first }.join "\n"~ - Inside source: true *** True Line Result text = text.each_line.map { |l| l.split("#").first }.join "\n" ** Processing line: ~ text.gsub!("[", " ")~ - Inside source: true *** True Line Result text.gsub!("[", " ") ** Processing line: ~ text.gsub!("]", " ")~ - Inside source: true *** True Line Result text.gsub!("]", " ") ** Processing line: ~ text.gsub!("(", " ")~ - Inside source: true *** True Line Result text.gsub!("(", " ") ** Processing line: ~ text.gsub!(")", " ")~ - Inside source: true *** True Line Result text.gsub!(")", " ") ** Processing line: ~ text.gsub!(":", "")~ - Inside source: true *** True Line Result text.gsub!(":", "") ** Processing line: ~ text.gsub!(".", " ")~ - Inside source: true *** True Line Result text.gsub!(".", " ") ** Processing line: ~ text.gsub!("=", " ")~ - Inside source: true *** True Line Result text.gsub!("=", " ") ** Processing line: ~ return (autocomplete_filter_methods (text.split " "),~ - Inside source: true *** True Line Result return (autocomplete_filter_methods (text.split " "), ** Processing line: ~ :gtk, :false, :true, :args, :suppress_mailbox, :end)~ - Inside source: true *** True Line Result :gtk, :false, :true, :args, :suppress_mailbox, :end) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end # end Autocomplete~ - Inside source: true *** True Line Result end # end Autocomplete ** Processing line: ~ end # end Runtime~ - Inside source: true *** True Line Result end # end Runtime ** Processing line: ~ end # end GTK~ - Inside source: true *** True Line Result end # end GTK ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** runtime/benchmark.rb~ - Header detected. *** True Line Result *** True Line Result *** runtime/benchmark.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/runtime/benchmark.rb~ - Inside source: true *** True Line Result # ./dragon/runtime/benchmark.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # benchmark.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # benchmark.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Runtime~ - Inside source: true *** True Line Result class Runtime ** Processing line: ~ module Benchmark~ - Inside source: true *** True Line Result module Benchmark ** Processing line: ~ def benchmark_single iterations, name, proc~ - Inside source: true *** True Line Result def benchmark_single iterations, name, proc ** Processing line: ~ log <<-S~ - Inside source: true *** True Line Result log <<-S ** Processing line: ~ ** Invoking :#{name}...~ - Inside source: true *** True Line Result ** Invoking :#{name}... ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ idx = 0~ - Inside source: true *** True Line Result idx = 0 ** Processing line: ~ r = nil~ - Inside source: true *** True Line Result r = nil ** Processing line: ~ time_start = Time.now~ - Inside source: true *** True Line Result time_start = Time.now ** Processing line: ~ while idx < iterations~ - Inside source: true *** True Line Result while idx < iterations ** Processing line: ~ r = proc.call~ - Inside source: true *** True Line Result r = proc.call ** Processing line: ~ idx += 1~ - Inside source: true *** True Line Result idx += 1 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ result = (Time.now - time_start).round 3~ - Inside source: true *** True Line Result result = (Time.now - time_start).round 3 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ { name: name,~ - Inside source: true *** True Line Result { name: name, ** Processing line: ~ time: result,~ - Inside source: true *** True Line Result time: result, ** Processing line: ~ time_ms: (result * 1000).to_i }~ - Inside source: true *** True Line Result time_ms: (result * 1000).to_i } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def benchmark opts = {}~ - Inside source: true *** True Line Result def benchmark opts = {} ** Processing line: ~ iterations = opts.iterations~ - Inside source: true *** True Line Result iterations = opts.iterations ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ log <<-S~ - Inside source: true *** True Line Result log <<-S ** Processing line: ~ * BENCHMARK: Started~ - Inside source: true *** True Line Result * BENCHMARK: Started ** Processing line: ~ ** Caller: #{(caller || []).first}~ - Inside source: true *** True Line Result ** Caller: #{(caller || []).first} ** Processing line: ~ ** Iterations: #{iterations}~ - Inside source: true *** True Line Result ** Iterations: #{iterations} ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ procs = opts.find_all { |k, v| v.respond_to? :call }~ - Inside source: true *** True Line Result procs = opts.find_all { |k, v| v.respond_to? :call } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ times = procs.map do |(name, proc)|~ - Inside source: true *** True Line Result times = procs.map do |(name, proc)| ** Processing line: ~ benchmark_single iterations, name, proc~ - Inside source: true *** True Line Result benchmark_single iterations, name, proc ** Processing line: ~ end.sort_by { |r| r.time }~ - Inside source: true *** True Line Result end.sort_by { |r| r.time } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ first_place = times.first~ - Inside source: true *** True Line Result first_place = times.first ** Processing line: ~ second_place = times.second || first_place~ - Inside source: true *** True Line Result second_place = times.second || first_place ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ times = times.map do |candidate|~ - Inside source: true *** True Line Result times = times.map do |candidate| ** Processing line: ~ average_time = first_place.time~ - Inside source: true *** True Line Result average_time = first_place.time ** Processing line: ~ .add(candidate.time)~ - Inside source: true *** True Line Result .add(candidate.time) ** Processing line: ~ .abs~ - Inside source: true *** True Line Result .abs ** Processing line: ~ .fdiv(2)~ - Inside source: true *** True Line Result .fdiv(2) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ difference_percentage = 0~ - Inside source: true *** True Line Result difference_percentage = 0 ** Processing line: ~ if average_time == 0~ - Inside source: true *** True Line Result if average_time == 0 ** Processing line: ~ difference_percentage = 0~ - Inside source: true *** True Line Result difference_percentage = 0 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ difference_percentage = first_place.time~ - Inside source: true *** True Line Result difference_percentage = first_place.time ** Processing line: ~ .subtract(candidate.time)~ - Inside source: true *** True Line Result .subtract(candidate.time) ** Processing line: ~ .abs~ - Inside source: true *** True Line Result .abs ** Processing line: ~ .fdiv(average_time)~ - Inside source: true *** True Line Result .fdiv(average_time) ** Processing line: ~ .imult(100)~ - Inside source: true *** True Line Result .imult(100) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ difference_time = ((first_place.time - candidate.time) * 1000).round~ - Inside source: true *** True Line Result difference_time = ((first_place.time - candidate.time) * 1000).round ** Processing line: ~ candidate.merge(difference_percentage: difference_percentage,~ - Inside source: true *** True Line Result candidate.merge(difference_percentage: difference_percentage, ** Processing line: ~ difference_time: difference_time)~ - Inside source: true *** True Line Result difference_time: difference_time) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ too_small_to_measure = false~ - Inside source: true *** True Line Result too_small_to_measure = false ** Processing line: ~ if (first_place.time + second_place.time) == 0~ - Inside source: true *** True Line Result if (first_place.time + second_place.time) == 0 ** Processing line: ~ too_small_to_measure = true~ - Inside source: true *** True Line Result too_small_to_measure = true ** Processing line: ~ difference_percentage = 0~ - Inside source: true *** True Line Result difference_percentage = 0 ** Processing line: ~ log <<-S~ - Inside source: true *** True Line Result log <<-S ** Processing line: ~ * BENCHMARK: Average time for experiments were too small. Increase the number of iterations.~ - Inside source: true *** True Line Result * BENCHMARK: Average time for experiments were too small. Increase the number of iterations. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ difference_percentage = (((first_place.time - second_place.time).abs.fdiv((first_place.time + second_place.time).abs.fdiv(2))) * 100).round~ - Inside source: true *** True Line Result difference_percentage = (((first_place.time - second_place.time).abs.fdiv((first_place.time + second_place.time).abs.fdiv(2))) * 100).round ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ difference_time = first_place.time.-(second_place.time).*(1000).abs.round~ - Inside source: true *** True Line Result difference_time = first_place.time.-(second_place.time).*(1000).abs.round ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ r = {~ - Inside source: true *** True Line Result r = { ** Processing line: ~ iterations: iterations,~ - Inside source: true *** True Line Result iterations: iterations, ** Processing line: ~ first_place: first_place,~ - Inside source: true *** True Line Result first_place: first_place, ** Processing line: ~ second_place: second_place,~ - Inside source: true *** True Line Result second_place: second_place, ** Processing line: ~ difference_time: difference_time,~ - Inside source: true *** True Line Result difference_time: difference_time, ** Processing line: ~ difference_percentage: difference_percentage,~ - Inside source: true *** True Line Result difference_percentage: difference_percentage, ** Processing line: ~ times: times,~ - Inside source: true *** True Line Result times: times, ** Processing line: ~ too_small_to_measure: too_small_to_measure~ - Inside source: true *** True Line Result too_small_to_measure: too_small_to_measure ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ log_message = []~ - Inside source: true *** True Line Result log_message = [] ** Processing line: ~ only_one_result = first_place.name == second_place.name~ - Inside source: true *** True Line Result only_one_result = first_place.name == second_place.name ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if only_one_result~ - Inside source: true *** True Line Result if only_one_result ** Processing line: ~ log <<-S~ - Inside source: true *** True Line Result log <<-S ** Processing line: ~ * BENCHMARK: #{r.first_place.name} completed in #{r.first_place.time_ms}ms."~ - Inside source: true *** True Line Result * BENCHMARK: #{r.first_place.name} completed in #{r.first_place.time_ms}ms." ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ log <<-S~ - Inside source: true *** True Line Result log <<-S ** Processing line: ~ * BENCHMARK: #{r.message}~ - Inside source: true *** True Line Result * BENCHMARK: #{r.message} ** Processing line: ~ ** Fastest: #{r.first_place.name.inspect}~ - Inside source: true *** True Line Result ** Fastest: #{r.first_place.name.inspect} ** Processing line: ~ ** Second: #{r.second_place.name.inspect}~ - Inside source: true *** True Line Result ** Second: #{r.second_place.name.inspect} ** Processing line: ~ ** Margin: #{r.difference_percentage}% (#{r.difference_time.abs}ms) #{r.first_place.time_ms}ms vs #{r.second_place.time_ms}ms.~ - Inside source: true *** True Line Result ** Margin: #{r.difference_percentage}% (#{r.difference_time.abs}ms) #{r.first_place.time_ms}ms vs #{r.second_place.time_ms}ms. ** Processing line: ~ ** Times:~ - Inside source: true *** True Line Result ** Times: ** Processing line: ~ #{r.times.map { |t| "*** #{t.name}: #{t.time_ms}ms (#{t.difference_percentage}% #{t.difference_time.abs}ms)." }.join("\n")}~ - Inside source: true *** True Line Result #{r.times.map { |t| "*** #{t.name}: #{t.time_ms}ms (#{t.difference_percentage}% #{t.difference_time.abs}ms)." }.join("\n")} ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ r~ - Inside source: true *** True Line Result r ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** runtime/draw.rb~ - Header detected. *** True Line Result *** True Line Result *** runtime/draw.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/runtime/draw.rb~ - Inside source: true *** True Line Result # ./dragon/runtime/draw.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # draw.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # draw.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Runtime~ - Inside source: true *** True Line Result class Runtime ** Processing line: ~ module Draw~ - Inside source: true *** True Line Result module Draw ** Processing line: ~ def primitives pass~ - Inside source: true *** True Line Result def primitives pass ** Processing line: ~ if $top_level.respond_to? :primitives_override~ - Inside source: true *** True Line Result if $top_level.respond_to? :primitives_override ** Processing line: ~ return $top_level.tick_render @args, pass~ - Inside source: true *** True Line Result return $top_level.tick_render @args, pass ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ fn.each_send pass.solids, self, :draw_solid~ - Inside source: true *** True Line Result fn.each_send pass.solids, self, :draw_solid ** Processing line: ~ fn.each_send pass.static_solids, self, :draw_solid~ - Inside source: true *** True Line Result fn.each_send pass.static_solids, self, :draw_solid ** Processing line: ~ fn.each_send pass.sprites, self, :draw_sprite~ - Inside source: true *** True Line Result fn.each_send pass.sprites, self, :draw_sprite ** Processing line: ~ fn.each_send pass.static_sprites, self, :draw_sprite~ - Inside source: true *** True Line Result fn.each_send pass.static_sprites, self, :draw_sprite ** Processing line: ~ fn.each_send pass.primitives, self, :draw_primitive~ - Inside source: true *** True Line Result fn.each_send pass.primitives, self, :draw_primitive ** Processing line: ~ fn.each_send pass.static_primitives, self, :draw_primitive~ - Inside source: true *** True Line Result fn.each_send pass.static_primitives, self, :draw_primitive ** Processing line: ~ fn.each_send pass.labels, self, :draw_label~ - Inside source: true *** True Line Result fn.each_send pass.labels, self, :draw_label ** Processing line: ~ fn.each_send pass.static_labels, self, :draw_label~ - Inside source: true *** True Line Result fn.each_send pass.static_labels, self, :draw_label ** Processing line: ~ fn.each_send pass.lines, self, :draw_line~ - Inside source: true *** True Line Result fn.each_send pass.lines, self, :draw_line ** Processing line: ~ fn.each_send pass.static_lines, self, :draw_line~ - Inside source: true *** True Line Result fn.each_send pass.static_lines, self, :draw_line ** Processing line: ~ fn.each_send pass.borders, self, :draw_border~ - Inside source: true *** True Line Result fn.each_send pass.borders, self, :draw_border ** Processing line: ~ fn.each_send pass.static_borders, self, :draw_border~ - Inside source: true *** True Line Result fn.each_send pass.static_borders, self, :draw_border ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !self.production~ - Inside source: true *** True Line Result if !self.production ** Processing line: ~ fn.each_send pass.debug, self, :draw_primitive~ - Inside source: true *** True Line Result fn.each_send pass.debug, self, :draw_primitive ** Processing line: ~ fn.each_send pass.static_debug, self, :draw_primitive~ - Inside source: true *** True Line Result fn.each_send pass.static_debug, self, :draw_primitive ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ fn.each_send pass.reserved, self, :draw_primitive~ - Inside source: true *** True Line Result fn.each_send pass.reserved, self, :draw_primitive ** Processing line: ~ fn.each_send pass.static_reserved, self, :draw_primitive~ - Inside source: true *** True Line Result fn.each_send pass.static_reserved, self, :draw_primitive ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ pause!~ - Inside source: true *** True Line Result pause! ** Processing line: ~ pretty_print_exception_and_export! e~ - Inside source: true *** True Line Result pretty_print_exception_and_export! e ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw_solid s~ - Inside source: true *** True Line Result def draw_solid s ** Processing line: ~ return unless s~ - Inside source: true *** True Line Result return unless s ** Processing line: ~ if s.respond_to? :draw_override~ - Inside source: true *** True Line Result if s.respond_to? :draw_override ** Processing line: ~ s.draw_override @ffi_draw~ - Inside source: true *** True Line Result s.draw_override @ffi_draw ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ s = s.as_hash if s.is_a? OpenEntity~ - Inside source: true *** True Line Result s = s.as_hash if s.is_a? OpenEntity ** Processing line: ~ @ffi_draw.draw_solid_2 s.x, s.y, s.w, s.h,~ - Inside source: true *** True Line Result @ffi_draw.draw_solid_2 s.x, s.y, s.w, s.h, ** Processing line: ~ s.r, s.g, s.b, s.a,~ - Inside source: true *** True Line Result s.r, s.g, s.b, s.a, ** Processing line: ~ (s.blendmode_enum || 1)~ - Inside source: true *** True Line Result (s.blendmode_enum || 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise_conversion_for_rendering_failed s, e, :solid~ - Inside source: true *** True Line Result raise_conversion_for_rendering_failed s, e, :solid ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw_sprite s~ - Inside source: true *** True Line Result def draw_sprite s ** Processing line: ~ return unless s~ - Inside source: true *** True Line Result return unless s ** Processing line: ~ if s.respond_to? :draw_override~ - Inside source: true *** True Line Result if s.respond_to? :draw_override ** Processing line: ~ s.draw_override @ffi_draw~ - Inside source: true *** True Line Result s.draw_override @ffi_draw ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ s = s.as_hash if s.is_a? OpenEntity~ - Inside source: true *** True Line Result s = s.as_hash if s.is_a? OpenEntity ** Processing line: ~ @ffi_draw.draw_sprite_4 s.x, s.y, s.w, s.h,~ - Inside source: true *** True Line Result @ffi_draw.draw_sprite_4 s.x, s.y, s.w, s.h, ** Processing line: ~ (s.path || '').to_s,~ - Inside source: true *** True Line Result (s.path || '').to_s, ** Processing line: ~ s.angle,~ - Inside source: true *** True Line Result s.angle, ** Processing line: ~ s.a, s.r, s.g, s.b,~ - Inside source: true *** True Line Result s.a, s.r, s.g, s.b, ** Processing line: ~ s.tile_x, s.tile_y, s.tile_w, s.tile_h,~ - Inside source: true *** True Line Result s.tile_x, s.tile_y, s.tile_w, s.tile_h, ** Processing line: ~ !!s.flip_horizontally, !!s.flip_vertically,~ - Inside source: true *** True Line Result !!s.flip_horizontally, !!s.flip_vertically, ** Processing line: ~ s.angle_anchor_x, s.angle_anchor_y,~ - Inside source: true *** True Line Result s.angle_anchor_x, s.angle_anchor_y, ** Processing line: ~ s.source_x, s.source_y, s.source_w, s.source_h,~ - Inside source: true *** True Line Result s.source_x, s.source_y, s.source_w, s.source_h, ** Processing line: ~ (s.blendmode_enum || 1)~ - Inside source: true *** True Line Result (s.blendmode_enum || 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise_conversion_for_rendering_failed s, e, :sprite~ - Inside source: true *** True Line Result raise_conversion_for_rendering_failed s, e, :sprite ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw_screenshot s~ - Inside source: true *** True Line Result def draw_screenshot s ** Processing line: ~ return unless s~ - Inside source: true *** True Line Result return unless s ** Processing line: ~ if s.respond_to? :draw_override~ - Inside source: true *** True Line Result if s.respond_to? :draw_override ** Processing line: ~ s.draw_override @ffi_draw~ - Inside source: true *** True Line Result s.draw_override @ffi_draw ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ s = s.as_hash if s.is_a? OpenEntity~ - Inside source: true *** True Line Result s = s.as_hash if s.is_a? OpenEntity ** Processing line: ~ @ffi_draw.draw_screenshot (s.path || '').to_s,~ - Inside source: true *** True Line Result @ffi_draw.draw_screenshot (s.path || '').to_s, ** Processing line: ~ s.x, s.y, s.w, s.h,~ - Inside source: true *** True Line Result s.x, s.y, s.w, s.h, ** Processing line: ~ s.angle,~ - Inside source: true *** True Line Result s.angle, ** Processing line: ~ s.a, s.r, s.g, s.b,~ - Inside source: true *** True Line Result s.a, s.r, s.g, s.b, ** Processing line: ~ s.tile_x, s.tile_y, s.tile_w, s.tile_h,~ - Inside source: true *** True Line Result s.tile_x, s.tile_y, s.tile_w, s.tile_h, ** Processing line: ~ !!s.flip_horizontally, !!s.flip_vertically,~ - Inside source: true *** True Line Result !!s.flip_horizontally, !!s.flip_vertically, ** Processing line: ~ s.angle_anchor_x, s.angle_anchor_y,~ - Inside source: true *** True Line Result s.angle_anchor_x, s.angle_anchor_y, ** Processing line: ~ s.source_x, s.source_y, s.source_w, s.source_h~ - Inside source: true *** True Line Result s.source_x, s.source_y, s.source_w, s.source_h ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise_conversion_for_rendering_failed s, e, :screenshot~ - Inside source: true *** True Line Result raise_conversion_for_rendering_failed s, e, :screenshot ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw_label l~ - Inside source: true *** True Line Result def draw_label l ** Processing line: ~ return unless l~ - Inside source: true *** True Line Result return unless l ** Processing line: ~ if l.respond_to? :draw_override~ - Inside source: true *** True Line Result if l.respond_to? :draw_override ** Processing line: ~ l.draw_override @ffi_draw~ - Inside source: true *** True Line Result l.draw_override @ffi_draw ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ l = l.as_hash if l.is_a? OpenEntity~ - Inside source: true *** True Line Result l = l.as_hash if l.is_a? OpenEntity ** Processing line: ~ @ffi_draw.draw_label_3 l.x, l.y,~ - Inside source: true *** True Line Result @ffi_draw.draw_label_3 l.x, l.y, ** Processing line: ~ (l.text || '').to_s,~ - Inside source: true *** True Line Result (l.text || '').to_s, ** Processing line: ~ l.size_enum, l.alignment_enum,~ - Inside source: true *** True Line Result l.size_enum, l.alignment_enum, ** Processing line: ~ l.r, l.g, l.b, l.a,~ - Inside source: true *** True Line Result l.r, l.g, l.b, l.a, ** Processing line: ~ l.font,~ - Inside source: true *** True Line Result l.font, ** Processing line: ~ (l.vertical_alignment_enum || 2),~ - Inside source: true *** True Line Result (l.vertical_alignment_enum || 2), ** Processing line: ~ (l.blendmode_enum || 1)~ - Inside source: true *** True Line Result (l.blendmode_enum || 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise_conversion_for_rendering_failed l, e, :label~ - Inside source: true *** True Line Result raise_conversion_for_rendering_failed l, e, :label ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw_line l~ - Inside source: true *** True Line Result def draw_line l ** Processing line: ~ return unless l~ - Inside source: true *** True Line Result return unless l ** Processing line: ~ if l.respond_to? :draw_override~ - Inside source: true *** True Line Result if l.respond_to? :draw_override ** Processing line: ~ l.draw_override @ffi_draw~ - Inside source: true *** True Line Result l.draw_override @ffi_draw ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ l = l.as_hash if l.is_a? OpenEntity~ - Inside source: true *** True Line Result l = l.as_hash if l.is_a? OpenEntity ** Processing line: ~ if l.x2~ - Inside source: true *** True Line Result if l.x2 ** Processing line: ~ @ffi_draw.draw_line_2 l.x, l.y, l.x2, l.y2,~ - Inside source: true *** True Line Result @ffi_draw.draw_line_2 l.x, l.y, l.x2, l.y2, ** Processing line: ~ l.r, l.g, l.b, l.a,~ - Inside source: true *** True Line Result l.r, l.g, l.b, l.a, ** Processing line: ~ (l.blendmode_enum || 1)~ - Inside source: true *** True Line Result (l.blendmode_enum || 1) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ w = l.w || 0~ - Inside source: true *** True Line Result w = l.w || 0 ** Processing line: ~ w = 1 if w == 0~ - Inside source: true *** True Line Result w = 1 if w == 0 ** Processing line: ~ h = l.h || 0~ - Inside source: true *** True Line Result h = l.h || 0 ** Processing line: ~ h = 1 if h == 0~ - Inside source: true *** True Line Result h = 1 if h == 0 ** Processing line: ~ @ffi_draw.draw_line_2 l.x, l.y,~ - Inside source: true *** True Line Result @ffi_draw.draw_line_2 l.x, l.y, ** Processing line: ~ l.x + w - 1,~ - Inside source: true *** True Line Result l.x + w - 1, ** Processing line: ~ l.y + h - 1,~ - Inside source: true *** True Line Result l.y + h - 1, ** Processing line: ~ l.r, l.g, l.b, l.a,~ - Inside source: true *** True Line Result l.r, l.g, l.b, l.a, ** Processing line: ~ (l.blendmode_enum || 1)~ - Inside source: true *** True Line Result (l.blendmode_enum || 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise_conversion_for_rendering_failed l, e, :line~ - Inside source: true *** True Line Result raise_conversion_for_rendering_failed l, e, :line ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw_border s~ - Inside source: true *** True Line Result def draw_border s ** Processing line: ~ return unless s~ - Inside source: true *** True Line Result return unless s ** Processing line: ~ if s.respond_to? :draw_override~ - Inside source: true *** True Line Result if s.respond_to? :draw_override ** Processing line: ~ s.draw_override @ffi_draw~ - Inside source: true *** True Line Result s.draw_override @ffi_draw ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ s = s.as_hash if s.is_a? OpenEntity~ - Inside source: true *** True Line Result s = s.as_hash if s.is_a? OpenEntity ** Processing line: ~ @ffi_draw.draw_border_2 s.x, s.y, s.w, s.h,~ - Inside source: true *** True Line Result @ffi_draw.draw_border_2 s.x, s.y, s.w, s.h, ** Processing line: ~ s.r, s.g, s.b, s.a,~ - Inside source: true *** True Line Result s.r, s.g, s.b, s.a, ** Processing line: ~ (s.blendmode_enum || 1)~ - Inside source: true *** True Line Result (s.blendmode_enum || 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ raise_conversion_for_rendering_failed s, e, :border~ - Inside source: true *** True Line Result raise_conversion_for_rendering_failed s, e, :border ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def draw_screenshots~ - Inside source: true *** True Line Result def draw_screenshots ** Processing line: ~ @args.outputs.screenshots.each { |s| draw_screenshot s }~ - Inside source: true *** True Line Result @args.outputs.screenshots.each { |s| draw_screenshot s } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def pixel_arrays~ - Inside source: true *** True Line Result def pixel_arrays ** Processing line: ~ @args.pixel_arrays.each { |k,v|~ - Inside source: true *** True Line Result @args.pixel_arrays.each { |k,v| ** Processing line: ~ if v.pixels.length == (v.width * v.height) # !!! FIXME: warning? exception? Different API?~ - Inside source: true *** True Line Result if v.pixels.length == (v.width * v.height) # !!! FIXME: warning? exception? Different API? ** Processing line: ~ @ffi_draw.upload_pixel_array k.to_s, v.width.to_i, v.height.to_i, v.pixels~ - Inside source: true *** True Line Result @ffi_draw.upload_pixel_array k.to_s, v.width.to_i, v.height.to_i, v.pixels ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ pause!~ - Inside source: true *** True Line Result pause! ** Processing line: ~ pretty_print_exception_and_export! e~ - Inside source: true *** True Line Result pretty_print_exception_and_export! e ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** runtime/framerate.rb~ - Header detected. *** True Line Result *** True Line Result *** runtime/framerate.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/runtime/framerate.rb~ - Inside source: true *** True Line Result # ./dragon/runtime/framerate.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # framerate.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # framerate.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Runtime~ - Inside source: true *** True Line Result class Runtime ** Processing line: ~ module Framerate~ - Inside source: true *** True Line Result module Framerate ** Processing line: ~ def framerate_init~ - Inside source: true *** True Line Result def framerate_init ** Processing line: ~ @tick_time = Time.new.to_i~ - Inside source: true *** True Line Result @tick_time = Time.new.to_i ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def delta_framerate~ - Inside source: true *** True Line Result def delta_framerate ** Processing line: ~ (current_framerate || 0) - (@previous_framerate || 0)~ - Inside source: true *** True Line Result (current_framerate || 0) - (@previous_framerate || 0) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset_framerate_calculation~ - Inside source: true *** True Line Result def reset_framerate_calculation ** Processing line: ~ @tick_speed_sum = 0~ - Inside source: true *** True Line Result @tick_speed_sum = 0 ** Processing line: ~ @tick_speed_count = 0~ - Inside source: true *** True Line Result @tick_speed_count = 0 ** Processing line: ~ @previous_framerate = 0~ - Inside source: true *** True Line Result @previous_framerate = 0 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def check_framerate~ - Inside source: true *** True Line Result def check_framerate ** Processing line: ~ if @framerate_diagnostics_requested~ - Inside source: true *** True Line Result if @framerate_diagnostics_requested ** Processing line: ~ log "================================"~ - Inside source: true *** True Line Result log "================================" ** Processing line: ~ log framerate_get_diagnostics~ - Inside source: true *** True Line Result log framerate_get_diagnostics ** Processing line: ~ @framerate_diagnostics_requested = false~ - Inside source: true *** True Line Result @framerate_diagnostics_requested = false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !@paused~ - Inside source: true *** True Line Result if !@paused ** Processing line: ~ if @tick_time~ - Inside source: true *** True Line Result if @tick_time ** Processing line: ~ @tick_speed_count += 1~ - Inside source: true *** True Line Result @tick_speed_count += 1 ** Processing line: ~ @tick_speed_sum += Time.now.to_i - @tick_time~ - Inside source: true *** True Line Result @tick_speed_sum += Time.now.to_i - @tick_time ** Processing line: ~ if @tick_speed_count > 60 * 2~ - Inside source: true *** True Line Result if @tick_speed_count > 60 * 2 ** Processing line: ~ if framerate_below_threshold?~ - Inside source: true *** True Line Result if framerate_below_threshold? ** Processing line: ~ @last_framerate = current_framerate~ - Inside source: true *** True Line Result @last_framerate = current_framerate ** Processing line: ~ if !@console.visible? && !@recording.is_replaying?~ - Inside source: true *** True Line Result if !@console.visible? && !@recording.is_replaying? ** Processing line: ~ log framerate_warning_message~ - Inside source: true *** True Line Result log framerate_warning_message ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @previous_framerate = current_framerate.floor~ - Inside source: true *** True Line Result @previous_framerate = current_framerate.floor ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @tick_time = Time.new.to_i~ - Inside source: true *** True Line Result @tick_time = Time.new.to_i ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ reset_framerate_calculation~ - Inside source: true *** True Line Result reset_framerate_calculation ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue~ - Inside source: true *** True Line Result rescue ** Processing line: ~ reset_framerate_calculation~ - Inside source: true *** True Line Result reset_framerate_calculation ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def framerate_diagnostics~ - Inside source: true *** True Line Result def framerate_diagnostics ** Processing line: ~ # request framerate diagnostics to be printed at the end of tick~ - Inside source: true *** True Line Result # request framerate diagnostics to be printed at the end of tick ** Processing line: ~ @framerate_diagnostics_requested = true~ - Inside source: true *** True Line Result @framerate_diagnostics_requested = true ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def framerate_below_threshold?~ - Inside source: true *** True Line Result def framerate_below_threshold? ** Processing line: ~ @last_framerate ||= 60~ - Inside source: true *** True Line Result @last_framerate ||= 60 ** Processing line: ~ current_framerate < @last_framerate &&~ - Inside source: true *** True Line Result current_framerate < @last_framerate && ** Processing line: ~ current_framerate < 50 &&~ - Inside source: true *** True Line Result current_framerate < 50 && ** Processing line: ~ @previous_framerate > current_framerate &&~ - Inside source: true *** True Line Result @previous_framerate > current_framerate && ** Processing line: ~ Kernel.tick_count > 600~ - Inside source: true *** True Line Result Kernel.tick_count > 600 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def current_framerate~ - Inside source: true *** True Line Result def current_framerate ** Processing line: ~ return 60 if !@tick_speed_sum || !@tick_speed_sum~ - Inside source: true *** True Line Result return 60 if !@tick_speed_sum || !@tick_speed_sum ** Processing line: ~ r = 100.fdiv(@tick_speed_sum.fdiv(@tick_speed_count) * 100)~ - Inside source: true *** True Line Result r = 100.fdiv(@tick_speed_sum.fdiv(@tick_speed_count) * 100) ** Processing line: ~ if (r.nan? || r.infinite? || r > 58)~ - Inside source: true *** True Line Result if (r.nan? || r.infinite? || r > 58) ** Processing line: ~ r = 60~ - Inside source: true *** True Line Result r = 60 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ r || 60~ - Inside source: true *** True Line Result r || 60 ** Processing line: ~ rescue~ - Inside source: true *** True Line Result rescue ** Processing line: ~ 60~ - Inside source: true *** True Line Result 60 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end # module Framerate~ - Inside source: true *** True Line Result end # module Framerate ** Processing line: ~ end # end class Runtime~ - Inside source: true *** True Line Result end # end class Runtime ** Processing line: ~ end # end module GTK~ - Inside source: true *** True Line Result end # end module GTK ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** runtime/framerate_diagnostics.rb~ - Header detected. *** True Line Result *** True Line Result *** runtime/framerate_diagnostics.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/runtime/framerate_diagnostics.rb~ - Inside source: true *** True Line Result # ./dragon/runtime/framerate_diagnostics.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # framerate_diagnostics.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # framerate_diagnostics.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Runtime~ - Inside source: true *** True Line Result class Runtime ** Processing line: ~ module FramerateDiagnostics~ - Inside source: true *** True Line Result module FramerateDiagnostics ** Processing line: ~ def framerate_get_diagnostics~ - Inside source: true *** True Line Result def framerate_get_diagnostics ** Processing line: ~ <<-S~ - Inside source: true *** True Line Result <<-S ** Processing line: ~ * INFO: Framerate Diagnostics~ - Inside source: true *** True Line Result * INFO: Framerate Diagnostics ** Processing line: ~ You can display these diagnostics using:~ - Inside source: true *** True Line Result You can display these diagnostics using: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #+begin_src~ - Inside source: true *** True Line Result #+begin_src ** Processing line: ~ def tick args~ - Inside source: true *** True Line Result def tick args ** Processing line: ~ # ....~ - Inside source: true *** True Line Result # .... ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # IMPORTANT: Put this at the END of the ~tick~ method.~ - Inside source: true *** True Line Result # IMPORTANT: Put this at the END of the ~tick~ method. ** Processing line: ~ args.outputs.debug << args.gtk.framerate_diagnostics_primitives~ - Inside source: true *** True Line Result args.outputs.debug << args.gtk.framerate_diagnostics_primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ #+end_src~ - Inside source: true *** True Line Result #+end_src ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ** Draw Calls: ~<<~ Invocation Perf Counter~ - Inside source: true *** True Line Result ** Draw Calls: ~<<~ Invocation Perf Counter ** Processing line: ~ Here is how many times ~args.outputs.PRIMITIVE_ARRAY <<~ was called:~ - Inside source: true *** True Line Result Here is how many times ~args.outputs.PRIMITIVE_ARRAY <<~ was called: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #{$perf_counter_outputs_push_count} times invoked.~ - Inside source: true *** True Line Result #{$perf_counter_outputs_push_count} times invoked. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ If the number above is high, consider batching primitives so you can lower the invocation of ~<<~. For example.~ - Inside source: true *** True Line Result If the number above is high, consider batching primitives so you can lower the invocation of ~<<~. For example. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Instead of:~ - Inside source: true *** True Line Result Instead of: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #+begin_src~ - Inside source: true *** True Line Result #+begin_src ** Processing line: ~ args.state.enemies.map do |e|~ - Inside source: true *** True Line Result args.state.enemies.map do |e| ** Processing line: ~ e.alpha = 128~ - Inside source: true *** True Line Result e.alpha = 128 ** Processing line: ~ args.outputs.sprites << e # <-- ~args.outputs.sprites <<~ is invoked a lot~ - Inside source: true *** True Line Result args.outputs.sprites << e # <-- ~args.outputs.sprites <<~ is invoked a lot ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ #+end_src~ - Inside source: true *** True Line Result #+end_src ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Do this:~ - Inside source: true *** True Line Result Do this: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #+begin_src~ - Inside source: true *** True Line Result #+begin_src ** Processing line: ~ args.outputs.sprites << args.state~ - Inside source: true *** True Line Result args.outputs.sprites << args.state ** Processing line: ~ .enemies~ - Inside source: true *** True Line Result .enemies ** Processing line: ~ .map do |e| # <-- ~args.outputs.sprites <<~ is only invoked once.~ - Inside source: true *** True Line Result .map do |e| # <-- ~args.outputs.sprites <<~ is only invoked once. ** Processing line: ~ e.alpha = 128~ - Inside source: true *** True Line Result e.alpha = 128 ** Processing line: ~ e~ - Inside source: true *** True Line Result e ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ #+end_src~ - Inside source: true *** True Line Result #+end_src ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ** Array Primitives~ - Inside source: true *** True Line Result ** Array Primitives ** Processing line: ~ ~Primitives~ represented as an ~Array~ (~Tuple~) are great for prototyping, but are not as performant as using a ~Hash~.~ - Inside source: true *** True Line Result ~Primitives~ represented as an ~Array~ (~Tuple~) are great for prototyping, but are not as performant as using a ~Hash~. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Here is the number of ~Array~ primitives that were encountered:~ - Inside source: true *** True Line Result Here is the number of ~Array~ primitives that were encountered: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #{$perf_counter_primitive_is_array} Array Primitives.~ - Inside source: true *** True Line Result #{$perf_counter_primitive_is_array} Array Primitives. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ If the number above is high, consider converting them to hashes. For example.~ - Inside source: true *** True Line Result If the number above is high, consider converting them to hashes. For example. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Instead of:~ - Inside source: true *** True Line Result Instead of: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #+begin_src~ - Inside source: true *** True Line Result #+begin_src ** Processing line: ~ args.outputs.sprites << [0, 0, 100, 100, 'sprites/enemy.png']~ - Inside source: true *** True Line Result args.outputs.sprites << [0, 0, 100, 100, 'sprites/enemy.png'] ** Processing line: ~ #+begin_end~ - Inside source: true *** True Line Result #+begin_end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Do this:~ - Inside source: true *** True Line Result Do this: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #+begin_src~ - Inside source: true *** True Line Result #+begin_src ** Processing line: ~ args.outputs.sprites << { x: 0,~ - Inside source: true *** True Line Result args.outputs.sprites << { x: 0, ** Processing line: ~ y: 0,~ - Inside source: true *** True Line Result y: 0, ** Processing line: ~ w: 100,~ - Inside source: true *** True Line Result w: 100, ** Processing line: ~ h: 100,~ - Inside source: true *** True Line Result h: 100, ** Processing line: ~ path: 'sprites/enemy.png' }~ - Inside source: true *** True Line Result path: 'sprites/enemy.png' } ** Processing line: ~ #+begin_end~ - Inside source: true *** True Line Result #+begin_end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ** Primitive Counts~ - Inside source: true *** True Line Result ** Primitive Counts ** Processing line: ~ Here are the draw counts ordered by lowest to highest z order:~ - Inside source: true *** True Line Result Here are the draw counts ordered by lowest to highest z order: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ PRIMITIVE COUNT, STATIC COUNT~ - Inside source: true *** True Line Result PRIMITIVE COUNT, STATIC COUNT ** Processing line: ~ solids: #{@args.outputs.solids.length}, #{@args.outputs.static_solids.length}~ - Inside source: true *** True Line Result solids: #{@args.outputs.solids.length}, #{@args.outputs.static_solids.length} ** Processing line: ~ sprites: #{@args.outputs.sprites.length}, #{@args.outputs.static_sprites.length}~ - Inside source: true *** True Line Result sprites: #{@args.outputs.sprites.length}, #{@args.outputs.static_sprites.length} ** Processing line: ~ primitives: #{@args.outputs.primitives.length}, #{@args.outputs.static_primitives.length}~ - Inside source: true *** True Line Result primitives: #{@args.outputs.primitives.length}, #{@args.outputs.static_primitives.length} ** Processing line: ~ labels: #{@args.outputs.labels.length}, #{@args.outputs.static_labels.length}~ - Inside source: true *** True Line Result labels: #{@args.outputs.labels.length}, #{@args.outputs.static_labels.length} ** Processing line: ~ lines: #{@args.outputs.lines.length}, #{@args.outputs.static_lines.length}~ - Inside source: true *** True Line Result lines: #{@args.outputs.lines.length}, #{@args.outputs.static_lines.length} ** Processing line: ~ borders: #{@args.outputs.borders.length}, #{@args.outputs.static_borders.length}~ - Inside source: true *** True Line Result borders: #{@args.outputs.borders.length}, #{@args.outputs.static_borders.length} ** Processing line: ~ debug: #{@args.outputs.debug.length}, #{@args.outputs.static_debug.length}~ - Inside source: true *** True Line Result debug: #{@args.outputs.debug.length}, #{@args.outputs.static_debug.length} ** Processing line: ~ reserved: #{@args.outputs.reserved.length}, #{@args.outputs.static_reserved.length}~ - Inside source: true *** True Line Result reserved: #{@args.outputs.reserved.length}, #{@args.outputs.static_reserved.length} ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ** Additional Help~ - Inside source: true *** True Line Result ** Additional Help ** Processing line: ~ Come to the DragonRuby Discord channel if you need help troubleshooting performance issues. http://discord.dragonruby.org.~ - Inside source: true *** True Line Result Come to the DragonRuby Discord channel if you need help troubleshooting performance issues. http://discord.dragonruby.org. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ Source code for these diagnostics can be found at: [[https://github.com/dragonruby/dragonruby-game-toolkit-contrib/]]~ - Inside source: true *** True Line Result Source code for these diagnostics can be found at: [[https://github.com/dragonruby/dragonruby-game-toolkit-contrib/]] ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def framerate_warning_message~ - Inside source: true *** True Line Result def framerate_warning_message ** Processing line: ~ <<-S~ - Inside source: true *** True Line Result <<-S ** Processing line: ~ * WARNING:~ - Inside source: true *** True Line Result * WARNING: ** Processing line: ~ Your average framerate dropped below 60 fps for two seconds.~ - Inside source: true *** True Line Result Your average framerate dropped below 60 fps for two seconds. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ The average FPS was #{current_framerate}.~ - Inside source: true *** True Line Result The average FPS was #{current_framerate}. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ ** How To Disable Warning~ - Inside source: true *** True Line Result ** How To Disable Warning ** Processing line: ~ If this warning is getting annoying put the following in your tick method:~ - Inside source: true *** True Line Result If this warning is getting annoying put the following in your tick method: ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #+begin_src~ - Inside source: true *** True Line Result #+begin_src ** Processing line: ~ args.gtk.log_level = :off~ - Inside source: true *** True Line Result args.gtk.log_level = :off ** Processing line: ~ #+end_src~ - Inside source: true *** True Line Result #+end_src ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ #{framerate_get_diagnostics}~ - Inside source: true *** True Line Result #{framerate_get_diagnostics} ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def current_framerate_primitives~ - Inside source: true *** True Line Result def current_framerate_primitives ** Processing line: ~ framerate_diagnostics_primitives~ - Inside source: true *** True Line Result framerate_diagnostics_primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def framerate_diagnostics_primitives~ - Inside source: true *** True Line Result def framerate_diagnostics_primitives ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ { x: 0, y: 93.from_top, w: 500, h: 93, a: 128 }.solid!,~ - Inside source: true *** True Line Result { x: 0, y: 93.from_top, w: 500, h: 93, a: 128 }.solid!, ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: 5,~ - Inside source: true *** True Line Result x: 5, ** Processing line: ~ y: 5.from_top,~ - Inside source: true *** True Line Result y: 5.from_top, ** Processing line: ~ text: "More Info via DragonRuby Console: $gtk.framerate_diagnostics",~ - Inside source: true *** True Line Result text: "More Info via DragonRuby Console: $gtk.framerate_diagnostics", ** Processing line: ~ r: 255,~ - Inside source: true *** True Line Result r: 255, ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 255,~ - Inside source: true *** True Line Result b: 255, ** Processing line: ~ size_enum: -2~ - Inside source: true *** True Line Result size_enum: -2 ** Processing line: ~ }.label!,~ - Inside source: true *** True Line Result }.label!, ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: 5,~ - Inside source: true *** True Line Result x: 5, ** Processing line: ~ y: 20.from_top,~ - Inside source: true *** True Line Result y: 20.from_top, ** Processing line: ~ text: "FPS: %.2f" % args.gtk.current_framerate,~ - Inside source: true *** True Line Result text: "FPS: %.2f" % args.gtk.current_framerate, ** Processing line: ~ r: 255,~ - Inside source: true *** True Line Result r: 255, ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 255,~ - Inside source: true *** True Line Result b: 255, ** Processing line: ~ size_enum: -2~ - Inside source: true *** True Line Result size_enum: -2 ** Processing line: ~ }.label!,~ - Inside source: true *** True Line Result }.label!, ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: 5,~ - Inside source: true *** True Line Result x: 5, ** Processing line: ~ y: 35.from_top,~ - Inside source: true *** True Line Result y: 35.from_top, ** Processing line: ~ text: "Draw Calls: #{$perf_counter_outputs_push_count}",~ - Inside source: true *** True Line Result text: "Draw Calls: #{$perf_counter_outputs_push_count}", ** Processing line: ~ r: 255,~ - Inside source: true *** True Line Result r: 255, ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 255,~ - Inside source: true *** True Line Result b: 255, ** Processing line: ~ size_enum: -2~ - Inside source: true *** True Line Result size_enum: -2 ** Processing line: ~ }.label!,~ - Inside source: true *** True Line Result }.label!, ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: 5,~ - Inside source: true *** True Line Result x: 5, ** Processing line: ~ y: 50.from_top,~ - Inside source: true *** True Line Result y: 50.from_top, ** Processing line: ~ text: "Array Primitives: #{$perf_counter_primitive_is_array}",~ - Inside source: true *** True Line Result text: "Array Primitives: #{$perf_counter_primitive_is_array}", ** Processing line: ~ r: 255,~ - Inside source: true *** True Line Result r: 255, ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 255,~ - Inside source: true *** True Line Result b: 255, ** Processing line: ~ size_enum: -2~ - Inside source: true *** True Line Result size_enum: -2 ** Processing line: ~ }.label!,~ - Inside source: true *** True Line Result }.label!, ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ x: 5,~ - Inside source: true *** True Line Result x: 5, ** Processing line: ~ y: 65.from_top,~ - Inside source: true *** True Line Result y: 65.from_top, ** Processing line: ~ text: "Mouse: #{@args.inputs.mouse.point}",~ - Inside source: true *** True Line Result text: "Mouse: #{@args.inputs.mouse.point}", ** Processing line: ~ r: 255,~ - Inside source: true *** True Line Result r: 255, ** Processing line: ~ g: 255,~ - Inside source: true *** True Line Result g: 255, ** Processing line: ~ b: 255,~ - Inside source: true *** True Line Result b: 255, ** Processing line: ~ size_enum: -2~ - Inside source: true *** True Line Result size_enum: -2 ** Processing line: ~ }.label!,~ - Inside source: true *** True Line Result }.label!, ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** runtime/hotload.rb~ - Header detected. *** True Line Result *** True Line Result *** runtime/hotload.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/runtime/hotload.rb~ - Inside source: true *** True Line Result # ./dragon/runtime/hotload.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # hotlaod.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # hotlaod.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Runtime~ - Inside source: true *** True Line Result class Runtime ** Processing line: ~ # @visibility private~ - Inside source: true *** True Line Result # @visibility private ** Processing line: ~ module Hotload~ - Inside source: true *** True Line Result module Hotload ** Processing line: ~ def hotload_init~ - Inside source: true *** True Line Result def hotload_init ** Processing line: ~ @hotload_if_needed = 0~ - Inside source: true *** True Line Result @hotload_if_needed = 0 ** Processing line: ~ @mailbox_if_needed = 0~ - Inside source: true *** True Line Result @mailbox_if_needed = 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # schema for file_mtimes~ - Inside source: true *** True Line Result # schema for file_mtimes ** Processing line: ~ # { FILE_PATH: { current: (Time as Fixnum),~ - Inside source: true *** True Line Result # { FILE_PATH: { current: (Time as Fixnum), ** Processing line: ~ # last: (Time as Fixnum) },~ - Inside source: true *** True Line Result # last: (Time as Fixnum) }, ** Processing line: ~ # FILE_PATH: { current: (Time as Fixnum),~ - Inside source: true *** True Line Result # FILE_PATH: { current: (Time as Fixnum), ** Processing line: ~ # last: (Time as Fixnum) } }~ - Inside source: true *** True Line Result # last: (Time as Fixnum) } } ** Processing line: ~ @file_mtimes = { }~ - Inside source: true *** True Line Result @file_mtimes = { } ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ @suppress_mailbox = true~ - Inside source: true *** True Line Result @suppress_mailbox = true ** Processing line: ~ files_to_reload.each { |f| init_mtimes f }~ - Inside source: true *** True Line Result files_to_reload.each { |f| init_mtimes f } ** Processing line: ~ init_mtimes 'app/mailbox.rb'~ - Inside source: true *** True Line Result init_mtimes 'app/mailbox.rb' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def hotload_on_write_file file_name~ - Inside source: true *** True Line Result def hotload_on_write_file file_name ** Processing line: ~ return unless file_name.include? 'mailbox.rb'~ - Inside source: true *** True Line Result return unless file_name.include? 'mailbox.rb' ** Processing line: ~ @mailbox_if_needed = :force~ - Inside source: true *** True Line Result @mailbox_if_needed = :force ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def files_to_reload~ - Inside source: true *** True Line Result def files_to_reload ** Processing line: ~ if @rcb_release_mode~ - Inside source: true *** True Line Result if @rcb_release_mode ** Processing line: ~ core_files_to_reload + @required_files~ - Inside source: true *** True Line Result core_files_to_reload + @required_files ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ 'dragon/docs.rb',~ - Inside source: true *** True Line Result 'dragon/docs.rb', ** Processing line: ~ 'dragon/help.rb',~ - Inside source: true *** True Line Result 'dragon/help.rb', ** Processing line: ~ 'dragon/kernel_docs.rb',~ - Inside source: true *** True Line Result 'dragon/kernel_docs.rb', ** Processing line: ~ 'dragon/kernel.rb',~ - Inside source: true *** True Line Result 'dragon/kernel.rb', ** Processing line: ~ 'dragon/easing.rb',~ - Inside source: true *** True Line Result 'dragon/easing.rb', ** Processing line: ~ 'dragon/top_level.rb',~ - Inside source: true *** True Line Result 'dragon/top_level.rb', ** Processing line: ~ 'dragon/log.rb',~ - Inside source: true *** True Line Result 'dragon/log.rb', ** Processing line: ~ 'dragon/geometry.rb',~ - Inside source: true *** True Line Result 'dragon/geometry.rb', ** Processing line: ~ 'dragon/attr_gtk.rb',~ - Inside source: true *** True Line Result 'dragon/attr_gtk.rb', ** Processing line: ~ 'dragon/attr_sprite.rb',~ - Inside source: true *** True Line Result 'dragon/attr_sprite.rb', ** Processing line: ~ 'dragon/object.rb',~ - Inside source: true *** True Line Result 'dragon/object.rb', ** Processing line: ~ 'dragon/class.rb',~ - Inside source: true *** True Line Result 'dragon/class.rb', ** Processing line: ~ 'dragon/string.rb',~ - Inside source: true *** True Line Result 'dragon/string.rb', ** Processing line: ~ 'dragon/entity.rb',~ - Inside source: true *** True Line Result 'dragon/entity.rb', ** Processing line: ~ 'dragon/strict_entity.rb',~ - Inside source: true *** True Line Result 'dragon/strict_entity.rb', ** Processing line: ~ 'dragon/open_entity.rb',~ - Inside source: true *** True Line Result 'dragon/open_entity.rb', ** Processing line: ~ 'dragon/serialize.rb',~ - Inside source: true *** True Line Result 'dragon/serialize.rb', ** Processing line: ~ 'dragon/primitive.rb',~ - Inside source: true *** True Line Result 'dragon/primitive.rb', ** Processing line: ~ 'dragon/nil_class_false_class.rb',~ - Inside source: true *** True Line Result 'dragon/nil_class_false_class.rb', ** Processing line: ~ 'dragon/symbol.rb',~ - Inside source: true *** True Line Result 'dragon/symbol.rb', ** Processing line: ~ 'dragon/numeric_deprecated.rb',~ - Inside source: true *** True Line Result 'dragon/numeric_deprecated.rb', ** Processing line: ~ 'dragon/numeric.rb',~ - Inside source: true *** True Line Result 'dragon/numeric.rb', ** Processing line: ~ 'dragon/hash_deprecated.rb',~ - Inside source: true *** True Line Result 'dragon/hash_deprecated.rb', ** Processing line: ~ 'dragon/hash.rb',~ - Inside source: true *** True Line Result 'dragon/hash.rb', ** Processing line: ~ 'dragon/outputs_deprecated.rb',~ - Inside source: true *** True Line Result 'dragon/outputs_deprecated.rb', ** Processing line: ~ 'dragon/array_docs.rb',~ - Inside source: true *** True Line Result 'dragon/array_docs.rb', ** Processing line: ~ 'dragon/array.rb',~ - Inside source: true *** True Line Result 'dragon/array.rb', ** Processing line: ~ 'dragon/outputs.rb',~ - Inside source: true *** True Line Result 'dragon/outputs.rb', ** Processing line: ~ 'dragon/inputs.rb',~ - Inside source: true *** True Line Result 'dragon/inputs.rb', ** Processing line: ~ 'dragon/mouse_docs.rb',~ - Inside source: true *** True Line Result 'dragon/mouse_docs.rb', ** Processing line: ~ 'dragon/recording.rb',~ - Inside source: true *** True Line Result 'dragon/recording.rb', ** Processing line: ~ 'dragon/grid.rb',~ - Inside source: true *** True Line Result 'dragon/grid.rb', ** Processing line: ~ 'dragon/layout.rb',~ - Inside source: true *** True Line Result 'dragon/layout.rb', ** Processing line: ~ 'dragon/args_deprecated.rb',~ - Inside source: true *** True Line Result 'dragon/args_deprecated.rb', ** Processing line: ~ 'dragon/fn.rb',~ - Inside source: true *** True Line Result 'dragon/fn.rb', ** Processing line: ~ 'dragon/args.rb',~ - Inside source: true *** True Line Result 'dragon/args.rb', ** Processing line: ~ 'dragon/console_prompt.rb',~ - Inside source: true *** True Line Result 'dragon/console_prompt.rb', ** Processing line: ~ 'dragon/console_menu.rb',~ - Inside source: true *** True Line Result 'dragon/console_menu.rb', ** Processing line: ~ 'dragon/console.rb',~ - Inside source: true *** True Line Result 'dragon/console.rb', ** Processing line: ~ 'dragon/assert.rb',~ - Inside source: true *** True Line Result 'dragon/assert.rb', ** Processing line: ~ 'dragon/tests.rb',~ - Inside source: true *** True Line Result 'dragon/tests.rb', ** Processing line: ~ 'dragon/controller_config.rb',~ - Inside source: true *** True Line Result 'dragon/controller_config.rb', ** Processing line: ~ 'dragon/runtime/draw.rb',~ - Inside source: true *** True Line Result 'dragon/runtime/draw.rb', ** Processing line: ~ 'dragon/runtime/deprecated.rb',~ - Inside source: true *** True Line Result 'dragon/runtime/deprecated.rb', ** Processing line: ~ 'dragon/runtime/framerate.rb',~ - Inside source: true *** True Line Result 'dragon/runtime/framerate.rb', ** Processing line: ~ 'dragon/runtime/c_bridge.rb',~ - Inside source: true *** True Line Result 'dragon/runtime/c_bridge.rb', ** Processing line: ~ 'dragon/runtime/hotload.rb',~ - Inside source: true *** True Line Result 'dragon/runtime/hotload.rb', ** Processing line: ~ 'dragon/runtime/backup.rb',~ - Inside source: true *** True Line Result 'dragon/runtime/backup.rb', ** Processing line: ~ 'dragon/runtime/async_require.rb',~ - Inside source: true *** True Line Result 'dragon/runtime/async_require.rb', ** Processing line: ~ 'dragon/runtime/autocomplete.rb',~ - Inside source: true *** True Line Result 'dragon/runtime/autocomplete.rb', ** Processing line: ~ 'dragon/api.rb',~ - Inside source: true *** True Line Result 'dragon/api.rb', ** Processing line: ~ 'dragon/runtime.rb',~ - Inside source: true *** True Line Result 'dragon/runtime.rb', ** Processing line: ~ 'dragon/trace.rb',~ - Inside source: true *** True Line Result 'dragon/trace.rb', ** Processing line: ~ 'dragon/readme_docs.rb',~ - Inside source: true *** True Line Result 'dragon/readme_docs.rb', ** Processing line: ~ 'dragon/hotload_client.rb',~ - Inside source: true *** True Line Result 'dragon/hotload_client.rb', ** Processing line: ~ 'dragon/wizards.rb',~ - Inside source: true *** True Line Result 'dragon/wizards.rb', ** Processing line: ~ 'dragon/ios_wizard.rb',~ - Inside source: true *** True Line Result 'dragon/ios_wizard.rb', ** Processing line: ~ 'dragon/itch_wizard.rb',~ - Inside source: true *** True Line Result 'dragon/itch_wizard.rb', ** Processing line: ~ ] + core_files_to_reload + @required_files~ - Inside source: true *** True Line Result ] + core_files_to_reload + @required_files ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def core_files_to_reload~ - Inside source: true *** True Line Result def core_files_to_reload ** Processing line: ~ [~ - Inside source: true *** True Line Result [ ** Processing line: ~ 'repl.rb',~ - Inside source: true *** True Line Result 'repl.rb', ** Processing line: ~ 'app/main.rb',~ - Inside source: true *** True Line Result 'app/main.rb', ** Processing line: ~ 'app/repl.rb',~ - Inside source: true *** True Line Result 'app/repl.rb', ** Processing line: ~ 'app/tests.rb',~ - Inside source: true *** True Line Result 'app/tests.rb', ** Processing line: ~ 'app/test.rb',~ - Inside source: true *** True Line Result 'app/test.rb', ** Processing line: ~ 'app/stdin.rb'~ - Inside source: true *** True Line Result 'app/stdin.rb' ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def init_mtimes file~ - Inside source: true *** True Line Result def init_mtimes file ** Processing line: ~ @file_mtimes[file] ||= { current: @ffi_file.mtime(file),~ - Inside source: true *** True Line Result @file_mtimes[file] ||= { current: @ffi_file.mtime(file), ** Processing line: ~ last: @ffi_file.mtime(file) }~ - Inside source: true *** True Line Result last: @ffi_file.mtime(file) } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def hotload_source_files~ - Inside source: true *** True Line Result def hotload_source_files ** Processing line: ~ @hotload_if_needed += 1~ - Inside source: true *** True Line Result @hotload_if_needed += 1 ** Processing line: ~ return unless @hotload_if_needed == 60~ - Inside source: true *** True Line Result return unless @hotload_if_needed == 60 ** Processing line: ~ @hotload_if_needed = 0~ - Inside source: true *** True Line Result @hotload_if_needed = 0 ** Processing line: ~ files_to_reload.each { |f| reload_if_needed f }~ - Inside source: true *** True Line Result files_to_reload.each { |f| reload_if_needed f } ** Processing line: ~ console.enable~ - Inside source: true *** True Line Result console.enable ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mailbox_timeout~ - Inside source: true *** True Line Result def mailbox_timeout ** Processing line: ~ if @suppress_mailbox~ - Inside source: true *** True Line Result if @suppress_mailbox ** Processing line: ~ 60~ - Inside source: true *** True Line Result 60 ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ 3~ - Inside source: true *** True Line Result 3 ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def check_mailbox~ - Inside source: true *** True Line Result def check_mailbox ** Processing line: ~ if @mailbox_if_needed == :force # lol~ - Inside source: true *** True Line Result if @mailbox_if_needed == :force # lol ** Processing line: ~ reload_if_needed 'app/mailbox.rb', true~ - Inside source: true *** True Line Result reload_if_needed 'app/mailbox.rb', true ** Processing line: ~ @mailbox_if_needed = 1~ - Inside source: true *** True Line Result @mailbox_if_needed = 1 ** Processing line: ~ return~ - Inside source: true *** True Line Result return ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ @mailbox_if_needed += 1~ - Inside source: true *** True Line Result @mailbox_if_needed += 1 ** Processing line: ~ return unless @mailbox_if_needed.mod_zero? mailbox_timeout~ - Inside source: true *** True Line Result return unless @mailbox_if_needed.mod_zero? mailbox_timeout ** Processing line: ~ @mailbox_if_needed = 1~ - Inside source: true *** True Line Result @mailbox_if_needed = 1 ** Processing line: ~ reload_if_needed 'app/mailbox.rb'~ - Inside source: true *** True Line Result reload_if_needed 'app/mailbox.rb' ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def hotload_if_needed~ - Inside source: true *** True Line Result def hotload_if_needed ** Processing line: ~ return if Kernel.tick_count < 0~ - Inside source: true *** True Line Result return if Kernel.tick_count < 0 ** Processing line: ~ hotload_source_files~ - Inside source: true *** True Line Result hotload_source_files ** Processing line: ~ check_mailbox~ - Inside source: true *** True Line Result check_mailbox ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def on_load_succeeded file~ - Inside source: true *** True Line Result def on_load_succeeded file ** Processing line: ~ self.files_reloaded << file~ - Inside source: true *** True Line Result self.files_reloaded << file ** Processing line: ~ self.reloaded_files << file~ - Inside source: true *** True Line Result self.reloaded_files << file ** Processing line: ~ Trace.untrace_classes!~ - Inside source: true *** True Line Result Trace.untrace_classes! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reset_all_mtimes~ - Inside source: true *** True Line Result def reset_all_mtimes ** Processing line: ~ @file_mtimes.each do |file, _|~ - Inside source: true *** True Line Result @file_mtimes.each do |file, _| ** Processing line: ~ @file_mtimes[file].current = @ffi_file.mtime(file)~ - Inside source: true *** True Line Result @file_mtimes[file].current = @ffi_file.mtime(file) ** Processing line: ~ @file_mtimes[file].last = @file_mtimes[file].current~ - Inside source: true *** True Line Result @file_mtimes[file].last = @file_mtimes[file].current ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ files_to_reload.each do |file, _|~ - Inside source: true *** True Line Result files_to_reload.each do |file, _| ** Processing line: ~ @file_mtimes[file] ||= {}~ - Inside source: true *** True Line Result @file_mtimes[file] ||= {} ** Processing line: ~ @file_mtimes[file].current = @ffi_file.mtime(file)~ - Inside source: true *** True Line Result @file_mtimes[file].current = @ffi_file.mtime(file) ** Processing line: ~ @file_mtimes[file].last = @file_mtimes[file].current~ - Inside source: true *** True Line Result @file_mtimes[file].last = @file_mtimes[file].current ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def reload_if_needed file, force = false~ - Inside source: true *** True Line Result def reload_if_needed file, force = false ** Processing line: ~ @file_mtimes[file] ||= { current: @ffi_file.mtime(file), last: @ffi_file.mtime(file) }~ - Inside source: true *** True Line Result @file_mtimes[file] ||= { current: @ffi_file.mtime(file), last: @ffi_file.mtime(file) } ** Processing line: ~ @file_mtimes[file].current = @ffi_file.mtime(file)~ - Inside source: true *** True Line Result @file_mtimes[file].current = @ffi_file.mtime(file) ** Processing line: ~ return if !force && @file_mtimes[file].current == @file_mtimes[file].last~ - Inside source: true *** True Line Result return if !force && @file_mtimes[file].current == @file_mtimes[file].last ** Processing line: ~ on_load_succeeded file if reload_ruby_file file~ - Inside source: true *** True Line Result on_load_succeeded file if reload_ruby_file file ** Processing line: ~ @file_mtimes[file].last = @file_mtimes[file].current~ - Inside source: true *** True Line Result @file_mtimes[file].last = @file_mtimes[file].current ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** string.rb~ - Header detected. *** True Line Result *** True Line Result *** string.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/string.rb~ - Inside source: true *** True Line Result # ./dragon/string.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # string.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # string.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class String~ - Inside source: true *** True Line Result class String ** Processing line: ~ include ValueType~ - Inside source: true *** True Line Result include ValueType ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.wrapped_lines_recur word, rest, length, aggregate~ - Inside source: true *** True Line Result def self.wrapped_lines_recur word, rest, length, aggregate ** Processing line: ~ if word.nil?~ - Inside source: true *** True Line Result if word.nil? ** Processing line: ~ return aggregate~ - Inside source: true *** True Line Result return aggregate ** Processing line: ~ elsif rest[0].nil?~ - Inside source: true *** True Line Result elsif rest[0].nil? ** Processing line: ~ aggregate << word + "\n"~ - Inside source: true *** True Line Result aggregate << word + "\n" ** Processing line: ~ return aggregate~ - Inside source: true *** True Line Result return aggregate ** Processing line: ~ elsif (word + " " + rest[0]).length > length~ - Inside source: true *** True Line Result elsif (word + " " + rest[0]).length > length ** Processing line: ~ aggregate << word + "\n"~ - Inside source: true *** True Line Result aggregate << word + "\n" ** Processing line: ~ return wrapped_lines_recur rest[0], rest[1..-1], length, aggregate~ - Inside source: true *** True Line Result return wrapped_lines_recur rest[0], rest[1..-1], length, aggregate ** Processing line: ~ elsif (word + " " + rest[0]).length <= length~ - Inside source: true *** True Line Result elsif (word + " " + rest[0]).length <= length ** Processing line: ~ next_word = (word + " " + rest[0])~ - Inside source: true *** True Line Result next_word = (word + " " + rest[0]) ** Processing line: ~ return wrapped_lines_recur next_word, rest[1..-1], length, aggregate~ - Inside source: true *** True Line Result return wrapped_lines_recur next_word, rest[1..-1], length, aggregate ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ log <<-S~ - Inside source: true *** True Line Result log <<-S ** Processing line: ~ WARNING:~ - Inside source: true *** True Line Result WARNING: ** Processing line: ~ #{word} is too long to fit in length of #{length}.~ - Inside source: true *** True Line Result #{word} is too long to fit in length of #{length}. ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ next_word = (word + " " + rest[0])~ - Inside source: true *** True Line Result next_word = (word + " " + rest[0]) ** Processing line: ~ return wrapped_lines_recur next_word, rest[1..-1], length, aggregate~ - Inside source: true *** True Line Result return wrapped_lines_recur next_word, rest[1..-1], length, aggregate ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def char_byte~ - Inside source: true *** True Line Result def char_byte ** Processing line: ~ return nil if self.length == 0~ - Inside source: true *** True Line Result return nil if self.length == 0 ** Processing line: ~ c = self.each_char.first.bytes~ - Inside source: true *** True Line Result c = self.each_char.first.bytes ** Processing line: ~ c = c.first if c.is_a? Enumerable~ - Inside source: true *** True Line Result c = c.first if c.is_a? Enumerable ** Processing line: ~ c~ - Inside source: true *** True Line Result c ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def insert_character_at index, char~ - Inside source: true *** True Line Result def insert_character_at index, char ** Processing line: ~ t = each_char.to_a~ - Inside source: true *** True Line Result t = each_char.to_a ** Processing line: ~ t = (t.insert index, char)~ - Inside source: true *** True Line Result t = (t.insert index, char) ** Processing line: ~ t.join~ - Inside source: true *** True Line Result t.join ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def excluding_character_at index~ - Inside source: true *** True Line Result def excluding_character_at index ** Processing line: ~ t = each_char.to_a~ - Inside source: true *** True Line Result t = each_char.to_a ** Processing line: ~ t.delete_at index~ - Inside source: true *** True Line Result t.delete_at index ** Processing line: ~ t.join~ - Inside source: true *** True Line Result t.join ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def excluding_last_character~ - Inside source: true *** True Line Result def excluding_last_character ** Processing line: ~ return "" if self.length <= 1~ - Inside source: true *** True Line Result return "" if self.length <= 1 ** Processing line: ~ return excluding_character_at(self.length - 1)~ - Inside source: true *** True Line Result return excluding_character_at(self.length - 1) ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def end_with_bang?~ - Inside source: true *** True Line Result def end_with_bang? ** Processing line: ~ self[-1] == "!"~ - Inside source: true *** True Line Result self[-1] == "!" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def without_ending_bang~ - Inside source: true *** True Line Result def without_ending_bang ** Processing line: ~ return self unless end_with_bang?~ - Inside source: true *** True Line Result return self unless end_with_bang? ** Processing line: ~ self[0..-2]~ - Inside source: true *** True Line Result self[0..-2] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.wrapped_lines string, length~ - Inside source: true *** True Line Result def self.wrapped_lines string, length ** Processing line: ~ string.each_line.map do |l|~ - Inside source: true *** True Line Result string.each_line.map do |l| ** Processing line: ~ l = l.rstrip~ - Inside source: true *** True Line Result l = l.rstrip ** Processing line: ~ if l.length < length~ - Inside source: true *** True Line Result if l.length < length ** Processing line: ~ l + "\n"~ - Inside source: true *** True Line Result l + "\n" ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ words = l.split ' '~ - Inside source: true *** True Line Result words = l.split ' ' ** Processing line: ~ wrapped_lines_recur(words[0], words[1..-1], length, []).flatten~ - Inside source: true *** True Line Result wrapped_lines_recur(words[0], words[1..-1], length, []).flatten ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end.flatten~ - Inside source: true *** True Line Result end.flatten ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def wrapped_lines length~ - Inside source: true *** True Line Result def wrapped_lines length ** Processing line: ~ String.wrapped_lines self, length~ - Inside source: true *** True Line Result String.wrapped_lines self, length ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def wrap length~ - Inside source: true *** True Line Result def wrap length ** Processing line: ~ wrapped_lines(length).join.rstrip~ - Inside source: true *** True Line Result wrapped_lines(length).join.rstrip ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def multiline?~ - Inside source: true *** True Line Result def multiline? ** Processing line: ~ include? "\n"~ - Inside source: true *** True Line Result include? "\n" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def indent_lines amount, char = " "~ - Inside source: true *** True Line Result def indent_lines amount, char = " " ** Processing line: ~ self.each_line.each_with_index.map do |l, i|~ - Inside source: true *** True Line Result self.each_line.each_with_index.map do |l, i| ** Processing line: ~ if i == 0~ - Inside source: true *** True Line Result if i == 0 ** Processing line: ~ l~ - Inside source: true *** True Line Result l ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ char * amount + l~ - Inside source: true *** True Line Result char * amount + l ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end.join~ - Inside source: true *** True Line Result end.join ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def quote~ - Inside source: true *** True Line Result def quote ** Processing line: ~ "\"#{self}\""~ - Inside source: true *** True Line Result "\"#{self}\"" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def trim~ - Inside source: true *** True Line Result def trim ** Processing line: ~ strip~ - Inside source: true *** True Line Result strip ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def trim!~ - Inside source: true *** True Line Result def trim! ** Processing line: ~ strip!~ - Inside source: true *** True Line Result strip! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def ltrim~ - Inside source: true *** True Line Result def ltrim ** Processing line: ~ lstrip~ - Inside source: true *** True Line Result lstrip ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def ltrim!~ - Inside source: true *** True Line Result def ltrim! ** Processing line: ~ lstrip!~ - Inside source: true *** True Line Result lstrip! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rtrim~ - Inside source: true *** True Line Result def rtrim ** Processing line: ~ rstrip~ - Inside source: true *** True Line Result rstrip ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def rtrim!~ - Inside source: true *** True Line Result def rtrim! ** Processing line: ~ rstrip!~ - Inside source: true *** True Line Result rstrip! ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def serialize~ - Inside source: true *** True Line Result def serialize ** Processing line: ~ self~ - Inside source: true *** True Line Result self ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** tests.rb~ - Header detected. *** True Line Result *** True Line Result *** tests.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/tests.rb~ - Inside source: true *** True Line Result # ./dragon/tests.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # tests.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # tests.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Tests~ - Inside source: true *** True Line Result class Tests ** Processing line: ~ attr_accessor :failed, :passed, :inconclusive~ - Inside source: true *** True Line Result attr_accessor :failed, :passed, :inconclusive ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @failed = []~ - Inside source: true *** True Line Result @failed = [] ** Processing line: ~ @passed = []~ - Inside source: true *** True Line Result @passed = [] ** Processing line: ~ @inconclusive = []~ - Inside source: true *** True Line Result @inconclusive = [] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def run_test m~ - Inside source: true *** True Line Result def run_test m ** Processing line: ~ args = Args.new $gtk, nil~ - Inside source: true *** True Line Result args = Args.new $gtk, nil ** Processing line: ~ assert = Assert.new~ - Inside source: true *** True Line Result assert = Assert.new ** Processing line: ~ begin~ - Inside source: true *** True Line Result begin ** Processing line: ~ log_test_running m~ - Inside source: true *** True Line Result log_test_running m ** Processing line: ~ send(m, args, assert)~ - Inside source: true *** True Line Result send(m, args, assert) ** Processing line: ~ if !assert.assertion_performed~ - Inside source: true *** True Line Result if !assert.assertion_performed ** Processing line: ~ log_inconclusive m~ - Inside source: true *** True Line Result log_inconclusive m ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ log_passed m~ - Inside source: true *** True Line Result log_passed m ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ if test_signature_invalid_exception? e, m~ - Inside source: true *** True Line Result if test_signature_invalid_exception? e, m ** Processing line: ~ log_test_signature_incorrect m~ - Inside source: true *** True Line Result log_test_signature_incorrect m ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ mark_test_failed m, e~ - Inside source: true *** True Line Result mark_test_failed m, e ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_methods_focused~ - Inside source: true *** True Line Result def test_methods_focused ** Processing line: ~ Object.methods.find_all { |m| m.start_with?( "focus_test_") }~ - Inside source: true *** True Line Result Object.methods.find_all { |m| m.start_with?( "focus_test_") } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_methods~ - Inside source: true *** True Line Result def test_methods ** Processing line: ~ Object.methods.find_all { |m| m.start_with? "test_" }~ - Inside source: true *** True Line Result Object.methods.find_all { |m| m.start_with? "test_" } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def start~ - Inside source: true *** True Line Result def start ** Processing line: ~ log "* TEST: gtk.test.start has been invoked."~ - Inside source: true *** True Line Result log "* TEST: gtk.test.start has been invoked." ** Processing line: ~ if test_methods_focused.length != 0~ - Inside source: true *** True Line Result if test_methods_focused.length != 0 ** Processing line: ~ @is_running = true~ - Inside source: true *** True Line Result @is_running = true ** Processing line: ~ test_methods_focused.each { |m| run_test m }~ - Inside source: true *** True Line Result test_methods_focused.each { |m| run_test m } ** Processing line: ~ print_summary~ - Inside source: true *** True Line Result print_summary ** Processing line: ~ @is_running = false~ - Inside source: true *** True Line Result @is_running = false ** Processing line: ~ elsif test_methods.length == 0~ - Inside source: true *** True Line Result elsif test_methods.length == 0 ** Processing line: ~ log_no_tests_found~ - Inside source: true *** True Line Result log_no_tests_found ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ @is_running = true~ - Inside source: true *** True Line Result @is_running = true ** Processing line: ~ test_methods.each { |m| run_test m }~ - Inside source: true *** True Line Result test_methods.each { |m| run_test m } ** Processing line: ~ print_summary~ - Inside source: true *** True Line Result print_summary ** Processing line: ~ @is_running = false~ - Inside source: true *** True Line Result @is_running = false ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def mark_test_failed m, e~ - Inside source: true *** True Line Result def mark_test_failed m, e ** Processing line: ~ message = "Failed."~ - Inside source: true *** True Line Result message = "Failed." ** Processing line: ~ self.failed << { m: m, e: e }~ - Inside source: true *** True Line Result self.failed << { m: m, e: e } ** Processing line: ~ log message~ - Inside source: true *** True Line Result log message ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def running?~ - Inside source: true *** True Line Result def running? ** Processing line: ~ @is_running~ - Inside source: true *** True Line Result @is_running ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_inconclusive m~ - Inside source: true *** True Line Result def log_inconclusive m ** Processing line: ~ self.inconclusive << {m: m}~ - Inside source: true *** True Line Result self.inconclusive << {m: m} ** Processing line: ~ log "Inconclusive."~ - Inside source: true *** True Line Result log "Inconclusive." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_passed m~ - Inside source: true *** True Line Result def log_passed m ** Processing line: ~ self.passed << {m: m}~ - Inside source: true *** True Line Result self.passed << {m: m} ** Processing line: ~ log "Passed."~ - Inside source: true *** True Line Result log "Passed." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_no_tests_found~ - Inside source: true *** True Line Result def log_no_tests_found ** Processing line: ~ log <<-S~ - Inside source: true *** True Line Result log <<-S ** Processing line: ~ No tests were found. To create a test. Define a method~ - Inside source: true *** True Line Result No tests were found. To create a test. Define a method ** Processing line: ~ that begins with test_. For example:~ - Inside source: true *** True Line Result that begins with test_. For example: ** Processing line: ~ #+begin_src~ - Inside source: true *** True Line Result #+begin_src ** Processing line: ~ def test_game_over args, assert~ - Inside source: true *** True Line Result def test_game_over args, assert ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ #+end_src~ - Inside source: true *** True Line Result #+end_src ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_test_running m~ - Inside source: true *** True Line Result def log_test_running m ** Processing line: ~ log "** Running: #{m}"~ - Inside source: true *** True Line Result log "** Running: #{m}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def test_signature_invalid_exception? e, m~ - Inside source: true *** True Line Result def test_signature_invalid_exception? e, m ** Processing line: ~ e.to_s.include?(m.to_s) && e.to_s.include?("wrong number of arguments")~ - Inside source: true *** True Line Result e.to_s.include?(m.to_s) && e.to_s.include?("wrong number of arguments") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def log_test_signature_incorrect m~ - Inside source: true *** True Line Result def log_test_signature_incorrect m ** Processing line: ~ log "TEST METHOD INVALID:", <<-S~ - Inside source: true *** True Line Result log "TEST METHOD INVALID:", <<-S ** Processing line: ~ I found a test method called :#{m}. But it needs to have~ - Inside source: true *** True Line Result I found a test method called :#{m}. But it needs to have ** Processing line: ~ the following method signature:~ - Inside source: true *** True Line Result the following method signature: ** Processing line: ~ #+begin_src~ - Inside source: true *** True Line Result #+begin_src ** Processing line: ~ def #{m} args, assert~ - Inside source: true *** True Line Result def #{m} args, assert ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ #+end_src~ - Inside source: true *** True Line Result #+end_src ** Processing line: ~ Please update the method signature to match the code above. If you~ - Inside source: true *** True Line Result Please update the method signature to match the code above. If you ** Processing line: ~ did not intend this to be a test method. Rename the method so it does~ - Inside source: true *** True Line Result did not intend this to be a test method. Rename the method so it does ** Processing line: ~ not start with "test_".~ - Inside source: true *** True Line Result not start with "test_". ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def print_summary~ - Inside source: true *** True Line Result def print_summary ** Processing line: ~ log "** Summary"~ - Inside source: true *** True Line Result log "** Summary" ** Processing line: ~ log "*** Passed"~ - Inside source: true *** True Line Result log "*** Passed" ** Processing line: ~ log "#{self.passed.length} test(s) passed."~ - Inside source: true *** True Line Result log "#{self.passed.length} test(s) passed." ** Processing line: ~ self.passed.each { |h| log "**** :#{h[:m]}" }~ - Inside source: true *** True Line Result self.passed.each { |h| log "**** :#{h[:m]}" } ** Processing line: ~ log "*** Inconclusive"~ - Inside source: true *** True Line Result log "*** Inconclusive" ** Processing line: ~ if self.inconclusive.length > 0~ - Inside source: true *** True Line Result if self.inconclusive.length > 0 ** Processing line: ~ log_once :assertion_ok_note, <<-S~ - Inside source: true *** True Line Result log_once :assertion_ok_note, <<-S ** Processing line: ~ NOTE FOR INCONCLUSIVE TESTS: No assertion was performed in the test.~ - Inside source: true *** True Line Result NOTE FOR INCONCLUSIVE TESTS: No assertion was performed in the test. ** Processing line: ~ Add assert.ok! at the end of the test if you are using your own assertions.~ - Inside source: true *** True Line Result Add assert.ok! at the end of the test if you are using your own assertions. ** Processing line: ~ S~ - Inside source: true *** True Line Result S ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ log "#{self.inconclusive.length} test(s) inconclusive."~ - Inside source: true *** True Line Result log "#{self.inconclusive.length} test(s) inconclusive." ** Processing line: ~ self.inconclusive.each { |h| log "**** :#{h[:m]}" }~ - Inside source: true *** True Line Result self.inconclusive.each { |h| log "**** :#{h[:m]}" } ** Processing line: ~ log "*** Failed"~ - Inside source: true *** True Line Result log "*** Failed" ** Processing line: ~ log "#{self.failed.length} test(s) failed."~ - Inside source: true *** True Line Result log "#{self.failed.length} test(s) failed." ** Processing line: ~ self.failed.each do |h|~ - Inside source: true *** True Line Result self.failed.each do |h| ** Processing line: ~ log "**** Test name: :#{h[:m]}"~ - Inside source: true *** True Line Result log "**** Test name: :#{h[:m]}" ** Processing line: ~ log "#{h[:e].to_s.gsub("* ERROR:", "").strip}\n#{h[:e].__backtrace_to_org__}"~ - Inside source: true *** True Line Result log "#{h[:e].to_s.gsub("* ERROR:", "").strip}\n#{h[:e].__backtrace_to_org__}" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** trace.rb~ - Header detected. *** True Line Result *** True Line Result *** trace.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/trace.rb~ - Inside source: true *** True Line Result # ./dragon/trace.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # trace.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # trace.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright:~ - Inside source: true *** True Line Result # Contributors outside of DragonRuby who also hold Copyright: ** Processing line: ~ # - Dan Healy: https://github.com/danhealy~ - Inside source: true *** True Line Result # - Dan Healy: https://github.com/danhealy ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ module Trace~ - Inside source: true *** True Line Result module Trace ** Processing line: ~ IGNORED_METHODS = [~ - Inside source: true *** True Line Result IGNORED_METHODS = [ ** Processing line: ~ :define_singleton_method, :raise_immediately, :instance_of?,~ - Inside source: true *** True Line Result :define_singleton_method, :raise_immediately, :instance_of?, ** Processing line: ~ :raise_with_caller, :initialize_copy, :class_defined?,~ - Inside source: true *** True Line Result :raise_with_caller, :initialize_copy, :class_defined?, ** Processing line: ~ :instance_variable_get, :format, :purge_class, :instance_variable_defined?,~ - Inside source: true *** True Line Result :instance_variable_get, :format, :purge_class, :instance_variable_defined?, ** Processing line: ~ :metadata_object_id, :instance_variable_set, :__printstr__,~ - Inside source: true *** True Line Result :metadata_object_id, :instance_variable_set, :__printstr__, ** Processing line: ~ :instance_variables, :is_a?, :p, :kind_of?, :==, :log_once,~ - Inside source: true *** True Line Result :instance_variables, :is_a?, :p, :kind_of?, :==, :log_once, ** Processing line: ~ :protected_methods, :log_once_info, :private_methods, :open,~ - Inside source: true *** True Line Result :protected_methods, :log_once_info, :private_methods, :open, ** Processing line: ~ :!=, :initialize, :object_id, :Hash, :methods, :tick, :!,~ - Inside source: true *** True Line Result :!=, :initialize, :object_id, :Hash, :methods, :tick, :!, ** Processing line: ~ :respond_to?, :yield_self, :send, :instance_eval, :then,~ - Inside source: true *** True Line Result :respond_to?, :yield_self, :send, :instance_eval, :then, ** Processing line: ~ :__method__, :__send__, :log_print, :dig, :itself, :log_info,~ - Inside source: true *** True Line Result :__method__, :__send__, :log_print, :dig, :itself, :log_info, ** Processing line: ~ :remove_instance_variable, :raise, :public_methods, :instance_exec,~ - Inside source: true *** True Line Result :remove_instance_variable, :raise, :public_methods, :instance_exec, ** Processing line: ~ :gets, :local_variables, :tap, :__id__, :class, :singleton_class,~ - Inside source: true *** True Line Result :gets, :local_variables, :tap, :__id__, :class, :singleton_class, ** Processing line: ~ :block_given?, :_inspect, :puts, :global_variables, :getc, :iterator?,~ - Inside source: true *** True Line Result :block_given?, :_inspect, :puts, :global_variables, :getc, :iterator?, ** Processing line: ~ :hash, :to_enum, :printf, :frozen?, :print, :original_puts,~ - Inside source: true *** True Line Result :hash, :to_enum, :printf, :frozen?, :print, :original_puts, ** Processing line: ~ :srand, :freeze, :rand, :extend, :eql?, :equal?, :sprintf, :clone,~ - Inside source: true *** True Line Result :srand, :freeze, :rand, :extend, :eql?, :equal?, :sprintf, :clone, ** Processing line: ~ :dup, :to_s, :primitive_determined?, :inspect, :primitive?, :help,~ - Inside source: true *** True Line Result :dup, :to_s, :primitive_determined?, :inspect, :primitive?, :help, ** Processing line: ~ :__object_methods__, :proc, :__custom_object_methods__, :Float, :enum_for,~ - Inside source: true *** True Line Result :__object_methods__, :proc, :__custom_object_methods__, :Float, :enum_for, ** Processing line: ~ :__supports_ivars__?, :nil?, :fast_rand, :or, :and,~ - Inside source: true *** True Line Result :__supports_ivars__?, :nil?, :fast_rand, :or, :and, ** Processing line: ~ :__caller_without_noise__, :__gtk_ruby_string_contains_source_file_path__?,~ - Inside source: true *** True Line Result :__caller_without_noise__, :__gtk_ruby_string_contains_source_file_path__?, ** Processing line: ~ :__pretty_print_exception__, :__gtk_ruby_source_files__,~ - Inside source: true *** True Line Result :__pretty_print_exception__, :__gtk_ruby_source_files__, ** Processing line: ~ :String, :log, :Array, :putsc, :Integer, :===, :here,~ - Inside source: true *** True Line Result :String, :log, :Array, :putsc, :Integer, :===, :here, ** Processing line: ~ :raise_error_with_kind_of_okay_message, :better_instance_information,~ - Inside source: true *** True Line Result :raise_error_with_kind_of_okay_message, :better_instance_information, ** Processing line: ~ :lambda, :fail, :method_missing, :__case_eqq, :caller,~ - Inside source: true *** True Line Result :lambda, :fail, :method_missing, :__case_eqq, :caller, ** Processing line: ~ :raise_method_missing_better_error, :require, :singleton_methods,~ - Inside source: true *** True Line Result :raise_method_missing_better_error, :require, :singleton_methods, ** Processing line: ~ :!~, :loop, :numeric_or_default, :`, :state, :inputs, :outputs, "args=".to_sym,~ - Inside source: true *** True Line Result :!~, :loop, :numeric_or_default, :`, :state, :inputs, :outputs, "args=".to_sym, ** Processing line: ~ :grid, :gtk, :dragon, :args, :passes, :tick, :grep_source, :grep_source_file,~ - Inside source: true *** True Line Result :grid, :gtk, :dragon, :args, :passes, :tick, :grep_source, :grep_source_file, ** Processing line: ~ :numeric_or_default, :f_or_default, :s_or_default, :i_or_default,~ - Inside source: true *** True Line Result :numeric_or_default, :f_or_default, :s_or_default, :i_or_default, ** Processing line: ~ :comment, :primitive_marker, :xrepl, :repl~ - Inside source: true *** True Line Result :comment, :primitive_marker, :xrepl, :repl ** Processing line: ~ ]~ - Inside source: true *** True Line Result ] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.traced_classes~ - Inside source: true *** True Line Result def self.traced_classes ** Processing line: ~ @traced_classes ||= []~ - Inside source: true *** True Line Result @traced_classes ||= [] ** Processing line: ~ @traced_classes~ - Inside source: true *** True Line Result @traced_classes ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.mark_class_as_traced! klass~ - Inside source: true *** True Line Result def self.mark_class_as_traced! klass ** Processing line: ~ @traced_classes << klass~ - Inside source: true *** True Line Result @traced_classes << klass ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.untrace_classes!~ - Inside source: true *** True Line Result def self.untrace_classes! ** Processing line: ~ traced_classes.each do |klass|~ - Inside source: true *** True Line Result traced_classes.each do |klass| ** Processing line: ~ klass.class_eval do~ - Inside source: true *** True Line Result klass.class_eval do ** Processing line: ~ all_methods = klass.instance_methods false~ - Inside source: true *** True Line Result all_methods = klass.instance_methods false ** Processing line: ~ if klass.instance_methods.respond_to?(:__trace_call_depth__)~ - Inside source: true *** True Line Result if klass.instance_methods.respond_to?(:__trace_call_depth__) ** Processing line: ~ undef_method :__trace_call_depth__~ - Inside source: true *** True Line Result undef_method :__trace_call_depth__ ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ GTK::Trace.filter_methods_to_trace(all_methods).each do |m|~ - Inside source: true *** True Line Result GTK::Trace.filter_methods_to_trace(all_methods).each do |m| ** Processing line: ~ original_method_name = m~ - Inside source: true *** True Line Result original_method_name = m ** Processing line: ~ trace_method_name = GTK::Trace.trace_method_name_for m~ - Inside source: true *** True Line Result trace_method_name = GTK::Trace.trace_method_name_for m ** Processing line: ~ if klass.instance_methods.include? trace_method_name~ - Inside source: true *** True Line Result if klass.instance_methods.include? trace_method_name ** Processing line: ~ alias_method m, trace_method_name~ - Inside source: true *** True Line Result alias_method m, trace_method_name ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ $last_method_traced = nil~ - Inside source: true *** True Line Result $last_method_traced = nil ** Processing line: ~ @traced_classes.clear~ - Inside source: true *** True Line Result @traced_classes.clear ** Processing line: ~ $trace_enabled = false~ - Inside source: true *** True Line Result $trace_enabled = false ** Processing line: ~ if !$gtk.production~ - Inside source: true *** True Line Result if !$gtk.production ** Processing line: ~ $gtk.write_file_root 'logs/trace.txt', "Add trace!(SOMEOBJECT) to the top of ~tick~ and this file will be populated with invocation information.\n"~ - Inside source: true *** True Line Result $gtk.write_file_root 'logs/trace.txt', "Add trace!(SOMEOBJECT) to the top of ~tick~ and this file will be populated with invocation information.\n" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.trace_method_name_for m~ - Inside source: true *** True Line Result def self.trace_method_name_for m ** Processing line: ~ "__trace_original_#{m}__".to_sym~ - Inside source: true *** True Line Result "__trace_original_#{m}__".to_sym ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.original_method_name_for m~ - Inside source: true *** True Line Result def self.original_method_name_for m ** Processing line: ~ return m unless m.to_s.start_with?("__trace_original_") && m.to_s.end_with?("__")~ - Inside source: true *** True Line Result return m unless m.to_s.start_with?("__trace_original_") && m.to_s.end_with?("__") ** Processing line: ~ m[16..-3]~ - Inside source: true *** True Line Result m[16..-3] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.filter_methods_to_trace methods~ - Inside source: true *** True Line Result def self.filter_methods_to_trace methods ** Processing line: ~ methods.reject { |m| m.start_with? "__trace_" }.reject { |m| IGNORED_METHODS.include? m }~ - Inside source: true *** True Line Result methods.reject { |m| m.start_with? "__trace_" }.reject { |m| IGNORED_METHODS.include? m } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.trace_times_string~ - Inside source: true *** True Line Result def self.trace_times_string ** Processing line: ~ str = []~ - Inside source: true *** True Line Result str = [] ** Processing line: ~ $trace_performance.sort_by {|method_name, times| -times[:avg] }.each do |method_name, times|~ - Inside source: true *** True Line Result $trace_performance.sort_by {|method_name, times| -times[:avg] }.each do |method_name, times| ** Processing line: ~ str << "#{method_name}: #{times[:sum].round(2)}/#{times[:count]} #{times[:min]}ms min, #{times[:avg].round(2)}ms avg, #{times[:max]}ms max"~ - Inside source: true *** True Line Result str << "#{method_name}: #{times[:sum].round(2)}/#{times[:count]} #{times[:min]}ms min, #{times[:avg].round(2)}ms avg, #{times[:max]}ms max" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ str.join("\n")~ - Inside source: true *** True Line Result str.join("\n") ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def self.flush_trace pad_with_newline = false~ - Inside source: true *** True Line Result def self.flush_trace pad_with_newline = false ** Processing line: ~ $trace_puts ||= []~ - Inside source: true *** True Line Result $trace_puts ||= [] ** Processing line: ~ puts "(Trace info flushed!)"~ - Inside source: true *** True Line Result puts "(Trace info flushed!)" ** Processing line: ~ if $trace_puts.length > 0~ - Inside source: true *** True Line Result if $trace_puts.length > 0 ** Processing line: ~ text = $trace_puts.join("").strip + "\n" + self.trace_times_string + "\n"~ - Inside source: true *** True Line Result text = $trace_puts.join("").strip + "\n" + self.trace_times_string + "\n" ** Processing line: ~ if pad_with_newline~ - Inside source: true *** True Line Result if pad_with_newline ** Processing line: ~ $gtk.append_file_root 'logs/trace.txt', "\n" + text.strip~ - Inside source: true *** True Line Result $gtk.append_file_root 'logs/trace.txt', "\n" + text.strip ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ $gtk.append_file_root 'logs/trace.txt', text.strip~ - Inside source: true *** True Line Result $gtk.append_file_root 'logs/trace.txt', text.strip ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ $trace_puts.clear~ - Inside source: true *** True Line Result $trace_puts.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ # @gtk~ - Inside source: true *** True Line Result # @gtk ** Processing line: ~ def self.trace! instance = nil~ - Inside source: true *** True Line Result def self.trace! instance = nil ** Processing line: ~ $trace_history ||= []~ - Inside source: true *** True Line Result $trace_history ||= [] ** Processing line: ~ $trace_enabled = true~ - Inside source: true *** True Line Result $trace_enabled = true ** Processing line: ~ $trace_call_depth ||=0~ - Inside source: true *** True Line Result $trace_call_depth ||=0 ** Processing line: ~ $trace_performance = Hash.new {|h,k|~ - Inside source: true *** True Line Result $trace_performance = Hash.new {|h,k| ** Processing line: ~ h[k] = {~ - Inside source: true *** True Line Result h[k] = { ** Processing line: ~ min: 100000,~ - Inside source: true *** True Line Result min: 100000, ** Processing line: ~ max: 0,~ - Inside source: true *** True Line Result max: 0, ** Processing line: ~ avg: 0,~ - Inside source: true *** True Line Result avg: 0, ** Processing line: ~ sum: 0,~ - Inside source: true *** True Line Result sum: 0, ** Processing line: ~ count: 0~ - Inside source: true *** True Line Result count: 0 ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ flush_trace~ - Inside source: true *** True Line Result flush_trace ** Processing line: ~ instance = $top_level unless instance~ - Inside source: true *** True Line Result instance = $top_level unless instance ** Processing line: ~ return if Trace.traced_classes.include? instance.class~ - Inside source: true *** True Line Result return if Trace.traced_classes.include? instance.class ** Processing line: ~ all_methods = instance.class.instance_methods false~ - Inside source: true *** True Line Result all_methods = instance.class.instance_methods false ** Processing line: ~ instance.class.class_eval do~ - Inside source: true *** True Line Result instance.class.class_eval do ** Processing line: ~ attr_accessor :__trace_call_depth__ unless instance.class.instance_methods.include?(:__trace_call_depth__)~ - Inside source: true *** True Line Result attr_accessor :__trace_call_depth__ unless instance.class.instance_methods.include?(:__trace_call_depth__) ** Processing line: ~ GTK::Trace.filter_methods_to_trace(all_methods).each do |m|~ - Inside source: true *** True Line Result GTK::Trace.filter_methods_to_trace(all_methods).each do |m| ** Processing line: ~ original_method_name = m~ - Inside source: true *** True Line Result original_method_name = m ** Processing line: ~ trace_method_name = GTK::Trace.trace_method_name_for m~ - Inside source: true *** True Line Result trace_method_name = GTK::Trace.trace_method_name_for m ** Processing line: ~ alias_method trace_method_name, m~ - Inside source: true *** True Line Result alias_method trace_method_name, m ** Processing line: ~ $trace_puts << "Tracing #{m} on #{instance.class}.\n"~ - Inside source: true *** True Line Result $trace_puts << "Tracing #{m} on #{instance.class}.\n" ** Processing line: ~ define_method(m) do |*args|~ - Inside source: true *** True Line Result define_method(m) do |*args| ** Processing line: ~ instance.__trace_call_depth__ ||= 0~ - Inside source: true *** True Line Result instance.__trace_call_depth__ ||= 0 ** Processing line: ~ tab_width = " " * (instance.__trace_call_depth__ * 8)~ - Inside source: true *** True Line Result tab_width = " " * (instance.__trace_call_depth__ * 8) ** Processing line: ~ instance.__trace_call_depth__ += 1~ - Inside source: true *** True Line Result instance.__trace_call_depth__ += 1 ** Processing line: ~ $trace_call_depth = instance.__trace_call_depth__~ - Inside source: true *** True Line Result $trace_call_depth = instance.__trace_call_depth__ ** Processing line: ~ parameters = "#{args}"[1..-2]~ - Inside source: true *** True Line Result parameters = "#{args}"[1..-2] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $trace_puts << "\n #{tab_width}#{m}(#{parameters})"~ - Inside source: true *** True Line Result $trace_puts << "\n #{tab_width}#{m}(#{parameters})" ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ execution_time = Time.new~ - Inside source: true *** True Line Result execution_time = Time.new ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ $last_method_traced = trace_method_name~ - Inside source: true *** True Line Result $last_method_traced = trace_method_name ** Processing line: ~ $trace_history << [m, parameters]~ - Inside source: true *** True Line Result $trace_history << [m, parameters] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ result = send(trace_method_name, *args)~ - Inside source: true *** True Line Result result = send(trace_method_name, *args) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class_m = "#{instance.class}##{m}"~ - Inside source: true *** True Line Result class_m = "#{instance.class}##{m}" ** Processing line: ~ completion_time = ((Time.new - execution_time).to_f * 1000).round(2)~ - Inside source: true *** True Line Result completion_time = ((Time.new - execution_time).to_f * 1000).round(2) ** Processing line: ~ $trace_performance[class_m][:min] = [$trace_performance[class_m][:min], completion_time].min~ - Inside source: true *** True Line Result $trace_performance[class_m][:min] = [$trace_performance[class_m][:min], completion_time].min ** Processing line: ~ $trace_performance[class_m][:max] = [$trace_performance[class_m][:max], completion_time].max~ - Inside source: true *** True Line Result $trace_performance[class_m][:max] = [$trace_performance[class_m][:max], completion_time].max ** Processing line: ~ $trace_performance[class_m][:count] += 1~ - Inside source: true *** True Line Result $trace_performance[class_m][:count] += 1 ** Processing line: ~ $trace_performance[class_m][:sum] += completion_time~ - Inside source: true *** True Line Result $trace_performance[class_m][:sum] += completion_time ** Processing line: ~ $trace_performance[class_m][:avg] = $trace_performance[class_m][:sum].fdiv($trace_performance[class_m][:count])~ - Inside source: true *** True Line Result $trace_performance[class_m][:avg] = $trace_performance[class_m][:sum].fdiv($trace_performance[class_m][:count]) ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ instance.__trace_call_depth__ -= 1~ - Inside source: true *** True Line Result instance.__trace_call_depth__ -= 1 ** Processing line: ~ instance.__trace_call_depth__ = instance.__trace_call_depth__.greater 0~ - Inside source: true *** True Line Result instance.__trace_call_depth__ = instance.__trace_call_depth__.greater 0 ** Processing line: ~ $trace_puts << "\n #{tab_width} #{completion_time > 10 ? '!!! ' : ''}#{completion_time}ms success: #{m}"~ - Inside source: true *** True Line Result $trace_puts << "\n #{tab_width} #{completion_time > 10 ? '!!! ' : ''}#{completion_time}ms success: #{m}" ** Processing line: ~ if instance.__trace_call_depth__ == 0~ - Inside source: true *** True Line Result if instance.__trace_call_depth__ == 0 ** Processing line: ~ $trace_puts << "\n"~ - Inside source: true *** True Line Result $trace_puts << "\n" ** Processing line: ~ $trace_history.clear~ - Inside source: true *** True Line Result $trace_history.clear ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ result~ - Inside source: true *** True Line Result result ** Processing line: ~ rescue Exception => e~ - Inside source: true *** True Line Result rescue Exception => e ** Processing line: ~ instance.__trace_call_depth__ -= 1~ - Inside source: true *** True Line Result instance.__trace_call_depth__ -= 1 ** Processing line: ~ instance.__trace_call_depth__ = instance.__trace_call_depth__.greater 0~ - Inside source: true *** True Line Result instance.__trace_call_depth__ = instance.__trace_call_depth__.greater 0 ** Processing line: ~ $trace_puts << "\n #{tab_width} failed: #{m}"~ - Inside source: true *** True Line Result $trace_puts << "\n #{tab_width} failed: #{m}" ** Processing line: ~ if instance.__trace_call_depth__ == 0~ - Inside source: true *** True Line Result if instance.__trace_call_depth__ == 0 ** Processing line: ~ $trace_puts << "\n #{tab_width} #{e}"~ - Inside source: true *** True Line Result $trace_puts << "\n #{tab_width} #{e}" ** Processing line: ~ $trace_puts << "\n"~ - Inside source: true *** True Line Result $trace_puts << "\n" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ $trace_call_depth = 0~ - Inside source: true *** True Line Result $trace_call_depth = 0 ** Processing line: ~ GTK::Trace.flush_trace true~ - Inside source: true *** True Line Result GTK::Trace.flush_trace true ** Processing line: ~ raise e~ - Inside source: true *** True Line Result raise e ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ mark_class_as_traced! instance.class~ - Inside source: true *** True Line Result mark_class_as_traced! instance.class ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** tweetcart.rb~ - Header detected. *** True Line Result *** True Line Result *** tweetcart.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/tweetcart.rb~ - Inside source: true *** True Line Result # ./dragon/tweetcart.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # tweetcart.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # tweetcart.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def $top_level.TICK &block~ - Inside source: true *** True Line Result def $top_level.TICK &block ** Processing line: ~ $top_level.define_method(:tick) do |args|~ - Inside source: true *** True Line Result $top_level.define_method(:tick) do |args| ** Processing line: ~ args.outputs[:scene].w = 160~ - Inside source: true *** True Line Result args.outputs[:scene].w = 160 ** Processing line: ~ args.outputs[:scene].h = 90~ - Inside source: true *** True Line Result args.outputs[:scene].h = 90 ** Processing line: ~ args.outputs[:scene].background_color = [0, 0, 0, 0]~ - Inside source: true *** True Line Result args.outputs[:scene].background_color = [0, 0, 0, 0] ** Processing line: ~ block.call args~ - Inside source: true *** True Line Result block.call args ** Processing line: ~ args.outputs.sprites << { x: 0, y: 0, w: 1280, h: 720, path: :scene }~ - Inside source: true *** True Line Result args.outputs.sprites << { x: 0, y: 0, w: 1280, h: 720, path: :scene } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def $top_level.bg! *rgb~ - Inside source: true *** True Line Result def $top_level.bg! *rgb ** Processing line: ~ r,g,b = rgb~ - Inside source: true *** True Line Result r,g,b = rgb ** Processing line: ~ r ||= 255~ - Inside source: true *** True Line Result r ||= 255 ** Processing line: ~ g ||= r~ - Inside source: true *** True Line Result g ||= r ** Processing line: ~ b ||= g~ - Inside source: true *** True Line Result b ||= g ** Processing line: ~ $args.outputs.background_color = [r, g, b]~ - Inside source: true *** True Line Result $args.outputs.background_color = [r, g, b] ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def $top_level.slds~ - Inside source: true *** True Line Result def $top_level.slds ** Processing line: ~ $args.outputs[:scene].sprites~ - Inside source: true *** True Line Result $args.outputs[:scene].sprites ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def $top_level.slds! *os~ - Inside source: true *** True Line Result def $top_level.slds! *os ** Processing line: ~ if (os.first.is_a? Numeric)~ - Inside source: true *** True Line Result if (os.first.is_a? Numeric) ** Processing line: ~ sld!(*os)~ - Inside source: true *** True Line Result sld!(*os) ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ os.each { |o| sld!(*o) }~ - Inside source: true *** True Line Result os.each { |o| sld!(*o) } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def $top_level.sld! *params~ - Inside source: true *** True Line Result def $top_level.sld! *params ** Processing line: ~ x, y, w, h, r, g, b, a = nil~ - Inside source: true *** True Line Result x, y, w, h, r, g, b, a = nil ** Processing line: ~ if params.length == 2~ - Inside source: true *** True Line Result if params.length == 2 ** Processing line: ~ x, y = params~ - Inside source: true *** True Line Result x, y = params ** Processing line: ~ elsif params.length == 3 && (params.last.is_a? Array)~ - Inside source: true *** True Line Result elsif params.length == 3 && (params.last.is_a? Array) ** Processing line: ~ x = params[0]~ - Inside source: true *** True Line Result x = params[0] ** Processing line: ~ y = params[1]~ - Inside source: true *** True Line Result y = params[1] ** Processing line: ~ r, g, b, a = params[2]~ - Inside source: true *** True Line Result r, g, b, a = params[2] ** Processing line: ~ r ||= 255~ - Inside source: true *** True Line Result r ||= 255 ** Processing line: ~ g ||= r~ - Inside source: true *** True Line Result g ||= r ** Processing line: ~ b ||= g~ - Inside source: true *** True Line Result b ||= g ** Processing line: ~ a ||= 255~ - Inside source: true *** True Line Result a ||= 255 ** Processing line: ~ elsif params.length == 4~ - Inside source: true *** True Line Result elsif params.length == 4 ** Processing line: ~ x, y, w, h = params~ - Inside source: true *** True Line Result x, y, w, h = params ** Processing line: ~ elsif params.length == 5 && (params.last.is_a? Array)~ - Inside source: true *** True Line Result elsif params.length == 5 && (params.last.is_a? Array) ** Processing line: ~ x = params[0]~ - Inside source: true *** True Line Result x = params[0] ** Processing line: ~ y = params[1]~ - Inside source: true *** True Line Result y = params[1] ** Processing line: ~ w = params[2]~ - Inside source: true *** True Line Result w = params[2] ** Processing line: ~ h = params[3]~ - Inside source: true *** True Line Result h = params[3] ** Processing line: ~ r,g,b,a = params[4]~ - Inside source: true *** True Line Result r,g,b,a = params[4] ** Processing line: ~ r ||= 255~ - Inside source: true *** True Line Result r ||= 255 ** Processing line: ~ g ||= r~ - Inside source: true *** True Line Result g ||= r ** Processing line: ~ b ||= g~ - Inside source: true *** True Line Result b ||= g ** Processing line: ~ a ||= 255~ - Inside source: true *** True Line Result a ||= 255 ** Processing line: ~ elsif params.length >= 7~ - Inside source: true *** True Line Result elsif params.length >= 7 ** Processing line: ~ x, y, w, h, r, g, b = params~ - Inside source: true *** True Line Result x, y, w, h, r, g, b = params ** Processing line: ~ else~ - Inside source: true *** True Line Result else ** Processing line: ~ raise "I don't know how to render #{params} with reasonable defaults."~ - Inside source: true *** True Line Result raise "I don't know how to render #{params} with reasonable defaults." ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ w ||= 1~ - Inside source: true *** True Line Result w ||= 1 ** Processing line: ~ h ||= 1~ - Inside source: true *** True Line Result h ||= 1 ** Processing line: ~ r ||= 255~ - Inside source: true *** True Line Result r ||= 255 ** Processing line: ~ g ||= 255~ - Inside source: true *** True Line Result g ||= 255 ** Processing line: ~ b ||= 255~ - Inside source: true *** True Line Result b ||= 255 ** Processing line: ~ a ||= 255~ - Inside source: true *** True Line Result a ||= 255 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ slds << { x: x, y: y,~ - Inside source: true *** True Line Result slds << { x: x, y: y, ** Processing line: ~ w: w, h: h,~ - Inside source: true *** True Line Result w: w, h: h, ** Processing line: ~ r: r, g: g, b: b, a: a,~ - Inside source: true *** True Line Result r: r, g: g, b: b, a: a, ** Processing line: ~ path: :pixel }~ - Inside source: true *** True Line Result path: :pixel } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ =begin~ - Inside source: true *** True Line Result =begin ** Processing line: ~ wht = [255] * 3~ - Inside source: true *** True Line Result wht = [255] * 3 ** Processing line: ~ red = [255, 0, 0]~ - Inside source: true *** True Line Result red = [255, 0, 0] ** Processing line: ~ blu = [0, 130, 255]~ - Inside source: true *** True Line Result blu = [0, 130, 255] ** Processing line: ~ purp = [150, 80, 255]~ - Inside source: true *** True Line Result purp = [150, 80, 255] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ TICK {~ - Inside source: true *** True Line Result TICK { ** Processing line: ~ bg! 0~ - Inside source: true *** True Line Result bg! 0 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ slds << [0, 0, 3, 3, 0, 255, 0, 255]~ - Inside source: true *** True Line Result slds << [0, 0, 3, 3, 0, 255, 0, 255] ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ sld! 10, 10~ - Inside source: true *** True Line Result sld! 10, 10 ** Processing line: ~ sld! 20, 20, 3, 2~ - Inside source: true *** True Line Result sld! 20, 20, 3, 2 ** Processing line: ~ sld! 30, 30, 2, 2, red~ - Inside source: true *** True Line Result sld! 30, 30, 2, 2, red ** Processing line: ~ sld! 35, 35, blu~ - Inside source: true *** True Line Result sld! 35, 35, blu ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ slds! 40, 40~ - Inside source: true *** True Line Result slds! 40, 40 ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ slds! [50, 50],~ - Inside source: true *** True Line Result slds! [50, 50], ** Processing line: ~ [60, 60, purp],~ - Inside source: true *** True Line Result [60, 60, purp], ** Processing line: ~ [70, 70, 10, 10, wht],~ - Inside source: true *** True Line Result [70, 70, 10, 10, wht], ** Processing line: ~ [80, 80, 4, 4, 255, 0, 255]~ - Inside source: true *** True Line Result [80, 80, 4, 4, 255, 0, 255] ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ =end~ - Inside source: true *** True Line Result =end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src ** Processing line: ~~ - End of paragraph detected. *** True Line Result ** Processing line: ~*** wizards.rb~ - Header detected. *** True Line Result *** True Line Result *** wizards.rb ** Processing line: ~#+begin_src ruby~ - Line was identified as the beginning of a code block. *** True Line Result *** True Line Result #+begin_src ruby ** Processing line: ~ # ./dragon/wizards.rb~ - Inside source: true *** True Line Result # ./dragon/wizards.rb ** Processing line: ~ # coding: utf-8~ - Inside source: true *** True Line Result # coding: utf-8 ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ - Inside source: true *** True Line Result # Copyright 2019 DragonRuby LLC ** Processing line: ~ # MIT License~ - Inside source: true *** True Line Result # MIT License ** Processing line: ~ # wizards.rb has been released under MIT (*only this file*).~ - Inside source: true *** True Line Result # wizards.rb has been released under MIT (*only this file*). ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class Wizard~ - Inside source: true *** True Line Result class Wizard ** Processing line: ~ def metadata_file_path~ - Inside source: true *** True Line Result def metadata_file_path ** Processing line: ~ "metadata/game_metadata.txt"~ - Inside source: true *** True Line Result "metadata/game_metadata.txt" ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def get_metadata~ - Inside source: true *** True Line Result def get_metadata ** Processing line: ~ metadata = $gtk.read_file metadata_file_path~ - Inside source: true *** True Line Result metadata = $gtk.read_file metadata_file_path ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ if !metadata~ - Inside source: true *** True Line Result if !metadata ** Processing line: ~ write_blank_metadata~ - Inside source: true *** True Line Result write_blank_metadata ** Processing line: ~ metadata = $gtk.read_file metadata_file_path~ - Inside source: true *** True Line Result metadata = $gtk.read_file metadata_file_path ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ dev_id, dev_title, game_id, game_title, version, icon = *metadata.each_line.to_a~ - Inside source: true *** True Line Result dev_id, dev_title, game_id, game_title, version, icon = *metadata.each_line.to_a ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ {~ - Inside source: true *** True Line Result { ** Processing line: ~ dev_id: dev_id.strip.gsub("#", "").gsub("devid=", ""),~ - Inside source: true *** True Line Result dev_id: dev_id.strip.gsub("#", "").gsub("devid=", ""), ** Processing line: ~ dev_title: dev_title.strip.gsub("#", "").gsub("devtitle=", ""),~ - Inside source: true *** True Line Result dev_title: dev_title.strip.gsub("#", "").gsub("devtitle=", ""), ** Processing line: ~ game_id: game_id.strip.gsub("#", "").gsub("gameid=", ""),~ - Inside source: true *** True Line Result game_id: game_id.strip.gsub("#", "").gsub("gameid=", ""), ** Processing line: ~ game_title: game_title.strip.gsub("#", "").gsub("gametitle=", ""),~ - Inside source: true *** True Line Result game_title: game_title.strip.gsub("#", "").gsub("gametitle=", ""), ** Processing line: ~ version: version.strip.gsub("#", "").gsub("version=", ""),~ - Inside source: true *** True Line Result version: version.strip.gsub("#", "").gsub("version=", ""), ** Processing line: ~ icon: icon.strip.gsub("#", "").gsub("icon=", "")~ - Inside source: true *** True Line Result icon: icon.strip.gsub("#", "").gsub("icon=", "") ** Processing line: ~ }~ - Inside source: true *** True Line Result } ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ class WizardException < Exception~ - Inside source: true *** True Line Result class WizardException < Exception ** Processing line: ~ attr_accessor :console_primitives~ - Inside source: true *** True Line Result attr_accessor :console_primitives ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize *console_primitives~ - Inside source: true *** True Line Result def initialize *console_primitives ** Processing line: ~ @console_primitives = console_primitives~ - Inside source: true *** True Line Result @console_primitives = console_primitives ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ module GTK~ - Inside source: true *** True Line Result module GTK ** Processing line: ~ class Wizards~ - Inside source: true *** True Line Result class Wizards ** Processing line: ~ attr_accessor :ios, :itch~ - Inside source: true *** True Line Result attr_accessor :ios, :itch ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~ def initialize~ - Inside source: true *** True Line Result def initialize ** Processing line: ~ @ios = IOSWizard.new~ - Inside source: true *** True Line Result @ios = IOSWizard.new ** Processing line: ~ @itch = ItchWizard.new~ - Inside source: true *** True Line Result @itch = ItchWizard.new ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~ end~ - Inside source: true *** True Line Result end ** Processing line: ~~ - Inside source: true *** True Line Result ** Processing line: ~#+end_src~ - Line was identified as the end of a code block. *** True Line Result #+end_src * Processing Html Given True Lines ** Processing line: ~* DragonRuby Game Toolkit Live Docs~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DragonRuby Game Toolkit Live Docs~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~The information contained here is all available via the DragonRuby Console. You can Open the DragonRuby Console by pressing [`] [~] [²] [^] [º] or [§] within your game.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The information contained here is all available via the DragonRuby Console. You can Open the DragonRuby Console by pressing [`] [~] [²] [^] [º] or [§] within your game.~ - Line's tilde count is: 1 - Line contains link marker: false ** Processing line: ~To search docs you can type ~docs_search "SEARCH TERM"~ or if you want to get fancy you can provide a ~lambda~ to filter documentation:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~To search docs you can type ~docs_search "SEARCH TERM"~ or if you want to get fancy you can provide a ~lambda~ to filter documentation:~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ docs_search { |entry| (entry.include? "Array") && (!entry.include? "Enumerable") }~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* Hello World~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~Hello World~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Welcome to DragonRuby Game Toolkit. Take the steps below to get started.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Welcome to DragonRuby Game Toolkit. Take the steps below to get started.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~* Join the Discord and Subscribe to the News Letter~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~Join the Discord and Subscribe to the News Letter~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Our Discord channel is [[http://discord.dragonruby.org]].~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Our Discord channel is [[http://discord.dragonruby.org]].~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~The News Letter will keep you in the loop with regards to current DragonRuby Events: [[http://dragonrubydispatch.com]].~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The News Letter will keep you in the loop with regards to current DragonRuby Events: [[http://dragonrubydispatch.com]].~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~Those who use DragonRuby are called Dragon Riders. This identity is incredibly important to us. When someone asks you:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Those who use DragonRuby are called Dragon Riders. This identity is incredibly important to us. When someone asks you:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_quote~ - BLOCKQUOTE start detected. ** Processing line: ~What game engine do you use?~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~What game engine do you use?~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~#+end_quote~ - BLOCKQUOTE end detected. ** Processing line: ~~ ** Processing line: ~Reply with:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Reply with:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_quote~ - BLOCKQUOTE start detected. ** Processing line: ~I am a Dragon Rider.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~I am a Dragon Rider.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~#+end_quote~ - BLOCKQUOTE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* Intro Videos~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~Intro Videos~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Here are some videos to help you get the lay of the land.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Here are some videos to help you get the lay of the land.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Quick Api Tour~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Quick Api Tour~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Quick Api Tour~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~1. Beginner Introduction to DragonRuby Game Toolkit: [[https://youtu.be/ixw7TJhU08E]]~ - OL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ Beginner Introduction to DragonRuby Game Toolkit: [[https://youtu.be/ixw7TJhU08E]]~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~~ ** Processing line: ~** If You Are Completely New to Ruby and Programming~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~If You Are Completely New to Ruby and Programming~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~If You Are Completely New to Ruby and Programming~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~1. Intermediate Introduction to Ruby Syntax: [[https://youtu.be/HG-XRZ5Ppgc]]~ - OL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ Intermediate Introduction to Ruby Syntax: [[https://youtu.be/HG-XRZ5Ppgc]]~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~2. Intermediate Introduction to Arrays in Ruby: [[https://youtu.be/N72sEYFRqfo]]~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ Intermediate Introduction to Arrays in Ruby: [[https://youtu.be/N72sEYFRqfo]]~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~3. You may also want to try this free course provided at [[http://dragonruby.school]].~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ You may also want to try this free course provided at [[http://dragonruby.school]].~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~~ ** Processing line: ~** If You Have Game Dev Experience~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~If You Have Game Dev Experience~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~If You Have Game Dev Experience~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~1. Building Tetris - Part 1: [[https://youtu.be/xZMwRSbC4rY]]~ - OL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ Building Tetris - Part 1: [[https://youtu.be/xZMwRSbC4rY]]~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~2. Building Tetris - Part 2: [[https://youtu.be/C3LLzDUDgz4]]~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ Building Tetris - Part 2: [[https://youtu.be/C3LLzDUDgz4]]~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~3. Low Res Game Jam Tutorial: [[https://youtu.be/pCI90ukKCME]]~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ Low Res Game Jam Tutorial: [[https://youtu.be/pCI90ukKCME]]~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~~ ** Processing line: ~* Getting Started Tutorial~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~Getting Started Tutorial~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~This is a tutorial written by Ryan C Gordon (a Juggernaut in the industry who has contracted to Valve, Epic, Activision, and EA... check out his Wikipedia page: [[https://en.wikipedia.org/wiki/Ryan_C._Gordon]]).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~This is a tutorial written by Ryan C Gordon (a Juggernaut in the industry who has contracted to Valve, Epic, Activision, and EA... check out his Wikipedia page: [[https://en.wikipedia.org/wiki/Ryan_C._Gordon]]).~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~~ ** Processing line: ~** Introduction~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Introduction~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Introduction~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Welcome!~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Welcome!~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Here's just a little push to get you started if you're new to programming or game development.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Here's just a little push to get you started if you're new to programming or game development.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~If you want to write a game, it's no different than writing any other program for any other framework: there are a few simple rules that might be new to you, but more or less programming is programming no matter what you are building.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~If you want to write a game, it's no different than writing any other program for any other framework: there are a few simple rules that might be new to you, but more or less programming is programming no matter what you are building.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Did you not know that? Did you think you couldn't write a game because you're a "web guy" or you're writing Java at a desk job? Stop letting people tell you that you can't, because you already have everything you need.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Did you not know that? Did you think you couldn't write a game because you're a "web guy" or you're writing Java at a desk job? Stop letting people tell you that you can't, because you already have everything you need.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Here, we're going to be programming in a language called "Ruby." In the interest of full disclosure, I (Ryan Gordon) wrote the C parts of this toolkit and Ruby looks a little strange to me (Amir Rajan wrote the Ruby parts, discounting the parts I mangled), but I'm going to walk you through the basics because we're all learning together, and if you mostly think of yourself as someone that writes C (or C++, C#, Objective-C), PHP, or Java, then you're only a step behind me right now.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Here, we're going to be programming in a language called "Ruby." In the interest of full disclosure, I (Ryan Gordon) wrote the C parts of this toolkit and Ruby looks a little strange to me (Amir Rajan wrote the Ruby parts, discounting the parts I mangled), but I'm going to walk you through the basics because we're all learning together, and if you mostly think of yourself as someone that writes C (or C++, C#, Objective-C), PHP, or Java, then you're only a step behind me right now.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Prerequisites~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Prerequisites~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Prerequisites~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Here's the most important thing you should know: Ruby lets you do some complicated things really easily, and you can learn that stuff later. I'm going to show you one or two cool tricks, but that's all.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Here's the most important thing you should know: Ruby lets you do some complicated things really easily, and you can learn that stuff later. I'm going to show you one or two cool tricks, but that's all.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Do you know what an if statement is? A for-loop? An array? That's all you'll need to start.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Do you know what an if statement is? A for-loop? An array? That's all you'll need to start.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** The Game Loop~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~The Game Loop~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~The Game Loop~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Ok, here are few rules with regards to game development with GTK:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Ok, here are few rules with regards to game development with GTK:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~- Your game is all going to happen under one function ...~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Your game is all going to happen under one function ...~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- that runs 60 times a second ...~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~that runs 60 times a second ...~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- and has to tell the computer what to draw each time.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~and has to tell the computer what to draw each time.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~That's an entire video game in one run-on sentence.~ - UL end detected. - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~That's an entire video game in one run-on sentence.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Here's that function. You're going to want to put this in mygame/app/main.rb, because that's where we'll look for it by default. Load it up in your favorite text editor.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Here's that function. You're going to want to put this in mygame/app/main.rb, because that's where we'll look for it by default. Load it up in your favorite text editor.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.labels << [580, 400, 'Hello World!']~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~Now run ~dragonruby~ ...did you get a window with "Hello World!" written in it? Good, you're officially a game developer!~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Now run ~dragonruby~ ...did you get a window with "Hello World!" written in it? Good, you're officially a game developer!~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~** Breakdown Of The ~tick~ Method~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Breakdown Of The ~tick~ Method~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Breakdown Of The ~tick~ Method~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~~mygame/app/main.rb~, is where the Ruby source code is located. This looks a little strange, so I'll break it down line by line. In Ruby, a '#' character starts a single-line comment, so I'll talk about this inline.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~mygame/app/main.rb~, is where the Ruby source code is located. This looks a little strange, so I'll break it down line by line. In Ruby, a '#' character starts a single-line comment, so I'll talk about this inline.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # This "def"ines a function, named "tick," which takes a single argument~ ** Processing line: ~ # named "args". DragonRuby looks for this function and calls it every~ ** Processing line: ~ # frame, 60 times a second. "args" is a magic structure with lots of~ ** Processing line: ~ # information in it. You can set variables in there for your own game state,~ ** Processing line: ~ # and every frame it will updated if keys are pressed, joysticks moved,~ ** Processing line: ~ # mice clicked, etc.~ ** Processing line: ~ def tick args~ ** Processing line: ~~ ** Processing line: ~ # One of the things in "args" is the "outputs" object that your game uses~ ** Processing line: ~ # to draw things. Afraid of rendering APIs? No problem. In DragonRuby,~ ** Processing line: ~ # you use arrays to draw things and we figure out the details.~ ** Processing line: ~ # If you want to draw text on the screen, you give it an array (the thing~ ** Processing line: ~ # in the [ brackets ]), with an X and Y coordinate and the text to draw.~ ** Processing line: ~ # The "<<" thing says "append this array onto the list of them at~ ** Processing line: ~ # args.outputs.labels)~ ** Processing line: ~ args.outputs.labels << [580, 400, 'Hello World!']~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~Once your ~tick~ function finishes, we look at all the arrays you made and figure out how to draw it. You don't need to know about graphics APIs. You're just setting up some arrays! DragonRuby clears out these arrays every frame, so you just need to add what you need _right now_ each time.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Once your ~tick~ function finishes, we look at all the arrays you made and figure out how to draw it. You don't need to know about graphics APIs. You're just setting up some arrays! DragonRuby clears out these arrays every frame, so you just need to add what you need _right now_ each time.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~** Rendering A Sprite~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering A Sprite~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering A Sprite~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Now let's spice this up a little.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Now let's spice this up a little.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~We're going to add some graphics. Each 2D image in DragonRuby is called a "sprite," and to use them, you just make sure they exist in a reasonable file format (png, jpg, gif, bmp, etc) and specify them by filename. The first time you use one, DragonRuby will load it and keep it in video memory for fast access in the future. If you use a filename that doesn't exist, you get a fun checkerboard pattern!~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~We're going to add some graphics. Each 2D image in DragonRuby is called a "sprite," and to use them, you just make sure they exist in a reasonable file format (png, jpg, gif, bmp, etc) and specify them by filename. The first time you use one, DragonRuby will load it and keep it in video memory for fast access in the future. If you use a filename that doesn't exist, you get a fun checkerboard pattern!~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~There's a "dragonruby.png" file included, just to get you started. Let's have it draw every frame with our text:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~There's a "dragonruby.png" file included, just to get you started. Let's have it draw every frame with our text:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.labels << [580, 400, 'Hello World!']~ ** Processing line: ~ args.outputs.sprites << [576, 100, 128, 101, 'dragonruby.png']~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~(Pro Tip: you don't have to restart DragonRuby to test your changes; when you save main.rb, DragonRuby will notice and reload your program.)~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~(Pro Tip: you don't have to restart DragonRuby to test your changes; when you save main.rb, DragonRuby will notice and reload your program.)~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~That ~.sprites~ line says "add a sprite to the list of sprites we're drawing, and draw it at position (576, 100) at a size of 128x101 pixels". You can find the image to draw at dragonruby.png.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~That ~.sprites~ line says "add a sprite to the list of sprites we're drawing, and draw it at position (576, 100) at a size of 128x101 pixels". You can find the image to draw at dragonruby.png.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~** Coordinate System and Virtual Canvas~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Coordinate System and Virtual Canvas~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Coordinate System and Virtual Canvas~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Quick note about coordinates: (0, 0) is the bottom left corner of the screen, and positive numbers go up and to the right. This is more "geometrically correct," even if it's not how you remember doing 2D graphics, but we chose this for a simpler reason: when you're making Super Mario Brothers and you want Mario to jump, you should be able to add to Mario's y position as he goes up and subtract as he falls. It makes things easier to understand.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Quick note about coordinates: (0, 0) is the bottom left corner of the screen, and positive numbers go up and to the right. This is more "geometrically correct," even if it's not how you remember doing 2D graphics, but we chose this for a simpler reason: when you're making Super Mario Brothers and you want Mario to jump, you should be able to add to Mario's y position as he goes up and subtract as he falls. It makes things easier to understand.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Also: your game screen is _always_ 1280x720 pixels. If you resize the window, we will scale and letterbox everything appropriately, so you never have to worry about different resolutions.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Also: your game screen is _always_ 1280x720 pixels. If you resize the window, we will scale and letterbox everything appropriately, so you never have to worry about different resolutions.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Ok, now we have an image on the screen, let's animate it:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Ok, now we have an image on the screen, let's animate it:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.rotation ||= 0~ ** Processing line: ~ args.outputs.labels << [580, 400, 'Hello World!' ]~ ** Processing line: ~ args.outputs.sprites << [576, 100, 128, 101, 'dragonruby.png', args.state.rotation]~ ** Processing line: ~ args.state.rotation -= 1~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~Now you can see that this function is getting called a lot!~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Now you can see that this function is getting called a lot!~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Game State~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Game State~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Game State~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Here's a fun Ruby thing: ~args.state.rotation ||= 0~ is shorthand for "if args.state.rotation isn't initialized, set it to zero." It's a nice way to embed your initialization code right next to where you need the variable.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Here's a fun Ruby thing: ~args.state.rotation ||= 0~ is shorthand for "if args.state.rotation isn't initialized, set it to zero." It's a nice way to embed your initialization code right next to where you need the variable.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~~args.state~ is a place you can hang your own data. It's an open data structure that allows you to define properties that are arbitrarily nested. You don't need to define any kind of class.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.state~ is a place you can hang your own data. It's an open data structure that allows you to define properties that are arbitrarily nested. You don't need to define any kind of class.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~In this case, the current rotation of our sprite, which is happily spinning at 60 frames per second. If you don't specify rotation (or alpha, or color modulation, or a source rectangle, etc), DragonRuby picks a reasonable default, and the array is ordered by the most likely things you need to tell us: position, size, name.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~In this case, the current rotation of our sprite, which is happily spinning at 60 frames per second. If you don't specify rotation (or alpha, or color modulation, or a source rectangle, etc), DragonRuby picks a reasonable default, and the array is ordered by the most likely things you need to tell us: position, size, name.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** There Is No Delta Time~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~There Is No Delta Time~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~There Is No Delta Time~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~One thing we decided to do in DragonRuby is not make you worry about delta time: your function runs at 60 frames per second (about 16 milliseconds) and that's that. Having to worry about framerate is something massive triple-AAA games do, but for fun little 2D games? You'd have to work really hard to not hit 60fps. All your drawing is happening on a GPU designed to run Fortnite quickly; it can definitely handle this.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~One thing we decided to do in DragonRuby is not make you worry about delta time: your function runs at 60 frames per second (about 16 milliseconds) and that's that. Having to worry about framerate is something massive triple-AAA games do, but for fun little 2D games? You'd have to work really hard to not hit 60fps. All your drawing is happening on a GPU designed to run Fortnite quickly; it can definitely handle this.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Since we didn't make you worry about delta time, you can just move the rotation by 1 every time and it works without you having to keep track of time and math. Want it to move faster? Subtract 2.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Since we didn't make you worry about delta time, you can just move the rotation by 1 every time and it works without you having to keep track of time and math. Want it to move faster? Subtract 2.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Handling User Input~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Handling User Input~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Handling User Input~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Now, let's move that image around.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Now, let's move that image around.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.rotation ||= 0~ ** Processing line: ~ args.state.x ||= 576~ ** Processing line: ~ args.state.y ||= 100~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.mouse.click~ ** Processing line: ~ args.state.x = args.inputs.mouse.click.point.x - 64~ ** Processing line: ~ args.state.y = args.inputs.mouse.click.point.y - 50~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << [580, 400, 'Hello World!']~ ** Processing line: ~ args.outputs.sprites << [args.state.x,~ ** Processing line: ~ args.state.y,~ ** Processing line: ~ 128,~ ** Processing line: ~ 101,~ ** Processing line: ~ 'dragonruby.png',~ ** Processing line: ~ args.state.rotation]~ ** Processing line: ~~ ** Processing line: ~ args.state.rotation -= 1~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~Everywhere you click your mouse, the image moves there. We set a default location for it with ~args.state.x ||= 576~, and then we change those variables when we see the mouse button in action. You can get at the keyboard and game controllers in similar ways.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Everywhere you click your mouse, the image moves there. We set a default location for it with ~args.state.x ||= 576~, and then we change those variables when we see the mouse button in action. You can get at the keyboard and game controllers in similar ways.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~** Coding On A Raspberry Pi~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Coding On A Raspberry Pi~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Coding On A Raspberry Pi~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~We have only tested DragonRuby on a Raspberry Pi 3, Models B and B+, but we believe it _should_ work on any model with comparable specs.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~We have only tested DragonRuby on a Raspberry Pi 3, Models B and B+, but we believe it _should_ work on any model with comparable specs.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~If you're running DragonRuby Game Toolkit on a Raspberry Pi, or trying to run a game made with the Toolkit on a Raspberry Pi, and it's really really slow-- like one frame every few seconds--then there's likely a simple fix.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~If you're running DragonRuby Game Toolkit on a Raspberry Pi, or trying to run a game made with the Toolkit on a Raspberry Pi, and it's really really slow-- like one frame every few seconds--then there's likely a simple fix.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~You're probably running a desktop environment: menus, apps, web browsers, etc. This is okay! Launch the terminal app and type:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You're probably running a desktop environment: menus, apps, web browsers, etc. This is okay! Launch the terminal app and type:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~sudo raspi-config~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~It'll ask you for your password (if you don't know, try "raspberry"), and then give you a menu of options. Find your way to "Advanced Options", then "GL Driver", and change this to "GL (Full KMS)" ... not "fake KMS," which is also listed there. Save and reboot. In theory, this should fix the problem.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~It'll ask you for your password (if you don't know, try "raspberry"), and then give you a menu of options. Find your way to "Advanced Options", then "GL Driver", and change this to "GL (Full KMS)" ... not "fake KMS," which is also listed there. Save and reboot. In theory, this should fix the problem.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~If you're _still_ having problems and have a Raspberry Pi 2 or better, go back to raspi-config and head over to "Advanced Options", "Memory split," and give the GPU 256 megabytes. You might be able to avoid this for simple games, as this takes RAM away from the system and reserves it for graphics. You can also try 128 megabytes as a gentler option.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~If you're _still_ having problems and have a Raspberry Pi 2 or better, go back to raspi-config and head over to "Advanced Options", "Memory split," and give the GPU 256 megabytes. You might be able to avoid this for simple games, as this takes RAM away from the system and reserves it for graphics. You can also try 128 megabytes as a gentler option.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Note that you can also run DragonRuby without X11 at all: if you run it from a virtual terminal it will render fullscreen and won't need the "Full KMS" option. This might be attractive if you want to use it as a game console sort of thing, or develop over ssh, or launch it from RetroPie, etc.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Note that you can also run DragonRuby without X11 at all: if you run it from a virtual terminal it will render fullscreen and won't need the "Full KMS" option. This might be attractive if you want to use it as a game console sort of thing, or develop over ssh, or launch it from RetroPie, etc.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Conclusion~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Conclusion~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Conclusion~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~There is a lot more you can do with DragonRuby, but now you've already got just about everything you need to make a simple game. After all, even the most fancy games are just creating objects and moving them around. Experiment a little. Add a few more things and have them interact in small ways. Want something to go away? Just don't add it to ~args.output~ anymore.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~There is a lot more you can do with DragonRuby, but now you've already got just about everything you need to make a simple game. After all, even the most fancy games are just creating objects and moving them around. Experiment a little. Add a few more things and have them interact in small ways. Want something to go away? Just don't add it to ~args.output~ anymore.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* Deploying To Itch.io~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~Deploying To Itch.io~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Once you've built your game, you're all set to deploy! Good luck in your game dev journey and if you get stuck, come to the Discord channel!~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Once you've built your game, you're all set to deploy! Good luck in your game dev journey and if you get stuck, come to the Discord channel!~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Creating Your Game Landing Page~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Creating Your Game Landing Page~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Creating Your Game Landing Page~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Log into Itch.io and go to [[https://itch.io/game/new]].~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Log into Itch.io and go to [[https://itch.io/game/new]].~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~~ ** Processing line: ~- Title: Give your game a Title. This value represents your `gametitle`.~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Title: Give your game a Title. This value represents your `gametitle`.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- Project URL: Set your project url. This value represents your `gameid`.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Project URL: Set your project url. This value represents your `gameid`.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- Classification: Keep this as Game.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Classification: Keep this as Game.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- Kind of Project: Select HTML from the drop down list. Don't worry, the HTML project type _also supports binary downloads_.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Kind of Project: Select HTML from the drop down list. Don't worry, the HTML project type _also supports binary downloads_.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- Uploads: Skip this section for now.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Uploads: Skip this section for now.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~You can fill out all the other options later.~ - UL end detected. - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You can fill out all the other options later.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Update Your Game's Metadata~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Update Your Game's Metadata~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Update Your Game's Metadata~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Point your text editor at mygame/metadata/game_metadata.txt and make it look like this:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Point your text editor at mygame/metadata/game_metadata.txt and make it look like this:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~NOTE: Remove the ~#~ at the beginning of each line.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~NOTE: Remove the ~#~ at the beginning of each line.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ devid=bob~ ** Processing line: ~ devtitle=Bob The Game Developer~ ** Processing line: ~ gameid=mygame~ ** Processing line: ~ gametitle=My Game~ ** Processing line: ~ version=0.1~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~The ~devid~ property is the username you use to log into Itch.io. The ~devtitle~ is your name or company name (it can contain spaces). The ~gameid~ is the Project URL value. The ~gametitle~ is the name of your game (it can contain spaces). The ~version~ can be any ~major.minor~ number format.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The ~devid~ property is the username you use to log into Itch.io. The ~devtitle~ is your name or company name (it can contain spaces). The ~gameid~ is the Project URL value. The ~gametitle~ is the name of your game (it can contain spaces). The ~version~ can be any ~major.minor~ number format.~ - Line's tilde count is: 12 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~** Building Your Game For Distribution~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Building Your Game For Distribution~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Building Your Game For Distribution~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Open up the terminal and run this from the command line:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Open up the terminal and run this from the command line:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ ./dragonruby-publish --only-package mygame~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~(if you're on Windows, don't put the "./" on the front. That's a Mac and Linux thing.)~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~(if you're on Windows, don't put the "./" on the front. That's a Mac and Linux thing.)~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~A directory called ~./build~ will be created that contains your binaries. You can upload this to Itch.io manually.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~A directory called ~./build~ will be created that contains your binaries. You can upload this to Itch.io manually.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~For the HTML version of your game after you upload it. Check the checkbox labeled "This file will be played in the browser".~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~For the HTML version of your game after you upload it. Check the checkbox labeled "This file will be played in the browser".~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~For subsequent updates you can use an automated deployment to Itch.io:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~For subsequent updates you can use an automated deployment to Itch.io:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ ./dragonruby-publish mygame~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~DragonRuby will package _and publish_ your game to itch.io! Tell your friends to go to your game's very own webpage and buy it!~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~DragonRuby will package _and publish_ your game to itch.io! Tell your friends to go to your game's very own webpage and buy it!~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~If you make changes to your game, just re-run dragonruby-publish and it'll update the downloads for you.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~If you make changes to your game, just re-run dragonruby-publish and it'll update the downloads for you.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* Deploying To Mobile Devices~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~Deploying To Mobile Devices~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~If you have a Pro subscription, you also have the capability to deploy to mobile devices.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~If you have a Pro subscription, you also have the capability to deploy to mobile devices.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~To deploy to iOS, you need to have a Mac running MacOS Catalina, an iOS device, and an active/paid Developer Account with Apple. From the Console type: ~$wizards.ios.start~ and you will be guided through the deployment process.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~To deploy to iOS, you need to have a Mac running MacOS Catalina, an iOS device, and an active/paid Developer Account with Apple. From the Console type: ~$wizards.ios.start~ and you will be guided through the deployment process.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~To deploy to Android, you need to have an Android emulator/device, and an environment that is able to run Android SDK. ~dragonruby-publish~ will create an APK for you. From there, you can sign the APK and install it to your device. The signing and installation procedure varies from OS to OS. Here's an example of what the command might look like:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~To deploy to Android, you need to have an Android emulator/device, and an environment that is able to run Android SDK. ~dragonruby-publish~ will create an APK for you. From there, you can sign the APK and install it to your device. The signing and installation procedure varies from OS to OS. Here's an example of what the command might look like:~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ > adb logcat -e mygame # you'll want to run this in a separate terminal~ ** Processing line: ~ > keytool -genkey -v -keystore mygame.keystore -alias mygame -keyalg RSA -keysize 2048 -validity 10000~ ** Processing line: ~ > apksigner sign --ks mygame.keystore mygame-android.apk~ ** Processing line: ~ > adb install mygame-android.apk~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DragonRuby's Philosophy~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DragonRuby's Philosophy~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~The following tenants of DragonRuby are what set us apart from other game engines. Given that Game Toolkit is a relatively new engine, there are definitely features that are missing. So having a big check list of "all the cool things" is not this engine's forte. This is compensated with a strong commitment to the following principles.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The following tenants of DragonRuby are what set us apart from other game engines. Given that Game Toolkit is a relatively new engine, there are definitely features that are missing. So having a big check list of "all the cool things" is not this engine's forte. This is compensated with a strong commitment to the following principles.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Challenge The Status Quo~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Challenge The Status Quo~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Challenge The Status Quo~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Game engines of today are in a local maximum and don't take into consideration the challenges of this day and age. Unity and GameMaker specifically rot your brain. It's not sufficient to say:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Game engines of today are in a local maximum and don't take into consideration the challenges of this day and age. Unity and GameMaker specifically rot your brain. It's not sufficient to say:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_quote~ - BLOCKQUOTE start detected. ** Processing line: ~But that's how we've always done it.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~But that's how we've always done it.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~#+end_quote~ - BLOCKQUOTE end detected. ** Processing line: ~~ ** Processing line: ~It's a hard pill to swallow, but forget blindly accepted best practices and try to figure out the underlying motivation for a specific approach to game development. Collaborate with us.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~It's a hard pill to swallow, but forget blindly accepted best practices and try to figure out the underlying motivation for a specific approach to game development. Collaborate with us.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Continuity of Design~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Continuity of Design~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Continuity of Design~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~There is a programming idiom in software called "The Pit of Success". The term normalizes upfront pain as a necessity/requirement in the hopes that the investment will yield dividends "when you become successful" or "when the code becomes more complicated". This approach to development is strongly discouraged by us. It leads to over-architected and unnecessary code; creates barriers to rapid prototyping and shipping a game; and overwhelms beginners who are new to the engine or programming in general.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~There is a programming idiom in software called "The Pit of Success". The term normalizes upfront pain as a necessity/requirement in the hopes that the investment will yield dividends "when you become successful" or "when the code becomes more complicated". This approach to development is strongly discouraged by us. It leads to over-architected and unnecessary code; creates barriers to rapid prototyping and shipping a game; and overwhelms beginners who are new to the engine or programming in general.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~DragonRuby's philosophy is to provide multiple options across the "make it fast" vs "make it right" spectrum, with incremental/intuitive transitions between the options provided. A concrete example of this philosophy would be render primitives: the spectrum of options allows renderable constructs that take the form of tuples/arrays (easy to pickup, simple, and fast to code/prototype with), hashes (a little more work, but gives you the ability to add additional properties), open and strict entities (more work than hashes, but yields cleaner apis), and finally - if you really need full power/flexibility in rendering - classes (which take the most amount of code and programming knowledge to create).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~DragonRuby's philosophy is to provide multiple options across the "make it fast" vs "make it right" spectrum, with incremental/intuitive transitions between the options provided. A concrete example of this philosophy would be render primitives: the spectrum of options allows renderable constructs that take the form of tuples/arrays (easy to pickup, simple, and fast to code/prototype with), hashes (a little more work, but gives you the ability to add additional properties), open and strict entities (more work than hashes, but yields cleaner apis), and finally - if you really need full power/flexibility in rendering - classes (which take the most amount of code and programming knowledge to create).~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Release Early and Often~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Release Early and Often~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Release Early and Often~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~The biggest mistake game devs make is spending too much time in isolation building their game. Release something, however small, and release it soon.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The biggest mistake game devs make is spending too much time in isolation building their game. Release something, however small, and release it soon.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Stop worrying about everything being pixel perfect. Don't wait until your game is 100% complete. Build your game publicly and iterate. Post in the #show-and-tell channel in the community Discord. You'll find a lot of support and encouragement there.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Stop worrying about everything being pixel perfect. Don't wait until your game is 100% complete. Build your game publicly and iterate. Post in the #show-and-tell channel in the community Discord. You'll find a lot of support and encouragement there.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Real artists ship. Remember that.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Real artists ship. Remember that.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Sustainable And Ethical Monetization~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Sustainable And Ethical Monetization~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Sustainable And Ethical Monetization~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~We all aspire to put food on the table doing what we love. Whether it is building games, writing tools to support game development, or anything in between.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~We all aspire to put food on the table doing what we love. Whether it is building games, writing tools to support game development, or anything in between.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Charge a fair amount of money for the things you create. It's expected and encouraged within the community. Give what you create away for free to those that can't afford it.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Charge a fair amount of money for the things you create. It's expected and encouraged within the community. Give what you create away for free to those that can't afford it.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~If you are gainfully employed, pay full price for the things you use. If you do end up getting something at a discount, pay the difference "forward" to someone else.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~If you are gainfully employed, pay full price for the things you use. If you do end up getting something at a discount, pay the difference "forward" to someone else.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Sustainable And Ethical Open Source~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Sustainable And Ethical Open Source~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Sustainable And Ethical Open Source~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~This goes hand in hand with sustainable and ethical monetization. The current state of open source is not sustainable. There is an immense amount of contributor burnout. Users of open source expect everything to be free, and few give back. This is a problem we want to fix (we're still trying to figure out the best solution).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~This goes hand in hand with sustainable and ethical monetization. The current state of open source is not sustainable. There is an immense amount of contributor burnout. Users of open source expect everything to be free, and few give back. This is a problem we want to fix (we're still trying to figure out the best solution).~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~So, don't be "that guy" in the Discord that says "DragonRuby should be free and open source!" You will be personally flogged by Amir.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~So, don't be "that guy" in the Discord that says "DragonRuby should be free and open source!" You will be personally flogged by Amir.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** People Over Entities~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~People Over Entities~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~People Over Entities~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~We prioritize the endorsement of real people over faceless entities. This game engine, and other products we create, are not insignificant line items of a large company. And you aren't a generic "commodity" or "corporate resource". So be active in the community Discord and you'll reap the benefits as more devs use DragonRuby.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~We prioritize the endorsement of real people over faceless entities. This game engine, and other products we create, are not insignificant line items of a large company. And you aren't a generic "commodity" or "corporate resource". So be active in the community Discord and you'll reap the benefits as more devs use DragonRuby.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Building A Game Should Be Fun And Bring Happiness~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Building A Game Should Be Fun And Bring Happiness~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Building A Game Should Be Fun And Bring Happiness~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~We will prioritize the removal of pain. The aesthetics of Ruby make it such a joy to work with, and we want to capture that within the engine.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~We will prioritize the removal of pain. The aesthetics of Ruby make it such a joy to work with, and we want to capture that within the engine.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Real World Application Drives Features~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Real World Application Drives Features~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Real World Application Drives Features~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~We are bombarded by marketing speak day in and day out. We don't do that here. There are things that are really great in the engine, and things that need a lot of work. Collaborate with us so we can help you reach your goals. Ask for features you actually need as opposed to anything speculative.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~We are bombarded by marketing speak day in and day out. We don't do that here. There are things that are really great in the engine, and things that need a lot of work. Collaborate with us so we can help you reach your goals. Ask for features you actually need as opposed to anything speculative.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~We want DragonRuby to *actually* help you build the game you want to build (as opposed to sell you something piece of demoware that doesn't work).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~We want DragonRuby to *actually* help you build the game you want to build (as opposed to sell you something piece of demoware that doesn't work).~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~* Frequently Asked Questions, Comments, and Concerns~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~Frequently Asked Questions, Comments, and Concerns~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Here are questions, comments, and concerns that frequently come up.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Here are questions, comments, and concerns that frequently come up.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Frequently Asked Questions~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Frequently Asked Questions~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Frequently Asked Questions~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** What is DragonRuby LLP?~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~What is DragonRuby LLP?~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~What is DragonRuby LLP?~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~DragonRuby LLP is a partnership of four devs who came together with the goal of bringing the aesthetics and joy of Ruby, everywhere possible.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~DragonRuby LLP is a partnership of four devs who came together with the goal of bringing the aesthetics and joy of Ruby, everywhere possible.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Under DragonRuby LLP, we offer a number of products (with more on the way):~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Under DragonRuby LLP, we offer a number of products (with more on the way):~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~- Game Toolkit (GTK): A 2D game engine that is compatible with modern gaming platforms.~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Game Toolkit (GTK): A 2D game engine that is compatible with modern gaming platforms.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- RubyMotion (RM): A compiler toolchain that allows you to build native, cross-platform mobile apps. [[http://rubymotion.com]]~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~RubyMotion (RM): A compiler toolchain that allows you to build native, cross-platform mobile apps. [[http://rubymotion.com]]~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~All of the products above leverage a shared core called DragonRuby.~ - UL end detected. - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~All of the products above leverage a shared core called DragonRuby.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~NOTE: From an official branding standpoint each one of the products is suffixed with "A DragonRuby LLP Product" tagline. Also, DragonRuby is _one word, title cased_.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~NOTE: From an official branding standpoint each one of the products is suffixed with "A DragonRuby LLP Product" tagline. Also, DragonRuby is _one word, title cased_.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~NOTE: We leave the "A DragonRuby LLP Product" off of this one because that just sounds really weird.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~NOTE: We leave the "A DragonRuby LLP Product" off of this one because that just sounds really weird.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~NOTE: Devs who use DragonRuby are "Dragon Riders/Riders of Dragons". That's a bad ass identifier huh?~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~NOTE: Devs who use DragonRuby are "Dragon Riders/Riders of Dragons". That's a bad ass identifier huh?~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~*** What is DragonRuby?~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~What is DragonRuby?~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~What is DragonRuby?~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~The response to this question requires a few subparts. First we need to clarify some terms. Specifically _language specification_ vs _runtime_.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The response to this question requires a few subparts. First we need to clarify some terms. Specifically _language specification_ vs _runtime_.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~**** Okay... so what is the difference between a language specification and a runtime?~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~Okay... so what is the difference between a language specification and a runtime?~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~Okay... so what is the difference between a language specification and a runtime?~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~A runtime is an _implementation_ of a language specification. When people say "Ruby," they are usually referring to "the Ruby 3.0+ language specification implemented via the CRuby/MRI Runtime."~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~A runtime is an _implementation_ of a language specification. When people say "Ruby," they are usually referring to "the Ruby 3.0+ language specification implemented via the CRuby/MRI Runtime."~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~But, there are many Ruby Runtimes: CRuby/MRI, JRuby, Truffle, Rubinius, Artichoke, and (last but certainly not least) DragonRuby.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~But, there are many Ruby Runtimes: CRuby/MRI, JRuby, Truffle, Rubinius, Artichoke, and (last but certainly not least) DragonRuby.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~**** Okay... what language specification does DragonRuby use then?~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~Okay... what language specification does DragonRuby use then?~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~Okay... what language specification does DragonRuby use then?~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~DragonRuby's goal is to be compliant with the ISO/IEC 30170:2012 standard. It's syntax is Ruby 2.x compatible, but also contains semantic changes that help it natively interface with platform specific libraries.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~DragonRuby's goal is to be compliant with the ISO/IEC 30170:2012 standard. It's syntax is Ruby 2.x compatible, but also contains semantic changes that help it natively interface with platform specific libraries.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~**** So... why another runtime?~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~So... why another runtime?~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~So... why another runtime?~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~The elevator pitch is:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The elevator pitch is:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~DragonRuby is a Multilevel Cross-platform Runtime. The "multiple levels" within the runtime allows us to target platforms no other Ruby can target: PC, Mac, Linux, Raspberry Pi, WASM, iOS, Android, Nintendo Switch, PS4, Xbox, and Stadia.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~DragonRuby is a Multilevel Cross-platform Runtime. The "multiple levels" within the runtime allows us to target platforms no other Ruby can target: PC, Mac, Linux, Raspberry Pi, WASM, iOS, Android, Nintendo Switch, PS4, Xbox, and Stadia.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~**** What does Multilevel Cross-platform mean?~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~What does Multilevel Cross-platform mean?~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~What does Multilevel Cross-platform mean?~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~There are complexities associated with targeting all the platforms we support. Because of this, the runtime had to be architected in such a way that new platforms could be easily added (which lead to us partitioning the runtime internally):~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~There are complexities associated with targeting all the platforms we support. Because of this, the runtime had to be architected in such a way that new platforms could be easily added (which lead to us partitioning the runtime internally):~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~- Level 1 we leverage a good portion of mRuby.~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Level 1 we leverage a good portion of mRuby.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- Level 2 consists of optimizations to mRuby we've made given that our target platforms are well known.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Level 2 consists of optimizations to mRuby we've made given that our target platforms are well known.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- Level 3 consists of portable C libraries and their Ruby C-Extensions.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Level 3 consists of portable C libraries and their Ruby C-Extensions.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Levels 1 through 3 are fairly commonplace in many runtime implementations (with level 1 being the most portable, and level 3 being the fastest). But the DragonRuby Runtime has taken things a bit further:~ - UL end detected. - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Levels 1 through 3 are fairly commonplace in many runtime implementations (with level 1 being the most portable, and level 3 being the fastest). But the DragonRuby Runtime has taken things a bit further:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~- Level 4 consists of shared abstractions around hardware I/O and operating system resources. This level leverages open source and proprietary components within Simple DirectMedia Layer (a low level multimedia component library that has been in active development for 22 years and counting).~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Level 4 consists of shared abstractions around hardware I/O and operating system resources. This level leverages open source and proprietary components within Simple DirectMedia Layer (a low level multimedia component library that has been in active development for 22 years and counting).~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~- Level 5 is a code generation layer which creates metadata that allows for native interoperability with host runtime libraries. It also includes OS specific message pump orchestrations.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Level 5 is a code generation layer which creates metadata that allows for native interoperability with host runtime libraries. It also includes OS specific message pump orchestrations.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~- Level 6 is a Ahead of Time/Just in Time Ruby compiler built with LLVM. This compiler outputs _very_ fast platform specific bitcode, but only supports a subset of the Ruby language specification.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Level 6 is a Ahead of Time/Just in Time Ruby compiler built with LLVM. This compiler outputs _very_ fast platform specific bitcode, but only supports a subset of the Ruby language specification.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~These levels allow us to stay up to date with open source implementations of Ruby; provide fast, native code execution on proprietary platforms; ensure good separation between these two worlds; and provides a means to add new platforms without going insane.~ - UL end detected. - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~These levels allow us to stay up to date with open source implementations of Ruby; provide fast, native code execution on proprietary platforms; ensure good separation between these two worlds; and provides a means to add new platforms without going insane.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~**** Cool cool. So given that I understand everything to this point, can we answer the original question? What is DragonRuby?~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~Cool cool. So given that I understand everything to this point, can we answer the original question? What is DragonRuby?~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~Cool cool. So given that I understand everything to this point, can we answer the original question? What is DragonRuby?~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~DragonRuby is a Ruby runtime implementation that takes all the lessons we've learned from MRI/CRuby, and merges it with the latest and greatest compiler and OSS technologies.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~DragonRuby is a Ruby runtime implementation that takes all the lessons we've learned from MRI/CRuby, and merges it with the latest and greatest compiler and OSS technologies.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~*** How is DragonRuby different than MRI?~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~How is DragonRuby different than MRI?~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~How is DragonRuby different than MRI?~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~DragonRuby supports a subset of MRI apis. Our target is to support all of mRuby's standard lib. There are challenges to this given the number of platforms we are trying to support (specifically console).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~DragonRuby supports a subset of MRI apis. Our target is to support all of mRuby's standard lib. There are challenges to this given the number of platforms we are trying to support (specifically console).~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~**** Does DragonRuby support Gems?~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~Does DragonRuby support Gems?~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~Does DragonRuby support Gems?~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~DragonRuby does not support gems because that requires the installation of MRI Ruby on the developer's machine (which is a non-starter given that we want DragonRuby to be a zero dependency runtime). While this seems easy for Mac and Linux, it is much harder on Windows and Raspberry Pi. mRuby has taken the approach of having a git repository for compatible gems and we will most likely follow suite: [[https://github.com/mruby/mgem-list]].~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~DragonRuby does not support gems because that requires the installation of MRI Ruby on the developer's machine (which is a non-starter given that we want DragonRuby to be a zero dependency runtime). While this seems easy for Mac and Linux, it is much harder on Windows and Raspberry Pi. mRuby has taken the approach of having a git repository for compatible gems and we will most likely follow suite: [[https://github.com/mruby/mgem-list]].~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~~ ** Processing line: ~**** Does DragonRuby have a REPL/IRB?~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~Does DragonRuby have a REPL/IRB?~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~Does DragonRuby have a REPL/IRB?~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~You can use DragonRuby's Console within the game to inspect object and execute small pieces of code. For more complex pieces of code create a file called ~repl.rb~ and put it in ~mygame/app/repl.rb~:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You can use DragonRuby's Console within the game to inspect object and execute small pieces of code. For more complex pieces of code create a file called ~repl.rb~ and put it in ~mygame/app/repl.rb~:~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~- Any code you write in there will be executed when you change the file. You can organize different pieces of code using the ~repl~ method:~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Any code you write in there will be executed when you change the file. You can organize different pieces of code using the ~repl~ method:~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ repl do~ ** Processing line: ~ puts "hello world"~ ** Processing line: ~ puts 1 + 1~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~- If you use the `repl` method, the code will be executed and the DragonRuby Console will automatically open so you can see the results (on Mac and Linux, the results will also be printed to the terminal).~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~If you use the `repl` method, the code will be executed and the DragonRuby Console will automatically open so you can see the results (on Mac and Linux, the results will also be printed to the terminal).~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~- All ~puts~ statements will also be saved to ~logs/puts.txt~. So if you want to stay in your editor and not look at the terminal, or the DragonRuby Console, you can ~tail~ this file.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~All ~puts~ statements will also be saved to ~logs/puts.txt~. So if you want to stay in your editor and not look at the terminal, or the DragonRuby Console, you can ~tail~ this file.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~4. To ignore code in ~repl.rb~, instead of commenting it out, prefix ~repl~ with the letter ~x~ and it'll be ignored.~ - UL end detected. - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~4. To ignore code in ~repl.rb~, instead of commenting it out, prefix ~repl~ with the letter ~x~ and it'll be ignored.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ xrepl do # <------- line is prefixed with an "x"~ ** Processing line: ~ puts "hello world"~ ** Processing line: ~ puts 1 + 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This code will be executed when you save the file.~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "Hello"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "This code will also be executed."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # use xrepl to "comment out" code~ ** Processing line: ~ xrepl do~ ** Processing line: ~ puts "This code will not be executed because of the x in front of repl".~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~**** Does DragonRuby support ~pry~ or have any other debugging facilities?~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~Does DragonRuby support ~pry~ or have any other debugging facilities?~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~Does DragonRuby support ~pry~ or have any other debugging facilities?~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~~pry~ is a gem that assumes you are using the MRI Runtime (which is incompatible with DragonRuby). Eventually DragonRuby will have a pry based experience that is compatible with a debugging infrastructure called LLDB. Take the time to read about LLDB as it shows the challenges in creating something that is compatible.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~pry~ is a gem that assumes you are using the MRI Runtime (which is incompatible with DragonRuby). Eventually DragonRuby will have a pry based experience that is compatible with a debugging infrastructure called LLDB. Take the time to read about LLDB as it shows the challenges in creating something that is compatible.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~You can use DragonRuby's replay capabilities to troubleshoot:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You can use DragonRuby's replay capabilities to troubleshoot:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~1. DragonRuby is hot loaded which gives you a very fast feedback loop (if the game throws an exception, it's because of the code you just added).~ - OL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ DragonRuby is hot loaded which gives you a very fast feedback loop (if the game throws an exception, it's because of the code you just added).~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~2. Use ~./dragonruby mygame --record~ to create a game play recording that you can use to find the exception (you can replay a recording by executing ~./dragonruby mygame --replay last_replay.txt~ or through the DragonRuby Console using ~$gtk.recording.start_replay "last_replay.txt"~.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ Use ~./dragonruby mygame --record~ to create a game play recording that you can use to find the exception (you can replay a recording by executing ~./dragonruby mygame --replay last_replay.txt~ or through the DragonRuby Console using ~$gtk.recording.start_replay "last_replay.txt"~.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~3. DragonRuby also ships with a unit testing facility. You can invoke the following command to run a test: ~./dragonruby . --eval some_ruby_file.rb --no-tick~.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ DragonRuby also ships with a unit testing facility. You can invoke the following command to run a test: ~./dragonruby . --eval some_ruby_file.rb --no-tick~.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~4. Get into the habit of adding debugging facilities within the game itself. You can add drawing primitives to ~args.outputs.debug~ that will render on top of your game but will be ignored in a production release.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ Get into the habit of adding debugging facilities within the game itself. You can add drawing primitives to ~args.outputs.debug~ that will render on top of your game but will be ignored in a production release.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~5. Debugging something that runs at 60fps is (imo) not that helpful. The exception you are seeing could have been because of a change that occurred many frames ago.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ Debugging something that runs at 60fps is (imo) not that helpful. The exception you are seeing could have been because of a change that occurred many frames ago.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Frequent Comments About Ruby as a Language Choice~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Frequent Comments About Ruby as a Language Choice~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Frequent Comments About Ruby as a Language Choice~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** But Ruby is dead.~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~But Ruby is dead.~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~But Ruby is dead.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Let's check the official source for the answer to this question: isrubydead.com: [[https://isrubydead.com/]].~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Let's check the official source for the answer to this question: isrubydead.com: [[https://isrubydead.com/]].~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~On a more serious note, Ruby's _quantity_ levels aren't what they used to be. And that's totally fine. Everyone chases the new and shiny.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~On a more serious note, Ruby's _quantity_ levels aren't what they used to be. And that's totally fine. Everyone chases the new and shiny.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~What really matters is _quality/maturity_. Here is the latest (StackOverflow Survey sorted by highest paid developers)[https://insights.stackoverflow.com/survey/2019#top-paying-technologies].~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~What really matters is _quality/maturity_. Here is the latest (StackOverflow Survey sorted by highest paid developers)[https://insights.stackoverflow.com/survey/2019#top-paying-technologies].~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Let's stop making this comment shall we?~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Let's stop making this comment shall we?~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~*** But Ruby is slow.~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~But Ruby is slow.~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~But Ruby is slow.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~That doesn't make any sense. A language specification can't be slow... it's a language spec. Sure, an _implementation/runtime_ can be slow though, but then we'd have to talk about which runtime.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~That doesn't make any sense. A language specification can't be slow... it's a language spec. Sure, an _implementation/runtime_ can be slow though, but then we'd have to talk about which runtime.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~*** Dynamic languages are slow.~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Dynamic languages are slow.~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Dynamic languages are slow.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~They are certainly slower than statically compiled languages. With the processing power and compiler optimizations we have today, dynamic languages like Ruby are _fast enough_.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~They are certainly slower than statically compiled languages. With the processing power and compiler optimizations we have today, dynamic languages like Ruby are _fast enough_.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Unless you are writing in some form of intermediate representation by hand, your language of choice also suffers this same fallacy of slow. Like, nothing is faster than a low level assembly-like language. So unless you're writing in that, let's stop making this comment.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Unless you are writing in some form of intermediate representation by hand, your language of choice also suffers this same fallacy of slow. Like, nothing is faster than a low level assembly-like language. So unless you're writing in that, let's stop making this comment.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~NOTE: If you _are_ hand writing LLVM IR, we are always open to bringing on new partners with such a skill set. Email us ^_^.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~NOTE: If you _are_ hand writing LLVM IR, we are always open to bringing on new partners with such a skill set. Email us ^_^.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Frequent Concerns~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Frequent Concerns~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Frequent Concerns~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** DragonRuby is not open source. That's not right.~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~DragonRuby is not open source. That's not right.~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~DragonRuby is not open source. That's not right.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~The current state of open source is unsustainable. Contributors work for free, most all open source repositories are severely under-staffed, and burnout from core members is rampant.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The current state of open source is unsustainable. Contributors work for free, most all open source repositories are severely under-staffed, and burnout from core members is rampant.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~We believe in open source very strongly. Parts of DragonRuby are in fact, open source. Just not all of it (for legal reasons, and because the IP we've created has value). And we promise that we are looking for (or creating) ways to _sustainably_ open source everything we do.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~We believe in open source very strongly. Parts of DragonRuby are in fact, open source. Just not all of it (for legal reasons, and because the IP we've created has value). And we promise that we are looking for (or creating) ways to _sustainably_ open source everything we do.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~If you have ideas on how we can do this, email us!~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~If you have ideas on how we can do this, email us!~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~If the reason above isn't sufficient, then definitely use something else.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~If the reason above isn't sufficient, then definitely use something else.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~All this being said, we do have parts of the engine open sourced on GitHub: [[https://github.com/dragonruby/dragonruby-game-toolkit-contrib/]]~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~All this being said, we do have parts of the engine open sourced on GitHub: [[https://github.com/dragonruby/dragonruby-game-toolkit-contrib/]]~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~~ ** Processing line: ~*** DragonRuby is for pay. You should offer a free version.~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~DragonRuby is for pay. You should offer a free version.~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~DragonRuby is for pay. You should offer a free version.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~If you can afford to pay for DragonRuby, you should (and will). We don't go around telling writers that they should give us their books for free, and only require payment if we read the entire thing. It's time we stop asking that of software products.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~If you can afford to pay for DragonRuby, you should (and will). We don't go around telling writers that they should give us their books for free, and only require payment if we read the entire thing. It's time we stop asking that of software products.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~That being said, we will _never_ put someone out financially. We have income assistance for anyone that can't afford a license to any one of our products.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~That being said, we will _never_ put someone out financially. We have income assistance for anyone that can't afford a license to any one of our products.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~You qualify for a free, unrestricted license to DragonRuby products if any of the following items pertain to you:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You qualify for a free, unrestricted license to DragonRuby products if any of the following items pertain to you:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~- Your income is below $2,000.00 (USD) per month.~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Your income is below $2,000.00 (USD) per month.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- You are under 18 years of age.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You are under 18 years of age.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- You are a student of any type: traditional public school, home schooling, college, bootcamp, or online.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You are a student of any type: traditional public school, home schooling, college, bootcamp, or online.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- You are a teacher, mentor, or parent who wants to teach a kid how to code.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You are a teacher, mentor, or parent who wants to teach a kid how to code.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- You work/worked in public service or at a charitable organization: for example public office, army, or any 501(c)(3) organization.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You work/worked in public service or at a charitable organization: for example public office, army, or any 501(c)(3) organization.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Just contact Amir at amir.rajan@dragonruby.org with a short explanation of your current situation and he'll set you up. No questions asked.~ - UL end detected. - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Just contact Amir at amir.rajan@dragonruby.org with a short explanation of your current situation and he'll set you up. No questions asked.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~*** But still, you should offer a free version. So I can try it out and see if I like it.~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~But still, you should offer a free version. So I can try it out and see if I like it.~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~But still, you should offer a free version. So I can try it out and see if I like it.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~You can try our web-based sandbox environment at [[http://fiddle.dragonruby.org]]. But it won't do the runtime justice. Or just come to our Discord Channel at [[http://discord.dragonruby.org]] and ask questions. We'd be happy to have a one on one video chat with you and show off all the cool stuff we're doing.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You can try our web-based sandbox environment at [[http://fiddle.dragonruby.org]]. But it won't do the runtime justice. Or just come to our Discord Channel at [[http://discord.dragonruby.org]] and ask questions. We'd be happy to have a one on one video chat with you and show off all the cool stuff we're doing.~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~Seriously just buy it. Get a refund if you don't like it. We make it stupid easy to do so.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Seriously just buy it. Get a refund if you don't like it. We make it stupid easy to do so.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~*** I still think you should do a free version. Think of all people who would give it a shot.~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~I still think you should do a free version. Think of all people who would give it a shot.~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~I still think you should do a free version. Think of all people who would give it a shot.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Free isn't a sustainable financial model. We don't want to spam your email. We don't want to collect usage data off of you either. We just want to provide quality toolchains to quality developers (as opposed to a large quantity of developers).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Free isn't a sustainable financial model. We don't want to spam your email. We don't want to collect usage data off of you either. We just want to provide quality toolchains to quality developers (as opposed to a large quantity of developers).~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~The people that pay for DragonRuby and make an effort to understand it are the ones we want to build a community around, partner with, and collaborate with. So having that small monetary wall deters entitled individuals that don't value the same things we do.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The people that pay for DragonRuby and make an effort to understand it are the ones we want to build a community around, partner with, and collaborate with. So having that small monetary wall deters entitled individuals that don't value the same things we do.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~*** What if I build something with DragonRuby, but DragonRuby LLP becomes insolvent.~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~What if I build something with DragonRuby, but DragonRuby LLP becomes insolvent.~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~What if I build something with DragonRuby, but DragonRuby LLP becomes insolvent.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~That won't happen if the development world stop asking for free stuff and non-trivially compensate open source developers. Look, we want to be able to work on the stuff we love, every day of our lives. And we'll go to great lengths to make that happen.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~That won't happen if the development world stop asking for free stuff and non-trivially compensate open source developers. Look, we want to be able to work on the stuff we love, every day of our lives. And we'll go to great lengths to make that happen.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~But, in the event that sad day comes, our partnership bylaws state that _all_ DragonRuby IP that can be legally open sourced, will be released under a permissive license.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~But, in the event that sad day comes, our partnership bylaws state that _all_ DragonRuby IP that can be legally open sourced, will be released under a permissive license.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~* RECIPIES:~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~RECIPIES:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** How To Determine What Frame You Are On~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~How To Determine What Frame You Are On~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~How To Determine What Frame You Are On~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~There is a property on ~state~ called ~tick_count~ that is incremented by DragonRuby every time the ~tick~ method is called. The following code renders a label that displays the current ~tick_count~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~There is a property on ~state~ called ~tick_count~ that is incremented by DragonRuby every time the ~tick~ method is called. The following code renders a label that displays the current ~tick_count~.~ - Line's tilde count is: 8 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.labels << [10, 670, "#{args.state.tick_count}"]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** How To Get Current Framerate~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~How To Get Current Framerate~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~How To Get Current Framerate~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Current framerate is a top level property on the Game Toolkit Runtime and is accessible via ~args.gtk.current_framerate~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Current framerate is a top level property on the Game Toolkit Runtime and is accessible via ~args.gtk.current_framerate~.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.labels << [10, 710, "framerate: #{args.gtk.current_framerate.round}"]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** How To Render A Sprite Using An Array~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~How To Render A Sprite Using An Array~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~How To Render A Sprite Using An Array~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~All file paths should use the forward slash ~/~ *not* backslash ~~. Game Toolkit includes a number of sprites in the ~sprites~ folder (everything about your game is located in the ~mygame~ directory).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~All file paths should use the forward slash ~/~ *not* backslash ~~. Game Toolkit includes a number of sprites in the ~sprites~ folder (everything about your game is located in the ~mygame~ directory).~ - Line's tilde count is: 8 - Line contains link marker: false - CODE detected. ** Processing line: ~The following code renders a sprite with a ~width~ and ~height~ of ~100~ in the center of the screen.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The following code renders a sprite with a ~width~ and ~height~ of ~100~ in the center of the screen.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~~args.outputs.sprites~ is used to render a sprite.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.outputs.sprites~ is used to render a sprite.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.sprites << [~ ** Processing line: ~ 640 - 50, # X~ ** Processing line: ~ 360 - 50, # Y~ ** Processing line: ~ 100, # W~ ** Processing line: ~ 100, # H~ ** Processing line: ~ 'sprites/square-blue.png' # PATH~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** More Sprite Properties As An Array~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~More Sprite Properties As An Array~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~More Sprite Properties As An Array~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Here are all the properties you can set on a sprite.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Here are all the properties you can set on a sprite.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.sprites << [~ ** Processing line: ~ 100, # X~ ** Processing line: ~ 100, # Y~ ** Processing line: ~ 32, # W~ ** Processing line: ~ 64, # H~ ** Processing line: ~ 'sprites/square-blue.png', # PATH~ ** Processing line: ~ 0, # ANGLE~ ** Processing line: ~ 255, # ALPHA~ ** Processing line: ~ 0, # RED_SATURATION~ ** Processing line: ~ 255, # GREEN_SATURATION~ ** Processing line: ~ 0 # BLUE_SATURATION~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** Different Sprite Representations~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Different Sprite Representations~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Different Sprite Representations~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Using ordinal positioning can get a little unruly given so many properties you have control over.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Using ordinal positioning can get a little unruly given so many properties you have control over.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~You can represent a sprite as a ~Hash~:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You can represent a sprite as a ~Hash~:~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.sprites << {~ ** Processing line: ~ x: 640 - 50,~ ** Processing line: ~ y: 360 - 50,~ ** Processing line: ~ w: 100,~ ** Processing line: ~ h: 100,~ ** Processing line: ~ path: 'sprites/square-blue.png',~ ** Processing line: ~ angle: 0,~ ** Processing line: ~ a: 255,~ ** Processing line: ~ r: 255,~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 255,~ ** Processing line: ~ source_x: 0,~ ** Processing line: ~ source_y: 0,~ ** Processing line: ~ source_w: -1,~ ** Processing line: ~ source_h: -1,~ ** Processing line: ~ flip_vertically: false,~ ** Processing line: ~ flip_horizontally: false,~ ** Processing line: ~ angle_anchor_x: 0.5,~ ** Processing line: ~ angle_anchor_y: 1.0,~ ** Processing line: ~ blendmode_enum: 1~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~The ~blendmode_enum~ value can be set to ~0~ (no blending), ~1~ (alpha blending), ~2~ (additive blending), ~3~ (modulo blending), ~4~ (multiply blending).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The ~blendmode_enum~ value can be set to ~0~ (no blending), ~1~ (alpha blending), ~2~ (additive blending), ~3~ (modulo blending), ~4~ (multiply blending).~ - Line's tilde count is: 12 - Line contains link marker: false - CODE detected. ** Processing line: ~You can represent a sprite as an ~object~:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You can represent a sprite as an ~object~:~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # Create type with ALL sprite properties AND primitive_marker~ ** Processing line: ~ class Sprite~ ** Processing line: ~ attr_accessor :x, :y, :w, :h, :path, :angle, :a, :r, :g, :b,~ ** Processing line: ~ :source_x, :source_y, :source_w, :source_h,~ ** Processing line: ~ :tile_x, :tile_y, :tile_w, :tile_h,~ ** Processing line: ~ :flip_horizontally, :flip_vertically,~ ** Processing line: ~ :angle_anchor_x, :angle_anchor_y, :blendmode_enum~ ** Processing line: ~~ ** Processing line: ~ def primitive_marker~ ** Processing line: ~ :sprite~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class BlueSquare < Sprite~ ** Processing line: ~ def initialize opts~ ** Processing line: ~ @x = opts[:x]~ ** Processing line: ~ @y = opts[:y]~ ** Processing line: ~ @w = opts[:w]~ ** Processing line: ~ @h = opts[:h]~ ** Processing line: ~ @path = 'sprites/square-blue.png'~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.sprites << (BlueSquare.new x: 640 - 50,~ ** Processing line: ~ y: 360 - 50,~ ** Processing line: ~ w: 50,~ ** Processing line: ~ h: 50)~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** How To Render A Label~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~How To Render A Label~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~How To Render A Label~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~args.outputs.labels~ is used to render labels.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.outputs.labels~ is used to render labels.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Labels are how you display text. This code will go directly inside of the ~def tick args~ method.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Labels are how you display text. This code will go directly inside of the ~def tick args~ method.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Here is the minimum code:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Here is the minimum code:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # X Y TEXT~ ** Processing line: ~ args.outputs.labels << [640, 360, "I am a black label."]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** A Colored Label~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~A Colored Label~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~A Colored Label~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # A colored label~ ** Processing line: ~ # X Y TEXT, RED GREEN BLUE ALPHA~ ** Processing line: ~ args.outputs.labels << [640, 360, "I am a redish label.", 255, 128, 128, 255]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** Extended Label Properties~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Extended Label Properties~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Extended Label Properties~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # A colored label~ ** Processing line: ~ # X Y TEXT SIZE ALIGNMENT RED GREEN BLUE ALPHA FONT FILE~ ** Processing line: ~ args.outputs.labels << [~ ** Processing line: ~ 640, # X~ ** Processing line: ~ 360, # Y~ ** Processing line: ~ "Hello world", # TEXT~ ** Processing line: ~ 0, # SIZE_ENUM~ ** Processing line: ~ 1, # ALIGNMENT_ENUM~ ** Processing line: ~ 0, # RED~ ** Processing line: ~ 0, # GREEN~ ** Processing line: ~ 0, # BLUE~ ** Processing line: ~ 255, # ALPHA~ ** Processing line: ~ "fonts/coolfont.ttf" # FONT~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~A ~SIZE_ENUM~ of ~0~ represents "default size". A ~negative~ value will decrease the label size. A ~positive~ value will increase the label's size.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~A ~SIZE_ENUM~ of ~0~ represents "default size". A ~negative~ value will decrease the label size. A ~positive~ value will increase the label's size.~ - Line's tilde count is: 8 - Line contains link marker: false - CODE detected. ** Processing line: ~An ~ALIGNMENT_ENUM~ of ~0~ represents "left aligned". ~1~ represents "center aligned". ~2~ represents "right aligned".~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~An ~ALIGNMENT_ENUM~ of ~0~ represents "left aligned". ~1~ represents "center aligned". ~2~ represents "right aligned".~ - Line's tilde count is: 8 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~** Rendering A Label As A ~Hash~~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering A Label As A ~Hash~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering A Label As A ~Hash~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~You can add additional metadata about your game within a label, which requires you to use a `Hash` instead.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You can add additional metadata about your game within a label, which requires you to use a `Hash` instead.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.labels << {~ ** Processing line: ~ x: 200,~ ** Processing line: ~ y: 550,~ ** Processing line: ~ text: "dragonruby",~ ** Processing line: ~ size_enum: 2,~ ** Processing line: ~ alignment_enum: 1,~ ** Processing line: ~ r: 155,~ ** Processing line: ~ g: 50,~ ** Processing line: ~ b: 50,~ ** Processing line: ~ a: 255,~ ** Processing line: ~ font: "fonts/manaspc.ttf",~ ** Processing line: ~ vertical_alignment_enum: 0, # 0 is bottom, 1 is middle, 2 is top~ ** Processing line: ~ # You can add any properties you like (this will be ignored/won't cause errors)~ ** Processing line: ~ game_data_one: "Something",~ ** Processing line: ~ game_data_two: {~ ** Processing line: ~ value_1: "value",~ ** Processing line: ~ value_2: "value two",~ ** Processing line: ~ a_number: 15~ ** Processing line: ~ }~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** Getting The Size Of A Piece Of Text~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Getting The Size Of A Piece Of Text~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Getting The Size Of A Piece Of Text~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~You can get the render size of any string using ~args.gtk.calcstringbox~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You can get the render size of any string using ~args.gtk.calcstringbox~.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # TEXT SIZE_ENUM FONT~ ** Processing line: ~ w, h = args.gtk.calcstringbox("some string", 0, "font.ttf")~ ** Processing line: ~~ ** Processing line: ~ # NOTE: The SIZE_ENUM and FONT are optional arguments.~ ** Processing line: ~~ ** Processing line: ~ # Render a label showing the w and h of the text:~ ** Processing line: ~ args.outputs.labels << [~ ** Processing line: ~ 10,~ ** Processing line: ~ 710,~ ** Processing line: ~ # This string uses Ruby's string interpolation literal: #{}~ ** Processing line: ~ "'some string' has width: #{w}, and height: #{h}."~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** Rendering Labels With New Line Characters And Wrapping~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering Labels With New Line Characters And Wrapping~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering Labels With New Line Characters And Wrapping~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~You can use a strategy like the following to create multiple labels from a String.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You can use a strategy like the following to create multiple labels from a String.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ long_string = "Lorem ipsum dolor sit amet, consectetur adipiscing elitteger dolor velit, ultricies vitae libero vel, aliquam imperdiet enim."~ ** Processing line: ~ max_character_length = 30~ ** Processing line: ~ long_strings_split = args.string.wrapped_lines long_string, max_character_length~ ** Processing line: ~ args.outputs.labels << long_strings_split.map_with_index do |s, i|~ ** Processing line: ~ { x: 10, y: 600 - (i * 20), text: s }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** How To Play A Sound~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~How To Play A Sound~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~How To Play A Sound~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Sounds that end ~.wav~ will play once:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Sounds that end ~.wav~ will play once:~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # Play a sound every second~ ** Processing line: ~ if (args.state.tick_count % 60) == 0~ ** Processing line: ~ args.outputs.sounds << 'something.wav'~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~Sounds that end ~.ogg~ is considered background music and will loop:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Sounds that end ~.ogg~ is considered background music and will loop:~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # Start a sound loop at the beginning of the game~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.outputs.sounds << 'background_music.ogg'~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~If you want to play a ~.ogg~ once as if it were a sound effect, you can do:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~If you want to play a ~.ogg~ once as if it were a sound effect, you can do:~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # Play a sound every second~ ** Processing line: ~ if (args.state.tick_count % 60) == 0~ ** Processing line: ~ args.gtk.queue_sound 'some-ogg.ogg'~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** Using ~args.state~ To Store Your Game State~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Using ~args.state~ To Store Your Game State~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Using ~args.state~ To Store Your Game State~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~~args.state~ is a open data structure that allows you to define properties that are arbitrarily nested. You don't need to define any kind of ~class~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.state~ is a open data structure that allows you to define properties that are arbitrarily nested. You don't need to define any kind of ~class~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~To initialize your game state, use the ~||=~ operator. Any value on the right side of ~||=~ will only be assigned _once_.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~To initialize your game state, use the ~||=~ operator. Any value on the right side of ~||=~ will only be assigned _once_.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~To assign a value every frame, just use the ~=~ operator, but _make sure_ you've initialized a default value.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~To assign a value every frame, just use the ~=~ operator, but _make sure_ you've initialized a default value.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # initialize your game state ONCE~ ** Processing line: ~ args.state.player.x ||= 0~ ** Processing line: ~ args.state.player.y ||= 0~ ** Processing line: ~ args.state.player.hp ||= 100~ ** Processing line: ~~ ** Processing line: ~ # increment the x position of the character by one every frame~ ** Processing line: ~ args.state.player.x += 1~ ** Processing line: ~~ ** Processing line: ~ # Render a sprite with a label above the sprite~ ** Processing line: ~ args.outputs.sprites << [~ ** Processing line: ~ args.state.player.x,~ ** Processing line: ~ args.state.player.y,~ ** Processing line: ~ 32, 32,~ ** Processing line: ~ "player.png"~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << [~ ** Processing line: ~ args.state.player.x,~ ** Processing line: ~ args.state.player.y - 50,~ ** Processing line: ~ args.state.player.hp~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** Troubleshoot Performance~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Troubleshoot Performance~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Troubleshoot Performance~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~1. If you're using ~Array~s for your primitives (~args.outputs.sprites << []~), use ~Hash~ instead (~args.outputs.sprites << { x: ... }~).~ - OL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ If you're using ~Array~s for your primitives (~args.outputs.sprites << []~), use ~Hash~ instead (~args.outputs.sprites << { x: ... }~).~ - Line's tilde count is: 8 - Line contains link marker: false - CODE detected. ** Processing line: ~2. If you're using ~Entity~ for your primitives (~args.outputs.sprites << args.state.new_entity~), use ~StrictEntity~ instead (~args.outputs.sprites << args.state.new_entity_strict~).~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ If you're using ~Entity~ for your primitives (~args.outputs.sprites << args.state.new_entity~), use ~StrictEntity~ instead (~args.outputs.sprites << args.state.new_entity_strict~).~ - Line's tilde count is: 8 - Line contains link marker: false - CODE detected. ** Processing line: ~3. Use ~.each~ instead of ~.map~ if you don't care about the return value.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ Use ~.each~ instead of ~.map~ if you don't care about the return value.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~4. When concatenating primitives to outputs, do them in bulk. Instead of:~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ When concatenating primitives to outputs, do them in bulk. Instead of:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ args.state.bullets.each do |bullet|~ ** Processing line: ~ args.outputs.sprites << bullet.sprite~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~do~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~do~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ args.outputs.sprites << args.state.bullets.map do |b|~ ** Processing line: ~ b.sprite~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~5. Use ~args.outputs.static_~ variant for things that don't change often (take a look at the Basic Gorillas sample app and Dueling Starships sample app to see how ~static_~ is leveraged.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~5. Use ~args.outputs.static_~ variant for things that don't change often (take a look at the Basic Gorillas sample app and Dueling Starships sample app to see how ~static_~ is leveraged.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~6. Consider using a ~render_target~ if you're doing some form of a camera that moves a lot of primitives (take a look at the Render Target sample apps for more info).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~6. Consider using a ~render_target~ if you're doing some form of a camera that moves a lot of primitives (take a look at the Render Target sample apps for more info).~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::Runtime~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::Runtime~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~The GTK::Runtime class is the core of DragonRuby. It is globally accessible via ~$gtk~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The GTK::Runtime class is the core of DragonRuby. It is globally accessible via ~$gtk~.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~* SUMMARY: ~def tick args; end;~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~SUMMARY: ~def tick args; end;~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Most everything you will need to build your game is in the ~args~ parameter that is provided to your ~tick~ method. Follows is a high level summary of each function that is available from ~args~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Most everything you will need to build your game is in the ~args~ parameter that is provided to your ~tick~ method. Follows is a high level summary of each function that is available from ~args~.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~All the properties below hang off of ~args~ and can be accessed in the ~tick~ method:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~All the properties below hang off of ~args~ and can be accessed in the ~tick~ method:~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.PROPERTY~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~** ~args.state~~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.state~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.state~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Store your game state inside of this ~state~. Properties with arbitrary nesting is allowed and a backing Entity will be created on your behalf.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Store your game state inside of this ~state~. Properties with arbitrary nesting is allowed and a backing Entity will be created on your behalf.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.player.x ||= 0~ ** Processing line: ~ args.state.player.y ||= 0~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~*** ~.*.entity_id~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.*.entity_id~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.*.entity_id~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Entities automatically receive an ~entity_id~ of type ~Fixnum~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Entities automatically receive an ~entity_id~ of type ~Fixnum~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.*.entity_type~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.*.entity_type~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.*.entity_type~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Entities can have an ~entity_type~ which is represented as a ~Symbol~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Entities can have an ~entity_type~ which is represented as a ~Symbol~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.*.created_at~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.*.created_at~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.*.created_at~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Entities have ~created_at~ set to ~args.state.tick_count~ when they are created.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Entities have ~created_at~ set to ~args.state.tick_count~ when they are created.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.*.created_at_elapsed~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.*.created_at_elapsed~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.*.created_at_elapsed~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the elapsed number of ticks since creation.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the elapsed number of ticks since creation.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.*.global_created_at~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.*.global_created_at~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.*.global_created_at~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Entities have ~global_created_at~ set to ~Kernel.global_tick_count~ when they are created.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Entities have ~global_created_at~ set to ~Kernel.global_tick_count~ when they are created.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.*.global_created_at_elapsed~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.*.global_created_at_elapsed~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.*.global_created_at_elapsed~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the elapsed number of global ticks since creation.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the elapsed number of global ticks since creation.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.*.as_hash~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.*.as_hash~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.*.as_hash~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Entity cast to a ~Hash~ so you can update values as if you were updating a ~Hash~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Entity cast to a ~Hash~ so you can update values as if you were updating a ~Hash~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.new_entity~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.new_entity~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.new_entity~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Creates a new Entity with a ~type~, and initial properties. An option block can be passed to change the newly created entity:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Creates a new Entity with a ~type~, and initial properties. An option block can be passed to change the newly created entity:~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.player ||= args.state.new_entity :player, x: 0, y: 0 do |e|~ ** Processing line: ~ e.max_hp = 100~ ** Processing line: ~ e.hp = e.max_hp * rand~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~*** ~.new_entity_strict~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.new_entity_strict~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.new_entity_strict~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Creates a new Strict Entity. While Entities created via ~args.state.new_entity~ can have new properties added later on, Entities created using ~args.state.new_entity~ must define all properties that are allowed during its initialization. Attempting to add new properties after initialization will result in an exception.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Creates a new Strict Entity. While Entities created via ~args.state.new_entity~ can have new properties added later on, Entities created using ~args.state.new_entity~ must define all properties that are allowed during its initialization. Attempting to add new properties after initialization will result in an exception.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.tick_count~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.tick_count~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.tick_count~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the current tick of the game. ~args.state.tick_count~ is ~0~ when the game is first started or if the game is reset via ~$gtk.reset~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the current tick of the game. ~args.state.tick_count~ is ~0~ when the game is first started or if the game is reset via ~$gtk.reset~.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~** ~args.inputs~~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.inputs~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.inputs~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Access using input using ~args.inputs~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Access using input using ~args.inputs~.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.up~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.up~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.up~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if: the ~up~ arrow or ~w~ key is pressed or held on the ~keyboard~; or if ~up~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted upwards.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if: the ~up~ arrow or ~w~ key is pressed or held on the ~keyboard~; or if ~up~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted upwards.~ - Line's tilde count is: 16 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.down~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if: the ~down~ arrow or ~s~ key is pressed or held on the ~keyboard~; or if ~down~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted downwards.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if: the ~down~ arrow or ~s~ key is pressed or held on the ~keyboard~; or if ~down~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted downwards.~ - Line's tilde count is: 16 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.left~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.left~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.left~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if: the ~left~ arrow or ~a~ key is pressed or held on the ~keyboard~; or if ~left~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted to the left.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if: the ~left~ arrow or ~a~ key is pressed or held on the ~keyboard~; or if ~left~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted to the left.~ - Line's tilde count is: 16 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.right~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if: the ~right~ arrow or ~d~ key is pressed or held on the ~keyboard~; or if ~right~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted to the right.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if: the ~right~ arrow or ~d~ key is pressed or held on the ~keyboard~; or if ~right~ is pressed or held on ~controller_one~; or if the ~left_analog~ on ~controller_one~ is tilted to the right.~ - Line's tilde count is: 16 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.left_right~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.left_right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.left_right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.left~ and ~args.inputs.right~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.left~ and ~args.inputs.right~.~ - Line's tilde count is: 10 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.up_down~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.up_down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.up_down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~-1~ (down), ~0~ (neutral), or ~+1~ (up) depending on results of ~args.inputs.down~ and ~args.inputs.up~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~-1~ (down), ~0~ (neutral), or ~+1~ (up) depending on results of ~args.inputs.down~ and ~args.inputs.up~.~ - Line's tilde count is: 10 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.text~ OR ~.history~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.text~ OR ~.history~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.text~ OR ~.history~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a string that represents the last key that was pressed on the keyboard.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a string that represents the last key that was pressed on the keyboard.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.mouse~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.mouse~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.mouse~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Represents the user's~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Represents the user's~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~**** ~.x~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.x~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.x~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the current ~x~ location of the mouse.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the current ~x~ location of the mouse.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~mouse.y~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~mouse.y~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~mouse.y~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Return.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Return.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~**** ~.inside_rect? rect~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.inside_rect? rect~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.inside_rect? rect~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Return. ~args.inputs.mouse.inside_rect?~ takes in any primitive that responds to ~x, y, w, h~:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Return. ~args.inputs.mouse.inside_rect?~ takes in any primitive that responds to ~x, y, w, h~:~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.inside_circle? center_point, radius~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.inside_circle? center_point, radius~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.inside_circle? center_point, radius~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if the mouse is inside of a specified circle. ~args.inputs.mouse.inside_circle?~ takes in any primitive that responds to ~x, y~ (which represents the circle's center), and takes in a ~radius~:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if the mouse is inside of a specified circle. ~args.inputs.mouse.inside_circle?~ takes in any primitive that responds to ~x, y~ (which represents the circle's center), and takes in a ~radius~:~ - Line's tilde count is: 8 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.moved~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.moved~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.moved~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if the mouse has moved on the current frame.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if the mouse has moved on the current frame.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.button_left~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.button_left~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.button_left~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if the left mouse button is down.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if the left mouse button is down.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.button_middle~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.button_middle~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.button_middle~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if the middle mouse button is down.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if the middle mouse button is down.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.button_right~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.button_right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.button_right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if the right mouse button is down.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if the right mouse button is down.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.button_bits~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.button_bits~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.button_bits~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a bitmask for all buttons on the mouse: ~1~ for a button in the ~down~ state, ~0~ for a button in the ~up~ state.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a bitmask for all buttons on the mouse: ~1~ for a button in the ~down~ state, ~0~ for a button in the ~up~ state.~ - Line's tilde count is: 8 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~mouse.wheel~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~mouse.wheel~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~mouse.wheel~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Represents the mouse wheel. Returns ~nil~ if no mouse wheel actions occurred.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Represents the mouse wheel. Returns ~nil~ if no mouse wheel actions occurred.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~***** ~.x~~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~***** ~.x~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the negative or positive number if the mouse wheel has changed in the ~x~ axis.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the negative or positive number if the mouse wheel has changed in the ~x~ axis.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~***** ~.y~~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~***** ~.y~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the negative or positive number if the mouse wheel has changed in the ~y~ axis.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the negative or positive number if the mouse wheel has changed in the ~y~ axis.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.click~ OR ~.down~, ~.previous_click~, ~.up~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.click~ OR ~.down~, ~.previous_click~, ~.up~~ - Line's tilde count is: 8 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.click~ OR ~.down~, ~.previous_click~, ~.up~~ - Line's tilde count is: 8 - Line contains link marker: false - CODE detected. ** Processing line: ~The properties ~args.inputs.mouse.(click|down|previous_click|up)~ each return ~nil~ if the mouse button event didn't occur. And return an Entity that has an ~x~, ~y~ properties along with helper functions to determine collision: ~inside_rect?~, ~inside_circle~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The properties ~args.inputs.mouse.(click|down|previous_click|up)~ each return ~nil~ if the mouse button event didn't occur. And return an Entity that has an ~x~, ~y~ properties along with helper functions to determine collision: ~inside_rect?~, ~inside_circle~.~ - Line's tilde count is: 12 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.controller_one~, ~.controller_two~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.controller_one~, ~.controller_two~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.controller_one~, ~.controller_two~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~Represents controllers connected to the usb ports.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Represents controllers connected to the usb ports.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~**** ~.up~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.up~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.up~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if ~up~ is pressed or held on the directional or left analog.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if ~up~ is pressed or held on the directional or left analog.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.down~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if ~down~ is pressed or held on the directional or left analog.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if ~down~ is pressed or held on the directional or left analog.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.left~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.left~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.left~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if ~left~ is pressed or held on the directional or left analog.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if ~left~ is pressed or held on the directional or left analog.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.right~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if ~right~ is pressed or held on the directional or left analog.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if ~right~ is pressed or held on the directional or left analog.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.left_right~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.left_right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.left_right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.controller_(one|two).left~ and ~args.inputs.controller_(one|two).right~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.controller_(one|two).left~ and ~args.inputs.controller_(one|two).right~.~ - Line's tilde count is: 10 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.up_down~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.up_down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.up_down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~-1~ (down), ~0~ (neutral), or ~+1~ (up) depending on results of ~args.inputs.controller_(one|two).up~ and ~args.inputs.controller_(one|two).down~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~-1~ (down), ~0~ (neutral), or ~+1~ (up) depending on results of ~args.inputs.controller_(one|two).up~ and ~args.inputs.controller_(one|two).down~.~ - Line's tilde count is: 10 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.(left_analog_x_raw|right_analog_x_raw)~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.(left_analog_x_raw|right_analog_x_raw)~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.(left_analog_x_raw|right_analog_x_raw)~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the raw integer value for the analog's horizontal movement (~-32,000 to +32,000~).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the raw integer value for the analog's horizontal movement (~-32,000 to +32,000~).~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.left_analog_y_raw|right_analog_y_raw)~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.left_analog_y_raw|right_analog_y_raw)~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.left_analog_y_raw|right_analog_y_raw)~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the raw integer value for the analog's vertical movement (~-32,000 to +32,000~).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the raw integer value for the analog's vertical movement (~-32,000 to +32,000~).~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.left_analog_x_perc|right_analog_x_perc)~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.left_analog_x_perc|right_analog_x_perc)~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.left_analog_x_perc|right_analog_x_perc)~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a number between ~-1~ and ~1~ which represents the percentage the analog is moved horizontally as a ratio of the maximum horizontal movement.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a number between ~-1~ and ~1~ which represents the percentage the analog is moved horizontally as a ratio of the maximum horizontal movement.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.left_analog_y_perc|right_analog_y_perc)~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.left_analog_y_perc|right_analog_y_perc)~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.left_analog_y_perc|right_analog_y_perc)~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a number between ~-1~ and ~1~ which represents the percentage the analog is moved vertically as a ratio of the maximum vertical movement.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a number between ~-1~ and ~1~ which represents the percentage the analog is moved vertically as a ratio of the maximum vertical movement.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.directional_up~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.directional_up~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.directional_up~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if ~up~ is pressed or held on the directional.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if ~up~ is pressed or held on the directional.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.directional_down~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.directional_down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.directional_down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if ~down~ is pressed or held on the directional.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if ~down~ is pressed or held on the directional.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.directional_left~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.directional_left~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.directional_left~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if ~left~ is pressed or held on the directional.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if ~left~ is pressed or held on the directional.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.directional_right~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.directional_right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.directional_right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if ~right~ is pressed or held on the directional.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if ~right~ is pressed or held on the directional.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.(a|b|x|y|l1|r1|l2|r2|l3|r3|start|select)~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.(a|b|x|y|l1|r1|l2|r2|l3|r3|start|select)~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.(a|b|x|y|l1|r1|l2|r2|l3|r3|start|select)~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if the specific button is pressed or held.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if the specific button is pressed or held.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.truthy_keys~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.truthy_keys~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.truthy_keys~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a collection of ~Symbol~s that represent all keys that are in the pressed or held state.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a collection of ~Symbol~s that represent all keys that are in the pressed or held state.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.key_down~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.key_down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.key_down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if the specific button was pressed on this frame. ~args.inputs.controller_(one|two).key_down.BUTTON~ will only be true on the frame it was pressed.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if the specific button was pressed on this frame. ~args.inputs.controller_(one|two).key_down.BUTTON~ will only be true on the frame it was pressed.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.key_held~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.key_held~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.key_held~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if the specific button is being held. ~args.inputs.controller_(one|two).key_held.BUTTON~ will be true for all frames after ~key_down~ (until released).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if the specific button is being held. ~args.inputs.controller_(one|two).key_held.BUTTON~ will be true for all frames after ~key_down~ (until released).~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.key_up~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.key_up~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.key_up~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if the specific button was released. ~args.inputs.controller_(one|two).key_up.BUTTON~ will be true only on the frame the button was released.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if the specific button was released. ~args.inputs.controller_(one|two).key_up.BUTTON~ will be true only on the frame the button was released.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.keyboard~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.keyboard~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.keyboard~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Represents the user's keyboard~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Represents the user's keyboard~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~**** ~.up~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.up~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.up~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if ~up~ or ~w~ is pressed or held on the keyboard.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if ~up~ or ~w~ is pressed or held on the keyboard.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.down~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if ~down~ or ~s~ is pressed or held on the keyboard.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if ~down~ or ~s~ is pressed or held on the keyboard.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.left~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.left~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.left~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if ~left~ or ~a~ is pressed or held on the keyboard.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if ~left~ or ~a~ is pressed or held on the keyboard.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.right~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if ~right~ or ~d~ is pressed or held on the keyboard.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if ~right~ or ~d~ is pressed or held on the keyboard.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.left_right~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.left_right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.left_right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.keyboard.left~ and ~args.inputs.keyboard.right~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.keyboard.left~ and ~args.inputs.keyboard.right~.~ - Line's tilde count is: 10 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~.up_down~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.up_down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~.up_down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.keyboard.up~ and ~args.inputs.keyboard.up~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~-1~ (left), ~0~ (neutral), or ~+1~ (right) depending on results of ~args.inputs.keyboard.up~ and ~args.inputs.keyboard.up~.~ - Line's tilde count is: 10 - Line contains link marker: false - CODE detected. ** Processing line: ~**** keyboard properties~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~keyboard properties~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~keyboard properties~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~The following properties represent keys on the keyboard and are available on ~args.inputs.keyboard.KEY~, ~args.inputs.keyboard.key_down.KEY~, ~args.inputs.keyboard.key_held.KEY~, and ~args.inputs.keyboard.key_up.KEY~:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The following properties represent keys on the keyboard and are available on ~args.inputs.keyboard.KEY~, ~args.inputs.keyboard.key_down.KEY~, ~args.inputs.keyboard.key_held.KEY~, and ~args.inputs.keyboard.key_up.KEY~:~ - Line's tilde count is: 8 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~alt~~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~alt~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~meta~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~meta~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~control~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~control~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~shift~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~shift~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~ctrl_KEY~ (dynamic method, eg ~args.inputs.keyboard.ctrl_a~)~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~ctrl_KEY~ (dynamic method, eg ~args.inputs.keyboard.ctrl_a~)~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~exclamation_point~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~exclamation_point~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~zero~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~zero~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~one~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~one~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~two~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~two~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~three~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~three~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~four~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~four~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~five~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~five~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~six~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~six~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~seven~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~seven~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~eight~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~eight~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~nine~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~nine~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~backspace~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~backspace~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~delete~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~delete~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~escape~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~escape~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~enter~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~enter~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~tab~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~tab~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~open_round_brace~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~open_round_brace~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~close_round_brace~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~close_round_brace~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~open_curly_brace~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~open_curly_brace~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~close_curly_brace~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~close_curly_brace~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~open_square_brace~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~open_square_brace~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~close_square_brace~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~close_square_brace~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~colon~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~colon~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~semicolon~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~semicolon~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~equal_sign~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~equal_sign~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~hyphen~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~hyphen~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~space~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~space~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~dollar_sign~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~dollar_sign~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~double_quotation_mark~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~double_quotation_mark~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~single_quotation_mark~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~single_quotation_mark~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~backtick~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~backtick~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~tilde~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~tilde~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~period~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~period~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~comma~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~comma~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~pipe~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~pipe~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~underscore~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~underscore~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~a~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~a~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~b~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~b~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~c~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~c~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~d~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~d~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~e~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~e~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~f~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~f~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~g~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~g~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~h~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~h~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~i~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~i~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~j~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~j~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~k~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~k~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~l~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~l~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~m~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~m~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~n~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~n~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~o~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~o~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~p~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~p~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~q~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~q~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~r~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~r~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~s~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~s~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~t~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~t~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~u~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~u~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~v~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~v~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~w~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~w~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~x~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~x~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~y~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~y~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~z~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~z~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~shift~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~shift~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~control~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~control~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~alt~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~alt~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~meta~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~meta~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~left~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~left~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~right~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~up~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~up~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~down~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~pageup~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~pageup~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~pagedown~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~pagedown~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~char~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~char~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~plus~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~plus~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~at~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~at~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~forward_slash~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~forward_slash~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~back_slash~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~back_slash~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~asterisk~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~asterisk~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~less_than~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~less_than~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~greater_than~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~greater_than~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~carat~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~carat~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~ampersand~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~ampersand~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~superscript_two~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~superscript_two~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~circumflex~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~circumflex~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~question_mark~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~question_mark~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~section_sign~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~section_sign~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~ordinal_indicator~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~ordinal_indicator~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~raw_key~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~raw_key~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~raw_key~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~raw_key~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~left_right~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~left_right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~up_down~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~up_down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~directional_vector~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~directional_vector~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~truthy_keys~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~truthy_keys~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~**** ~inputs.keyboard.keys~~ - H4 detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~inputs.keyboard.keys~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~**** ~... gsub-ing empty string - Formatting line: ~~inputs.keyboard.keys~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a ~Hash~ with all keys on the keyboard in their respective state. The ~Hash~ contains the following ~keys~~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a ~Hash~ with all keys on the keyboard in their respective state. The ~Hash~ contains the following ~keys~~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~:down~~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~:down~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~:held~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~:held~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~:down_or_held~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~:down_or_held~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~:up~~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~:up~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~** ~args.outputs~~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.outputs~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.outputs~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~args.outputs.PROPERTY~ is how you render to the screen.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.outputs.PROPERTY~ is how you render to the screen.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.background_color~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.background_color~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.background_color~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Set ~args.outputs.background_color~ to an ~Array~ with ~RGB~ values (eg. ~[255, 255, 255]~ for the color white).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Set ~args.outputs.background_color~ to an ~Array~ with ~RGB~ values (eg. ~[255, 255, 255]~ for the color white).~ - Line's tilde count is: 8 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.sounds~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.sounds~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.sounds~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Send a file path to this collection to play a sound. The sound file must be under the ~mygame~ directory. Example: ~args.outputs.sounds << "sounds/jump.wav"~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Send a file path to this collection to play a sound. The sound file must be under the ~mygame~ directory. Example: ~args.outputs.sounds << "sounds/jump.wav"~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.solids~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.solids~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.solids~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Send a Primitive to this collection to render a filled in rectangle to the screen. This collection is cleared at the end of every frame.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Send a Primitive to this collection to render a filled in rectangle to the screen. This collection is cleared at the end of every frame.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.static_solids~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.static_solids~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.static_solids~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Send a Primitive to this collection to render a filled in rectangle to the screen. This collection is not cleared at the end of every frame. And objects can be mutated by reference.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Send a Primitive to this collection to render a filled in rectangle to the screen. This collection is not cleared at the end of every frame. And objects can be mutated by reference.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.sprites~, ~.static_sprites~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.sprites~, ~.static_sprites~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.sprites~, ~.static_sprites~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~Send a Primitive to this collection to render a sprite to the screen.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Send a Primitive to this collection to render a sprite to the screen.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.primitives~, ~.static_primitives~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.primitives~, ~.static_primitives~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.primitives~, ~.static_primitives~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~Send a Primitive of any type and it'll be rendered. The Primitive must have a ~primitive_marker~ that returns ~:solid~, ~:sprite~, ~:label~, ~:line~, ~:border~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Send a Primitive of any type and it'll be rendered. The Primitive must have a ~primitive_marker~ that returns ~:solid~, ~:sprite~, ~:label~, ~:line~, ~:border~.~ - Line's tilde count is: 12 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.labels~, ~.static_labels~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.labels~, ~.static_labels~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.labels~, ~.static_labels~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~Send a Primitive to this collection to render text to the screen.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Send a Primitive to this collection to render text to the screen.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.lines~, ~.static_lines~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.lines~, ~.static_lines~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.lines~, ~.static_lines~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~Send a Primitive to this collection to render a line to the screen.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Send a Primitive to this collection to render a line to the screen.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.borders~, ~.static_borders~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.borders~, ~.static_borders~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.borders~, ~.static_borders~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~Send a Primitive to this collection to render an unfilled rectangle to the screen.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Send a Primitive to this collection to render an unfilled rectangle to the screen.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.debug~, ~.static_debug~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.debug~, ~.static_debug~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.debug~, ~.static_debug~~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~Send any Primitive to this collection which represents things you render to the screen for debugging purposes. Primitives in this collection will not be rendered in a production release of your game.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Send any Primitive to this collection which represents things you render to the screen for debugging purposes. Primitives in this collection will not be rendered in a production release of your game.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~** ~args.geometry~~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.geometry~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.geometry~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~This property contains geometric functions. Functions can be invoked via ~args.geometry.FUNCTION~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~This property contains geometric functions. Functions can be invoked via ~args.geometry.FUNCTION~.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Here are some general notes with regards to the arguments these geometric functions accept.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Here are some general notes with regards to the arguments these geometric functions accept.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~1. ~Rectangles~ can be represented as an ~Array~ with four (or more) values ~[x, y, w, h]~, as a ~Hash~ ~{ x:, y:, w:, h: }~ or an object that responds to ~x~, ~y~, ~w~, and ~h~.~ - OL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ ~Rectangles~ can be represented as an ~Array~ with four (or more) values ~[x, y, w, h]~, as a ~Hash~ ~{ x:, y:, w:, h: }~ or an object that responds to ~x~, ~y~, ~w~, and ~h~.~ - Line's tilde count is: 18 - Line contains link marker: false - CODE detected. ** Processing line: ~2. ~Points~ can be represent as an ~Array~ with two (or more) values ~[x, y]~, as a ~Hash~ ~{ x:, y:}~ or an object that responds to ~x~, and ~y~.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ ~Points~ can be represent as an ~Array~ with two (or more) values ~[x, y]~, as a ~Hash~ ~{ x:, y:}~ or an object that responds to ~x~, and ~y~.~ - Line's tilde count is: 14 - Line contains link marker: false - CODE detected. ** Processing line: ~3. ~Lines~ can be represented as an ~Array~ with four (or more) values ~[x, y, x2, y2]~, as a ~Hash~ ~{ x:, y:, x2:, y2: }~ or an object that responds to ~x~, ~y~, ~x2~, and ~y2~.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ ~Lines~ can be represented as an ~Array~ with four (or more) values ~[x, y, x2, y2]~, as a ~Hash~ ~{ x:, y:, x2:, y2: }~ or an object that responds to ~x~, ~y~, ~x2~, and ~y2~.~ - Line's tilde count is: 18 - Line contains link marker: false - CODE detected. ** Processing line: ~4. ~Angles~ are represented as degrees (not radians).~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~ ~Angles~ are represented as degrees (not radians).~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~*** ~.inside_rect? rect_1, rect_2~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.inside_rect? rect_1, rect_2~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.inside_rect? rect_1, rect_2~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if ~rect_1~ is inside ~rect_2~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if ~rect_1~ is inside ~rect_2~.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.intersect_rect? rect_2, rect_2~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.intersect_rect? rect_2, rect_2~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.intersect_rect? rect_2, rect_2~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if ~rect_1~ intersects ~rect_2~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if ~rect_1~ intersects ~rect_2~.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.scale_rect rect, x_percentage, y_percentage~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.scale_rect rect, x_percentage, y_percentage~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.scale_rect rect, x_percentage, y_percentage~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a new rectangle that is scaled by the percentages provided.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a new rectangle that is scaled by the percentages provided.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.angle_to start_point, end_point~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.angle_to start_point, end_point~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.angle_to start_point, end_point~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the angle in degrees between two points ~start_point~ to ~end_point~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the angle in degrees between two points ~start_point~ to ~end_point~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.angle_from start_point, end_point~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.angle_from start_point, end_point~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.angle_from start_point, end_point~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the angle in degrees between two points ~start_point~ from ~end_point~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the angle in degrees between two points ~start_point~ from ~end_point~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.point_inside_circle? point, circle_center_point, radius~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.point_inside_circle? point, circle_center_point, radius~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.point_inside_circle? point, circle_center_point, radius~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if a point is inside a circle defined by its center and radius.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if a point is inside a circle defined by its center and radius.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.center_inside_rect rect, other_rect~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.center_inside_rect rect, other_rect~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.center_inside_rect rect, other_rect~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a new rectangle based of off ~rect~ that is centered inside of ~other_rect~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a new rectangle based of off ~rect~ that is centered inside of ~other_rect~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.center_inside_rect_x rect, other_rect~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.center_inside_rect_x rect, other_rect~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.center_inside_rect_x rect, other_rect~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a new rectangle based of off ~rect~ that is centered horizontally inside of ~other_rect~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a new rectangle based of off ~rect~ that is centered horizontally inside of ~other_rect~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.center_inside_rect_y rect, other_rect~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.center_inside_rect_y rect, other_rect~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.center_inside_rect_y rect, other_rect~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a new rectangle based of off ~rect~ that is centered vertically inside of ~other_rect~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a new rectangle based of off ~rect~ that is centered vertically inside of ~other_rect~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.anchor_rect rect, anchor_x, anchor_y~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.anchor_rect rect, anchor_x, anchor_y~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.anchor_rect rect, anchor_x, anchor_y~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a new rectangle based of off ~rect~ that has been repositioned based on the percentages passed into anchor_x, and anchor_y.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a new rectangle based of off ~rect~ that has been repositioned based on the percentages passed into anchor_x, and anchor_y.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.shift_line line, x, y~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.shift_line line, x, y~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.shift_line line, x, y~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a line that is offset by ~x~, and ~y~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a line that is offset by ~x~, and ~y~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.line_y_intercept line~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.line_y_intercept line~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.line_y_intercept line~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Given a line, the ~b~ value is determined for the point slope form equation: ~y = mx + b~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Given a line, the ~b~ value is determined for the point slope form equation: ~y = mx + b~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.angle_between_lines line_one, line_two, replace_infinity:~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.angle_between_lines line_one, line_two, replace_infinity:~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.angle_between_lines line_one, line_two, replace_infinity:~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the angle between two lines as if they were infinitely long. A numeric value can be passed in for the last parameter which would represent lines that do not intersect.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the angle between two lines as if they were infinitely long. A numeric value can be passed in for the last parameter which would represent lines that do not intersect.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.line_slope line, replace_infinity:~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.line_slope line, replace_infinity:~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.line_slope line, replace_infinity:~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Given a line, the ~m~ value is determined for the point slope form equation: ~y = mx + b~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Given a line, the ~m~ value is determined for the point slope form equation: ~y = mx + b~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.line_rise_run~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.line_rise_run~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.line_rise_run~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Given a line, a ~Hash~ is returned that returns the slope as ~x~ and ~y~ properties with normalized values (the number is between -1 and 1).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Given a line, a ~Hash~ is returned that returns the slope as ~x~ and ~y~ properties with normalized values (the number is between -1 and 1).~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.ray_test point, line~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.ray_test point, line~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.ray_test point, line~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Given a point and a line, ~:on~, ~:left~, or ~:right~ which represents the location of the point relative to the line.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Given a point and a line, ~:on~, ~:left~, or ~:right~ which represents the location of the point relative to the line.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.line_rect line~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.line_rect line~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.line_rect line~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the bounding rectangle for a line.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the bounding rectangle for a line.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.line_intersect line_one, line_two~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.line_intersect line_one, line_two~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.line_intersect line_one, line_two~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a point that represents the intersection of the lines.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a point that represents the intersection of the lines.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.distance point_one, point_two~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.distance point_one, point_two~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.distance point_one, point_two~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the distance between two points.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the distance between two points.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.cubic_bezier t, a, b, c, d~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.cubic_bezier t, a, b, c, d~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.cubic_bezier t, a, b, c, d~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the cubic bezier function for tick_count ~t~ with anchors ~a~, ~b~, ~c~, and ~d~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the cubic bezier function for tick_count ~t~ with anchors ~a~, ~b~, ~c~, and ~d~.~ - Line's tilde count is: 10 - Line contains link marker: false - CODE detected. ** Processing line: ~** ~args.easing~~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.easing~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.easing~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~A set of functions that allow you to determine the current progression of an easing function.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~A set of functions that allow you to determine the current progression of an easing function.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.ease start_tick, current_tick, duration, easing_functions~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.ease start_tick, current_tick, duration, easing_functions~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.ease start_tick, current_tick, duration, easing_functions~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Given a start, current, duration, and easing function names, ~ease~ returns a number between 0 and 1 that represents the progress of an easing function.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Given a start, current, duration, and easing function names, ~ease~ returns a number between 0 and 1 that represents the progress of an easing function.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~The built in easing definitions you have access to are ~:identity~, ~:flip~, ~:quad~, ~:cube~, ~:quart~, and ~:quint~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The built in easing definitions you have access to are ~:identity~, ~:flip~, ~:quad~, ~:cube~, ~:quart~, and ~:quint~.~ - Line's tilde count is: 12 - Line contains link marker: false - CODE detected. ** Processing line: ~This example will move a box at a linear speed from 0 to 1280.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~This example will move a box at a linear speed from 0 to 1280.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ start_time = 10~ ** Processing line: ~ duration = 60~ ** Processing line: ~ current_progress = args.easing.ease start_time,~ ** Processing line: ~ args.state.tick_count,~ ** Processing line: ~ duration,~ ** Processing line: ~ :identity~ ** Processing line: ~ args.outputs.solids << { x: 1280 * current_progress, y: 360, w: 10, h: 10 }~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~*** ~.ease_spline start_tick, current_tick, duration, spline~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.ease_spline start_tick, current_tick, duration, spline~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.ease_spline start_tick, current_tick, duration, spline~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Given a start, current, duration, and a multiple bezier values, this function returns a number between 0 and 1 that represents the progress of an easing function.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Given a start, current, duration, and a multiple bezier values, this function returns a number between 0 and 1 that represents the progress of an easing function.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~This example will move a box at a linear speed from 0 to 1280 and then back to 0 using two bezier definitions (represented as an array with four values).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~This example will move a box at a linear speed from 0 to 1280 and then back to 0 using two bezier definitions (represented as an array with four values).~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ start_time = 10~ ** Processing line: ~ duration = 60~ ** Processing line: ~ spline = [~ ** Processing line: ~ [ 0, 0.25, 0.75, 1.0],~ ** Processing line: ~ [1.0, 0.75, 0.25, 0]~ ** Processing line: ~ ]~ ** Processing line: ~ current_progress = args.easing.ease_spline start_time,~ ** Processing line: ~ args.state.tick_count,~ ** Processing line: ~ duration,~ ** Processing line: ~ spline~ ** Processing line: ~ args.outputs.solids << { x: 1280 * current_progress, y: 360, w: 10, h: 10 }~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~** ~args.string~~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.string~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.string~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Useful string functions not included in Ruby core libraries.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Useful string functions not included in Ruby core libraries.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.wrapped_lines string, max_character_length~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.wrapped_lines string, max_character_length~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.wrapped_lines string, max_character_length~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~This function will return a collection of strings given an input ~string~ and ~max_character_length~. The collection of strings returned will split the input string into strings of ~length <= max_character_length~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~This function will return a collection of strings given an input ~string~ and ~max_character_length~. The collection of strings returned will split the input string into strings of ~length <= max_character_length~.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~The following example takes a string with new lines and creates a label for each one. Labels (~args.outputs.labels~) ignore newline characters ~\n~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The following example takes a string with new lines and creates a label for each one. Labels (~args.outputs.labels~) ignore newline characters ~\n~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ long_string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.~ ** Processing line: ~Integer dolor velit, ultricies vitae libero vel, aliquam imperdiet enim."~ ** Processing line: ~ max_character_length = 30~ ** Processing line: ~ long_strings_split = args.string.wrapped_lines long_string, max_character_length~ ** Processing line: ~ args.outputs.labels << long_strings_split.map_with_index do |s, i|~ ** Processing line: ~ { x: 10, y: 600 - (i * 20), text: s }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~** ~args.grid~~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.grid~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.grid~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the virtual grid for the game.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the virtual grid for the game.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.name~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.name~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.name~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns either ~:origin_bottom_left~ or ~:origin_center~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns either ~:origin_bottom_left~ or ~:origin_center~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.bottom~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.bottom~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.bottom~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the ~y~ value that represents the bottom of the grid.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the ~y~ value that represents the bottom of the grid.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.top~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.top~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.top~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the ~y~ value that represents the top of the grid.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the ~y~ value that represents the top of the grid.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.left~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.left~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.left~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the ~x~ value that represents the left of the grid.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the ~x~ value that represents the left of the grid.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.right~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.right~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the ~x~ value that represents the right of the grid.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the ~x~ value that represents the right of the grid.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.rect~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.rect~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.rect~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a rectangle Primitive that represents the grid.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a rectangle Primitive that represents the grid.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.origin_bottom_left!~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.origin_bottom_left!~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.origin_bottom_left!~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Change the grids coordinate system to 0, 0 at the bottom left corner.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Change the grids coordinate system to 0, 0 at the bottom left corner.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.origin_center!~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.origin_center!~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.origin_center!~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Change the grids coordinate system to 0, 0 at the center of the screen.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Change the grids coordinate system to 0, 0 at the center of the screen.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.w~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.w~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.w~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the grid's width (always 1280).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the grid's width (always 1280).~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.h~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.h~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.h~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the grid's height (always 720).~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the grid's height (always 720).~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~** ~args.gtk~~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.gtk~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~~args.gtk~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~This represents the DragonRuby Game Toolkit's Runtime Environment and can be accessed via ~args.gtk.METHOD~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~This represents the DragonRuby Game Toolkit's Runtime Environment and can be accessed via ~args.gtk.METHOD~.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.argv~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.argv~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.argv~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a ~String~ that represents the parameters passed into the ~./dragonruby~ binary.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a ~String~ that represents the parameters passed into the ~./dragonruby~ binary.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.platform~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.platform~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.platform~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a ~String~ representing the operating system the game is running on.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a ~String~ representing the operating system the game is running on.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.request_quit~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.request_quit~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.request_quit~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Request that the runtime quit the game.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Request that the runtime quit the game.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.write_file path, contents~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.write_file path, contents~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.write_file path, contents~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Writes/overwrites a file within the game directory + path.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Writes/overwrites a file within the game directory + path.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.write_file_root~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.write_file_root~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.write_file_root~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Writes/overwrites a file within the root dragonruby binary directory + path.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Writes/overwrites a file within the root dragonruby binary directory + path.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.append_file path, contents~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.append_file path, contents~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.append_file path, contents~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Append content to a file located at the game directory + path.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Append content to a file located at the game directory + path.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.append_file_root path, contents~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.append_file_root path, contents~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.append_file_root path, contents~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Append content to a file located at the root dragonruby binary directory + path.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Append content to a file located at the root dragonruby binary directory + path.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.read_file path~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.read_file path~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.read_file path~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Reads a file from the sandboxed file system.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Reads a file from the sandboxed file system.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.parse_xml string, parse_xml_file path~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.parse_xml string, parse_xml_file path~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.parse_xml string, parse_xml_file path~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a ~Hash~ for a ~String~ that represents XML.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a ~Hash~ for a ~String~ that represents XML.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.parse_json string, parse_json_file path~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.parse_json string, parse_json_file path~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.parse_json string, parse_json_file path~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a ~Hash~ for a ~String~ that represents JSON.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a ~Hash~ for a ~String~ that represents JSON.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.http_get url, extra_headers = {}~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.http_get url, extra_headers = {}~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.http_get url, extra_headers = {}~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Creates an async task to perform an HTTP GET.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Creates an async task to perform an HTTP GET.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.http_post url, form_fields = {}, extra_headers = {}~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.http_post url, form_fields = {}, extra_headers = {}~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.http_post url, form_fields = {}, extra_headers = {}~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Creates an async task to perform an HTTP POST.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Creates an async task to perform an HTTP POST.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.reset~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.reset~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.reset~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Resets the game by deleting all data in ~args.state~ and setting ~args.state.tick_count~ back to ~0~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Resets the game by deleting all data in ~args.state~ and setting ~args.state.tick_count~ back to ~0~.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.stop_music~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.stop_music~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.stop_music~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Stops all background music.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Stops all background music.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.calcstringbox str, size_enum, font~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.calcstringbox str, size_enum, font~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.calcstringbox str, size_enum, font~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns a tuple with width and height of a string being rendered.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a tuple with width and height of a string being rendered.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.slowmo! factor~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.slowmo! factor~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.slowmo! factor~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Slows the game down by the factor provided.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Slows the game down by the factor provided.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.notify! string~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.notify! string~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.notify! string~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Renders a toast message at the bottom of the screen.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Renders a toast message at the bottom of the screen.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.system~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.system~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.system~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Invokes a shell command and prints the result to the console.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Invokes a shell command and prints the result to the console.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.exec~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.exec~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.exec~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Invokes a shell command and returns a ~String~ that represents the result.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Invokes a shell command and returns a ~String~ that represents the result.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.save_state~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.save_state~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.save_state~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Saves the game state to ~game_state.txt~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Saves the game state to ~game_state.txt~.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.load_state~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.load_state~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.load_state~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Load ~args.state~ from ~game_state.txt~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Load ~args.state~ from ~game_state.txt~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.serialize_state file, state~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.serialize_state file, state~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.serialize_state file, state~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Saves entity state to a file. If only one parameter is provided a string is returned for state instead of writing to a file.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Saves entity state to a file. If only one parameter is provided a string is returned for state instead of writing to a file.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.deserialize_state file~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.deserialize_state file~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.deserialize_state file~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns entity state from a file or serialization data represented as a ~String~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns entity state from a file or serialization data represented as a ~String~.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.reset_sprite path~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.reset_sprite path~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.reset_sprite path~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Invalids the texture cache of a sprite.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Invalids the texture cache of a sprite.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.show_cursor~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.show_cursor~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.show_cursor~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Shows the mouse cursor.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Shows the mouse cursor.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.hide_cursor~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.hide_cursor~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.hide_cursor~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Hides the mouse cursor.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Hides the mouse cursor.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.set_cursor path, dx, dy~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.set_cursor path, dx, dy~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.set_cursor path, dx, dy~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Sets the system cursor to a sprite ~path~ with an offset of ~dx~ and ~dy~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Sets the system cursor to a sprite ~path~ with an offset of ~dx~ and ~dy~.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.cursor_shown?~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.cursor_shown?~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.cursor_shown?~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns ~true~ if the mouse cursor is shown.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns ~true~ if the mouse cursor is shown.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.set_window_fullscreen enabled~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.set_window_fullscreen enabled~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.set_window_fullscreen enabled~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Sets the game to either fullscreen (~enabled=true~) or windowed (~enabled=false)~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Sets the game to either fullscreen (~enabled=true~) or windowed (~enabled=false)~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~*** ~.openurl url~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.openurl url~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.openurl url~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Opens a url using the Operating System's default browser.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Opens a url using the Operating System's default browser.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.get_base_dir~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.get_base_dir~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.get_base_dir~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the full path of the DragonRuby binary directory.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the full path of the DragonRuby binary directory.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~*** ~.get_game_dir~~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.get_game_dir~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~~.get_game_dir~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns the full path of the game directory in its sandboxed environment.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the full path of the game directory in its sandboxed environment.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::Runtime#reset~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::Runtime#reset~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~This function will reset Kernel.tick_count to 0 and will remove all data from args.state.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~This function will reset Kernel.tick_count to 0 and will remove all data from args.state.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::Runtime#calcstringbox~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::Runtime#calcstringbox~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~This function returns the width and height of a string.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~This function returns the width and height of a string.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.string_size ||= args.gtk.calcstringbox "Hello World"~ ** Processing line: ~ args.state.string_size_font_size ||= args.gtk.calcstringbox "Hello World"~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::Runtime#write_file~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::Runtime#write_file~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~This function takes in two parameters. The first parameter is the file path and assumes the the game directory is the root. The second parameter is the string that will be written. The method overwrites whatever is currently in the file. Use ~GTK::Runtime#append_file~ to append to the file as opposed to overwriting.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~This function takes in two parameters. The first parameter is the file path and assumes the the game directory is the root. The second parameter is the string that will be written. The method overwrites whatever is currently in the file. Use ~GTK::Runtime#append_file~ to append to the file as opposed to overwriting.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ if args.inputs.mouse.click~ ** Processing line: ~ args.gtk.write_file "last-mouse-click.txt", "Mouse was clicked at #{args.state.tick_count}."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::Runtime#benchmark~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::Runtime#benchmark~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~You can use this function to compare the relative performance of methods.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You can use this function to compare the relative performance of methods.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # press r to run benchmark~ ** Processing line: ~ if args.inputs.keyboard.key_down.r~ ** Processing line: ~ args.gtk.console.show~ ** Processing line: ~ args.gtk.benchmark iterations: 1000, # number of iterations~ ** Processing line: ~ # label for experiment~ ** Processing line: ~ using_numeric_map: -> () {~ ** Processing line: ~ # experiment body~ ** Processing line: ~ v = 100.map do |i|~ ** Processing line: ~ i * 100~ ** Processing line: ~ end~ ** Processing line: ~ },~ ** Processing line: ~ # label for experiment~ ** Processing line: ~ using_numeric_times: -> () {~ ** Processing line: ~ # experiment body~ ** Processing line: ~ v = []~ ** Processing line: ~ 100.times do |i|~ ** Processing line: ~ v << i * 100~ ** Processing line: ~ end~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Array~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Array~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~The Array class has been extend to provide methods that will help in common game development tasks. Array is one of the most powerful classes in Ruby and a very fundamental component of Game Toolkit.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The Array class has been extend to provide methods that will help in common game development tasks. Array is one of the most powerful classes in Ruby and a very fundamental component of Game Toolkit.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Array#map~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Array#map~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~The function given a block returns a new ~Enumerable~ of values.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The function given a block returns a new ~Enumerable~ of values.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Example of using ~Array#map~ in conjunction with ~args.state~ and ~args.outputs.sprites~ to render sprites to the screen.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Example of using ~Array#map~ in conjunction with ~args.state~ and ~args.outputs.sprites~ to render sprites to the screen.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # define the colors of the rainbow in ~args.state~~ ** Processing line: ~ # as an ~Array~ of ~Hash~es with :order and :name.~ ** Processing line: ~ # :order will be used to determine render location~ ** Processing line: ~ # and :name will be used to determine sprite path.~ ** Processing line: ~ args.state.rainbow_colors ||= [~ ** Processing line: ~ { order: 0, name: :red },~ ** Processing line: ~ { order: 1, name: :orange },~ ** Processing line: ~ { order: 2, name: :yellow },~ ** Processing line: ~ { order: 3, name: :green },~ ** Processing line: ~ { order: 4, name: :blue },~ ** Processing line: ~ { order: 5, name: :indigo },~ ** Processing line: ~ { order: 6, name: :violet },~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ # render sprites diagonally to the screen~ ** Processing line: ~ # with a width and height of 50.~ ** Processing line: ~ args.outputs~ ** Processing line: ~ .sprites << args.state~ ** Processing line: ~ .rainbow_colors~ ** Processing line: ~ .map do |color| # <-- ~Array#map~ usage~ ** Processing line: ~ [~ ** Processing line: ~ color[:order] * 50,~ ** Processing line: ~ color[:order] * 50,~ ** Processing line: ~ 50,~ ** Processing line: ~ 50,~ ** Processing line: ~ "sprites/square-#{color[:name]}.png"~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Array#each~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Array#each~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~The function, given a block, invokes the block for each item in the ~Array~. ~Array#each~ is synonymous to foreach constructs in other languages.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The function, given a block, invokes the block for each item in the ~Array~. ~Array#each~ is synonymous to foreach constructs in other languages.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~Example of using ~Array#each~ in conjunction with ~args.state~ and ~args.outputs.sprites~ to render sprites to the screen:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Example of using ~Array#each~ in conjunction with ~args.state~ and ~args.outputs.sprites~ to render sprites to the screen:~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # define the colors of the rainbow in ~args.state~~ ** Processing line: ~ # as an ~Array~ of ~Hash~es with :order and :name.~ ** Processing line: ~ # :order will be used to determine render location~ ** Processing line: ~ # and :name will be used to determine sprite path.~ ** Processing line: ~ args.state.rainbow_colors ||= [~ ** Processing line: ~ { order: 0, name: :red },~ ** Processing line: ~ { order: 1, name: :orange },~ ** Processing line: ~ { order: 2, name: :yellow },~ ** Processing line: ~ { order: 3, name: :green },~ ** Processing line: ~ { order: 4, name: :blue },~ ** Processing line: ~ { order: 5, name: :indigo },~ ** Processing line: ~ { order: 6, name: :violet },~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ # render sprites diagonally to the screen~ ** Processing line: ~ # with a width and height of 50.~ ** Processing line: ~ args.state~ ** Processing line: ~ .rainbow_colors~ ** Processing line: ~ .map do |color| # <-- ~Array#each~ usage~ ** Processing line: ~ args.outputs.sprites << [~ ** Processing line: ~ color[:order] * 50,~ ** Processing line: ~ color[:order] * 50,~ ** Processing line: ~ 50,~ ** Processing line: ~ 50,~ ** Processing line: ~ "sprites/square-#{color[:name]}.png"~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Array#reject_nil~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Array#reject_nil~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Returns an ~Enumerable~ rejecting items that are ~nil~, this is an alias for ~Array#compact~:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns an ~Enumerable~ rejecting items that are ~nil~, this is an alias for ~Array#compact~:~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ repl do~ ** Processing line: ~ a = [1, nil, 4, false, :a]~ ** Processing line: ~ puts a.reject_nil~ ** Processing line: ~ # => [1, 4, false, :a]~ ** Processing line: ~ puts a.compact~ ** Processing line: ~ # => [1, 4, false, :a]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Array#reject_false~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Array#reject_false~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Returns an `Enumerable` rejecting items that are `nil` or `false`.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns an `Enumerable` rejecting items that are `nil` or `false`.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ repl do~ ** Processing line: ~ a = [1, nil, 4, false, :a]~ ** Processing line: ~ puts a.reject_false~ ** Processing line: ~ # => [1, 4, :a]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Array#product~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Array#product~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Returns all combinations of values between two arrays.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns all combinations of values between two arrays.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Here are some examples of using ~product~. Paste the following code at the bottom of main.rb and save the file to see the results:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Here are some examples of using ~product~. Paste the following code at the bottom of main.rb and save the file to see the results:~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ repl do~ ** Processing line: ~ a = [0, 1]~ ** Processing line: ~ puts a.product~ ** Processing line: ~ # => [[0, 0], [0, 1], [1, 0], [1, 1]]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ repl do~ ** Processing line: ~ a = [ 0, 1]~ ** Processing line: ~ b = [:a, :b]~ ** Processing line: ~ puts a.product b~ ** Processing line: ~ # => [[0, :a], [0, :b], [1, :a], [1, :b]]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Array#map_2d~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Array#map_2d~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Assuming the array is an array of arrays, Given a block, each 2D array index invoked against the block. A 2D array is a common way to store data/layout for a stage.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Assuming the array is an array of arrays, Given a block, each 2D array index invoked against the block. A 2D array is a common way to store data/layout for a stage.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ repl do~ ** Processing line: ~ stage = [~ ** Processing line: ~ [:enemy, :empty, :player],~ ** Processing line: ~ [:empty, :empty, :empty],~ ** Processing line: ~ [:enemy, :empty, :enemy],~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ occupied_tiles = stage.map_2d do |row, col, tile|~ ** Processing line: ~ if tile == :empty~ ** Processing line: ~ nil~ ** Processing line: ~ else~ ** Processing line: ~ [row, col, tile]~ ** Processing line: ~ end~ ** Processing line: ~ end.reject_nil~ ** Processing line: ~~ ** Processing line: ~ puts "Stage:"~ ** Processing line: ~ puts stage~ ** Processing line: ~~ ** Processing line: ~ puts "Occupied Tiles"~ ** Processing line: ~ puts occupied_tiles~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Array#include_any?~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Array#include_any?~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Given a collection of items, the function will return ~true~ if any of ~self~'s items exists in the collection of items passed in:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Given a collection of items, the function will return ~true~ if any of ~self~'s items exists in the collection of items passed in:~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Array#any_intersect_rect?~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Array#any_intersect_rect?~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Assuming the array contains objects that respond to ~left~, ~right~, ~top~, ~bottom~, this method returns ~true~ if any of the elements within the array intersect the object being passed in. You are given an optional parameter called ~tolerance~ which informs how close to the other rectangles the elements need to be for it to be considered intersecting.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Assuming the array contains objects that respond to ~left~, ~right~, ~top~, ~bottom~, this method returns ~true~ if any of the elements within the array intersect the object being passed in. You are given an optional parameter called ~tolerance~ which informs how close to the other rectangles the elements need to be for it to be considered intersecting.~ - Line's tilde count is: 12 - Line contains link marker: false - CODE detected. ** Processing line: ~The default tolerance is set to ~0.1~, which means that the primitives are not considered intersecting unless they are overlapping by more than ~0.1~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The default tolerance is set to ~0.1~, which means that the primitives are not considered intersecting unless they are overlapping by more than ~0.1~.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ repl do~ ** Processing line: ~ # Here is a player class that has position and implement~ ** Processing line: ~ # the ~attr_rect~ contract.~ ** Processing line: ~ class Player~ ** Processing line: ~ attr_rect~ ** Processing line: ~ attr_accessor :x, :y, :w, :h~ ** Processing line: ~~ ** Processing line: ~ def initialize x, y, w, h~ ** Processing line: ~ @x = x~ ** Processing line: ~ @y = y~ ** Processing line: ~ @w = w~ ** Processing line: ~ @h = h~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ { x: @x, y: @y, w: @w, h: @h }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inspect~ ** Processing line: ~ "#{serialize}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ "#{serialize}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Here is a definition of two walls.~ ** Processing line: ~ walls = [~ ** Processing line: ~ [10, 10, 10, 10],~ ** Processing line: ~ { x: 20, y: 20, w: 10, h: 10 },~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ # Display the walls.~ ** Processing line: ~ puts "Walls."~ ** Processing line: ~ puts walls~ ** Processing line: ~ puts ""~ ** Processing line: ~~ ** Processing line: ~ # Check any_intersect_rect? on player~ ** Processing line: ~ player = Player.new 30, 20, 10, 10~ ** Processing line: ~ puts "Is Player #{player} touching wall?"~ ** Processing line: ~ puts (walls.any_intersect_rect? player)~ ** Processing line: ~ # => false~ ** Processing line: ~ # The value is false because of the default tolerance is 0.1.~ ** Processing line: ~ # The overlap of the player rect and any of the wall rects is~ ** Processing line: ~ # less than 0.1 (for those that intersect).~ ** Processing line: ~ puts ""~ ** Processing line: ~~ ** Processing line: ~ player = Player.new 9, 10, 10, 10~ ** Processing line: ~ puts "Is Player #{player} touching wall?"~ ** Processing line: ~ puts (walls.any_intersect_rect? player)~ ** Processing line: ~ # => true~ ** Processing line: ~ puts ""~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::Args#audio~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::Args#audio~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Hash that contains audio sources that are playing. If you want to add a new sound add a hash with keys/values as in the following example:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Hash that contains audio sources that are playing. If you want to add a new sound add a hash with keys/values as in the following example:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # The values below (except for input of course) are the default values that apply if you don't~ ** Processing line: ~ # specify the value in the hash.~ ** Processing line: ~ args.audio[:my_audio] = {~ ** Processing line: ~ input: 'sound/boom.wav', # Filename~ ** Processing line: ~ x: 0.0, y: 0.0, z: 0.0, # Relative position to the listener, x, y, z from -1.0 to 1.0~ ** Processing line: ~ gain: 1.0, # Volume (0.0 to 1.0)~ ** Processing line: ~ pitch: 1.0, # Pitch of the sound (1.0 = original pitch)~ ** Processing line: ~ paused: false, # Set to true to pause the sound at the current playback position~ ** Processing line: ~ looping: false, # Set to true to loop the sound/music until you stop it~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~Sounds that don't specify ~looping: true~ will be removed automatically from the hash after the playback ends. Looping sounds or sounds that should stop early must be removed manually.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Sounds that don't specify ~looping: true~ will be removed automatically from the hash after the playback ends. Looping sounds or sounds that should stop early must be removed manually.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~** Audio synthesis (Pro only)~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Audio synthesis (Pro only)~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Audio synthesis (Pro only)~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Instead of a path to an audio file you can specify an array ~[channels, sample_rate, sound_source]~ for ~input~ to procedurally generate sound. You do this by providing an array of float values between -1.0 and 1.0 that describe the waveform you want to play.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Instead of a path to an audio file you can specify an array ~[channels, sample_rate, sound_source]~ for ~input~ to procedurally generate sound. You do this by providing an array of float values between -1.0 and 1.0 that describe the waveform you want to play.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~- ~channels~ is the number of channels: 1 = mono, 2 = stereo~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~channels~ is the number of channels: 1 = mono, 2 = stereo~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~sample_rate~ is the number of values per seconds you will provide to describe the audio wave~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~sample_rate~ is the number of values per seconds you will provide to describe the audio wave~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~sound_source~ The source of your sound. See below~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~sound_source~ The source of your sound. See below~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~*** Sound source~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Sound source~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Sound source~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~A sound source can be one of two things:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~A sound source can be one of two things:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~- A ~Proc~ object that is called on demand to generate the next samples to play. Every call should generate enough samples for at least 0.1 to 0.5 seconds to get continuous playback without audio skips. The audio will continue playing endlessly until removed, so the ~looping~ option will have no effect.~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~A ~Proc~ object that is called on demand to generate the next samples to play. Every call should generate enough samples for at least 0.1 to 0.5 seconds to get continuous playback without audio skips. The audio will continue playing endlessly until removed, so the ~looping~ option will have no effect.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~- An array of sample values that will be played back once. This is useful for procedurally generated one-off SFX. ~looping~ will work as expected~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~An array of sample values that will be played back once. This is useful for procedurally generated one-off SFX. ~looping~ will work as expected~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~When you specify 2 for ~channels~, then the generated sample array will be played back in an interleaved manner. The first element is the first sample for the left channel, the second element is the first sample for the right channel, the third element is the second sample for the left channel etc.~ - UL end detected. - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~When you specify 2 for ~channels~, then the generated sample array will be played back in an interleaved manner. The first element is the first sample for the left channel, the second element is the first sample for the right channel, the third element is the second sample for the left channel etc.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~*** Example:~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Example:~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Example:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ sample_rate = 48000~ ** Processing line: ~~ ** Processing line: ~ generate_sine_wave = lambda do~ ** Processing line: ~ frequency = 440.0 # A5~ ** Processing line: ~ samples_per_period = (sample_rate / frequency).ceil~ ** Processing line: ~ one_period = samples_per_period.map_with_index { |i|~ ** Processing line: ~ Math.sin((2 * Math::PI) * (i / samples_per_period))~ ** Processing line: ~ }~ ** Processing line: ~ one_period * frequency # Generate 1 second worth of sound~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.audio[:my_audio] ||= {~ ** Processing line: ~ input: [1, sample_rate, generate_sine_wave]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::Outputs~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::Outputs~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Outputs is how you render primitives to the screen. The minimal setup for rendering something to the screen is via a ~tick~ method defined in mygame/app/main.rb~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Outputs is how you render primitives to the screen. The minimal setup for rendering something to the screen is via a ~tick~ method defined in mygame/app/main.rb~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # code goes here~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::Outputs#solids~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::Outputs#solids~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Add primitives to this collection to render a solid to the screen.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Add primitives to this collection to render a solid to the screen.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Rendering a solid using an Array~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a solid using an Array~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a solid using an Array~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Creates a solid black rectangle located at 100, 100. 160 pixels wide and 90 pixels tall.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Creates a solid black rectangle located at 100, 100. 160 pixels wide and 90 pixels tall.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # X Y WIDTH HEIGHT~ ** Processing line: ~ args.outputs.solids << [100, 100, 160, 90]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** Rendering a solid using an Array with colors and alpha~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a solid using an Array with colors and alpha~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a solid using an Array with colors and alpha~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~The value for the color and alpha is a number between ~0~ and ~255~. The alpha property is optional and will be set to ~255~ if not specified.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The value for the color and alpha is a number between ~0~ and ~255~. The alpha property is optional and will be set to ~255~ if not specified.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~Creates a green solid rectangle with an opacity of 50%.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Creates a green solid rectangle with an opacity of 50%.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # X Y WIDTH HEIGHT RED GREEN BLUE ALPHA~ ** Processing line: ~ args.outputs.solids << [100, 100, 160, 90, 0, 255, 0, 128]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** Rendering a solid using a Hash~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a solid using a Hash~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a solid using a Hash~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~If you want a more readable invocation. You can use the following hash to create a solid. Any parameters that are not specified will be given a default value. The keys of the hash can be provided in any order.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~If you want a more readable invocation. You can use the following hash to create a solid. Any parameters that are not specified will be given a default value. The keys of the hash can be provided in any order.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.solids << {~ ** Processing line: ~ x: 0,~ ** Processing line: ~ y: 0,~ ** Processing line: ~ w: 100,~ ** Processing line: ~ h: 100,~ ** Processing line: ~ r: 0,~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 0,~ ** Processing line: ~ a: 255~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** Rendering a solid using a Class~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a solid using a Class~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a solid using a Class~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~You can also create a class with solid/border properties and render it as a primitive. ALL properties must be on the class. *Additionally*, a method called ~primitive_marker~ must be defined on the class.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You can also create a class with solid/border properties and render it as a primitive. ALL properties must be on the class. *Additionally*, a method called ~primitive_marker~ must be defined on the class.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Here is an example:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Here is an example:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ # Create type with ALL solid properties AND primitive_marker~ ** Processing line: ~ class Solid~ ** Processing line: ~ attr_accessor :x, :y, :w, :h, :r, :g, :b, :a~ ** Processing line: ~~ ** Processing line: ~ def primitive_marker~ ** Processing line: ~ :solid~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Inherit from type~ ** Processing line: ~ class Square < Solid~ ** Processing line: ~ # constructor~ ** Processing line: ~ def initialize x, y, size~ ** Processing line: ~ self.x = x~ ** Processing line: ~ self.y = y~ ** Processing line: ~ self.w = size~ ** Processing line: ~ self.h = size~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ # render solid/border~ ** Processing line: ~ args.outputs.solids << Square.new(10, 10, 32)~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::Outputs#borders~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::Outputs#borders~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Add primitives to this collection to render an unfilled solid to the screen. Take a look at the documentation for Outputs#solids.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Add primitives to this collection to render an unfilled solid to the screen. Take a look at the documentation for Outputs#solids.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~The only difference between the two primitives is where they are added.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The only difference between the two primitives is where they are added.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Instead of using ~args.outputs.solids~:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Instead of using ~args.outputs.solids~:~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # X Y WIDTH HEIGHT~ ** Processing line: ~ args.outputs.solids << [100, 100, 160, 90]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~You have to use ~args.outputs.borders~:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You have to use ~args.outputs.borders~:~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # X Y WIDTH HEIGHT~ ** Processing line: ~ args.outputs.borders << [100, 100, 160, 90]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::Outputs#sprites~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::Outputs#sprites~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Add primitives to this collection to render a sprite to the screen.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Add primitives to this collection to render a sprite to the screen.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~** Rendering a sprite using an Array~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a sprite using an Array~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a sprite using an Array~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~Creates a sprite of a white circle located at 100, 100. 160 pixels wide and 90 pixels tall.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Creates a sprite of a white circle located at 100, 100. 160 pixels wide and 90 pixels tall.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # X Y WIDTH HEIGHT PATH~ ** Processing line: ~ args.outputs.sprites << [100, 100, 160, 90, "sprites/circle/white.png]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** Rendering a sprite using an Array with colors and alpha~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a sprite using an Array with colors and alpha~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a sprite using an Array with colors and alpha~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~The value for the color and alpha is a number between ~0~ and ~255~. The alpha property is optional and will be set to ~255~ if not specified.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The value for the color and alpha is a number between ~0~ and ~255~. The alpha property is optional and will be set to ~255~ if not specified.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~Creates a green circle sprite with an opacity of 50%.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Creates a green circle sprite with an opacity of 50%.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # X Y WIDTH HEIGHT PATH ANGLE ALPHA RED GREEN BLUE~ ** Processing line: ~ args.outputs.sprites << [100, 100, 160, 90, "sprites/circle/white.png", 0, 128, 0, 255, 0]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** Rendering a sprite using a Hash~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a sprite using a Hash~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a sprite using a Hash~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~If you want a more readable invocation. You can use the following hash to create a sprite. Any parameters that are not specified will be given a default value. The keys of the hash can be provided in any order.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~If you want a more readable invocation. You can use the following hash to create a sprite. Any parameters that are not specified will be given a default value. The keys of the hash can be provided in any order.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.sprites << {~ ** Processing line: ~ x: 0,~ ** Processing line: ~ y: 0,~ ** Processing line: ~ w: 100,~ ** Processing line: ~ h: 100,~ ** Processing line: ~ path: "sprites/circle/white.png",~ ** Processing line: ~ angle: 0,~ ** Processing line: ~ a: 255,~ ** Processing line: ~ r: 0,~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 0~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** Rendering a solid using a Class~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a solid using a Class~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Rendering a solid using a Class~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~You can also create a class with solid/border properties and render it as a primitive. ALL properties must be on the class. *Additionally*, a method called ~primitive_marker~ must be defined on the class.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~You can also create a class with solid/border properties and render it as a primitive. ALL properties must be on the class. *Additionally*, a method called ~primitive_marker~ must be defined on the class.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Here is an example:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Here is an example:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ # Create type with ALL sprite properties AND primitive_marker~ ** Processing line: ~ class Sprite~ ** Processing line: ~ attr_accessor :x, :y, :w, :h, :path, :angle, :angle_anchor_x, :angle_anchor_y, :tile_x, :tile_y, :tile_w, :tile_h, :source_x, :source_y, :source_w, :source_h, :flip_horizontally, :flip_vertically, :a, :r, :g, :b~ ** Processing line: ~~ ** Processing line: ~ def primitive_marker~ ** Processing line: ~ :sprite~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Inherit from type~ ** Processing line: ~ class Circle < Sprite~ ** Processing line: ~ # constructor~ ** Processing line: ~ def initialize x, y, size, path~ ** Processing line: ~ self.x = x~ ** Processing line: ~ self.y = y~ ** Processing line: ~ self.w = size~ ** Processing line: ~ self.h = size~ ** Processing line: ~ self.path = path~ ** Processing line: ~ end~ ** Processing line: ~ def serlialize~ ** Processing line: ~ {x:self.x, y:self.y, w:self.w, h:self.h, path:self.path}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inspect~ ** Processing line: ~ serlialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ serlialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ def tick args~ ** Processing line: ~ # render circle sprite~ ** Processing line: ~ args.outputs.sprites << Circle.new(10, 10, 32,"sprites/circle/white.png")~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::Outputs#screenshots~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::Outputs#screenshots~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Add a hash to this collection to take a screenshot and save as png file. The keys of the hash can be provided in any order.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Add a hash to this collection to take a screenshot and save as png file. The keys of the hash can be provided in any order.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.screenshots << {~ ** Processing line: ~ x: 0, y: 0, w: 100, h: 100, # Which portion of the screen should be captured~ ** Processing line: ~ path: 'screenshot.png', # Output path of PNG file (inside game directory)~ ** Processing line: ~ r: 255, g: 255, b: 255, a: 0 # Optional chroma key~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** Chroma key (Making a color transparent)~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Chroma key (Making a color transparent)~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Chroma key (Making a color transparent)~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~By specifying the r, g, b and a keys of the hash you change the transparency of a color in the resulting PNG file. This can be useful if you want to create files with transparent background like spritesheets. The transparency of the color specified by ~r~, ~g~, ~b~ will be set to the transparency specified by ~a~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~By specifying the r, g, b and a keys of the hash you change the transparency of a color in the resulting PNG file. This can be useful if you want to create files with transparent background like spritesheets. The transparency of the color specified by ~r~, ~g~, ~b~ will be set to the transparency specified by ~a~.~ - Line's tilde count is: 8 - Line contains link marker: false - CODE detected. ** Processing line: ~The example above sets the color white (255, 255, 255) as transparent.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The example above sets the color white (255, 255, 255) as transparent.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::Mouse~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::Mouse~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~The mouse is accessible via ~args.inputs.mouse~:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The mouse is accessible via ~args.inputs.mouse~:~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # Rendering a label that shows the mouse's x and y position (via args.inputs.mouse).~ ** Processing line: ~ args.outputs.labels << [~ ** Processing line: ~ 10,~ ** Processing line: ~ 710,~ ** Processing line: ~ "The mouse's position is: #{args.inputs.mouse.x} #{args.inputs.mouse.y}."~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~The mouse has the following properties.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The mouse has the following properties.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~- ~args.inputs.mouse.x~: Returns the x position of the mouse.~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.x~: Returns the x position of the mouse.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~args.inputs.mouse.y~: Returns the y position of the mouse.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.y~: Returns the y position of the mouse.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~args.inputs.mouse.moved~: Returns true if the mouse moved during the tick.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.moved~: Returns true if the mouse moved during the tick.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~args.inputs.mouse.moved_at~: Returns the tick_count (~args.state.tick_count~) that the mouse was moved at. This property will be ~nil~ if the mouse didn't move.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.moved_at~: Returns the tick_count (~args.state.tick_count~) that the mouse was moved at. This property will be ~nil~ if the mouse didn't move.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~args.inputs.mouse.global_moved_at~: Returns the global tick_count (~Kernel.global_tick_count~) that the mouse was moved at. This property will be ~nil~ if the mouse didn't move.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.global_moved_at~: Returns the global tick_count (~Kernel.global_tick_count~) that the mouse was moved at. This property will be ~nil~ if the mouse didn't move.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~args.inputs.mouse.click~: Returns a ~GTK::MousePoint~ for that specific frame (~args.state.tick_count~) if the mouse button was pressed.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.click~: Returns a ~GTK::MousePoint~ for that specific frame (~args.state.tick_count~) if the mouse button was pressed.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~args.inputs.mouse.previous_click~: Returns a ~GTK::MousePoint~ for the previous frame (~args.state.tick_count - 1~) if the mouse button was pressed.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.previous_click~: Returns a ~GTK::MousePoint~ for the previous frame (~args.state.tick_count - 1~) if the mouse button was pressed.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~args.inputs.mouse.up~: Returns true if for that specific frame (~args.state.tick_count~) if the mouse button was released.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.up~: Returns true if for that specific frame (~args.state.tick_count~) if the mouse button was released.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~args.inputs.mouse.point~ | ~args.inputs.mouse.position~: Returns an ~Array~ which contains the ~x~ and ~y~ position of the mouse.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.point~ | ~args.inputs.mouse.position~: Returns an ~Array~ which contains the ~x~ and ~y~ position of the mouse.~ - Line's tilde count is: 10 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~args.inputs.mouse.has_focus~: Returns true if the game window has the mouse's focus.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.has_focus~: Returns true if the game window has the mouse's focus.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~args.inputs.mouse.wheel~: Returns an ~GTK::OpenEntity~ that contains an ~x~ and ~y~ property which represents how much the wheel has moved. If the wheel has not moved within the tick, this property will be ~nil~.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.wheel~: Returns an ~GTK::OpenEntity~ that contains an ~x~ and ~y~ property which represents how much the wheel has moved. If the wheel has not moved within the tick, this property will be ~nil~.~ - Line's tilde count is: 10 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~args.inputs.mouse.button_left~: Returns true if the left mouse button is down.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.button_left~: Returns true if the left mouse button is down.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~args.inputs.mouse.button_right~: Returns true if the right mouse button is down.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.button_right~: Returns true if the right mouse button is down.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~args.inputs.mouse.button_middle~: Returns true if the middle mouse button is down.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.button_middle~: Returns true if the middle mouse button is down.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~args.inputs.mouse.button_bits~: Gives the bits for each mouse button and its current state.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~args.inputs.mouse.button_bits~: Gives the bits for each mouse button and its current state.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::MousePoint~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::MousePoint~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~The ~GTK::MousePoint~ has the following properties.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The ~GTK::MousePoint~ has the following properties.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~- ~x~: Integer representing the mouse's x.~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~x~: Integer representing the mouse's x.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~y~: Integer representing the mouse's y.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~y~: Integer representing the mouse's y.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~point~: Array with the ~x~ and ~y~ values.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~point~: Array with the ~x~ and ~y~ values.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~w~: Width of the point that always returns ~0~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~w~: Width of the point that always returns ~0~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~h~: Height of the point that always returns ~0~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~h~: Height of the point that always returns ~0~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~left~: This value is the same as ~x~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~left~: This value is the same as ~x~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~right~: This value is the same as ~x~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~right~: This value is the same as ~x~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~top~: This value is the same as ~y~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~top~: This value is the same as ~y~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~bottom~: This value is the same as ~y~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~bottom~: This value is the same as ~y~ (included so that it can seamlessly work with ~GTK::Geometry~ functions).~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~created_at~: The tick (~args.state.tick_count~) that this structure was created.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~created_at~: The tick (~args.state.tick_count~) that this structure was created.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~- ~global_created_at~: The global tick (~Kernel.global_tick_count~) that this structure was created.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~global_created_at~: The global tick (~Kernel.global_tick_count~) that this structure was created.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::OpenEntity~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::OpenEntity~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~~GTK::OpenEntity~ is accessible within the DragonRuby's top level ~tick~ function via the ~args.state~ property.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~GTK::OpenEntity~ is accessible within the DragonRuby's top level ~tick~ function via the ~args.state~ property.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.x ||= 100~ ** Processing line: ~ args.outputs.labels << [10, 710, "value of x is: #{args.state.x}."]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~The primary benefit of using ~args.state~ as opposed to instance variables is that ~GTK::OpenEntity~ allows for arbitrary nesting of properties without the need to create intermediate objects.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The primary benefit of using ~args.state~ as opposed to instance variables is that ~GTK::OpenEntity~ allows for arbitrary nesting of properties without the need to create intermediate objects.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~For example:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~For example:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # intermediate player object does not need to be created~ ** Processing line: ~ args.state.player.x ||= 100~ ** Processing line: ~ args.state.player.y ||= 100~ ** Processing line: ~ args.outputs.labels << [~ ** Processing line: ~ 10,~ ** Processing line: ~ 710,~ ** Processing line: ~ "player x, y is:#{args.state.player.x}, #{args.state.player.y}."~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::OpenEntity#as_hash~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::OpenEntity#as_hash~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Returns a reference to the ~GTK::OpenEntity~ as a ~Hash~. This property is useful when you want to treat ~args.state~ as a ~Hash~ and invoke methods such as ~Hash#each~.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns a reference to the ~GTK::OpenEntity~ as a ~Hash~. This property is useful when you want to treat ~args.state~ as a ~Hash~ and invoke methods such as ~Hash#each~.~ - Line's tilde count is: 10 - Line contains link marker: false - CODE detected. ** Processing line: ~Example:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Example:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.x ||= 100~ ** Processing line: ~ args.state.y ||= 100~ ** Processing line: ~ values = args.state~ ** Processing line: ~ .as_hash~ ** Processing line: ~ .map { |k, v| "#{k} #{v}" }~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << values.map.with_index do |v, i|~ ** Processing line: ~ [~ ** Processing line: ~ 10,~ ** Processing line: ~ 710 - (30 * i),~ ** Processing line: ~ v~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Numeric#frame_index~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Numeric#frame_index~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~This function is helpful for determining the index of frame-by-frame sprite animation. The numeric value ~self~ represents the moment the animation started.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~This function is helpful for determining the index of frame-by-frame sprite animation. The numeric value ~self~ represents the moment the animation started.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~frame_index~ takes three additional parameters:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~frame_index~ takes three additional parameters:~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~- How many frames exist in the sprite animation.~ - UL start detected. - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~How many frames exist in the sprite animation.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- How long to hold each animation for.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~How long to hold each animation for.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~- Whether the animation should repeat.~ - LI detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Whether the animation should repeat.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~frame_index~ will return ~nil~ if the time for the animation is out of bounds of the parameter specification.~ - UL end detected. - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~frame_index~ will return ~nil~ if the time for the animation is out of bounds of the parameter specification.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~Example using variables:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Example using variables:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ start_looping_at = 0~ ** Processing line: ~ number_of_sprites = 6~ ** Processing line: ~ number_of_frames_to_show_each_sprite = 4~ ** Processing line: ~ does_sprite_loop = true~ ** Processing line: ~~ ** Processing line: ~ sprite_index =~ ** Processing line: ~ start_looping_at.frame_index number_of_sprites,~ ** Processing line: ~ number_of_frames_to_show_each_sprite,~ ** Processing line: ~ does_sprite_loop~ ** Processing line: ~~ ** Processing line: ~ sprite_index ||= 0~ ** Processing line: ~~ ** Processing line: ~ args.outputs.sprites << [~ ** Processing line: ~ 640 - 50,~ ** Processing line: ~ 360 - 50,~ ** Processing line: ~ 100,~ ** Processing line: ~ 100,~ ** Processing line: ~ "sprites/dragon-#{sprite_index}.png"~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~Example using named parameters:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Example using named parameters:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ start_looping_at = 0~ ** Processing line: ~~ ** Processing line: ~ sprite_index =~ ** Processing line: ~ start_looping_at.frame_index count: 6,~ ** Processing line: ~ hold_for: 4,~ ** Processing line: ~ repeat: true,~ ** Processing line: ~ tick_count_override: args.state.tick_count~ ** Processing line: ~~ ** Processing line: ~ sprite_index ||= 0~ ** Processing line: ~~ ** Processing line: ~ args.outputs.sprites << [~ ** Processing line: ~ 640 - 50,~ ** Processing line: ~ 360 - 50,~ ** Processing line: ~ 100,~ ** Processing line: ~ 100,~ ** Processing line: ~ "sprites/dragon-#{sprite_index}.png"~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Numeric#elapsed_time~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Numeric#elapsed_time~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~For a given number, the elapsed frames since that number is returned. `Kernel.tick_count` is used to determine how many frames have elapsed. An optional numeric argument can be passed in which will be used instead of `Kernel.tick_count`.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~For a given number, the elapsed frames since that number is returned. `Kernel.tick_count` is used to determine how many frames have elapsed. An optional numeric argument can be passed in which will be used instead of `Kernel.tick_count`.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Here is an example of how elapsed_time can be used.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Here is an example of how elapsed_time can be used.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.last_click_at ||= 0~ ** Processing line: ~~ ** Processing line: ~ # record when a mouse click occurs~ ** Processing line: ~ if args.inputs.mouse.click~ ** Processing line: ~ args.state.last_click_at = args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Use Numeric#elapsed_time to determine how long it's been~ ** Processing line: ~ if args.state.last_click_at.elapsed_time > 120~ ** Processing line: ~ args.outputs.labels << [10, 710, "It has been over 2 seconds since the mouse was clicked."]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~And here is an example where the override parameter is passed in:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~And here is an example where the override parameter is passed in:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.last_click_at ||= 0~ ** Processing line: ~~ ** Processing line: ~ # create a state variable that tracks time at half the speed of args.state.tick_count~ ** Processing line: ~ args.state.simulation_tick = args.state.tick_count.idiv 2~ ** Processing line: ~~ ** Processing line: ~ # record when a mouse click occurs~ ** Processing line: ~ if args.inputs.mouse.click~ ** Processing line: ~ args.state.last_click_at = args.state.simulation_tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Use Numeric#elapsed_time to determine how long it's been~ ** Processing line: ~ if (args.state.last_click_at.elapsed_time args.state.simulation_tick) > 120~ ** Processing line: ~ args.outputs.labels << [10, 710, "It has been over 4 seconds since the mouse was clicked."]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Numeric#elapsed?~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Numeric#elapsed?~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns true if ~Numeric#elapsed_time~ is greater than the number. An optional parameter can be passed into ~elapsed?~ which is added to the number before evaluating whether ~elapsed?~ is true.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns true if ~Numeric#elapsed_time~ is greater than the number. An optional parameter can be passed into ~elapsed?~ which is added to the number before evaluating whether ~elapsed?~ is true.~ - Line's tilde count is: 6 - Line contains link marker: false - CODE detected. ** Processing line: ~Example usage (no optional parameter):~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Example usage (no optional parameter):~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.box_queue ||= []~ ** Processing line: ~~ ** Processing line: ~ if args.state.box_queue.empty?~ ** Processing line: ~ args.state.box_queue << { name: :red,~ ** Processing line: ~ destroy_at: args.state.tick_count + 60 }~ ** Processing line: ~ args.state.box_queue << { name: :green,~ ** Processing line: ~ destroy_at: args.state.tick_count + 60 }~ ** Processing line: ~ args.state.box_queue << { name: :blue,~ ** Processing line: ~ destroy_at: args.state.tick_count + 120 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ boxes_to_destroy = args.state~ ** Processing line: ~ .box_queue~ ** Processing line: ~ .find_all { |b| b[:destroy_at].elapsed? }~ ** Processing line: ~~ ** Processing line: ~ if !boxes_to_destroy.empty?~ ** Processing line: ~ puts "boxes to destroy count: #{boxes_to_destroy.length}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ boxes_to_destroy.each { |b| puts "box #{b} was elapsed? on #{args.state.tick_count}." }~ ** Processing line: ~~ ** Processing line: ~ args.state.box_queue -= boxes_to_destroy~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~Example usage (with optional parameter):~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Example usage (with optional parameter):~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.box_queue ||= []~ ** Processing line: ~~ ** Processing line: ~ if args.state.box_queue.empty?~ ** Processing line: ~ args.state.box_queue << { name: :red,~ ** Processing line: ~ create_at: args.state.tick_count + 120,~ ** Processing line: ~ lifespan: 60 }~ ** Processing line: ~ args.state.box_queue << { name: :green,~ ** Processing line: ~ create_at: args.state.tick_count + 120,~ ** Processing line: ~ lifespan: 60 }~ ** Processing line: ~ args.state.box_queue << { name: :blue,~ ** Processing line: ~ create_at: args.state.tick_count + 120,~ ** Processing line: ~ lifespan: 120 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # lifespan is passed in as a parameter to ~elapsed?~~ ** Processing line: ~ boxes_to_destroy = args.state~ ** Processing line: ~ .box_queue~ ** Processing line: ~ .find_all { |b| b[:create_at].elapsed? b[:lifespan] }~ ** Processing line: ~~ ** Processing line: ~ if !boxes_to_destroy.empty?~ ** Processing line: ~ puts "boxes to destroy count: #{boxes_to_destroy.length}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ boxes_to_destroy.each { |b| puts "box #{b} was elapsed? on #{args.state.tick_count}." }~ ** Processing line: ~~ ** Processing line: ~ args.state.box_queue -= boxes_to_destroy~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Numeric#created?~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Numeric#created?~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Returns true if ~Numeric#elapsed_time == 0~. Essentially communicating that number is equal to the current frame.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns true if ~Numeric#elapsed_time == 0~. Essentially communicating that number is equal to the current frame.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~Example usage:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Example usage:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.box_queue ||= []~ ** Processing line: ~~ ** Processing line: ~ if args.state.box_queue.empty?~ ** Processing line: ~ args.state.box_queue << { name: :red,~ ** Processing line: ~ create_at: args.state.tick_count + 60 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ boxes_to_spawn_this_frame = args.state~ ** Processing line: ~ .box_queue~ ** Processing line: ~ .find_all { |b| b[:create_at].new? }~ ** Processing line: ~~ ** Processing line: ~ boxes_to_spawn_this_frame.each { |b| puts "box #{b} was new? on #{args.state.tick_count}." }~ ** Processing line: ~~ ** Processing line: ~ args.state.box_queue -= boxes_to_spawn_this_frame~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Kernel~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Kernel~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Kernel in the DragonRuby Runtime has patches for how standard out is handled and also contains a unit of time in games called a tick.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Kernel in the DragonRuby Runtime has patches for how standard out is handled and also contains a unit of time in games called a tick.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Kernel::tick_count~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Kernel::tick_count~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Returns the current tick of the game. This value is reset if you call $gtk.reset.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the current tick of the game. This value is reset if you call $gtk.reset.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Kernel::global_tick_count~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Kernel::global_tick_count~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Returns the current tick of the application from the point it was started. This value is never reset.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Returns the current tick of the application from the point it was started. This value is never reset.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~Geometry~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~Geometry~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~The Geometry module contains methods for calculations that are frequently used in game development.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The Geometry module contains methods for calculations that are frequently used in game development.~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* DOCS: ~GTK::Geometry#scale_rect~~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~DOCS: ~GTK::Geometry#scale_rect~~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~Given an array with 4 elements representing a rect [x, y, w, h], this function returns a scaled rect. It accepts three arguments:~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Given an array with 4 elements representing a rect [x, y, w, h], this function returns a scaled rect. It accepts three arguments:~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ratio~: the ratio by which to scale the rect. A ratio of 2 will double the dimensions of the rect while a ratio of 0.5 will halve its dimensions.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~ratio~: the ratio by which to scale the rect. A ratio of 2 will double the dimensions of the rect while a ratio of 0.5 will halve its dimensions.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~anchor_x~ and ~anchor_y~ specify the point within the rect from which to resize it. Setting both to 0 will affect the width and height of the rect, leaving x and y unchanged. Setting both to 0.5 will scale all sides of the rect proportionally from the center.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~~anchor_x~ and ~anchor_y~ specify the point within the rect from which to resize it. Setting both to 0 will affect the width and height of the rect, leaving x and y unchanged. Setting both to 0.5 will scale all sides of the rect proportionally from the center.~ - Line's tilde count is: 4 - Line contains link marker: false - CODE detected. ** Processing line: ~The ~scale_rect~ method can be applied directly to a sprite or other primitives. See CHEATSHEET: How to Scale a Sprite.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~The ~scale_rect~ method can be applied directly to a sprite or other primitives. See CHEATSHEET: How to Scale a Sprite.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ def tick args~ ** Processing line: ~ # x, y, w, h~ ** Processing line: ~ my_rect = [100, 100, 200, 200]~ ** Processing line: ~~ ** Processing line: ~ # halve the dimensions of the rect:~ ** Processing line: ~ # ratio, anchor_x, anchor_y~ ** Processing line: ~ new_rect = my_rect.scale_rect(0.5, 0.5, 0.5)~ ** Processing line: ~~ ** Processing line: ~ puts new_rect # => [150.0, 150.0, 100.0, 100.0]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~* Source Code~ - H1 detected. - Determining if line is a header. - Line contains ~* ~... gsub-ing empty string - Formatting line: ~Source Code~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Follows is a source code listing for all files that have been open sourced. This code can be found in the ~./samples~ directory.~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Follows is a source code listing for all files that have been open sourced. This code can be found in the ~./samples~ directory.~ - Line's tilde count is: 2 - Line contains link marker: false - CODE detected. ** Processing line: ~** Samples~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Samples~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~Samples~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~*** Learn Ruby Optional - Beginner Ruby Primer - automation.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Beginner Ruby Primer - automation.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Beginner Ruby Primer - automation.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_beginner_ruby_primer/app/automation.rb~ ** Processing line: ~ # ==========================================================================~ ** Processing line: ~ # _ _ ________ __ _ _____ _____ _______ ______ _ _ _ _ _ _~ ** Processing line: ~ # | | | | ____\ \ / / | | |_ _|/ ____|__ __| ____| \ | | | | | |~ ** Processing line: ~ # | |__| | |__ \ \_/ / | | | | | (___ | | | |__ | \| | | | | |~ ** Processing line: ~ # | __ | __| \ / | | | | \___ \ | | | __| | . ` | | | | |~ ** Processing line: ~ # | | | | |____ | | | |____ _| |_ ____) | | | | |____| |\ |_|_|_|_|~ ** Processing line: ~ # |_| |_|______| |_| |______|_____|_____/ |_| |______|_| \_(_|_|_|_)~ ** Processing line: ~ #~ ** Processing line: ~ #~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # \ | /~ ** Processing line: ~ # \ | /~ ** Processing line: ~ # +~ ** Processing line: ~ #~ ** Processing line: ~ # If you are new to the programming language Ruby, then you may find the~ ** Processing line: ~ # following code a bit overwhelming. Come back to this file when you have~ ** Processing line: ~ # a better grasp of Ruby and Game Toolkit.~ ** Processing line: ~ #~ ** Processing line: ~ # What follows is an automations script # that can be run via terminal:~ ** Processing line: ~ # ./samples/00_beginner_ruby_primer $ ../../dragonruby . --eval app/automation.rb~ ** Processing line: ~ # ==========================================================================~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ $gtk.scheduled_callbacks.clear~ ** Processing line: ~ $gtk.schedule_callback 10 do~ ** Processing line: ~ $gtk.console.set_command 'puts "Hello DragonRuby!"'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 20 do~ ** Processing line: ~ $gtk.console.eval_the_set_command~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 30 do~ ** Processing line: ~ $gtk.console.set_command 'outputs.solids << [910, 200, 100, 100, 255, 0, 0]'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 40 do~ ** Processing line: ~ $gtk.console.eval_the_set_command~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 50 do~ ** Processing line: ~ $gtk.console.set_command 'outputs.solids << [1010, 200, 100, 100, 0, 0, 255]'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 60 do~ ** Processing line: ~ $gtk.console.eval_the_set_command~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 70 do~ ** Processing line: ~ $gtk.console.set_command 'outputs.sprites << [1110, 200, 100, 100, "sprites/dragon_fly_0.png"]'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 80 do~ ** Processing line: ~ $gtk.console.eval_the_set_command~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 90 do~ ** Processing line: ~ $gtk.console.set_command "outputs.labels << [1210, 200, state.tick_count, 0, 255, 0]"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 100 do~ ** Processing line: ~ $gtk.console.eval_the_set_command~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 110 do~ ** Processing line: ~ $gtk.console.set_command "state.sprite_frame = state.tick_count.idiv(4).mod(6)"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 120 do~ ** Processing line: ~ $gtk.console.eval_the_set_command~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 130 do~ ** Processing line: ~ $gtk.console.set_command "outputs.labels << [1210, 170, state.sprite_frame, 0, 255, 0]"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 140 do~ ** Processing line: ~ $gtk.console.eval_the_set_command~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 150 do~ ** Processing line: ~ $gtk.console.set_command "state.sprite_path = \"sprites/dragon_fly_\#{state.sprite_frame}.png\""~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 160 do~ ** Processing line: ~ $gtk.console.eval_the_set_command~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 170 do~ ** Processing line: ~ $gtk.console.set_command "outputs.labels << [910, 330, \"path: \#{state.sprite_path}\", 0, 255, 0]"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 180 do~ ** Processing line: ~ $gtk.console.eval_the_set_command~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 190 do~ ** Processing line: ~ $gtk.console.set_command "outputs.sprites << [910, 330, 370, 370, state.sprite_path]"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 200 do~ ** Processing line: ~ $gtk.console.eval_the_set_command~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 300 do~ ** Processing line: ~ $gtk.console.set_command ":wq"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.schedule_callback 400 do~ ** Processing line: ~ $gtk.console.eval_the_set_command~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Learn Ruby Optional - Beginner Ruby Primer - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Beginner Ruby Primer - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Beginner Ruby Primer - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_beginner_ruby_primer/app/main.rb~ ** Processing line: ~ # ==========================================================================~ ** Processing line: ~ # _ _ ________ __ _ _____ _____ _______ ______ _ _ _ _ _ _~ ** Processing line: ~ # | | | | ____\ \ / / | | |_ _|/ ____|__ __| ____| \ | | | | | |~ ** Processing line: ~ # | |__| | |__ \ \_/ / | | | | | (___ | | | |__ | \| | | | | |~ ** Processing line: ~ # | __ | __| \ / | | | | \___ \ | | | __| | . ` | | | | |~ ** Processing line: ~ # | | | | |____ | | | |____ _| |_ ____) | | | | |____| |\ |_|_|_|_|~ ** Processing line: ~ # |_| |_|______| |_| |______|_____|_____/ |_| |______|_| \_(_|_|_|_)~ ** Processing line: ~ #~ ** Processing line: ~ #~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # |~ ** Processing line: ~ # \ | /~ ** Processing line: ~ # \ | /~ ** Processing line: ~ # +~ ** Processing line: ~ #~ ** Processing line: ~ # If you are new to the programming language Ruby, then you may find the~ ** Processing line: ~ # following code a bit overwhelming. This sample is only designed to be~ ** Processing line: ~ # run interactively (as opposed to being manipulated via source code).~ ** Processing line: ~ #~ ** Processing line: ~ # Start up this sample and follow along by visiting:~ ** Processing line: ~ # https://s3.amazonaws.com/s3.dragonruby.org/dragonruby-gtk-primer.mp4~ ** Processing line: ~ #~ ** Processing line: ~ # It is STRONGLY recommended that you work through all the samples before~ ** Processing line: ~ # looking at the code in this file.~ ** Processing line: ~ # ==========================================================================~ ** Processing line: ~~ ** Processing line: ~ class TutorialOutputs~ ** Processing line: ~ attr_accessor :solids, :sprites, :labels, :lines, :borders~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @solids = []~ ** Processing line: ~ @sprites = []~ ** Processing line: ~ @labels = []~ ** Processing line: ~ @lines = []~ ** Processing line: ~ @borders = []~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ @solids ||= []~ ** Processing line: ~ @sprites ||= []~ ** Processing line: ~ @labels ||= []~ ** Processing line: ~ @lines ||= []~ ** Processing line: ~ @borders ||= []~ ** Processing line: ~ @solids.each { |p| $gtk.args.outputs.reserved << p.solid }~ ** Processing line: ~ @sprites.each { |p| $gtk.args.outputs.reserved << p.sprite }~ ** Processing line: ~ @labels.each { |p| $gtk.args.outputs.reserved << p.label }~ ** Processing line: ~ @lines.each { |p| $gtk.args.outputs.reserved << p.line }~ ** Processing line: ~ @borders.each { |p| $gtk.args.outputs.reserved << p.border }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def clear~ ** Processing line: ~ @solids.clear~ ** Processing line: ~ @sprites.clear~ ** Processing line: ~ @labels.clear~ ** Processing line: ~ @borders.clear~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ state.reset_button ||=~ ** Processing line: ~ state.new_entity(~ ** Processing line: ~ :button,~ ** Processing line: ~ label: [1190, 68, "RESTART", -2, 0, 0, 0, 0].label,~ ** Processing line: ~ background: [1160, 38, 120, 50, 255, 255, 255].solid~ ** Processing line: ~ )~ ** Processing line: ~ $gtk.log_level = :off~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_reset_button~ ** Processing line: ~ return unless state.hello_dragonruby_confirmed~ ** Processing line: ~ $gtk.args.outputs.reserved << state.reset_button.background~ ** Processing line: ~ $gtk.args.outputs.reserved << state.reset_button.label~ ** Processing line: ~ if inputs.mouse.click && inputs.mouse.click.point.inside_rect?(state.reset_button.background)~ ** Processing line: ~ restart_tutorial~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def seperator~ ** Processing line: ~ @seperator = "=" * 80~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_intro~ ** Processing line: ~ queue_message "Welcome to the DragonRuby GTK primer! Try typing the~ ** Processing line: ~ code below and press ENTER:~ ** Processing line: ~~ ** Processing line: ~ puts \"Hello DragonRuby!\"~ ** Processing line: ~ "~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_hello_dragonruby~ ** Processing line: ~ return unless console_has? "Hello DragonRuby!"~ ** Processing line: ~~ ** Processing line: ~ $gtk.args.state.hello_dragonruby_confirmed = true~ ** Processing line: ~~ ** Processing line: ~ queue_message "Well HELLO to you too!~ ** Processing line: ~~ ** Processing line: ~ If you ever want to RESTART the tutorial, just click the \"RESTART\"~ ** Processing line: ~ button in the bottom right-hand corner.~ ** Processing line: ~~ ** Processing line: ~ Let's continue shall we? Type the code below and press ENTER:~ ** Processing line: ~~ ** Processing line: ~ outputs.solids << [910, 200, 100, 100, 255, 0, 0]~ ** Processing line: ~ "~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_explain_solid~ ** Processing line: ~ return unless $tutorial_outputs.solids.any? {|s| s == [910, 200, 100, 100, 255, 0, 0]}~ ** Processing line: ~~ ** Processing line: ~ queue_message "Sweet!~ ** Processing line: ~~ ** Processing line: ~ The code: outputs.solids << [910, 200, 100, 100, 255, 0, 0]~ ** Processing line: ~ Does the following:~ ** Processing line: ~ 1. GET the place where SOLIDS go: outputs.solids~ ** Processing line: ~ 2. Request that a new SOLID be ADDED: <<~ ** Processing line: ~ 3. The DEFINITION of a SOLID is the ARRAY:~ ** Processing line: ~ [910, 200, 100, 100, 255, 0, 0]~ ** Processing line: ~~ ** Processing line: ~ GET ADD X Y WIDTH HEIGHT RED GREEN BLUE~ ** Processing line: ~ | | | | | | | | |~ ** Processing line: ~ | | | | | | | | |~ ** Processing line: ~ outputs.solids << [910, 200, 100, 100, 255, 0, 0]~ ** Processing line: ~ |_________________________________________|~ ** Processing line: ~ |~ ** Processing line: ~ |~ ** Processing line: ~ ARRAY~ ** Processing line: ~~ ** Processing line: ~ Now let's create a blue SOLID. Type:~ ** Processing line: ~~ ** Processing line: ~ outputs.solids << [1010, 200, 100, 100, 0, 0, 255]~ ** Processing line: ~ "~ ** Processing line: ~~ ** Processing line: ~ state.explain_solid_confirmed = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_explain_solid_blue~ ** Processing line: ~ return unless state.explain_solid_confirmed~ ** Processing line: ~ return unless $tutorial_outputs.solids.any? {|s| s == [1010, 200, 100, 100, 0, 0, 255]}~ ** Processing line: ~ state.explain_solid_blue_confirmed = true~ ** Processing line: ~~ ** Processing line: ~ queue_message "And there is our blue SOLID!~ ** Processing line: ~~ ** Processing line: ~ The ARRAY is the MOST important thing in DragonRuby GTK.~ ** Processing line: ~~ ** Processing line: ~ Let's create a SPRITE using an ARRAY:~ ** Processing line: ~~ ** Processing line: ~ outputs.sprites << [1110, 200, 100, 100, 'sprites/dragon_fly_0.png']~ ** Processing line: ~ "~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_explain_tick_count~ ** Processing line: ~ return unless $tutorial_outputs.sprites.any? {|s| s == [1110, 200, 100, 100, 'sprites/dragon_fly_0.png']}~ ** Processing line: ~ return if $tutorial_outputs.labels.any? {|l| l == [1210, 200, state.tick_count, 255, 255, 255]}~ ** Processing line: ~ state.explain_tick_count_confirmed = true~ ** Processing line: ~~ ** Processing line: ~ queue_message "Look at the cute little dragon!~ ** Processing line: ~~ ** Processing line: ~ We can create a LABEL with ARRAYS too. Let's create a LABEL showing~ ** Processing line: ~ THE PASSAGE OF TIME, which is called TICK_COUNT.~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [1210, 200, state.tick_count, 0, 255, 0]~ ** Processing line: ~ "~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_explain_mod~ ** Processing line: ~ return unless $tutorial_outputs.labels.any? {|l| l == [1210, 200, state.tick_count, 0, 255, 0]}~ ** Processing line: ~ state.explain_mod_confirmed = true~ ** Processing line: ~ queue_message "~ ** Processing line: ~ The code: outputs.labels << [1210, 200, state.tick_count, 0, 255, 0]~ ** Processing line: ~ Does the following:~ ** Processing line: ~ 1. GET the place where labels go: outputs.labels~ ** Processing line: ~ 2. Request that a new label be ADDED: <<~ ** Processing line: ~ 3. The DEFINITION of a LABEL is the ARRAY:~ ** Processing line: ~ [1210, 200, state.tick_count, 0, 255, 0]~ ** Processing line: ~~ ** Processing line: ~ GET ADD X Y TEXT RED GREEN BLUE~ ** Processing line: ~ | | | | | | | |~ ** Processing line: ~ | | | | | | | |~ ** Processing line: ~ outputs.labels << [1210, 200, state.tick_count, 0, 255, 0]~ ** Processing line: ~ |______________________________________________|~ ** Processing line: ~ |~ ** Processing line: ~ |~ ** Processing line: ~ ARRAY~ ** Processing line: ~~ ** Processing line: ~ Now let's do some MATH, save the result to STATE, and create a LABEL:~ ** Processing line: ~~ ** Processing line: ~ state.sprite_frame = state.tick_count.idiv(4).mod(6)~ ** Processing line: ~ outputs.labels << [1210, 170, state.sprite_frame, 0, 255, 0]~ ** Processing line: ~~ ** Processing line: ~ Type the lines above (pressing ENTER after each line).~ ** Processing line: ~ "~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_explain_string_interpolation~ ** Processing line: ~ return unless state.explain_mod_confirmed~ ** Processing line: ~ return unless state.sprite_frame == state.tick_count.idiv(4).mod(6)~ ** Processing line: ~ return unless $tutorial_outputs.labels.any? {|l| l == [1210, 170, state.sprite_frame, 0, 255, 0]}~ ** Processing line: ~~ ** Processing line: ~ queue_message "Here is what the mathematical computation you just typed does:~ ** Processing line: ~~ ** Processing line: ~ 1. Create an item of STATE named SPRITE_FRAME: state.sprite_frame =~ ** Processing line: ~ 2. Set this SPRITE_FRAME to the PASSAGE OF TIME (tick_count),~ ** Processing line: ~ DIVIDED EVENLY (idiv) into 4,~ ** Processing line: ~ and then compute the REMAINDER (mod) of 6.~ ** Processing line: ~~ ** Processing line: ~ STATE SPRITE_FRAME PASSAGE OF HOW LONG HOW MANY~ ** Processing line: ~ | | TIME TO SHOW IMAGES~ ** Processing line: ~ | | | AN IMAGE TO FLIP THROUGH~ ** Processing line: ~ | | | | |~ ** Processing line: ~ state.sprite_frame = state.tick_count.idiv(4).mod(6)~ ** Processing line: ~ | |~ ** Processing line: ~ | +- REMAINDER OF DIVIDE~ ** Processing line: ~ DIVIDE EVENLY~ ** Processing line: ~ (NO DECIMALS)~ ** Processing line: ~~ ** Processing line: ~ With the information above, we can animate a SPRITE~ ** Processing line: ~ using STRING INTERPOLATION: \#{}~ ** Processing line: ~ which creates a unique SPRITE_PATH:~ ** Processing line: ~~ ** Processing line: ~ state.sprite_path = \"sprites/dragon_fly_\#{state.sprite_frame}.png\"~ ** Processing line: ~ outputs.labels << [910, 330, \"path: \#{state.sprite_path}\", 0, 255, 0]~ ** Processing line: ~ outputs.sprites << [910, 330, 370, 370, state.sprite_path]~ ** Processing line: ~~ ** Processing line: ~ Type the lines above (pressing ENTER after each line).~ ** Processing line: ~ "~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_reprint_on_error~ ** Processing line: ~ return unless console.last_command_errored~ ** Processing line: ~ puts $gtk.state.messages.last~ ** Processing line: ~ puts "\nWhoops! Try again."~ ** Processing line: ~ console.last_command_errored = false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_evals~ ** Processing line: ~ state.evals ||= []~ ** Processing line: ~ if console.last_command && (console.last_command.start_with?("outputs.") || console.last_command.start_with?("state."))~ ** Processing line: ~ state.evals << console.last_command~ ** Processing line: ~ console.last_command = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.evals.each do |l|~ ** Processing line: ~ Kernel.eval l~ ** Processing line: ~ end~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ state.evals = state.evals[0..-2]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $tutorial_outputs ||= TutorialOutputs.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $gtk.log_level = :off~ ** Processing line: ~ defaults~ ** Processing line: ~ console.show~ ** Processing line: ~ $tutorial_outputs.clear~ ** Processing line: ~ $tutorial_outputs.solids << [900, 37, 480, 700, 0, 0, 0, 255]~ ** Processing line: ~ $tutorial_outputs.borders << [900, 37, 380, 683, 255, 255, 255]~ ** Processing line: ~ tick_evals~ ** Processing line: ~ $tutorial_outputs.tick~ ** Processing line: ~ tick_intro~ ** Processing line: ~ tick_hello_dragonruby~ ** Processing line: ~ tick_reset_button~ ** Processing line: ~ tick_explain_solid~ ** Processing line: ~ tick_explain_solid_blue~ ** Processing line: ~ tick_reprint_on_error~ ** Processing line: ~ tick_explain_tick_count~ ** Processing line: ~ tick_explain_mod~ ** Processing line: ~ tick_explain_string_interpolation~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def console~ ** Processing line: ~ $gtk.console~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def queue_message message~ ** Processing line: ~ $gtk.args.state.messages ||= []~ ** Processing line: ~ return if $gtk.args.state.messages.include? message~ ** Processing line: ~ $gtk.args.state.messages << message~ ** Processing line: ~ last_three = [$gtk.console.log[-3], $gtk.console.log[-2], $gtk.console.log[-1]].reject_nil~ ** Processing line: ~ $gtk.console.log.clear~ ** Processing line: ~ puts seperator~ ** Processing line: ~ $gtk.console.log += last_three~ ** Processing line: ~ puts seperator~ ** Processing line: ~ puts message~ ** Processing line: ~ puts seperator~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def console_has? message~ ** Processing line: ~ console.log.map(&:upcase).include? "#{message.upcase}\n"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def restart_tutorial~ ** Processing line: ~ $tutorial_outputs.clear~ ** Processing line: ~ $gtk.console.log.clear~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ puts "Starting the tutorial over!"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def state~ ** Processing line: ~ $gtk.args.state~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inputs~ ** Processing line: ~ $gtk.args.inputs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def outputs~ ** Processing line: ~ $tutorial_outputs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - printing.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - printing.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - printing.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/01_printing.txt~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Commenting Code~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ #~ ** Processing line: ~ # Prefixing text with a pound sign (#) is how you comment code in Ruby. Example:~ ** Processing line: ~ #~ ** Processing line: ~ # I am commented code. And so are the lines above.~ ** Processing line: ~ #~ ** Processing line: ~ # I you want more than a quick primer on Ruby, check out https://poignant.guide/. It's~ ** Processing line: ~ # an entertaining read. Otherwise, go to the next txt file.~ ** Processing line: ~ #~ ** Processing line: ~ # Follow along by visiting:~ ** Processing line: ~ # https://s3.amazonaws.com/s3.dragonruby.org/dragonruby-gtk-intermediate.mp4~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Printing to the Console:~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ #~ ** Processing line: ~ # Every time you save repl.rb file, DragonRuby runs the code within it. Copy this text~ ** Processing line: ~ # to repl.rb and save to see Hello World printed to the console.~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts '* RUBY PRIMER: Printing to the console using the ~puts~ function.'~ ** Processing line: ~ puts '===='~ ** Processing line: ~ puts '======'~ ** Processing line: ~ puts '================================'~ ** Processing line: ~ puts 'Hello World'~ ** Processing line: ~ puts '================================'~ ** Processing line: ~ puts '======'~ ** Processing line: ~ puts '===='~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - strings.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - strings.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - strings.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/02_strings.txt~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Strings~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ #~ ** Processing line: ~ # Here is how you work with strings in Ruby. Take the text~ ** Processing line: ~ # in this file and paste it into repl.rb and save:~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts '* RUBY PRIMER: strings'~ ** Processing line: ~ message = "Hello World"~ ** Processing line: ~ puts "The value of message is: " + message~ ** Processing line: ~ puts "Any value can be interpolated within a string using \#{}."~ ** Processing line: ~ puts "Interpolated message: #{message}."~ ** Processing line: ~ puts 'This #{message} is not interpolated because the string uses single quotes.'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - numbers.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - numbers.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - numbers.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/03_numbers.txt~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Numerics~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ #~ ** Processing line: ~ # Here is how you work with numbers in Ruby. Take the text~ ** Processing line: ~ # in this file and paste it into repl.rb and save:~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts '* RUBY PRIMER: Fixnum and Floats'~ ** Processing line: ~ a = 10~ ** Processing line: ~ puts "The value of a is: #{a}"~ ** Processing line: ~ puts "a + 1 is: #{a + 1}"~ ** Processing line: ~ puts "a / 3 is: #{a / 3}"~ ** Processing line: ~ puts ''~ ** Processing line: ~~ ** Processing line: ~ b = 10.12~ ** Processing line: ~ puts "The value of b is: #{b}"~ ** Processing line: ~ puts "b + 1 is: #{b + 1}"~ ** Processing line: ~ puts "b as an integer is: #{b.to_i}"~ ** Processing line: ~ puts ''~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - booleans.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - booleans.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - booleans.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/04_booleans.txt~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Booleans~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ #~ ** Processing line: ~ # Here is how you work with numbers in Ruby. Take the text~ ** Processing line: ~ # in this file and paste it into repl.rb and save:~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts '* RUBY PRIMER: TrueClass, FalseClass, NilClass (truthy / falsey values)'~ ** Processing line: ~ puts "Anything that *isn't* false or nil is true."~ ** Processing line: ~~ ** Processing line: ~ c = 30~ ** Processing line: ~ puts "The value of c is #{c}."~ ** Processing line: ~~ ** Processing line: ~ if c~ ** Processing line: ~ puts "This if statement ran because c is truthy."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ d = false~ ** Processing line: ~ puts "The value if d is #{d}. The type for d is #{d.class}."~ ** Processing line: ~~ ** Processing line: ~ if !d~ ** Processing line: ~ puts "This if statement ran because d is falsey, using the not operator (!)."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ e = nil~ ** Processing line: ~ puts "Nil is also considered falsey. The value of e is: #{e} (a blank string when printed). Which is of type #{e.class}."~ ** Processing line: ~~ ** Processing line: ~ if !e~ ** Processing line: ~ puts "This if statement ran because e is nil and the if statement applied the NOT operator. !e yields a type of #{(!e).class}."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - conditionals.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - conditionals.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - conditionals.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/05_conditionals.txt~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Conditionals~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ #~ ** Processing line: ~ # Here is how you create conditionals in Ruby. Take the text~ ** Processing line: ~ # in this file and paste it into repl.rb and save:~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "* RUBY PRIMER: Conditionals"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # if~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: if statement"~ ** Processing line: ~ i_am_one = 1~ ** Processing line: ~ if i_am_one~ ** Processing line: ~ puts "This was printed because i_am_one is truthy."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # if/else~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: if/else statement"~ ** Processing line: ~ i_am_false = false~ ** Processing line: ~ if i_am_false~ ** Processing line: ~ puts "This will NOT get printed because i_am_false is false."~ ** Processing line: ~ else~ ** Processing line: ~ puts "This was printed because i_am_false is false."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # if/elsif/else~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: if/elsif/else statement"~ ** Processing line: ~ i_am_false = false~ ** Processing line: ~ i_am_true = true~ ** Processing line: ~ if i_am_false~ ** Processing line: ~ puts "This will NOT get printed because i_am_false is false."~ ** Processing line: ~ elsif i_am_true~ ** Processing line: ~ puts "This was printed because i_am_true is true."~ ** Processing line: ~ else~ ** Processing line: ~ puts "This will NOT get printed i_am_true was true."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # case~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO case statement"~ ** Processing line: ~ i_am_one = 1 # change this value to see different results~ ** Processing line: ~~ ** Processing line: ~ case i_am_one~ ** Processing line: ~ when 10~ ** Processing line: ~ puts "the value of i_am_one is 10"~ ** Processing line: ~ when 9~ ** Processing line: ~ puts "the value of i_am_one is 9"~ ** Processing line: ~ when 5~ ** Processing line: ~ puts "the value of i_am_one is 5"~ ** Processing line: ~ when 1~ ** Processing line: ~ puts "the value of i_am_one is 1"~ ** Processing line: ~ else~ ** Processing line: ~ puts "Value wasn't cased."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # comparison operators~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: Different types of comparisons"~ ** Processing line: ~ if 4 == 4~ ** Processing line: ~ puts "4 equals 4 (==)"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if 4 != 3~ ** Processing line: ~ puts "4 does not equal 3 (!=)"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if 3 < 4~ ** Processing line: ~ puts "3 is less than 4 (<)"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if 4 > 3~ ** Processing line: ~ puts "4 is greater than 3 (>)"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # and/or conditionals~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: AND, OR operator (&&, ||)"~ ** Processing line: ~ if (4 > 3) || (3 < 4) || false~ ** Processing line: ~ puts "print this if 4 is greater than 3 OR 3 is less than 4 OR false is true (||)"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if (4 > 3) && (3 < 4)~ ** Processing line: ~ puts "print this if 4 is greater than 3 AND 3 is less than 4 (&&)"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - looping.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - looping.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - looping.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/06_looping.txt~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Looping~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ #~ ** Processing line: ~ # Looping looks a whole lot different than other languages.~ ** Processing line: ~ # But it's pretty awesome when you get used to it.~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "* RUBY PRIMER: Loops"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # times~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: ~Numeric#times~ (for loop)"~ ** Processing line: ~ 3.times do |i|~ ** Processing line: ~ puts i~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # foreach~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: ~Array#each~ (for each loop)"~ ** Processing line: ~ array = ["a", "b", "c", "d"]~ ** Processing line: ~ array.each do |char|~ ** Processing line: ~ puts char~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ puts "** INFO: ~Array#each_with_index~ (for each loop)"~ ** Processing line: ~ array = ["a", "b", "c", "d"]~ ** Processing line: ~ array.each do |char, i|~ ** Processing line: ~ puts "index #{i}: #{char}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # ranges~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: range block exclusive (three dots)"~ ** Processing line: ~ (0...3).each do |i|~ ** Processing line: ~ puts i~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ puts "** INFO: range block inclusive (two dots)"~ ** Processing line: ~ (0..3).each do |i|~ ** Processing line: ~ puts i~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - functions.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - functions.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - functions.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/07_functions.txt~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Functions~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ # The last statement of a function is implictly returned. Parenthesis for functions~ ** Processing line: ~ # are optional as long as the statement can be envaluated disambiguously.~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "* RUBY PRIMER: Functions"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Functions single parameter~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "* INFO: Function with one parameter"~ ** Processing line: ~~ ** Processing line: ~ # function definition~ ** Processing line: ~ def add_one_to n~ ** Processing line: ~ n + 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Parenthesis are optional in Ruby as long as the~ ** Processing line: ~ # parsing is disambiguous. Here are a couple of variations.~ ** Processing line: ~ # Generally speaking, don't put parenthesis is you don't have to.~ ** Processing line: ~~ ** Processing line: ~ # Conventional Usage of Parenthesis.~ ** Processing line: ~ puts add_one_to(3)~ ** Processing line: ~~ ** Processing line: ~ # DragonRuby's recommended use of parenthesis (inner function has parenthesis).~ ** Processing line: ~ puts (add_one_to 3)~ ** Processing line: ~~ ** Processing line: ~ # Full parens.~ ** Processing line: ~ puts(add_one_to(3))~ ** Processing line: ~~ ** Processing line: ~ # Outer function has parenthesis~ ** Processing line: ~ puts(add_one_to 3)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Functions with default parameter values~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "* INFO: Function with default value"~ ** Processing line: ~ def function_with_default_value v = 10~ ** Processing line: ~ v * 10~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ puts "Passing the argument three yields: #{function_with_default_value 3}"~ ** Processing line: ~ puts "Passing no argument yields: #{function_with_default_value}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Nil default parameter value and ||= operator.~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "* INFO: Using the OR EQUAL operator (||=)"~ ** Processing line: ~ def function_with_nil_default_with_local a = nil~ ** Processing line: ~ result = a~ ** Processing line: ~ result ||= "DEFAULT_VALUE_OF_A_IS_NIL_OR_FALSE"~ ** Processing line: ~ "value is #{result}."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ puts "Passing 'hi' as the argument yields: #{function_with_nil_default_with_local 'hi'}"~ ** Processing line: ~ puts "Passing nil: #{function_with_nil_default_with_local}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - arrays.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - arrays.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - arrays.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/08_arrays.txt~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Arrays~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ # Arrays are incredibly powerful in Ruby. Learn to use them well.~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "* RUBY PRIMER: ARRAYS"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Enumerable ranges and .to_a~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: Create an array with the numbers 1 to 10."~ ** Processing line: ~ one_to_ten = (1..10).to_a~ ** Processing line: ~ puts one_to_ten~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Finding elements~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: Finding elements in an array using ~Array#find_all~."~ ** Processing line: ~ puts "Create a new array that only contains even numbers from the previous array."~ ** Processing line: ~~ ** Processing line: ~ one_to_ten = (1..10).to_a~ ** Processing line: ~ evens = one_to_ten.find_all do |number|~ ** Processing line: ~ number % 2 == 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ puts evens~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Rejecting elements~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: Removing elements in an array using ~Array#reject~."~ ** Processing line: ~ puts "Create a new array that rejects odd numbers."~ ** Processing line: ~~ ** Processing line: ~ one_to_ten = (1..10).to_a~ ** Processing line: ~ also_even = one_to_ten.reject do |number|~ ** Processing line: ~ number % 2 != 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ puts also_even~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Array transform using the map function.~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: Creating new derived values from an array using ~Array#map~."~ ** Processing line: ~ puts "Create an array that doubles every number."~ ** Processing line: ~~ ** Processing line: ~ one_to_ten = (1..10).to_a~ ** Processing line: ~ doubled = one_to_ten.map do |number|~ ** Processing line: ~ number * 2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ puts doubled~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Combining array functions.~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: Combining ~Array#find_all~ along with ~Array#map~."~ ** Processing line: ~ puts "Create an array that selects only odd numbers and then multiply those by 10."~ ** Processing line: ~~ ** Processing line: ~ one_to_ten = (1..10).to_a~ ** Processing line: ~ odd_doubled = one_to_ten.find_all do |number|~ ** Processing line: ~ number % 2 != 0~ ** Processing line: ~ end.map do |odd_number|~ ** Processing line: ~ odd_number * 10~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ puts odd_doubled~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Product function.~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: Create all combinations of array values using ~Array#product~."~ ** Processing line: ~ puts "All two-item pairs of numbers 1 to 10."~ ** Processing line: ~ one_to_ten = (1..10).to_a~ ** Processing line: ~ all_combinations = one_to_ten.product(one_to_ten)~ ** Processing line: ~ puts all_combinations~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Uniq and sort function.~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: Providing uniq values using ~Array#uniq~ and ~Array#sort~."~ ** Processing line: ~ puts "All uniq combinations of numbers regardless of order."~ ** Processing line: ~ puts "For example: [1, 2] is the same as [2, 1]."~ ** Processing line: ~ one_to_ten = (1..10).to_a~ ** Processing line: ~ uniq_combinations =~ ** Processing line: ~ one_to_ten.product(one_to_ten)~ ** Processing line: ~ .map do |unsorted_number|~ ** Processing line: ~ unsorted_number.sort~ ** Processing line: ~ end.uniq~ ** Processing line: ~ puts uniq_combinations~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Example of an advanced array transform.~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: Advanced chaining. Combining ~Array's ~map~, ~find_all~, ~sort~, and ~sort_by~."~ ** Processing line: ~ puts "All unique Pythagorean Triples between 1 and 100 sorted by area of the triangle."~ ** Processing line: ~~ ** Processing line: ~ one_to_hundred = (1..100).to_a~ ** Processing line: ~~ ** Processing line: ~ triples =~ ** Processing line: ~ one_to_hundred.product(one_to_hundred).map do |width, height|~ ** Processing line: ~ [width, height, Math.sqrt(width ** 2 + height ** 2)]~ ** Processing line: ~ end.find_all do |_, _, hypotenuse|~ ** Processing line: ~ hypotenuse.to_i == hypotenuse~ ** Processing line: ~ end.map do |triangle|~ ** Processing line: ~ triangle.map(&:to_i)~ ** Processing line: ~ end.uniq do |triangle|~ ** Processing line: ~ triangle.sort~ ** Processing line: ~ end.map do |width, height, hypotenuse|~ ** Processing line: ~ [width, height, hypotenuse, (width * height) / 2]~ ** Processing line: ~ end.sort_by do |_, _, _, area|~ ** Processing line: ~ area~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ triples.each do |width, height, hypotenuse, _|~ ** Processing line: ~ puts "(#{width}, #{height}, #{hypotenuse})"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Example of an sorting.~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~ repl do~ ** Processing line: ~ puts "** INFO: Implementing a custom sort function that operates on the ~Hash~ datatype."~ ** Processing line: ~~ ** Processing line: ~ things_to_sort = [~ ** Processing line: ~ { type: :background, order: 1 },~ ** Processing line: ~ { type: :foreground, order: 1 },~ ** Processing line: ~ { type: :foreground, order: 2 }~ ** Processing line: ~ ]~ ** Processing line: ~ puts "*** Original array."~ ** Processing line: ~ puts things_to_sort~ ** Processing line: ~~ ** Processing line: ~ puts "*** Simple sort using key."~ ** Processing line: ~ # For a simple sort, you can use sort_by~ ** Processing line: ~ results = things_to_sort.sort_by do |hash|~ ** Processing line: ~ hash[:order]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ puts results~ ** Processing line: ~~ ** Processing line: ~ puts "*** Custom sort."~ ** Processing line: ~ puts "**** Sorting process."~ ** Processing line: ~ # for a more complicated sort, you can provide a block that returns~ ** Processing line: ~ # -1, 0, 1 for a left and right operand~ ** Processing line: ~ results = things_to_sort.sort do |l, r|~ ** Processing line: ~ sort_result = 0~ ** Processing line: ~ puts "here is l: #{l}"~ ** Processing line: ~ puts "here is r: #{r || "nil"}"~ ** Processing line: ~ # if either value is nil/false return 0~ ** Processing line: ~ if !l || !r~ ** Processing line: ~ sort_result = 0~ ** Processing line: ~ # if the type of "left" is background and the~ ** Processing line: ~ # type of "right" is foreground, then return~ ** Processing line: ~ # -1 (which means "left" is less than "right"~ ** Processing line: ~ elsif l[:type] == :background && r[:type] == :foreground~ ** Processing line: ~ sort_result = -1~ ** Processing line: ~ # if the type of "left" is foreground and the~ ** Processing line: ~ # type of "right" is background, then return~ ** Processing line: ~ # 1 (which means "left" is greater than "right"~ ** Processing line: ~ elsif l[:type] == :foreground && r[:type] == :background~ ** Processing line: ~ sort_result = 1~ ** Processing line: ~ # if "left" and "right"'s type are the same, then~ ** Processing line: ~ # use the order as the tie breaker~ ** Processing line: ~ elsif l[:order] < r[:order]~ ** Processing line: ~ sort_result = -1~ ** Processing line: ~ elsif l[:order] > r[:order]~ ** Processing line: ~ sort_result = 1~ ** Processing line: ~ # returning 0 means both values are equal~ ** Processing line: ~ else~ ** Processing line: ~ sort_result = 0~ ** Processing line: ~ end~ ** Processing line: ~ sort_result~ ** Processing line: ~ end.to_a~ ** Processing line: ~~ ** Processing line: ~ puts "**** Sort result."~ ** Processing line: ~ puts results~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~ # Api documention for Array that is worth commiting to memory because arrays are so~ ** Processing line: ~ # awesome in Ruby: https://docs.ruby-lang.org/en/2.0.0/Array.html~ ** Processing line: ~ # ====================================================================================~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Learn Ruby Optional - Intermediate Ruby Primer - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.labels << [640, 380, "Open repl.rb in the text editor of your choice and follow the document.", 0, 1]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rendering Basics - Labels - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Basics - Labels - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Basics - Labels - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/01_rendering_basics/01_labels/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in a previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.labels: An array. Values in this array generate labels~ ** Processing line: ~ the screen.~ ** Processing line: ~ - args.grid.(left|right|top|bottom): Pixel value for the boundaries of the virtual~ ** Processing line: ~ 720 p screen (Dragon Ruby Game Toolkits's virtual resolution is always 1280x720).~ ** Processing line: ~ - Numeric#shift_(left|right|up|down): Shifts the Numeric in the correct direction~ ** Processing line: ~ by adding or subracting.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # Labels are used to represent text elements in DragonRuby~ ** Processing line: ~~ ** Processing line: ~ # An example of creating a label is:~ ** Processing line: ~ # args.outputs.labels << [320, 640, "Example", 3, 1, 255, 0, 0, 200, manaspace.ttf]~ ** Processing line: ~~ ** Processing line: ~ # The code above does the following:~ ** Processing line: ~ # 1. GET the place where labels go: args.outputs.labels~ ** Processing line: ~ # 2. Request a new LABEL be ADDED: <<~ ** Processing line: ~ # 3. The DEFINITION of a SOLID is the ARRAY:~ ** Processing line: ~ # [320, 640, "Example", 3, 1, 255, 0, 0, 200, manaspace.ttf]~ ** Processing line: ~ # [ X , Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # The tick method is called by DragonRuby every frame~ ** Processing line: ~ # args contains all the information regarding the game.~ ** Processing line: ~ def tick args~ ** Processing line: ~ tick_instructions args, "Sample app shows different version of label sizes and alignments. And how to use hashes instead of arrays."~ ** Processing line: ~ # Here are some examples of simple labels, with the minimum number of parameters~ ** Processing line: ~ # Note that the default values for the other parameters are 0, except for Alpha which is 255 and Font Style which is the default font~ ** Processing line: ~ args.outputs.labels << [400, 620, "Here is a label with just an x, y, and text"]~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << [args.grid.left.shift_right(5), args.grid.top.shift_down(5), "This is a label located at the top left."]~ ** Processing line: ~ args.outputs.labels << [args.grid.left.shift_right(5), args.grid.bottom.shift_up(30), "This is a label located at the bottom left."]~ ** Processing line: ~ args.outputs.labels << [args.grid.right.shift_left(420), args.grid.top.shift_down(5), "This is a label located at the top right."]~ ** Processing line: ~ args.outputs.labels << [args.grid.right.shift_left(440), args.grid.bottom.shift_up(30), "This is a label located at the bottom right."]~ ** Processing line: ~~ ** Processing line: ~ # Demonstration of the Size Parameter~ ** Processing line: ~ args.outputs.labels << [175 + 150, 610 - 50, "Smaller label.", -2]~ ** Processing line: ~ args.outputs.labels << [175 + 150, 580 - 50, "Small label.", -1]~ ** Processing line: ~ args.outputs.labels << [175 + 150, 550 - 50, "Medium label.", 0]~ ** Processing line: ~ args.outputs.labels << [175 + 150, 520 - 50, "Large label.", 1]~ ** Processing line: ~ args.outputs.labels << [175 + 150, 490 - 50, "Larger label.", 2]~ ** Processing line: ~~ ** Processing line: ~ # Demonstration of the Align Parameter~ ** Processing line: ~ args.outputs.labels << [260 + 150, 345 - 50, "Left aligned.", 0, 2]~ ** Processing line: ~ args.outputs.labels << [260 + 150, 325 - 50, "Center aligned.", 0, 1]~ ** Processing line: ~ args.outputs.labels << [260 + 150, 305 - 50, "Right aligned.", 0, 0]~ ** Processing line: ~~ ** Processing line: ~ # Demonstration of the RGBA parameters~ ** Processing line: ~ args.outputs.labels << [600 + 150, 590 - 50, "Red Label.", 0, 0, 255, 0, 0]~ ** Processing line: ~ args.outputs.labels << [600 + 150, 570 - 50, "Green Label.", 0, 0, 0, 255, 0]~ ** Processing line: ~ args.outputs.labels << [600 + 150, 550 - 50, "Blue Label.", 0, 0, 0, 0, 255]~ ** Processing line: ~ args.outputs.labels << [600 + 150, 530 - 50, "Faded Label.", 0, 0, 0, 0, 0, 128]~ ** Processing line: ~~ ** Processing line: ~ # Demonstration of the Font parameter~ ** Processing line: ~ # In order to use a font of your choice, add its ttf file to the project folder, where the app folder is~ ** Processing line: ~ args.outputs.labels << [690 + 150, 330 - 20, "Custom font (Array)", 0, 1, 125, 0, 200, 255, "manaspc.ttf" ]~ ** Processing line: ~ args.outputs.primitives << { x: 690 + 150,~ ** Processing line: ~ y: 330 - 50,~ ** Processing line: ~ text: "Custom font (Hash)",~ ** Processing line: ~ size_enum: 0,~ ** Processing line: ~ alignment_enum: 1,~ ** Processing line: ~ r: 125,~ ** Processing line: ~ g: 0,~ ** Processing line: ~ b: 200,~ ** Processing line: ~ a: 255,~ ** Processing line: ~ font: "manaspc.ttf" }.label!~ ** Processing line: ~~ ** Processing line: ~ # Primitives can hold anything, and can be given a label in the following forms~ ** Processing line: ~ args.outputs.primitives << [690 + 150, 330 - 80, "Custom font (.primitives Array)", 0, 1, 125, 0, 200, 255, "manaspc.ttf" ].label~ ** Processing line: ~~ ** Processing line: ~ args.outputs.primitives << { x: 690 + 150,~ ** Processing line: ~ y: 330 - 110,~ ** Processing line: ~ text: "Custom font (.primitives Hash)",~ ** Processing line: ~ size_enum: 0,~ ** Processing line: ~ alignment_enum: 1,~ ** Processing line: ~ r: 125,~ ** Processing line: ~ g: 0,~ ** Processing line: ~ b: 200,~ ** Processing line: ~ a: 255,~ ** Processing line: ~ font: "manaspc.ttf" }.label!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rendering Basics - Lines - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Basics - Lines - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Basics - Lines - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/01_rendering_basics/02_lines/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in a previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.lines: An array. Values in this array generate lines on~ ** Processing line: ~ the screen.~ ** Processing line: ~ - args.state.tick_count: This property contains an integer value that~ ** Processing line: ~ represents the current frame. GTK renders at 60 FPS. A value of 0~ ** Processing line: ~ for args.state.tick_count represents the initial load of the game.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # The parameters required for lines are:~ ** Processing line: ~ # 1. The initial point (x, y)~ ** Processing line: ~ # 2. The end point (x2, y2)~ ** Processing line: ~ # 3. The rgba values for the color and transparency (r, g, b, a)~ ** Processing line: ~~ ** Processing line: ~ # An example of creating a line would be:~ ** Processing line: ~ # args.outputs.lines << [100, 100, 300, 300, 255, 0, 255, 255]~ ** Processing line: ~~ ** Processing line: ~ # This would create a line from (100, 100) to (300, 300)~ ** Processing line: ~ # The RGB code (255, 0, 255) would determine its color, a purple~ ** Processing line: ~ # It would have an Alpha value of 255, making it completely opaque~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ tick_instructions args, "Sample app shows how to create lines."~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << [480, 620, "Lines (x, y, x2, y2, r, g, b, a)"]~ ** Processing line: ~~ ** Processing line: ~ # Some simple lines~ ** Processing line: ~ args.outputs.lines << [380, 450, 675, 450]~ ** Processing line: ~ args.outputs.lines << [380, 410, 875, 410]~ ** Processing line: ~~ ** Processing line: ~ # These examples utilize args.state.tick_count to change the length of the lines over time~ ** Processing line: ~ # args.state.tick_count is the ticks that have occurred in the game~ ** Processing line: ~ # This is accomplished by making either the starting or ending point based on the args.state.tick_count~ ** Processing line: ~ args.outputs.lines << [380, 370, 875, 370, args.state.tick_count % 255, 0, 0, 255]~ ** Processing line: ~ args.outputs.lines << [380, 330 - args.state.tick_count % 25, 875, 330, 0, 0, 0, 255]~ ** Processing line: ~ args.outputs.lines << [380 + args.state.tick_count % 400, 290, 875, 290, 0, 0, 0, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rendering Basics - Solids Borders - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Basics - Solids Borders - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Basics - Solids Borders - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/01_rendering_basics/03_solids_borders/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in a previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.solids: An array. Values in this array generate~ ** Processing line: ~ solid/filled rectangles on the screen.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # Rects are outputted in DragonRuby as rectangles~ ** Processing line: ~ # If filled in, they are solids~ ** Processing line: ~ # If hollow, they are borders~ ** Processing line: ~~ ** Processing line: ~ # Solids are added to args.outputs.solids~ ** Processing line: ~ # Borders are added to args.outputs.borders~ ** Processing line: ~~ ** Processing line: ~ # The parameters required for rects are:~ ** Processing line: ~ # 1. The upper right corner (x, y)~ ** Processing line: ~ # 2. The width (w)~ ** Processing line: ~ # 3. The height (h)~ ** Processing line: ~ # 4. The rgba values for the color and transparency (r, g, b, a)~ ** Processing line: ~~ ** Processing line: ~ # Here is an example of a rect definition:~ ** Processing line: ~ # [100, 100, 400, 500, 0, 255, 0, 180]~ ** Processing line: ~~ ** Processing line: ~ # The example would create a rect from (100, 100)~ ** Processing line: ~ # Extending 400 pixels across the x axis~ ** Processing line: ~ # and 500 pixels across the y axis~ ** Processing line: ~ # The rect would be green (0, 255, 0)~ ** Processing line: ~ # and mostly opaque with some transparency (180)~ ** Processing line: ~~ ** Processing line: ~ # Whether the rect would be filled or not depends on if~ ** Processing line: ~ # it is added to args.outputs.solids or args.outputs.borders~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ tick_instructions args, "Sample app shows how to create solid squares."~ ** Processing line: ~ args.outputs.labels << [460, 600, "Solids (x, y, w, h, r, g, b, a)"]~ ** Processing line: ~ args.outputs.solids << [470, 520, 50, 50]~ ** Processing line: ~ args.outputs.solids << [530, 520, 50, 50, 0, 0, 0]~ ** Processing line: ~ args.outputs.solids << [590, 520, 50, 50, 255, 0, 0]~ ** Processing line: ~ args.outputs.solids << [650, 520, 50, 50, 255, 0, 0, 128]~ ** Processing line: ~ args.outputs.solids << [710, 520, 50, 50, 0, 0, 0, 128 + args.state.tick_count % 128]~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << [460, 400, "Borders (x, y, w, h, r, g, b, a)"]~ ** Processing line: ~ args.outputs.borders << [470, 320, 50, 50]~ ** Processing line: ~ args.outputs.borders << [530, 320, 50, 50, 0, 0, 0]~ ** Processing line: ~ args.outputs.borders << [590, 320, 50, 50, 255, 0, 0]~ ** Processing line: ~ args.outputs.borders << [650, 320, 50, 50, 255, 0, 0, 128]~ ** Processing line: ~ args.outputs.borders << [710, 320, 50, 50, 0, 0, 0, 128 + args.state.tick_count % 128]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rendering Basics - Sprites - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Basics - Sprites - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Basics - Sprites - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/01_rendering_basics/04_sprites/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in a previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.sprites: An array. Values in this array generate~ ** Processing line: ~ sprites on the screen. The location of the sprite is assumed to~ ** Processing line: ~ be under the mygame/ directory (the exception being dragonruby.png).~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # For all other display outputs, Sprites are your solution~ ** Processing line: ~ # Sprites import images and display them with a certain rectangular area~ ** Processing line: ~ # The image can be of any usual format and should be located within the folder,~ ** Processing line: ~ # similar to additional fonts.~ ** Processing line: ~~ ** Processing line: ~ # Sprites have the following parameters~ ** Processing line: ~ # Rectangular area (x, y, width, height)~ ** Processing line: ~ # The image (path)~ ** Processing line: ~ # Rotation (angle)~ ** Processing line: ~ # Alpha (a)~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ tick_instructions args, "Sample app shows how to render a sprite. Set its alpha, and rotate it."~ ** Processing line: ~ args.outputs.labels << [460, 600, "Sprites (x, y, w, h, path, angle, a)"]~ ** Processing line: ~ args.outputs.sprites << [460, 470, 128, 101, 'dragonruby.png']~ ** Processing line: ~ args.outputs.sprites << [610, 470, 128, 101, 'dragonruby.png', args.state.tick_count % 360]~ ** Processing line: ~ args.outputs.sprites << [760, 470, 128, 101, 'dragonruby.png', 0, args.state.tick_count % 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rendering Basics - Sounds - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Basics - Sounds - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Basics - Sounds - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/01_rendering_basics/05_sounds/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs Listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - sample: Chooses random element from array.~ ** Processing line: ~ In this sample app, the target note is set by taking a sample from the collection~ ** Processing line: ~ of available notes.~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated~ ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app allows users to test their musical skills by matching the piano sound that plays in each~ ** Processing line: ~ # level to the correct note.~ ** Processing line: ~~ ** Processing line: ~ # Runs all the methods necessary for the game to function properly.~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.labels << [640, 360, "Click anywhere to play a random sound.", 0, 1]~ ** Processing line: ~ args.state.notes ||= [:C3, :D3, :E3, :F3, :G3, :A3, :B3, :C4]~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.mouse.click~ ** Processing line: ~ # Play a sound by adding a string to args.outputs.sounds~ ** Processing line: ~ args.outputs.sounds << "sounds/#{args.state.notes.sample}.wav" # sound of target note is output~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Input Basics - Keyboard - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Input Basics - Keyboard - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Input Basics - Keyboard - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/02_input_basics/01_keyboard/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in a previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.keyboard.key_up.KEY: The value of the properties will be set~ ** Processing line: ~ to the frame that the key_up event occurred (the frame correlates~ ** Processing line: ~ to args.state.tick_count). Otherwise the value will be nil. For a~ ** Processing line: ~ full listing of keys, take a look at mygame/documentation/06-keyboard.md.~ ** Processing line: ~ - args.state.PROPERTY: The state property on args is a dynamic~ ** Processing line: ~ structure. You can define ANY property here with ANY type of~ ** Processing line: ~ arbitrary nesting. Properties defined on args.state will be retained~ ** Processing line: ~ across frames. If you attempt access a property that doesn't exist~ ** Processing line: ~ on args.state, it will simply return nil (no exception will be thrown).~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # Along with outputs, inputs are also an essential part of video game development~ ** Processing line: ~ # DragonRuby can take input from keyboards, mouse, and controllers.~ ** Processing line: ~ # This sample app will cover keyboard input.~ ** Processing line: ~~ ** Processing line: ~ # args.inputs.keyboard.key_up.a will check to see if the a key has been pressed~ ** Processing line: ~ # This will work with the other keys as well~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ tick_instructions args, "Sample app shows how keyboard events are registered and accessed.", 360~ ** Processing line: ~ # Notice how small_font accounts for all the remaining parameters~ ** Processing line: ~ args.outputs.labels << { x: 460, y: row_to_px(args, 0), text: "Current game time: #{args.state.tick_count}", size_enum: -1 }~ ** Processing line: ~ args.outputs.labels << { x: 460, y: row_to_px(args, 2), text: "Keyboard input: args.inputs.keyboard.key_up.h", size_enum: -1 }~ ** Processing line: ~ args.outputs.labels << { x: 460, y: row_to_px(args, 3), text: "Press \"h\" on the keyboard.", size_enum: -1 }~ ** Processing line: ~~ ** Processing line: ~ # Input on a specifc key can be found through args.inputs.keyboard.key_up followed by the key~ ** Processing line: ~ if args.inputs.keyboard.key_up.h~ ** Processing line: ~ args.state.h_pressed_at = args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This code simplifies to if args.state.h_pressed_at has not been initialized, set it to false~ ** Processing line: ~ args.state.h_pressed_at ||= false~ ** Processing line: ~~ ** Processing line: ~ if args.state.h_pressed_at~ ** Processing line: ~ args.outputs.labels << { x: 460, y: row_to_px(args, 4), text: "\"h\" was pressed at time: #{args.state.h_pressed_at}", size_enum: -1 }~ ** Processing line: ~ else~ ** Processing line: ~ args.outputs.labels << { x: 460, y: row_to_px(args, 4), text: "\"h\" has never been pressed.", size_enum: -1 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ tick_help_text args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def row_to_px args, row_number, y_offset = 20~ ** Processing line: ~ # This takes a row_number and converts it to pixels DragonRuby understands.~ ** Processing line: ~ # Row 0 starts 5 units below the top of the grid~ ** Processing line: ~ # Each row afterward is 20 units lower~ ** Processing line: ~ args.grid.top - 5 - (y_offset * row_number)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Don't worry about understanding the code within this method just yet.~ ** Processing line: ~ # This method shows you the help text within the game.~ ** Processing line: ~ def tick_help_text args~ ** Processing line: ~ return unless args.state.h_pressed_at~ ** Processing line: ~~ ** Processing line: ~ args.state.key_value_history ||= {}~ ** Processing line: ~ args.state.key_down_value_history ||= {}~ ** Processing line: ~ args.state.key_held_value_history ||= {}~ ** Processing line: ~ args.state.key_up_value_history ||= {}~ ** Processing line: ~~ ** Processing line: ~ if (args.inputs.keyboard.key_down.truthy_keys.length > 0 ||~ ** Processing line: ~ args.inputs.keyboard.key_held.truthy_keys.length > 0 ||~ ** Processing line: ~ args.inputs.keyboard.key_up.truthy_keys.length > 0)~ ** Processing line: ~ args.state.help_available = true~ ** Processing line: ~ args.state.no_activity_debounce = nil~ ** Processing line: ~ else~ ** Processing line: ~ args.state.no_activity_debounce ||= 5.seconds~ ** Processing line: ~ args.state.no_activity_debounce -= 1~ ** Processing line: ~ if args.state.no_activity_debounce <= 0~ ** Processing line: ~ args.state.help_available = false~ ** Processing line: ~ args.state.key_value_history = {}~ ** Processing line: ~ args.state.key_down_value_history = {}~ ** Processing line: ~ args.state.key_held_value_history = {}~ ** Processing line: ~ args.state.key_up_value_history = {}~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << { x: 10, y: row_to_px(args, 6), text: "This is the api for the keys you've pressed:", size_enum: -1, r: 180 }~ ** Processing line: ~~ ** Processing line: ~ if !args.state.help_available~ ** Processing line: ~ args.outputs.labels << [10, row_to_px(args, 7), "Press a key and I'll show code to access the key and what value will be returned if you used the code.", small_font]~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << { x: 10 , y: row_to_px(args, 7), text: "args.inputs.keyboard", size_enum: -2 }~ ** Processing line: ~ args.outputs.labels << { x: 330, y: row_to_px(args, 7), text: "args.inputs.keyboard.key_down", size_enum: -2 }~ ** Processing line: ~ args.outputs.labels << { x: 650, y: row_to_px(args, 7), text: "args.inputs.keyboard.key_held", size_enum: -2 }~ ** Processing line: ~ args.outputs.labels << { x: 990, y: row_to_px(args, 7), text: "args.inputs.keyboard.key_up", size_enum: -2 }~ ** Processing line: ~~ ** Processing line: ~ fill_history args, :key_value_history, :down_or_held, nil~ ** Processing line: ~ fill_history args, :key_down_value_history, :down, :key_down~ ** Processing line: ~ fill_history args, :key_held_value_history, :held, :key_held~ ** Processing line: ~ fill_history args, :key_up_value_history, :up, :key_up~ ** Processing line: ~~ ** Processing line: ~ render_help_labels args, :key_value_history, :down_or_held, nil, 10~ ** Processing line: ~ render_help_labels args, :key_down_value_history, :down, :key_down, 330~ ** Processing line: ~ render_help_labels args, :key_held_value_history, :held, :key_held, 650~ ** Processing line: ~ render_help_labels args, :key_up_value_history, :up, :key_up, 990~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def fill_history args, history_key, state_key, keyboard_method~ ** Processing line: ~ fill_single_history args, history_key, state_key, keyboard_method, :raw_key~ ** Processing line: ~ fill_single_history args, history_key, state_key, keyboard_method, :char~ ** Processing line: ~ args.inputs.keyboard.keys[state_key].each do |key_name|~ ** Processing line: ~ fill_single_history args, history_key, state_key, keyboard_method, key_name~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def fill_single_history args, history_key, state_key, keyboard_method, key_name~ ** Processing line: ~ current_value = args.inputs.keyboard.send(key_name)~ ** Processing line: ~ if keyboard_method~ ** Processing line: ~ current_value = args.inputs.keyboard.send(keyboard_method).send(key_name)~ ** Processing line: ~ end~ ** Processing line: ~ args.state.as_hash[history_key][key_name] ||= []~ ** Processing line: ~ args.state.as_hash[history_key][key_name] << current_value~ ** Processing line: ~ args.state.as_hash[history_key][key_name] = args.state.as_hash[history_key][key_name].reverse.uniq.take(3).reverse~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_help_labels args, history_key, state_key, keyboard_method, x~ ** Processing line: ~ idx = 8~ ** Processing line: ~ args.outputs.labels << args.state~ ** Processing line: ~ .as_hash[history_key]~ ** Processing line: ~ .keys~ ** Processing line: ~ .reverse~ ** Processing line: ~ .map~ ** Processing line: ~ .with_index do |k, i|~ ** Processing line: ~ v = args.state.as_hash[history_key][k]~ ** Processing line: ~ current_value = args.inputs.keyboard.send(k)~ ** Processing line: ~ if keyboard_method~ ** Processing line: ~ current_value = args.inputs.keyboard.send(keyboard_method).send(k)~ ** Processing line: ~ end~ ** Processing line: ~ idx += 2~ ** Processing line: ~ [~ ** Processing line: ~ { x: x, y: row_to_px(args, idx + 0, 16), text: " .#{k} is #{current_value || "nil"}", size_enum: -2 },~ ** Processing line: ~ { x: x, y: row_to_px(args, idx + 1, 16), text: " was #{v}", size_enum: -2 }~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << { x: 0, y: y - 50, w: 1280, h: 60 }.solid!~ ** Processing line: ~ args.outputs.debug << { x: 640, y: y, text: text,~ ** Processing line: ~ size_enum: 1, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ ** Processing line: ~ args.outputs.debug << { x: 640, y: y - 25, text: "(click to dismiss instructions)",~ ** Processing line: ~ size_enum: -2, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Input Basics - Moving A Sprite - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Input Basics - Moving A Sprite - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Input Basics - Moving A Sprite - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/02_input_basics/01_moving_a_sprite/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ # create a player and set default values~ ** Processing line: ~ # for the player's x, y, w (width), and h (height)~ ** Processing line: ~ args.state.player.x ||= 100~ ** Processing line: ~ args.state.player.y ||= 100~ ** Processing line: ~ args.state.player.w ||= 50~ ** Processing line: ~ args.state.player.h ||= 50~ ** Processing line: ~~ ** Processing line: ~ # render the player to the screen~ ** Processing line: ~ args.outputs.sprites << { x: args.state.player.x,~ ** Processing line: ~ y: args.state.player.y,~ ** Processing line: ~ w: args.state.player.w,~ ** Processing line: ~ h: args.state.player.h,~ ** Processing line: ~ path: 'sprites/square/green.png' }~ ** Processing line: ~~ ** Processing line: ~ # move the player around using the keyboard~ ** Processing line: ~ if args.inputs.up~ ** Processing line: ~ args.state.player.y += 10~ ** Processing line: ~ elsif args.inputs.down~ ** Processing line: ~ args.state.player.y -= 10~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.left~ ** Processing line: ~ args.state.player.x -= 10~ ** Processing line: ~ elsif args.inputs.right~ ** Processing line: ~ args.state.player.x += 10~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Input Basics - Mouse - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Input Basics - Mouse - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Input Basics - Mouse - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/02_input_basics/02_mouse/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs that haven't been encountered in a previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.mouse.click: This property will be set if the mouse was clicked.~ ** Processing line: ~ - args.inputs.mouse.click.point.(x|y): The x and y location of the mouse.~ ** Processing line: ~ - args.inputs.mouse.click.point.created_at: The frame the mouse click occurred in.~ ** Processing line: ~ - args.inputs.mouse.click.point.created_at_elapsed: How many frames have passed~ ** Processing line: ~ since the click event.~ ** Processing line: ~~ ** Processing line: ~ Reminder:~ ** Processing line: ~~ ** Processing line: ~ - args.state.PROPERTY: The state property on args is a dynamic~ ** Processing line: ~ structure. You can define ANY property here with ANY type of~ ** Processing line: ~ arbitrary nesting. Properties defined on args.state will be retained~ ** Processing line: ~ across frames. If you attempt access a property that doesn't exist~ ** Processing line: ~ on args.state, it will simply return nil (no exception will be thrown).~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This code demonstrates DragonRuby mouse input~ ** Processing line: ~~ ** Processing line: ~ # To see if the a mouse click occurred~ ** Processing line: ~ # Use args.inputs.mouse.click~ ** Processing line: ~ # Which returns a boolean~ ** Processing line: ~~ ** Processing line: ~ # To see where a mouse click occurred~ ** Processing line: ~ # Use args.inputs.mouse.click.point.x AND~ ** Processing line: ~ # args.inputs.mouse.click.point.y~ ** Processing line: ~~ ** Processing line: ~ # To see which frame the click occurred~ ** Processing line: ~ # Use args.inputs.mouse.click.created_at~ ** Processing line: ~~ ** Processing line: ~ # To see how many frames its been since the click occurred~ ** Processing line: ~ # Use args.inputs.mouse.click.created_at_elapsed~ ** Processing line: ~~ ** Processing line: ~ # Saving the click in args.state can be quite useful~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ tick_instructions args, "Sample app shows how mouse events are registered and how to measure elapsed time."~ ** Processing line: ~ x = 460~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << small_label(args, x, 11, "Mouse input: args.inputs.mouse")~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.mouse.click~ ** Processing line: ~ args.state.last_mouse_click = args.inputs.mouse.click~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.last_mouse_click~ ** Processing line: ~ click = args.state.last_mouse_click~ ** Processing line: ~ args.outputs.labels << small_label(args, x, 12, "Mouse click happened at: #{click.created_at}")~ ** Processing line: ~ args.outputs.labels << small_label(args, x, 13, "Mouse clicked #{click.created_at_elapsed} ticks ago")~ ** Processing line: ~ args.outputs.labels << small_label(args, x, 14, "Mouse click location: #{click.point.x}, #{click.point.y}")~ ** Processing line: ~ else~ ** Processing line: ~ args.outputs.labels << small_label(args, x, 12, "Mouse click has not occurred yet.")~ ** Processing line: ~ args.outputs.labels << small_label(args, x, 13, "Please click mouse.")~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def small_label args, x, row, message~ ** Processing line: ~ # This method effectively combines the row_to_px and small_font methods~ ** Processing line: ~ # It changes the given row value to a DragonRuby pixel value~ ** Processing line: ~ # and adds the customization parameters~ ** Processing line: ~ { x: x, y: row_to_px(args, row), text: message, alignment_enum: -2 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def row_to_px args, row_number~ ** Processing line: ~ args.grid.top.shift_down(5).shift_down(20 * row_number)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << { x: 0, y: y - 50, w: 1280, h: 60 }.solid!~ ** Processing line: ~ args.outputs.debug << { x: 640, y: y, text: text, size_enum: 1, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ ** Processing line: ~ args.outputs.debug << { x: 640, y: y - 25, text: "(click to dismiss instructions)", size_enum: -2, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Input Basics - Mouse Point To Rect - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Input Basics - Mouse Point To Rect - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Input Basics - Mouse Point To Rect - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/02_input_basics/03_mouse_point_to_rect/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs that haven't been encountered in a previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - args.outputus.borders: An array. Values in this array will be rendered as~ ** Processing line: ~ unfilled rectangles on the screen.~ ** Processing line: ~ - ARRAY#inside_rect?: An array with at least two values is considered a point. An array~ ** Processing line: ~ with at least four values is considered a rect. The inside_rect? function returns true~ ** Processing line: ~ or false depending on if the point is inside the rect.~ ** Processing line: ~~ ** Processing line: ~ ```~ ** Processing line: ~ # Point: x: 100, y: 100~ ** Processing line: ~ # Rect: x: 0, y: 0, w: 500, h: 500~ ** Processing line: ~ # Result: true~ ** Processing line: ~~ ** Processing line: ~ [100, 100].inside_rect? [0, 0, 500, 500]~ ** Processing line: ~ ```~ ** Processing line: ~~ ** Processing line: ~ ```~ ** Processing line: ~ # Point: x: 100, y: 100~ ** Processing line: ~ # Rect: x: 300, y: 300, w: 100, h: 100~ ** Processing line: ~ # Result: false~ ** Processing line: ~~ ** Processing line: ~ [100, 100].inside_rect? [300, 300, 100, 100]~ ** Processing line: ~ ```~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.mouse.click.point.created_at: The frame the mouse click occurred in.~ ** Processing line: ~ - args.inputs.mouse.click.point.created_at_elapsed: How many frames have passed~ ** Processing line: ~ since the click event.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # To determine whether a point is in a rect~ ** Processing line: ~ # Use point.inside_rect? rect~ ** Processing line: ~~ ** Processing line: ~ # This is useful to determine if a click occurred in a rect~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ tick_instructions args, "Sample app shows how to determing if a click happened inside a rectangle."~ ** Processing line: ~~ ** Processing line: ~ x = 460~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << small_label(args, x, 15, "Click inside the blue box maybe ---->")~ ** Processing line: ~~ ** Processing line: ~ box = { x: 785, y: 370, w: 50, h: 50, r: 0, g: 0, b: 170 }~ ** Processing line: ~ args.outputs.borders << box~ ** Processing line: ~~ ** Processing line: ~ # Saves the most recent click into args.state~ ** Processing line: ~ # Unlike the other components of args,~ ** Processing line: ~ # args.state does not reset every tick.~ ** Processing line: ~ if args.inputs.mouse.click~ ** Processing line: ~ args.state.last_mouse_click = args.inputs.mouse.click~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.last_mouse_click~ ** Processing line: ~ if args.state.last_mouse_click.point.inside_rect? box~ ** Processing line: ~ args.outputs.labels << small_label(args, x, 16, "Mouse click happened *inside* the box.")~ ** Processing line: ~ else~ ** Processing line: ~ args.outputs.labels << small_label(args, x, 16, "Mouse click happened *outside* the box.")~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ args.outputs.labels << small_label(args, x, 16, "Mouse click has not occurred yet.")~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def small_label args, x, row, message~ ** Processing line: ~ { x: x, y: row_to_px(args, row), text: message, size_enum: -2 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def row_to_px args, row_number~ ** Processing line: ~ args.grid.top.shift_down(5).shift_down(20 * row_number)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << { x: 0, y: y - 50, w: 1280, h: 60 }.solid!~ ** Processing line: ~ args.outputs.debug << { x: 640, y: y, text: text, size_enum: 1, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ ** Processing line: ~ args.outputs.debug << { x: 640, y: y - 25, text: "(click to dismiss instructions)", size_enum: -2, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Input Basics - Mouse Rect To Rect - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Input Basics - Mouse Rect To Rect - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Input Basics - Mouse Rect To Rect - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/02_input_basics/04_mouse_rect_to_rect/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs that haven't been encountered in a previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.borders: An array. Values in this array will be rendered as~ ** Processing line: ~ unfilled rectangles on the screen.~ ** Processing line: ~ - ARRAY#intersect_rect?: An array with at least four values is~ ** Processing line: ~ considered a rect. The intersect_rect? function returns true~ ** Processing line: ~ or false depending on if the two rectangles intersect.~ ** Processing line: ~~ ** Processing line: ~ ```~ ** Processing line: ~ # Rect One: x: 100, y: 100, w: 100, h: 100~ ** Processing line: ~ # Rect Two: x: 0, y: 0, w: 500, h: 500~ ** Processing line: ~ # Result: true~ ** Processing line: ~~ ** Processing line: ~ [100, 100, 100, 100].intersect_rect? [0, 0, 500, 500]~ ** Processing line: ~ ```~ ** Processing line: ~~ ** Processing line: ~ ```~ ** Processing line: ~ # Rect One: x: 100, y: 100, w: 10, h: 10~ ** Processing line: ~ # Rect Two: x: 500, y: 500, w: 10, h: 10~ ** Processing line: ~ # Result: false~ ** Processing line: ~~ ** Processing line: ~ [100, 100, 10, 10].intersect_rect? [500, 500, 10, 10]~ ** Processing line: ~ ```~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # Similarly, whether rects intersect can be found through~ ** Processing line: ~ # rect1.intersect_rect? rect2~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ tick_instructions args, "Sample app shows how to determine if two rectangles intersect."~ ** Processing line: ~ x = 460~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << small_label(args, x, 3, "Click anywhere on the screen")~ ** Processing line: ~ # red_box = [460, 250, 355, 90, 170, 0, 0]~ ** Processing line: ~ # args.outputs.borders << red_box~ ** Processing line: ~~ ** Processing line: ~ # args.state.box_collision_one and args.state.box_collision_two~ ** Processing line: ~ # Are given values of a solid when they should be rendered~ ** Processing line: ~ # They are stored in game so that they do not get reset every tick~ ** Processing line: ~ if args.inputs.mouse.click~ ** Processing line: ~ if !args.state.box_collision_one~ ** Processing line: ~ args.state.box_collision_one = { x: args.inputs.mouse.click.point.x - 25,~ ** Processing line: ~ y: args.inputs.mouse.click.point.y - 25,~ ** Processing line: ~ w: 125, h: 125,~ ** Processing line: ~ r: 180, g: 0, b: 0, a: 180 }~ ** Processing line: ~ elsif !args.state.box_collision_two~ ** Processing line: ~ args.state.box_collision_two = { x: args.inputs.mouse.click.point.x - 25,~ ** Processing line: ~ y: args.inputs.mouse.click.point.y - 25,~ ** Processing line: ~ w: 125, h: 125,~ ** Processing line: ~ r: 0, g: 0, b: 180, a: 180 }~ ** Processing line: ~ else~ ** Processing line: ~ args.state.box_collision_one = nil~ ** Processing line: ~ args.state.box_collision_two = nil~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.box_collision_one~ ** Processing line: ~ args.outputs.solids << args.state.box_collision_one~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.box_collision_two~ ** Processing line: ~ args.outputs.solids << args.state.box_collision_two~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.box_collision_one && args.state.box_collision_two~ ** Processing line: ~ if args.state.box_collision_one.intersect_rect? args.state.box_collision_two~ ** Processing line: ~ args.outputs.labels << small_label(args, x, 4, 'The boxes intersect.')~ ** Processing line: ~ else~ ** Processing line: ~ args.outputs.labels << small_label(args, x, 4, 'The boxes do not intersect.')~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ args.outputs.labels << small_label(args, x, 4, '--')~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def small_label args, x, row, message~ ** Processing line: ~ { x: x, y: row_to_px(args, row), text: message, size_enum: -2 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def row_to_px args, row_number~ ** Processing line: ~ args.grid.top - 5 - (20 * row_number)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Input Basics - Controller - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Input Basics - Controller - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Input Basics - Controller - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/02_input_basics/05_controller/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.controller_one.key_held.KEY: Will check to see if a specific key~ ** Processing line: ~ is being held down on the controller.~ ** Processing line: ~ If there is more than one controller being used, they can be differentiated by~ ** Processing line: ~ using names like controller_one and controller_two.~ ** Processing line: ~~ ** Processing line: ~ For a full listing of buttons, take a look at mygame/documentation/08-controllers.md.~ ** Processing line: ~~ ** Processing line: ~ Reminder:~ ** Processing line: ~~ ** Processing line: ~ - args.state.PROPERTY: The state property on args is a dynamic~ ** Processing line: ~ structure. You can define ANY property here with ANY type of~ ** Processing line: ~ arbitrary nesting. Properties defined on args.state will be retained~ ** Processing line: ~ across frames. If you attempt to access a property that doesn't exist~ ** Processing line: ~ on args.state, it will simply return nil (no exception will be thrown).~ ** Processing line: ~~ ** Processing line: ~ In this sample app, args.state.BUTTONS is an array that stores the buttons of the controller.~ ** Processing line: ~ The parameters of a button are:~ ** Processing line: ~ 1. the position (x, y)~ ** Processing line: ~ 2. the input key held on the controller~ ** Processing line: ~ 3. the text or name of the button~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app provides a visual demonstration of a standard controller, including~ ** Processing line: ~ # the placement and function of all buttons.~ ** Processing line: ~~ ** Processing line: ~ class ControllerDemo~ ** Processing line: ~ attr_accessor :inputs, :state, :outputs~ ** Processing line: ~~ ** Processing line: ~ # Calls the methods necessary for the app to run successfully.~ ** Processing line: ~ def tick~ ** Processing line: ~ process_inputs~ ** Processing line: ~ render~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Starts with an empty collection of buttons.~ ** Processing line: ~ # Adds buttons that are on the controller to the collection.~ ** Processing line: ~ def process_inputs~ ** Processing line: ~ state.buttons = []~ ** Processing line: ~~ ** Processing line: ~ state.buttons << { x: 100, y: 500, active: inputs.controller_one.key_held.l1, text: "L1"}~ ** Processing line: ~ state.buttons << { x: 100, y: 600, active: inputs.controller_one.key_held.l2, text: "L2"}~ ** Processing line: ~ state.buttons << { x: 1100, y: 500, active: inputs.controller_one.key_held.r1, text: "R1"}~ ** Processing line: ~ state.buttons << { x: 1100, y: 600, active: inputs.controller_one.key_held.r2, text: "R2"}~ ** Processing line: ~ state.buttons << { x: 540, y: 450, active: inputs.controller_one.key_held.select, text: "Select"}~ ** Processing line: ~ state.buttons << { x: 660, y: 450, active: inputs.controller_one.key_held.start, text: "Start"}~ ** Processing line: ~ state.buttons << { x: 200, y: 300, active: inputs.controller_one.key_held.left, text: "Left"}~ ** Processing line: ~ state.buttons << { x: 300, y: 400, active: inputs.controller_one.key_held.up, text: "Up"}~ ** Processing line: ~ state.buttons << { x: 400, y: 300, active: inputs.controller_one.key_held.right, text: "Right"}~ ** Processing line: ~ state.buttons << { x: 300, y: 200, active: inputs.controller_one.key_held.down, text: "Down"}~ ** Processing line: ~ state.buttons << { x: 800, y: 300, active: inputs.controller_one.key_held.x, text: "X"}~ ** Processing line: ~ state.buttons << { x: 900, y: 400, active: inputs.controller_one.key_held.y, text: "Y"}~ ** Processing line: ~ state.buttons << { x: 1000, y: 300, active: inputs.controller_one.key_held.a, text: "A"}~ ** Processing line: ~ state.buttons << { x: 900, y: 200, active: inputs.controller_one.key_held.b, text: "B"}~ ** Processing line: ~ state.buttons << { x: 450 + inputs.controller_one.left_analog_x_perc * 100,~ ** Processing line: ~ y: 100 + inputs.controller_one.left_analog_y_perc * 100,~ ** Processing line: ~ active: inputs.controller_one.key_held.l3,~ ** Processing line: ~ text: "L3" }~ ** Processing line: ~ state.buttons << { x: 750 + inputs.controller_one.right_analog_x_perc * 100,~ ** Processing line: ~ y: 100 + inputs.controller_one.right_analog_y_perc * 100,~ ** Processing line: ~ active: inputs.controller_one.key_held.r3,~ ** Processing line: ~ text: "R3" }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Gives each button a square shape.~ ** Processing line: ~ # If the button is being pressed or held (which means it is considered active),~ ** Processing line: ~ # the square is filled in. Otherwise, the button simply has a border.~ ** Processing line: ~ def render~ ** Processing line: ~ state.buttons.each do |b|~ ** Processing line: ~ rect = { x: b.x, y: b.y, w: 75, h: 75 }~ ** Processing line: ~~ ** Processing line: ~ if b.active # if button is pressed~ ** Processing line: ~ outputs.solids << rect # rect is output as solid (filled in)~ ** Processing line: ~ else~ ** Processing line: ~ outputs.borders << rect # otherwise, output as border~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs the text of each button using labels.~ ** Processing line: ~ outputs.labels << { x: b.x, y: b.y + 95, text: b.text } # add 95 to place label above button~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << { x: 10, y: 60, text: "Left Analog x: #{inputs.controller_one.left_analog_x_raw} (#{inputs.controller_one.left_analog_x_perc * 100}%)" }~ ** Processing line: ~ outputs.labels << { x: 10, y: 30, text: "Left Analog y: #{inputs.controller_one.left_analog_y_raw} (#{inputs.controller_one.left_analog_y_perc * 100}%)" }~ ** Processing line: ~ outputs.labels << { x: 900, y: 60, text: "Right Analog x: #{inputs.controller_one.right_analog_x_raw} (#{inputs.controller_one.right_analog_x_perc * 100}%)" }~ ** Processing line: ~ outputs.labels << { x: 900, y: 30, text: "Right Analog y: #{inputs.controller_one.right_analog_y_raw} (#{inputs.controller_one.right_analog_y_perc * 100}%)" }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $controller_demo = ControllerDemo.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ tick_instructions args, "Sample app shows how controller input is handled. You'll need to connect a USB controller."~ ** Processing line: ~ $controller_demo.inputs = args.inputs~ ** Processing line: ~ $controller_demo.state = args.state~ ** Processing line: ~ $controller_demo.outputs = args.outputs~ ** Processing line: ~ $controller_demo.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Resets the app.~ ** Processing line: ~ def r~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Input Basics - Touch - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Input Basics - Touch - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Input Basics - Touch - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/02_input_basics/06_touch/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.background_color = [ 0, 0, 0 ]~ ** Processing line: ~ args.outputs.primitives << [640, 700, "Touch your screen.", 5, 1, 255, 255, 255].label~ ** Processing line: ~~ ** Processing line: ~ # If you don't want to get fancy, you can just look for finger_one~ ** Processing line: ~ # (and _two, if you like), which are assigned in the order new touches hit~ ** Processing line: ~ # the screen. If not nil, they are touching right now, and are just~ ** Processing line: ~ # references to specific items in the args.input.touch hash.~ ** Processing line: ~ # If finger_one lifts off, it will become nil, but finger_two, if it was~ ** Processing line: ~ # touching, remains until it also lifts off. When all fingers lift off, the~ ** Processing line: ~ # the next new touch will be finger_one again, but until then, new touches~ ** Processing line: ~ # don't fill in earlier slots.~ ** Processing line: ~ if !args.inputs.finger_one.nil?~ ** Processing line: ~ args.outputs.primitives << { x: 640, y: 650, text: "Finger #1 is touching at (#{args.inputs.finger_one.x}, #{args.inputs.finger_one.y}).",~ ** Processing line: ~ size_enum: 5, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ ** Processing line: ~ end~ ** Processing line: ~ if !args.inputs.finger_two.nil?~ ** Processing line: ~ args.outputs.primitives << { x: 640, y: 600, text: "Finger #2 is touching at (#{args.inputs.finger_two.x}, #{args.inputs.finger_two.y}).",~ ** Processing line: ~ size_enum: 5, alignment_enum: 1, r: 255, g: 255, b: 255 }.label!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Here's the more flexible interface: this will report as many simultaneous~ ** Processing line: ~ # touches as the system can handle, but it's a little more effort to track~ ** Processing line: ~ # them. Each item in the args.input.touch hash has a unique key (an~ ** Processing line: ~ # incrementing integer) that exists until the finger lifts off. You can~ ** Processing line: ~ # tell which order the touches happened globally by the key value, or~ ** Processing line: ~ # by the touch[id].touch_order field, which resets to zero each time all~ ** Processing line: ~ # touches have lifted.~ ** Processing line: ~~ ** Processing line: ~ args.state.colors ||= [~ ** Processing line: ~ 0xFF0000, 0x00FF00, 0x1010FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFFFFF~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ size = 100~ ** Processing line: ~ args.inputs.touch.each { |k,v|~ ** Processing line: ~ color = args.state.colors[v.touch_order % 7]~ ** Processing line: ~ r = (color & 0xFF0000) >> 16~ ** Processing line: ~ g = (color & 0x00FF00) >> 8~ ** Processing line: ~ b = (color & 0x0000FF)~ ** Processing line: ~ args.outputs.primitives << { x: v.x - (size / 2), y: v.y + (size / 2), w: size, h: size, r: r, g: g, b: b, a: 255 }.solid!~ ** Processing line: ~ args.outputs.primitives << { x: v.x, y: v.y + size, text: k.to_s, alignment_enum: 1 }.label!~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rendering Sprites - Animation Using Separate Pngs - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Sprites - Animation Using Separate Pngs - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Sprites - Animation Using Separate Pngs - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/03_rendering_sprites/01_animation_using_separate_pngs/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated~ ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ ** Processing line: ~~ ** Processing line: ~ In this sample app, we're using string interpolation to iterate through images in the~ ** Processing line: ~ sprites folder using their image path names.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.sprites: An array. Values in this array generate sprites on the screen.~ ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, IMAGE PATH]~ ** Processing line: ~ For more information about sprites, go to mygame/documentation/05-sprites.md.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.labels: An array. Values in the array generate labels on the screen.~ ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.keyboard.key_down.KEY: Determines if a key is in the down state, or pressed.~ ** Processing line: ~ Stores the frame that key was pressed on.~ ** Processing line: ~ For more information about the keyboard, go to mygame/documentation/06-keyboard.md.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app demonstrates how sprite animations work.~ ** Processing line: ~ # There are two sprites that animate forever and one sprite~ ** Processing line: ~ # that *only* animates when you press the "f" key on the keyboard.~ ** Processing line: ~~ ** Processing line: ~ # This is the entry point to your game. The `tick` method~ ** Processing line: ~ # executes at 60 frames per second. There are two methods~ ** Processing line: ~ # in this tick "entry point": `looping_animation`, and the~ ** Processing line: ~ # second method is `one_time_animation`.~ ** Processing line: ~ def tick args~ ** Processing line: ~ # uncomment the line below to see animation play out in slow motion~ ** Processing line: ~ # args.gtk.slowmo! 6~ ** Processing line: ~ looping_animation args~ ** Processing line: ~ one_time_animation args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This function shows how to animate a sprite that loops forever.~ ** Processing line: ~ def looping_animation args~ ** Processing line: ~ # Here we define a few local variables that will be sent~ ** Processing line: ~ # into the magic function that gives us the correct sprite image~ ** Processing line: ~ # over time. There are four things we need in order to figure~ ** Processing line: ~ # out which sprite to show.~ ** Processing line: ~~ ** Processing line: ~ # 1. When to start the animation.~ ** Processing line: ~ start_looping_at = 0~ ** Processing line: ~~ ** Processing line: ~ # 2. The number of pngs that represent the full animation.~ ** Processing line: ~ number_of_sprites = 6~ ** Processing line: ~~ ** Processing line: ~ # 3. How long to show each png.~ ** Processing line: ~ number_of_frames_to_show_each_sprite = 4~ ** Processing line: ~~ ** Processing line: ~ # 4. Whether the animation should loop once, or forever.~ ** Processing line: ~ does_sprite_loop = true~ ** Processing line: ~~ ** Processing line: ~ # With the variables defined above, we can get a number~ ** Processing line: ~ # which represents the sprite to show by calling the `frame_index` function.~ ** Processing line: ~ # In this case the number will be between 0, and 5 (you can see the sprites~ ** Processing line: ~ # in the ./sprites directory).~ ** Processing line: ~ sprite_index = start_looping_at.frame_index number_of_sprites,~ ** Processing line: ~ number_of_frames_to_show_each_sprite,~ ** Processing line: ~ does_sprite_loop~ ** Processing line: ~~ ** Processing line: ~ # Now that we have `sprite_index, we can present the correct file.~ ** Processing line: ~ args.outputs.sprites << { x: 100, y: 100, w: 100, h: 100, path: "sprites/dragon_fly_#{sprite_index}.png" }~ ** Processing line: ~~ ** Processing line: ~ # Try changing the numbers below to see how the animation changes:~ ** Processing line: ~ args.outputs.sprites << { x: 100, y: 200, w: 100, h: 100, path: "sprites/dragon_fly_#{0.frame_index 6, 4, true}.png" }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This function shows how to animate a sprite that executes~ ** Processing line: ~ # only once when the "f" key is pressed.~ ** Processing line: ~ def one_time_animation args~ ** Processing line: ~ # This is just a label the shows instructions within the game.~ ** Processing line: ~ args.outputs.labels << { x: 220, y: 350, text: "(press f to animate)" }~ ** Processing line: ~~ ** Processing line: ~ # If "f" is pressed on the keyboard...~ ** Processing line: ~ if args.inputs.keyboard.key_down.f~ ** Processing line: ~ # Print the frame that "f" was pressed on.~ ** Processing line: ~ puts "Hello from main.rb! The \"f\" key was in the down state on frame: #{args.state.tick_count}"~ ** Processing line: ~~ ** Processing line: ~ # And MOST IMPORTANTLY set the point it time to start the animation,~ ** Processing line: ~ # equal to "now" which is represented as args.state.tick_count.~ ** Processing line: ~~ ** Processing line: ~ # Also IMPORTANT, you'll notice that the value of when to start looping~ ** Processing line: ~ # is stored in `args.state`. This construct's values are retained across~ ** Processing line: ~ # executions of the `tick` method.~ ** Processing line: ~ args.state.start_looping_at = args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # These are the same local variables that were defined~ ** Processing line: ~ # for the `looping_animation` function.~ ** Processing line: ~ number_of_sprites = 6~ ** Processing line: ~ number_of_frames_to_show_each_sprite = 4~ ** Processing line: ~~ ** Processing line: ~ # Except this sprite does not loop again. If the animation time has passed,~ ** Processing line: ~ # then the frame_index function returns nil.~ ** Processing line: ~ does_sprite_loop = false~ ** Processing line: ~~ ** Processing line: ~ sprite_index = args.state~ ** Processing line: ~ .start_looping_at~ ** Processing line: ~ .frame_index number_of_sprites,~ ** Processing line: ~ number_of_frames_to_show_each_sprite,~ ** Processing line: ~ does_sprite_loop~ ** Processing line: ~~ ** Processing line: ~ # This line sets the frame index to zero, if~ ** Processing line: ~ # the animation duration has passed (frame_index returned nil).~ ** Processing line: ~~ ** Processing line: ~ # Remeber: we are not looping forever here.~ ** Processing line: ~ sprite_index ||= 0~ ** Processing line: ~~ ** Processing line: ~ # Present the sprite.~ ** Processing line: ~ args.outputs.sprites << { x: 100, y: 300, w: 100, h: 100, path: "sprites/dragon_fly_#{sprite_index}.png" }~ ** Processing line: ~~ ** Processing line: ~ tick_instructions args, "Sample app shows how to use Numeric#frame_index and string interpolation to animate a sprite over time."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rendering Sprites - Animation Using Sprite Sheet - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Sprites - Animation Using Sprite Sheet - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Sprites - Animation Using Sprite Sheet - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/03_rendering_sprites/02_animation_using_sprite_sheet/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.player.x ||= 100~ ** Processing line: ~ args.state.player.y ||= 100~ ** Processing line: ~ args.state.player.w ||= 64~ ** Processing line: ~ args.state.player.h ||= 64~ ** Processing line: ~ args.state.player.direction ||= 1~ ** Processing line: ~~ ** Processing line: ~ args.state.player.is_moving = false~ ** Processing line: ~~ ** Processing line: ~ # get the keyboard input and set player properties~ ** Processing line: ~ if args.inputs.keyboard.right~ ** Processing line: ~ args.state.player.x += 3~ ** Processing line: ~ args.state.player.direction = 1~ ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ ** Processing line: ~ elsif args.inputs.keyboard.left~ ** Processing line: ~ args.state.player.x -= 3~ ** Processing line: ~ args.state.player.direction = -1~ ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.keyboard.up~ ** Processing line: ~ args.state.player.y += 1~ ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ ** Processing line: ~ elsif args.inputs.keyboard.down~ ** Processing line: ~ args.state.player.y -= 1~ ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if no arrow keys are being pressed, set the player as not moving~ ** Processing line: ~ if !args.inputs.keyboard.directional_vector~ ** Processing line: ~ args.state.player.started_running_at = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # wrap player around the stage~ ** Processing line: ~ if args.state.player.x > 1280~ ** Processing line: ~ args.state.player.x = -64~ ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ ** Processing line: ~ elsif args.state.player.x < -64~ ** Processing line: ~ args.state.player.x = 1280~ ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.player.y > 720~ ** Processing line: ~ args.state.player.y = -64~ ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ ** Processing line: ~ elsif args.state.player.y < -64~ ** Processing line: ~ args.state.player.y = 720~ ** Processing line: ~ args.state.player.started_running_at ||= args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # render player as standing or running~ ** Processing line: ~ if args.state.player.started_running_at~ ** Processing line: ~ args.outputs.sprites << running_sprite(args)~ ** Processing line: ~ else~ ** Processing line: ~ args.outputs.sprites << standing_sprite(args)~ ** Processing line: ~ end~ ** Processing line: ~ args.outputs.labels << [30, 700, "Use arrow keys to move around."]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def standing_sprite args~ ** Processing line: ~ {~ ** Processing line: ~ x: args.state.player.x,~ ** Processing line: ~ y: args.state.player.y,~ ** Processing line: ~ w: args.state.player.w,~ ** Processing line: ~ h: args.state.player.h,~ ** Processing line: ~ path: "sprites/horizontal-stand.png",~ ** Processing line: ~ flip_horizontally: args.state.player.direction > 0~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def running_sprite args~ ** Processing line: ~ if !args.state.player.started_running_at~ ** Processing line: ~ tile_index = 0~ ** Processing line: ~ else~ ** Processing line: ~ how_many_frames_in_sprite_sheet = 6~ ** Processing line: ~ how_many_ticks_to_hold_each_frame = 3~ ** Processing line: ~ should_the_index_repeat = true~ ** Processing line: ~ tile_index = args.state~ ** Processing line: ~ .player~ ** Processing line: ~ .started_running_at~ ** Processing line: ~ .frame_index(how_many_frames_in_sprite_sheet,~ ** Processing line: ~ how_many_ticks_to_hold_each_frame,~ ** Processing line: ~ should_the_index_repeat)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ {~ ** Processing line: ~ x: args.state.player.x,~ ** Processing line: ~ y: args.state.player.y,~ ** Processing line: ~ w: args.state.player.w,~ ** Processing line: ~ h: args.state.player.h,~ ** Processing line: ~ path: 'sprites/horizontal-run.png',~ ** Processing line: ~ tile_x: 0 + (tile_index * args.state.player.w),~ ** Processing line: ~ tile_y: 0,~ ** Processing line: ~ tile_w: args.state.player.w,~ ** Processing line: ~ tile_h: args.state.player.h,~ ** Processing line: ~ flip_horizontally: args.state.player.direction > 0,~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rendering Sprites - Animation States - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Sprites - Animation States - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Sprites - Animation States - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/03_rendering_sprites/03_animation_states/app/main.rb~ ** Processing line: ~ class Game~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ state.show_debug_layer = true if state.tick_count == 0~ ** Processing line: ~ player.tile_size = 64~ ** Processing line: ~ player.speed = 3~ ** Processing line: ~ player.slash_frames = 15~ ** Processing line: ~ player.x ||= 50~ ** Processing line: ~ player.y ||= 400~ ** Processing line: ~ player.dir_x ||= 1~ ** Processing line: ~ player.dir_y ||= -1~ ** Processing line: ~ player.is_moving ||= false~ ** Processing line: ~ state.watch_list ||= {}~ ** Processing line: ~ state.enemies ||= []~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def add_enemy~ ** Processing line: ~ state.enemies << { x: 1200 * rand, y: 600 * rand, w: 64, h: 64 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def sprite_horizontal_run~ ** Processing line: ~ tile_index = 0.frame_index(6, 3, true)~ ** Processing line: ~ tile_index = 0 if !player.is_moving~ ** Processing line: ~~ ** Processing line: ~ {~ ** Processing line: ~ x: player.x,~ ** Processing line: ~ y: player.y,~ ** Processing line: ~ w: player.tile_size,~ ** Processing line: ~ h: player.tile_size,~ ** Processing line: ~ path: 'sprites/horizontal-run.png',~ ** Processing line: ~ tile_x: 0 + (tile_index * player.tile_size),~ ** Processing line: ~ tile_y: 0,~ ** Processing line: ~ tile_w: player.tile_size,~ ** Processing line: ~ tile_h: player.tile_size,~ ** Processing line: ~ flip_horizontally: player.dir_x > 0,~ ** Processing line: ~ # a: 40~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def sprite_horizontal_stand~ ** Processing line: ~ {~ ** Processing line: ~ x: player.x,~ ** Processing line: ~ y: player.y,~ ** Processing line: ~ w: player.tile_size,~ ** Processing line: ~ h: player.tile_size,~ ** Processing line: ~ path: 'sprites/horizontal-stand.png',~ ** Processing line: ~ flip_horizontally: player.dir_x > 0,~ ** Processing line: ~ # a: 40~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def sprite_horizontal_slash~ ** Processing line: ~ tile_index = player.slash_at.frame_index(5, player.slash_frames.idiv(5), false) || 0~ ** Processing line: ~~ ** Processing line: ~ {~ ** Processing line: ~ x: player.x - 41.25,~ ** Processing line: ~ y: player.y - 41.25,~ ** Processing line: ~ w: 165,~ ** Processing line: ~ h: 165,~ ** Processing line: ~ path: 'sprites/horizontal-slash.png',~ ** Processing line: ~ tile_x: 0 + (tile_index * 128),~ ** Processing line: ~ tile_y: 0,~ ** Processing line: ~ tile_w: 128,~ ** Processing line: ~ tile_h: 128,~ ** Processing line: ~ flip_horizontally: player.dir_x > 0~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_player~ ** Processing line: ~ if player.slash_at~ ** Processing line: ~ outputs.sprites << sprite_horizontal_slash~ ** Processing line: ~ elsif player.is_moving~ ** Processing line: ~ outputs.sprites << sprite_horizontal_run~ ** Processing line: ~ else~ ** Processing line: ~ outputs.sprites << sprite_horizontal_stand~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_enemies~ ** Processing line: ~ outputs.borders << state.enemies~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_debug_layer~ ** Processing line: ~ return if !state.show_debug_layer~ ** Processing line: ~ outputs.labels << state.watch_list.map.with_index do |(k, v), i|~ ** Processing line: ~ [30, 710 - i * 28, "#{k}: #{v || "(nil)"}"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.borders << player.slash_collision_rect~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def slash_initiate?~ ** Processing line: ~ # buffalo usb controller has a button and b button swapped lol~ ** Processing line: ~ inputs.controller_one.key_down.a || inputs.keyboard.key_down.j~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input~ ** Processing line: ~ # player movement~ ** Processing line: ~ if slash_complete? && (vector = inputs.directional_vector)~ ** Processing line: ~ player.x += vector.x * player.speed~ ** Processing line: ~ player.y += vector.y * player.speed~ ** Processing line: ~ end~ ** Processing line: ~ player.slash_at = slash_initiate? if slash_initiate?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_movement~ ** Processing line: ~ # movement~ ** Processing line: ~ if vector = inputs.directional_vector~ ** Processing line: ~ state.debug_label = vector~ ** Processing line: ~ player.dir_x = vector.x~ ** Processing line: ~ player.dir_y = vector.y~ ** Processing line: ~ player.is_moving = true~ ** Processing line: ~ else~ ** Processing line: ~ state.debug_label = vector~ ** Processing line: ~ player.is_moving = false~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_slash~ ** Processing line: ~ # re-calc the location of the swords collision box~ ** Processing line: ~ if player.dir_x.positive?~ ** Processing line: ~ player.slash_collision_rect = [player.x + player.tile_size,~ ** Processing line: ~ player.y + player.tile_size.half - 10,~ ** Processing line: ~ 40, 20]~ ** Processing line: ~ else~ ** Processing line: ~ player.slash_collision_rect = [player.x - 32 - 8,~ ** Processing line: ~ player.y + player.tile_size.half - 10,~ ** Processing line: ~ 40, 20]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # recalc sword's slash state~ ** Processing line: ~ player.slash_at = nil if slash_complete?~ ** Processing line: ~~ ** Processing line: ~ # determine collision if the sword is at it's point of damaging~ ** Processing line: ~ return unless slash_can_damage?~ ** Processing line: ~~ ** Processing line: ~ state.enemies.reject! { |e| e.intersect_rect? player.slash_collision_rect }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def slash_complete?~ ** Processing line: ~ !player.slash_at || player.slash_at.elapsed?(player.slash_frames)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def slash_can_damage?~ ** Processing line: ~ # damage occurs half way into the slash animation~ ** Processing line: ~ return false if slash_complete?~ ** Processing line: ~ return false if (player.slash_at + player.slash_frames.idiv(2)) != state.tick_count~ ** Processing line: ~ return true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc~ ** Processing line: ~ # generate an enemy if there aren't any on the screen~ ** Processing line: ~ add_enemy if state.enemies.length == 0~ ** Processing line: ~ calc_movement~ ** Processing line: ~ calc_slash~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # source is at http://github.com/amirrajan/dragonruby-link-to-the-past~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render_enemies~ ** Processing line: ~ render_player~ ** Processing line: ~ outputs.labels << [30, 30, "Gamepad: D-Pad to move. B button to attack."]~ ** Processing line: ~ outputs.labels << [30, 52, "Keyboard: WASD/Arrow keys to move. J to attack."]~ ** Processing line: ~ render_debug_layer~ ** Processing line: ~ input~ ** Processing line: ~ calc~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player~ ** Processing line: ~ state.player~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $game = Game.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $game.args = args~ ** Processing line: ~ $game.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rendering Sprites - Color And Rotation - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Sprites - Color And Rotation - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rendering Sprites - Color And Rotation - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/03_rendering_sprites/04_color_and_rotation/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - merge: Returns a hash containing the contents of two original hashes.~ ** Processing line: ~ Merge does not allow duplicate keys, so the value of a repeated key~ ** Processing line: ~ will be overwritten.~ ** Processing line: ~~ ** Processing line: ~ For example, if we had two hashes~ ** Processing line: ~ h1 = { "a" => 1, "b" => 2}~ ** Processing line: ~ h2 = { "b" => 3, "c" => 3}~ ** Processing line: ~ and we called the command~ ** Processing line: ~ h1.merge(h2)~ ** Processing line: ~ the result would the following hash~ ** Processing line: ~ { "a" => 1, "b" => 3, "c" => 3}.~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - Hashes: Collection of unique keys and their corresponding values. The value can be found~ ** Processing line: ~ using their keys.~ ** Processing line: ~ In this sample app, we're using a hash to create a sprite.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.sprites: An array. The values generate a sprite.~ ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, PATH, ANGLE, ALPHA, RED, GREEN, BLUE]~ ** Processing line: ~ Before continuing with this sample app, it is HIGHLY recommended that you look~ ** Processing line: ~ at mygame/documentation/05-sprites.md.~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.keyboard.key_held.KEY: Determines if a key is being pressed.~ ** Processing line: ~ For more information about the keyboard, go to mygame/documentation/06-keyboard.md.~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.controller_one: Takes input from the controller based on what key is pressed.~ ** Processing line: ~ For more information about the controller, go to mygame/documentation/08-controllers.md.~ ** Processing line: ~~ ** Processing line: ~ - num1.lesser(num2): Finds the lower value of the given options.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app shows a car moving across the screen. It loops back around if it exceeds the dimensions of the screen,~ ** Processing line: ~ # and also can be moved in different directions through keyboard input from the user.~ ** Processing line: ~~ ** Processing line: ~ # Calls the methods necessary for the game to run successfully.~ ** Processing line: ~ def tick args~ ** Processing line: ~ default args~ ** Processing line: ~ render args.grid, args.outputs, args.state~ ** Processing line: ~ calc args.state~ ** Processing line: ~ process_inputs args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets default values for the car sprite~ ** Processing line: ~ # Initialization ||= only happens in the first frame~ ** Processing line: ~ def default args~ ** Processing line: ~ args.state.sprite.width = 19~ ** Processing line: ~ args.state.sprite.height = 10~ ** Processing line: ~ args.state.sprite.scale = 4~ ** Processing line: ~ args.state.max_speed = 5~ ** Processing line: ~ args.state.x ||= 100~ ** Processing line: ~ args.state.y ||= 100~ ** Processing line: ~ args.state.speed ||= 1~ ** Processing line: ~ args.state.angle ||= 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs sprite onto screen~ ** Processing line: ~ def render grid, outputs, state~ ** Processing line: ~ outputs.solids << [grid.rect, 70, 70, 70] # outputs gray background~ ** Processing line: ~ outputs.sprites << [destination_rect(state), # sets first four parameters of car sprite~ ** Processing line: ~ 'sprites/86.png', # image path of car~ ** Processing line: ~ state.angle,~ ** Processing line: ~ opacity, # transparency~ ** Processing line: ~ saturation,~ ** Processing line: ~ source_rect(state), # sprite sub division/tile (tile x, y, w, h)~ ** Processing line: ~ false, false, # don't flip sprites~ ** Processing line: ~ rotation_anchor]~ ** Processing line: ~~ ** Processing line: ~ # also look at the create_sprite helper method~ ** Processing line: ~ #~ ** Processing line: ~ # For example:~ ** Processing line: ~ #~ ** Processing line: ~ # dest = destination_rect(state)~ ** Processing line: ~ # source = source_rect(state),~ ** Processing line: ~ # outputs.sprites << create_sprite(~ ** Processing line: ~ # 'sprites/86.png',~ ** Processing line: ~ # x: dest.x,~ ** Processing line: ~ # y: dest.y,~ ** Processing line: ~ # w: dest.w,~ ** Processing line: ~ # h: dest.h,~ ** Processing line: ~ # angle: state.angle,~ ** Processing line: ~ # source_x: source.x,~ ** Processing line: ~ # source_y: source.y,~ ** Processing line: ~ # source_w: source.w,~ ** Processing line: ~ # source_h: source.h,~ ** Processing line: ~ # flip_h: false,~ ** Processing line: ~ # flip_v: false,~ ** Processing line: ~ # rotation_anchor_x: 0.7,~ ** Processing line: ~ # rotation_anchor_y: 0.5~ ** Processing line: ~ # )~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Creates sprite by setting values inside of a hash~ ** Processing line: ~ def create_sprite path, options = {}~ ** Processing line: ~ options = {~ ** Processing line: ~~ ** Processing line: ~ # dest x, y, w, h~ ** Processing line: ~ x: 0,~ ** Processing line: ~ y: 0,~ ** Processing line: ~ w: 100,~ ** Processing line: ~ h: 100,~ ** Processing line: ~~ ** Processing line: ~ # angle, rotation~ ** Processing line: ~ angle: 0,~ ** Processing line: ~ rotation_anchor_x: 0.5,~ ** Processing line: ~ rotation_anchor_y: 0.5,~ ** Processing line: ~~ ** Processing line: ~ # color saturation (red, green, blue), transparency~ ** Processing line: ~ r: 255,~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 255,~ ** Processing line: ~ a: 255,~ ** Processing line: ~~ ** Processing line: ~ # source x, y, width, height~ ** Processing line: ~ source_x: 0,~ ** Processing line: ~ source_y: 0,~ ** Processing line: ~ source_w: -1,~ ** Processing line: ~ source_h: -1,~ ** Processing line: ~~ ** Processing line: ~ # flip horiztonally, flip vertically~ ** Processing line: ~ flip_h: false,~ ** Processing line: ~ flip_v: false,~ ** Processing line: ~~ ** Processing line: ~ }.merge options~ ** Processing line: ~~ ** Processing line: ~ [~ ** Processing line: ~ options[:x], options[:y], options[:w], options[:h], # dest rect keys~ ** Processing line: ~ path,~ ** Processing line: ~ options[:angle], options[:a], options[:r], options[:g], options[:b], # angle, color, alpha~ ** Processing line: ~ options[:source_x], options[:source_y], options[:source_w], options[:source_h], # source rect keys~ ** Processing line: ~ options[:flip_h], options[:flip_v], # flip~ ** Processing line: ~ options[:rotation_anchor_x], options[:rotation_anchor_y], # rotation anchor~ ** Processing line: ~ ] # hash keys contain corresponding values~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calls the calc_pos and calc_wrap methods.~ ** Processing line: ~ def calc state~ ** Processing line: ~ calc_pos state~ ** Processing line: ~ calc_wrap state~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Changes sprite's position on screen~ ** Processing line: ~ # Vectors have magnitude and direction, so the incremented x and y values give the car direction~ ** Processing line: ~ def calc_pos state~ ** Processing line: ~ state.x += state.angle.vector_x * state.speed # increments x by product of angle's x vector and speed~ ** Processing line: ~ state.y += state.angle.vector_y * state.speed # increments y by product of angle's y vector and speed~ ** Processing line: ~ state.speed *= 1.1 # scales speed up~ ** Processing line: ~ state.speed = state.speed.lesser(state.max_speed) # speed is either current speed or max speed, whichever has a lesser value (ensures that the car doesn't go too fast or exceed the max speed)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The screen's dimensions are 1280x720. If the car goes out of scope,~ ** Processing line: ~ # it loops back around on the screen.~ ** Processing line: ~ def calc_wrap state~ ** Processing line: ~~ ** Processing line: ~ # car returns to left side of screen if it disappears on right side of screen~ ** Processing line: ~ # sprite.width refers to tile's size, which is multipled by scale (4) to make it bigger~ ** Processing line: ~ state.x = -state.sprite.width * state.sprite.scale if state.x - 20 > 1280~ ** Processing line: ~~ ** Processing line: ~ # car wraps around to right side of screen if it disappears on the left side~ ** Processing line: ~ state.x = 1280 if state.x + state.sprite.width * state.sprite.scale + 20 < 0~ ** Processing line: ~~ ** Processing line: ~ # car wraps around to bottom of screen if it disappears at the top of the screen~ ** Processing line: ~ # if you subtract 520 pixels instead of 20 pixels, the car takes longer to reappear (try it!)~ ** Processing line: ~ state.y = 0 if state.y - 20 > 720 # if 20 pixels less than car's y position is greater than vertical scope~ ** Processing line: ~~ ** Processing line: ~ # car wraps around to top of screen if it disappears at the bottom of the screen~ ** Processing line: ~ state.y = 720 if state.y + state.sprite.height * state.sprite.scale + 20 < 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Changes angle of sprite based on user input from keyboard or controller~ ** Processing line: ~ def process_inputs args~ ** Processing line: ~~ ** Processing line: ~ # NOTE: increasing the angle doesn't mean that the car will continue to go~ ** Processing line: ~ # in a specific direction. The angle is increasing, which means that if the~ ** Processing line: ~ # left key was kept in the "down" state, the change in the angle would cause~ ** Processing line: ~ # the car to go in a counter-clockwise direction and form a circle (360 degrees)~ ** Processing line: ~ if args.inputs.keyboard.key_held.left # if left key is pressed~ ** Processing line: ~ args.state.angle += 2 # car's angle is incremented by 2~ ** Processing line: ~~ ** Processing line: ~ # The same applies to decreasing the angle. If the right key was kept in the~ ** Processing line: ~ # "down" state, the decreasing angle would cause the car to go in a clockwise~ ** Processing line: ~ # direction and form a circle (360 degrees)~ ** Processing line: ~ elsif args.inputs.keyboard.key_held.right # if right key is pressed~ ** Processing line: ~ args.state.angle -= 2 # car's angle is decremented by 2~ ** Processing line: ~~ ** Processing line: ~ # Input from a controller can also change the angle of the car~ ** Processing line: ~ elsif args.inputs.controller_one.left_analog_x_perc != 0~ ** Processing line: ~ args.state.angle += 2 * args.inputs.controller_one.left_analog_x_perc * -1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # A sprite's center of rotation can be altered~ ** Processing line: ~ # Increasing either of these numbers would dramatically increase the~ ** Processing line: ~ # car's drift when it turns!~ ** Processing line: ~ def rotation_anchor~ ** Processing line: ~ [0.7, 0.5]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets opacity value of sprite to 255 so that it is not transparent at all~ ** Processing line: ~ # Change it to 0 and you won't be able to see the car sprite on the screen~ ** Processing line: ~ def opacity~ ** Processing line: ~ 255~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the color of the sprite to white.~ ** Processing line: ~ def saturation~ ** Processing line: ~ [255, 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets definition of destination_rect (used to define the car sprite)~ ** Processing line: ~ def destination_rect state~ ** Processing line: ~ [state.x, state.y,~ ** Processing line: ~ state.sprite.width * state.sprite.scale, # multiplies by 4 to set size~ ** Processing line: ~ state.sprite.height * state.sprite.scale]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Portion of a sprite (a tile)~ ** Processing line: ~ # Sub division of sprite is denoted as a rectangle directly related to original size of .png~ ** Processing line: ~ # Tile is located at bottom left corner within a 19x10 pixel rectangle (based on sprite.width, sprite.height)~ ** Processing line: ~ def source_rect state~ ** Processing line: ~ [0, 0, state.sprite.width, state.sprite.height]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Simple - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Simple - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Simple - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/01_simple/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~ - ARRAY#intersect_rect?: Returns true or false depending on if the two rectangles intersect.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.solids: An array. The values generate a solid.~ ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE]~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app shows collisions between two boxes.~ ** Processing line: ~~ ** Processing line: ~ # Runs methods needed for game to run properly.~ ** Processing line: ~ def tick args~ ** Processing line: ~ tick_instructions args, "Sample app shows how to move a square over time and determine collision."~ ** Processing line: ~ defaults args~ ** Processing line: ~ render args~ ** Processing line: ~ calc args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets default values.~ ** Processing line: ~ def defaults args~ ** Processing line: ~ # These values represent the moving box.~ ** Processing line: ~ args.state.moving_box_speed = 10~ ** Processing line: ~ args.state.moving_box_size = 100~ ** Processing line: ~ args.state.moving_box_dx ||= 1~ ** Processing line: ~ args.state.moving_box_dy ||= 1~ ** Processing line: ~ args.state.moving_box ||= [0, 0, args.state.moving_box_size, args.state.moving_box_size] # moving_box_size is set as the width and height~ ** Processing line: ~~ ** Processing line: ~ # These values represent the center box.~ ** Processing line: ~ args.state.center_box ||= [540, 260, 200, 200, 180]~ ** Processing line: ~ args.state.center_box_collision ||= false # initially no collision~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render args~ ** Processing line: ~ # If the game state denotes that a collision has occured,~ ** Processing line: ~ # render a solid square, otherwise render a border instead.~ ** Processing line: ~ if args.state.center_box_collision~ ** Processing line: ~ args.outputs.solids << args.state.center_box~ ** Processing line: ~ else~ ** Processing line: ~ args.outputs.borders << args.state.center_box~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Then render the moving box.~ ** Processing line: ~ args.outputs.solids << args.state.moving_box~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Generally in a pipeline for a game engine, you have rendering,~ ** Processing line: ~ # game simulation (calculation), and input processing.~ ** Processing line: ~ # This fuction represents the game simulation.~ ** Processing line: ~ def calc args~ ** Processing line: ~ position_moving_box args~ ** Processing line: ~ determine_collision_center_box args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Changes the position of the moving box on the screen by multiplying the change in x (dx) and change in y (dy) by the speed,~ ** Processing line: ~ # and adding it to the current position.~ ** Processing line: ~ # dx and dy are positive if the box is moving right and up, respectively~ ** Processing line: ~ # dx and dy are negative if the box is moving left and down, respectively~ ** Processing line: ~ def position_moving_box args~ ** Processing line: ~ args.state.moving_box.x += args.state.moving_box_dx * args.state.moving_box_speed~ ** Processing line: ~ args.state.moving_box.y += args.state.moving_box_dy * args.state.moving_box_speed~ ** Processing line: ~~ ** Processing line: ~ # 1280x720 are the virtual pixels you work with (essentially 720p).~ ** Processing line: ~ screen_width = 1280~ ** Processing line: ~ screen_height = 720~ ** Processing line: ~~ ** Processing line: ~ # Position of the box is denoted by the bottom left hand corner, in~ ** Processing line: ~ # that case, we have to subtract the width of the box so that it stays~ ** Processing line: ~ # in the scene (you can try deleting the subtraction to see how it~ ** Processing line: ~ # impacts the box's movement).~ ** Processing line: ~ if args.state.moving_box.x > screen_width - args.state.moving_box_size~ ** Processing line: ~ args.state.moving_box_dx = -1 # moves left~ ** Processing line: ~ elsif args.state.moving_box.x < 0~ ** Processing line: ~ args.state.moving_box_dx = 1 # moves right~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Here, we're making sure the moving box remains within the vertical scope of the screen~ ** Processing line: ~ if args.state.moving_box.y > screen_height - args.state.moving_box_size # if the box moves too high~ ** Processing line: ~ args.state.moving_box_dy = -1 # moves down~ ** Processing line: ~ elsif args.state.moving_box.y < 0 # if the box moves too low~ ** Processing line: ~ args.state.moving_box_dy = 1 # moves up~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def determine_collision_center_box args~ ** Processing line: ~ # Collision is handled by the engine. You simply have to call the~ ** Processing line: ~ # `intersect_rect?` function.~ ** Processing line: ~ if args.state.moving_box.intersect_rect? args.state.center_box # if the two boxes intersect~ ** Processing line: ~ args.state.center_box_collision = true # then a collision happened~ ** Processing line: ~ else~ ** Processing line: ~ args.state.center_box_collision = false # otherwise, no collision happened~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Moving Objects - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Moving Objects - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Moving Objects - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/02_moving_objects/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - Hashes: Collection of unique keys and their corresponding values. The value can be found~ ** Processing line: ~ using their keys.~ ** Processing line: ~~ ** Processing line: ~ For example, if we have a "numbers" hash that stores numbers in English as the~ ** Processing line: ~ key and numbers in Spanish as the value, we'd have a hash that looks like this...~ ** Processing line: ~ numbers = { "one" => "uno", "two" => "dos", "three" => "tres" }~ ** Processing line: ~ and on it goes.~ ** Processing line: ~~ ** Processing line: ~ Now if we wanted to find the corresponding value of the "one" key, we could say~ ** Processing line: ~ puts numbers["one"]~ ** Processing line: ~ which would print "uno" to the console.~ ** Processing line: ~~ ** Processing line: ~ - num1.greater(num2): Returns the greater value.~ ** Processing line: ~ For example, if we have the command~ ** Processing line: ~ puts 4.greater(3)~ ** Processing line: ~ the number 4 would be printed to the console since it has a greater value than 3.~ ** Processing line: ~ Similar to lesser, which returns the lesser value.~ ** Processing line: ~~ ** Processing line: ~ - num1.lesser(num2): Finds the lower value of the given options.~ ** Processing line: ~ For example, in the statement~ ** Processing line: ~ a = 4.lesser(3)~ ** Processing line: ~ 3 has a lower value than 4, which means that the value of a would be set to 3,~ ** Processing line: ~ but if the statement had been~ ** Processing line: ~ a = 4.lesser(5)~ ** Processing line: ~ 4 has a lower value than 5, which means that the value of a would be set to 4.~ ** Processing line: ~~ ** Processing line: ~ - reject: Removes elements from a collection if they meet certain requirements.~ ** Processing line: ~ For example, you can derive an array of odd numbers from an original array of~ ** Processing line: ~ numbers 1 through 10 by rejecting all elements that are even (or divisible by 2).~ ** Processing line: ~~ ** Processing line: ~ - find_all: Finds all values that satisfy specific requirements.~ ** Processing line: ~ For example, you can find all elements of a collection that are divisible by 2~ ** Processing line: ~ or find all objects that have intersected with another object.~ ** Processing line: ~~ ** Processing line: ~ - abs: Returns the absolute value.~ ** Processing line: ~ For example, the command~ ** Processing line: ~ (-30).abs~ ** Processing line: ~ would return 30 as a result.~ ** Processing line: ~~ ** Processing line: ~ - map: Ruby method used to transform data; used in arrays, hashes, and collections.~ ** Processing line: ~ Can be used to perform an action on every element of a collection, such as multiplying~ ** Processing line: ~ each element by 2 or declaring every element as a new entity.~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.keyboard.KEY: Determines if a key has been pressed.~ ** Processing line: ~ For more information about the keyboard, take a look at mygame/documentation/06-keyboard.md.~ ** Processing line: ~~ ** Processing line: ~ - ARRAY#intersect_rect?: Returns true or false depending on if the two rectangles intersect.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.solids: An array. The values generate a solid.~ ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE]~ ** Processing line: ~ For more information about solids, go to mygame/documentation/03-solids-and-borders.md.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # Calls methods needed for game to run properly~ ** Processing line: ~ def tick args~ ** Processing line: ~ tick_instructions args, "Use LEFT and RIGHT arrow keys to move and SPACE to jump."~ ** Processing line: ~ defaults args~ ** Processing line: ~ render args~ ** Processing line: ~ calc args~ ** Processing line: ~ input args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # sets default values and creates empty collections~ ** Processing line: ~ # initialization only happens in the first frame~ ** Processing line: ~ def defaults args~ ** Processing line: ~ fiddle args~ ** Processing line: ~ args.state.enemy.hammers ||= []~ ** Processing line: ~ args.state.enemy.hammer_queue ||= []~ ** Processing line: ~ args.state.tick_count = args.state.tick_count~ ** Processing line: ~ args.state.bridge_top = 128~ ** Processing line: ~ args.state.player.x ||= 0 # initializes player's properties~ ** Processing line: ~ args.state.player.y ||= args.state.bridge_top~ ** Processing line: ~ args.state.player.w ||= 64~ ** Processing line: ~ args.state.player.h ||= 64~ ** Processing line: ~ args.state.player.dy ||= 0~ ** Processing line: ~ args.state.player.dx ||= 0~ ** Processing line: ~ args.state.enemy.x ||= 800 # initializes enemy's properties~ ** Processing line: ~ args.state.enemy.y ||= 0~ ** Processing line: ~ args.state.enemy.w ||= 128~ ** Processing line: ~ args.state.enemy.h ||= 128~ ** Processing line: ~ args.state.enemy.dy ||= 0~ ** Processing line: ~ args.state.enemy.dx ||= 0~ ** Processing line: ~ args.state.game_over_at ||= 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # sets enemy, player, hammer values~ ** Processing line: ~ def fiddle args~ ** Processing line: ~ args.state.gravity = -0.3~ ** Processing line: ~ args.state.enemy_jump_power = 10 # sets enemy values~ ** Processing line: ~ args.state.enemy_jump_interval = 60~ ** Processing line: ~ args.state.hammer_throw_interval = 40 # sets hammer values~ ** Processing line: ~ args.state.hammer_launch_power_default = 5~ ** Processing line: ~ args.state.hammer_launch_power_near = 2~ ** Processing line: ~ args.state.hammer_launch_power_far = 7~ ** Processing line: ~ args.state.hammer_upward_launch_power = 15~ ** Processing line: ~ args.state.max_hammers_per_volley = 10~ ** Processing line: ~ args.state.gap_between_hammers = 10~ ** Processing line: ~ args.state.player_jump_power = 10 # sets player values~ ** Processing line: ~ args.state.player_jump_power_duration = 10~ ** Processing line: ~ args.state.player_max_run_speed = 10~ ** Processing line: ~ args.state.player_speed_slowdown_rate = 0.9~ ** Processing line: ~ args.state.player_acceleration = 1~ ** Processing line: ~ args.state.hammer_size = 32~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # outputs objects onto the screen~ ** Processing line: ~ def render args~ ** Processing line: ~ args.outputs.solids << 20.map_with_index do |i| # uses 20 squares to form bridge~ ** Processing line: ~ # sets x by multiplying 64 to index to find pixel value (places all squares side by side)~ ** Processing line: ~ # subtracts 64 from bridge_top because position is denoted by bottom left corner~ ** Processing line: ~ [i * 64, args.state.bridge_top - 64, 64, 64]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.solids << [args.state.x, args.state.y, args.state.w, args.state.h, 255, 0, 0]~ ** Processing line: ~ args.outputs.solids << [args.state.player.x, args.state.player.y, args.state.player.w, args.state.player.h, 255, 0, 0] # outputs player onto screen (red box)~ ** Processing line: ~ args.outputs.solids << [args.state.enemy.x, args.state.enemy.y, args.state.enemy.w, args.state.enemy.h, 0, 255, 0] # outputs enemy onto screen (green box)~ ** Processing line: ~ args.outputs.solids << args.state.enemy.hammers # outputs enemy's hammers onto screen~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Performs calculations to move objects on the screen~ ** Processing line: ~ def calc args~ ** Processing line: ~~ ** Processing line: ~ # Since velocity is the change in position, the change in x increases by dx. Same with y and dy.~ ** Processing line: ~ args.state.player.x += args.state.player.dx~ ** Processing line: ~ args.state.player.y += args.state.player.dy~ ** Processing line: ~~ ** Processing line: ~ # Since acceleration is the change in velocity, the change in y (dy) increases every frame~ ** Processing line: ~ args.state.player.dy += args.state.gravity~ ** Processing line: ~~ ** Processing line: ~ # player's y position is either current y position or y position of top of~ ** Processing line: ~ # bridge, whichever has a greater value~ ** Processing line: ~ # ensures that the player never goes below the bridge~ ** Processing line: ~ args.state.player.y = args.state.player.y.greater(args.state.bridge_top)~ ** Processing line: ~~ ** Processing line: ~ # player's x position is either the current x position or 0, whichever has a greater value~ ** Processing line: ~ # ensures that the player doesn't go too far left (out of the screen's scope)~ ** Processing line: ~ args.state.player.x = args.state.player.x.greater(0)~ ** Processing line: ~~ ** Processing line: ~ # player is not falling if it is located on the top of the bridge~ ** Processing line: ~ args.state.player.falling = false if args.state.player.y == args.state.bridge_top~ ** Processing line: ~ args.state.player.rect = [args.state.player.x, args.state.player.y, args.state.player.h, args.state.player.w] # sets definition for player~ ** Processing line: ~~ ** Processing line: ~ args.state.enemy.x += args.state.enemy.dx # velocity; change in x increases by dx~ ** Processing line: ~ args.state.enemy.y += args.state.enemy.dy # same with y and dy~ ** Processing line: ~~ ** Processing line: ~ # ensures that the enemy never goes below the bridge~ ** Processing line: ~ args.state.enemy.y = args.state.enemy.y.greater(args.state.bridge_top)~ ** Processing line: ~~ ** Processing line: ~ # ensures that the enemy never goes too far left (outside the screen's scope)~ ** Processing line: ~ args.state.enemy.x = args.state.enemy.x.greater(0)~ ** Processing line: ~~ ** Processing line: ~ # objects that go up must come down because of gravity~ ** Processing line: ~ args.state.enemy.dy += args.state.gravity~ ** Processing line: ~~ ** Processing line: ~ args.state.enemy.y = args.state.enemy.y.greater(args.state.bridge_top)~ ** Processing line: ~~ ** Processing line: ~ #sets definition of enemy~ ** Processing line: ~ args.state.enemy.rect = [args.state.enemy.x, args.state.enemy.y, args.state.enemy.h, args.state.enemy.w]~ ** Processing line: ~~ ** Processing line: ~ if args.state.enemy.y == args.state.bridge_top # if enemy is located on the top of the bridge~ ** Processing line: ~ args.state.enemy.dy = 0 # there is no change in y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if 60 frames have passed and the enemy is not moving vertically~ ** Processing line: ~ if args.state.tick_count.mod_zero?(args.state.enemy_jump_interval) && args.state.enemy.dy == 0~ ** Processing line: ~ args.state.enemy.dy = args.state.enemy_jump_power # the enemy jumps up~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if 40 frames have passed or 5 frames have passed since the game ended~ ** Processing line: ~ if args.state.tick_count.mod_zero?(args.state.hammer_throw_interval) || args.state.game_over_at.elapsed_time == 5~ ** Processing line: ~ # rand will return a number greater than or equal to 0 and less than given variable's value (since max is excluded)~ ** Processing line: ~ # that is why we're adding 1, to include the max possibility~ ** Processing line: ~ volley_dx = (rand(args.state.hammer_launch_power_default) + 1) * -1 # horizontal movement (follow order of operations)~ ** Processing line: ~~ ** Processing line: ~ # if the horizontal distance between the player and enemy is less than 128 pixels~ ** Processing line: ~ if (args.state.player.x - args.state.enemy.x).abs < 128~ ** Processing line: ~ # the change in x won't be that great since the enemy and player are closer to each other~ ** Processing line: ~ volley_dx = (rand(args.state.hammer_launch_power_near) + 1) * -1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if the horizontal distance between the player and enemy is greater than 300 pixels~ ** Processing line: ~ if (args.state.player.x - args.state.enemy.x).abs > 300~ ** Processing line: ~ # change in x will be more drastic since player and enemy are so far apart~ ** Processing line: ~ volley_dx = (rand(args.state.hammer_launch_power_far) + 1) * -1 # more drastic change~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ (rand(args.state.max_hammers_per_volley) + 1).map_with_index do |i|~ ** Processing line: ~ args.state.enemy.hammer_queue << { # stores hammer values in a hash~ ** Processing line: ~ x: args.state.enemy.x,~ ** Processing line: ~ w: args.state.hammer_size,~ ** Processing line: ~ h: args.state.hammer_size,~ ** Processing line: ~ dx: volley_dx, # change in horizontal position~ ** Processing line: ~ # multiplication operator takes precedence over addition operator~ ** Processing line: ~ throw_at: args.state.tick_count + i * args.state.gap_between_hammers~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # add elements from hammer_queue collection to the hammers collection by~ ** Processing line: ~ # finding all hammers that were thrown before the current frame (have already been thrown)~ ** Processing line: ~ args.state.enemy.hammers += args.state.enemy.hammer_queue.find_all do |h|~ ** Processing line: ~ h[:throw_at] < args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.enemy.hammers.each do |h| # sets values for all hammers in collection~ ** Processing line: ~ h[:y] ||= args.state.enemy.y + 130~ ** Processing line: ~ h[:dy] ||= args.state.hammer_upward_launch_power~ ** Processing line: ~ h[:dy] += args.state.gravity # acceleration is change in gravity~ ** Processing line: ~ h[:x] += h[:dx] # incremented by change in position~ ** Processing line: ~ h[:y] += h[:dy]~ ** Processing line: ~ h[:rect] = [h[:x], h[:y], h[:w], h[:h]] # sets definition of hammer's rect~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # reject hammers that have been thrown before current frame (have already been thrown)~ ** Processing line: ~ args.state.enemy.hammer_queue = args.state.enemy.hammer_queue.reject do |h|~ ** Processing line: ~ h[:throw_at] < args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # any hammers with a y position less than 0 are rejected from the hammers collection~ ** Processing line: ~ # since they have gone too far down (outside the scope's screen)~ ** Processing line: ~ args.state.enemy.hammers = args.state.enemy.hammers.reject { |h| h[:y] < 0 }~ ** Processing line: ~~ ** Processing line: ~ # if there are any hammers that intersect with (or hit) the player,~ ** Processing line: ~ # the reset_player method is called (so the game can start over)~ ** Processing line: ~ if args.state.enemy.hammers.any? { |h| h[:rect].intersect_rect?(args.state.player.rect) }~ ** Processing line: ~ reset_player args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if the enemy's rect intersects with (or hits) the player,~ ** Processing line: ~ # the reset_player method is called (so the game can start over)~ ** Processing line: ~ if args.state.enemy.rect.intersect_rect? args.state.player.rect~ ** Processing line: ~ reset_player args~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Resets the player by changing its properties back to the values they had at initialization~ ** Processing line: ~ def reset_player args~ ** Processing line: ~ args.state.player.x = 0~ ** Processing line: ~ args.state.player.y = args.state.bridge_top~ ** Processing line: ~ args.state.player.dy = 0~ ** Processing line: ~ args.state.player.dx = 0~ ** Processing line: ~ args.state.enemy.hammers.clear # empties hammer collection~ ** Processing line: ~ args.state.enemy.hammer_queue.clear # empties hammer_queue~ ** Processing line: ~ args.state.game_over_at = args.state.tick_count # game_over_at set to current frame (or passage of time)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Processes input from the user to move the player~ ** Processing line: ~ def input args~ ** Processing line: ~ if args.inputs.keyboard.space # if the user presses the space bar~ ** Processing line: ~ args.state.player.jumped_at ||= args.state.tick_count # jumped_at is set to current frame~ ** Processing line: ~~ ** Processing line: ~ # if the time that has passed since the jump is less than the player's jump duration and~ ** Processing line: ~ # the player is not falling~ ** Processing line: ~ if args.state.player.jumped_at.elapsed_time < args.state.player_jump_power_duration && !args.state.player.falling~ ** Processing line: ~ args.state.player.dy = args.state.player_jump_power # change in y is set to power of player's jump~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if the space bar is in the "up" state (or not being pressed down)~ ** Processing line: ~ if args.inputs.keyboard.key_up.space~ ** Processing line: ~ args.state.player.jumped_at = nil # jumped_at is empty~ ** Processing line: ~ args.state.player.falling = true # the player is falling~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.keyboard.left # if left key is pressed~ ** Processing line: ~ args.state.player.dx -= args.state.player_acceleration # dx decreases by acceleration (player goes left)~ ** Processing line: ~ # dx is either set to current dx or the negative max run speed (which would be -10),~ ** Processing line: ~ # whichever has a greater value~ ** Processing line: ~ args.state.player.dx = args.state.player.dx.greater(-args.state.player_max_run_speed)~ ** Processing line: ~ elsif args.inputs.keyboard.right # if right key is pressed~ ** Processing line: ~ args.state.player.dx += args.state.player_acceleration # dx increases by acceleration (player goes right)~ ** Processing line: ~ # dx is either set to current dx or max run speed (which would be 10),~ ** Processing line: ~ # whichever has a lesser value~ ** Processing line: ~ args.state.player.dx = args.state.player.dx.lesser(args.state.player_max_run_speed)~ ** Processing line: ~ else~ ** Processing line: ~ args.state.player.dx *= args.state.player_speed_slowdown_rate # dx is scaled down~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.space ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Entities - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Entities - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Entities - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/03_entities/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - map: Ruby method used to transform data; used in arrays, hashes, and collections.~ ** Processing line: ~ Can be used to perform an action on every element of a collection, such as multiplying~ ** Processing line: ~ each element by 2 or declaring every element as a new entity.~ ** Processing line: ~~ ** Processing line: ~ - reject: Removes elements from a collection if they meet certain requirements.~ ** Processing line: ~ For example, you can derive an array of odd numbers from an original array of~ ** Processing line: ~ numbers 1 through 10 by rejecting all elements that are even (or divisible by 2).~ ** Processing line: ~~ ** Processing line: ~ - args.state.new_entity: Used when we want to create a new object, like a sprite or button.~ ** Processing line: ~ In this sample app, new_entity is used to define the properties of enemies and bullets.~ ** Processing line: ~ (Remember, you can use state to define ANY property and it will be retained across frames.)~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.labels: An array. The values generate a label on the screen.~ ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~~ ** Processing line: ~ - ARRAY#intersect_rect?: Returns true or false depending on if the two rectangles intersect.~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.mouse.click.point.(x|y): The x and y location of the mouse.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app shows enemies that contain an id value and the time they were created.~ ** Processing line: ~ # These enemies can be removed by shooting at them with bullets.~ ** Processing line: ~~ ** Processing line: ~ # Calls all methods necessary for the game to function properly.~ ** Processing line: ~ def tick args~ ** Processing line: ~ tick_instructions args, "Sample app shows how to use args.state.new_entity along with collisions. CLICK to shoot a bullet."~ ** Processing line: ~ defaults args~ ** Processing line: ~ render args~ ** Processing line: ~ calc args~ ** Processing line: ~ process_inputs args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets default values~ ** Processing line: ~ # Enemies and bullets start off as empty collections~ ** Processing line: ~ def defaults args~ ** Processing line: ~ args.state.enemies ||= []~ ** Processing line: ~ args.state.bullets ||= []~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Provides each enemy in enemies collection with rectangular border,~ ** Processing line: ~ # as well as a label showing id and when they were created~ ** Processing line: ~ def render args~ ** Processing line: ~ # When you're calling a method that takes no arguments, you can use this & syntax on map.~ ** Processing line: ~ # Numbers are being added to x and y in order to keep the text within the enemy's borders.~ ** Processing line: ~ args.outputs.borders << args.state.enemies.map(&:rect)~ ** Processing line: ~ args.outputs.labels << args.state.enemies.flat_map do |enemy|~ ** Processing line: ~ [~ ** Processing line: ~ [enemy.x + 4, enemy.y + 29, "id: #{enemy.entity_id}", -3, 0],~ ** Processing line: ~ [enemy.x + 4, enemy.y + 17, "created_at: #{enemy.created_at}", -3, 0] # frame enemy was created~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs bullets in bullets collection as rectangular solids~ ** Processing line: ~ args.outputs.solids << args.state.bullets.map(&:rect)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calls all methods necessary for performing calculations~ ** Processing line: ~ def calc args~ ** Processing line: ~ add_new_enemies_if_needed args~ ** Processing line: ~ move_bullets args~ ** Processing line: ~ calculate_collisions args~ ** Processing line: ~ remove_bullets_of_screen args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds enemies to the enemies collection and sets their values~ ** Processing line: ~ def add_new_enemies_if_needed args~ ** Processing line: ~ return if args.state.enemies.length >= 10 # if 10 or more enemies, enemies are not added~ ** Processing line: ~ return unless args.state.bullets.length == 0 # if user has not yet shot bullet, no enemies are added~ ** Processing line: ~~ ** Processing line: ~ args.state.enemies += (10 - args.state.enemies.length).map do # adds enemies so there are 10 total~ ** Processing line: ~ args.state.new_entity(:enemy) do |e| # each enemy is declared as a new entity~ ** Processing line: ~ e.x = 640 + 500 * rand # each enemy is given random position on screen~ ** Processing line: ~ e.y = 600 * rand + 50~ ** Processing line: ~ e.rect = [e.x, e.y, 130, 30] # sets definition for enemy's rect~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves bullets across screen~ ** Processing line: ~ # Sets definition of the bullets~ ** Processing line: ~ def move_bullets args~ ** Processing line: ~ args.state.bullets.each do |bullet| # perform action on each bullet in collection~ ** Processing line: ~ bullet.x += bullet.speed # increment x by speed (bullets fly horizontally across screen)~ ** Processing line: ~~ ** Processing line: ~ # By randomizing the value that increments bullet.y, the bullet does not fly straight up and out~ ** Processing line: ~ # of the scope of the screen. Try removing what follows bullet.speed, or changing 0.25 to 1.25 to~ ** Processing line: ~ # see what happens to the bullet's movement.~ ** Processing line: ~ bullet.y += bullet.speed.*(0.25).randomize(:ratio, :sign)~ ** Processing line: ~ bullet.rect = [bullet.x, bullet.y, bullet.size, bullet.size] # sets definition of bullet's rect~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Determines if a bullet hits an enemy~ ** Processing line: ~ def calculate_collisions args~ ** Processing line: ~ args.state.bullets.each do |bullet| # perform action on every bullet and enemy in collections~ ** Processing line: ~ args.state.enemies.each do |enemy|~ ** Processing line: ~ # if bullet has not exploded yet and the bullet hits an enemy~ ** Processing line: ~ if !bullet.exploded && bullet.rect.intersect_rect?(enemy.rect)~ ** Processing line: ~ bullet.exploded = true # bullet explodes~ ** Processing line: ~ enemy.dead = true # enemy is killed~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # All exploded bullets are rejected or removed from the bullets collection~ ** Processing line: ~ # and any dead enemy is rejected from the enemies collection.~ ** Processing line: ~ args.state.bullets = args.state.bullets.reject(&:exploded)~ ** Processing line: ~ args.state.enemies = args.state.enemies.reject(&:dead)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Bullets are rejected from bullets collection once their position exceeds the width of screen~ ** Processing line: ~ def remove_bullets_of_screen args~ ** Processing line: ~ args.state.bullets = args.state.bullets.reject { |bullet| bullet.x > 1280 } # screen width is 1280~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calls fire_bullet method~ ** Processing line: ~ def process_inputs args~ ** Processing line: ~ fire_bullet args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Once mouse is clicked by the user to fire a bullet, a new bullet is added to bullets collection~ ** Processing line: ~ def fire_bullet args~ ** Processing line: ~ return unless args.inputs.mouse.click # return unless mouse is clicked~ ** Processing line: ~ args.state.bullets << args.state.new_entity(:bullet) do |bullet| # new bullet is declared a new entity~ ** Processing line: ~ bullet.y = args.inputs.mouse.click.point.y # set to the y value of where the mouse was clicked~ ** Processing line: ~ bullet.x = 0 # starts on the left side of the screen~ ** Processing line: ~ bullet.size = 10~ ** Processing line: ~ bullet.speed = 10 * rand + 2 # speed of a bullet is randomized~ ** Processing line: ~ bullet.rect = [bullet.x, bullet.y, bullet.size, bullet.size] # definition is set~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.space ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Box Collision - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Box Collision - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Box Collision - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/04_box_collision/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - first: Returns the first element of the array.~ ** Processing line: ~ For example, if we have an array~ ** Processing line: ~ numbers = [1, 2, 3, 4, 5]~ ** Processing line: ~ and we call first by saying~ ** Processing line: ~ numbers.first~ ** Processing line: ~ the number 1 will be returned because it is the first element of the numbers array.~ ** Processing line: ~~ ** Processing line: ~ - num1.idiv(num2): Divides two numbers and returns an integer.~ ** Processing line: ~ For example,~ ** Processing line: ~ 16.idiv(3) = 5, because 16 / 3 is 5.33333 returned as an integer.~ ** Processing line: ~ 16.idiv(4) = 4, because 16 / 4 is 4 and already has no decimal.~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - find_all: Finds all values that satisfy specific requirements.~ ** Processing line: ~~ ** Processing line: ~ - ARRAY#intersect_rect?: An array with at least four values is~ ** Processing line: ~ considered a rect. The intersect_rect? function returns true~ ** Processing line: ~ or false depending on if the two rectangles intersect.~ ** Processing line: ~~ ** Processing line: ~ - reject: Removes elements from a collection if they meet certain requirements.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app allows users to create tiles and place them anywhere on the screen as obstacles.~ ** Processing line: ~ # The player can then move and maneuver around them.~ ** Processing line: ~~ ** Processing line: ~ class PoorManPlatformerPhysics~ ** Processing line: ~ attr_accessor :grid, :inputs, :state, :outputs~ ** Processing line: ~~ ** Processing line: ~ # Calls all methods necessary for the app to run successfully.~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ calc~ ** Processing line: ~ process_inputs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets default values for variables.~ ** Processing line: ~ # The ||= sign means that the variable will only be set to the value following the = sign if the value has~ ** Processing line: ~ # not already been set before. Intialization happens only in the first frame.~ ** Processing line: ~ def defaults~ ** Processing line: ~ state.tile_size = 64~ ** Processing line: ~ state.gravity = -0.2~ ** Processing line: ~ state.previous_tile_size ||= state.tile_size~ ** Processing line: ~ state.x ||= 0~ ** Processing line: ~ state.y ||= 800~ ** Processing line: ~ state.dy ||= 0~ ** Processing line: ~ state.dx ||= 0~ ** Processing line: ~ state.world ||= []~ ** Processing line: ~ state.world_lookup ||= {}~ ** Processing line: ~ state.world_collision_rects ||= []~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs solids and borders of different colors for the world and collision_rects collections.~ ** Processing line: ~ def render~ ** Processing line: ~~ ** Processing line: ~ # Sets a black background on the screen (Comment this line out and the background will become white.)~ ** Processing line: ~ # Also note that black is the default color for when no color is assigned.~ ** Processing line: ~ outputs.solids << grid.rect~ ** Processing line: ~~ ** Processing line: ~ # The position, size, and color (white) are set for borders given to the world collection.~ ** Processing line: ~ # Try changing the color by assigning different numbers (between 0 and 255) to the last three parameters.~ ** Processing line: ~ outputs.borders << state.world.map do |x, y|~ ** Processing line: ~ [x * state.tile_size,~ ** Processing line: ~ y * state.tile_size,~ ** Processing line: ~ state.tile_size,~ ** Processing line: ~ state.tile_size, 255, 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The top, bottom, and sides of the borders for collision_rects are different colors.~ ** Processing line: ~ outputs.borders << state.world_collision_rects.map do |e|~ ** Processing line: ~ [~ ** Processing line: ~ [e[:top], 0, 170, 0], # top is a shade of green~ ** Processing line: ~ [e[:bottom], 0, 100, 170], # bottom is a shade of greenish-blue~ ** Processing line: ~ [e[:left_right], 170, 0, 0], # left and right are a shade of red~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the position, size, and color (a shade of green) of the borders of only the player's~ ** Processing line: ~ # box and outputs it. If you change the 180 to 0, the player's box will be black and you~ ** Processing line: ~ # won't be able to see it (because it will match the black background).~ ** Processing line: ~ outputs.borders << [state.x,~ ** Processing line: ~ state.y,~ ** Processing line: ~ state.tile_size,~ ** Processing line: ~ state.tile_size, 0, 180, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calls methods needed to perform calculations.~ ** Processing line: ~ def calc~ ** Processing line: ~ calc_world_lookup~ ** Processing line: ~ calc_player~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Performs calculations on world_lookup and sets values.~ ** Processing line: ~ def calc_world_lookup~ ** Processing line: ~~ ** Processing line: ~ # If the tile size isn't equal to the previous tile size,~ ** Processing line: ~ # the previous tile size is set to the tile size,~ ** Processing line: ~ # and world_lookup hash is set to empty.~ ** Processing line: ~ if state.tile_size != state.previous_tile_size~ ** Processing line: ~ state.previous_tile_size = state.tile_size~ ** Processing line: ~ state.world_lookup = {} # empty hash~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # return if the world_lookup hash has keys (or, in other words, is not empty)~ ** Processing line: ~ # return unless the world collection has values inside of it (or is not empty)~ ** Processing line: ~ return if state.world_lookup.keys.length > 0~ ** Processing line: ~ return unless state.world.length > 0~ ** Processing line: ~~ ** Processing line: ~ # Starts with an empty hash for world_lookup.~ ** Processing line: ~ # Searches through the world and finds the coordinates that exist.~ ** Processing line: ~ state.world_lookup = {}~ ** Processing line: ~ state.world.each { |x, y| state.world_lookup[[x, y]] = true }~ ** Processing line: ~~ ** Processing line: ~ # Assigns world_collision_rects for every sprite drawn.~ ** Processing line: ~ state.world_collision_rects =~ ** Processing line: ~ state.world_lookup~ ** Processing line: ~ .keys~ ** Processing line: ~ .map do |coord_x, coord_y|~ ** Processing line: ~ s = state.tile_size~ ** Processing line: ~ # multiply by tile size so the grid coordinates; sets pixel value~ ** Processing line: ~ # don't forget that position is denoted by bottom left corner~ ** Processing line: ~ # set x = coord_x or y = coord_y and see what happens!~ ** Processing line: ~ x = s * coord_x~ ** Processing line: ~ y = s * coord_y~ ** Processing line: ~ {~ ** Processing line: ~ # The values added to x, y, and s position the world_collision_rects so they all appear~ ** Processing line: ~ # stacked (on top of world rects) but don't directly overlap.~ ** Processing line: ~ # Remove these added values and mess around with the rect placement!~ ** Processing line: ~ args: [coord_x, coord_y],~ ** Processing line: ~ left_right: [x, y + 4, s, s - 6], # hash keys and values~ ** Processing line: ~ top: [x + 4, y + 6, s - 8, s - 6],~ ** Processing line: ~ bottom: [x + 1, y - 1, s - 2, s - 8],~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Performs calculations to change the x and y values of the player's box.~ ** Processing line: ~ def calc_player~ ** Processing line: ~~ ** Processing line: ~ # Since acceleration is the change in velocity, the change in y (dy) increases every frame.~ ** Processing line: ~ # What goes up must come down because of gravity.~ ** Processing line: ~ state.dy += state.gravity~ ** Processing line: ~~ ** Processing line: ~ # Calls the calc_box_collision and calc_edge_collision methods.~ ** Processing line: ~ calc_box_collision~ ** Processing line: ~ calc_edge_collision~ ** Processing line: ~~ ** Processing line: ~ # Since velocity is the change in position, the change in y increases by dy. Same with x and dx.~ ** Processing line: ~ state.y += state.dy~ ** Processing line: ~ state.x += state.dx~ ** Processing line: ~~ ** Processing line: ~ # Scales dx down.~ ** Processing line: ~ state.dx *= 0.8~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calls methods needed to determine collisions between player and world_collision rects.~ ** Processing line: ~ def calc_box_collision~ ** Processing line: ~ return unless state.world_lookup.keys.length > 0 # return unless hash has atleast 1 key~ ** Processing line: ~ collision_floor!~ ** Processing line: ~ collision_left!~ ** Processing line: ~ collision_right!~ ** Processing line: ~ collision_ceiling!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds collisions between the bottom of the player's rect and the top of a world_collision_rect.~ ** Processing line: ~ def collision_floor!~ ** Processing line: ~ return unless state.dy <= 0 # return unless player is going down or is as far down as possible~ ** Processing line: ~ player_rect = [state.x, state.y - 0.1, state.tile_size, state.tile_size] # definition of player~ ** Processing line: ~~ ** Processing line: ~ # Goes through world_collision_rects to find all intersections between the bottom of player's rect and~ ** Processing line: ~ # the top of a world_collision_rect (hence the "-0.1" above)~ ** Processing line: ~ floor_collisions = state.world_collision_rects~ ** Processing line: ~ .find_all { |r| r[:top].intersect_rect?(player_rect, collision_tollerance) }~ ** Processing line: ~ .first~ ** Processing line: ~~ ** Processing line: ~ return unless floor_collisions # return unless collision occurred~ ** Processing line: ~ state.y = floor_collisions[:top].top # player's y is set to the y of the top of the collided rect~ ** Processing line: ~ state.dy = 0 # if a collision occurred, the player's rect isn't moving because its path is blocked~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds collisions between the player's left side and the right side of a world_collision_rect.~ ** Processing line: ~ def collision_left!~ ** Processing line: ~ return unless state.dx < 0 # return unless player is moving left~ ** Processing line: ~ player_rect = [state.x - 0.1, state.y, state.tile_size, state.tile_size]~ ** Processing line: ~~ ** Processing line: ~ # Goes through world_collision_rects to find all intersections beween the player's left side and the~ ** Processing line: ~ # right side of a world_collision_rect.~ ** Processing line: ~ left_side_collisions = state.world_collision_rects~ ** Processing line: ~ .find_all { |r| r[:left_right].intersect_rect?(player_rect, collision_tollerance) }~ ** Processing line: ~ .first~ ** Processing line: ~~ ** Processing line: ~ return unless left_side_collisions # return unless collision occurred~ ** Processing line: ~~ ** Processing line: ~ # player's x is set to the value of the x of the collided rect's right side~ ** Processing line: ~ state.x = left_side_collisions[:left_right].right~ ** Processing line: ~ state.dx = 0 # player isn't moving left because its path is blocked~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds collisions between the right side of the player and the left side of a world_collision_rect.~ ** Processing line: ~ def collision_right!~ ** Processing line: ~ return unless state.dx > 0 # return unless player is moving right~ ** Processing line: ~ player_rect = [state.x + 0.1, state.y, state.tile_size, state.tile_size]~ ** Processing line: ~~ ** Processing line: ~ # Goes through world_collision_rects to find all intersections between the player's right side~ ** Processing line: ~ # and the left side of a world_collision_rect (hence the "+0.1" above)~ ** Processing line: ~ right_side_collisions = state.world_collision_rects~ ** Processing line: ~ .find_all { |r| r[:left_right].intersect_rect?(player_rect, collision_tollerance) }~ ** Processing line: ~ .first~ ** Processing line: ~~ ** Processing line: ~ return unless right_side_collisions # return unless collision occurred~ ** Processing line: ~~ ** Processing line: ~ # player's x is set to the value of the collided rect's left, minus the size of a rect~ ** Processing line: ~ # tile size is subtracted because player's position is denoted by bottom left corner~ ** Processing line: ~ state.x = right_side_collisions[:left_right].left - state.tile_size~ ** Processing line: ~ state.dx = 0 # player isn't moving right because its path is blocked~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds collisions between the top of the player's rect and the bottom of a world_collision_rect.~ ** Processing line: ~ def collision_ceiling!~ ** Processing line: ~ return unless state.dy > 0 # return unless player is moving up~ ** Processing line: ~ player_rect = [state.x, state.y + 0.1, state.tile_size, state.tile_size]~ ** Processing line: ~~ ** Processing line: ~ # Goes through world_collision_rects to find intersections between the bottom of a~ ** Processing line: ~ # world_collision_rect and the top of the player's rect (hence the "+0.1" above)~ ** Processing line: ~ ceil_collisions = state.world_collision_rects~ ** Processing line: ~ .find_all { |r| r[:bottom].intersect_rect?(player_rect, collision_tollerance) }~ ** Processing line: ~ .first~ ** Processing line: ~~ ** Processing line: ~ return unless ceil_collisions # return unless collision occurred~ ** Processing line: ~~ ** Processing line: ~ # player's y is set to the bottom y of the rect it collided with, minus the size of a rect~ ** Processing line: ~ state.y = ceil_collisions[:bottom].y - state.tile_size~ ** Processing line: ~ state.dy = 0 # if a collision occurred, the player isn't moving up because its path is blocked~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Makes sure the player remains within the screen's dimensions.~ ** Processing line: ~ def calc_edge_collision~ ** Processing line: ~~ ** Processing line: ~ #Ensures that the player doesn't fall below the map.~ ** Processing line: ~ if state.y < 0~ ** Processing line: ~ state.y = 0~ ** Processing line: ~ state.dy = 0~ ** Processing line: ~~ ** Processing line: ~ #Ensures that the player doesn't go too high.~ ** Processing line: ~ # Position of player is denoted by bottom left hand corner, which is why we have to subtract the~ ** Processing line: ~ # size of the player's box (so it remains visible on the screen)~ ** Processing line: ~ elsif state.y > 720 - state.tile_size # if the player's y position exceeds the height of screen~ ** Processing line: ~ state.y = 720 - state.tile_size # the player will remain as high as possible while staying on screen~ ** Processing line: ~ state.dy = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Ensures that the player remains in the horizontal range that it is supposed to.~ ** Processing line: ~ if state.x >= 1280 - state.tile_size && state.dx > 0 # if player moves too far right~ ** Processing line: ~ state.x = 1280 - state.tile_size # player will remain as right as possible while staying on screen~ ** Processing line: ~ state.dx = 0~ ** Processing line: ~ elsif state.x <= 0 && state.dx < 0 # if player moves too far left~ ** Processing line: ~ state.x = 0 # player will remain as left as possible while remaining on screen~ ** Processing line: ~ state.dx = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Processes input from the user on the keyboard.~ ** Processing line: ~ def process_inputs~ ** Processing line: ~ if inputs.mouse.down~ ** Processing line: ~ state.world_lookup = {}~ ** Processing line: ~ x, y = to_coord inputs.mouse.down.point # gets x, y coordinates for the grid~ ** Processing line: ~~ ** Processing line: ~ if state.world.any? { |loc| loc == [x, y] } # checks if coordinates duplicate~ ** Processing line: ~ state.world = state.world.reject { |loc| loc == [x, y] } # erases tile space~ ** Processing line: ~ else~ ** Processing line: ~ state.world << [x, y] # If no duplicates, adds to world collection~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets dx to 0 if the player lets go of arrow keys.~ ** Processing line: ~ if inputs.keyboard.key_up.right~ ** Processing line: ~ state.dx = 0~ ** Processing line: ~ elsif inputs.keyboard.key_up.left~ ** Processing line: ~ state.dx = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets dx to 3 in whatever direction the player chooses.~ ** Processing line: ~ if inputs.keyboard.key_held.right # if right key is pressed~ ** Processing line: ~ state.dx = 3~ ** Processing line: ~ elsif inputs.keyboard.key_held.left # if left key is pressed~ ** Processing line: ~ state.dx = -3~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Sets dy to 5 to make the player ~fly~ when they press the space bar~ ** Processing line: ~ if inputs.keyboard.key_held.space~ ** Processing line: ~ state.dy = 5~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_coord point~ ** Processing line: ~~ ** Processing line: ~ # Integer divides (idiv) point.x to turn into grid~ ** Processing line: ~ # Then, you can just multiply each integer by state.tile_size later so the grid coordinates.~ ** Processing line: ~ [point.x.idiv(state.tile_size), point.y.idiv(state.tile_size)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Represents the tolerance for a collision between the player's rect and another rect.~ ** Processing line: ~ def collision_tollerance~ ** Processing line: ~ 0.0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $platformer_physics = PoorManPlatformerPhysics.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $platformer_physics.grid = args.grid~ ** Processing line: ~ $platformer_physics.inputs = args.inputs~ ** Processing line: ~ $platformer_physics.state = args.state~ ** Processing line: ~ $platformer_physics.outputs = args.outputs~ ** Processing line: ~ $platformer_physics.tick~ ** Processing line: ~ tick_instructions args, "Sample app shows platformer collisions. CLICK to place box. ARROW keys to move around. SPACE to jump."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Box Collision 2 - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Box Collision 2 - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Box Collision 2 - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/05_box_collision_2/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - times: Performs an action a specific number of times.~ ** Processing line: ~ For example, if we said~ ** Processing line: ~ 5.times puts "Hello DragonRuby",~ ** Processing line: ~ then we'd see the words "Hello DragonRuby" printed on the console 5 times.~ ** Processing line: ~~ ** Processing line: ~ - split: Divides a string into substrings based on a delimiter.~ ** Processing line: ~ For example, if we had a command~ ** Processing line: ~ "DragonRuby is awesome".split(" ")~ ** Processing line: ~ then the result would be~ ** Processing line: ~ ["DragonRuby", "is", "awesome"] because the words are separated by a space delimiter.~ ** Processing line: ~~ ** Processing line: ~ - join: Opposite of split; converts each element of array to a string separated by delimiter.~ ** Processing line: ~ For example, if we had a command~ ** Processing line: ~ ["DragonRuby","is","awesome"].join(" ")~ ** Processing line: ~ then the result would be~ ** Processing line: ~ "DragonRuby is awesome".~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - to_s: Returns a string representation of an object.~ ** Processing line: ~ For example, if we had~ ** Processing line: ~ 500.to_s~ ** Processing line: ~ the string "500" would be returned.~ ** Processing line: ~ Similar to to_i, which returns an integer representation of an object.~ ** Processing line: ~~ ** Processing line: ~ - elapsed_time: How many frames have passed since the click event.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.labels: An array. Values in the array generate labels on the screen.~ ** Processing line: ~ The parameters are: [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ ** Processing line: ~~ ** Processing line: ~ - inputs.mouse.down: Determines whether or not the mouse is being pressed down.~ ** Processing line: ~ The position of the mouse when it is pressed down can be found using inputs.mouse.down.point.(x|y).~ ** Processing line: ~~ ** Processing line: ~ - first: Returns the first element of the array.~ ** Processing line: ~~ ** Processing line: ~ - num1.idiv(num2): Divides two numbers and returns an integer.~ ** Processing line: ~~ ** Processing line: ~ - find_all: Finds all values that satisfy specific requirements.~ ** Processing line: ~~ ** Processing line: ~ - ARRAY#intersect_rect?: Returns true or false depending on if two rectangles intersect.~ ** Processing line: ~~ ** Processing line: ~ - reject: Removes elements from a collection if they meet certain requirements.~ ** Processing line: ~~ ** Processing line: ~ - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated~ ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ MAP_FILE_PATH = 'app/map.txt' # the map.txt file in the app folder contains exported map~ ** Processing line: ~~ ** Processing line: ~ class MetroidvaniaStarter~ ** Processing line: ~ attr_accessor :grid, :inputs, :state, :outputs, :gtk~ ** Processing line: ~~ ** Processing line: ~ # Calls methods needed to run the game properly.~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ calc~ ** Processing line: ~ process_inputs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets all the default variables.~ ** Processing line: ~ # '||' states that initialization occurs only in the first frame.~ ** Processing line: ~ def defaults~ ** Processing line: ~ state.tile_size = 64~ ** Processing line: ~ state.gravity = -0.2~ ** Processing line: ~ state.player_width = 60~ ** Processing line: ~ state.player_height = 64~ ** Processing line: ~ state.collision_tolerance = 0.0~ ** Processing line: ~ state.previous_tile_size ||= state.tile_size~ ** Processing line: ~ state.x ||= 0~ ** Processing line: ~ state.y ||= 800~ ** Processing line: ~ state.dy ||= 0~ ** Processing line: ~ state.dx ||= 0~ ** Processing line: ~ attempt_load_world_from_file~ ** Processing line: ~ state.world_lookup ||= { }~ ** Processing line: ~ state.world_collision_rects ||= []~ ** Processing line: ~ state.mode ||= :creating # alternates between :creating and :selecting for sprite selection~ ** Processing line: ~ state.select_menu ||= [0, 720, 1280, 720]~ ** Processing line: ~ #=======================================IMPORTANT=======================================#~ ** Processing line: ~ # When adding sprites, please label them "image1.png", "image2.png", image3".png", etc.~ ** Processing line: ~ # Once you have done that, adjust "state.sprite_quantity" to how many sprites you have.~ ** Processing line: ~ #=======================================================================================#~ ** Processing line: ~ state.sprite_quantity ||= 20 # IMPORTANT TO ALTER IF SPRITES ADDED IF YOU ADD MORE SPRITES~ ** Processing line: ~ state.sprite_coords ||= []~ ** Processing line: ~ state.banner_coords ||= [640, 680 + 720]~ ** Processing line: ~ state.sprite_selected ||= 1~ ** Processing line: ~ state.map_saved_at ||= 0~ ** Processing line: ~~ ** Processing line: ~ # Sets all the cordinate values for the sprite selection screen into a grid~ ** Processing line: ~ # Displayed when 's' is pressed by player to access sprites~ ** Processing line: ~ if state.sprite_coords == [] # if sprite_coords is an empty array~ ** Processing line: ~ count = 1~ ** Processing line: ~ temp_x = 165 # sets a starting x and y position for display~ ** Processing line: ~ temp_y = 500 + 720~ ** Processing line: ~ state.sprite_quantity.times do # for the number of sprites you have~ ** Processing line: ~ state.sprite_coords += [[temp_x, temp_y, count]] # add element to sprite_coords array~ ** Processing line: ~ temp_x += 100 # increment temp_x~ ** Processing line: ~ count += 1 # increment count~ ** Processing line: ~ if temp_x > 1280 - (165 + 50) # if exceeding specific horizontal width on screen~ ** Processing line: ~ temp_x = 165 # a new row of sprites starts~ ** Processing line: ~ temp_y -= 75 # new row of sprites starts 75 units lower than the previous row~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Places sprites~ ** Processing line: ~ def render~ ** Processing line: ~~ ** Processing line: ~ # Sets the x, y, width, height, and image path for each sprite in the world collection.~ ** Processing line: ~ outputs.sprites << state.world.map do |x, y, sprite|~ ** Processing line: ~ [x * state.tile_size, # multiply by size so grid coordinates; pixel value of location~ ** Processing line: ~ y * state.tile_size,~ ** Processing line: ~ state.tile_size,~ ** Processing line: ~ state.tile_size,~ ** Processing line: ~ 'sprites/image' + sprite.to_s + '.png'] # uses concatenation to create unique image path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs sprite for the player by setting x, y, width, height, and image path~ ** Processing line: ~ outputs.sprites << [state.x,~ ** Processing line: ~ state.y,~ ** Processing line: ~ state.player_width,~ ** Processing line: ~ state.player_height,'sprites/player.png']~ ** Processing line: ~~ ** Processing line: ~ # Outputs labels as primitives in top right of the screen~ ** Processing line: ~ outputs.primitives << [920, 700, 'Press \'s\' to access sprites.', 1, 0].label~ ** Processing line: ~ outputs.primitives << [920, 675, 'Click existing sprite to delete.', 1, 0].label~ ** Processing line: ~~ ** Processing line: ~ outputs.primitives << [920, 640, '<- and -> to move.', 1, 0].label~ ** Processing line: ~ outputs.primitives << [920, 615, 'Press and hold space to jump.', 1, 0].label~ ** Processing line: ~~ ** Processing line: ~ outputs.primitives << [920, 580, 'Press \'e\' to export current map.', 1, 0].label~ ** Processing line: ~~ ** Processing line: ~ # if the map is saved and less than 120 frames have passed, the label is displayed~ ** Processing line: ~ if state.map_saved_at > 0 && state.map_saved_at.elapsed_time < 120~ ** Processing line: ~ outputs.primitives << [920, 555, 'Map has been exported!', 1, 0, 50, 100, 50].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # If player hits 's', following appears~ ** Processing line: ~ if state.mode == :selecting~ ** Processing line: ~ # White background for sprite selection~ ** Processing line: ~ outputs.primitives << [state.select_menu, 255, 255, 255].solid~ ** Processing line: ~~ ** Processing line: ~ # Select tile label at the top of the screen~ ** Processing line: ~ outputs.primitives << [state.banner_coords.x, state.banner_coords.y, "Select Sprite (sprites located in \"sprites\" folder)", 10, 1, 0, 0, 0, 255].label~ ** Processing line: ~~ ** Processing line: ~ # Places sprites in locations calculated in the defaults function~ ** Processing line: ~ outputs.primitives << state.sprite_coords.map do |x, y, order|~ ** Processing line: ~ [x, y, 50, 50, 'sprites/image' + order.to_s + ".png"].sprite~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Creates sprite following mouse to help indicate which sprite you have selected~ ** Processing line: ~ # 10 is subtracted from the mouse's x position so that the sprite is not covered by the mouse icon~ ** Processing line: ~ outputs.primitives << [inputs.mouse.position.x - 10, inputs.mouse.position.y,~ ** Processing line: ~ 10, 10, 'sprites/image' + state.sprite_selected.to_s + ".png"].sprite~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calls methods that perform calculations~ ** Processing line: ~ def calc~ ** Processing line: ~ calc_in_game~ ** Processing line: ~ calc_sprite_selection~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calls methods that perform calculations (if in creating mode)~ ** Processing line: ~ def calc_in_game~ ** Processing line: ~ return unless state.mode == :creating~ ** Processing line: ~ calc_world_lookup~ ** Processing line: ~ calc_player~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_world_lookup~ ** Processing line: ~ # If the tile size isn't equal to the previous tile size,~ ** Processing line: ~ # the previous tile size is set to the tile size,~ ** Processing line: ~ # and world_lookup hash is set to empty.~ ** Processing line: ~ if state.tile_size != state.previous_tile_size~ ** Processing line: ~ state.previous_tile_size = state.tile_size~ ** Processing line: ~ state.world_lookup = {}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # return if world_lookup is not empty or if world is empty~ ** Processing line: ~ return if state.world_lookup.keys.length > 0~ ** Processing line: ~ return unless state.world.length > 0~ ** Processing line: ~~ ** Processing line: ~ # Searches through the world and finds the coordinates that exist~ ** Processing line: ~ state.world_lookup = {}~ ** Processing line: ~ state.world.each { |x, y| state.world_lookup[[x, y]] = true }~ ** Processing line: ~~ ** Processing line: ~ # Assigns collision rects for every sprite drawn~ ** Processing line: ~ state.world_collision_rects =~ ** Processing line: ~ state.world_lookup~ ** Processing line: ~ .keys~ ** Processing line: ~ .map do |coord_x, coord_y|~ ** Processing line: ~ s = state.tile_size~ ** Processing line: ~ # Multiplying by s (the size of a tile) ensures that the rect is~ ** Processing line: ~ # placed exactly where you want it to be placed (causes grid to coordinate)~ ** Processing line: ~ # How many pixels horizontally across and vertically up and down~ ** Processing line: ~ x = s * coord_x~ ** Processing line: ~ y = s * coord_y~ ** Processing line: ~ {~ ** Processing line: ~ args: [coord_x, coord_y],~ ** Processing line: ~ left_right: [x, y + 4, s, s - 6], # hash keys and values~ ** Processing line: ~ top: [x + 4, y + 6, s - 8, s - 6],~ ** Processing line: ~ bottom: [x + 1, y - 1, s - 2, s - 8],~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates movement of player and calls methods that perform collision calculations~ ** Processing line: ~ def calc_player~ ** Processing line: ~ state.dy += state.gravity # what goes up must come down because of gravity~ ** Processing line: ~ calc_box_collision~ ** Processing line: ~ calc_edge_collision~ ** Processing line: ~ state.y += state.dy # Since velocity is the change in position, the change in y increases by dy~ ** Processing line: ~ state.x += state.dx # Ditto line above but dx and x~ ** Processing line: ~ state.dx *= 0.8 # Scales dx down~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calls methods that determine whether the player collides with any world_collision_rects.~ ** Processing line: ~ def calc_box_collision~ ** Processing line: ~ return unless state.world_lookup.keys.length > 0 # return unless hash has atleast 1 key~ ** Processing line: ~ collision_floor~ ** Processing line: ~ collision_left~ ** Processing line: ~ collision_right~ ** Processing line: ~ collision_ceiling~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds collisions between the bottom of the player's rect and the top of a world_collision_rect.~ ** Processing line: ~ def collision_floor~ ** Processing line: ~ return unless state.dy <= 0 # return unless player is going down or is as far down as possible~ ** Processing line: ~ player_rect = [state.x, next_y, state.tile_size, state.tile_size] # definition of player~ ** Processing line: ~~ ** Processing line: ~ # Runs through all the sprites on the field and finds all intersections between player's~ ** Processing line: ~ # bottom and the top of a rect.~ ** Processing line: ~ floor_collisions = state.world_collision_rects~ ** Processing line: ~ .find_all { |r| r[:top].intersect_rect?(player_rect, state.collision_tolerance) }~ ** Processing line: ~ .first~ ** Processing line: ~~ ** Processing line: ~ return unless floor_collisions # performs following changes if a collision has occurred~ ** Processing line: ~ state.y = floor_collisions[:top].top # y of player is set to the y of the colliding rect's top~ ** Processing line: ~ state.dy = 0 # no change in y because the player's path is blocked~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds collisions between the player's left side and the right side of a world_collision_rect.~ ** Processing line: ~ def collision_left~ ** Processing line: ~ return unless state.dx < 0 # return unless player is moving left~ ** Processing line: ~ player_rect = [next_x, state.y, state.tile_size, state.tile_size]~ ** Processing line: ~~ ** Processing line: ~ # Runs through all the sprites on the field and finds all intersections between the player's left side~ ** Processing line: ~ # and the right side of a rect.~ ** Processing line: ~ left_side_collisions = state.world_collision_rects~ ** Processing line: ~ .find_all { |r| r[:left_right].intersect_rect?(player_rect, state.collision_tolerance) }~ ** Processing line: ~ .first~ ** Processing line: ~~ ** Processing line: ~ return unless left_side_collisions # return unless collision occurred~ ** Processing line: ~ state.x = left_side_collisions[:left_right].right # sets player's x to the x of the colliding rect's right side~ ** Processing line: ~ state.dx = 0 # no change in x because the player's path is blocked~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds collisions between the right side of the player and the left side of a world_collision_rect.~ ** Processing line: ~ def collision_right~ ** Processing line: ~ return unless state.dx > 0 # return unless player is moving right~ ** Processing line: ~ player_rect = [next_x, state.y, state.tile_size, state.tile_size]~ ** Processing line: ~~ ** Processing line: ~ # Runs through all the sprites on the field and finds all intersections between the player's~ ** Processing line: ~ # right side and the left side of a rect.~ ** Processing line: ~ right_side_collisions = state.world_collision_rects~ ** Processing line: ~ .find_all { |r| r[:left_right].intersect_rect?(player_rect, state.collision_tolerance) }~ ** Processing line: ~ .first~ ** Processing line: ~~ ** Processing line: ~ return unless right_side_collisions # return unless collision occurred~ ** Processing line: ~ state.x = right_side_collisions[:left_right].left - state.tile_size # player's x is set to the x of colliding rect's left side (minus tile size since x is the player's bottom left corner)~ ** Processing line: ~ state.dx = 0 # no change in x because the player's path is blocked~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds collisions between the top of the player's rect and the bottom of a world_collision_rect.~ ** Processing line: ~ def collision_ceiling~ ** Processing line: ~ return unless state.dy > 0 # return unless player is moving up~ ** Processing line: ~ player_rect = [state.x, next_y, state.player_width, state.player_height]~ ** Processing line: ~~ ** Processing line: ~ # Runs through all the sprites on the field and finds all intersections between the player's top~ ** Processing line: ~ # and the bottom of a rect.~ ** Processing line: ~ ceil_collisions = state.world_collision_rects~ ** Processing line: ~ .find_all { |r| r[:bottom].intersect_rect?(player_rect, state.collision_tolerance) }~ ** Processing line: ~ .first~ ** Processing line: ~~ ** Processing line: ~ return unless ceil_collisions # return unless collision occurred~ ** Processing line: ~ state.y = ceil_collisions[:bottom].y - state.tile_size # player's y is set to the y of the colliding rect's bottom (minus tile size)~ ** Processing line: ~ state.dy = 0 # no change in y because the player's path is blocked~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Makes sure the player remains within the screen's dimensions.~ ** Processing line: ~ def calc_edge_collision~ ** Processing line: ~ # Ensures that player doesn't fall below the map~ ** Processing line: ~ if next_y < 0 && state.dy < 0 # if player is moving down and is about to fall (next_y) below the map's scope~ ** Processing line: ~ state.y = 0 # 0 is the lowest the player can be while staying on the screen~ ** Processing line: ~ state.dy = 0~ ** Processing line: ~ # Ensures player doesn't go insanely high~ ** Processing line: ~ elsif next_y > 720 - state.tile_size && state.dy > 0 # if player is moving up, about to exceed map's scope~ ** Processing line: ~ state.y = 720 - state.tile_size # if we don't subtract tile_size, we won't be able to see the player on the screen~ ** Processing line: ~ state.dy = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Ensures that player remains in the horizontal range its supposed to~ ** Processing line: ~ if state.x >= 1280 - state.tile_size && state.dx > 0 # if the player is moving too far right~ ** Processing line: ~ state.x = 1280 - state.tile_size # farthest right the player can be while remaining in the screen's scope~ ** Processing line: ~ state.dx = 0~ ** Processing line: ~ elsif state.x <= 0 && state.dx < 0 # if the player is moving too far left~ ** Processing line: ~ state.x = 0 # farthest left the player can be while remaining in the screen's scope~ ** Processing line: ~ state.dx = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_sprite_selection~ ** Processing line: ~ # Does the transition to bring down the select sprite screen~ ** Processing line: ~ if state.mode == :selecting && state.select_menu.y != 0~ ** Processing line: ~ state.select_menu.y = 0 # sets y position of select menu (shown when 's' is pressed)~ ** Processing line: ~ state.banner_coords.y = 680 # sets y position of Select Sprite banner~ ** Processing line: ~ state.sprite_coords = state.sprite_coords.map do |x, y, w, h|~ ** Processing line: ~ [x, y - 720, w, h] # sets definition of sprites (change '-' to '+' and the sprites can't be seen)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Does the transition to leave the select sprite screen~ ** Processing line: ~ if state.mode == :creating && state.select_menu.y != 720~ ** Processing line: ~ state.select_menu.y = 720 # sets y position of select menu (menu is retreated back up)~ ** Processing line: ~ state.banner_coords.y = 1000 # sets y position of Select Sprite banner~ ** Processing line: ~ state.sprite_coords = state.sprite_coords.map do |x, y, w, h|~ ** Processing line: ~ [x, y + 720, w, h] # sets definition of all elements in collection~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_inputs~ ** Processing line: ~ # If the state.mode is back and if the menu has retreated back up~ ** Processing line: ~ # call methods that process user inputs~ ** Processing line: ~ if state.mode == :creating~ ** Processing line: ~ process_inputs_player_movement~ ** Processing line: ~ process_inputs_place_tile~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # For each sprite_coordinate added, check what sprite was selected~ ** Processing line: ~ if state.mode == :selecting~ ** Processing line: ~ state.sprite_coords.map do |x, y, order| # goes through all sprites in collection~ ** Processing line: ~ # checks that a specific sprite was pressed based on x, y position~ ** Processing line: ~ if inputs.mouse.down && # the && (and) sign means ALL statements must be true for the evaluation to be true~ ** Processing line: ~ inputs.mouse.down.point.x >= x && # x is greater than or equal to sprite's x and~ ** Processing line: ~ inputs.mouse.down.point.x <= x + 50 && # x is less than or equal to 50 pixels to the right~ ** Processing line: ~ inputs.mouse.down.point.y >= y && # y is greater than or equal to sprite's y~ ** Processing line: ~ inputs.mouse.down.point.y <= y + 50 # y is less than or equal to 50 pixels up~ ** Processing line: ~ state.sprite_selected = order # sprite is chosen~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ inputs_export_stage~ ** Processing line: ~ process_inputs_show_available_sprites~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the player based on the keys they press on their keyboard~ ** Processing line: ~ def process_inputs_player_movement~ ** Processing line: ~ # Sets dx to 0 if the player lets go of arrow keys (player won't move left or right)~ ** Processing line: ~ if inputs.keyboard.key_up.right~ ** Processing line: ~ state.dx = 0~ ** Processing line: ~ elsif inputs.keyboard.key_up.left~ ** Processing line: ~ state.dx = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets dx to 3 in whatever direction the player chooses when they hold down (or press) the left or right keys~ ** Processing line: ~ if inputs.keyboard.key_held.right~ ** Processing line: ~ state.dx = 3~ ** Processing line: ~ elsif inputs.keyboard.key_held.left~ ** Processing line: ~ state.dx = -3~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets dy to 5 to make the player ~fly~ when they press the space bar on their keyboard~ ** Processing line: ~ if inputs.keyboard.key_held.space~ ** Processing line: ~ state.dy = 5~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds tile in the place the user holds down the mouse~ ** Processing line: ~ def process_inputs_place_tile~ ** Processing line: ~ if inputs.mouse.down # if mouse is pressed~ ** Processing line: ~ state.world_lookup = {}~ ** Processing line: ~ x, y = to_coord inputs.mouse.down.point # gets x, y coordinates for the grid~ ** Processing line: ~~ ** Processing line: ~ # Checks if any coordinates duplicate (already exist in world)~ ** Processing line: ~ if state.world.any? { |existing_x, existing_y, n| existing_x == x && existing_y == y }~ ** Processing line: ~ #erases existing tile space by rejecting them from world~ ** Processing line: ~ state.world = state.world.reject do |existing_x, existing_y, n|~ ** Processing line: ~ existing_x == x && existing_y == y~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ state.world << [x, y, state.sprite_selected] # If no duplicates, add the sprite~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Stores/exports world collection's info (coordinates, sprite number) into a file~ ** Processing line: ~ def inputs_export_stage~ ** Processing line: ~ if inputs.keyboard.key_down.e # if "e" is pressed~ ** Processing line: ~ export_string = state.world.map do |x, y, sprite_number| # stores world info in a string~ ** Processing line: ~ "#{x},#{y},#{sprite_number}" # using string interpolation~ ** Processing line: ~ end~ ** Processing line: ~ gtk.write_file(MAP_FILE_PATH, export_string.join("\n")) # writes string into a file~ ** Processing line: ~ state.map_saved_at = state.tick_count # frame number (passage of time) when the map was saved~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_inputs_show_available_sprites~ ** Processing line: ~ # Based on keyboard input, the entity (:creating and :selecting) switch~ ** Processing line: ~ if inputs.keyboard.key_held.s && state.mode == :creating # if "s" is pressed and currently creating~ ** Processing line: ~ state.mode = :selecting # will change to selecting~ ** Processing line: ~ inputs.keyboard.clear # VERY IMPORTANT! If not present, it'll flicker between on and off~ ** Processing line: ~ elsif inputs.keyboard.key_held.s && state.mode == :selecting # if "s" is pressed and currently selecting~ ** Processing line: ~ state.mode = :creating # will change to creating~ ** Processing line: ~ inputs.keyboard.clear # VERY IMPORTANT! If not present, it'll flicker between on and off~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Loads the world collection by reading from the map.txt file in the app folder~ ** Processing line: ~ def attempt_load_world_from_file~ ** Processing line: ~ return if state.world # return if the world collection is already populated~ ** Processing line: ~ state.world ||= [] # initialized as an empty collection~ ** Processing line: ~ exported_world = gtk.read_file(MAP_FILE_PATH) # reads the file using the path mentioned at top of code~ ** Processing line: ~ return unless exported_world # return unless the file read was successful~ ** Processing line: ~ state.world = exported_world.each_line.map do |l| # perform action on each line of exported_world~ ** Processing line: ~ l.split(',').map(&:to_i) # calls split using ',' as a delimiter, and invokes .map on the collection,~ ** Processing line: ~ # calling to_i (converts to integers) on each element~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds the change in y to y to determine the next y position of the player.~ ** Processing line: ~ def next_y~ ** Processing line: ~ state.y + state.dy~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Determines next x position of player~ ** Processing line: ~ def next_x~ ** Processing line: ~ if state.dx < 0 # if the player moves left~ ** Processing line: ~ return state.x - (state.tile_size - state.player_width) # subtracts since the change in x is negative (player is moving left)~ ** Processing line: ~ else~ ** Processing line: ~ return state.x + (state.tile_size - state.player_width) # adds since the change in x is positive (player is moving right)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_coord point~ ** Processing line: ~ # Integer divides (idiv) point.x to turn into grid~ ** Processing line: ~ # Then, you can just multiply each integer by state.tile_size~ ** Processing line: ~ # later and huzzah. Grid coordinates~ ** Processing line: ~ [point.x.idiv(state.tile_size), point.y.idiv(state.tile_size)]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $metroidvania_starter = MetroidvaniaStarter.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $metroidvania_starter.grid = args.grid~ ** Processing line: ~ $metroidvania_starter.inputs = args.inputs~ ** Processing line: ~ $metroidvania_starter.state = args.state~ ** Processing line: ~ $metroidvania_starter.outputs = args.outputs~ ** Processing line: ~ $metroidvania_starter.gtk = args.gtk~ ** Processing line: ~ $metroidvania_starter.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Box Collision 3 - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Box Collision 3 - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Box Collision 3 - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/06_box_collision_3/app/main.rb~ ** Processing line: ~ class Game~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ input_edit_map~ ** Processing line: ~ input_player~ ** Processing line: ~ calc_player~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ state.gravity = -0.4~ ** Processing line: ~ state.drag = 0.15~ ** Processing line: ~ state.tile_size = 32~ ** Processing line: ~ state.player.size = 16~ ** Processing line: ~ state.player.jump_power = 12~ ** Processing line: ~~ ** Processing line: ~ state.tiles ||= []~ ** Processing line: ~ state.player.y ||= 800~ ** Processing line: ~ state.player.x ||= 100~ ** Processing line: ~ state.player.dy ||= 0~ ** Processing line: ~ state.player.dx ||= 0~ ** Processing line: ~ state.player.jumped_down_at ||= 0~ ** Processing line: ~ state.player.jumped_at ||= 0~ ** Processing line: ~~ ** Processing line: ~ calc_player_rect if !state.player.rect~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render~ ** Processing line: ~ outputs.labels << [10, 10.from_top, "tile: click to add a tile, hold X key and click to delete a tile."]~ ** Processing line: ~ outputs.labels << [10, 35.from_top, "move: use left and right to move, space to jump, down and space to jump down."]~ ** Processing line: ~ outputs.labels << [10, 55.from_top, " You can jump through or jump down through tiles with a height of 1."]~ ** Processing line: ~ outputs.background_color = [80, 80, 80]~ ** Processing line: ~ outputs.sprites << tiles.map(&:sprite)~ ** Processing line: ~ outputs.sprites << (player.rect.merge path: 'sprites/square/green.png')~ ** Processing line: ~~ ** Processing line: ~ mouse_overlay = {~ ** Processing line: ~ x: (inputs.mouse.x.ifloor state.tile_size),~ ** Processing line: ~ y: (inputs.mouse.y.ifloor state.tile_size),~ ** Processing line: ~ w: state.tile_size,~ ** Processing line: ~ h: state.tile_size,~ ** Processing line: ~ a: 100~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ mouse_overlay = mouse_overlay.merge r: 255 if state.delete_mode~ ** Processing line: ~~ ** Processing line: ~ if state.mouse_held~ ** Processing line: ~ outputs.primitives << mouse_overlay.border!~ ** Processing line: ~ else~ ** Processing line: ~ outputs.primitives << mouse_overlay.solid!~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_edit_map~ ** Processing line: ~ state.mouse_held = true if inputs.mouse.down~ ** Processing line: ~ state.mouse_held = false if inputs.mouse.up~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.x~ ** Processing line: ~ state.delete_mode = true~ ** Processing line: ~ elsif inputs.keyboard.key_up.x~ ** Processing line: ~ state.delete_mode = false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return unless state.mouse_held~ ** Processing line: ~~ ** Processing line: ~ ordinal = { x: (inputs.mouse.x.idiv state.tile_size),~ ** Processing line: ~ y: (inputs.mouse.y.idiv state.tile_size) }~ ** Processing line: ~~ ** Processing line: ~ found = find_tile ordinal~ ** Processing line: ~ if !found && !state.delete_mode~ ** Processing line: ~ tiles << (state.new_entity :tile, ordinal)~ ** Processing line: ~ recompute_tiles~ ** Processing line: ~ elsif found && state.delete_mode~ ** Processing line: ~ tiles.delete found~ ** Processing line: ~ recompute_tiles~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_player~ ** Processing line: ~ player.dx += inputs.left_right~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.key_down.space && inputs.keyboard.down~ ** Processing line: ~ player.dy = player.jump_power * -1~ ** Processing line: ~ player.jumped_at = 0~ ** Processing line: ~ player.jumped_down_at = state.tick_count~ ** Processing line: ~ elsif inputs.keyboard.key_down.space~ ** Processing line: ~ player.dy = player.jump_power~ ** Processing line: ~ player.jumped_at = state.tick_count~ ** Processing line: ~ player.jumped_down_at = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_player~ ** Processing line: ~ calc_player_rect~ ** Processing line: ~ calc_below~ ** Processing line: ~ calc_left~ ** Processing line: ~ calc_right~ ** Processing line: ~ calc_above~ ** Processing line: ~ calc_player_dy~ ** Processing line: ~ calc_player_dx~ ** Processing line: ~ reset_player if player_off_stage?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_player_rect~ ** Processing line: ~ player.rect = current_player_rect~ ** Processing line: ~ player.next_rect = player.rect.merge x: player.x + player.dx,~ ** Processing line: ~ y: player.y + player.dy~ ** Processing line: ~ player.prev_rect = player.rect.merge x: player.x - player.dx,~ ** Processing line: ~ y: player.y - player.dy~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_below~ ** Processing line: ~ return unless player.dy <= 0~ ** Processing line: ~ tiles_below = find_tiles { |t| t.rect.top <= player.prev_rect.y }~ ** Processing line: ~ collision = find_colliding_tile tiles_below, (player.rect.merge y: player.next_rect.y)~ ** Processing line: ~ return unless collision~ ** Processing line: ~ if collision.neighbors.b == :none && player.jumped_down_at.elapsed_time < 10~ ** Processing line: ~ player.dy = -1~ ** Processing line: ~ else~ ** Processing line: ~ player.y = collision.rect.y + state.tile_size~ ** Processing line: ~ player.dy = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_left~ ** Processing line: ~ return unless player.dx < 0~ ** Processing line: ~ tiles_left = find_tiles { |t| t.rect.right <= player.prev_rect.left }~ ** Processing line: ~ collision = find_colliding_tile tiles_left, (player.rect.merge x: player.next_rect.x)~ ** Processing line: ~ return unless collision~ ** Processing line: ~ player.x = collision.rect.right~ ** Processing line: ~ player.dx = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_right~ ** Processing line: ~ return unless player.dx > 0~ ** Processing line: ~ tiles_right = find_tiles { |t| t.rect.left >= player.prev_rect.right }~ ** Processing line: ~ collision = find_colliding_tile tiles_right, (player.rect.merge x: player.next_rect.x)~ ** Processing line: ~ return unless collision~ ** Processing line: ~ player.x = collision.rect.left - player.rect.w~ ** Processing line: ~ player.dx = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_above~ ** Processing line: ~ return unless player.dy > 0~ ** Processing line: ~ tiles_above = find_tiles { |t| t.rect.y >= player.prev_rect.y }~ ** Processing line: ~ collision = find_colliding_tile tiles_above, (player.rect.merge y: player.next_rect.y)~ ** Processing line: ~ return unless collision~ ** Processing line: ~ return if collision.neighbors.t == :none~ ** Processing line: ~ player.dy = 0~ ** Processing line: ~ player.y = collision.rect.bottom - player.rect.h~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_player_dx~ ** Processing line: ~ player.dx = player.dx.clamp(-5, 5)~ ** Processing line: ~ player.dx *= 0.9~ ** Processing line: ~ player.x += player.dx~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_player_dy~ ** Processing line: ~ player.y += player.dy~ ** Processing line: ~ player.dy += state.gravity~ ** Processing line: ~ player.dy += player.dy * state.drag ** 2 * -1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reset_player~ ** Processing line: ~ player.x = 100~ ** Processing line: ~ player.y = 720~ ** Processing line: ~ player.dy = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def recompute_tiles~ ** Processing line: ~ tiles.each do |t|~ ** Processing line: ~ t.w = state.tile_size~ ** Processing line: ~ t.h = state.tile_size~ ** Processing line: ~ t.neighbors = tile_neighbors t, tiles~ ** Processing line: ~~ ** Processing line: ~ t.rect = [t.x * state.tile_size,~ ** Processing line: ~ t.y * state.tile_size,~ ** Processing line: ~ state.tile_size,~ ** Processing line: ~ state.tile_size].rect.to_hash~ ** Processing line: ~~ ** Processing line: ~ sprite_sub_path = t.neighbors.mask.map { |m| flip_bit m }.join("")~ ** Processing line: ~~ ** Processing line: ~ t.sprite = {~ ** Processing line: ~ x: t.x * state.tile_size,~ ** Processing line: ~ y: t.y * state.tile_size,~ ** Processing line: ~ w: state.tile_size,~ ** Processing line: ~ h: state.tile_size,~ ** Processing line: ~ path: "sprites/tile/wall-#{sprite_sub_path}.png"~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def flip_bit bit~ ** Processing line: ~ return 0 if bit == 1~ ** Processing line: ~ return 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player~ ** Processing line: ~ state.player~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_off_stage?~ ** Processing line: ~ player.rect.top < grid.bottom ||~ ** Processing line: ~ player.rect.right < grid.left ||~ ** Processing line: ~ player.rect.left > grid.right~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def current_player_rect~ ** Processing line: ~ { x: player.x, y: player.y, w: player.size, h: player.size }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tiles~ ** Processing line: ~ state.tiles~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def find_tile ordinal~ ** Processing line: ~ tiles.find { |t| t.x == ordinal.x && t.y == ordinal.y }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def find_tiles &block~ ** Processing line: ~ tiles.find_all(&block)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def find_colliding_tile tiles, target~ ** Processing line: ~ tiles.find { |t| t.rect.intersect_rect? target }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tile_neighbors tile, other_points~ ** Processing line: ~ t = find_tile x: tile.x + 0, y: tile.y + 1~ ** Processing line: ~ r = find_tile x: tile.x + 1, y: tile.y + 0~ ** Processing line: ~ b = find_tile x: tile.x + 0, y: tile.y - 1~ ** Processing line: ~ l = find_tile x: tile.x - 1, y: tile.y + 0~ ** Processing line: ~~ ** Processing line: ~ tile_t, tile_r, tile_b, tile_l = 0~ ** Processing line: ~~ ** Processing line: ~ tile_t = 1 if t~ ** Processing line: ~ tile_r = 1 if r~ ** Processing line: ~ tile_b = 1 if b~ ** Processing line: ~ tile_l = 1 if l~ ** Processing line: ~~ ** Processing line: ~ state.new_entity :neighbors, mask: [tile_t, tile_r, tile_b, tile_l],~ ** Processing line: ~ t: t ? :some : :none,~ ** Processing line: ~ b: b ? :some : :none,~ ** Processing line: ~ l: l ? :some : :none,~ ** Processing line: ~ r: r ? :some : :none~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $game ||= Game.new~ ** Processing line: ~ $game.args = args~ ** Processing line: ~ $game.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Jump Physics - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Jump Physics - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Jump Physics - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/07_jump_physics/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - args.state.new_entity: Used when we want to create a new object, like a sprite or button.~ ** Processing line: ~ For example, if we want to create a new button, we would declare it as a new entity and~ ** Processing line: ~ then define its properties. (Remember, you can use state to define ANY property and it will~ ** Processing line: ~ be retained across frames.)~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.solids: An array. The values generate a solid.~ ** Processing line: ~ The parameters for a solid are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE]~ ** Processing line: ~ For more information about solids, go to mygame/documentation/03-solids-and-borders.md.~ ** Processing line: ~~ ** Processing line: ~ - num1.greater(num2): Returns the greater value.~ ** Processing line: ~~ ** Processing line: ~ - Hashes: Collection of unique keys and their corresponding values. The value can be found~ ** Processing line: ~ using their keys.~ ** Processing line: ~~ ** Processing line: ~ - ARRAY#inside_rect?: Returns true or false depending on if the point is inside the rect.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app is a game that requires the user to jump from one platform to the next.~ ** Processing line: ~ # As the player successfully clears platforms, they become smaller and move faster.~ ** Processing line: ~~ ** Processing line: ~ class VerticalPlatformer~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ # declares vertical platformer as new entity~ ** Processing line: ~ def s~ ** Processing line: ~ state.vertical_platformer ||= state.new_entity(:vertical_platformer)~ ** Processing line: ~ state.vertical_platformer~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # creates a new platform using a hash~ ** Processing line: ~ def new_platform hash~ ** Processing line: ~ s.new_entity_strict(:platform, hash) # platform key~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # calls methods needed for game to run properly~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ calc~ ** Processing line: ~ input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def init_game~ ** Processing line: ~ s.platforms ||= [ # initializes platforms collection with two platforms using hashes~ ** Processing line: ~ new_platform(x: 0, y: 0, w: 700, h: 32, dx: 1, speed: 0, rect: nil),~ ** Processing line: ~ new_platform(x: 0, y: 300, w: 700, h: 32, dx: 1, speed: 0, rect: nil), # 300 pixels higher~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ s.tick_count = args.state.tick_count~ ** Processing line: ~ s.gravity = -0.3 # what goes up must come down because of gravity~ ** Processing line: ~ s.player.platforms_cleared ||= 0 # counts how many platforms the player has successfully cleared~ ** Processing line: ~ s.player.x ||= 0 # sets player values~ ** Processing line: ~ s.player.y ||= 100~ ** Processing line: ~ s.player.w ||= 64~ ** Processing line: ~ s.player.h ||= 64~ ** Processing line: ~ s.player.dy ||= 0 # change in position~ ** Processing line: ~ s.player.dx ||= 0~ ** Processing line: ~ s.player_jump_power = 15~ ** Processing line: ~ s.player_jump_power_duration = 10~ ** Processing line: ~ s.player_max_run_speed = 5~ ** Processing line: ~ s.player_speed_slowdown_rate = 0.9~ ** Processing line: ~ s.player_acceleration = 1~ ** Processing line: ~ s.camera ||= { y: -100 } # shows view on screen (as the player moves upward, the camera does too)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets default values~ ** Processing line: ~ def defaults~ ** Processing line: ~ init_game~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs objects onto the screen~ ** Processing line: ~ def render~ ** Processing line: ~ outputs.solids << s.platforms.map do |p| # outputs platforms onto screen~ ** Processing line: ~ [p.x + 300, p.y - s.camera[:y], p.w, p.h] # add 300 to place platform in horizontal center~ ** Processing line: ~ # don't forget, position of platform is denoted by bottom left hand corner~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # outputs player using hash~ ** Processing line: ~ outputs.solids << {~ ** Processing line: ~ x: s.player.x + 300, # player positioned on top of platform~ ** Processing line: ~ y: s.player.y - s.camera[:y],~ ** Processing line: ~ w: s.player.w,~ ** Processing line: ~ h: s.player.h,~ ** Processing line: ~ r: 100, # color saturation~ ** Processing line: ~ g: 100,~ ** Processing line: ~ b: 200~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Performs calculations~ ** Processing line: ~ def calc~ ** Processing line: ~ s.platforms.each do |p| # for each platform in the collection~ ** Processing line: ~ p.rect = [p.x, p.y, p.w, p.h] # set the definition~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # sets player point by adding half the player's width to the player's x~ ** Processing line: ~ s.player.point = [s.player.x + s.player.w.half, s.player.y] # change + to - and see what happens!~ ** Processing line: ~~ ** Processing line: ~ # search the platforms collection to find if the player's point is inside the rect of a platform~ ** Processing line: ~ collision = s.platforms.find { |p| s.player.point.inside_rect? p.rect }~ ** Processing line: ~~ ** Processing line: ~ # if collision occurred and player is moving down (or not moving vertically at all)~ ** Processing line: ~ if collision && s.player.dy <= 0~ ** Processing line: ~ s.player.y = collision.rect.y + collision.rect.h - 2 # player positioned on top of platform~ ** Processing line: ~ s.player.dy = 0 if s.player.dy < 0 # player stops moving vertically~ ** Processing line: ~ if !s.player.platform~ ** Processing line: ~ s.player.dx = 0 # no horizontal movement~ ** Processing line: ~ end~ ** Processing line: ~ # changes horizontal position of player by multiplying collision change in x (dx) by speed and adding it to current x~ ** Processing line: ~ s.player.x += collision.dx * collision.speed~ ** Processing line: ~ s.player.platform = collision # player is on the platform that it collided with (or landed on)~ ** Processing line: ~ if s.player.falling # if player is falling~ ** Processing line: ~ s.player.dx = 0 # no horizontal movement~ ** Processing line: ~ end~ ** Processing line: ~ s.player.falling = false~ ** Processing line: ~ s.player.jumped_at = nil~ ** Processing line: ~ else~ ** Processing line: ~ s.player.platform = nil # player is not on a platform~ ** Processing line: ~ s.player.y += s.player.dy # velocity is the change in position~ ** Processing line: ~ s.player.dy += s.gravity # acceleration is the change in velocity; what goes up must come down~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ s.platforms.each do |p| # for each platform in the collection~ ** Processing line: ~ p.x += p.dx * p.speed # x is incremented by product of dx and speed (causes platform to move horizontally)~ ** Processing line: ~ # changes platform's x so it moves left and right across the screen (between -300 and 300 pixels)~ ** Processing line: ~ if p.x < -300 # if platform goes too far left~ ** Processing line: ~ p.dx *= -1 # dx is scaled down~ ** Processing line: ~ p.x = -300 # as far left as possible within scope~ ** Processing line: ~ elsif p.x > (1000 - p.w) # if platform's x is greater than 300~ ** Processing line: ~ p.dx *= -1~ ** Processing line: ~ p.x = (1000 - p.w) # set to 300 (as far right as possible within scope)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ delta = (s.player.y - s.camera[:y] - 100) # used to position camera view~ ** Processing line: ~~ ** Processing line: ~ if delta > -200~ ** Processing line: ~ s.camera[:y] += delta * 0.01 # allows player to see view as they move upwards~ ** Processing line: ~ s.player.x += s.player.dx # velocity is change in position; change in x increases by dx~ ** Processing line: ~~ ** Processing line: ~ # searches platform collection to find platforms located more than 300 pixels above the player~ ** Processing line: ~ has_platforms = s.platforms.find { |p| p.y > (s.player.y + 300) }~ ** Processing line: ~ if !has_platforms # if there are no platforms 300 pixels above the player~ ** Processing line: ~ width = 700 - (700 * (0.1 * s.player.platforms_cleared)) # the next platform is smaller than previous~ ** Processing line: ~ s.player.platforms_cleared += 1 # player successfully cleared another platform~ ** Processing line: ~ last_platform = s.platforms[-1] # platform just cleared becomes last platform~ ** Processing line: ~ # another platform is created 300 pixels above the last platform, and this~ ** Processing line: ~ # new platform has a smaller width and moves faster than all previous platforms~ ** Processing line: ~ s.platforms << new_platform(x: (700 - width) * rand, # random x position~ ** Processing line: ~ y: last_platform.y + 300,~ ** Processing line: ~ w: width,~ ** Processing line: ~ h: 32,~ ** Processing line: ~ dx: 1.randomize(:sign), # random change in x~ ** Processing line: ~ speed: 2 * s.player.platforms_cleared,~ ** Processing line: ~ rect: nil)~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ # game over~ ** Processing line: ~ s.as_hash.clear # otherwise clear the hash (no new platform is necessary)~ ** Processing line: ~ init_game~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Takes input from the user to move the player~ ** Processing line: ~ def input~ ** Processing line: ~ if inputs.keyboard.space # if the space bar is pressed~ ** Processing line: ~ s.player.jumped_at ||= s.tick_count # set to current frame~ ** Processing line: ~~ ** Processing line: ~ # if the time that has passed since the jump is less than the duration of a jump (10 frames)~ ** Processing line: ~ # and the player is not falling~ ** Processing line: ~ if s.player.jumped_at.elapsed_time < s.player_jump_power_duration && !s.player.falling~ ** Processing line: ~ s.player.dy = s.player_jump_power # player jumps up~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.key_up.space # if space bar is in "up" state~ ** Processing line: ~ s.player.falling = true # player is falling~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.left # if left key is pressed~ ** Processing line: ~ s.player.dx -= s.player_acceleration # player's position changes, decremented by acceleration~ ** Processing line: ~ s.player.dx = s.player.dx.greater(-s.player_max_run_speed) # dx is either current dx or -5, whichever is greater~ ** Processing line: ~ elsif inputs.keyboard.right # if right key is pressed~ ** Processing line: ~ s.player.dx += s.player_acceleration # player's position changes, incremented by acceleration~ ** Processing line: ~ s.player.dx = s.player.dx.lesser(s.player_max_run_speed) # dx is either current dx or 5, whichever is lesser~ ** Processing line: ~ else~ ** Processing line: ~ s.player.dx *= s.player_speed_slowdown_rate # scales dx down~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $game = VerticalPlatformer.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $game.args = args~ ** Processing line: ~ $game.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Bouncing On Collision - ball.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Bouncing On Collision - ball.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Bouncing On Collision - ball.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/ball.rb~ ** Processing line: ~ GRAVITY = -0.08~ ** Processing line: ~~ ** Processing line: ~ class Ball~ ** Processing line: ~ attr_accessor :velocity, :center, :radius, :collision_enabled~ ** Processing line: ~~ ** Processing line: ~ def initialize args~ ** Processing line: ~ #Start the ball in the top center~ ** Processing line: ~ #@x = args.grid.w / 2~ ** Processing line: ~ #@y = args.grid.h - 20~ ** Processing line: ~~ ** Processing line: ~ @velocity = {x: 0, y: 0}~ ** Processing line: ~ #@width = 20~ ** Processing line: ~ #@height = @width~ ** Processing line: ~ @radius = 20.0 / 2.0~ ** Processing line: ~ @center = {x: (args.grid.w / 2), y: (args.grid.h)}~ ** Processing line: ~~ ** Processing line: ~ #@left_wall = (args.state.board_width + args.grid.w / 8)~ ** Processing line: ~ #@right_wall = @left_wall + args.state.board_width~ ** Processing line: ~ @left_wall = 0~ ** Processing line: ~ @right_wall = $args.grid.right~ ** Processing line: ~~ ** Processing line: ~ @max_velocity = 7~ ** Processing line: ~ @collision_enabled = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Move the ball according to its velocity~ ** Processing line: ~ def update args~ ** Processing line: ~ @center.x += @velocity.x~ ** Processing line: ~ @center.y += @velocity.y~ ** Processing line: ~ @velocity.y += GRAVITY~ ** Processing line: ~~ ** Processing line: ~ alpha = 0.2~ ** Processing line: ~ if @center.y-@radius <= 0~ ** Processing line: ~ @velocity.y = (@velocity.y.abs*0.7).abs~ ** Processing line: ~ @velocity.x = (@velocity.x.abs*0.9).abs * ((@velocity.x < 0) ? -1 : 1)~ ** Processing line: ~~ ** Processing line: ~ if @velocity.y.abs() < alpha~ ** Processing line: ~ @velocity.y=0~ ** Processing line: ~ end~ ** Processing line: ~ if @velocity.x.abs() < alpha~ ** Processing line: ~ @velocity.x=0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if @center.x > args.grid.right+@radius*2~ ** Processing line: ~ @center.x = 0-@radius~ ** Processing line: ~ elsif @center.x< 0-@radius*2~ ** Processing line: ~ @center.x = args.grid.right + @radius~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def wallBounds args~ ** Processing line: ~ #if @x < @left_wall || @x + @width > @right_wall~ ** Processing line: ~ #@velocity.x *= -1.1~ ** Processing line: ~ #if @velocity.x > @max_velocity~ ** Processing line: ~ #@velocity.x = @max_velocity~ ** Processing line: ~ #elsif @velocity.x < @max_velocity * -1~ ** Processing line: ~ #@velocity.x = @max_velocity * -1~ ** Processing line: ~ #end~ ** Processing line: ~ #end~ ** Processing line: ~ #if @y < 0 || @y + @height > args.grid.h~ ** Processing line: ~ #@velocity.y *= -1.1~ ** Processing line: ~ #if @velocity.y > @max_velocity~ ** Processing line: ~ #@velocity.y = @max_velocity~ ** Processing line: ~ #elsif @velocity.y < @max_velocity * -1~ ** Processing line: ~ #@velocity.y = @max_velocity * -1~ ** Processing line: ~ #end~ ** Processing line: ~ #end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #render the ball to the screen~ ** Processing line: ~ def draw args~ ** Processing line: ~ #args.outputs.solids << [@x, @y, @width, @height, 255, 255, 0];~ ** Processing line: ~ args.outputs.sprites << [~ ** Processing line: ~ @center.x-@radius,~ ** Processing line: ~ @center.y-@radius,~ ** Processing line: ~ @radius*2,~ ** Processing line: ~ @radius*2,~ ** Processing line: ~ "sprites/circle-white.png",~ ** Processing line: ~ 0,~ ** Processing line: ~ 255,~ ** Processing line: ~ 255, #r~ ** Processing line: ~ 0, #g~ ** Processing line: ~ 255 #b~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Bouncing On Collision - block.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Bouncing On Collision - block.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Bouncing On Collision - block.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/block.rb~ ** Processing line: ~ DEGREES_TO_RADIANS = Math::PI / 180~ ** Processing line: ~~ ** Processing line: ~ class Block~ ** Processing line: ~ def initialize(x, y, block_size, rotation)~ ** Processing line: ~ @x = x~ ** Processing line: ~ @y = y~ ** Processing line: ~ @block_size = block_size~ ** Processing line: ~ @rotation = rotation~ ** Processing line: ~~ ** Processing line: ~ #The repel velocity?~ ** Processing line: ~ @velocity = {x: 2, y: 0}~ ** Processing line: ~~ ** Processing line: ~ horizontal_offset = (3 * block_size) * Math.cos(rotation * DEGREES_TO_RADIANS)~ ** Processing line: ~ vertical_offset = block_size * Math.sin(rotation * DEGREES_TO_RADIANS)~ ** Processing line: ~~ ** Processing line: ~ if rotation >= 0~ ** Processing line: ~ theta = 90 - rotation~ ** Processing line: ~ #The line doesn't visually line up exactly with the edge of the sprite, so artificially move it a bit~ ** Processing line: ~ modifier = 5~ ** Processing line: ~ x_offset = modifier * Math.cos(theta * DEGREES_TO_RADIANS)~ ** Processing line: ~ y_offset = modifier * Math.sin(theta * DEGREES_TO_RADIANS)~ ** Processing line: ~ @x1 = @x - x_offset~ ** Processing line: ~ @y1 = @y + y_offset~ ** Processing line: ~ @x2 = @x1 + horizontal_offset~ ** Processing line: ~ @y2 = @y1 + (vertical_offset * 3)~ ** Processing line: ~~ ** Processing line: ~ @imaginary_line = [ @x1, @y1, @x2, @y2 ]~ ** Processing line: ~ else~ ** Processing line: ~ theta = 90 + rotation~ ** Processing line: ~ x_offset = @block_size * Math.cos(theta * DEGREES_TO_RADIANS)~ ** Processing line: ~ y_offset = @block_size * Math.sin(theta * DEGREES_TO_RADIANS)~ ** Processing line: ~ @x1 = @x + x_offset~ ** Processing line: ~ @y1 = @y + y_offset + 19~ ** Processing line: ~ @x2 = @x1 + horizontal_offset~ ** Processing line: ~ @y2 = @y1 + (vertical_offset * 3)~ ** Processing line: ~~ ** Processing line: ~ @imaginary_line = [ @x1, @y1, @x2, @y2 ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw args~ ** Processing line: ~ args.outputs.sprites << [~ ** Processing line: ~ @x,~ ** Processing line: ~ @y,~ ** Processing line: ~ @block_size*3,~ ** Processing line: ~ @block_size,~ ** Processing line: ~ "sprites/square-green.png",~ ** Processing line: ~ @rotation~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ args.outputs.lines << @imaginary_line~ ** Processing line: ~ args.outputs.solids << @debug_shape~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def multiply_matricies~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc args~ ** Processing line: ~ if collision? args~ ** Processing line: ~ collide args~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Determine if the ball and block are touching~ ** Processing line: ~ def collision? args~ ** Processing line: ~ #The minimum area enclosed by the center of the ball and the 2 corners of the block~ ** Processing line: ~ #If the area ever drops below this value, we know there is a collision~ ** Processing line: ~ min_area = ((@block_size * 3) * args.state.ball.radius) / 2~ ** Processing line: ~~ ** Processing line: ~ #https://www.mathopenref.com/coordtrianglearea.html~ ** Processing line: ~ ax = @x1~ ** Processing line: ~ ay = @y1~ ** Processing line: ~ bx = @x2~ ** Processing line: ~ by = @y2~ ** Processing line: ~ cx = args.state.ball.center.x~ ** Processing line: ~ cy = args.state.ball.center.y~ ** Processing line: ~~ ** Processing line: ~ current_area = (ax*(by-cy)+bx*(cy-ay)+cx*(ay-by))/2~ ** Processing line: ~~ ** Processing line: ~ collision = false~ ** Processing line: ~ if @rotation >= 0~ ** Processing line: ~ if (current_area < min_area &&~ ** Processing line: ~ current_area > 0 &&~ ** Processing line: ~ args.state.ball.center.y > @y1 &&~ ** Processing line: ~ args.state.ball.center.x < @x2)~ ** Processing line: ~~ ** Processing line: ~ collision = true~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ if (current_area < min_area &&~ ** Processing line: ~ current_area > 0 &&~ ** Processing line: ~ args.state.ball.center.y > @y2 &&~ ** Processing line: ~ args.state.ball.center.x > @x1)~ ** Processing line: ~~ ** Processing line: ~ collision = true~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return collision~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def collide args~ ** Processing line: ~ #Slope of the block~ ** Processing line: ~ slope = (@y2 - @y1) / (@x2 - @x1)~ ** Processing line: ~~ ** Processing line: ~ #Create a unit vector and tilt it (@rotation) number of degrees~ ** Processing line: ~ x = -Math.cos(@rotation * DEGREES_TO_RADIANS)~ ** Processing line: ~ y = Math.sin(@rotation * DEGREES_TO_RADIANS)~ ** Processing line: ~~ ** Processing line: ~ #Find the vector that is perpendicular to the slope~ ** Processing line: ~ perpVect = { x: x, y: y }~ ** Processing line: ~ mag = (perpVect.x**2 + perpVect.y**2)**0.5 # find the magniude of the perpVect~ ** Processing line: ~ perpVect = {x: perpVect.x/(mag), y: perpVect.y/(mag)} # divide the perpVect by the magniude to make it a unit vector~ ** Processing line: ~~ ** Processing line: ~ previousPosition = { # calculate an ESTIMATE of the previousPosition of the ball~ ** Processing line: ~ x:args.state.ball.center.x-args.state.ball.velocity.x,~ ** Processing line: ~ y:args.state.ball.center.y-args.state.ball.velocity.y~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ velocityMag = (args.state.ball.velocity.x**2 + args.state.ball.velocity.y**2)**0.5 # the current velocity magnitude of the ball~ ** Processing line: ~ theta_ball = Math.atan2(args.state.ball.velocity.y, args.state.ball.velocity.x) #the angle of the ball's velocity~ ** Processing line: ~ theta_repel = (180 * DEGREES_TO_RADIANS) - theta_ball + (@rotation * DEGREES_TO_RADIANS)~ ** Processing line: ~~ ** Processing line: ~ fbx = velocityMag * Math.cos(theta_ball) #the x component of the ball's velocity~ ** Processing line: ~ fby = velocityMag * Math.sin(theta_ball) #the y component of the ball's velocity~ ** Processing line: ~~ ** Processing line: ~ frx = velocityMag * Math.cos(theta_repel) #the x component of the repel's velocity | magnitude is set to twice of fbx~ ** Processing line: ~ fry = velocityMag * Math.sin(theta_repel) #the y component of the repel's velocity | magnitude is set to twice of fby~ ** Processing line: ~~ ** Processing line: ~ args.state.display_value = velocityMag~ ** Processing line: ~ fsumx = fbx+frx #sum of x forces~ ** Processing line: ~ fsumy = fby+fry #sum of y forces~ ** Processing line: ~ fr = velocityMag #fr is the resulting magnitude~ ** Processing line: ~ thetaNew = Math.atan2(fsumy, fsumx) #thetaNew is the resulting angle~ ** Processing line: ~~ ** Processing line: ~ xnew = fr*Math.cos(thetaNew) #resulting x velocity~ ** Processing line: ~ ynew = fr*Math.sin(thetaNew) #resulting y velocity~ ** Processing line: ~~ ** Processing line: ~ dampener = 0.3~ ** Processing line: ~ ynew *= dampener * 0.5~ ** Processing line: ~~ ** Processing line: ~ #If the bounce is very low, that means the ball is rolling and we don't want to dampenen the X velocity~ ** Processing line: ~ if ynew > -0.1~ ** Processing line: ~ xnew *= dampener~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Add the sine component of gravity back in (X component)~ ** Processing line: ~ gravity_x = 4 * Math.sin(@rotation * DEGREES_TO_RADIANS)~ ** Processing line: ~ xnew += gravity_x~ ** Processing line: ~~ ** Processing line: ~ args.state.ball.velocity.x = -xnew~ ** Processing line: ~ args.state.ball.velocity.y = -ynew~ ** Processing line: ~~ ** Processing line: ~ #Set the position of the ball to the previous position so it doesn't warp throught the block~ ** Processing line: ~ args.state.ball.center.x = previousPosition.x~ ** Processing line: ~ args.state.ball.center.y = previousPosition.y~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Bouncing On Collision - cannon.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Bouncing On Collision - cannon.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Bouncing On Collision - cannon.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/cannon.rb~ ** Processing line: ~ class Cannon~ ** Processing line: ~ def initialize args~ ** Processing line: ~ @pointA = {x: args.grid.right/2,y: args.grid.top}~ ** Processing line: ~ @pointB = {x: args.inputs.mouse.x, y: args.inputs.mouse.y}~ ** Processing line: ~ end~ ** Processing line: ~ def update args~ ** Processing line: ~ activeBall = args.state.ball~ ** Processing line: ~ @pointB = {x: args.inputs.mouse.x, y: args.inputs.mouse.y}~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.mouse.click~ ** Processing line: ~ alpha = 0.01~ ** Processing line: ~ activeBall.velocity.y = (@pointB.y - @pointA.y) * alpha~ ** Processing line: ~ activeBall.velocity.x = (@pointB.x - @pointA.x) * alpha~ ** Processing line: ~ activeBall.center = {x: (args.grid.w / 2), y: (args.grid.h)}~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ def render args~ ** Processing line: ~ args.outputs.lines << [@pointA.x, @pointA.y, @pointB.x, @pointB.y]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Bouncing On Collision - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Bouncing On Collision - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Bouncing On Collision - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/main.rb~ ** Processing line: ~ INFINITY= 10**10~ ** Processing line: ~~ ** Processing line: ~ require 'app/vector2d.rb'~ ** Processing line: ~ require 'app/peg.rb'~ ** Processing line: ~ require 'app/block.rb'~ ** Processing line: ~ require 'app/ball.rb'~ ** Processing line: ~ require 'app/cannon.rb'~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ #Method to init default values~ ** Processing line: ~ def defaults args~ ** Processing line: ~ args.state.pegs ||= []~ ** Processing line: ~ args.state.blocks ||= []~ ** Processing line: ~ args.state.cannon ||= Cannon.new args~ ** Processing line: ~ args.state.ball ||= Ball.new args~ ** Processing line: ~ args.state.horizontal_offset ||= 0~ ** Processing line: ~ init_pegs args~ ** Processing line: ~ init_blocks args~ ** Processing line: ~~ ** Processing line: ~ args.state.display_value ||= "test"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :default_methods~ ** Processing line: ~ def init_pegs args~ ** Processing line: ~ num_horizontal_pegs = 14~ ** Processing line: ~ num_rows = 5~ ** Processing line: ~~ ** Processing line: ~ return unless args.state.pegs.count < num_rows * num_horizontal_pegs~ ** Processing line: ~~ ** Processing line: ~ block_size = 32~ ** Processing line: ~ block_spacing = 50~ ** Processing line: ~ total_width = num_horizontal_pegs * (block_size + block_spacing)~ ** Processing line: ~ starting_offset = (args.grid.w - total_width) / 2 + block_size~ ** Processing line: ~~ ** Processing line: ~ for i in (0...num_rows)~ ** Processing line: ~ for j in (0...num_horizontal_pegs)~ ** Processing line: ~ row_offset = 0~ ** Processing line: ~ if i % 2 == 0~ ** Processing line: ~ row_offset = 20~ ** Processing line: ~ else~ ** Processing line: ~ row_offset = -20~ ** Processing line: ~ end~ ** Processing line: ~ args.state.pegs.append(Peg.new(j * (block_size+block_spacing) + starting_offset + row_offset, (args.grid.h - block_size * 2) - (i * block_size * 2)-90, block_size))~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def init_blocks args~ ** Processing line: ~ return unless args.state.blocks.count < 10~ ** Processing line: ~~ ** Processing line: ~ #Sprites are rotated in degrees, but the Ruby math functions work on radians~ ** Processing line: ~ radians_to_degrees = Math::PI / 180~ ** Processing line: ~~ ** Processing line: ~ block_size = 25~ ** Processing line: ~ #Rotation angle (in degrees) of the blocks~ ** Processing line: ~ rotation = 30~ ** Processing line: ~ vertical_offset = block_size * Math.sin(rotation * radians_to_degrees)~ ** Processing line: ~ horizontal_offset = (3 * block_size) * Math.cos(rotation * radians_to_degrees)~ ** Processing line: ~ center = args.grid.w / 2~ ** Processing line: ~~ ** Processing line: ~ for i in (0...5)~ ** Processing line: ~ #Create a ramp of blocks. Not going to be perfect because of the float to integer conversion and anisotropic to isotropic coversion~ ** Processing line: ~ args.state.blocks.append(Block.new((center + 100 + (i * horizontal_offset)).to_i, 100 + (vertical_offset * i) + (i * block_size), block_size, rotation))~ ** Processing line: ~ args.state.blocks.append(Block.new((center - 100 - (i * horizontal_offset)).to_i, 100 + (vertical_offset * i) + (i * block_size), block_size, -rotation))~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Render loop~ ** Processing line: ~ def render args~ ** Processing line: ~ args.outputs.borders << args.state.game_area~ ** Processing line: ~ render_pegs args~ ** Processing line: ~ render_blocks args~ ** Processing line: ~ args.state.cannon.render args~ ** Processing line: ~ args.state.ball.draw args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :render_methods~ ** Processing line: ~ #Draw the pegs in a grid pattern~ ** Processing line: ~ def render_pegs args~ ** Processing line: ~ args.state.pegs.each do |peg|~ ** Processing line: ~ peg.draw args~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_blocks args~ ** Processing line: ~ args.state.blocks.each do |block|~ ** Processing line: ~ block.draw args~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Calls all methods necessary for performing calculations~ ** Processing line: ~ def calc args~ ** Processing line: ~ args.state.pegs.each do |peg|~ ** Processing line: ~ peg.calc args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.blocks.each do |block|~ ** Processing line: ~ block.calc args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.ball.update args~ ** Processing line: ~ args.state.cannon.update args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :calc_methods~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ defaults args~ ** Processing line: ~ render args~ ** Processing line: ~ calc args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Bouncing On Collision - peg.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Bouncing On Collision - peg.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Bouncing On Collision - peg.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/peg.rb~ ** Processing line: ~ class Peg~ ** Processing line: ~ def initialize(x, y, block_size)~ ** Processing line: ~ @x = x # x cordinate of the LEFT side of the peg~ ** Processing line: ~ @y = y # y cordinate of the RIGHT side of the peg~ ** Processing line: ~ @block_size = block_size # diameter of the peg~ ** Processing line: ~~ ** Processing line: ~ @radius = @block_size/2.0 # radius of the peg~ ** Processing line: ~ @center = { # cordinatees of the CENTER of the peg~ ** Processing line: ~ x: @x+@block_size/2.0,~ ** Processing line: ~ y: @y+@block_size/2.0~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ @r = 255 # color of the peg~ ** Processing line: ~ @g = 0~ ** Processing line: ~ @b = 0~ ** Processing line: ~~ ** Processing line: ~ @velocity = {x: 2, y: 0}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw args~ ** Processing line: ~ args.outputs.sprites << [ # draw the peg according to the @x, @y, @radius, and the RGB~ ** Processing line: ~ @x,~ ** Processing line: ~ @y,~ ** Processing line: ~ @radius*2.0,~ ** Processing line: ~ @radius*2.0,~ ** Processing line: ~ "sprites/circle-white.png",~ ** Processing line: ~ 0,~ ** Processing line: ~ 255,~ ** Processing line: ~ @r, #r~ ** Processing line: ~ @g, #g~ ** Processing line: ~ @b #b~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def calc args~ ** Processing line: ~ if collisionWithBounce? args # if the is a collision with the bouncing ball~ ** Processing line: ~ collide args~ ** Processing line: ~ @r = 0~ ** Processing line: ~ @b = 0~ ** Processing line: ~ @g = 255~ ** Processing line: ~ else~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # do two circles (the ball and this peg) intersect~ ** Processing line: ~ def collisionWithBounce? args~ ** Processing line: ~ squareDistance = ( # the squared distance between the ball's center and this peg's center~ ** Processing line: ~ (args.state.ball.center.x - @center.x) ** 2.0 +~ ** Processing line: ~ (args.state.ball.center.y - @center.y) ** 2.0~ ** Processing line: ~ )~ ** Processing line: ~ radiusSum = ( # the sum of the radius squared of the this peg and the ball~ ** Processing line: ~ (args.state.ball.radius + @radius) ** 2.0~ ** Processing line: ~ )~ ** Processing line: ~ # if the squareDistance is less or equal to radiusSum, then there is a radial intersection between the ball and this peg~ ** Processing line: ~ return (squareDistance <= radiusSum)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ! The following links explain the getRepelMagnitude function !~ ** Processing line: ~ # https://raw.githubusercontent.com/DragonRuby/dragonruby-game-toolkit-physics/master/docs/docImages/LinearCollider_4.png~ ** Processing line: ~ # https://raw.githubusercontent.com/DragonRuby/dragonruby-game-toolkit-physics/master/docs/docImages/LinearCollider_5.png~ ** Processing line: ~ # https://github.com/DragonRuby/dragonruby-game-toolkit-physics/blob/master/docs/LinearCollider.md~ ** Processing line: ~ def getRepelMagnitude (args, fbx, fby, vrx, vry, ballMag)~ ** Processing line: ~ a = fbx ; b = vrx ; c = fby~ ** Processing line: ~ d = vry ; e = ballMag~ ** Processing line: ~ if b**2 + d**2 == 0~ ** Processing line: ~ #unexpected~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ x1 = (-a*b+-c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 + d**2 - a**2 * d**2)**0.5)/(b**2 + d**2)~ ** Processing line: ~ x2 = -((a*b + c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 * d**2 - a**2 * d**2)**0.5)/(b**2 + d**2))~ ** Processing line: ~~ ** Processing line: ~ err = 0.00001~ ** Processing line: ~ o = ((fbx + x1*vrx)**2 + (fby + x1*vry)**2 ) ** 0.5~ ** Processing line: ~ p = ((fbx + x2*vrx)**2 + (fby + x2*vry)**2 ) ** 0.5~ ** Processing line: ~ r = 0~ ** Processing line: ~~ ** Processing line: ~ if (ballMag >= o-err and ballMag <= o+err)~ ** Processing line: ~ r = x1~ ** Processing line: ~ elsif (ballMag >= p-err and ballMag <= p+err)~ ** Processing line: ~ r = x2~ ** Processing line: ~ else~ ** Processing line: ~ #unexpected~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if (args.state.ball.center.x > @center.x)~ ** Processing line: ~ return x2*-1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return x2~ ** Processing line: ~~ ** Processing line: ~ #return r~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #this sets the new velocity of the ball once it has collided with this peg~ ** Processing line: ~ def collide args~ ** Processing line: ~ normalOfRCCollision = [ #this is the normal of the collision in COMPONENT FORM~ ** Processing line: ~ {x: @center.x, y: @center.y}, #see https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.mathscard.co.uk%2Fonline%2Fcircle-coordinate-geometry%2F&psig=AOvVaw2GcD-e2-nJR_IUKpw3hO98&ust=1605731315521000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCMjBo7e1iu0CFQAAAAAdAAAAABAD~ ** Processing line: ~ {x: args.state.ball.center.x, y: args.state.ball.center.y},~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ normalSlope = ( #normalSlope is the slope of normalOfRCCollision~ ** Processing line: ~ (normalOfRCCollision[1].y - normalOfRCCollision[0].y) /~ ** Processing line: ~ (normalOfRCCollision[1].x - normalOfRCCollision[0].x)~ ** Processing line: ~ )~ ** Processing line: ~ slope = normalSlope**-1.0 * -1 # slope is the slope of the tangent~ ** Processing line: ~ # args.state.display_value = slope~ ** Processing line: ~ pointA = { # pointA and pointB are using the var slope to tangent in COMPONENT FORM~ ** Processing line: ~ x: args.state.ball.center.x-1,~ ** Processing line: ~ y: -(slope-args.state.ball.center.y)~ ** Processing line: ~ }~ ** Processing line: ~ pointB = {~ ** Processing line: ~ x: args.state.ball.center.x+1,~ ** Processing line: ~ y: slope+args.state.ball.center.y~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ perpVect = {x: pointB.x - pointA.x, y:pointB.y - pointA.y} # perpVect is to be VECTOR of the perpendicular tangent~ ** Processing line: ~ mag = (perpVect.x**2 + perpVect.y**2)**0.5 # find the magniude of the perpVect~ ** Processing line: ~ perpVect = {x: perpVect.x/(mag), y: perpVect.y/(mag)} # divide the perpVect by the magniude to make it a unit vector~ ** Processing line: ~ perpVect = {x: -perpVect.y, y: perpVect.x} # swap the x and y and multiply by -1 to make the vector perpendicular~ ** Processing line: ~ args.state.display_value = perpVect~ ** Processing line: ~ if perpVect.y > 0 #ensure perpVect points upward~ ** Processing line: ~ perpVect = {x: perpVect.x*-1, y: perpVect.y*-1}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ previousPosition = { # calculate an ESTIMATE of the previousPosition of the ball~ ** Processing line: ~ x:args.state.ball.center.x-args.state.ball.velocity.x,~ ** Processing line: ~ y:args.state.ball.center.y-args.state.ball.velocity.y~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ yInterc = pointA.y + -slope*pointA.x~ ** Processing line: ~ if slope == INFINITY # the perpVect presently either points in the correct dirrection or it is 180 degrees off we need to correct this~ ** Processing line: ~ if previousPosition.x < pointA.x~ ** Processing line: ~ perpVect = {x: perpVect.x*-1, y: perpVect.y*-1}~ ** Processing line: ~ yInterc = -INFINITY~ ** Processing line: ~ end~ ** Processing line: ~ elsif previousPosition.y < slope*previousPosition.x + yInterc # check if ball is bellow or above the collider to determine if perpVect is - or +~ ** Processing line: ~ perpVect = {x: perpVect.x*-1, y: perpVect.y*-1}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ velocityMag = # the current velocity magnitude of the ball~ ** Processing line: ~ (args.state.ball.velocity.x**2 + args.state.ball.velocity.y**2)**0.5~ ** Processing line: ~ theta_ball=~ ** Processing line: ~ Math.atan2(args.state.ball.velocity.y,args.state.ball.velocity.x) #the angle of the ball's velocity~ ** Processing line: ~ theta_repel=~ ** Processing line: ~ Math.atan2(args.state.ball.center.y,args.state.ball.center.x) #the angle of the repelling force(perpVect)~ ** Processing line: ~~ ** Processing line: ~ fbx = velocityMag * Math.cos(theta_ball) #the x component of the ball's velocity~ ** Processing line: ~ fby = velocityMag * Math.sin(theta_ball) #the y component of the ball's velocity~ ** Processing line: ~ repelMag = getRepelMagnitude( # the magniude of the collision vector~ ** Processing line: ~ args,~ ** Processing line: ~ fbx,~ ** Processing line: ~ fby,~ ** Processing line: ~ perpVect.x,~ ** Processing line: ~ perpVect.y,~ ** Processing line: ~ (args.state.ball.velocity.x**2 + args.state.ball.velocity.y**2)**0.5~ ** Processing line: ~ )~ ** Processing line: ~ frx = repelMag* Math.cos(theta_repel) #the x component of the repel's velocity | magnitude is set to twice of fbx~ ** Processing line: ~ fry = repelMag* Math.sin(theta_repel) #the y component of the repel's velocity | magnitude is set to twice of fby~ ** Processing line: ~~ ** Processing line: ~ fsumx = fbx+frx # sum of x forces~ ** Processing line: ~ fsumy = fby+fry # sum of y forces~ ** Processing line: ~ fr = velocityMag # fr is the resulting magnitude~ ** Processing line: ~ thetaNew = Math.atan2(fsumy, fsumx) # thetaNew is the resulting angle~ ** Processing line: ~ xnew = fr*Math.cos(thetaNew) # resulting x velocity~ ** Processing line: ~ ynew = fr*Math.sin(thetaNew) # resulting y velocity~ ** Processing line: ~ if (args.state.ball.center.x >= @center.x) # this is necessary for the ball colliding on the right side of the peg~ ** Processing line: ~ xnew=xnew.abs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.ball.velocity.x = xnew # set the x-velocity to the new velocity~ ** Processing line: ~ if args.state.ball.center.y > @center.y # if the ball is above the middle of the peg we need to temporarily ignore some of the gravity~ ** Processing line: ~ args.state.ball.velocity.y = ynew + GRAVITY * 0.01~ ** Processing line: ~ else~ ** Processing line: ~ args.state.ball.velocity.y = ynew - GRAVITY * 0.01 # if the ball is bellow the middle of the peg we need to temporarily increase the power of the gravity~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.ball.center.x+= args.state.ball.velocity.x # update the position of the ball so it never looks like the ball is intersecting the circle~ ** Processing line: ~ args.state.ball.center.y+= args.state.ball.velocity.y~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Bouncing On Collision - vector2d.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Bouncing On Collision - vector2d.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Bouncing On Collision - vector2d.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/08_bouncing_on_collision/app/vector2d.rb~ ** Processing line: ~ class Vector2d~ ** Processing line: ~ attr_accessor :x, :y~ ** Processing line: ~~ ** Processing line: ~ def initialize x=0, y=0~ ** Processing line: ~ @x=x~ ** Processing line: ~ @y=y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #returns a vector multiplied by scalar x~ ** Processing line: ~ #x [float] scalar~ ** Processing line: ~ def mult x~ ** Processing line: ~ r = Vector2d.new(0,0)~ ** Processing line: ~ r.x=@x*x~ ** Processing line: ~ r.y=@y*x~ ** Processing line: ~ r~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # vect [Vector2d] vector to copy~ ** Processing line: ~ def copy vect~ ** Processing line: ~ Vector2d.new(@x, @y)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #returns a new vector equivalent to this+vect~ ** Processing line: ~ #vect [Vector2d] vector to add to self~ ** Processing line: ~ def add vect~ ** Processing line: ~ Vector2d.new(@x+vect.x,@y+vect.y)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #returns a new vector equivalent to this-vect~ ** Processing line: ~ #vect [Vector2d] vector to subtract to self~ ** Processing line: ~ def sub vect~ ** Processing line: ~ Vector2d.new(@x-vect.c, @y-vect.y)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #return the magnitude of the vector~ ** Processing line: ~ def mag~ ** Processing line: ~ ((@x**2)+(@y**2))**0.5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #returns a new normalize version of the vector~ ** Processing line: ~ def normalize~ ** Processing line: ~ Vector2d.new(@x/mag, @y/mag)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #TODO delet?~ ** Processing line: ~ def distABS vect~ ** Processing line: ~ (((vect.x-@x)**2+(vect.y-@y)**2)**0.5).abs()~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Arbitrary Collision - ball.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Arbitrary Collision - ball.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Arbitrary Collision - ball.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/ball.rb~ ** Processing line: ~~ ** Processing line: ~ class Ball~ ** Processing line: ~ attr_accessor :velocity, :child, :parent, :number, :leastChain~ ** Processing line: ~ attr_reader :x, :y, :hypotenuse, :width, :height~ ** Processing line: ~~ ** Processing line: ~ def initialize args, number, leastChain, parent, child~ ** Processing line: ~ #Start the ball in the top center~ ** Processing line: ~ @number = number~ ** Processing line: ~ @leastChain = leastChain~ ** Processing line: ~ @x = args.grid.w / 2~ ** Processing line: ~ @y = args.grid.h - 20~ ** Processing line: ~~ ** Processing line: ~ @velocity = Vector2d.new(2, -2)~ ** Processing line: ~ @width = 10~ ** Processing line: ~ @height = 10~ ** Processing line: ~~ ** Processing line: ~ @left_wall = (args.state.board_width + args.grid.w / 8)~ ** Processing line: ~ @right_wall = @left_wall + args.state.board_width~ ** Processing line: ~~ ** Processing line: ~ @max_velocity = MAX_VELOCITY~ ** Processing line: ~~ ** Processing line: ~ @child = child~ ** Processing line: ~ @parent = parent~ ** Processing line: ~~ ** Processing line: ~ @past = [{x: @x, y: @y}]~ ** Processing line: ~ @next = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reassignLeastChain (lc=nil)~ ** Processing line: ~ if (lc == nil)~ ** Processing line: ~ lc = @number~ ** Processing line: ~ end~ ** Processing line: ~ @leastChain = lc~ ** Processing line: ~ if (parent != nil)~ ** Processing line: ~ @parent.reassignLeastChain(lc)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def makeLeader args~ ** Processing line: ~ if isLeader~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~ @parent.reassignLeastChain~ ** Processing line: ~ args.state.ballParents.push(self)~ ** Processing line: ~ @parent = nil~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def isLeader~ ** Processing line: ~ return (parent == nil)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def receiveNext (p)~ ** Processing line: ~ #trace!~ ** Processing line: ~ if parent != nil~ ** Processing line: ~ @x = p[:x]~ ** Processing line: ~ @y = p[:y]~ ** Processing line: ~ @velocity = p[:velocity]~ ** Processing line: ~ #puts @x.to_s + "|" + @y.to_s + "|"+@velocity.to_s~ ** Processing line: ~ @past.append(p)~ ** Processing line: ~ if (@past.length >= BALL_DISTANCE)~ ** Processing line: ~ if (@child != nil)~ ** Processing line: ~ @child.receiveNext(@past[0])~ ** Processing line: ~ @past.shift~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Move the ball according to its velocity~ ** Processing line: ~ def update args~ ** Processing line: ~~ ** Processing line: ~ if isLeader~ ** Processing line: ~ wallBounds args~ ** Processing line: ~ @x += @velocity.x~ ** Processing line: ~ @y += @velocity.y~ ** Processing line: ~ @past.append({x: @x, y: @y, velocity: @velocity})~ ** Processing line: ~ #puts @past~ ** Processing line: ~~ ** Processing line: ~ if (@past.length >= BALL_DISTANCE)~ ** Processing line: ~ if (@child != nil)~ ** Processing line: ~ @child.receiveNext(@past[0])~ ** Processing line: ~ @past.shift~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ else~ ** Processing line: ~ puts "unexpected"~ ** Processing line: ~ raise "unexpected"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def wallBounds args~ ** Processing line: ~ b= false~ ** Processing line: ~ if @x < @left_wall~ ** Processing line: ~ @velocity.x = @velocity.x.abs() * 1~ ** Processing line: ~ b=true~ ** Processing line: ~ elsif @x + @width > @right_wall~ ** Processing line: ~ @velocity.x = @velocity.x.abs() * -1~ ** Processing line: ~ b=true~ ** Processing line: ~ end~ ** Processing line: ~ if @y < 0~ ** Processing line: ~ @velocity.y = @velocity.y.abs() * 1~ ** Processing line: ~ b=true~ ** Processing line: ~ elsif @y + @height > args.grid.h~ ** Processing line: ~ @velocity.y = @velocity.y.abs() * -1~ ** Processing line: ~ b=true~ ** Processing line: ~ end~ ** Processing line: ~ mag = (@velocity.x**2.0 + @velocity.y**2.0)**0.5~ ** Processing line: ~ if (b == true && mag < MAX_VELOCITY)~ ** Processing line: ~ @velocity.x*=1.1;~ ** Processing line: ~ @velocity.y*=1.1;~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #render the ball to the screen~ ** Processing line: ~ def draw args~ ** Processing line: ~~ ** Processing line: ~ #update args~ ** Processing line: ~ #args.outputs.solids << [@x, @y, @width, @height, 255, 255, 0];~ ** Processing line: ~ #args.outputs.sprits << {~ ** Processing line: ~ #x: @x,~ ** Processing line: ~ #y: @y,~ ** Processing line: ~ #w: @width,~ ** Processing line: ~ #h: @height,~ ** Processing line: ~ #path: "sprites/ball10.png"~ ** Processing line: ~ #}~ ** Processing line: ~ #args.outputs.sprites <<[@x, @y, @width, @height, "sprites/ball10.png"]~ ** Processing line: ~ args.outputs.sprites << {x: @x, y: @y, w: @width, h: @height, path:"sprites/ball10.png" }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def getDraw args~ ** Processing line: ~ #wallBounds args~ ** Processing line: ~ #update args~ ** Processing line: ~ #args.outputs.labels << [@x, @y, @number.to_s + "|" + @leastChain.to_s]~ ** Processing line: ~ return [@x, @y, @width, @height, "sprites/ball10.png"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def getPoints args~ ** Processing line: ~ points = [~ ** Processing line: ~ {x:@x+@width/2, y: @y},~ ** Processing line: ~ {x:@x+@width, y:@y+@height/2},~ ** Processing line: ~ {x:@x+@width/2,y:@y+@height},~ ** Processing line: ~ {x:@x,y:@y+@height/2}~ ** Processing line: ~ ]~ ** Processing line: ~ #psize = 5.0~ ** Processing line: ~ #for p in points~ ** Processing line: ~ #args.outputs.solids << [p.x-psize/2.0, p.y-psize/2.0, psize, psize, 0, 0, 0];~ ** Processing line: ~ #end~ ** Processing line: ~ return points~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ {x: @x, y:@y}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inspect~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Arbitrary Collision - blocks.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Arbitrary Collision - blocks.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Arbitrary Collision - blocks.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/blocks.rb~ ** Processing line: ~ MAX_COUNT=100~ ** Processing line: ~~ ** Processing line: ~ def universalUpdateOne args, shape~ ** Processing line: ~ didHit = false~ ** Processing line: ~ hitters = []~ ** Processing line: ~ #puts shape.to_s~ ** Processing line: ~ toCollide = nil~ ** Processing line: ~ for b in args.state.balls~ ** Processing line: ~ if [b.x, b.y, b.width, b.height].intersect_rect?(shape.bold)~ ** Processing line: ~ didSquare = false~ ** Processing line: ~ for s in shape.squareColliders~ ** Processing line: ~ if (s.collision?(args, b))~ ** Processing line: ~ didSquare = true~ ** Processing line: ~ didHit = true~ ** Processing line: ~ #s.collide(args, b)~ ** Processing line: ~ toCollide = s~ ** Processing line: ~ #hitter = b~ ** Processing line: ~ hitters.append(b)~ ** Processing line: ~ end #end if~ ** Processing line: ~ end #end for~ ** Processing line: ~ if (didSquare == false)~ ** Processing line: ~ for c in shape.colliders~ ** Processing line: ~ #puts args.state.ball.velocity~ ** Processing line: ~ if c.collision?(args, b.getPoints(args),b)~ ** Processing line: ~ #c.collide args, b~ ** Processing line: ~ toCollide = c~ ** Processing line: ~ didHit = true~ ** Processing line: ~ hitters.append(b)~ ** Processing line: ~ end #end if~ ** Processing line: ~ end #end for~ ** Processing line: ~ end #end if~ ** Processing line: ~ end#end if~ ** Processing line: ~ end#end for~ ** Processing line: ~ if (didHit)~ ** Processing line: ~ shape.count=0~ ** Processing line: ~ hitters = hitters.uniq~ ** Processing line: ~ for hitter in hitters~ ** Processing line: ~ hitter.makeLeader args~ ** Processing line: ~ #toCollide.collide(args, hitter)~ ** Processing line: ~ if shape.home == "squares"~ ** Processing line: ~ args.state.squares.delete(shape)~ ** Processing line: ~ elsif shape.home == "tshapes"~ ** Processing line: ~ args.state.tshapes.delete(shape)~ ** Processing line: ~ else shape.home == "lines"~ ** Processing line: ~ args.state.lines.delete(shape)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #puts "HIT!" + hitter.number~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def universalUpdate args, shape~ ** Processing line: ~ #puts shape.home~ ** Processing line: ~ if (shape.count <= 1)~ ** Processing line: ~ universalUpdateOne args, shape~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ didHit = false~ ** Processing line: ~ hitter = nil~ ** Processing line: ~ for b in args.state.ballParents~ ** Processing line: ~ if [b.x, b.y, b.width, b.height].intersect_rect?(shape.bold)~ ** Processing line: ~ didSquare = false~ ** Processing line: ~ for s in shape.squareColliders~ ** Processing line: ~ if (s.collision?(args, b))~ ** Processing line: ~ didSquare = true~ ** Processing line: ~ didHit = true~ ** Processing line: ~ s.collide(args, b)~ ** Processing line: ~ hitter = b~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ if (didSquare == false)~ ** Processing line: ~ for c in shape.colliders~ ** Processing line: ~ #puts args.state.ball.velocity~ ** Processing line: ~ if c.collision?(args, b.getPoints(args),b)~ ** Processing line: ~ c.collide args, b~ ** Processing line: ~ didHit = true~ ** Processing line: ~ hitter = b~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ if (didHit)~ ** Processing line: ~ shape.count=shape.count-1~ ** Processing line: ~ shape.damageCount.append([(hitter.leastChain+1 - hitter.number)-1, args.state.tick_count])~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~ i=0~ ** Processing line: ~ while i < shape.damageCount.length~ ** Processing line: ~ if shape.damageCount[i][0] <= 0~ ** Processing line: ~ shape.damageCount.delete_at(i)~ ** Processing line: ~ i-=1~ ** Processing line: ~ elsif shape.damageCount[i][1].elapsed_time > BALL_DISTANCE and shape.damageCount[i][0] > 1~ ** Processing line: ~ shape.count-=1~ ** Processing line: ~ shape.damageCount[i][0]-=1~ ** Processing line: ~ shape.damageCount[i][1] = args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~ i+=1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ class Square~ ** Processing line: ~ attr_accessor :count, :x, :y, :home, :bold, :squareColliders, :colliders, :damageCount~ ** Processing line: ~ def initialize(args, x, y, block_size, orientation, block_offset)~ ** Processing line: ~ @x = x * block_size~ ** Processing line: ~ @y = y * block_size~ ** Processing line: ~ @block_size = block_size~ ** Processing line: ~ @block_offset = block_offset~ ** Processing line: ~ @orientation = orientation~ ** Processing line: ~ @damageCount = []~ ** Processing line: ~ @home = 'squares'~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ Kernel.srand()~ ** Processing line: ~ @r = rand(255)~ ** Processing line: ~ @g = rand(255)~ ** Processing line: ~ @b = rand(255)~ ** Processing line: ~~ ** Processing line: ~ @count = rand(MAX_COUNT)+1~ ** Processing line: ~~ ** Processing line: ~ x_offset = (args.state.board_width + args.grid.w / 8) + @block_offset / 2~ ** Processing line: ~ @x_adjusted = @x + x_offset~ ** Processing line: ~ @y_adjusted = @y~ ** Processing line: ~ @size_adjusted = @block_size * 2 - @block_offset~ ** Processing line: ~~ ** Processing line: ~ hypotenuse=args.state.ball_hypotenuse~ ** Processing line: ~ @bold = [(@x_adjusted-hypotenuse/2)-1, (@y_adjusted-hypotenuse/2)-1, @size_adjusted + hypotenuse + 2, @size_adjusted + hypotenuse + 2]~ ** Processing line: ~~ ** Processing line: ~ @points = [~ ** Processing line: ~ {x:@x_adjusted, y:@y_adjusted},~ ** Processing line: ~ {x:@x_adjusted+@size_adjusted, y:@y_adjusted},~ ** Processing line: ~ {x:@x_adjusted+@size_adjusted, y:@y_adjusted+@size_adjusted},~ ** Processing line: ~ {x:@x_adjusted, y:@y_adjusted+@size_adjusted}~ ** Processing line: ~ ]~ ** Processing line: ~ @squareColliders = [~ ** Processing line: ~ SquareCollider.new(@points[0].x,@points[0].y,{x:-1,y:-1}),~ ** Processing line: ~ SquareCollider.new(@points[1].x-COLLISIONWIDTH,@points[1].y,{x:1,y:-1}),~ ** Processing line: ~ SquareCollider.new(@points[2].x-COLLISIONWIDTH,@points[2].y-COLLISIONWIDTH,{x:1,y:1}),~ ** Processing line: ~ SquareCollider.new(@points[3].x,@points[3].y-COLLISIONWIDTH,{x:-1,y:1}),~ ** Processing line: ~ ]~ ** Processing line: ~ @colliders = [~ ** Processing line: ~ LinearCollider.new(@points[0],@points[1], :neg),~ ** Processing line: ~ LinearCollider.new(@points[1],@points[2], :neg),~ ** Processing line: ~ LinearCollider.new(@points[2],@points[3], :pos),~ ** Processing line: ~ LinearCollider.new(@points[0],@points[3], :pos)~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw(args)~ ** Processing line: ~ #Offset the coordinates to the edge of the game area~ ** Processing line: ~ x_offset = (args.state.board_width + args.grid.w / 8) + @block_offset / 2~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size * 2 - @block_offset, @block_size * 2 - @block_offset, @r, @g, @b]~ ** Processing line: ~ args.outputs.solids <<{x: (@x + x_offset), y: (@y), w: (@block_size * 2 - @block_offset), h: (@block_size * 2 - @block_offset), r: @r , g: @g , b: @b }~ ** Processing line: ~ #args.outputs.solids << @bold.append([255,0,0])~ ** Processing line: ~ args.outputs.labels << [@x + x_offset + (@block_size * 2 - @block_offset)/2, (@y) + (@block_size * 2 - @block_offset)/2, @count.to_s]~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def update args~ ** Processing line: ~ universalUpdate args, self~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class TShape~ ** Processing line: ~ attr_accessor :count, :x, :y, :home, :bold, :squareColliders, :colliders, :damageCount~ ** Processing line: ~ def initialize(args, x, y, block_size, orientation, block_offset)~ ** Processing line: ~ @x = x * block_size~ ** Processing line: ~ @y = y * block_size~ ** Processing line: ~ @block_size = block_size~ ** Processing line: ~ @block_offset = block_offset~ ** Processing line: ~ @orientation = orientation~ ** Processing line: ~ @damageCount = []~ ** Processing line: ~ @home = "tshapes"~ ** Processing line: ~~ ** Processing line: ~ Kernel.srand()~ ** Processing line: ~ @r = rand(255)~ ** Processing line: ~ @g = rand(255)~ ** Processing line: ~ @b = rand(255)~ ** Processing line: ~~ ** Processing line: ~ @count = rand(MAX_COUNT)+1~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ @shapePoints = getShapePoints(args)~ ** Processing line: ~ minX={x:INFINITY, y:0}~ ** Processing line: ~ minY={x:0, y:INFINITY}~ ** Processing line: ~ maxX={x:-INFINITY, y:0}~ ** Processing line: ~ maxY={x:0, y:-INFINITY}~ ** Processing line: ~ for p in @shapePoints~ ** Processing line: ~ if p.x < minX.x~ ** Processing line: ~ minX = p~ ** Processing line: ~ end~ ** Processing line: ~ if p.x > maxX.x~ ** Processing line: ~ maxX = p~ ** Processing line: ~ end~ ** Processing line: ~ if p.y < minY.y~ ** Processing line: ~ minY = p~ ** Processing line: ~ end~ ** Processing line: ~ if p.y > maxY.y~ ** Processing line: ~ maxY = p~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ hypotenuse=args.state.ball_hypotenuse~ ** Processing line: ~~ ** Processing line: ~ @bold = [(minX.x-hypotenuse/2)-1, (minY.y-hypotenuse/2)-1, -((minX.x-hypotenuse/2)-1)+(maxX.x + hypotenuse + 2), -((minY.y-hypotenuse/2)-1)+(maxY.y + hypotenuse + 2)]~ ** Processing line: ~ end~ ** Processing line: ~ def getShapePoints(args)~ ** Processing line: ~ points=[]~ ** Processing line: ~ x_offset = (args.state.board_width + args.grid.w / 8) + (@block_offset / 2)~ ** Processing line: ~~ ** Processing line: ~ if @orientation == :right~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 2, @block_size, @r, @g, @b]~ ** Processing line: ~ points = [~ ** Processing line: ~ {x:@x + x_offset, y:@y},~ ** Processing line: ~ {x:(@x + x_offset)+(@block_size - @block_offset), y:@y},~ ** Processing line: ~ {x:(@x + x_offset)+(@block_size - @block_offset),y:@y + @block_size},~ ** Processing line: ~ {x:(@x + x_offset)+ @block_size * 2,y:@y + @block_size},~ ** Processing line: ~ {x:(@x + x_offset)+ @block_size * 2,y:@y + @block_size+@block_size},~ ** Processing line: ~ {x:(@x + x_offset)+(@block_size - @block_offset),y:@y + @block_size+@block_size},~ ** Processing line: ~ {x:(@x + x_offset)+(@block_size - @block_offset), y:@y+ @block_size * 3 - @block_offset},~ ** Processing line: ~ {x:@x + x_offset , y:@y+ @block_size * 3 - @block_offset}~ ** Processing line: ~ ]~ ** Processing line: ~ @squareColliders = [~ ** Processing line: ~ SquareCollider.new(points[0].x,points[0].y,{x:-1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y,{x:1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[2].x,points[2].y-COLLISIONWIDTH,{x:1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[3].x-COLLISIONWIDTH,points[3].y,{x:1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[4].x-COLLISIONWIDTH,points[4].y-COLLISIONWIDTH,{x:1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[5].x,points[5].y,{x:1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[6].x-COLLISIONWIDTH,points[6].y-COLLISIONWIDTH,{x:1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[7].x,points[7].y-COLLISIONWIDTH,{x:-1,y:1}),~ ** Processing line: ~ ]~ ** Processing line: ~ @colliders = [~ ** Processing line: ~ LinearCollider.new(points[0],points[1], :neg),~ ** Processing line: ~ LinearCollider.new(points[1],points[2], :neg),~ ** Processing line: ~ LinearCollider.new(points[2],points[3], :neg),~ ** Processing line: ~ LinearCollider.new(points[3],points[4], :neg),~ ** Processing line: ~ LinearCollider.new(points[4],points[5], :pos),~ ** Processing line: ~ LinearCollider.new(points[5],points[6], :neg),~ ** Processing line: ~ LinearCollider.new(points[6],points[7], :pos),~ ** Processing line: ~ LinearCollider.new(points[0],points[7], :pos)~ ** Processing line: ~ ]~ ** Processing line: ~ elsif @orientation == :up~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size, @block_size * 2, @r, @g, @b]~ ** Processing line: ~ points = [~ ** Processing line: ~ {x:@x + x_offset, y:@y},~ ** Processing line: ~ {x:(@x + x_offset)+(@block_size * 3 - @block_offset), y:@y},~ ** Processing line: ~ {x:(@x + x_offset)+(@block_size * 3 - @block_offset), y:@y+(@block_size - @block_offset)},~ ** Processing line: ~ {x:@x + x_offset + @block_size + @block_size, y:@y+(@block_size - @block_offset)},~ ** Processing line: ~ {x:@x + x_offset + @block_size + @block_size, y:@y+@block_size*2},~ ** Processing line: ~ {x:@x + x_offset + @block_size, y:@y+@block_size*2},~ ** Processing line: ~ {x:@x + x_offset + @block_size, y:@y+(@block_size - @block_offset)},~ ** Processing line: ~ {x:@x + x_offset, y:@y+(@block_size - @block_offset)}~ ** Processing line: ~ ]~ ** Processing line: ~ @squareColliders = [~ ** Processing line: ~ SquareCollider.new(points[0].x,points[0].y,{x:-1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y,{x:1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[2].x-COLLISIONWIDTH,points[2].y-COLLISIONWIDTH,{x:1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[3].x,points[3].y,{x:1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[4].x-COLLISIONWIDTH,points[4].y-COLLISIONWIDTH,{x:1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[5].x,points[5].y-COLLISIONWIDTH,{x:-1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[6].x-COLLISIONWIDTH,points[6].y,{x:-1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[7].x,points[7].y-COLLISIONWIDTH,{x:-1,y:1}),~ ** Processing line: ~ ]~ ** Processing line: ~ @colliders = [~ ** Processing line: ~ LinearCollider.new(points[0],points[1], :neg),~ ** Processing line: ~ LinearCollider.new(points[1],points[2], :neg),~ ** Processing line: ~ LinearCollider.new(points[2],points[3], :pos),~ ** Processing line: ~ LinearCollider.new(points[3],points[4], :neg),~ ** Processing line: ~ LinearCollider.new(points[4],points[5], :pos),~ ** Processing line: ~ LinearCollider.new(points[5],points[6], :neg),~ ** Processing line: ~ LinearCollider.new(points[6],points[7], :pos),~ ** Processing line: ~ LinearCollider.new(points[0],points[7], :pos)~ ** Processing line: ~ ]~ ** Processing line: ~ elsif @orientation == :left~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 2 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ ** Processing line: ~ xh = @x + x_offset~ ** Processing line: ~ #points = [~ ** Processing line: ~ #{x:@x + x_offset, y:@y},~ ** Processing line: ~ #{x:(@x + x_offset)+(@block_size - @block_offset), y:@y},~ ** Processing line: ~ #{x:(@x + x_offset)+(@block_size - @block_offset),y:@y + @block_size},~ ** Processing line: ~ #{x:(@x + x_offset)+ @block_size * 2,y:@y + @block_size},~ ** Processing line: ~ #{x:(@x + x_offset)+ @block_size * 2,y:@y + @block_size+@block_size},~ ** Processing line: ~ #{x:(@x + x_offset)+(@block_size - @block_offset),y:@y + @block_size+@block_size},~ ** Processing line: ~ #{x:(@x + x_offset)+(@block_size - @block_offset), y:@y+ @block_size * 3 - @block_offset},~ ** Processing line: ~ #{x:@x + x_offset , y:@y+ @block_size * 3 - @block_offset}~ ** Processing line: ~ #]~ ** Processing line: ~ points = [~ ** Processing line: ~ {x:@x + x_offset + @block_size, y:@y},~ ** Processing line: ~ {x:@x + x_offset + @block_size + (@block_size - @block_offset), y:@y},~ ** Processing line: ~ {x:@x + x_offset + @block_size + (@block_size - @block_offset),y:@y+@block_size*3- @block_offset},~ ** Processing line: ~ {x:@x + x_offset + @block_size, y:@y+@block_size*3- @block_offset},~ ** Processing line: ~ {x:@x + x_offset+@block_size, y:@y+@block_size*2- @block_offset},~ ** Processing line: ~ {x:@x + x_offset, y:@y+@block_size*2- @block_offset},~ ** Processing line: ~ {x:@x + x_offset, y:@y+@block_size},~ ** Processing line: ~ {x:@x + x_offset+@block_size, y:@y+@block_size}~ ** Processing line: ~ ]~ ** Processing line: ~ @squareColliders = [~ ** Processing line: ~ SquareCollider.new(points[0].x,points[0].y,{x:-1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y,{x:1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[2].x-COLLISIONWIDTH,points[2].y-COLLISIONWIDTH,{x:1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[3].x,points[3].y-COLLISIONWIDTH,{x:-1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[4].x-COLLISIONWIDTH,points[4].y,{x:-1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[5].x,points[5].y-COLLISIONWIDTH,{x:-1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[6].x,points[6].y,{x:-1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[7].x-COLLISIONWIDTH,points[7].y-COLLISIONWIDTH,{x:-1,y:-1}),~ ** Processing line: ~ ]~ ** Processing line: ~ @colliders = [~ ** Processing line: ~ LinearCollider.new(points[0],points[1], :neg),~ ** Processing line: ~ LinearCollider.new(points[1],points[2], :neg),~ ** Processing line: ~ LinearCollider.new(points[2],points[3], :pos),~ ** Processing line: ~ LinearCollider.new(points[3],points[4], :neg),~ ** Processing line: ~ LinearCollider.new(points[4],points[5], :pos),~ ** Processing line: ~ LinearCollider.new(points[5],points[6], :neg),~ ** Processing line: ~ LinearCollider.new(points[6],points[7], :neg),~ ** Processing line: ~ LinearCollider.new(points[0],points[7], :pos)~ ** Processing line: ~ ]~ ** Processing line: ~ elsif @orientation == :down~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size - @block_offset, @block_size * 2 - @block_offset, @r, @g, @b]~ ** Processing line: ~~ ** Processing line: ~ points = [~ ** Processing line: ~ {x:@x + x_offset, y:@y+(@block_size*2)-@block_offset},~ ** Processing line: ~ {x:@x + x_offset+ @block_size*3-@block_offset, y:@y+(@block_size*2)-@block_offset},~ ** Processing line: ~ {x:@x + x_offset+ @block_size*3-@block_offset, y:@y+(@block_size)},~ ** Processing line: ~ {x:@x + x_offset+ @block_size*2-@block_offset, y:@y+(@block_size)},~ ** Processing line: ~ {x:@x + x_offset+ @block_size*2-@block_offset, y:@y},#~ ** Processing line: ~ {x:@x + x_offset+ @block_size, y:@y},#~ ** Processing line: ~ {x:@x + x_offset + @block_size, y:@y+(@block_size)},~ ** Processing line: ~ {x:@x + x_offset, y:@y+(@block_size)}~ ** Processing line: ~ ]~ ** Processing line: ~ @squareColliders = [~ ** Processing line: ~ SquareCollider.new(points[0].x,points[0].y-COLLISIONWIDTH,{x:-1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y-COLLISIONWIDTH,{x:1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[2].x-COLLISIONWIDTH,points[2].y,{x:1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[3].x,points[3].y-COLLISIONWIDTH,{x:1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[4].x-COLLISIONWIDTH,points[4].y,{x:1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[5].x,points[5].y,{x:-1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[6].x-COLLISIONWIDTH,points[6].y-COLLISIONWIDTH,{x:-1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[7].x,points[7].y,{x:-1,y:-1}),~ ** Processing line: ~ ]~ ** Processing line: ~ @colliders = [~ ** Processing line: ~ LinearCollider.new(points[0],points[1], :pos),~ ** Processing line: ~ LinearCollider.new(points[1],points[2], :pos),~ ** Processing line: ~ LinearCollider.new(points[2],points[3], :neg),~ ** Processing line: ~ LinearCollider.new(points[3],points[4], :pos),~ ** Processing line: ~ LinearCollider.new(points[4],points[5], :neg),~ ** Processing line: ~ LinearCollider.new(points[5],points[6], :pos),~ ** Processing line: ~ LinearCollider.new(points[6],points[7], :neg),~ ** Processing line: ~ LinearCollider.new(points[0],points[7], :neg)~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ return points~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw(args)~ ** Processing line: ~ #Offset the coordinates to the edge of the game area~ ** Processing line: ~ x_offset = (args.state.board_width + args.grid.w / 8) + (@block_offset / 2)~ ** Processing line: ~~ ** Processing line: ~ if @orientation == :right~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset), y: @y, w: @block_size - @block_offset, h: (@block_size * 3 - @block_offset), r: @r , g: @g, b: @b}~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 2, @block_size, @r, @g, @b]~ ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset), y: (@y + @block_size), w: (@block_size * 2), h: (@block_size), r: @r , g: @g, b: @b }~ ** Processing line: ~ elsif @orientation == :up~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset), y: (@y), w: (@block_size * 3 - @block_offset), h: (@block_size - @block_offset), r: @r , g: @g, b: @b}~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size, @block_size * 2, @r, @g, @b]~ ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset + @block_size), y: (@y), w: (@block_size), h: (@block_size * 2), r: @r , g: @g, b: @b}~ ** Processing line: ~ elsif @orientation == :left~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset + @block_size), y: (@y), w: (@block_size - @block_offset), h: (@block_size * 3 - @block_offset), r: @r , g: @g, b: @b}~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 2 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset), y: (@y + @block_size), w: (@block_size * 2 - @block_offset), h: (@block_size - @block_offset), r: @r , g: @g, b: @b}~ ** Processing line: ~ elsif @orientation == :down~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y + @block_size, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset), y: (@y + @block_size), w: (@block_size * 3 - @block_offset), h: (@block_size - @block_offset), r: @r , g: @g, b: @b}~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset + @block_size, @y, @block_size - @block_offset, @block_size * 2 - @block_offset, @r, @g, @b]~ ** Processing line: ~ args.outputs.solids << {x: (@x + x_offset + @block_size), y: (@y), w: (@block_size - @block_offset), h: ( @block_size * 2 - @block_offset), r: @r , g: @g, b: @b}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #psize = 5.0~ ** Processing line: ~ #for p in @shapePoints~ ** Processing line: ~ #args.outputs.solids << [p.x-psize/2, p.y-psize/2, psize, psize, 0, 0, 0]~ ** Processing line: ~ #end~ ** Processing line: ~ args.outputs.labels << [@x + x_offset + (@block_size * 2 - @block_offset)/2, (@y) + (@block_size * 2 - @block_offset)/2, @count.to_s]~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def updateOne_old args~ ** Processing line: ~ didHit = false~ ** Processing line: ~ hitter = nil~ ** Processing line: ~ toCollide = nil~ ** Processing line: ~ for b in args.state.balls~ ** Processing line: ~ if [b.x, b.y, b.width, b.height].intersect_rect?(@bold)~ ** Processing line: ~ didSquare = false~ ** Processing line: ~ for s in @squareColliders~ ** Processing line: ~ if (s.collision?(args, b))~ ** Processing line: ~ didSquare = true~ ** Processing line: ~ didHit = true~ ** Processing line: ~ #s.collide(args, b)~ ** Processing line: ~ toCollide = s~ ** Processing line: ~ hitter = b~ ** Processing line: ~ break~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ if (didSquare == false)~ ** Processing line: ~ for c in @colliders~ ** Processing line: ~ #puts args.state.ball.velocity~ ** Processing line: ~ if c.collision?(args, b.getPoints(args),b)~ ** Processing line: ~ #c.collide args, b~ ** Processing line: ~ toCollide = c~ ** Processing line: ~ didHit = true~ ** Processing line: ~ hitter = b~ ** Processing line: ~ break~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ if didHit~ ** Processing line: ~ break~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ if (didHit)~ ** Processing line: ~ @count=0~ ** Processing line: ~ hitter.makeLeader args~ ** Processing line: ~ #toCollide.collide(args, hitter)~ ** Processing line: ~ args.state.tshapes.delete(self)~ ** Processing line: ~ #puts "HIT!" + hitter.number~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def update_old args~ ** Processing line: ~ if (@count == 1)~ ** Processing line: ~ updateOne args~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~ didHit = false~ ** Processing line: ~ hitter = nil~ ** Processing line: ~ for b in args.state.ballParents~ ** Processing line: ~ if [b.x, b.y, b.width, b.height].intersect_rect?(@bold)~ ** Processing line: ~ didSquare = false~ ** Processing line: ~ for s in @squareColliders~ ** Processing line: ~ if (s.collision?(args, b))~ ** Processing line: ~ didSquare = true~ ** Processing line: ~ didHit=true~ ** Processing line: ~ s.collide(args, b)~ ** Processing line: ~ hitter = b~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ if (didSquare == false)~ ** Processing line: ~ for c in @colliders~ ** Processing line: ~ #puts args.state.ball.velocity~ ** Processing line: ~ if c.collision?(args, b.getPoints(args), b)~ ** Processing line: ~ c.collide args, b~ ** Processing line: ~ didHit=true~ ** Processing line: ~ hitter = b~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ if (didHit)~ ** Processing line: ~ @count=@count-1~ ** Processing line: ~ @damageCount.append([(hitter.leastChain+1 - hitter.number)-1, args.state.tick_count])~ ** Processing line: ~~ ** Processing line: ~ if (@count == 0)~ ** Processing line: ~ args.state.tshapes.delete(self)~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ i=0~ ** Processing line: ~~ ** Processing line: ~ while i < @damageCount.length~ ** Processing line: ~ if @damageCount[i][0] <= 0~ ** Processing line: ~ @damageCount.delete_at(i)~ ** Processing line: ~ i-=1~ ** Processing line: ~ elsif @damageCount[i][1].elapsed_time > BALL_DISTANCE~ ** Processing line: ~ @count-=1~ ** Processing line: ~ @damageCount[i][0]-=1~ ** Processing line: ~ end~ ** Processing line: ~ if (@count == 0)~ ** Processing line: ~ args.state.tshapes.delete(self)~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~ i+=1~ ** Processing line: ~ end~ ** Processing line: ~ end #end update~ ** Processing line: ~~ ** Processing line: ~ def update args~ ** Processing line: ~ universalUpdate args, self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class Line~ ** Processing line: ~ attr_accessor :count, :x, :y, :home, :bold, :squareColliders, :colliders, :damageCount~ ** Processing line: ~ def initialize(args, x, y, block_size, orientation, block_offset)~ ** Processing line: ~ @x = x * block_size~ ** Processing line: ~ @y = y * block_size~ ** Processing line: ~ @block_size = block_size~ ** Processing line: ~ @block_offset = block_offset~ ** Processing line: ~ @orientation = orientation~ ** Processing line: ~ @damageCount = []~ ** Processing line: ~ @home = "lines"~ ** Processing line: ~~ ** Processing line: ~ Kernel.srand()~ ** Processing line: ~ @r = rand(255)~ ** Processing line: ~ @g = rand(255)~ ** Processing line: ~ @b = rand(255)~ ** Processing line: ~~ ** Processing line: ~ @count = rand(MAX_COUNT)+1~ ** Processing line: ~~ ** Processing line: ~ @shapePoints = getShapePoints(args)~ ** Processing line: ~ minX={x:INFINITY, y:0}~ ** Processing line: ~ minY={x:0, y:INFINITY}~ ** Processing line: ~ maxX={x:-INFINITY, y:0}~ ** Processing line: ~ maxY={x:0, y:-INFINITY}~ ** Processing line: ~ for p in @shapePoints~ ** Processing line: ~ if p.x < minX.x~ ** Processing line: ~ minX = p~ ** Processing line: ~ end~ ** Processing line: ~ if p.x > maxX.x~ ** Processing line: ~ maxX = p~ ** Processing line: ~ end~ ** Processing line: ~ if p.y < minY.y~ ** Processing line: ~ minY = p~ ** Processing line: ~ end~ ** Processing line: ~ if p.y > maxY.y~ ** Processing line: ~ maxY = p~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ hypotenuse=args.state.ball_hypotenuse~ ** Processing line: ~~ ** Processing line: ~ @bold = [(minX.x-hypotenuse/2)-1, (minY.y-hypotenuse/2)-1, -((minX.x-hypotenuse/2)-1)+(maxX.x + hypotenuse + 2), -((minY.y-hypotenuse/2)-1)+(maxY.y + hypotenuse + 2)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def getShapePoints(args)~ ** Processing line: ~ points=[]~ ** Processing line: ~ x_offset = (args.state.board_width + args.grid.w / 8) + (@block_offset / 2)~ ** Processing line: ~~ ** Processing line: ~ if @orientation == :right~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ ** Processing line: ~ xa =@x + x_offset~ ** Processing line: ~ ya =@y~ ** Processing line: ~ wa =@block_size * 3 - @block_offset~ ** Processing line: ~ ha =(@block_size - @block_offset)~ ** Processing line: ~ elsif @orientation == :up~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ ** Processing line: ~ xa =@x + x_offset~ ** Processing line: ~ ya =@y~ ** Processing line: ~ wa =@block_size - @block_offset~ ** Processing line: ~ ha =@block_size * 3 - @block_offset~ ** Processing line: ~~ ** Processing line: ~ elsif @orientation == :left~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ ** Processing line: ~ xa =@x + x_offset~ ** Processing line: ~ ya =@y~ ** Processing line: ~ wa =@block_size * 3 - @block_offset~ ** Processing line: ~ ha =@block_size - @block_offset~ ** Processing line: ~ elsif @orientation == :down~ ** Processing line: ~ #args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ ** Processing line: ~ xa =@x + x_offset~ ** Processing line: ~ ya =@y~ ** Processing line: ~ wa =@block_size - @block_offset~ ** Processing line: ~ ha =@block_size * 3 - @block_offset~ ** Processing line: ~ end~ ** Processing line: ~ points = [~ ** Processing line: ~ {x: xa, y:ya},~ ** Processing line: ~ {x: xa + wa,y:ya},~ ** Processing line: ~ {x: xa + wa,y:ya+ha},~ ** Processing line: ~ {x: xa, y:ya+ha},~ ** Processing line: ~ ]~ ** Processing line: ~ @squareColliders = [~ ** Processing line: ~ SquareCollider.new(points[0].x,points[0].y,{x:-1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[1].x-COLLISIONWIDTH,points[1].y,{x:1,y:-1}),~ ** Processing line: ~ SquareCollider.new(points[2].x-COLLISIONWIDTH,points[2].y-COLLISIONWIDTH,{x:1,y:1}),~ ** Processing line: ~ SquareCollider.new(points[3].x,points[3].y-COLLISIONWIDTH,{x:-1,y:1}),~ ** Processing line: ~ ]~ ** Processing line: ~ @colliders = [~ ** Processing line: ~ LinearCollider.new(points[0],points[1], :neg),~ ** Processing line: ~ LinearCollider.new(points[1],points[2], :neg),~ ** Processing line: ~ LinearCollider.new(points[2],points[3], :pos),~ ** Processing line: ~ LinearCollider.new(points[0],points[3], :pos),~ ** Processing line: ~ ]~ ** Processing line: ~ return points~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def update args~ ** Processing line: ~ universalUpdate args, self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw(args)~ ** Processing line: ~ x_offset = (args.state.board_width + args.grid.w / 8) + @block_offset / 2~ ** Processing line: ~~ ** Processing line: ~ if @orientation == :right~ ** Processing line: ~ args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ ** Processing line: ~ elsif @orientation == :up~ ** Processing line: ~ args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ ** Processing line: ~ elsif @orientation == :left~ ** Processing line: ~ args.outputs.solids << [@x + x_offset, @y, @block_size * 3 - @block_offset, @block_size - @block_offset, @r, @g, @b]~ ** Processing line: ~ elsif @orientation == :down~ ** Processing line: ~ args.outputs.solids << [@x + x_offset, @y, @block_size - @block_offset, @block_size * 3 - @block_offset, @r, @g, @b]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << [@x + x_offset + (@block_size * 2 - @block_offset)/2, (@y) + (@block_size * 2 - @block_offset)/2, @count.to_s]~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Arbitrary Collision - linear_collider.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Arbitrary Collision - linear_collider.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Arbitrary Collision - linear_collider.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/linear_collider.rb~ ** Processing line: ~~ ** Processing line: ~ COLLISIONWIDTH=8~ ** Processing line: ~~ ** Processing line: ~ class LinearCollider~ ** Processing line: ~ attr_reader :pointA, :pointB~ ** Processing line: ~ def initialize (pointA, pointB, mode,collisionWidth=COLLISIONWIDTH)~ ** Processing line: ~ @pointA = pointA~ ** Processing line: ~ @pointB = pointB~ ** Processing line: ~ @mode = mode~ ** Processing line: ~ @collisionWidth = collisionWidth~ ** Processing line: ~~ ** Processing line: ~ if (@pointA.x > @pointB.x)~ ** Processing line: ~ @pointA, @pointB = @pointB, @pointA~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @linearCollider_collision_once = false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def collisionSlope args~ ** Processing line: ~ if (@pointB.x-@pointA.x == 0)~ ** Processing line: ~ return INFINITY~ ** Processing line: ~ end~ ** Processing line: ~ return (@pointB.y - @pointA.y) / (@pointB.x - @pointA.x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def collision? (args, points, ball=nil)~ ** Processing line: ~~ ** Processing line: ~ slope = collisionSlope args~ ** Processing line: ~ result = false~ ** Processing line: ~~ ** Processing line: ~ # calculate a vector with a magnitude of (1/2)collisionWidth and a direction perpendicular to the collision line~ ** Processing line: ~ vect=nil;mag=nil;vect=nil;~ ** Processing line: ~ if @mode == :both~ ** Processing line: ~ vect = {x: @pointB.x - @pointA.x, y:@pointB.y - @pointA.y}~ ** Processing line: ~ mag = (vect.x**2 + vect.y**2)**0.5~ ** Processing line: ~ vect = {y: -1*(vect.x/(mag))*@collisionWidth*0.5, x: (vect.y/(mag))*@collisionWidth*0.5}~ ** Processing line: ~ else~ ** Processing line: ~ vect = {x: @pointB.x - @pointA.x, y:@pointB.y - @pointA.y}~ ** Processing line: ~ mag = (vect.x**2 + vect.y**2)**0.5~ ** Processing line: ~ vect = {y: -1*(vect.x/(mag))*@collisionWidth, x: (vect.y/(mag))*@collisionWidth}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ rpointA=nil;rpointB=nil;rpointC=nil;rpointD=nil;~ ** Processing line: ~ if @mode == :pos~ ** Processing line: ~ rpointA = {x:@pointA.x + vect.x, y:@pointA.y + vect.y}~ ** Processing line: ~ rpointB = {x:@pointB.x + vect.x, y:@pointB.y + vect.y}~ ** Processing line: ~ rpointC = {x:@pointB.x, y:@pointB.y}~ ** Processing line: ~ rpointD = {x:@pointA.x, y:@pointA.y}~ ** Processing line: ~ elsif @mode == :neg~ ** Processing line: ~ rpointA = {x:@pointA.x, y:@pointA.y}~ ** Processing line: ~ rpointB = {x:@pointB.x, y:@pointB.y}~ ** Processing line: ~ rpointC = {x:@pointB.x - vect.x, y:@pointB.y - vect.y}~ ** Processing line: ~ rpointD = {x:@pointA.x - vect.x, y:@pointA.y - vect.y}~ ** Processing line: ~ elsif @mode == :both~ ** Processing line: ~ rpointA = {x:@pointA.x + vect.x, y:@pointA.y + vect.y}~ ** Processing line: ~ rpointB = {x:@pointB.x + vect.x, y:@pointB.y + vect.y}~ ** Processing line: ~ rpointC = {x:@pointB.x - vect.x, y:@pointB.y - vect.y}~ ** Processing line: ~ rpointD = {x:@pointA.x - vect.x, y:@pointA.y - vect.y}~ ** Processing line: ~ end~ ** Processing line: ~ #four point rectangle~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ if ball != nil~ ** Processing line: ~ xs = [rpointA.x,rpointB.x,rpointC.x,rpointD.x]~ ** Processing line: ~ ys = [rpointA.y,rpointB.y,rpointC.y,rpointD.y]~ ** Processing line: ~ correct = 1~ ** Processing line: ~ rect1 = [ball.x, ball.y, ball.width, ball.height]~ ** Processing line: ~ #$r1 = rect1~ ** Processing line: ~ rect2 = [xs.min-correct,ys.min-correct,(xs.max-xs.min)+correct*2,(ys.max-ys.min)+correct*2]~ ** Processing line: ~ #$r2 = rect2~ ** Processing line: ~ if rect1.intersect_rect?(rect2) == false~ ** Processing line: ~ return false~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ #area of a triangle~ ** Processing line: ~ triArea = -> (a,b,c) { ((a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y))/2.0).abs }~ ** Processing line: ~~ ** Processing line: ~ #if at least on point is in the rectangle then collision? is true - otherwise false~ ** Processing line: ~ for point in points~ ** Processing line: ~ #Check whether a given point lies inside a rectangle or not:~ ** Processing line: ~ #if the sum of the area of traingls, PAB, PBC, PCD, PAD equal the area of the rec, then an intersection has occured~ ** Processing line: ~ areaRec = triArea.call(rpointA, rpointB, rpointC)+triArea.call(rpointA, rpointC, rpointD)~ ** Processing line: ~ areaSum = [~ ** Processing line: ~ triArea.call(point, rpointA, rpointB),triArea.call(point, rpointB, rpointC),~ ** Processing line: ~ triArea.call(point, rpointC, rpointD),triArea.call(point, rpointA, rpointD)~ ** Processing line: ~ ].inject(0){|sum,x| sum + x }~ ** Processing line: ~ e = 0.0001 #allow for minor error~ ** Processing line: ~ if areaRec>= areaSum-e and areaRec<= areaSum+e~ ** Processing line: ~ result = true~ ** Processing line: ~ #return true~ ** Processing line: ~ break~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #args.outputs.lines << [@pointA.x, @pointA.y, @pointB.x, @pointB.y, 000, 000, 000]~ ** Processing line: ~ #args.outputs.lines << [rpointA.x, rpointA.y, rpointB.x, rpointB.y, 255, 000, 000]~ ** Processing line: ~ #args.outputs.lines << [rpointC.x, rpointC.y, rpointD.x, rpointD.y, 000, 000, 255]~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ #puts (rpointA.x.to_s + " " + rpointA.y.to_s + " " + rpointB.x.to_s + " "+ rpointB.y.to_s)~ ** Processing line: ~ return result~ ** Processing line: ~ end #end collision?~ ** Processing line: ~~ ** Processing line: ~ def getRepelMagnitude (fbx, fby, vrx, vry, ballMag)~ ** Processing line: ~ a = fbx ; b = vrx ; c = fby~ ** Processing line: ~ d = vry ; e = ballMag~ ** Processing line: ~ if b**2 + d**2 == 0~ ** Processing line: ~ #unexpected~ ** Processing line: ~ end~ ** Processing line: ~ x1 = (-a*b+-c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 + d**2 - a**2 * d**2)**0.5)/(b**2 + d**2)~ ** Processing line: ~ x2 = -((a*b + c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 * d**2 - a**2 * d**2)**0.5)/(b**2 + d**2))~ ** Processing line: ~ err = 0.00001~ ** Processing line: ~ o = ((fbx + x1*vrx)**2 + (fby + x1*vry)**2 ) ** 0.5~ ** Processing line: ~ p = ((fbx + x2*vrx)**2 + (fby + x2*vry)**2 ) ** 0.5~ ** Processing line: ~ r = 0~ ** Processing line: ~ if (ballMag >= o-err and ballMag <= o+err)~ ** Processing line: ~ r = x1~ ** Processing line: ~ elsif (ballMag >= p-err and ballMag <= p+err)~ ** Processing line: ~ r = x2~ ** Processing line: ~ else~ ** Processing line: ~ #unexpected~ ** Processing line: ~ end~ ** Processing line: ~ return r~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def collide args, ball~ ** Processing line: ~ slope = collisionSlope args~ ** Processing line: ~~ ** Processing line: ~ # perpVect: normal vector perpendicular to collision~ ** Processing line: ~ perpVect = {x: @pointB.x - @pointA.x, y:@pointB.y - @pointA.y}~ ** Processing line: ~ mag = (perpVect.x**2 + perpVect.y**2)**0.5~ ** Processing line: ~ perpVect = {x: perpVect.x/(mag), y: perpVect.y/(mag)}~ ** Processing line: ~ perpVect = {x: -perpVect.y, y: perpVect.x}~ ** Processing line: ~ if perpVect.y > 0 #ensure perpVect points upward~ ** Processing line: ~ perpVect = {x: perpVect.x*-1, y: perpVect.y*-1}~ ** Processing line: ~ end~ ** Processing line: ~ previousPosition = {~ ** Processing line: ~ x:ball.x-ball.velocity.x,~ ** Processing line: ~ y:ball.y-ball.velocity.y~ ** Processing line: ~ }~ ** Processing line: ~ yInterc = @pointA.y + -slope*@pointA.x~ ** Processing line: ~ if slope == INFINITY~ ** Processing line: ~ if previousPosition.x < @pointA.x~ ** Processing line: ~ perpVect = {x: perpVect.x*-1, y: perpVect.y*-1}~ ** Processing line: ~ yInterc = -INFINITY~ ** Processing line: ~ end~ ** Processing line: ~ elsif previousPosition.y < slope*previousPosition.x + yInterc #check if ball is bellow or above the collider to determine if perpVect is - or +~ ** Processing line: ~ perpVect = {x: perpVect.x*-1, y: perpVect.y*-1}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ velocityMag = (ball.velocity.x**2 + ball.velocity.y**2)**0.5~ ** Processing line: ~ theta_ball=Math.atan2(ball.velocity.y,ball.velocity.x) #the angle of the ball's velocity~ ** Processing line: ~ theta_repel=Math.atan2(perpVect.y,perpVect.x) #the angle of the repelling force(perpVect)~ ** Processing line: ~~ ** Processing line: ~ fbx = velocityMag * Math.cos(theta_ball) #the x component of the ball's velocity~ ** Processing line: ~ fby = velocityMag * Math.sin(theta_ball) #the y component of the ball's velocity~ ** Processing line: ~~ ** Processing line: ~ #the magnitude of the repelling force~ ** Processing line: ~ repelMag = getRepelMagnitude(fbx, fby, perpVect.x, perpVect.y, (ball.velocity.x**2 + ball.velocity.y**2)**0.5)~ ** Processing line: ~ frx = repelMag* Math.cos(theta_repel) #the x component of the repel's velocity | magnitude is set to twice of fbx~ ** Processing line: ~ fry = repelMag* Math.sin(theta_repel) #the y component of the repel's velocity | magnitude is set to twice of fby~ ** Processing line: ~~ ** Processing line: ~ fsumx = fbx+frx #sum of x forces~ ** Processing line: ~ fsumy = fby+fry #sum of y forces~ ** Processing line: ~ fr = velocityMag#fr is the resulting magnitude~ ** Processing line: ~ thetaNew = Math.atan2(fsumy, fsumx) #thetaNew is the resulting angle~ ** Processing line: ~ xnew = fr*Math.cos(thetaNew)#resulting x velocity~ ** Processing line: ~ ynew = fr*Math.sin(thetaNew)#resulting y velocity~ ** Processing line: ~ if (velocityMag < MAX_VELOCITY)~ ** Processing line: ~ ball.velocity = Vector2d.new(xnew*1.1, ynew*1.1)~ ** Processing line: ~ else~ ** Processing line: ~ ball.velocity = Vector2d.new(xnew, ynew)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Arbitrary Collision - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Arbitrary Collision - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Arbitrary Collision - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/main.rb~ ** Processing line: ~ INFINITY= 10**10~ ** Processing line: ~ MAX_VELOCITY = 8.0~ ** Processing line: ~ BALL_COUNT = 90~ ** Processing line: ~ BALL_DISTANCE = 20~ ** Processing line: ~ require 'app/vector2d.rb'~ ** Processing line: ~ require 'app/blocks.rb'~ ** Processing line: ~ require 'app/ball.rb'~ ** Processing line: ~ require 'app/rectangle.rb'~ ** Processing line: ~ require 'app/linear_collider.rb'~ ** Processing line: ~ require 'app/square_collider.rb'~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ #Method to init default values~ ** Processing line: ~ def defaults args~ ** Processing line: ~ args.state.board_width ||= args.grid.w / 4~ ** Processing line: ~ args.state.board_height ||= args.grid.h~ ** Processing line: ~ args.state.game_area ||= [(args.state.board_width + args.grid.w / 8), 0, args.state.board_width, args.grid.h]~ ** Processing line: ~ args.state.balls ||= []~ ** Processing line: ~ args.state.num_balls ||= 0~ ** Processing line: ~ args.state.ball_created_at ||= args.state.tick_count~ ** Processing line: ~ args.state.ball_hypotenuse = (10**2 + 10**2)**0.5~ ** Processing line: ~ args.state.ballParents ||=nil~ ** Processing line: ~~ ** Processing line: ~ init_blocks args~ ** Processing line: ~ init_balls args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :default_methods~ ** Processing line: ~ def init_blocks args~ ** Processing line: ~ block_size = args.state.board_width / 8~ ** Processing line: ~ #Space inbetween each block~ ** Processing line: ~ block_offset = 4~ ** Processing line: ~~ ** Processing line: ~ args.state.squares ||=[~ ** Processing line: ~ Square.new(args, 2, 0, block_size, :right, block_offset),~ ** Processing line: ~ Square.new(args, 5, 0, block_size, :right, block_offset),~ ** Processing line: ~ Square.new(args, 6, 7, block_size, :right, block_offset)~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ #Possible orientations are :right, :left, :up, :down~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ args.state.tshapes ||= [~ ** Processing line: ~ TShape.new(args, 0, 6, block_size, :left, block_offset),~ ** Processing line: ~ TShape.new(args, 3, 3, block_size, :down, block_offset),~ ** Processing line: ~ TShape.new(args, 0, 3, block_size, :right, block_offset),~ ** Processing line: ~ TShape.new(args, 0, 11, block_size, :up, block_offset)~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ args.state.lines ||= [~ ** Processing line: ~ Line.new(args,3, 8, block_size, :down, block_offset),~ ** Processing line: ~ Line.new(args, 7, 3, block_size, :up, block_offset),~ ** Processing line: ~ Line.new(args, 3, 7, block_size, :right, block_offset)~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ #exit()~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def init_balls args~ ** Processing line: ~ return unless args.state.num_balls < BALL_COUNT~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ #only create a new ball every 10 ticks~ ** Processing line: ~ return unless args.state.ball_created_at.elapsed_time > 10~ ** Processing line: ~~ ** Processing line: ~ if (args.state.num_balls == 0)~ ** Processing line: ~ args.state.balls.append(Ball.new(args,args.state.num_balls,BALL_COUNT-1, nil, nil))~ ** Processing line: ~ args.state.ballParents = [args.state.balls[0]]~ ** Processing line: ~ else~ ** Processing line: ~ args.state.balls.append(Ball.new(args,args.state.num_balls,BALL_COUNT-1, args.state.balls.last, nil) )~ ** Processing line: ~ args.state.balls[-2].child = args.state.balls[-1]~ ** Processing line: ~ end~ ** Processing line: ~ args.state.ball_created_at = args.state.tick_count~ ** Processing line: ~ args.state.num_balls += 1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Render loop~ ** Processing line: ~ def render args~ ** Processing line: ~ bgClr = {r:10, g:10, b:200}~ ** Processing line: ~ bgClr = {r:255-30, g:255-30, b:255-30}~ ** Processing line: ~~ ** Processing line: ~ args.outputs.solids << [0, 0, $args.grid.right, $args.grid.top, bgClr[:r], bgClr[:g], bgClr[:b]];~ ** Processing line: ~ args.outputs.borders << args.state.game_area~ ** Processing line: ~~ ** Processing line: ~ render_instructions args~ ** Processing line: ~ render_shapes args~ ** Processing line: ~~ ** Processing line: ~ render_balls args~ ** Processing line: ~~ ** Processing line: ~ #args.state.rectangle.draw args~ ** Processing line: ~~ ** Processing line: ~ args.outputs.sprites << [$args.grid.right-(args.state.board_width + args.grid.w / 8), 0, $args.grid.right, $args.grid.top, "sprites/square-white-2.png", 0, 255, bgClr[:r], bgClr[:g], bgClr[:b]]~ ** Processing line: ~ args.outputs.sprites << [0, 0, (args.state.board_width + args.grid.w / 8), $args.grid.top, "sprites/square-white-2.png", 0, 255, bgClr[:r], bgClr[:g], bgClr[:b]]~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :render_methods~ ** Processing line: ~ def render_instructions args~ ** Processing line: ~ #gtk.current_framerate~ ** Processing line: ~ args.outputs.labels << [20, $args.grid.top-20, "FPS: " + $gtk.current_framerate.to_s]~ ** Processing line: ~ if (args.state.balls != nil && args.state.balls[0] != nil)~ ** Processing line: ~ bx = args.state.balls[0].velocity.x~ ** Processing line: ~ by = args.state.balls[0].velocity.y~ ** Processing line: ~ bmg = (bx**2.0 + by**2.0)**0.5~ ** Processing line: ~ args.outputs.labels << [20, $args.grid.top-20-20, "V: " + bmg.to_s ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_shapes args~ ** Processing line: ~ for s in args.state.squares~ ** Processing line: ~ s.draw args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ for l in args.state.lines~ ** Processing line: ~ l.draw args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ for t in args.state.tshapes~ ** Processing line: ~ t.draw args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_balls args~ ** Processing line: ~ #args.state.balls.each do |ball|~ ** Processing line: ~ #ball.draw args~ ** Processing line: ~ #end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.sprites << args.state.balls.map do |ball|~ ** Processing line: ~ ball.getDraw args~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Calls all methods necessary for performing calculations~ ** Processing line: ~ def calc args~ ** Processing line: ~ for b in args.state.ballParents~ ** Processing line: ~ b.update args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ for s in args.state.squares~ ** Processing line: ~ s.update args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ for l in args.state.lines~ ** Processing line: ~ l.update args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ for t in args.state.tshapes~ ** Processing line: ~ t.update args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :calc_methods~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ defaults args~ ** Processing line: ~ render args~ ** Processing line: ~ calc args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Arbitrary Collision - paddle.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Arbitrary Collision - paddle.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Arbitrary Collision - paddle.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/paddle.rb~ ** Processing line: ~ class Paddle~ ** Processing line: ~ attr_accessor :enabled~ ** Processing line: ~~ ** Processing line: ~ def initialize ()~ ** Processing line: ~ @x=WIDTH/2~ ** Processing line: ~ @y=100~ ** Processing line: ~ @width=100~ ** Processing line: ~ @height=20~ ** Processing line: ~ @speed=10~ ** Processing line: ~~ ** Processing line: ~ @xyCollision = LinearCollider.new({x: @x,y: @y+@height+5}, {x: @x+@width, y: @y+@height+5})~ ** Processing line: ~ @xyCollision2 = LinearCollider.new({x: @x,y: @y}, {x: @x+@width, y: @y}, :pos)~ ** Processing line: ~ @xyCollision3 = LinearCollider.new({x: @x,y: @y}, {x: @x, y: @y+@height+5})~ ** Processing line: ~ @xyCollision4 = LinearCollider.new({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height+5}, :pos)~ ** Processing line: ~~ ** Processing line: ~ @enabled = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def update args~ ** Processing line: ~ @xyCollision.resetPoints({x: @x,y: @y+@height+5}, {x: @x+@width, y: @y+@height+5})~ ** Processing line: ~ @xyCollision2.resetPoints({x: @x,y: @y}, {x: @x+@width, y: @y})~ ** Processing line: ~ @xyCollision3.resetPoints({x: @x,y: @y}, {x: @x, y: @y+@height+5})~ ** Processing line: ~ @xyCollision4.resetPoints({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height+5})~ ** Processing line: ~~ ** Processing line: ~ @xyCollision.update args~ ** Processing line: ~ @xyCollision2.update args~ ** Processing line: ~ @xyCollision3.update args~ ** Processing line: ~ @xyCollision4.update args~ ** Processing line: ~~ ** Processing line: ~ args.inputs.keyboard.key_held.left ||= false~ ** Processing line: ~ args.inputs.keyboard.key_held.right ||= false~ ** Processing line: ~~ ** Processing line: ~ if not (args.inputs.keyboard.key_held.left == args.inputs.keyboard.key_held.right)~ ** Processing line: ~ if args.inputs.keyboard.key_held.left && @enabled~ ** Processing line: ~ @x-=@speed~ ** Processing line: ~ elsif args.inputs.keyboard.key_held.right && @enabled~ ** Processing line: ~ @x+=@speed~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ xmin =WIDTH/4~ ** Processing line: ~ xmax = 3*(WIDTH/4)~ ** Processing line: ~ @x = (@x+@width > xmax) ? xmax-@width : (@x= [@pointA.x,@pointB.x].min+(@extension == :pos ? -@thickness : 0) &&~ ** Processing line: ~ point.x <= [@pointA.x,@pointB.x].max+(@extension == :neg ? @thickness : 0) &&~ ** Processing line: ~ point.y >= [@pointA.y,@pointB.y].min && point.y <= [@pointA.y,@pointB.y].max~ ** Processing line: ~ return true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ isNegInLine = @extension == :neg &&~ ** Processing line: ~ point.y <= slope(@pointA, @pointB)*point.x+intercept(@pointA,@pointB) &&~ ** Processing line: ~ point.y >= point.x*slope(@pointAExtended, @pointBExtended)+intercept(@pointAExtended,@pointBExtended)~ ** Processing line: ~ isPosInLine = @extension == :pos &&~ ** Processing line: ~ point.y >= slope(@pointA, @pointB)*point.x+intercept(@pointA,@pointB) &&~ ** Processing line: ~ point.y <= point.x*slope(@pointAExtended, @pointBExtended)+intercept(@pointAExtended,@pointBExtended)~ ** Processing line: ~ isInBoxBounds = point.x >= [@pointA.x,@pointB.x].min &&~ ** Processing line: ~ point.x <= [@pointA.x,@pointB.x].max &&~ ** Processing line: ~ point.y >= [@pointA.y,@pointB.y].min+(@extension == :neg ? -@thickness : 0) &&~ ** Processing line: ~ point.y <= [@pointA.y,@pointB.y].max+(@extension == :pos ? @thickness : 0)~ ** Processing line: ~~ ** Processing line: ~ return isInBoxBounds && (isNegInLine || isPosInLine)~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def getRepelMagnitude (fbx, fby, vrx, vry, args)~ ** Processing line: ~ a = fbx ; b = vrx ; c = fby~ ** Processing line: ~ d = vry ; e = args.state.ball.velocity.mag~ ** Processing line: ~~ ** Processing line: ~ if b**2 + d**2 == 0~ ** Processing line: ~ puts "magnitude error"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ x1 = (-a*b+-c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 + d**2 - a**2 * d**2)**0.5)/(b**2 + d**2)~ ** Processing line: ~ x2 = -((a*b + c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 * d**2 - a**2 * d**2)**0.5)/(b**2 + d**2))~ ** Processing line: ~ return ((a+x1*b)**2 + (c+x1*d)**2 == e**2) ? x1 : x2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def update args~ ** Processing line: ~ #each of the four points on the square ball - NOTE simple to extend to a circle~ ** Processing line: ~ points= [ {x: args.state.ball.xy.x, y: args.state.ball.xy.y},~ ** Processing line: ~ {x: args.state.ball.xy.x+args.state.ball.width, y: args.state.ball.xy.y},~ ** Processing line: ~ {x: args.state.ball.xy.x, y: args.state.ball.xy.y+args.state.ball.height},~ ** Processing line: ~ {x: args.state.ball.xy.x+args.state.ball.width, y: args.state.ball.xy.y + args.state.ball.height}~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ #for each point p in points~ ** Processing line: ~ for point in points~ ** Processing line: ~ #isCollision.md has more information on this section~ ** Processing line: ~ #TODO: section can certainly be simplifyed~ ** Processing line: ~ if isCollision?(point)~ ** Processing line: ~ u = Vector2d.new(1.0,((slope(@pointA, @pointB)==0) ? INFINITY : -1/slope(@pointA, @pointB))*1.0).normalize #normal perpendicular (to line segment) vector~ ** Processing line: ~~ ** Processing line: ~ #the vector with the repeling force can be u or -u depending of where the ball was coming from in relation to the line segment~ ** Processing line: ~ previousBallPosition=Vector2d.new(point.x-args.state.ball.velocity.x,point.y-args.state.ball.velocity.y)~ ** Processing line: ~ choiceA = (u.mult(1))~ ** Processing line: ~ choiceB = (u.mult(-1))~ ** Processing line: ~ vectorRepel = nil~ ** Processing line: ~~ ** Processing line: ~ if (slope(@pointA, @pointB))!=INFINITY && u.y < 0~ ** Processing line: ~ choiceA, choiceB = choiceB, choiceA~ ** Processing line: ~ end~ ** Processing line: ~ vectorRepel = (previousBallPosition.y > calcY(@pointA, @pointB, previousBallPosition.x)) ? choiceA : choiceB~ ** Processing line: ~~ ** Processing line: ~ #vectorRepel = (previousBallPosition.y > slope(@pointA, @pointB)*previousBallPosition.x+intercept(@pointA,@pointB)) ? choiceA : choiceB)~ ** Processing line: ~ if (slope(@pointA, @pointB) == INFINITY) #slope INFINITY breaks down in the above test, ergo it requires a custom test~ ** Processing line: ~ vectorRepel = (previousBallPosition.x > @pointA.x) ? (u.mult(1)) : (u.mult(-1))~ ** Processing line: ~ end~ ** Processing line: ~ #puts (" " + $t[0].to_s + "," + $t[1].to_s + " " + $t[2].to_s + "," + $t[3].to_s + " " + " " + u.x.to_s + "," + u.y.to_s)~ ** Processing line: ~ #vectorRepel now has the repeling force~ ** Processing line: ~~ ** Processing line: ~ mag = args.state.ball.velocity.mag~ ** Processing line: ~ theta_ball=Math.atan2(args.state.ball.velocity.y,args.state.ball.velocity.x) #the angle of the ball's velocity~ ** Processing line: ~ theta_repel=Math.atan2(vectorRepel.y,vectorRepel.x) #the angle of the repeling force~ ** Processing line: ~ #puts ("theta:" + theta_ball.to_s + " " + theta_repel.to_s) #theta okay~ ** Processing line: ~~ ** Processing line: ~ fbx = mag * Math.cos(theta_ball) #the x component of the ball's velocity~ ** Processing line: ~ fby = mag * Math.sin(theta_ball) #the y component of the ball's velocity~ ** Processing line: ~~ ** Processing line: ~ repelMag = getRepelMagnitude(fbx, fby, vectorRepel.x, vectorRepel.y, args)~ ** Processing line: ~~ ** Processing line: ~ frx = repelMag* Math.cos(theta_repel) #the x component of the repel's velocity | magnitude is set to twice of fbx~ ** Processing line: ~ fry = repelMag* Math.sin(theta_repel) #the y component of the repel's velocity | magnitude is set to twice of fby~ ** Processing line: ~~ ** Processing line: ~ fsumx = fbx+frx #sum of x forces~ ** Processing line: ~ fsumy = fby+fry #sum of y forces~ ** Processing line: ~ fr = mag#fr is the resulting magnitude~ ** Processing line: ~ thetaNew = Math.atan2(fsumy, fsumx) #thetaNew is the resulting angle~ ** Processing line: ~ xnew = fr*Math.cos(thetaNew) #resulting x velocity~ ** Processing line: ~ ynew = fr*Math.sin(thetaNew) #resulting y velocity~ ** Processing line: ~~ ** Processing line: ~ args.state.ball.velocity = Vector2d.new(xnew,ynew)~ ** Processing line: ~ #args.state.ball.xy.add(args.state.ball.velocity)~ ** Processing line: ~ break #no need to check the other points ?~ ** Processing line: ~ else~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end #end update~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Collision With Object Removal - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Collision With Object Removal - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Collision With Object Removal - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/10_collision_with_object_removal/app/main.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ INFINITY= 10**10~ ** Processing line: ~ WIDTH=1280~ ** Processing line: ~ HEIGHT=720~ ** Processing line: ~~ ** Processing line: ~ require 'app/vector2d.rb'~ ** Processing line: ~ require 'app/paddle.rb'~ ** Processing line: ~ require 'app/ball.rb'~ ** Processing line: ~ require 'app/linear_collider.rb'~ ** Processing line: ~~ ** Processing line: ~ #Method to init default values~ ** Processing line: ~ def defaults args~ ** Processing line: ~ args.state.game_board ||= [(args.grid.w / 2 - args.grid.w / 4), 0, (args.grid.w / 2), args.grid.h]~ ** Processing line: ~ args.state.bricks ||= []~ ** Processing line: ~ args.state.num_bricks ||= 0~ ** Processing line: ~ args.state.game_over_at ||= 0~ ** Processing line: ~ args.state.paddle ||= Paddle.new~ ** Processing line: ~ args.state.ball ||= Ball.new~ ** Processing line: ~ args.state.westWall ||= LinearCollider.new({x: args.grid.w/4, y: 0}, {x: args.grid.w/4, y: args.grid.h}, :pos)~ ** Processing line: ~ args.state.eastWall ||= LinearCollider.new({x: 3*args.grid.w*0.25, y: 0}, {x: 3*args.grid.w*0.25, y: args.grid.h})~ ** Processing line: ~ args.state.southWall ||= LinearCollider.new({x: 0, y: 0}, {x: args.grid.w, y: 0})~ ** Processing line: ~ args.state.northWall ||= LinearCollider.new({x: 0, y:args.grid.h}, {x: args.grid.w, y: args.grid.h}, :pos)~ ** Processing line: ~~ ** Processing line: ~ #args.state.testWall ||= LinearCollider.new({x:0 , y:0},{x:args.grid.w, y:args.grid.h})~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Render loop~ ** Processing line: ~ def render args~ ** Processing line: ~ render_instructions args~ ** Processing line: ~ render_board args~ ** Processing line: ~ render_bricks args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :render_methods~ ** Processing line: ~ #Method to display the instructions of the game~ ** Processing line: ~ def render_instructions args~ ** Processing line: ~ args.outputs.labels << [225, args.grid.h - 30, "← and → to move the paddle left and right", 0, 1]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_board args~ ** Processing line: ~ args.outputs.borders << args.state.game_board~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_bricks args~ ** Processing line: ~ args.outputs.solids << args.state.bricks.map(&:rect)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Calls all methods necessary for performing calculations~ ** Processing line: ~ def calc args~ ** Processing line: ~ add_new_bricks args~ ** Processing line: ~ reset_game args~ ** Processing line: ~ calc_collision args~ ** Processing line: ~ win_game args~ ** Processing line: ~~ ** Processing line: ~ args.state.westWall.update args~ ** Processing line: ~ args.state.eastWall.update args~ ** Processing line: ~ args.state.southWall.update args~ ** Processing line: ~ args.state.northWall.update args~ ** Processing line: ~ args.state.paddle.update args~ ** Processing line: ~ args.state.ball.update args~ ** Processing line: ~~ ** Processing line: ~ #args.state.testWall.update args~ ** Processing line: ~~ ** Processing line: ~ args.state.paddle.render args~ ** Processing line: ~ args.state.ball.render args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :calc_methods~ ** Processing line: ~ def add_new_bricks args~ ** Processing line: ~ return if args.state.num_bricks > 40~ ** Processing line: ~~ ** Processing line: ~ #Width of the game board is 640px~ ** Processing line: ~ brick_width = (args.grid.w / 2) / 10~ ** Processing line: ~ brick_height = brick_width / 2~ ** Processing line: ~~ ** Processing line: ~ (4).map_with_index do |y|~ ** Processing line: ~ #Make a box that is 10 bricks wide and 4 bricks tall~ ** Processing line: ~ args.state.bricks += (10).map_with_index do |x|~ ** Processing line: ~ args.state.new_entity(:brick) do |b|~ ** Processing line: ~ b.x = x * brick_width + (args.grid.w / 2 - args.grid.w / 4)~ ** Processing line: ~ b.y = args.grid.h - ((y + 1) * brick_height)~ ** Processing line: ~ b.rect = [b.x + 1, b.y - 1, brick_width - 2, brick_height - 2, 235, 50 * y, 52]~ ** Processing line: ~~ ** Processing line: ~ #Add linear colliders to the brick~ ** Processing line: ~ b.collider_bottom = LinearCollider.new([(b.x-2), (b.y-5)], [(b.x+brick_width+1), (b.y-5)], :pos, brick_height)~ ** Processing line: ~ b.collider_right = LinearCollider.new([(b.x+brick_width+1), (b.y-5)], [(b.x+brick_width+1), (b.y+brick_height+1)], :pos)~ ** Processing line: ~ b.collider_left = LinearCollider.new([(b.x-2), (b.y-5)], [(b.x-2), (b.y+brick_height+1)], :neg)~ ** Processing line: ~ b.collider_top = LinearCollider.new([(b.x-2), (b.y+brick_height+1)], [(b.x+brick_width+1), (b.y+brick_height+1)], :neg)~ ** Processing line: ~~ ** Processing line: ~ # @xyCollision = LinearCollider.new({x: @x,y: @y+@height}, {x: @x+@width, y: @y+@height})~ ** Processing line: ~ # @xyCollision2 = LinearCollider.new({x: @x,y: @y}, {x: @x+@width, y: @y}, :pos)~ ** Processing line: ~ # @xyCollision3 = LinearCollider.new({x: @x,y: @y}, {x: @x, y: @y+@height})~ ** Processing line: ~ # @xyCollision4 = LinearCollider.new({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height}, :pos)~ ** Processing line: ~~ ** Processing line: ~ b.broken = false~ ** Processing line: ~~ ** Processing line: ~ args.state.num_bricks += 1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reset_game args~ ** Processing line: ~ if args.state.ball.xy.y < 20 && args.state.game_over_at.elapsed_time > 60~ ** Processing line: ~ #Freeze the ball~ ** Processing line: ~ args.state.ball.velocity.x = 0~ ** Processing line: ~ args.state.ball.velocity.y = 0~ ** Processing line: ~ #Freeze the paddle~ ** Processing line: ~ args.state.paddle.enabled = false~ ** Processing line: ~~ ** Processing line: ~ args.state.game_over_at = args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.game_over_at.elapsed_time < 60 && args.state.tick_count > 60 && args.state.bricks.count != 0~ ** Processing line: ~ #Display a "Game over" message~ ** Processing line: ~ args.outputs.labels << [100, 100, "GAME OVER", 10]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #If 60 frames have passed since the game ended, restart the game~ ** Processing line: ~ if args.state.game_over_at != 0 && args.state.game_over_at.elapsed_time == 60~ ** Processing line: ~ # FIXME: only put value types in state~ ** Processing line: ~ args.state.ball = Ball.new~ ** Processing line: ~~ ** Processing line: ~ # FIXME: only put value types in state~ ** Processing line: ~ args.state.paddle = Paddle.new~ ** Processing line: ~~ ** Processing line: ~ args.state.bricks = []~ ** Processing line: ~ args.state.num_bricks = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_collision args~ ** Processing line: ~ #Remove the brick if it is hit with the ball~ ** Processing line: ~ ball = args.state.ball~ ** Processing line: ~ ball_rect = [ball.xy.x, ball.xy.y, 20, 20]~ ** Processing line: ~~ ** Processing line: ~ #Loop through each brick to see if the ball is colliding with it~ ** Processing line: ~ args.state.bricks.each do |b|~ ** Processing line: ~ if b.rect.intersect_rect?(ball_rect)~ ** Processing line: ~ #Run the linear collider for the brick if there is a collision~ ** Processing line: ~ b[:collider_bottom].update args~ ** Processing line: ~ b[:collider_right].update args~ ** Processing line: ~ b[:collider_left].update args~ ** Processing line: ~ b[:collider_top].update args~ ** Processing line: ~~ ** Processing line: ~ b.broken = true~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.bricks = args.state.bricks.reject(&:broken)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def win_game args~ ** Processing line: ~ if args.state.bricks.count == 0 && args.state.game_over_at.elapsed_time > 60~ ** Processing line: ~ #Freeze the ball~ ** Processing line: ~ args.state.ball.velocity.x = 0~ ** Processing line: ~ args.state.ball.velocity.y = 0~ ** Processing line: ~ #Freeze the paddle~ ** Processing line: ~ args.state.paddle.enabled = false~ ** Processing line: ~~ ** Processing line: ~ args.state.game_over_at = args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.game_over_at.elapsed_time < 60 && args.state.tick_count > 60 && args.state.bricks.count == 0~ ** Processing line: ~ #Display a "Game over" message~ ** Processing line: ~ args.outputs.labels << [100, 100, "CONGRATULATIONS!", 10]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ defaults args~ ** Processing line: ~ render args~ ** Processing line: ~ calc args~ ** Processing line: ~~ ** Processing line: ~ #args.outputs.lines << [0, 0, args.grid.w, args.grid.h]~ ** Processing line: ~~ ** Processing line: ~ #$tc+=1~ ** Processing line: ~ #if $tc == 5~ ** Processing line: ~ #$train << [args.state.ball.xy.x, args.state.ball.xy.y]~ ** Processing line: ~ #$tc = 0~ ** Processing line: ~ #end~ ** Processing line: ~ #for t in $train~ ** Processing line: ~~ ** Processing line: ~ #args.outputs.solids << [t[0],t[1],5,5,255,0,0];~ ** Processing line: ~ #end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Physics And Collisions - Collision With Object Removal - paddle.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Collision With Object Removal - paddle.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Physics And Collisions - Collision With Object Removal - paddle.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/04_physics_and_collisions/10_collision_with_object_removal/app/paddle.rb~ ** Processing line: ~ class Paddle~ ** Processing line: ~ attr_accessor :enabled~ ** Processing line: ~~ ** Processing line: ~ def initialize ()~ ** Processing line: ~ @x=WIDTH/2~ ** Processing line: ~ @y=100~ ** Processing line: ~ @width=100~ ** Processing line: ~ @height=20~ ** Processing line: ~ @speed=10~ ** Processing line: ~~ ** Processing line: ~ @xyCollision = LinearCollider.new({x: @x,y: @y+@height+5}, {x: @x+@width, y: @y+@height+5})~ ** Processing line: ~ @xyCollision2 = LinearCollider.new({x: @x,y: @y}, {x: @x+@width, y: @y}, :pos)~ ** Processing line: ~ @xyCollision3 = LinearCollider.new({x: @x,y: @y}, {x: @x, y: @y+@height+5})~ ** Processing line: ~ @xyCollision4 = LinearCollider.new({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height+5}, :pos)~ ** Processing line: ~~ ** Processing line: ~ @enabled = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def update args~ ** Processing line: ~ @xyCollision.resetPoints({x: @x,y: @y+@height+5}, {x: @x+@width, y: @y+@height+5})~ ** Processing line: ~ @xyCollision2.resetPoints({x: @x,y: @y}, {x: @x+@width, y: @y})~ ** Processing line: ~ @xyCollision3.resetPoints({x: @x,y: @y}, {x: @x, y: @y+@height+5})~ ** Processing line: ~ @xyCollision4.resetPoints({x: @x+@width,y: @y}, {x: @x+@width, y: @y+@height+5})~ ** Processing line: ~~ ** Processing line: ~ @xyCollision.update args~ ** Processing line: ~ @xyCollision2.update args~ ** Processing line: ~ @xyCollision3.update args~ ** Processing line: ~ @xyCollision4.update args~ ** Processing line: ~~ ** Processing line: ~ args.inputs.keyboard.key_held.left ||= false~ ** Processing line: ~ args.inputs.keyboard.key_held.right ||= false~ ** Processing line: ~~ ** Processing line: ~ if not (args.inputs.keyboard.key_held.left == args.inputs.keyboard.key_held.right)~ ** Processing line: ~ if args.inputs.keyboard.key_held.left && @enabled~ ** Processing line: ~ @x-=@speed~ ** Processing line: ~ elsif args.inputs.keyboard.key_held.right && @enabled~ ** Processing line: ~ @x+=@speed~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ xmin =WIDTH/4~ ** Processing line: ~ xmax = 3*(WIDTH/4)~ ** Processing line: ~ @x = (@x+@width > xmax) ? xmax-@width : (@x 10 # return if more than 10 frames have passed since flash.~ ** Processing line: ~ # Transparency gradually changes (or eases) during the 10 frames of flash.~ ** Processing line: ~ outputs.primitives << [grid.rect, 255, 255, 255, 255 * state.flash_at.ease(10, :flip)].solid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calls all methods necessary for performing calculations.~ ** Processing line: ~ def calc~ ** Processing line: ~ calc_spawn_zombie~ ** Processing line: ~ calc_move_zombies~ ** Processing line: ~ calc_player~ ** Processing line: ~ calc_kill_zombie~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Decreases the zombie spawn countdown by 1 if it has a value greater than 0.~ ** Processing line: ~ def calc_spawn_zombie~ ** Processing line: ~ if state.zombie_spawn_countdown > 0~ ** Processing line: ~ state.zombie_spawn_countdown -= 1~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # New zombies are created, positioned on the screen, and added to the zombies collection.~ ** Processing line: ~ state.zombies << state.new_entity(:zombie) do |z| # each zombie is declared a new entity~ ** Processing line: ~ if rand > 0.5~ ** Processing line: ~ z.x = grid.rect.w.randomize(:ratio) # random x position on screen (within grid scope)~ ** Processing line: ~ z.y = [-10, 730].sample # y position is set to either -10 or 730 (randomly chosen)~ ** Processing line: ~ # the possible values exceed the screen's scope so zombies appear to be coming from far away~ ** Processing line: ~ else~ ** Processing line: ~ z.x = [-10, 1290].sample # x position is set to either -10 or 1290 (randomly chosen)~ ** Processing line: ~ z.y = grid.rect.w.randomize(:ratio) # random y position on screen~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calls random_spawn_countdown method (determines how fast new zombies appear)~ ** Processing line: ~ state.zombie_spawn_countdown = random_spawn_countdown state.zombie_min_spawn_rate~ ** Processing line: ~ state.zombie_min_spawn_rate -= 1~ ** Processing line: ~ # set to either the current zombie_min_spawn_rate or 0, depending on which value is greater~ ** Processing line: ~ state.zombie_min_spawn_rate = state.zombie_min_spawn_rate.greater(0)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves all zombies towards the center of the screen.~ ** Processing line: ~ # All zombies that reach the center (640, 360) are rejected from the zombies collection and disappear.~ ** Processing line: ~ def calc_move_zombies~ ** Processing line: ~ state.zombies.each do |z| # for each zombie in the collection~ ** Processing line: ~ z.y = z.y.towards(360, 0.1) # move the zombie towards the center (640, 360) at a rate of 0.1~ ** Processing line: ~ z.x = z.x.towards(640, 0.1) # change 0.1 to 1.1 and see how much faster the zombies move to the center~ ** Processing line: ~ end~ ** Processing line: ~ state.zombies = state.zombies.reject { |z| z.y == 360 && z.x == 640 } # remove zombies that are in center~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates the position and movement of the player on the screen.~ ** Processing line: ~ def calc_player~ ** Processing line: ~ state.player.x += state.player.dx # changes x based on dx (change in x)~ ** Processing line: ~ state.player.y += state.player.dy # changes y based on dy (change in y)~ ** Processing line: ~~ ** Processing line: ~ state.player.dx *= 0.9 # scales dx down~ ** Processing line: ~ state.player.dy *= 0.9 # scales dy down~ ** Processing line: ~~ ** Processing line: ~ # Compares player's x to 1280 to find lesser value, then compares result to 0 to find greater value.~ ** Processing line: ~ # This ensures that the player remains within the screen's scope.~ ** Processing line: ~ state.player.x = state.player.x.lesser(1280).greater(0)~ ** Processing line: ~ state.player.y = state.player.y.lesser(720).greater(0) # same with player's y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds all zombies that intersect with the player's sprite. These zombies are removed from the zombies collection~ ** Processing line: ~ # and added to the killed_zombies collection since any zombie that intersects with the player is killed.~ ** Processing line: ~ def calc_kill_zombie~ ** Processing line: ~~ ** Processing line: ~ # Find all zombies that intersect with the player. They are considered killed.~ ** Processing line: ~ killed_this_frame = state.zombies.find_all { |z| z.sprite && (z.sprite.intersect_rect? state.player_sprite) }~ ** Processing line: ~ state.zombies = state.zombies - killed_this_frame # remove newly killed zombies from zombies collection~ ** Processing line: ~ state.killed_zombies += killed_this_frame # add newly killed zombies to killed zombies~ ** Processing line: ~~ ** Processing line: ~ if killed_this_frame.length > 0 # if atleast one zombie was killed in the frame~ ** Processing line: ~ state.flash_at = state.tick_count # flash_at set to the frame when the zombie was killed~ ** Processing line: ~ # Don't forget, the rendered flash lasts for 10 frames after the zombie is killed (look at render_flash method)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the tick_count (passage of time) as the value of the death_at variable for each killed zombie.~ ** Processing line: ~ # Death_at stores the frame a zombie was killed.~ ** Processing line: ~ killed_this_frame.each do |z|~ ** Processing line: ~ z.death_at = state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Zombies are rejected from the killed_zombies collection depending on when they were killed.~ ** Processing line: ~ # They are rejected if more than 30 frames have passed since their death.~ ** Processing line: ~ state.killed_zombies = state.killed_zombies.reject { |z| state.tick_count - z.death_at > 30 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Uses input from the user to move the player around the screen.~ ** Processing line: ~ def input~ ** Processing line: ~~ ** Processing line: ~ # If the "a" key or left key is pressed, the x position of the player decreases.~ ** Processing line: ~ # Otherwise, if the "d" key or right key is pressed, the x position of the player increases.~ ** Processing line: ~ if inputs.keyboard.key_held.a || inputs.keyboard.key_held.left~ ** Processing line: ~ state.player.x -= 5~ ** Processing line: ~ elsif inputs.keyboard.key_held.d || inputs.keyboard.key_held.right~ ** Processing line: ~ state.player.x += 5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # If the "w" or up key is pressed, the y position of the player increases.~ ** Processing line: ~ # Otherwise, if the "s" or down key is pressed, the y position of the player decreases.~ ** Processing line: ~ if inputs.keyboard.key_held.w || inputs.keyboard.key_held.up~ ** Processing line: ~ state.player.y += 5~ ** Processing line: ~ elsif inputs.keyboard.key_held.s || inputs.keyboard.key_held.down~ ** Processing line: ~ state.player.y -= 5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the attack angle so the player can move and attack in the precise direction it wants to go.~ ** Processing line: ~ # If the mouse is moved, the attack angle is changed (based on the player's position and mouse position).~ ** Processing line: ~ # Attack angle also contributes to the position of red square.~ ** Processing line: ~ if inputs.mouse.moved~ ** Processing line: ~ state.player.attack_angle = inputs.mouse.position.angle_from [state.player.x, state.player.y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.mouse.click && state.player.dx < 0.5 && state.player.dy < 0.5~ ** Processing line: ~ state.player.attack_angle_on_click = inputs.mouse.position.angle_from [state.player.x, state.player.y]~ ** Processing line: ~ state.player.attack_angle = state.player.attack_angle_on_click # player's attack angle is set~ ** Processing line: ~ state.player.dx = state.player.attack_angle.vector_x(25) # change in player's position~ ** Processing line: ~ state.player.dy = state.player.attack_angle.vector_y(25)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the zombie spawn's countdown to a random number.~ ** Processing line: ~ # How fast zombies appear (change the 60 to 6 and too many zombies will appear at once!)~ ** Processing line: ~ def random_spawn_countdown minimum~ ** Processing line: ~ 10.randomize(:ratio, :sign).to_i + 60~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Helps to iterate through the images in the sprites folder by setting the animation index.~ ** Processing line: ~ # 3 frames is how long to show an image, and 6 is how many images to flip through.~ ** Processing line: ~ def animation_index at~ ** Processing line: ~ at.idiv(3).mod(6)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Animates the zombies by using the animation index to go through the images in the sprites folder.~ ** Processing line: ~ def animation_sprite zombie, at = nil~ ** Processing line: ~ at ||= zombie.created_at_elapsed # how long it is has been since a zombie was created~ ** Processing line: ~ index = animation_index at~ ** Processing line: ~ "sprites/zombie-#{index}.png" # string interpolation to iterate through images~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $protect_the_puppies_from_the_zombies = ProtectThePuppiesFromTheZombies.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $protect_the_puppies_from_the_zombies.grid = args.grid~ ** Processing line: ~ $protect_the_puppies_from_the_zombies.inputs = args.inputs~ ** Processing line: ~ $protect_the_puppies_from_the_zombies.state = args.state~ ** Processing line: ~ $protect_the_puppies_from_the_zombies.outputs = args.outputs~ ** Processing line: ~ $protect_the_puppies_from_the_zombies.tick~ ** Processing line: ~ tick_instructions args, "How to get the mouse position and translate it to an x, y position using .vector_x and .vector_y. CLICK to play."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Mouse - Mouse Move Paint App - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Mouse - Mouse Move Paint App - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Mouse - Mouse Move Paint App - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/05_mouse/03_mouse_move_paint_app/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - Floor: Method that returns an integer number smaller than or equal to the original with no decimal.~ ** Processing line: ~~ ** Processing line: ~ For example, if we have a variable, a = 13.7, and we called floor on it, it would look like this...~ ** Processing line: ~ puts a.floor()~ ** Processing line: ~ which would print out 13.~ ** Processing line: ~ (There is also a ceil method, which returns an integer number greater than or equal to the original~ ** Processing line: ~ with no decimal. If we had called ceil on the variable a, the result would have been 14.)~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - Hashes: Collection of unique keys and their corresponding values. The value can be found~ ** Processing line: ~ using their keys.~ ** Processing line: ~~ ** Processing line: ~ For example, if we have a "numbers" hash that stores numbers in English as the~ ** Processing line: ~ key and numbers in Spanish as the value, we'd have a hash that looks like this...~ ** Processing line: ~ numbers = { "one" => "uno", "two" => "dos", "three" => "tres" }~ ** Processing line: ~ and on it goes.~ ** Processing line: ~~ ** Processing line: ~ Now if we wanted to find the corresponding value of the "one" key, we could say~ ** Processing line: ~ puts numbers["one"]~ ** Processing line: ~ which would print "uno" to the console.~ ** Processing line: ~~ ** Processing line: ~ - args.state.new_entity: Used when we want to create a new object, like a sprite or button.~ ** Processing line: ~ In this sample app, new_entity is used to create a new button that clears the grid.~ ** Processing line: ~ (Remember, you can use state to define ANY property and it will be retained across frames.)~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.mouse.click.point.(x|y): The x and y location of the mouse.~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.mouse.click.point.created_at: The frame the mouse click occurred in.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.labels: An array. The values in the array generate a label.~ ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ ** Processing line: ~~ ** Processing line: ~ - ARRAY#inside_rect?: Returns true or false depending on if the point is inside the rect.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app shows an empty grid that the user can paint on.~ ** Processing line: ~ # To paint, the user must keep their mouse presssed and drag it around the grid.~ ** Processing line: ~ # The "clear" button allows users to clear the grid so they can start over.~ ** Processing line: ~~ ** Processing line: ~ class PaintApp~ ** Processing line: ~ attr_accessor :inputs, :state, :outputs, :grid, :args~ ** Processing line: ~~ ** Processing line: ~ # Runs methods necessary for the game to function properly.~ ** Processing line: ~ def tick~ ** Processing line: ~ print_title~ ** Processing line: ~ add_grid~ ** Processing line: ~ check_click~ ** Processing line: ~ draw_buttons~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Prints the title onto the screen by using a label.~ ** Processing line: ~ # Also separates the title from the grid with a line as a horizontal separator.~ ** Processing line: ~ def print_title~ ** Processing line: ~ args.outputs.labels << [ 640, 700, 'Paint!', 0, 1 ]~ ** Processing line: ~ outputs.lines << horizontal_separator(660, 0, 1280)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the starting position, ending position, and color for the horizontal separator.~ ** Processing line: ~ # The starting and ending positions have the same y values.~ ** Processing line: ~ def horizontal_separator y, x, x2~ ** Processing line: ~ [x, y, x2, y, 150, 150, 150]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the starting position, ending position, and color for the vertical separator.~ ** Processing line: ~ # The starting and ending positions have the same x values.~ ** Processing line: ~ def vertical_separator x, y, y2~ ** Processing line: ~ [x, y, x, y2, 150, 150, 150]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs a border and a grid containing empty squares onto the screen.~ ** Processing line: ~ def add_grid~ ** Processing line: ~~ ** Processing line: ~ # Sets the x, y, height, and width of the grid.~ ** Processing line: ~ # There are 31 horizontal lines and 31 vertical lines in the grid.~ ** Processing line: ~ # Feel free to count them yourself before continuing!~ ** Processing line: ~ x, y, h, w = 640 - 500/2, 640 - 500, 500, 500 # calculations done so the grid appears in screen's center~ ** Processing line: ~ lines_h = 31~ ** Processing line: ~ lines_v = 31~ ** Processing line: ~~ ** Processing line: ~ # Sets values for the grid's border, grid lines, and filled squares.~ ** Processing line: ~ # The filled_squares variable is initially set to an empty array.~ ** Processing line: ~ state.grid_border ||= [ x, y, h, w ] # definition of grid's outer border~ ** Processing line: ~ state.grid_lines ||= draw_grid(x, y, h, w, lines_h, lines_v) # calls draw_grid method~ ** Processing line: ~ state.filled_squares ||= [] # there are no filled squares until the user fills them in~ ** Processing line: ~~ ** Processing line: ~ # Outputs the grid lines, border, and filled squares onto the screen.~ ** Processing line: ~ outputs.lines.concat state.grid_lines~ ** Processing line: ~ outputs.borders << state.grid_border~ ** Processing line: ~ outputs.solids << state.filled_squares~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws the grid by adding in vertical and horizontal separators.~ ** Processing line: ~ def draw_grid x, y, h, w, lines_h, lines_v~ ** Processing line: ~~ ** Processing line: ~ # The grid starts off empty.~ ** Processing line: ~ grid = []~ ** Processing line: ~~ ** Processing line: ~ # Calculates the placement and adds horizontal lines or separators into the grid.~ ** Processing line: ~ curr_y = y # start at the bottom of the box~ ** Processing line: ~ dist_y = h / (lines_h + 1) # finds distance to place horizontal lines evenly throughout 500 height of grid~ ** Processing line: ~ lines_h.times do~ ** Processing line: ~ curr_y += dist_y # increment curr_y by the distance between the horizontal lines~ ** Processing line: ~ grid << horizontal_separator(curr_y, x, x + w - 1) # add a separator into the grid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates the placement and adds vertical lines or separators into the grid.~ ** Processing line: ~ curr_x = x # now start at the left of the box~ ** Processing line: ~ dist_x = w / (lines_v + 1) # finds distance to place vertical lines evenly throughout 500 width of grid~ ** Processing line: ~ lines_v.times do~ ** Processing line: ~ curr_x += dist_x # increment curr_x by the distance between the vertical lines~ ** Processing line: ~ grid << vertical_separator(curr_x, y + 1, y + h) # add separator~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # paint_grid uses a hash to assign values to keys.~ ** Processing line: ~ state.paint_grid ||= {"x" => x, "y" => y, "h" => h, "w" => w, "lines_h" => lines_h,~ ** Processing line: ~ "lines_v" => lines_v, "dist_x" => dist_x,~ ** Processing line: ~ "dist_y" => dist_y }~ ** Processing line: ~~ ** Processing line: ~ return grid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Checks if the user is keeping the mouse pressed down and sets the mouse_hold variable accordingly using boolean values.~ ** Processing line: ~ # If the mouse is up, the user cannot drag the mouse.~ ** Processing line: ~ def check_click~ ** Processing line: ~ if inputs.mouse.down #is mouse up or down?~ ** Processing line: ~ state.mouse_held = true # mouse is being held down~ ** Processing line: ~ elsif inputs.mouse.up # if mouse is up~ ** Processing line: ~ state.mouse_held = false # mouse is not being held down or dragged~ ** Processing line: ~ state.mouse_dragging = false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if state.mouse_held && # mouse needs to be down~ ** Processing line: ~ !inputs.mouse.click && # must not be first click~ ** Processing line: ~ ((inputs.mouse.previous_click.point.x - inputs.mouse.position.x).abs > 15) # Need to move 15 pixels before "drag"~ ** Processing line: ~ state.mouse_dragging = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # If the user clicks their mouse inside the grid, the search_lines method is called with a click input type.~ ** Processing line: ~ if ((inputs.mouse.click) && (inputs.mouse.click.point.inside_rect? state.grid_border))~ ** Processing line: ~ search_lines(inputs.mouse.click.point, :click)~ ** Processing line: ~~ ** Processing line: ~ # If the user drags their mouse inside the grid, the search_lines method is called with a drag input type.~ ** Processing line: ~ elsif ((state.mouse_dragging) && (inputs.mouse.position.inside_rect? state.grid_border))~ ** Processing line: ~ search_lines(inputs.mouse.position, :drag)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the definition of a grid box and handles user input to fill in or clear grid boxes.~ ** Processing line: ~ def search_lines (point, input_type)~ ** Processing line: ~ point.x -= state.paint_grid["x"] # subtracts the value assigned to the "x" key in the paint_grid hash~ ** Processing line: ~ point.y -= state.paint_grid["y"] # subtracts the value assigned to the "y" key in the paint_grid hash~ ** Processing line: ~~ ** Processing line: ~ # Remove code following the .floor and see what happens when you try to fill in grid squares~ ** Processing line: ~ point.x = (point.x / state.paint_grid["dist_x"]).floor * state.paint_grid["dist_x"]~ ** Processing line: ~ point.y = (point.y / state.paint_grid["dist_y"]).floor * state.paint_grid["dist_y"]~ ** Processing line: ~~ ** Processing line: ~ point.x += state.paint_grid["x"]~ ** Processing line: ~ point.y += state.paint_grid["y"]~ ** Processing line: ~~ ** Processing line: ~ # Sets definition of a grid box, meaning its x, y, width, and height.~ ** Processing line: ~ # Floor is called on the point.x and point.y variables.~ ** Processing line: ~ # Ceil method is called on values of the distance hash keys, setting the width and height of a box.~ ** Processing line: ~ grid_box = [ point.x.floor, point.y.floor, state.paint_grid["dist_x"].ceil, state.paint_grid["dist_y"].ceil ]~ ** Processing line: ~~ ** Processing line: ~ if input_type == :click # if user clicks their mouse~ ** Processing line: ~ if state.filled_squares.include? grid_box # if grid box is already filled in~ ** Processing line: ~ state.filled_squares.delete grid_box # box is cleared and removed from filled_squares~ ** Processing line: ~ else~ ** Processing line: ~ state.filled_squares << grid_box # otherwise, box is filled in and added to filled_squares~ ** Processing line: ~ end~ ** Processing line: ~ elsif input_type == :drag # if user drags mouse~ ** Processing line: ~ unless state.filled_squares.include? grid_box # unless the grid box dragged over is already filled in~ ** Processing line: ~ state.filled_squares << grid_box # the box is filled in and added to filled_squares~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Creates and outputs a "Clear" button on the screen using a label and a border.~ ** Processing line: ~ # If the button is clicked, the filled squares are cleared, making the filled_squares collection empty.~ ** Processing line: ~ def draw_buttons~ ** Processing line: ~ x, y, w, h = 390, 50, 240, 50~ ** Processing line: ~ state.clear_button ||= state.new_entity(:button_with_fade)~ ** Processing line: ~~ ** Processing line: ~ # The x and y positions are set to display the label in the center of the button.~ ** Processing line: ~ # Try changing the first two parameters to simply x, y and see what happens to the text placement!~ ** Processing line: ~ state.clear_button.label ||= [x + w.half, y + h.half + 10, "Clear", 0, 1] # placed in center of border~ ** Processing line: ~ state.clear_button.border ||= [x, y, w, h]~ ** Processing line: ~~ ** Processing line: ~ # If the mouse is clicked inside the borders of the clear button,~ ** Processing line: ~ # the filled_squares collection is emptied and the squares are cleared.~ ** Processing line: ~ if inputs.mouse.click && inputs.mouse.click.point.inside_rect?(state.clear_button.border)~ ** Processing line: ~ state.clear_button.clicked_at = inputs.mouse.click.created_at # time (frame) the click occurred~ ** Processing line: ~ state.filled_squares.clear~ ** Processing line: ~ inputs.mouse.previous_click = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << state.clear_button.label~ ** Processing line: ~ outputs.borders << state.clear_button.border~ ** Processing line: ~~ ** Processing line: ~ # When the clear button is clicked, the color of the button changes~ ** Processing line: ~ # and the transparency changes, as well. If you change the time from~ ** Processing line: ~ # 0.25.seconds to 1.25.seconds or more, the change will last longer.~ ** Processing line: ~ if state.clear_button.clicked_at~ ** Processing line: ~ outputs.solids << [x, y, w, h, 0, 180, 80, 255 * state.clear_button.clicked_at.ease(0.25.seconds, :flip)]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $paint_app = PaintApp.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $paint_app.inputs = args.inputs~ ** Processing line: ~ $paint_app.state = args.state~ ** Processing line: ~ $paint_app.grid = args.grid~ ** Processing line: ~ $paint_app.args = args~ ** Processing line: ~ $paint_app.outputs = args.outputs~ ** Processing line: ~ $paint_app.tick~ ** Processing line: ~ tick_instructions args, "How to create a simple paint app. CLICK and HOLD to draw."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Mouse - Coordinate Systems - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Mouse - Coordinate Systems - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Mouse - Coordinate Systems - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/05_mouse/04_coordinate_systems/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.mouse.click.position: Coordinates of the mouse's position on the screen.~ ** Processing line: ~ Unlike args.inputs.mouse.click.point, the mouse does not need to be pressed down for~ ** Processing line: ~ position to know the mouse's coordinates.~ ** Processing line: ~ For more information about the mouse, go to mygame/documentation/07-mouse.md.~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.mouse.click: This property will be set if the mouse was clicked.~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.mouse.click.point.(x|y): The x and y location of the mouse.~ ** Processing line: ~~ ** Processing line: ~ - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated~ ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ ** Processing line: ~~ ** Processing line: ~ In this sample app, string interpolation is used to show the current position of the mouse~ ** Processing line: ~ in a label.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.labels: An array that generates a label.~ ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.solids: An array that generates a solid.~ ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE, ALPHA]~ ** Processing line: ~ For more information about solids, go to mygame/documentation/03-solids-and-borders.md.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.lines: An array that generates a line.~ ** Processing line: ~ The parameters are [X, Y, X2, Y2, RED, GREEN, BLUE, ALPHA]~ ** Processing line: ~ For more information about lines, go to mygame/documentation/04-lines.md.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app shows a coordinate system or grid. The user can move their mouse around the screen and the~ ** Processing line: ~ # coordinates of their position on the screen will be displayed. Users can choose to view one quadrant or~ ** Processing line: ~ # four quadrants by pressing the button.~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~~ ** Processing line: ~ # The addition and subtraction in the first two parameters of the label and solid~ ** Processing line: ~ # ensure that the outputs don't overlap each other. Try removing them and see what happens.~ ** Processing line: ~ pos = args.inputs.mouse.position # stores coordinates of mouse's position~ ** Processing line: ~ args.outputs.labels << [pos.x + 10, pos.y + 10, "#{pos}"] # outputs label of coordinates~ ** Processing line: ~ args.outputs.solids << [pos.x - 2, pos.y - 2, 5, 5] # outputs small blackk box placed where mouse is hovering~ ** Processing line: ~~ ** Processing line: ~ button = [0, 0, 370, 50] # sets definition of toggle button~ ** Processing line: ~ args.outputs.borders << button # outputs button as border (not filled in)~ ** Processing line: ~ args.outputs.labels << [10, 35, "click here toggle coordinate system"] # label of button~ ** Processing line: ~ args.outputs.lines << [ 0, -720, 0, 720] # vertical line dividing quadrants~ ** Processing line: ~ args.outputs.lines << [-1280, 0, 1280, 0] # horizontal line dividing quadrants~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.mouse.click # if the user clicks the mouse~ ** Processing line: ~ pos = args.inputs.mouse.click.point # pos's value is point where user clicked (coordinates)~ ** Processing line: ~ if pos.inside_rect? button # if the click occurred inside the button~ ** Processing line: ~ if args.grid.name == :bottom_left # if the grid shows bottom left as origin~ ** Processing line: ~ args.grid.origin_center! # origin will be shown in center~ ** Processing line: ~ else~ ** Processing line: ~ args.grid.origin_bottom_left! # otherwise, the view will change to show bottom left as origin~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ tick_instructions args, "Sample app shows the two supported coordinate systems in Game Toolkit."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Save Load - Save Load Game - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Save Load - Save Load Game - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Save Load - Save Load Game - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/06_save_load/01_save_load_game/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - Symbol (:): Ruby object with a name and an internal ID. Symbols are useful~ ** Processing line: ~ because with a given symbol name, you can refer to the same object throughout~ ** Processing line: ~ a Ruby program.~ ** Processing line: ~~ ** Processing line: ~ In this sample app, we're using symbols for our buttons. We have buttons that~ ** Processing line: ~ light fires, save, load, etc. Each of these buttons has a distinct symbol like~ ** Processing line: ~ :light_fire, :save_game, :load_game, etc.~ ** Processing line: ~~ ** Processing line: ~ - to_sym: Returns the symbol corresponding to the given string; creates the symbol~ ** Processing line: ~ if it does not already exist.~ ** Processing line: ~ For example,~ ** Processing line: ~ 'car'.to_sym~ ** Processing line: ~ would return the symbol :car.~ ** Processing line: ~~ ** Processing line: ~ - last: Returns the last element of an array.~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - num1.lesser(num2): finds the lower value of the given options.~ ** Processing line: ~ For example, in the statement~ ** Processing line: ~ a = 4.lesser(3)~ ** Processing line: ~ 3 has a lower value than 4, which means that the value of a would be set to 3,~ ** Processing line: ~ but if the statement had been~ ** Processing line: ~ a = 4.lesser(5)~ ** Processing line: ~ 4 has a lower value than 5, which means that the value of a would be set to 4.~ ** Processing line: ~~ ** Processing line: ~ - num1.fdiv(num2): returns the float division (will have a decimal) of the two given numbers.~ ** Processing line: ~ For example, 5.fdiv(2) = 2.5 and 5.fdiv(5) = 1.0~ ** Processing line: ~~ ** Processing line: ~ - String interpolation: uses #{} syntax; everything between the #{ and the } is evaluated~ ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.labels: An array. Values generate a label.~ ** Processing line: ~ Parameters are [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~ For more information, go to mygame/documentation/02-labels.md.~ ** Processing line: ~~ ** Processing line: ~ - ARRAY#inside_rect?: An array with at least two values is considered a point. An array~ ** Processing line: ~ with at least four values is considered a rect. The inside_rect? function returns true~ ** Processing line: ~ or false depending on if the point is inside the rect.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This code allows users to perform different tasks, such as saving and loading the game.~ ** Processing line: ~ # Users also have options to reset the game and light a fire.~ ** Processing line: ~~ ** Processing line: ~ class TextedBasedGame~ ** Processing line: ~~ ** Processing line: ~ # Contains methods needed for game to run properly.~ ** Processing line: ~ # Increments tick count by 1 each time it runs (60 times in a single second)~ ** Processing line: ~ def tick~ ** Processing line: ~ default~ ** Processing line: ~ show_intro~ ** Processing line: ~ state.engine_tick_count += 1~ ** Processing line: ~ tick_fire~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets default values.~ ** Processing line: ~ # The ||= ensures that a variable's value is only set to the value following the = sign~ ** Processing line: ~ # if the value has not already been set before. Intialization happens only in the first frame.~ ** Processing line: ~ def default~ ** Processing line: ~ state.engine_tick_count ||= 0~ ** Processing line: ~ state.active_module ||= :room~ ** Processing line: ~ state.fire_progress ||= 0~ ** Processing line: ~ state.fire_ready_in ||= 10~ ** Processing line: ~ state.previous_fire ||= :dead~ ** Processing line: ~ state.fire ||= :dead~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def show_intro~ ** Processing line: ~ return unless state.engine_tick_count == 0 # return unless the game just started~ ** Processing line: ~ set_story_line "awake." # calls set_story_line method, sets to "awake"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets story line.~ ** Processing line: ~ def set_story_line story_line~ ** Processing line: ~ state.story_line = story_line # story line set to value of parameter~ ** Processing line: ~ state.active_module = :alert # active module set to alert~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Clears story line.~ ** Processing line: ~ def clear_storyline~ ** Processing line: ~ state.active_module = :none # active module set to none~ ** Processing line: ~ state.story_line = nil # story line is cleared, set to nil (or empty)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Determines fire progress (how close the fire is to being ready to light).~ ** Processing line: ~ def tick_fire~ ** Processing line: ~ return if state.active_module == :alert # return if active module is alert~ ** Processing line: ~ state.fire_progress += 1 # increment fire progress~ ** Processing line: ~ # fire_ready_in is 10. The fire_progress is either the current value or 10, whichever has a lower value.~ ** Processing line: ~ state.fire_progress = state.fire_progress.lesser(state.fire_ready_in)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the value of fire (whether it is dead or roaring), and the story line~ ** Processing line: ~ def light_fire~ ** Processing line: ~ return unless fire_ready? # returns unless the fire is ready to be lit~ ** Processing line: ~ state.fire = :roaring # fire is lit, set to roaring~ ** Processing line: ~ state.fire_progress = 0 # the fire progress returns to 0, since the fire has been lit~ ** Processing line: ~ if state.fire != state.previous_fire~ ** Processing line: ~ set_story_line "the fire is #{state.fire}." # the story line is set using string interpolation~ ** Processing line: ~ state.previous_fire = state.fire~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Checks if the fire is ready to be lit. Returns a boolean value.~ ** Processing line: ~ def fire_ready?~ ** Processing line: ~ # If fire_progress (value between 0 and 10) is equal to fire_ready_in (value of 10),~ ** Processing line: ~ # the fire is ready to be lit.~ ** Processing line: ~ state.fire_progress == state.fire_ready_in~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Divides the value of the fire_progress variable by 10 to determine how close the user is to~ ** Processing line: ~ # being able to light a fire.~ ** Processing line: ~ def light_fire_progress~ ** Processing line: ~ state.fire_progress.fdiv(10) # float division~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Defines fire as the state.fire variable.~ ** Processing line: ~ def fire~ ** Processing line: ~ state.fire~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the title of the room.~ ** Processing line: ~ def room_title~ ** Processing line: ~ return "a room that is dark" if state.fire == :dead # room is dark if the fire is dead~ ** Processing line: ~ return "a room that is lit" # room is lit if the fire is not dead~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the active_module to room.~ ** Processing line: ~ def go_to_room~ ** Processing line: ~ state.active_module = :room~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Defines active_module as the state.active_module variable.~ ** Processing line: ~ def active_module~ ** Processing line: ~ state.active_module~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Defines story_line as the state.story_line variable.~ ** Processing line: ~ def story_line~ ** Processing line: ~ state.story_line~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Update every 60 frames (or every second)~ ** Processing line: ~ def should_tick?~ ** Processing line: ~ state.tick_count.mod_zero?(60)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the value of the game state provider.~ ** Processing line: ~ def initialize game_state_provider~ ** Processing line: ~ @game_state_provider = game_state_provider~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Defines the game state.~ ** Processing line: ~ # Any variable prefixed with an @ symbol is an instance variable.~ ** Processing line: ~ def state~ ** Processing line: ~ @game_state_provider.state~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Saves the state of the game in a text file called game_state.txt.~ ** Processing line: ~ def save~ ** Processing line: ~ $gtk.serialize_state('game_state.txt', state)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Loads the game state from the game_state.txt text file.~ ** Processing line: ~ # If the load is unsuccessful, the user is informed since the story line indicates the failure.~ ** Processing line: ~ def load~ ** Processing line: ~ parsed_state = $gtk.deserialize_state('game_state.txt')~ ** Processing line: ~ if !parsed_state~ ** Processing line: ~ set_story_line "no game to load. press save first."~ ** Processing line: ~ else~ ** Processing line: ~ $gtk.args.state = parsed_state~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Resets the game.~ ** Processing line: ~ def reset~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class TextedBasedGamePresenter~ ** Processing line: ~ attr_accessor :state, :outputs, :inputs~ ** Processing line: ~~ ** Processing line: ~ # Creates empty collection called highlights.~ ** Processing line: ~ # Calls methods necessary to run the game.~ ** Processing line: ~ def tick~ ** Processing line: ~ state.layout.highlights ||= []~ ** Processing line: ~ game.tick if game.should_tick?~ ** Processing line: ~ render~ ** Processing line: ~ process_input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs a label of the tick count (passage of time) and calls all render methods.~ ** Processing line: ~ def render~ ** Processing line: ~ outputs.labels << [10, 30, state.tick_count]~ ** Processing line: ~ render_alert~ ** Processing line: ~ render_room~ ** Processing line: ~ render_highlights~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs a label onto the screen that shows the story line, and also outputs a "close" button.~ ** Processing line: ~ def render_alert~ ** Processing line: ~ return unless game.active_module == :alert~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [640, 480, game.story_line, 5, 1] # outputs story line label~ ** Processing line: ~ outputs.primitives << button(:alert_dismiss, 490, 380, "close") # positions "close" button under story line~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_room~ ** Processing line: ~ return unless game.active_module == :room~ ** Processing line: ~ outputs.labels << [640, 700, game.room_title, 4, 1] # outputs room title label at top of screen~ ** Processing line: ~~ ** Processing line: ~ # The parameters for these outputs are (symbol, x, y, text, value/percentage) and each has a y value~ ** Processing line: ~ # that positions it 60 pixels lower than the previous output.~ ** Processing line: ~~ ** Processing line: ~ # outputs the light_fire_progress bar, uses light_fire_progress for its percentage (which changes bar's appearance)~ ** Processing line: ~ outputs.primitives << progress_bar(:light_fire, 490, 600, "light fire", game.light_fire_progress)~ ** Processing line: ~ outputs.primitives << button( :save_game, 490, 540, "save") # outputs save button~ ** Processing line: ~ outputs.primitives << button( :load_game, 490, 480, "load") # outputs load button~ ** Processing line: ~ outputs.primitives << button( :reset_game, 490, 420, "reset") # outputs reset button~ ** Processing line: ~ outputs.labels << [640, 30, "the fire is #{game.fire}", 0, 1] # outputs fire label at bottom of screen~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs a collection of highlights using an array to set their values, and also rejects certain values from the collection.~ ** Processing line: ~ def render_highlights~ ** Processing line: ~ state.layout.highlights.each do |h| # for each highlight in the collection~ ** Processing line: ~ h.lifetime -= 1 # decrease the value of its lifetime~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.solids << state.layout.highlights.map do |h| # outputs highlights collection~ ** Processing line: ~ [h.x, h.y, h.w, h.h, h.color, 255 * h.lifetime / h.max_lifetime] # sets definition for each highlight~ ** Processing line: ~ # transparency changes; divide lifetime by max_lifetime, multiply result by 255~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # reject highlights from collection that have no remaining lifetime~ ** Processing line: ~ state.layout.highlights = state.layout.highlights.reject { |h| h.lifetime <= 0 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Checks whether or not a button was clicked.~ ** Processing line: ~ # Returns a boolean value.~ ** Processing line: ~ def process_input~ ** Processing line: ~ button = button_clicked? # calls button_clicked? method~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a boolean value.~ ** Processing line: ~ # Finds the button that was clicked from the button list and determines what method to call.~ ** Processing line: ~ # Adds a highlight to the highlights collection.~ ** Processing line: ~ def button_clicked?~ ** Processing line: ~ return nil unless click_pos # return nil unless click_pos holds coordinates of mouse click~ ** Processing line: ~ button = @button_list.find do |k, v| # goes through button_list to find button clicked~ ** Processing line: ~ click_pos.inside_rect? v[:primitives].last.rect # was the mouse clicked inside the rect of button?~ ** Processing line: ~ end~ ** Processing line: ~ return unless button # return unless a button was clicked~ ** Processing line: ~ method_to_call = "#{button[0]}_clicked".to_sym # sets method_to_call to symbol (like :save_game or :load_game)~ ** Processing line: ~ if self.respond_to? method_to_call # returns true if self responds to the given method (method actually exists)~ ** Processing line: ~ border = button[1][:primitives].last # sets border definition using value of last key in button list hash~ ** Processing line: ~~ ** Processing line: ~ # declares each highlight as a new entity, sets properties~ ** Processing line: ~ state.layout.highlights << state.new_entity(:highlight) do |h|~ ** Processing line: ~ h.x = border.x~ ** Processing line: ~ h.y = border.y~ ** Processing line: ~ h.w = border.w~ ** Processing line: ~ h.h = border.h~ ** Processing line: ~ h.max_lifetime = 10~ ** Processing line: ~ h.lifetime = h.max_lifetime~ ** Processing line: ~ h.color = [120, 120, 180] # sets color to shade of purple~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ self.send method_to_call # invoke method identified by symbol~ ** Processing line: ~ else # otherwise, if self doesn't respond to given method~ ** Processing line: ~ border = button[1][:primitives].last # sets border definition using value of last key in hash~ ** Processing line: ~~ ** Processing line: ~ # declares each highlight as a new entity, sets properties~ ** Processing line: ~ state.layout.highlights << state.new_entity(:highlight) do |h|~ ** Processing line: ~ h.x = border.x~ ** Processing line: ~ h.y = border.y~ ** Processing line: ~ h.w = border.w~ ** Processing line: ~ h.h = border.h~ ** Processing line: ~ h.max_lifetime = 4 # different max_lifetime than the one set if respond_to? had been true~ ** Processing line: ~ h.lifetime = h.max_lifetime~ ** Processing line: ~ h.color = [120, 80, 80] # sets color to dark color~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # instructions for users on how to add the missing method_to_call to the code~ ** Processing line: ~ puts "It looks like #{method_to_call} doesn't exists on TextedBasedGamePresenter. Please add this method:"~ ** Processing line: ~ puts "Just copy the code below and put it in the #{TextedBasedGamePresenter} class definition."~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts "```"~ ** Processing line: ~ puts "class TextedBasedGamePresenter <--- find this class and put the method below in it"~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts " def #{method_to_call}"~ ** Processing line: ~ puts " puts 'Yay that worked!'"~ ** Processing line: ~ puts " end"~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts "end <-- make sure to put the #{method_to_call} method in between the `class` word and the final `end` statement."~ ** Processing line: ~ puts "```"~ ** Processing line: ~ puts ""~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns the position of the mouse when it is clicked.~ ** Processing line: ~ def click_pos~ ** Processing line: ~ return nil unless inputs.mouse.click # returns nil unless the mouse was clicked~ ** Processing line: ~ return inputs.mouse.click.point # returns location of mouse click (coordinates)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Creates buttons for the button_list and sets their values using a hash (uses symbols as keys)~ ** Processing line: ~ def button id, x, y, text~ ** Processing line: ~ @button_list[id] ||= { # assigns values to hash keys~ ** Processing line: ~ id: id,~ ** Processing line: ~ text: text,~ ** Processing line: ~ primitives: [~ ** Processing line: ~ [x + 10, y + 30, text, 2, 0].label, # positions label inside border~ ** Processing line: ~ [x, y, 300, 50].border, # sets definition of border~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ @button_list[id][:primitives] # returns label and border for buttons~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Creates a progress bar (used for lighting the fire) and sets its values.~ ** Processing line: ~ def progress_bar id, x, y, text, percentage~ ** Processing line: ~ @button_list[id] = { # assigns values to hash keys~ ** Processing line: ~ id: id,~ ** Processing line: ~ text: text,~ ** Processing line: ~ primitives: [~ ** Processing line: ~ [x, y, 300, 50, 100, 100, 100].solid, # sets definition for solid (which fills the bar with gray)~ ** Processing line: ~ [x + 10, y + 30, text, 2, 0].label, # sets definition for label, positions inside border~ ** Processing line: ~ [x, y, 300, 50].border, # sets definition of border~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ # Fills progress bar based on percentage. If the fire was ready to be lit (100%) and we multiplied by~ ** Processing line: ~ # 100, only 1/3 of the bar would only be filled in. 200 would cause only 2/3 to be filled in.~ ** Processing line: ~ @button_list[id][:primitives][0][2] = 300 * percentage~ ** Processing line: ~ @button_list[id][:primitives]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Defines the game.~ ** Processing line: ~ def game~ ** Processing line: ~ @game~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Initalizes the game and creates an empty list of buttons.~ ** Processing line: ~ def initialize~ ** Processing line: ~ @game = TextedBasedGame.new self~ ** Processing line: ~ @button_list ||= {}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Clears the storyline and takes the user to the room.~ ** Processing line: ~ def alert_dismiss_clicked~ ** Processing line: ~ game.clear_storyline~ ** Processing line: ~ game.go_to_room~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Lights the fire when the user clicks the "light fire" option.~ ** Processing line: ~ def light_fire_clicked~ ** Processing line: ~ game.light_fire~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Saves the game when the user clicks the "save" option.~ ** Processing line: ~ def save_game_clicked~ ** Processing line: ~ game.save~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Resets the game when the user clicks the "reset" option.~ ** Processing line: ~ def reset_game_clicked~ ** Processing line: ~ game.reset~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Loads the game when the user clicks the "load" option.~ ** Processing line: ~ def load_game_clicked~ ** Processing line: ~ game.load~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $text_based_rpg = TextedBasedGamePresenter.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $text_based_rpg.state = args.state~ ** Processing line: ~ $text_based_rpg.outputs = args.outputs~ ** Processing line: ~ $text_based_rpg.inputs = args.inputs~ ** Processing line: ~ $text_based_rpg.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Audio - Audio Mixer - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Audio - Audio Mixer - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Audio - Audio Mixer - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_audio/01_audio_mixer/app/main.rb~ ** Processing line: ~ # these are the properties that you can sent on args.audio~ ** Processing line: ~ def spawn_new_sound args, name, path~ ** Processing line: ~ # Spawn randomly in an area that won't be covered by UI.~ ** Processing line: ~ screenx = (rand * 600.0) + 200.0~ ** Processing line: ~ screeny = (rand * 400.0) + 100.0~ ** Processing line: ~~ ** Processing line: ~ id = new_sound_id! args~ ** Processing line: ~ # you can hang anything on the audio hashes you want, so we store the~ ** Processing line: ~ # actual screen position in here for convenience.~ ** Processing line: ~ args.audio[id] = {~ ** Processing line: ~ name: name,~ ** Processing line: ~ input: path,~ ** Processing line: ~ screenx: screenx,~ ** Processing line: ~ screeny: screeny,~ ** Processing line: ~ x: ((screenx / 1279.0) * 2.0) - 1.0, # scale to -1.0 - 1.0 range~ ** Processing line: ~ y: ((screeny / 719.0) * 2.0) - 1.0, # scale to -1.0 - 1.0 range~ ** Processing line: ~ z: 0.0,~ ** Processing line: ~ gain: 1.0,~ ** Processing line: ~ pitch: 1.0,~ ** Processing line: ~ looping: true,~ ** Processing line: ~ paused: false~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ args.state.selected = id~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # these are values you can change on the ~args.audio~ data structure~ ** Processing line: ~ def input_panel args~ ** Processing line: ~ return unless args.state.panel~ ** Processing line: ~ return if args.state.dragging~ ** Processing line: ~~ ** Processing line: ~ audio_entry = args.audio[args.state.selected]~ ** Processing line: ~ results = args.state.panel~ ** Processing line: ~~ ** Processing line: ~ if args.state.mouse_state == :held && args.inputs.mouse.position.inside_rect?(results.pitch_slider_rect.rect)~ ** Processing line: ~ audio_entry.pitch = 2.0 * ((args.inputs.mouse.x - results.pitch_slider_rect.x).to_f / (results.pitch_slider_rect.w - 1.0))~ ** Processing line: ~ elsif args.state.mouse_state == :held && args.inputs.mouse.position.inside_rect?(results.playtime_slider_rect.rect)~ ** Processing line: ~ audio_entry.playtime = audio_entry.length_ * ((args.inputs.mouse.x - results.playtime_slider_rect.x).to_f / (results.playtime_slider_rect.w - 1.0))~ ** Processing line: ~ elsif args.state.mouse_state == :held && args.inputs.mouse.position.inside_rect?(results.gain_slider_rect.rect)~ ** Processing line: ~ audio_entry.gain = (args.inputs.mouse.x - results.gain_slider_rect.x).to_f / (results.gain_slider_rect.w - 1.0)~ ** Processing line: ~ elsif args.inputs.mouse.click && args.inputs.mouse.position.inside_rect?(results.looping_checkbox_rect.rect)~ ** Processing line: ~ audio_entry.looping = !audio_entry.looping~ ** Processing line: ~ elsif args.inputs.mouse.click && args.inputs.mouse.position.inside_rect?(results.paused_checkbox_rect.rect)~ ** Processing line: ~ audio_entry.paused = !audio_entry.paused~ ** Processing line: ~ elsif args.inputs.mouse.click && args.inputs.mouse.position.inside_rect?(results.delete_button_rect.rect)~ ** Processing line: ~ args.audio.delete args.state.selected~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_sources args~ ** Processing line: ~ args.outputs.primitives << args.audio.keys.map do |k|~ ** Processing line: ~ s = args.audio[k]~ ** Processing line: ~~ ** Processing line: ~ isselected = (k == args.state.selected)~ ** Processing line: ~~ ** Processing line: ~ color = isselected ? [ 0, 255, 0, 255 ] : [ 0, 0, 255, 255 ]~ ** Processing line: ~ [~ ** Processing line: ~ [s.screenx, s.screeny, args.state.boxsize, args.state.boxsize, *color].solid,~ ** Processing line: ~~ ** Processing line: ~ {~ ** Processing line: ~ x: s.screenx + args.state.boxsize.half,~ ** Processing line: ~ y: s.screeny,~ ** Processing line: ~ text: s.name,~ ** Processing line: ~ r: 255,~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 255,~ ** Processing line: ~ alignment_enum: 1~ ** Processing line: ~ }.label!~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def playtime_str t~ ** Processing line: ~ return "" unless t~ ** Processing line: ~ minutes = (t / 60.0).floor~ ** Processing line: ~ seconds = t - (minutes * 60.0).to_f~ ** Processing line: ~ return minutes.to_s + ':' + seconds.floor.to_s + ((seconds - seconds.floor).to_s + "000")[1..3]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def label_with_drop_shadow x, y, text~ ** Processing line: ~ [~ ** Processing line: ~ { x: x + 1, y: y + 1, text: text, vertical_alignment_enum: 1, alignment_enum: 1, r: 0, g: 0, b: 0 }.label!,~ ** Processing line: ~ { x: x + 2, y: y + 0, text: text, vertical_alignment_enum: 1, alignment_enum: 1, r: 0, g: 0, b: 0 }.label!,~ ** Processing line: ~ { x: x + 0, y: y + 1, text: text, vertical_alignment_enum: 1, alignment_enum: 1, r: 200, g: 200, b: 200 }.label!~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def check_box opts = {}~ ** Processing line: ~ checkbox_template = opts.args.layout.rect(w: 0.5, h: 0.5, col: 2)~ ** Processing line: ~ final_rect = checkbox_template.center_inside_rect_y(opts.args.layout.rect(row: opts.row, col: opts.col))~ ** Processing line: ~ color = { r: 0, g: 0, b: 0 }~ ** Processing line: ~ color = { r: 255, g: 255, b: 255 } if opts.checked~ ** Processing line: ~~ ** Processing line: ~ {~ ** Processing line: ~ rect: final_rect,~ ** Processing line: ~ primitives: [~ ** Processing line: ~ (final_rect.to_solid color)~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def progress_bar opts = {}~ ** Processing line: ~ outer_rect = opts.args.layout.rect(row: opts.row, col: opts.col, w: 5, h: 1)~ ** Processing line: ~ color = opts.percentage * 255~ ** Processing line: ~ baseline_progress_bar = opts.args~ ** Processing line: ~ .layout~ ** Processing line: ~ .rect(w: 5, h: 0.5)~ ** Processing line: ~~ ** Processing line: ~ final_rect = baseline_progress_bar.center_inside_rect(outer_rect)~ ** Processing line: ~ center = final_rect.rect_center_point~ ** Processing line: ~~ ** Processing line: ~ {~ ** Processing line: ~ rect: final_rect,~ ** Processing line: ~ primitives: [~ ** Processing line: ~ final_rect.merge(r: color, g: color, b: color, a: 128).solid!,~ ** Processing line: ~ label_with_drop_shadow(center.x, center.y, opts.text)~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def panel_primitives args, audio_entry~ ** Processing line: ~ results = { primitives: [] }~ ** Processing line: ~~ ** Processing line: ~ return results unless audio_entry~ ** Processing line: ~~ ** Processing line: ~ # this uses DRGTK's layout apis to layout the controls~ ** Processing line: ~ # imagine the screen is split into equal cells (24 cells across, 12 cells up and down)~ ** Processing line: ~ # args.layout.rect returns a hash which we merge values with to create primitives~ ** Processing line: ~ # using args.layout.rect removes the need for pixel pushing~ ** Processing line: ~~ ** Processing line: ~ # args.outputs.debug << args.layout.debug_primitives(r: 255, g: 255, b: 255)~ ** Processing line: ~~ ** Processing line: ~ white_color = { r: 255, g: 255, b: 255 }~ ** Processing line: ~ label_style = white_color.merge(vertical_alignment_enum: 1)~ ** Processing line: ~~ ** Processing line: ~ # panel background~ ** Processing line: ~ results.primitives << args.layout.rect(row: 0, col: 0, w: 7, h: 6, include_col_gutter: true, include_row_gutter: true)~ ** Processing line: ~ .border!(r: 255, g: 255, b: 255)~ ** Processing line: ~~ ** Processing line: ~ # title~ ** Processing line: ~ results.primitives << args.layout.point(row: 0, col: 3.5, row_anchor: 0.5)~ ** Processing line: ~ .merge(label_style)~ ** Processing line: ~ .merge(text: "Source #{args.state.selected} (#{args.audio[args.state.selected].name})",~ ** Processing line: ~ size_enum: 3,~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~~ ** Processing line: ~ # seperator line~ ** Processing line: ~ results.primitives << args.layout.rect(row: 1, col: 0, w: 7, h: 0)~ ** Processing line: ~ .line!(white_color)~ ** Processing line: ~~ ** Processing line: ~ # screen location~ ** Processing line: ~ results.primitives << args.layout.point(row: 1.0, col: 0, row_anchor: 0.5)~ ** Processing line: ~ .merge(label_style)~ ** Processing line: ~ .merge(text: "screen:")~ ** Processing line: ~~ ** Processing line: ~ results.primitives << args.layout.point(row: 1.0, col: 2, row_anchor: 0.5)~ ** Processing line: ~ .merge(label_style)~ ** Processing line: ~ .merge(text: "(#{audio_entry.screenx.to_i}, #{audio_entry.screeny.to_i})")~ ** Processing line: ~~ ** Processing line: ~ # position~ ** Processing line: ~ results.primitives << args.layout.point(row: 1.5, col: 0, row_anchor: 0.5)~ ** Processing line: ~ .merge(label_style)~ ** Processing line: ~ .merge(text: "position:")~ ** Processing line: ~~ ** Processing line: ~ results.primitives << args.layout.point(row: 1.5, col: 2, row_anchor: 0.5)~ ** Processing line: ~ .merge(label_style)~ ** Processing line: ~ .merge(text: "(#{audio_entry[:x].round(5).to_s[0..6]}, #{audio_entry[:y].round(5).to_s[0..6]})")~ ** Processing line: ~~ ** Processing line: ~ results.primitives << args.layout.point(row: 2.0, col: 0, row_anchor: 0.5)~ ** Processing line: ~ .merge(label_style)~ ** Processing line: ~ .merge(text: "pitch:")~ ** Processing line: ~~ ** Processing line: ~ results.pitch_slider_rect = progress_bar(row: 2.0, col: 2,~ ** Processing line: ~ percentage: audio_entry.pitch / 2.0,~ ** Processing line: ~ text: "#{audio_entry.pitch.to_sf}",~ ** Processing line: ~ args: args)~ ** Processing line: ~~ ** Processing line: ~ results.primitives << results.pitch_slider_rect.primitives~ ** Processing line: ~~ ** Processing line: ~ results.primitives << args.layout.point(row: 2.5, col: 0, row_anchor: 0.5)~ ** Processing line: ~ .merge(label_style)~ ** Processing line: ~ .merge(text: "playtime:")~ ** Processing line: ~~ ** Processing line: ~ results.playtime_slider_rect = progress_bar(args: args,~ ** Processing line: ~ row: 2.5,~ ** Processing line: ~ col: 2,~ ** Processing line: ~ percentage: (audio_entry.playtime || 1) / (audio_entry.length_ || 1),~ ** Processing line: ~ text: "#{playtime_str(audio_entry.playtime)} / #{playtime_str(audio_entry.length_)}")~ ** Processing line: ~~ ** Processing line: ~ results.primitives << results.playtime_slider_rect.primitives~ ** Processing line: ~~ ** Processing line: ~ results.primitives << args.layout.point(row: 3.0, col: 0, row_anchor: 0.5)~ ** Processing line: ~ .merge(label_style)~ ** Processing line: ~ .merge(text: "gain:")~ ** Processing line: ~~ ** Processing line: ~ results.gain_slider_rect = progress_bar(args: args,~ ** Processing line: ~ row: 3.0,~ ** Processing line: ~ col: 2,~ ** Processing line: ~ percentage: audio_entry.gain,~ ** Processing line: ~ text: "#{audio_entry.gain.to_sf}")~ ** Processing line: ~~ ** Processing line: ~ results.primitives << results.gain_slider_rect.primitives~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ results.primitives << args.layout.point(row: 3.5, col: 0, row_anchor: 0.5)~ ** Processing line: ~ .merge(label_style)~ ** Processing line: ~ .merge(text: "looping:")~ ** Processing line: ~~ ** Processing line: ~ checkbox_template = args.layout.rect(w: 0.5, h: 0.5, col: 2)~ ** Processing line: ~~ ** Processing line: ~ results.looping_checkbox_rect = check_box(args: args, row: 3.5, col: 2, checked: audio_entry.looping)~ ** Processing line: ~ results.primitives << results.looping_checkbox_rect.primitives~ ** Processing line: ~~ ** Processing line: ~ results.primitives << args.layout.point(row: 4.0, col: 0, row_anchor: 0.5)~ ** Processing line: ~ .merge(label_style)~ ** Processing line: ~ .merge(text: "paused:")~ ** Processing line: ~~ ** Processing line: ~ checkbox_template = args.layout.rect(w: 0.5, h: 0.5, col: 2)~ ** Processing line: ~~ ** Processing line: ~ results.paused_checkbox_rect = check_box(args: args, row: 4.0, col: 2, checked: !audio_entry.paused)~ ** Processing line: ~ results.primitives << results.paused_checkbox_rect.primitives~ ** Processing line: ~~ ** Processing line: ~ results.delete_button_rect = { rect: args.layout.rect(row: 5, col: 0, w: 7, h: 1) }~ ** Processing line: ~~ ** Processing line: ~ results.primitives << results.delete_button_rect.to_solid(r: 180)~ ** Processing line: ~~ ** Processing line: ~ results.primitives << args.layout.point(row: 5, col: 3.5, row_anchor: 0.5)~ ** Processing line: ~ .merge(label_style)~ ** Processing line: ~ .merge(text: "DELETE", alignment_enum: 1)~ ** Processing line: ~~ ** Processing line: ~ return results~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_panel args~ ** Processing line: ~ args.state.panel = nil~ ** Processing line: ~ audio_entry = args.audio[args.state.selected]~ ** Processing line: ~ return unless audio_entry~ ** Processing line: ~~ ** Processing line: ~ mouse_down = (args.state.mouse_held >= 0)~ ** Processing line: ~ args.state.panel = panel_primitives args, audio_entry~ ** Processing line: ~ args.outputs.primitives << args.state.panel.primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_sound_id! args~ ** Processing line: ~ args.state.sound_id ||= 0~ ** Processing line: ~ args.state.sound_id += 1~ ** Processing line: ~ args.state.sound_id~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_launcher args~ ** Processing line: ~ args.outputs.primitives << args.state.spawn_sound_buttons.map(&:primitives)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_ui args~ ** Processing line: ~ render_launcher args~ ** Processing line: ~ render_panel args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ defaults args~ ** Processing line: ~ render args~ ** Processing line: ~ input args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input args~ ** Processing line: ~ if !args.audio[args.state.selected]~ ** Processing line: ~ args.state.selected = nil~ ** Processing line: ~ args.state.dragging = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # spawn button and node interaction~ ** Processing line: ~ if args.inputs.mouse.click~ ** Processing line: ~ spawn_sound_button = args.state.spawn_sound_buttons.find { |b| args.inputs.mouse.inside_rect? b.rect }~ ** Processing line: ~~ ** Processing line: ~ audio_click_key, audio_click_value = args.audio.find do |k, v|~ ** Processing line: ~ args.inputs.mouse.inside_rect? [v.screenx, v.screeny, args.state.boxsize, args.state.boxsize]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if spawn_sound_button~ ** Processing line: ~ args.state.selected = nil~ ** Processing line: ~ spawn_new_sound args, spawn_sound_button.name, spawn_sound_button.path~ ** Processing line: ~ elsif audio_click_key~ ** Processing line: ~ args.state.selected = audio_click_key~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.mouse_state == :held && args.state.selected~ ** Processing line: ~ v = args.audio[args.state.selected]~ ** Processing line: ~ if args.inputs.mouse.inside_rect? [v.screenx, v.screeny, args.state.boxsize, args.state.boxsize]~ ** Processing line: ~ args.state.dragging = args.state.selected~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.dragging~ ** Processing line: ~ s = args.audio[args.state.selected]~ ** Processing line: ~ # you can hang anything on the audio hashes you want, so we store the~ ** Processing line: ~ # actual screen position so it doesn't scale weirdly vs your mouse.~ ** Processing line: ~ s.screenx = args.inputs.mouse.x - (args.state.boxsize / 2)~ ** Processing line: ~ s.screeny = args.inputs.mouse.y - (args.state.boxsize / 2)~ ** Processing line: ~~ ** Processing line: ~ s.screeny = 50 if s.screeny < 50~ ** Processing line: ~ s.screeny = (719 - args.state.boxsize) if s.screeny > (719 - args.state.boxsize)~ ** Processing line: ~ s.screenx = 0 if s.screenx < 0~ ** Processing line: ~ s.screenx = (1279 - args.state.boxsize) if s.screenx > (1279 - args.state.boxsize)~ ** Processing line: ~~ ** Processing line: ~ s.x = ((s.screenx / 1279.0) * 2.0) - 1.0 # scale to -1.0 - 1.0 range~ ** Processing line: ~ s.y = ((s.screeny / 719.0) * 2.0) - 1.0 # scale to -1.0 - 1.0 range~ ** Processing line: ~ end~ ** Processing line: ~ elsif args.state.mouse_state == :released~ ** Processing line: ~ args.state.dragging = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ input_panel args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults args~ ** Processing line: ~ args.state.mouse_state ||= :released~ ** Processing line: ~ args.state.dragging_source ||= false~ ** Processing line: ~ args.state.selected ||= 0~ ** Processing line: ~ args.state.next_sound_index ||= 0~ ** Processing line: ~ args.state.boxsize ||= 30~ ** Processing line: ~ args.state.sound_files ||= [~ ** Processing line: ~ { name: :tada, path: "sounds/tada.wav" },~ ** Processing line: ~ { name: :splash, path: "sounds/splash.wav" },~ ** Processing line: ~ { name: :drum, path: "sounds/drum.mp3" },~ ** Processing line: ~ { name: :spring, path: "sounds/spring.wav" },~ ** Processing line: ~ { name: :music, path: "sounds/music.ogg" }~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ # generate buttons based off the sound collection above~ ** Processing line: ~ args.state.spawn_sound_buttons ||= begin~ ** Processing line: ~ # create a group of buttons~ ** Processing line: ~ # column centered (using col_offset to calculate the column offset)~ ** Processing line: ~ # where each item is 2 columns apart~ ** Processing line: ~ rects = args.layout.rect_group row: 11,~ ** Processing line: ~ col_offset: {~ ** Processing line: ~ count: args.state.sound_files.length,~ ** Processing line: ~ w: 2~ ** Processing line: ~ },~ ** Processing line: ~ dcol: 2,~ ** Processing line: ~ w: 2,~ ** Processing line: ~ h: 1,~ ** Processing line: ~ group: args.state.sound_files~ ** Processing line: ~~ ** Processing line: ~ # now that you have the rects~ ** Processing line: ~ # construct the metadata for the buttons~ ** Processing line: ~ rects.map do |rect|~ ** Processing line: ~ {~ ** Processing line: ~ rect: rect,~ ** Processing line: ~ name: rect.name,~ ** Processing line: ~ path: rect.path,~ ** Processing line: ~ primitives: [~ ** Processing line: ~ rect.to_border(r: 255, g: 255, b: 255),~ ** Processing line: ~ rect.to_label(x: rect.center_x,~ ** Processing line: ~ y: rect.center_y,~ ** Processing line: ~ text: "#{rect.name}",~ ** Processing line: ~ alignment_enum: 1,~ ** Processing line: ~ vertical_alignment_enum: 1,~ ** Processing line: ~ r: 255, g: 255, b: 255)~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.mouse.up~ ** Processing line: ~ args.state.mouse_state = :released~ ** Processing line: ~ args.state.dragging_source = false~ ** Processing line: ~ elsif args.inputs.mouse.down~ ** Processing line: ~ args.state.mouse_state = :held~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.background_color = [ 0, 0, 0, 255 ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render args~ ** Processing line: ~ render_ui args~ ** Processing line: ~ render_sources args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Audio - Audio Mixer - server_ip_address.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Audio - Audio Mixer - server_ip_address.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Audio - Audio Mixer - server_ip_address.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_audio/01_audio_mixer/app/server_ip_address.txt~ ** Processing line: ~ 192.168.1.65~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Audio - Sound Synthesis - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Audio - Sound Synthesis - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Audio - Sound Synthesis - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_audio/02_sound_synthesis/app/main.rb~ ** Processing line: ~ begin # region: top level tick methods~ ** Processing line: ~ def tick args~ ** Processing line: ~ defaults args~ ** Processing line: ~ render args~ ** Processing line: ~ input args~ ** Processing line: ~ process_audio_queue args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults args~ ** Processing line: ~ args.state.sine_waves ||= {}~ ** Processing line: ~ args.state.square_waves ||= {}~ ** Processing line: ~ args.state.saw_tooth_waves ||= {}~ ** Processing line: ~ args.state.triangle_waves ||= {}~ ** Processing line: ~ args.state.audio_queue ||= []~ ** Processing line: ~ args.state.buttons ||= [~ ** Processing line: ~ (frequency_buttons args),~ ** Processing line: ~ (sine_wave_note_buttons args),~ ** Processing line: ~ (bell_buttons args),~ ** Processing line: ~ (square_wave_note_buttons args),~ ** Processing line: ~ (saw_tooth_wave_note_buttons args),~ ** Processing line: ~ (triangle_wave_note_buttons args),~ ** Processing line: ~ ].flatten~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render args~ ** Processing line: ~ args.outputs.borders << args.state.buttons.map { |b| b[:border] }~ ** Processing line: ~ args.outputs.labels << args.state.buttons.map { |b| b[:label] }~ ** Processing line: ~ args.outputs.labels << args.layout~ ** Processing line: ~ .rect(row: 0, col: 11.5)~ ** Processing line: ~ .yield_self { |r| r.merge y: r.y + r.h }~ ** Processing line: ~ .merge(text: "This is a Pro only feature. Click here to watch the YouTube video if you are on the Standard License.",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def input args~ ** Processing line: ~ args.state.buttons.each do |b|~ ** Processing line: ~ if args.inputs.mouse.click && (args.inputs.mouse.click.inside_rect? b[:rect])~ ** Processing line: ~ parameter_string = (b.slice :frequency, :note, :octave).map { |k, v| "#{k}: #{v}" }.join ", "~ ** Processing line: ~ args.gtk.notify! "#{b[:method_to_call]} #{parameter_string}"~ ** Processing line: ~ send b[:method_to_call], args, b~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.mouse.click && (args.inputs.mouse.click.inside_rect? (args.layout.rect(row: 0).yield_self { |r| r.merge y: r.y + r.h.half, h: r.h.half }))~ ** Processing line: ~ args.gtk.openurl 'https://www.youtube.com/watch?v=zEzovM5jT-k&ab_channel=AmirRajan'~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_audio_queue args~ ** Processing line: ~ to_queue = args.state.audio_queue.find_all { |v| v[:queue_at] <= args.tick_count }~ ** Processing line: ~ args.state.audio_queue -= to_queue~ ** Processing line: ~ to_queue.each { |a| args.audio[a[:id]] = a }~ ** Processing line: ~~ ** Processing line: ~ args.audio.find_all { |k, v| v[:decay_rate] }~ ** Processing line: ~ .each { |k, v| v[:gain] -= v[:decay_rate] }~ ** Processing line: ~~ ** Processing line: ~ sounds_to_stop = args.audio~ ** Processing line: ~ .find_all { |k, v| v[:stop_at] && args.state.tick_count >= v[:stop_at] }~ ** Processing line: ~ .map { |k, v| k }~ ** Processing line: ~~ ** Processing line: ~ sounds_to_stop.each { |k| args.audio.delete k }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin # region: button definitions, ui layout, callback functions~ ** Processing line: ~ def button args, opts~ ** Processing line: ~ button_def = opts.merge rect: (args.layout.rect (opts.merge w: 2, h: 1))~ ** Processing line: ~~ ** Processing line: ~ button_def[:border] = button_def[:rect].merge r: 0, g: 0, b: 0~ ** Processing line: ~~ ** Processing line: ~ label_offset_x = 5~ ** Processing line: ~ label_offset_y = 30~ ** Processing line: ~~ ** Processing line: ~ button_def[:label] = button_def[:rect].merge text: opts[:text],~ ** Processing line: ~ size_enum: -2.5,~ ** Processing line: ~ x: button_def[:rect].x + label_offset_x,~ ** Processing line: ~ y: button_def[:rect].y + label_offset_y~ ** Processing line: ~~ ** Processing line: ~ button_def~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def play_sine_wave args, sender~ ** Processing line: ~ queue_sine_wave args,~ ** Processing line: ~ frequency: sender[:frequency],~ ** Processing line: ~ duration: 1.seconds,~ ** Processing line: ~ fade_out: true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def play_note args, sender~ ** Processing line: ~ method_to_call = :queue_sine_wave~ ** Processing line: ~ method_to_call = :queue_square_wave if sender[:type] == :square~ ** Processing line: ~ method_to_call = :queue_saw_tooth_wave if sender[:type] == :saw_tooth~ ** Processing line: ~ method_to_call = :queue_triangle_wave if sender[:type] == :triangle~ ** Processing line: ~ method_to_call = :queue_bell if sender[:type] == :bell~ ** Processing line: ~~ ** Processing line: ~ send method_to_call, args,~ ** Processing line: ~ frequency: (frequency_for note: sender[:note], octave: sender[:octave]),~ ** Processing line: ~ duration: 1.seconds,~ ** Processing line: ~ fade_out: true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def frequency_buttons args~ ** Processing line: ~ [~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 4.0, col: 0, text: "300hz",~ ** Processing line: ~ frequency: 300,~ ** Processing line: ~ method_to_call: :play_sine_wave),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 5.0, col: 0, text: "400hz",~ ** Processing line: ~ frequency: 400,~ ** Processing line: ~ method_to_call: :play_sine_wave),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 6.0, col: 0, text: "500hz",~ ** Processing line: ~ frequency: 500,~ ** Processing line: ~ method_to_call: :play_sine_wave),~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def sine_wave_note_buttons args~ ** Processing line: ~ [~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 1.5, col: 2, text: "Sine C4",~ ** Processing line: ~ note: :c, octave: 4, type: :sine, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 2.5, col: 2, text: "Sine D4",~ ** Processing line: ~ note: :d, octave: 4, type: :sine, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 3.5, col: 2, text: "Sine E4",~ ** Processing line: ~ note: :e, octave: 4, type: :sine, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 4.5, col: 2, text: "Sine F4",~ ** Processing line: ~ note: :f, octave: 4, type: :sine, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 5.5, col: 2, text: "Sine G4",~ ** Processing line: ~ note: :g, octave: 4, type: :sine, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 6.5, col: 2, text: "Sine A5",~ ** Processing line: ~ note: :a, octave: 5, type: :sine, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 7.5, col: 2, text: "Sine B5",~ ** Processing line: ~ note: :b, octave: 5, type: :sine, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 8.5, col: 2, text: "Sine C5",~ ** Processing line: ~ note: :c, octave: 5, type: :sine, method_to_call: :play_note),~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def square_wave_note_buttons args~ ** Processing line: ~ [~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 1.5, col: 6, text: "Square C4",~ ** Processing line: ~ note: :c, octave: 4, type: :square, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 2.5, col: 6, text: "Square D4",~ ** Processing line: ~ note: :d, octave: 4, type: :square, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 3.5, col: 6, text: "Square E4",~ ** Processing line: ~ note: :e, octave: 4, type: :square, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 4.5, col: 6, text: "Square F4",~ ** Processing line: ~ note: :f, octave: 4, type: :square, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 5.5, col: 6, text: "Square G4",~ ** Processing line: ~ note: :g, octave: 4, type: :square, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 6.5, col: 6, text: "Square A5",~ ** Processing line: ~ note: :a, octave: 5, type: :square, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 7.5, col: 6, text: "Square B5",~ ** Processing line: ~ note: :b, octave: 5, type: :square, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 8.5, col: 6, text: "Square C5",~ ** Processing line: ~ note: :c, octave: 5, type: :square, method_to_call: :play_note),~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ def saw_tooth_wave_note_buttons args~ ** Processing line: ~ [~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 1.5, col: 8, text: "Saw C4",~ ** Processing line: ~ note: :c, octave: 4, type: :saw_tooth, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 2.5, col: 8, text: "Saw D4",~ ** Processing line: ~ note: :d, octave: 4, type: :saw_tooth, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 3.5, col: 8, text: "Saw E4",~ ** Processing line: ~ note: :e, octave: 4, type: :saw_tooth, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 4.5, col: 8, text: "Saw F4",~ ** Processing line: ~ note: :f, octave: 4, type: :saw_tooth, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 5.5, col: 8, text: "Saw G4",~ ** Processing line: ~ note: :g, octave: 4, type: :saw_tooth, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 6.5, col: 8, text: "Saw A5",~ ** Processing line: ~ note: :a, octave: 5, type: :saw_tooth, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 7.5, col: 8, text: "Saw B5",~ ** Processing line: ~ note: :b, octave: 5, type: :saw_tooth, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 8.5, col: 8, text: "Saw C5",~ ** Processing line: ~ note: :c, octave: 5, type: :saw_tooth, method_to_call: :play_note),~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def triangle_wave_note_buttons args~ ** Processing line: ~ [~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 1.5, col: 10, text: "Triangle C4",~ ** Processing line: ~ note: :c, octave: 4, type: :triangle, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 2.5, col: 10, text: "Triangle D4",~ ** Processing line: ~ note: :d, octave: 4, type: :triangle, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 3.5, col: 10, text: "Triangle E4",~ ** Processing line: ~ note: :e, octave: 4, type: :triangle, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 4.5, col: 10, text: "Triangle F4",~ ** Processing line: ~ note: :f, octave: 4, type: :triangle, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 5.5, col: 10, text: "Triangle G4",~ ** Processing line: ~ note: :g, octave: 4, type: :triangle, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 6.5, col: 10, text: "Triangle A5",~ ** Processing line: ~ note: :a, octave: 5, type: :triangle, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 7.5, col: 10, text: "Triangle B5",~ ** Processing line: ~ note: :b, octave: 5, type: :triangle, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 8.5, col: 10, text: "Triangle C5",~ ** Processing line: ~ note: :c, octave: 5, type: :triangle, method_to_call: :play_note),~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def bell_buttons args~ ** Processing line: ~ [~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 1.5, col: 4, text: "Bell C4",~ ** Processing line: ~ note: :c, octave: 4, type: :bell, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 2.5, col: 4, text: "Bell D4",~ ** Processing line: ~ note: :d, octave: 4, type: :bell, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 3.5, col: 4, text: "Bell E4",~ ** Processing line: ~ note: :e, octave: 4, type: :bell, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 4.5, col: 4, text: "Bell F4",~ ** Processing line: ~ note: :f, octave: 4, type: :bell, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 5.5, col: 4, text: "Bell G4",~ ** Processing line: ~ note: :g, octave: 4, type: :bell, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 6.5, col: 4, text: "Bell A5",~ ** Processing line: ~ note: :a, octave: 5, type: :bell, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 7.5, col: 4, text: "Bell B5",~ ** Processing line: ~ note: :b, octave: 5, type: :bell, method_to_call: :play_note),~ ** Processing line: ~ (button args,~ ** Processing line: ~ row: 8.5, col: 4, text: "Bell C5",~ ** Processing line: ~ note: :c, octave: 5, type: :bell, method_to_call: :play_note),~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin # region: wave generation~ ** Processing line: ~ begin # sine wave~ ** Processing line: ~ def defaults_sine_wave_for~ ** Processing line: ~ { frequency: 440, sample_rate: 48000 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def sine_wave_for opts = {}~ ** Processing line: ~ opts = defaults_sine_wave_for.merge opts~ ** Processing line: ~ frequency = opts[:frequency]~ ** Processing line: ~ sample_rate = opts[:sample_rate]~ ** Processing line: ~ period_size = (sample_rate.fdiv frequency).ceil~ ** Processing line: ~ period_size.map_with_index do |i|~ ** Processing line: ~ Math::sin((2.0 * Math::PI) / (sample_rate.to_f / frequency.to_f) * i)~ ** Processing line: ~ end.to_a~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults_queue_sine_wave~ ** Processing line: ~ { frequency: 440, duration: 60, gain: 1.0, fade_out: false, queue_in: 0 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def queue_sine_wave args, opts = {}~ ** Processing line: ~ opts = defaults_queue_sine_wave.merge opts~ ** Processing line: ~ frequency = opts[:frequency]~ ** Processing line: ~ sample_rate = 48000~ ** Processing line: ~~ ** Processing line: ~ sine_wave = sine_wave_for frequency: frequency, sample_rate: sample_rate~ ** Processing line: ~ args.state.sine_waves[frequency] ||= sine_wave_for frequency: frequency, sample_rate: sample_rate~ ** Processing line: ~~ ** Processing line: ~ proc = lambda do~ ** Processing line: ~ generate_audio_data args.state.sine_waves[frequency], sample_rate~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ audio_state = new_audio_state args, opts~ ** Processing line: ~ audio_state[:input] = [1, sample_rate, proc]~ ** Processing line: ~ queue_audio args, audio_state: audio_state, wave: sine_wave~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin # region: square wave~ ** Processing line: ~ def defaults_square_wave_for~ ** Processing line: ~ { frequency: 440, sample_rate: 48000 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def square_wave_for opts = {}~ ** Processing line: ~ opts = defaults_square_wave_for.merge opts~ ** Processing line: ~ sine_wave = sine_wave_for opts~ ** Processing line: ~ sine_wave.map do |v|~ ** Processing line: ~ if v >= 0~ ** Processing line: ~ 1.0~ ** Processing line: ~ else~ ** Processing line: ~ -1.0~ ** Processing line: ~ end~ ** Processing line: ~ end.to_a~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults_queue_square_wave~ ** Processing line: ~ { frequency: 440, duration: 60, gain: 0.3, fade_out: false, queue_in: 0 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def queue_square_wave args, opts = {}~ ** Processing line: ~ opts = defaults_queue_square_wave.merge opts~ ** Processing line: ~ frequency = opts[:frequency]~ ** Processing line: ~ sample_rate = 48000~ ** Processing line: ~~ ** Processing line: ~ square_wave = square_wave_for frequency: frequency, sample_rate: sample_rate~ ** Processing line: ~ args.state.square_waves[frequency] ||= square_wave_for frequency: frequency, sample_rate: sample_rate~ ** Processing line: ~~ ** Processing line: ~ proc = lambda do~ ** Processing line: ~ generate_audio_data args.state.square_waves[frequency], sample_rate~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ audio_state = new_audio_state args, opts~ ** Processing line: ~ audio_state[:input] = [1, sample_rate, proc]~ ** Processing line: ~ queue_audio args, audio_state: audio_state, wave: square_wave~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin # region: saw tooth wave~ ** Processing line: ~ def defaults_saw_tooth_wave_for~ ** Processing line: ~ { frequency: 440, sample_rate: 48000 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def saw_tooth_wave_for opts = {}~ ** Processing line: ~ opts = defaults_saw_tooth_wave_for.merge opts~ ** Processing line: ~ sine_wave = sine_wave_for opts~ ** Processing line: ~ period_size = sine_wave.length~ ** Processing line: ~ sine_wave.map_with_index do |v, i|~ ** Processing line: ~ (((i % period_size).fdiv period_size) * 2) - 1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults_queue_saw_tooth_wave~ ** Processing line: ~ { frequency: 440, duration: 60, gain: 0.3, fade_out: false, queue_in: 0 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def queue_saw_tooth_wave args, opts = {}~ ** Processing line: ~ opts = defaults_queue_saw_tooth_wave.merge opts~ ** Processing line: ~ frequency = opts[:frequency]~ ** Processing line: ~ sample_rate = 48000~ ** Processing line: ~~ ** Processing line: ~ saw_tooth_wave = saw_tooth_wave_for frequency: frequency, sample_rate: sample_rate~ ** Processing line: ~ args.state.saw_tooth_waves[frequency] ||= saw_tooth_wave_for frequency: frequency, sample_rate: sample_rate~ ** Processing line: ~~ ** Processing line: ~ proc = lambda do~ ** Processing line: ~ generate_audio_data args.state.saw_tooth_waves[frequency], sample_rate~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ audio_state = new_audio_state args, opts~ ** Processing line: ~ audio_state[:input] = [1, sample_rate, proc]~ ** Processing line: ~ queue_audio args, audio_state: audio_state, wave: saw_tooth_wave~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin # region: triangle wave~ ** Processing line: ~ def defaults_triangle_wave_for~ ** Processing line: ~ { frequency: 440, sample_rate: 48000 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def triangle_wave_for opts = {}~ ** Processing line: ~ opts = defaults_saw_tooth_wave_for.merge opts~ ** Processing line: ~ sine_wave = sine_wave_for opts~ ** Processing line: ~ period_size = sine_wave.length~ ** Processing line: ~ sine_wave.map_with_index do |v, i|~ ** Processing line: ~ ratio = (i.fdiv period_size)~ ** Processing line: ~ if ratio <= 0.5~ ** Processing line: ~ (ratio * 4) - 1~ ** Processing line: ~ else~ ** Processing line: ~ ratio -= 0.5~ ** Processing line: ~ 1 - (ratio * 4)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults_queue_triangle_wave~ ** Processing line: ~ { frequency: 440, duration: 60, gain: 1.0, fade_out: false, queue_in: 0 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def queue_triangle_wave args, opts = {}~ ** Processing line: ~ opts = defaults_queue_triangle_wave.merge opts~ ** Processing line: ~ frequency = opts[:frequency]~ ** Processing line: ~ sample_rate = 48000~ ** Processing line: ~~ ** Processing line: ~ triangle_wave = triangle_wave_for frequency: frequency, sample_rate: sample_rate~ ** Processing line: ~ args.state.triangle_waves[frequency] ||= triangle_wave_for frequency: frequency, sample_rate: sample_rate~ ** Processing line: ~~ ** Processing line: ~ proc = lambda do~ ** Processing line: ~ generate_audio_data args.state.triangle_waves[frequency], sample_rate~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ audio_state = new_audio_state args, opts~ ** Processing line: ~ audio_state[:input] = [1, sample_rate, proc]~ ** Processing line: ~ queue_audio args, audio_state: audio_state, wave: triangle_wave~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin # region: bell~ ** Processing line: ~ def defaults_queue_bell~ ** Processing line: ~ { frequency: 440, duration: 1.seconds, queue_in: 0 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def queue_bell args, opts = {}~ ** Processing line: ~ (bell_to_sine_waves (defaults_queue_bell.merge opts)).each { |b| queue_sine_wave args, b }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def bell_harmonics~ ** Processing line: ~ [~ ** Processing line: ~ { frequency_ratio: 0.5, duration_ratio: 1.00 },~ ** Processing line: ~ { frequency_ratio: 1.0, duration_ratio: 0.80 },~ ** Processing line: ~ { frequency_ratio: 2.0, duration_ratio: 0.60 },~ ** Processing line: ~ { frequency_ratio: 3.0, duration_ratio: 0.40 },~ ** Processing line: ~ { frequency_ratio: 4.2, duration_ratio: 0.25 },~ ** Processing line: ~ { frequency_ratio: 5.4, duration_ratio: 0.20 },~ ** Processing line: ~ { frequency_ratio: 6.8, duration_ratio: 0.15 }~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults_bell_to_sine_waves~ ** Processing line: ~ { frequency: 440, duration: 1.seconds, queue_in: 0 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def bell_to_sine_waves opts = {}~ ** Processing line: ~ opts = defaults_bell_to_sine_waves.merge opts~ ** Processing line: ~ bell_harmonics.map do |b|~ ** Processing line: ~ {~ ** Processing line: ~ frequency: opts[:frequency] * b[:frequency_ratio],~ ** Processing line: ~ duration: opts[:duration] * b[:duration_ratio],~ ** Processing line: ~ queue_in: opts[:queue_in],~ ** Processing line: ~ gain: (1.fdiv bell_harmonics.length),~ ** Processing line: ~ fade_out: true~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin # audio entity construction~ ** Processing line: ~ def generate_audio_data sine_wave, sample_rate~ ** Processing line: ~ sample_size = (sample_rate.fdiv (1000.fdiv 60)).ceil~ ** Processing line: ~ copy_count = (sample_size.fdiv sine_wave.length).ceil~ ** Processing line: ~ sine_wave * copy_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults_new_audio_state~ ** Processing line: ~ { frequency: 440, duration: 60, gain: 1.0, fade_out: false, queue_in: 0 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_audio_state args, opts = {}~ ** Processing line: ~ opts = defaults_new_audio_state.merge opts~ ** Processing line: ~ decay_rate = 0~ ** Processing line: ~ decay_rate = 1.fdiv(opts[:duration]) * opts[:gain] if opts[:fade_out]~ ** Processing line: ~ frequency = opts[:frequency]~ ** Processing line: ~ sample_rate = 48000~ ** Processing line: ~~ ** Processing line: ~ {~ ** Processing line: ~ id: (new_id! args),~ ** Processing line: ~ frequency: frequency,~ ** Processing line: ~ sample_rate: 48000,~ ** Processing line: ~ stop_at: args.tick_count + opts[:queue_in] + opts[:duration],~ ** Processing line: ~ gain: opts[:gain].to_f,~ ** Processing line: ~ queue_at: args.state.tick_count + opts[:queue_in],~ ** Processing line: ~ decay_rate: decay_rate,~ ** Processing line: ~ pitch: 1.0,~ ** Processing line: ~ looping: true,~ ** Processing line: ~ paused: false~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def queue_audio args, opts = {}~ ** Processing line: ~ graph_wave args, opts[:wave], opts[:audio_state][:frequency]~ ** Processing line: ~ args.state.audio_queue << opts[:audio_state]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_id! args~ ** Processing line: ~ args.state.audio_id ||= 0~ ** Processing line: ~ args.state.audio_id += 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def graph_wave args, wave, frequency~ ** Processing line: ~ if args.state.tick_count != args.state.graphed_at~ ** Processing line: ~ args.outputs.static_lines.clear~ ** Processing line: ~ args.outputs.static_sprites.clear~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ wave = wave~ ** Processing line: ~~ ** Processing line: ~ r, g, b = frequency.to_i % 85,~ ** Processing line: ~ frequency.to_i % 170,~ ** Processing line: ~ frequency.to_i % 255~ ** Processing line: ~~ ** Processing line: ~ starting_rect = args.layout.rect(row: 5, col: 13)~ ** Processing line: ~ x_scale = 10~ ** Processing line: ~ y_scale = 100~ ** Processing line: ~ max_points = 25~ ** Processing line: ~~ ** Processing line: ~ points = wave~ ** Processing line: ~ if wave.length > max_points~ ** Processing line: ~ resolution = wave.length.idiv max_points~ ** Processing line: ~ points = wave.find_all.with_index { |y, i| (i % resolution == 0) }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.static_lines << points.map_with_index do |y, x|~ ** Processing line: ~ next_y = points[x + 1]~ ** Processing line: ~~ ** Processing line: ~ if next_y~ ** Processing line: ~ {~ ** Processing line: ~ x: starting_rect.x + (x * x_scale),~ ** Processing line: ~ y: starting_rect.y + starting_rect.h.half + y_scale * y,~ ** Processing line: ~ x2: starting_rect.x + ((x + 1) * x_scale),~ ** Processing line: ~ y2: starting_rect.y + starting_rect.h.half + y_scale * next_y,~ ** Processing line: ~ r: r,~ ** Processing line: ~ g: g,~ ** Processing line: ~ b: b~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.static_sprites << points.map_with_index do |y, x|~ ** Processing line: ~ {~ ** Processing line: ~ x: (starting_rect.x + (x * x_scale)) - 2,~ ** Processing line: ~ y: (starting_rect.y + starting_rect.h.half + y_scale * y) - 2,~ ** Processing line: ~ w: 4,~ ** Processing line: ~ h: 4,~ ** Processing line: ~ path: 'sprites/square-white.png',~ ** Processing line: ~ r: r,~ ** Processing line: ~ g: g,~ ** Processing line: ~ b: b~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.graphed_at = args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin # region: musical note mapping~ ** Processing line: ~ def defaults_frequency_for~ ** Processing line: ~ { note: :a, octave: 5, sharp: false, flat: false }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def frequency_for opts = {}~ ** Processing line: ~ opts = defaults_frequency_for.merge opts~ ** Processing line: ~ octave_offset_multiplier = opts[:octave] - 5~ ** Processing line: ~ note = note_frequencies_octave_5[opts[:note]]~ ** Processing line: ~ if octave_offset_multiplier < 0~ ** Processing line: ~ note = note * 1 / (octave_offset_multiplier.abs + 1)~ ** Processing line: ~ elsif octave_offset_multiplier > 0~ ** Processing line: ~ note = note * (octave_offset_multiplier.abs + 1) / 1~ ** Processing line: ~ end~ ** Processing line: ~ note~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def note_frequencies_octave_5~ ** Processing line: ~ {~ ** Processing line: ~ a: 440.0,~ ** Processing line: ~ a_sharp: 466.16, b_flat: 466.16,~ ** Processing line: ~ b: 493.88,~ ** Processing line: ~ c: 523.25,~ ** Processing line: ~ c_sharp: 554.37, d_flat: 587.33,~ ** Processing line: ~ d: 587.33,~ ** Processing line: ~ d_sharp: 622.25, e_flat: 659.25,~ ** Processing line: ~ e: 659.25,~ ** Processing line: ~ f: 698.25,~ ** Processing line: ~ f_sharp: 739.99, g_flat: 739.99,~ ** Processing line: ~ g: 783.99,~ ** Processing line: ~ g_sharp: 830.61, a_flat: 830.61~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Rendering - Labels With Wrapped Text - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Labels With Wrapped Text - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Labels With Wrapped Text - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_rendering/00_labels_with_wrapped_text/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ # defaults~ ** Processing line: ~ args.state.scroll_location ||= 0~ ** Processing line: ~ args.state.textbox.messages ||= []~ ** Processing line: ~ args.state.textbox.scroll ||= 0~ ** Processing line: ~~ ** Processing line: ~ # render~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0, 255]~ ** Processing line: ~ render_messages args~ ** Processing line: ~ render_instructions args~ ** Processing line: ~~ ** Processing line: ~ # inputs~ ** Processing line: ~ if args.inputs.keyboard.key_down.one~ ** Processing line: ~ queue_message args, "Hello there neighbour! my name is mark, how is your day today?"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.keyboard.key_down.two~ ** Processing line: ~ queue_message args, "I'm doing great sir, actually I'm having a picnic today"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.keyboard.key_down.three~ ** Processing line: ~ queue_message args, "Well that sounds wonderful!"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.keyboard.key_down.home~ ** Processing line: ~ args.state.scroll_location = 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.keyboard.key_down.delete~ ** Processing line: ~ clear_message_queue args~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def queue_message args, msg~ ** Processing line: ~ args.state.textbox.messages.concat msg.wrapped_lines 50~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def clear_message_queue args~ ** Processing line: ~ args.state.textbox.messages = nil~ ** Processing line: ~ args.state.textbox.scroll = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_messages args~ ** Processing line: ~ args.outputs[:textbox].w = 400~ ** Processing line: ~ args.outputs[:textbox].h = 720~ ** Processing line: ~~ ** Processing line: ~ args.outputs.primitives << args.state.textbox.messages.each_with_index.map do |s, idx|~ ** Processing line: ~ {~ ** Processing line: ~ x: 0,~ ** Processing line: ~ y: 20 * (args.state.textbox.messages.size - idx) + args.state.textbox.scroll * 20,~ ** Processing line: ~ text: s,~ ** Processing line: ~ size_enum: -3,~ ** Processing line: ~ alignment_enum: 0,~ ** Processing line: ~ r: 255, g:255, b: 255, a: 255~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs[:textbox].labels << args.state.textbox.messages.each_with_index.map do |s, idx|~ ** Processing line: ~ {~ ** Processing line: ~ x: 0,~ ** Processing line: ~ y: 20 * (args.state.textbox.messages.size - idx) + args.state.textbox.scroll * 20,~ ** Processing line: ~ text: s,~ ** Processing line: ~ size_enum: -3,~ ** Processing line: ~ alignment_enum: 0,~ ** Processing line: ~ r: 255, g:255, b: 255, a: 255~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs[:textbox].borders << [0, 0, args.outputs[:textbox].w, 720]~ ** Processing line: ~~ ** Processing line: ~ args.state.textbox.scroll += args.inputs.mouse.wheel.y unless args.inputs.mouse.wheel.nil?~ ** Processing line: ~~ ** Processing line: ~ if args.state.scroll_location > 0~ ** Processing line: ~ args.state.textbox.scroll = 0~ ** Processing line: ~ args.state.scroll_location = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.sprites << [900, 0, args.outputs[:textbox].w, 720, :textbox]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_instructions args~ ** Processing line: ~ args.outputs.labels << [30,~ ** Processing line: ~ 30.from_top,~ ** Processing line: ~ "press 1, 2, 3 to display messages, MOUSE WHEEL to scroll, HOME to go to top, BACKSPACE to delete.",~ ** Processing line: ~ 0, 255, 255]~ ** Processing line: ~~ ** Processing line: ~ args.outputs.primitives << [0, 55.from_top, 1280, 30, :pixel, 0, 255, 0, 0, 0].sprite~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Rendering - Rotating Label - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Rotating Label - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Rotating Label - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_rendering/00_rotating_label/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ # set the render target width and height to match the label~ ** Processing line: ~ args.outputs[:scene].w = 220~ ** Processing line: ~ args.outputs[:scene].h = 30~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # make the background transparent~ ** Processing line: ~ args.outputs[:scene].background_color = [255, 255, 255, 0]~ ** Processing line: ~~ ** Processing line: ~ # set the blendmode of the label to 0 (no blending)~ ** Processing line: ~ # center it inside of the scene~ ** Processing line: ~ # set the vertical_alignment_enum to 1 (center)~ ** Processing line: ~ args.outputs[:scene].labels << { x: 0,~ ** Processing line: ~ y: 15,~ ** Processing line: ~ text: "label in render target",~ ** Processing line: ~ blendmode_enum: 0,~ ** Processing line: ~ vertical_alignment_enum: 1 }~ ** Processing line: ~~ ** Processing line: ~ # add a border to the render target~ ** Processing line: ~ args.outputs[:scene].borders << { x: 0,~ ** Processing line: ~ y: 0,~ ** Processing line: ~ w: args.outputs[:scene].w,~ ** Processing line: ~ h: args.outputs[:scene].h }~ ** Processing line: ~~ ** Processing line: ~ # add the rendertarget to the main output as a sprite~ ** Processing line: ~ args.outputs.sprites << { x: 640 - args.outputs[:scene].w.half,~ ** Processing line: ~ y: 360 - args.outputs[:scene].h.half,~ ** Processing line: ~ w: args.outputs[:scene].w,~ ** Processing line: ~ h: args.outputs[:scene].h,~ ** Processing line: ~ angle: args.state.tick_count,~ ** Processing line: ~ path: :scene }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Rendering - Simple Render Targets - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Simple Render Targets - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Simple Render Targets - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_rendering/01_simple_render_targets/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ # args.outputs.render_targets are really really powerful.~ ** Processing line: ~ # They essentially allow you to create a sprite programmatically and cache the result.~ ** Processing line: ~~ ** Processing line: ~ # Create a render_target of a :block and a :gradient on tick zero.~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.render_target(:block).solids << [0, 0, 1280, 100]~ ** Processing line: ~~ ** Processing line: ~ # The gradient is actually just a collection of black solids with increasing~ ** Processing line: ~ # opacities.~ ** Processing line: ~ args.render_target(:gradient).solids << 90.map_with_index do |x|~ ** Processing line: ~ 50.map_with_index do |y|~ ** Processing line: ~ [x * 15, y * 15, 15, 15, 0, 0, 0, (x * 3).fdiv(255) * 255]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Take the :block render_target and present it horizontally centered.~ ** Processing line: ~ # Use a subsection of the render_targetd specified by source_x,~ ** Processing line: ~ # source_y, source_w, source_h.~ ** Processing line: ~ args.outputs.sprites << { x: 0,~ ** Processing line: ~ y: 310,~ ** Processing line: ~ w: 1280,~ ** Processing line: ~ h: 100,~ ** Processing line: ~ path: :block,~ ** Processing line: ~ source_x: 0,~ ** Processing line: ~ source_y: 0,~ ** Processing line: ~ source_w: 1280,~ ** Processing line: ~ source_h: 100 }~ ** Processing line: ~~ ** Processing line: ~ # After rendering :block, render gradient on top of :block.~ ** Processing line: ~ args.outputs.sprites << [0, 0, 1280, 720, :gradient]~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << [1270, 710, args.gtk.current_framerate, 0, 2, 255, 255, 255]~ ** Processing line: ~ tick_instructions args, "Sample app shows how to use render_targets (programmatically create cached sprites)."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Rendering - Render Targets With Tile Manipulation - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Render Targets With Tile Manipulation - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Render Targets With Tile Manipulation - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_rendering/02_render_targets_with_tile_manipulation/app/main.rb~ ** Processing line: ~ # This sample is meant to show you how to do that dripping transition thing~ ** Processing line: ~ # at the start of the original Doom. Most of this file is here to animate~ ** Processing line: ~ # a scene to wipe away; the actual wipe effect is in the last 20 lines or~ ** Processing line: ~ # so.~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset # reset all game state if reloaded.~ ** Processing line: ~~ ** Processing line: ~ def circle_of_blocks pass, xoffset, yoffset, angleoffset, blocksize, distance~ ** Processing line: ~ numblocks = 10~ ** Processing line: ~~ ** Processing line: ~ for i in 1..numblocks do~ ** Processing line: ~ angle = ((360 / numblocks) * i) + angleoffset~ ** Processing line: ~ radians = angle * (Math::PI / 180)~ ** Processing line: ~ x = (xoffset + (distance * Math.cos(radians))).round~ ** Processing line: ~ y = (yoffset + (distance * Math.sin(radians))).round~ ** Processing line: ~ pass.solids << [ x, y, blocksize, blocksize, 255, 255, 0 ]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw_scene args, pass~ ** Processing line: ~ pass.solids << [0, 360, 1280, 360, 0, 0, 200]~ ** Processing line: ~ pass.solids << [0, 0, 1280, 360, 0, 127, 0]~ ** Processing line: ~~ ** Processing line: ~ blocksize = 100~ ** Processing line: ~ angleoffset = args.state.tick_count * 2.5~ ** Processing line: ~ centerx = (1280 - blocksize) / 2~ ** Processing line: ~ centery = (720 - blocksize) / 2~ ** Processing line: ~~ ** Processing line: ~ circle_of_blocks pass, centerx, centery, angleoffset, blocksize * 2, 500~ ** Processing line: ~ circle_of_blocks pass, centerx, centery, angleoffset, blocksize, 325~ ** Processing line: ~ circle_of_blocks pass, centerx, centery, angleoffset, blocksize / 2, 200~ ** Processing line: ~ circle_of_blocks pass, centerx, centery, angleoffset, blocksize / 4, 100~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ segments = 160~ ** Processing line: ~~ ** Processing line: ~ # On the first tick, initialize some stuff.~ ** Processing line: ~ if !args.state.yoffsets~ ** Processing line: ~ args.state.baseyoff = 0~ ** Processing line: ~ args.state.yoffsets = []~ ** Processing line: ~ for i in 0..segments do~ ** Processing line: ~ args.state.yoffsets << rand * 100~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Just draw some random stuff for a few seconds.~ ** Processing line: ~ args.state.static_debounce ||= 60 * 2.5~ ** Processing line: ~ if args.state.static_debounce > 0~ ** Processing line: ~ last_frame = args.state.static_debounce == 1~ ** Processing line: ~ target = last_frame ? args.render_target(:last_frame) : args.outputs~ ** Processing line: ~ draw_scene args, target~ ** Processing line: ~ args.state.static_debounce -= 1~ ** Processing line: ~ return unless last_frame~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # build up the wipe...~ ** Processing line: ~~ ** Processing line: ~ # this is the thing we're wiping to.~ ** Processing line: ~ args.outputs.sprites << [ 0, 0, 1280, 720, 'dragonruby.png' ]~ ** Processing line: ~~ ** Processing line: ~ return if (args.state.baseyoff > (1280 + 100)) # stop when done sliding~ ** Processing line: ~~ ** Processing line: ~ segmentw = 1280 / segments~ ** Processing line: ~~ ** Processing line: ~ x = 0~ ** Processing line: ~ for i in 0..segments do~ ** Processing line: ~ yoffset = 0~ ** Processing line: ~ if args.state.yoffsets[i] < args.state.baseyoff~ ** Processing line: ~ yoffset = args.state.baseyoff - args.state.yoffsets[i]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # (720 - yoffset) flips the coordinate system, (- 720) adjusts for the height of the segment.~ ** Processing line: ~ args.outputs.sprites << [ x, (720 - yoffset) - 720, segmentw, 720, 'last_frame', 0, 255, 255, 255, 255, x, 0, segmentw, 720 ]~ ** Processing line: ~ x += segmentw~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.baseyoff += 4~ ** Processing line: ~~ ** Processing line: ~ tick_instructions args, "Sample app shows an advanced usage of render_target."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Rendering - Render Target Viewports - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Render Target Viewports - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Render Target Viewports - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_rendering/03_render_target_viewports/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - args.state.new_entity: Used when we want to create a new object, like a sprite or button.~ ** Processing line: ~ For example, if we want to create a new button, we would declare it as a new entity and~ ** Processing line: ~ then define its properties. (Remember, you can use state to define ANY property and it will~ ** Processing line: ~ be retained across frames.)~ ** Processing line: ~~ ** Processing line: ~ If you have a solar system and you're creating args.state.sun and setting its image path to an~ ** Processing line: ~ image in the sprites folder, you would do the following:~ ** Processing line: ~ (See samples/99_sample_nddnug_workshop for more details.)~ ** Processing line: ~~ ** Processing line: ~ args.state.sun ||= args.state.new_entity(:sun) do |s|~ ** Processing line: ~ s.path = 'sprites/sun.png'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated~ ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ ** Processing line: ~~ ** Processing line: ~ For example, if we have a variable~ ** Processing line: ~ name = "Ruby"~ ** Processing line: ~ then the line~ ** Processing line: ~ puts "How are you, #{name}?"~ ** Processing line: ~ would print "How are you, Ruby?" to the console.~ ** Processing line: ~ (Remember, string interpolation only works with double quotes!)~ ** Processing line: ~~ ** Processing line: ~ - Ternary operator (?): Similar to if statement; first evalulates whether a statement is~ ** Processing line: ~ true or false, and then executes a command depending on that result.~ ** Processing line: ~ For example, if we had a variable~ ** Processing line: ~ grade = 75~ ** Processing line: ~ and used the ternary operator in the command~ ** Processing line: ~ pass_or_fail = grade > 65 ? "pass" : "fail"~ ** Processing line: ~ then the value of pass_or_fail would be "pass" since grade's value was greater than 65.~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - args.grid.(left|right|top|bottom): Pixel value for the boundaries of the virtual~ ** Processing line: ~ 720 p screen (Dragon Ruby Game Toolkits's virtual resolution is always 1280x720).~ ** Processing line: ~~ ** Processing line: ~ - Numeric#shift_(left|right|up|down): Shifts the Numeric in the correct direction~ ** Processing line: ~ by adding or subracting.~ ** Processing line: ~~ ** Processing line: ~ - ARRAY#inside_rect?: An array with at least two values is considered a point. An array~ ** Processing line: ~ with at least four values is considered a rect. The inside_rect? function returns true~ ** Processing line: ~ or false depending on if the point is inside the rect.~ ** Processing line: ~~ ** Processing line: ~ - ARRAY#intersect_rect?: Returns true or false depending on if the two rectangles intersect.~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.mouse.click: This property will be set if the mouse was clicked.~ ** Processing line: ~ For more information about the mouse, go to mygame/documentation/07-mouse.md.~ ** Processing line: ~~ ** Processing line: ~ - args.inputs.keyboard.key_up.KEY: The value of the properties will be set~ ** Processing line: ~ to the frame that the key_up event occurred (the frame correlates~ ** Processing line: ~ to args.state.tick_count).~ ** Processing line: ~ For more information about the keyboard, go to mygame/documentation/06-keyboard.md.~ ** Processing line: ~~ ** Processing line: ~ - args.state.labels:~ ** Processing line: ~ The parameters for a label are~ ** Processing line: ~ 1. the position (x, y)~ ** Processing line: ~ 2. the text~ ** Processing line: ~ 3. the size~ ** Processing line: ~ 4. the alignment~ ** Processing line: ~ 5. the color (red, green, and blue saturations)~ ** Processing line: ~ 6. the alpha (or transparency)~ ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ ** Processing line: ~~ ** Processing line: ~ - args.state.lines:~ ** Processing line: ~ The parameters for a line are~ ** Processing line: ~ 1. the starting position (x, y)~ ** Processing line: ~ 2. the ending position (x2, y2)~ ** Processing line: ~ 3. the color (red, green, and blue saturations)~ ** Processing line: ~ 4. the alpha (or transparency)~ ** Processing line: ~ For more information about lines, go to mygame/documentation/04-lines.md.~ ** Processing line: ~~ ** Processing line: ~ - args.state.solids (and args.state.borders):~ ** Processing line: ~ The parameters for a solid (or border) are~ ** Processing line: ~ 1. the position (x, y)~ ** Processing line: ~ 2. the width (w)~ ** Processing line: ~ 3. the height (h)~ ** Processing line: ~ 4. the color (r, g, b)~ ** Processing line: ~ 5. the alpha (or transparency)~ ** Processing line: ~ For more information about solids and borders, go to mygame/documentation/03-solids-and-borders.md.~ ** Processing line: ~~ ** Processing line: ~ - args.state.sprites:~ ** Processing line: ~ The parameters for a sprite are~ ** Processing line: ~ 1. the position (x, y)~ ** Processing line: ~ 2. the width (w)~ ** Processing line: ~ 3. the height (h)~ ** Processing line: ~ 4. the image path~ ** Processing line: ~ 5. the angle~ ** Processing line: ~ 6. the alpha (or transparency)~ ** Processing line: ~ For more information about sprites, go to mygame/documentation/05-sprites.md.~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app shows different objects that can be used when making games, such as labels,~ ** Processing line: ~ # lines, sprites, solids, buttons, etc. Each demo section shows how these objects can be used.~ ** Processing line: ~~ ** Processing line: ~ # Also note that state.tick_count refers to the passage of time, or current frame.~ ** Processing line: ~~ ** Processing line: ~ class TechDemo~ ** Processing line: ~ attr_accessor :inputs, :state, :outputs, :grid, :args~ ** Processing line: ~~ ** Processing line: ~ # Calls all methods necessary for the app to run properly.~ ** Processing line: ~ def tick~ ** Processing line: ~ labels_tech_demo~ ** Processing line: ~ lines_tech_demo~ ** Processing line: ~ solids_tech_demo~ ** Processing line: ~ borders_tech_demo~ ** Processing line: ~ sprites_tech_demo~ ** Processing line: ~ keyboards_tech_demo~ ** Processing line: ~ controller_tech_demo~ ** Processing line: ~ mouse_tech_demo~ ** Processing line: ~ point_to_rect_tech_demo~ ** Processing line: ~ rect_to_rect_tech_demo~ ** Processing line: ~ button_tech_demo~ ** Processing line: ~ export_game_state_demo~ ** Processing line: ~ window_state_demo~ ** Processing line: ~ render_seperators~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Shows output of different kinds of labels on the screen~ ** Processing line: ~ def labels_tech_demo~ ** Processing line: ~ outputs.labels << [grid.left.shift_right(5), grid.top.shift_down(5), "This is a label located at the top left."]~ ** Processing line: ~ outputs.labels << [grid.left.shift_right(5), grid.bottom.shift_up(30), "This is a label located at the bottom left."]~ ** Processing line: ~ outputs.labels << [ 5, 690, "Labels (x, y, text, size, align, r, g, b, a)"]~ ** Processing line: ~ outputs.labels << [ 5, 660, "Smaller label.", -2]~ ** Processing line: ~ outputs.labels << [ 5, 630, "Small label.", -1]~ ** Processing line: ~ outputs.labels << [ 5, 600, "Medium label.", 0]~ ** Processing line: ~ outputs.labels << [ 5, 570, "Large label.", 1]~ ** Processing line: ~ outputs.labels << [ 5, 540, "Larger label.", 2]~ ** Processing line: ~ outputs.labels << [300, 660, "Left aligned.", 0, 2]~ ** Processing line: ~ outputs.labels << [300, 640, "Center aligned.", 0, 1]~ ** Processing line: ~ outputs.labels << [300, 620, "Right aligned.", 0, 0]~ ** Processing line: ~ outputs.labels << [175, 595, "Red Label.", 0, 0, 255, 0, 0]~ ** Processing line: ~ outputs.labels << [175, 575, "Green Label.", 0, 0, 0, 255, 0]~ ** Processing line: ~ outputs.labels << [175, 555, "Blue Label.", 0, 0, 0, 0, 255]~ ** Processing line: ~ outputs.labels << [175, 535, "Faded Label.", 0, 0, 0, 0, 0, 128]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Shows output of lines on the screen~ ** Processing line: ~ def lines_tech_demo~ ** Processing line: ~ outputs.labels << [5, 500, "Lines (x, y, x2, y2, r, g, b, a)"]~ ** Processing line: ~ outputs.lines << [5, 450, 100, 450]~ ** Processing line: ~ outputs.lines << [5, 430, 300, 430]~ ** Processing line: ~ outputs.lines << [5, 410, 300, 410, state.tick_count % 255, 0, 0, 255] # red saturation changes~ ** Processing line: ~ outputs.lines << [5, 390 - state.tick_count % 25, 300, 390, 0, 0, 0, 255] # y position changes~ ** Processing line: ~ outputs.lines << [5 + state.tick_count % 200, 360, 300, 360, 0, 0, 0, 255] # x position changes~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Shows output of different kinds of solids on the screen~ ** Processing line: ~ def solids_tech_demo~ ** Processing line: ~ outputs.labels << [ 5, 350, "Solids (x, y, w, h, r, g, b, a)"]~ ** Processing line: ~ outputs.solids << [ 10, 270, 50, 50]~ ** Processing line: ~ outputs.solids << [ 70, 270, 50, 50, 0, 0, 0]~ ** Processing line: ~ outputs.solids << [130, 270, 50, 50, 255, 0, 0]~ ** Processing line: ~ outputs.solids << [190, 270, 50, 50, 255, 0, 0, 128]~ ** Processing line: ~ outputs.solids << [250, 270, 50, 50, 0, 0, 0, 128 + state.tick_count % 128] # transparency changes~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Shows output of different kinds of borders on the screen~ ** Processing line: ~ # The parameters for a border are the same as the parameters for a solid~ ** Processing line: ~ def borders_tech_demo~ ** Processing line: ~ outputs.labels << [ 5, 260, "Borders (x, y, w, h, r, g, b, a)"]~ ** Processing line: ~ outputs.borders << [ 10, 180, 50, 50]~ ** Processing line: ~ outputs.borders << [ 70, 180, 50, 50, 0, 0, 0]~ ** Processing line: ~ outputs.borders << [130, 180, 50, 50, 255, 0, 0]~ ** Processing line: ~ outputs.borders << [190, 180, 50, 50, 255, 0, 0, 128]~ ** Processing line: ~ outputs.borders << [250, 180, 50, 50, 0, 0, 0, 128 + state.tick_count % 128] # transparency changes~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Shows output of different kinds of sprites on the screen~ ** Processing line: ~ def sprites_tech_demo~ ** Processing line: ~ outputs.labels << [ 5, 170, "Sprites (x, y, w, h, path, angle, a)"]~ ** Processing line: ~ outputs.sprites << [ 10, 40, 128, 101, 'dragonruby.png']~ ** Processing line: ~ outputs.sprites << [ 150, 40, 128, 101, 'dragonruby.png', state.tick_count % 360] # angle changes~ ** Processing line: ~ outputs.sprites << [ 300, 40, 128, 101, 'dragonruby.png', 0, state.tick_count % 255] # transparency changes~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Holds size, alignment, color (black), and alpha (transparency) parameters~ ** Processing line: ~ # Using small_font as a parameter accounts for all remaining parameters~ ** Processing line: ~ # so they don't have to be repeatedly typed~ ** Processing line: ~ def small_font~ ** Processing line: ~ [-2, 0, 0, 0, 0, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets position of each row~ ** Processing line: ~ # Converts given row value to pixels that DragonRuby understands~ ** Processing line: ~ def row_to_px row_number~ ** Processing line: ~~ ** Processing line: ~ # Row 0 starts 5 units below the top of the grid.~ ** Processing line: ~ # Each row afterward is 20 units lower.~ ** Processing line: ~ grid.top.shift_down(5).shift_down(20 * row_number)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Uses labels to output current game time (passage of time), and whether or not "h" was pressed~ ** Processing line: ~ # If "h" is pressed, the frame is output when the key_up event occurred~ ** Processing line: ~ def keyboards_tech_demo~ ** Processing line: ~ outputs.labels << [460, row_to_px(0), "Current game time: #{state.tick_count}", small_font]~ ** Processing line: ~ outputs.labels << [460, row_to_px(2), "Keyboard input: inputs.keyboard.key_up.h", small_font]~ ** Processing line: ~ outputs.labels << [460, row_to_px(3), "Press \"h\" on the keyboard.", small_font]~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.key_up.h # if "h" key_up event occurs~ ** Processing line: ~ state.h_pressed_at = state.tick_count # frame it occurred is stored~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # h_pressed_at is initially set to false, and changes once the user presses the "h" key.~ ** Processing line: ~ state.h_pressed_at ||= false~ ** Processing line: ~~ ** Processing line: ~ if state.h_pressed_at # if h is pressed (pressed_at has a frame number and is no longer false)~ ** Processing line: ~ outputs.labels << [460, row_to_px(4), "\"h\" was pressed at time: #{state.h_pressed_at}", small_font]~ ** Processing line: ~ else # otherwise, label says "h" was never pressed~ ** Processing line: ~ outputs.labels << [460, row_to_px(4), "\"h\" has never been pressed.", small_font]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # border around keyboard input demo section~ ** Processing line: ~ outputs.borders << [455, row_to_px(5), 360, row_to_px(2).shift_up(5) - row_to_px(5)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets definition for a small label~ ** Processing line: ~ # Makes it easier to position labels in respect to the position of other labels~ ** Processing line: ~ def small_label x, row, message~ ** Processing line: ~ [x, row_to_px(row), message, small_font]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Uses small labels to show whether the "a" button on the controller is down, held, or up.~ ** Processing line: ~ # y value of each small label is set by calling the row_to_px method~ ** Processing line: ~ def controller_tech_demo~ ** Processing line: ~ x = 460~ ** Processing line: ~ outputs.labels << small_label(x, 6, "Controller one input: inputs.controller_one")~ ** Processing line: ~ outputs.labels << small_label(x, 7, "Current state of the \"a\" button.")~ ** Processing line: ~ outputs.labels << small_label(x, 8, "Check console window for more info.")~ ** Processing line: ~~ ** Processing line: ~ if inputs.controller_one.key_down.a # if "a" is in "down" state~ ** Processing line: ~ outputs.labels << small_label(x, 9, "\"a\" button down: #{inputs.controller_one.key_down.a}")~ ** Processing line: ~ puts "\"a\" button down at #{inputs.controller_one.key_down.a}" # prints frame the event occurred~ ** Processing line: ~ elsif inputs.controller_one.key_held.a # if "a" is held down~ ** Processing line: ~ outputs.labels << small_label(x, 9, "\"a\" button held: #{inputs.controller_one.key_held.a}")~ ** Processing line: ~ elsif inputs.controller_one.key_up.a # if "a" is in up state~ ** Processing line: ~ outputs.labels << small_label(x, 9, "\"a\" button up: #{inputs.controller_one.key_up.a}")~ ** Processing line: ~ puts "\"a\" key up at #{inputs.controller_one.key_up.a}"~ ** Processing line: ~ else # if no event has occurred~ ** Processing line: ~ outputs.labels << small_label(x, 9, "\"a\" button state is nil.")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # border around controller input demo section~ ** Processing line: ~ outputs.borders << [455, row_to_px(10), 360, row_to_px(6).shift_up(5) - row_to_px(10)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs when the mouse was clicked, as well as the coordinates on the screen~ ** Processing line: ~ # of where the click occurred~ ** Processing line: ~ def mouse_tech_demo~ ** Processing line: ~ x = 460~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << small_label(x, 11, "Mouse input: inputs.mouse")~ ** Processing line: ~~ ** Processing line: ~ if inputs.mouse.click # if click has a value and is not nil~ ** Processing line: ~ state.last_mouse_click = inputs.mouse.click # coordinates of click are stored~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if state.last_mouse_click # if mouse is clicked (has coordinates as value)~ ** Processing line: ~ # outputs the time (frame) the click occurred, as well as how many frames have passed since the event~ ** Processing line: ~ outputs.labels << small_label(x, 12, "Mouse click happened at: #{state.last_mouse_click.created_at}, #{state.last_mouse_click.created_at_elapsed}")~ ** Processing line: ~ # outputs coordinates of click~ ** Processing line: ~ outputs.labels << small_label(x, 13, "Mouse click location: #{state.last_mouse_click.point.x}, #{state.last_mouse_click.point.y}")~ ** Processing line: ~ else # otherwise if the mouse has not been clicked~ ** Processing line: ~ outputs.labels << small_label(x, 12, "Mouse click has not occurred yet.")~ ** Processing line: ~ outputs.labels << small_label(x, 13, "Please click mouse.")~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs whether a mouse click occurred inside or outside of a box~ ** Processing line: ~ def point_to_rect_tech_demo~ ** Processing line: ~ x = 460~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << small_label(x, 15, "Click inside the blue box maybe ---->")~ ** Processing line: ~~ ** Processing line: ~ box = [765, 370, 50, 50, 0, 0, 170] # blue box~ ** Processing line: ~ outputs.borders << box~ ** Processing line: ~~ ** Processing line: ~ if state.last_mouse_click # if the mouse was clicked~ ** Processing line: ~ if state.last_mouse_click.point.inside_rect? box # if mouse clicked inside box~ ** Processing line: ~ outputs.labels << small_label(x, 16, "Mouse click happened inside the box.")~ ** Processing line: ~ else # otherwise, if mouse was clicked outside the box~ ** Processing line: ~ outputs.labels << small_label(x, 16, "Mouse click happened outside the box.")~ ** Processing line: ~ end~ ** Processing line: ~ else # otherwise, if was not clicked at all~ ** Processing line: ~ outputs.labels << small_label(x, 16, "Mouse click has not occurred yet.") # output if the mouse was not clicked~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # border around mouse input demo section~ ** Processing line: ~ outputs.borders << [455, row_to_px(14), 360, row_to_px(11).shift_up(5) - row_to_px(14)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs a red box onto the screen. A mouse click from the user inside of the red box will output~ ** Processing line: ~ # a smaller box. If two small boxes are inside of the red box, it will be determined whether or not~ ** Processing line: ~ # they intersect.~ ** Processing line: ~ def rect_to_rect_tech_demo~ ** Processing line: ~ x = 460~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << small_label(x, 17.5, "Click inside the red box below.") # label with instructions~ ** Processing line: ~ red_box = [460, 250, 355, 90, 170, 0, 0] # definition of the red box~ ** Processing line: ~ outputs.borders << red_box # output as a border (not filled in)~ ** Processing line: ~~ ** Processing line: ~ # If the mouse is clicked inside the red box, two collision boxes are created.~ ** Processing line: ~ if inputs.mouse.click~ ** Processing line: ~ if inputs.mouse.click.point.inside_rect? red_box~ ** Processing line: ~ if !state.box_collision_one # if the collision_one box does not yet have a definition~ ** Processing line: ~ # Subtracts 25 from the x and y positions of the click point in order to make the click point the center of the box.~ ** Processing line: ~ # You can try deleting the subtraction to see how it impacts the box placement.~ ** Processing line: ~ state.box_collision_one = [inputs.mouse.click.point.x - 25, inputs.mouse.click.point.y - 25, 50, 50, 180, 0, 0, 180] # sets definition~ ** Processing line: ~ elsif !state.box_collision_two # if collision_two does not yet have a definition~ ** Processing line: ~ state.box_collision_two = [inputs.mouse.click.point.x - 25, inputs.mouse.click.point.y - 25, 50, 50, 0, 0, 180, 180] # sets definition~ ** Processing line: ~ else~ ** Processing line: ~ state.box_collision_one = nil # both boxes are empty~ ** Processing line: ~ state.box_collision_two = nil~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # If collision boxes exist, they are output onto screen inside the red box as solids~ ** Processing line: ~ if state.box_collision_one~ ** Processing line: ~ outputs.solids << state.box_collision_one~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if state.box_collision_two~ ** Processing line: ~ outputs.solids << state.box_collision_two~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs whether or not the two collision boxes intersect.~ ** Processing line: ~ if state.box_collision_one && state.box_collision_two # if both collision_boxes are defined (and not nil or empty)~ ** Processing line: ~ if state.box_collision_one.intersect_rect? state.box_collision_two # if the two boxes intersect~ ** Processing line: ~ outputs.labels << small_label(x, 23.5, 'The boxes intersect.')~ ** Processing line: ~ else # otherwise, if the two boxes do not intersect~ ** Processing line: ~ outputs.labels << small_label(x, 23.5, 'The boxes do not intersect.')~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ outputs.labels << small_label(x, 23.5, '--') # if the two boxes are not defined (are nil or empty), this label is output~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Creates a button and outputs it onto the screen using labels and borders.~ ** Processing line: ~ # If the button is clicked, the color changes to make it look faded.~ ** Processing line: ~ def button_tech_demo~ ** Processing line: ~ x, y, w, h = 460, 160, 300, 50~ ** Processing line: ~ state.button ||= state.new_entity(:button_with_fade)~ ** Processing line: ~~ ** Processing line: ~ # Adds w.half to x and h.half + 10 to y in order to display the text inside the button's borders.~ ** Processing line: ~ state.button.label ||= [x + w.half, y + h.half + 10, "click me and watch me fade", 0, 1]~ ** Processing line: ~ state.button.border ||= [x, y, w, h]~ ** Processing line: ~~ ** Processing line: ~ if inputs.mouse.click && inputs.mouse.click.point.inside_rect?(state.button.border) # if mouse is clicked, and clicked inside button's border~ ** Processing line: ~ state.button.clicked_at = inputs.mouse.click.created_at # stores the time the click occurred~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << state.button.label~ ** Processing line: ~ outputs.borders << state.button.border~ ** Processing line: ~~ ** Processing line: ~ if state.button.clicked_at # if button was clicked (variable has a value and is not nil)~ ** Processing line: ~~ ** Processing line: ~ # The appearance of the button changes for 0.25 seconds after the time the button is clicked at.~ ** Processing line: ~ # The color changes (rgb is set to 0, 180, 80) and the transparency gradually changes.~ ** Processing line: ~ # Change 0.25 to 1.25 and notice that the transparency takes longer to return to normal.~ ** Processing line: ~ outputs.solids << [x, y, w, h, 0, 180, 80, 255 * state.button.clicked_at.ease(0.25.seconds, :flip)]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Creates a new button by declaring it as a new entity, and sets values.~ ** Processing line: ~ def new_button_prefab x, y, message~ ** Processing line: ~ w, h = 300, 50~ ** Processing line: ~ button = state.new_entity(:button_with_fade)~ ** Processing line: ~ button.label = [x + w.half, y + h.half + 10, message, 0, 1] # '+ 10' keeps label's text within button's borders~ ** Processing line: ~ button.border = [x, y, w, h] # sets border definition~ ** Processing line: ~ button~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # If the mouse has been clicked and the click's location is inside of the button's border, that means~ ** Processing line: ~ # that the button has been clicked. This method returns a boolean value.~ ** Processing line: ~ def button_clicked? button~ ** Processing line: ~ inputs.mouse.click && inputs.mouse.click.point.inside_rect?(button.border)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Determines if button was clicked, and changes its appearance if it is clicked~ ** Processing line: ~ def tick_button_prefab button~ ** Processing line: ~ outputs.labels << button.label # outputs button's label and border~ ** Processing line: ~ outputs.borders << button.border~ ** Processing line: ~~ ** Processing line: ~ if button_clicked? button # if button is clicked~ ** Processing line: ~ button.clicked_at = inputs.mouse.click.created_at # stores the time that the button was clicked~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if button.clicked_at # if clicked_at has a frame value and is not nil~ ** Processing line: ~ # button is output; color changes and transparency changes for 0.25 seconds after click occurs~ ** Processing line: ~ outputs.solids << [button.border.x, button.border.y, button.border.w, button.border.h,~ ** Processing line: ~ 0, 180, 80, 255 * button.clicked_at.ease(0.25.seconds, :flip)] # transparency changes for 0.25 seconds~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Exports the app's game state if the export button is clicked.~ ** Processing line: ~ def export_game_state_demo~ ** Processing line: ~ state.export_game_state_button ||= new_button_prefab(460, 100, "click to export app state")~ ** Processing line: ~ tick_button_prefab(state.export_game_state_button) # calls method to output button~ ** Processing line: ~ if button_clicked? state.export_game_state_button # if the export button is clicked~ ** Processing line: ~ args.gtk.export! "Exported from clicking the export button in the tech demo." # the export occurs~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The mouse and keyboard focus are set to "yes" when the Dragonruby window is the active window.~ ** Processing line: ~ def window_state_demo~ ** Processing line: ~ m = $gtk.args.inputs.mouse.has_focus ? 'Y' : 'N' # ternary operator (similar to if statement)~ ** Processing line: ~ k = $gtk.args.inputs.keyboard.has_focus ? 'Y' : 'N'~ ** Processing line: ~ outputs.labels << [460, 20, "mouse focus: #{m} keyboard focus: #{k}", small_font]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Sets values for the horizontal separator (divides demo sections)~ ** Processing line: ~ def horizontal_seperator y, x, x2~ ** Processing line: ~ [x, y, x2, y, 150, 150, 150]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Sets the values for the vertical separator (divides demo sections)~ ** Processing line: ~ def vertical_seperator x, y, y2~ ** Processing line: ~ [x, y, x, y2, 150, 150, 150]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs vertical and horizontal separators onto the screen to separate each demo section.~ ** Processing line: ~ def render_seperators~ ** Processing line: ~ outputs.lines << horizontal_seperator(505, grid.left, 445)~ ** Processing line: ~ outputs.lines << horizontal_seperator(353, grid.left, 445)~ ** Processing line: ~ outputs.lines << horizontal_seperator(264, grid.left, 445)~ ** Processing line: ~ outputs.lines << horizontal_seperator(174, grid.left, 445)~ ** Processing line: ~~ ** Processing line: ~ outputs.lines << vertical_seperator(445, grid.top, grid.bottom)~ ** Processing line: ~~ ** Processing line: ~ outputs.lines << horizontal_seperator(690, 445, 820)~ ** Processing line: ~ outputs.lines << horizontal_seperator(426, 445, 820)~ ** Processing line: ~~ ** Processing line: ~ outputs.lines << vertical_seperator(820, grid.top, grid.bottom)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $tech_demo = TechDemo.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $tech_demo.inputs = args.inputs~ ** Processing line: ~ $tech_demo.state = args.state~ ** Processing line: ~ $tech_demo.grid = args.grid~ ** Processing line: ~ $tech_demo.args = args~ ** Processing line: ~ $tech_demo.outputs = args.render_target(:mini_map)~ ** Processing line: ~ $tech_demo.tick~ ** Processing line: ~ args.outputs.labels << [830, 715, "Render target:", [-2, 0, 0, 0, 0, 255]]~ ** Processing line: ~ args.outputs.sprites << [0, 0, 1280, 720, :mini_map]~ ** Processing line: ~ args.outputs.sprites << [830, 300, 675, 379, :mini_map]~ ** Processing line: ~ tick_instructions args, "Sample app shows all the rendering apis available."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Rendering - Render Primitive Hierarchies - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Render Primitive Hierarchies - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Render Primitive Hierarchies - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_rendering/04_render_primitive_hierarchies/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - Nested array: An array whose individual elements are also arrays; useful for~ ** Processing line: ~ storing groups of similar data. Also called multidimensional arrays.~ ** Processing line: ~~ ** Processing line: ~ In this sample app, we see nested arrays being used in object definitions.~ ** Processing line: ~ Notice the parameters for solids, listed below. Parameters 1-3 set the~ ** Processing line: ~ definition for the rect, and parameter 4 sets the definition of the color.~ ** Processing line: ~~ ** Processing line: ~ Instead of having a solid definition that looks like this,~ ** Processing line: ~ [X, Y, W, H, R, G, B]~ ** Processing line: ~ we can separate it into two separate array definitions in one, like this~ ** Processing line: ~ [[X, Y, W, H], [R, G, B]]~ ** Processing line: ~ and both options work fine in defining our solid (or any object).~ ** Processing line: ~~ ** Processing line: ~ - Collections: Lists of data; useful for organizing large amounts of data.~ ** Processing line: ~ One element of a collection could be an array (which itself contains many elements).~ ** Processing line: ~ For example, a collection that stores two solid objects would look like this:~ ** Processing line: ~ [~ ** Processing line: ~ [100, 100, 50, 50, 0, 0, 0],~ ** Processing line: ~ [100, 150, 50, 50, 255, 255, 255]~ ** Processing line: ~ ]~ ** Processing line: ~ If this collection was added to args.outputs.solids, two solids would be output~ ** Processing line: ~ next to each other, one black and one white.~ ** Processing line: ~ Nested arrays can be used in collections, as you will see in this sample app.~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.solids: An array. The values generate a solid.~ ** Processing line: ~ The parameters for a solid are~ ** Processing line: ~ 1. The position on the screen (x, y)~ ** Processing line: ~ 2. The width (w)~ ** Processing line: ~ 3. The height (h)~ ** Processing line: ~ 4. The color (r, g, b) (if a color is not assigned, the object's default color will be black)~ ** Processing line: ~ NOTE: THE PARAMETERS ARE THE SAME FOR BORDERS!~ ** Processing line: ~~ ** Processing line: ~ Here is an example of a (red) border or solid definition:~ ** Processing line: ~ [100, 100, 400, 500, 255, 0, 0]~ ** Processing line: ~ It will be a solid or border depending on if it is added to args.outputs.solids or args.outputs.borders.~ ** Processing line: ~ For more information about solids and borders, go to mygame/documentation/03-solids-and-borders.md.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.sprites: An array. The values generate a sprite.~ ** Processing line: ~ The parameters for sprites are~ ** Processing line: ~ 1. The position on the screen (x, y)~ ** Processing line: ~ 2. The width (w)~ ** Processing line: ~ 3. The height (h)~ ** Processing line: ~ 4. The image path (p)~ ** Processing line: ~~ ** Processing line: ~ Here is an example of a sprite definition:~ ** Processing line: ~ [100, 100, 400, 500, 'sprites/dragonruby.png']~ ** Processing line: ~ For more information about sprites, go to mygame/documentation/05-sprites.md.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This code demonstrates the creation and output of objects like sprites, borders, and solids~ ** Processing line: ~ # If filled in, they are solids~ ** Processing line: ~ # If hollow, they are borders~ ** Processing line: ~ # If images, they are sprites~ ** Processing line: ~~ ** Processing line: ~ # Solids are added to args.outputs.solids~ ** Processing line: ~ # Borders are added to args.outputs.borders~ ** Processing line: ~ # Sprites are added to args.outputs.sprites~ ** Processing line: ~~ ** Processing line: ~ # The tick method runs 60 frames every second.~ ** Processing line: ~ # Your game is going to happen under this one function.~ ** Processing line: ~ def tick args~ ** Processing line: ~ border_as_solid_and_solid_as_border args~ ** Processing line: ~ sprite_as_border_or_solids args~ ** Processing line: ~ collection_of_borders_and_solids args~ ** Processing line: ~ collection_of_sprites args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Shows a border being output onto the screen as a border and a solid~ ** Processing line: ~ # Also shows how colors can be set~ ** Processing line: ~ def border_as_solid_and_solid_as_border args~ ** Processing line: ~ border = [0, 0, 50, 50]~ ** Processing line: ~ args.outputs.borders << border~ ** Processing line: ~ args.outputs.solids << border~ ** Processing line: ~~ ** Processing line: ~ # Red, green, blue saturations (last three parameters) can be any number between 0 and 255~ ** Processing line: ~ border_with_color = [0, 100, 50, 50, 255, 0, 0]~ ** Processing line: ~ args.outputs.borders << border_with_color~ ** Processing line: ~ args.outputs.solids << border_with_color~ ** Processing line: ~~ ** Processing line: ~ border_with_nested_color = [0, 200, 50, 50, [0, 255, 0]] # nested color~ ** Processing line: ~ args.outputs.borders << border_with_nested_color~ ** Processing line: ~ args.outputs.solids << border_with_nested_color~ ** Processing line: ~~ ** Processing line: ~ border_with_nested_rect = [[0, 300, 50, 50], 0, 0, 255] # nested rect~ ** Processing line: ~ args.outputs.borders << border_with_nested_rect~ ** Processing line: ~ args.outputs.solids << border_with_nested_rect~ ** Processing line: ~~ ** Processing line: ~ border_with_nested_color_and_rect = [[0, 400, 50, 50], [255, 0, 255]] # nested rect and color~ ** Processing line: ~ args.outputs.borders << border_with_nested_color_and_rect~ ** Processing line: ~ args.outputs.solids << border_with_nested_color_and_rect~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Shows a sprite output onto the screen as a sprite, border, and solid~ ** Processing line: ~ # Demonstrates that all three outputs appear differently on screen~ ** Processing line: ~ def sprite_as_border_or_solids args~ ** Processing line: ~ sprite = [100, 0, 50, 50, 'sprites/ship.png']~ ** Processing line: ~ args.outputs.sprites << sprite~ ** Processing line: ~~ ** Processing line: ~ # Sprite_as_border variable has same parameters (excluding position) as above object,~ ** Processing line: ~ # but will appear differently on screen because it is added to args.outputs.borders~ ** Processing line: ~ sprite_as_border = [100, 100, 50, 50, 'sprites/ship.png']~ ** Processing line: ~ args.outputs.borders << sprite_as_border~ ** Processing line: ~~ ** Processing line: ~ # Sprite_as_solid variable has same parameters (excluding position) as above object,~ ** Processing line: ~ # but will appear differently on screen because it is added to args.outputs.solids~ ** Processing line: ~ sprite_as_solid = [100, 200, 50, 50, 'sprites/ship.png']~ ** Processing line: ~ args.outputs.solids << sprite_as_solid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Holds and outputs a collection of borders and a collection of solids~ ** Processing line: ~ # Collections are created by using arrays to hold parameters of each individual object~ ** Processing line: ~ def collection_of_borders_and_solids args~ ** Processing line: ~ collection_borders = [~ ** Processing line: ~ [~ ** Processing line: ~ [200, 0, 50, 50], # black border~ ** Processing line: ~ [200, 100, 50, 50, 255, 0, 0], # red border~ ** Processing line: ~ [200, 200, 50, 50, [0, 255, 0]], # nested color~ ** Processing line: ~ ],~ ** Processing line: ~ [[200, 300, 50, 50], 0, 0, 255], # nested rect~ ** Processing line: ~ [[200, 400, 50, 50], [255, 0, 255]] # nested rect and nested color~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ args.outputs.borders << collection_borders~ ** Processing line: ~~ ** Processing line: ~ collection_solids = [~ ** Processing line: ~ [~ ** Processing line: ~ [[300, 300, 50, 50], 0, 0, 255], # nested rect~ ** Processing line: ~ [[300, 400, 50, 50], [255, 0, 255]] # nested rect and nested color~ ** Processing line: ~ ],~ ** Processing line: ~ [300, 0, 50, 50],~ ** Processing line: ~ [300, 100, 50, 50, 255, 0, 0],~ ** Processing line: ~ [300, 200, 50, 50, [0, 255, 0]], # nested color~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ args.outputs.solids << collection_solids~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Holds and outputs a collection of sprites by adding it to args.outputs.sprites~ ** Processing line: ~ # Also outputs a collection with same parameters (excluding position) by adding~ ** Processing line: ~ # it to args.outputs.solids and another to args.outputs.borders~ ** Processing line: ~ def collection_of_sprites args~ ** Processing line: ~ sprites_collection = [~ ** Processing line: ~ [~ ** Processing line: ~ [400, 0, 50, 50, 'sprites/ship.png'],~ ** Processing line: ~ [400, 100, 50, 50, 'sprites/ship.png'],~ ** Processing line: ~ ],~ ** Processing line: ~ [400, 200, 50, 50, 'sprites/ship.png']~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ args.outputs.sprites << sprites_collection~ ** Processing line: ~~ ** Processing line: ~ args.outputs.solids << [~ ** Processing line: ~ [500, 0, 50, 50, 'sprites/ship.png'],~ ** Processing line: ~ [500, 100, 50, 50, 'sprites/ship.png'],~ ** Processing line: ~ [[[500, 200, 50, 50, 'sprites/ship.png']]]~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ args.outputs.borders << [~ ** Processing line: ~ [~ ** Processing line: ~ [600, 0, 50, 50, 'sprites/ship.png'],~ ** Processing line: ~ [600, 100, 50, 50, 'sprites/ship.png'],~ ** Processing line: ~ ],~ ** Processing line: ~ [600, 200, 50, 50, 'sprites/ship.png']~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Rendering - Render Primitives As Hash - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Render Primitives As Hash - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Render Primitives As Hash - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_rendering/05_render_primitives_as_hash/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - Hashes: Collection of unique keys and their corresponding values. The value can be found~ ** Processing line: ~ using their keys.~ ** Processing line: ~~ ** Processing line: ~ For example, if we have a "numbers" hash that stores numbers in English as the~ ** Processing line: ~ key and numbers in Spanish as the value, we'd have a hash that looks like this...~ ** Processing line: ~ numbers = { "one" => "uno", "two" => "dos", "three" => "tres" }~ ** Processing line: ~ and on it goes.~ ** Processing line: ~~ ** Processing line: ~ Now if we wanted to find the corresponding value of the "one" key, we could say~ ** Processing line: ~ puts numbers["one"]~ ** Processing line: ~ which would print "uno" to the console.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.sprites: An array. The values generate a sprite.~ ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, PATH, ANGLE, ALPHA, RED, GREEN, BLUE]~ ** Processing line: ~ For more information about sprites, go to mygame/documentation/05-sprites.md.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.solids: An array. The values generate a solid.~ ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE, ALPHA]~ ** Processing line: ~ For more information about solids, go to mygame/documentation/03-solids-and-borders.md.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.borders: An array. The values generate a border.~ ** Processing line: ~ The parameters are the same as a solid.~ ** Processing line: ~ For more information about borders, go to mygame/documentation/03-solids-and-borders.md.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.lines: An array. The values generate a line.~ ** Processing line: ~ The parameters are [X1, Y1, X2, Y2, RED, GREEN, BLUE]~ ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app demonstrates how hashes can be used to output different kinds of objects.~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.angle ||= 0 # initializes angle to 0~ ** Processing line: ~ args.state.angle += 1 # increments angle by 1 every frame (60 times a second)~ ** Processing line: ~~ ** Processing line: ~ # Outputs sprite using a hash~ ** Processing line: ~ args.outputs.sprites << {~ ** Processing line: ~ x: 30, # sprite position~ ** Processing line: ~ y: 550,~ ** Processing line: ~ w: 128, # sprite size~ ** Processing line: ~ h: 101,~ ** Processing line: ~ path: "dragonruby.png", # image path~ ** Processing line: ~ angle: args.state.angle, # angle~ ** Processing line: ~ a: 255, # alpha (transparency)~ ** Processing line: ~ r: 255, # color saturation~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 255,~ ** Processing line: ~ tile_x: 0, # sprite sub division/tile~ ** Processing line: ~ tile_y: 0,~ ** Processing line: ~ tile_w: -1,~ ** Processing line: ~ tile_h: -1,~ ** Processing line: ~ flip_vertically: false, # don't flip sprite~ ** Processing line: ~ flip_horizontally: false,~ ** Processing line: ~ angle_anchor_x: 0.5, # rotation center set to middle~ ** Processing line: ~ angle_anchor_y: 0.5~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ # Outputs label using a hash~ ** Processing line: ~ args.outputs.labels << {~ ** Processing line: ~ x: 200, # label position~ ** Processing line: ~ y: 550,~ ** Processing line: ~ text: "dragonruby", # label text~ ** Processing line: ~ size_enum: 2,~ ** Processing line: ~ alignment_enum: 1,~ ** Processing line: ~ r: 155, # color saturation~ ** Processing line: ~ g: 50,~ ** Processing line: ~ b: 50,~ ** Processing line: ~ a: 255, # transparency~ ** Processing line: ~ font: "fonts/manaspc.ttf" # font style; without mentioned file, label won't output correctly~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ # Outputs solid using a hash~ ** Processing line: ~ # [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE, ALPHA]~ ** Processing line: ~ args.outputs.solids << {~ ** Processing line: ~ x: 400, # position~ ** Processing line: ~ y: 550,~ ** Processing line: ~ w: 160, # size~ ** Processing line: ~ h: 90,~ ** Processing line: ~ r: 120, # color saturation~ ** Processing line: ~ g: 50,~ ** Processing line: ~ b: 50,~ ** Processing line: ~ a: 255 # transparency~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ # Outputs border using a hash~ ** Processing line: ~ # Same parameters as a solid~ ** Processing line: ~ args.outputs.borders << {~ ** Processing line: ~ x: 600,~ ** Processing line: ~ y: 550,~ ** Processing line: ~ w: 160,~ ** Processing line: ~ h: 90,~ ** Processing line: ~ r: 120,~ ** Processing line: ~ g: 50,~ ** Processing line: ~ b: 50,~ ** Processing line: ~ a: 255~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ # Outputs line using a hash~ ** Processing line: ~ args.outputs.lines << {~ ** Processing line: ~ x: 900, # starting position~ ** Processing line: ~ y: 550,~ ** Processing line: ~ x2: 1200, # ending position~ ** Processing line: ~ y2: 550,~ ** Processing line: ~ r: 120, # color saturation~ ** Processing line: ~ g: 50,~ ** Processing line: ~ b: 50,~ ** Processing line: ~ a: 255 # transparency~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ # Outputs sprite as a primitive using a hash~ ** Processing line: ~ args.outputs.primitives << {~ ** Processing line: ~ x: 30, # position~ ** Processing line: ~ y: 200,~ ** Processing line: ~ w: 128, # size~ ** Processing line: ~ h: 101,~ ** Processing line: ~ path: "dragonruby.png", # image path~ ** Processing line: ~ angle: args.state.angle, # angle~ ** Processing line: ~ a: 255, # transparency~ ** Processing line: ~ r: 255, # color saturation~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 255,~ ** Processing line: ~ tile_x: 0, # sprite sub division/tile~ ** Processing line: ~ tile_y: 0,~ ** Processing line: ~ tile_w: -1,~ ** Processing line: ~ tile_h: -1,~ ** Processing line: ~ flip_vertically: false, # don't flip~ ** Processing line: ~ flip_horizontally: false,~ ** Processing line: ~ angle_anchor_x: 0.5, # rotation center set to middle~ ** Processing line: ~ angle_anchor_y: 0.5~ ** Processing line: ~ }.sprite!~ ** Processing line: ~~ ** Processing line: ~ # Outputs label as primitive using a hash~ ** Processing line: ~ args.outputs.primitives << {~ ** Processing line: ~ x: 200, # position~ ** Processing line: ~ y: 200,~ ** Processing line: ~ text: "dragonruby", # text~ ** Processing line: ~ size: 2,~ ** Processing line: ~ alignment: 1,~ ** Processing line: ~ r: 155, # color saturation~ ** Processing line: ~ g: 50,~ ** Processing line: ~ b: 50,~ ** Processing line: ~ a: 255, # transparency~ ** Processing line: ~ font: "fonts/manaspc.ttf" # font style~ ** Processing line: ~ }.label!~ ** Processing line: ~~ ** Processing line: ~ # Outputs solid as primitive using a hash~ ** Processing line: ~ args.outputs.primitives << {~ ** Processing line: ~ x: 400, # position~ ** Processing line: ~ y: 200,~ ** Processing line: ~ w: 160, # size~ ** Processing line: ~ h: 90,~ ** Processing line: ~ r: 120, # color saturation~ ** Processing line: ~ g: 50,~ ** Processing line: ~ b: 50,~ ** Processing line: ~ a: 255 # transparency~ ** Processing line: ~ }.solid!~ ** Processing line: ~~ ** Processing line: ~ # Outputs border as primitive using a hash~ ** Processing line: ~ # Same parameters as solid~ ** Processing line: ~ args.outputs.primitives << {~ ** Processing line: ~ x: 600, # position~ ** Processing line: ~ y: 200,~ ** Processing line: ~ w: 160, # size~ ** Processing line: ~ h: 90,~ ** Processing line: ~ r: 120, # color saturation~ ** Processing line: ~ g: 50,~ ** Processing line: ~ b: 50,~ ** Processing line: ~ a: 255 # transparency~ ** Processing line: ~ }.border!~ ** Processing line: ~~ ** Processing line: ~ # Outputs line as primitive using a hash~ ** Processing line: ~ args.outputs.primitives << {~ ** Processing line: ~ x: 900, # starting position~ ** Processing line: ~ y: 200,~ ** Processing line: ~ x2: 1200, # ending position~ ** Processing line: ~ y2: 200,~ ** Processing line: ~ r: 120, # color saturation~ ** Processing line: ~ g: 50,~ ** Processing line: ~ b: 50,~ ** Processing line: ~ a: 255 # transparency~ ** Processing line: ~ }.line!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Rendering - Pixel Arrays - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Pixel Arrays - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Pixel Arrays - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_rendering/06_pixel_arrays/app/main.rb~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.posinc ||= 1~ ** Processing line: ~ args.state.pos ||= 0~ ** Processing line: ~ args.state.rotation ||= 0~ ** Processing line: ~~ ** Processing line: ~ dimension = 10 # keep it small and let the GPU scale it when rendering the sprite.~ ** Processing line: ~~ ** Processing line: ~ # Set up our "scanner" pixel array and fill it with black pixels.~ ** Processing line: ~ args.pixel_array(:scanner).width = dimension~ ** Processing line: ~ args.pixel_array(:scanner).height = dimension~ ** Processing line: ~ args.pixel_array(:scanner).pixels.fill(0xFF000000, 0, dimension * dimension) # black, full alpha~ ** Processing line: ~~ ** Processing line: ~ # Draw a green line that bounces up and down the sprite.~ ** Processing line: ~ args.pixel_array(:scanner).pixels.fill(0xFF00FF00, dimension * args.state.pos, dimension) # green, full alpha~ ** Processing line: ~~ ** Processing line: ~ # Adjust position for next frame.~ ** Processing line: ~ args.state.pos += args.state.posinc~ ** Processing line: ~ if args.state.posinc > 0 && args.state.pos >= dimension~ ** Processing line: ~ args.state.posinc = -1~ ** Processing line: ~ args.state.pos = dimension - 1~ ** Processing line: ~ elsif args.state.posinc < 0 && args.state.pos < 0~ ** Processing line: ~ args.state.posinc = 1~ ** Processing line: ~ args.state.pos = 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # New/changed pixel arrays get uploaded to the GPU before we render~ ** Processing line: ~ # anything. At that point, they can be scaled, rotated, and otherwise~ ** Processing line: ~ # used like any other sprite.~ ** Processing line: ~ w = 100~ ** Processing line: ~ h = 100~ ** Processing line: ~ x = (1280 - w) / 2~ ** Processing line: ~ y = (720 - h) / 2~ ** Processing line: ~ args.outputs.background_color = [64, 0, 128]~ ** Processing line: ~ args.outputs.primitives << [x, y, w, h, :scanner, args.state.rotation].sprite~ ** Processing line: ~ args.state.rotation += 1~ ** Processing line: ~~ ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Rendering - Simple Camera - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Simple Camera - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Simple Camera - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_rendering/07_simple_camera/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ # variables you can play around with~ ** Processing line: ~ args.state.world.w ||= 1280~ ** Processing line: ~ args.state.world.h ||= 720~ ** Processing line: ~~ ** Processing line: ~ args.state.player.x ||= 0~ ** Processing line: ~ args.state.player.y ||= 0~ ** Processing line: ~ args.state.player.size ||= 32~ ** Processing line: ~~ ** Processing line: ~ args.state.enemy.x ||= 700~ ** Processing line: ~ args.state.enemy.y ||= 700~ ** Processing line: ~ args.state.enemy.size ||= 16~ ** Processing line: ~~ ** Processing line: ~ args.state.camera.x ||= 640~ ** Processing line: ~ args.state.camera.y ||= 300~ ** Processing line: ~ args.state.camera.scale ||= 1.0~ ** Processing line: ~ args.state.camera.show_empty_space ||= :yes~ ** Processing line: ~~ ** Processing line: ~ # instructions~ ** Processing line: ~ args.outputs.primitives << { x: 0, y: 80.from_top, w: 360, h: 80, r: 0, g: 0, b: 0, a: 128 }.solid!~ ** Processing line: ~ args.outputs.primitives << { x: 10, y: 10.from_top, text: "arrow keys to move around", r: 255, g: 255, b: 255}.label!~ ** Processing line: ~ args.outputs.primitives << { x: 10, y: 30.from_top, text: "+/- to change zoom of camera", r: 255, g: 255, b: 255}.label!~ ** Processing line: ~ args.outputs.primitives << { x: 10, y: 50.from_top, text: "tab to change camera edge behavior", r: 255, g: 255, b: 255}.label!~ ** Processing line: ~~ ** Processing line: ~ # render scene~ ** Processing line: ~ args.outputs[:scene].w = args.state.world.w~ ** Processing line: ~ args.outputs[:scene].h = args.state.world.h~ ** Processing line: ~~ ** Processing line: ~ args.outputs[:scene].solids << { x: 0, y: 0, w: args.state.world.w, h: args.state.world.h, r: 20, g: 60, b: 80 }~ ** Processing line: ~ args.outputs[:scene].solids << { x: args.state.player.x, y: args.state.player.y,~ ** Processing line: ~ w: args.state.player.size, h: args.state.player.size, r: 80, g: 155, b: 80 }~ ** Processing line: ~ args.outputs[:scene].solids << { x: args.state.enemy.x, y: args.state.enemy.y,~ ** Processing line: ~ w: args.state.enemy.size, h: args.state.enemy.size, r: 155, g: 80, b: 80 }~ ** Processing line: ~~ ** Processing line: ~ # render camera~ ** Processing line: ~ scene_position = calc_scene_position args~ ** Processing line: ~ args.outputs.sprites << { x: scene_position.x,~ ** Processing line: ~ y: scene_position.y,~ ** Processing line: ~ w: scene_position.w,~ ** Processing line: ~ h: scene_position.h,~ ** Processing line: ~ path: :scene }~ ** Processing line: ~~ ** Processing line: ~ # move player~ ** Processing line: ~ if args.inputs.directional_angle~ ** Processing line: ~ args.state.player.x += args.inputs.directional_angle.vector_x * 5~ ** Processing line: ~ args.state.player.y += args.inputs.directional_angle.vector_y * 5~ ** Processing line: ~ args.state.player.x = args.state.player.x.clamp(0, args.state.world.w - args.state.player.size)~ ** Processing line: ~ args.state.player.y = args.state.player.y.clamp(0, args.state.world.h - args.state.player.size)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # +/- to zoom in and out~ ** Processing line: ~ if args.inputs.keyboard.plus && args.state.tick_count.zmod?(3)~ ** Processing line: ~ args.state.camera.scale += 0.05~ ** Processing line: ~ elsif args.inputs.keyboard.hyphen && args.state.tick_count.zmod?(3)~ ** Processing line: ~ args.state.camera.scale -= 0.05~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.tab~ ** Processing line: ~ if args.state.camera.show_empty_space == :yes~ ** Processing line: ~ args.state.camera.show_empty_space = :no~ ** Processing line: ~ else~ ** Processing line: ~ args.state.camera.show_empty_space = :yes~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.camera.scale = args.state.camera.scale.greater(0.1)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_scene_position args~ ** Processing line: ~ result = { x: args.state.camera.x - (args.state.player.x * args.state.camera.scale),~ ** Processing line: ~ y: args.state.camera.y - (args.state.player.y * args.state.camera.scale),~ ** Processing line: ~ w: args.state.world.w * args.state.camera.scale,~ ** Processing line: ~ h: args.state.world.h * args.state.camera.scale,~ ** Processing line: ~ scale: args.state.camera.scale }~ ** Processing line: ~~ ** Processing line: ~ return result if args.state.camera.show_empty_space == :yes~ ** Processing line: ~~ ** Processing line: ~ if result.w < args.grid.w~ ** Processing line: ~ result.merge!(x: (args.grid.w - result.w).half)~ ** Processing line: ~ elsif (args.state.player.x * result.scale) < args.grid.w.half~ ** Processing line: ~ result.merge!(x: 10)~ ** Processing line: ~ elsif (result.x + result.w) < args.grid.w~ ** Processing line: ~ result.merge!(x: - result.w + (args.grid.w - 10))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if result.h < args.grid.h~ ** Processing line: ~ result.merge!(y: (args.grid.h - result.h).half)~ ** Processing line: ~ elsif (result.y) > 10~ ** Processing line: ~ result.merge!(y: 10)~ ** Processing line: ~ elsif (result.y + result.h) < args.grid.h~ ** Processing line: ~ result.merge!(y: - result.h + (args.grid.h - 10))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ result~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Rendering - Splitscreen Camera - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Splitscreen Camera - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Splitscreen Camera - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_rendering/08_splitscreen_camera/app/main.rb~ ** Processing line: ~ class CameraMovement~ ** Processing line: ~ attr_accessor :state, :inputs, :outputs, :grid~ ** Processing line: ~~ ** Processing line: ~ #==============================================================================================~ ** Processing line: ~ #Serialize~ ** Processing line: ~ def serialize~ ** Processing line: ~ {state: state, inputs: inputs, outputs: outputs, grid: grid }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inspect~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #==============================================================================================~ ** Processing line: ~ #Tick~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ calc~ ** Processing line: ~ render~ ** Processing line: ~ input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #==============================================================================================~ ** Processing line: ~ #Default functions~ ** Processing line: ~ def defaults~ ** Processing line: ~ outputs[:scene].background_color = [0,0,0]~ ** Processing line: ~ state.trauma ||= 0.0~ ** Processing line: ~ state.trauma_power ||= 2~ ** Processing line: ~ state.player_cyan ||= new_player_cyan~ ** Processing line: ~ state.player_magenta ||= new_player_magenta~ ** Processing line: ~ state.camera_magenta ||= new_camera_magenta~ ** Processing line: ~ state.camera_cyan ||= new_camera_cyan~ ** Processing line: ~ state.camera_center ||= new_camera_center~ ** Processing line: ~ state.room ||= new_room~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def default_player x, y, w, h, sprite_path~ ** Processing line: ~ state.new_entity(:player,~ ** Processing line: ~ { x: x,~ ** Processing line: ~ y: y,~ ** Processing line: ~ dy: 0,~ ** Processing line: ~ dx: 0,~ ** Processing line: ~ w: w,~ ** Processing line: ~ h: h,~ ** Processing line: ~ damage: 0,~ ** Processing line: ~ dead: false,~ ** Processing line: ~ orientation: "down",~ ** Processing line: ~ max_alpha: 255,~ ** Processing line: ~ sprite_path: sprite_path})~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def default_floor_tile x, y, w, h, sprite_path~ ** Processing line: ~ state.new_entity(:room,~ ** Processing line: ~ { x: x,~ ** Processing line: ~ y: y,~ ** Processing line: ~ w: w,~ ** Processing line: ~ h: h,~ ** Processing line: ~ sprite_path: sprite_path})~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def default_camera x, y, w, h~ ** Processing line: ~ state.new_entity(:camera,~ ** Processing line: ~ { x: x,~ ** Processing line: ~ y: y,~ ** Processing line: ~ dx: 0,~ ** Processing line: ~ dy: 0,~ ** Processing line: ~ w: w,~ ** Processing line: ~ h: h})~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_player_cyan~ ** Processing line: ~ default_player(0, 0, 64, 64,~ ** Processing line: ~ "sprites/player/player_#{state.player_cyan.orientation}_standing.png")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_player_magenta~ ** Processing line: ~ default_player(64, 0, 64, 64,~ ** Processing line: ~ "sprites/player/player_#{state.player_magenta.orientation}_standing.png")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_camera_magenta~ ** Processing line: ~ default_camera(0,0,720,720)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_camera_cyan~ ** Processing line: ~ default_camera(0,0,720,720)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_camera_center~ ** Processing line: ~ default_camera(0,0,1280,720)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def new_room~ ** Processing line: ~ default_floor_tile(0,0,1024,1024,'sprites/rooms/camera_room.png')~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #==============================================================================================~ ** Processing line: ~ #Calculation functions~ ** Processing line: ~ def calc~ ** Processing line: ~ calc_camera_magenta~ ** Processing line: ~ calc_camera_cyan~ ** Processing line: ~ calc_camera_center~ ** Processing line: ~ calc_player_cyan~ ** Processing line: ~ calc_player_magenta~ ** Processing line: ~ calc_trauma_decay~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def center_camera_tolerance~ ** Processing line: ~ return Math.sqrt(((state.player_magenta.x - state.player_cyan.x) ** 2) +~ ** Processing line: ~ ((state.player_magenta.y - state.player_cyan.y) ** 2)) > 640~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_player_cyan~ ** Processing line: ~ state.player_cyan.x += state.player_cyan.dx~ ** Processing line: ~ state.player_cyan.y += state.player_cyan.dy~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_player_magenta~ ** Processing line: ~ state.player_magenta.x += state.player_magenta.dx~ ** Processing line: ~ state.player_magenta.y += state.player_magenta.dy~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_camera_center~ ** Processing line: ~ timeScale = 1~ ** Processing line: ~ midX = (state.player_magenta.x + state.player_cyan.x)/2~ ** Processing line: ~ midY = (state.player_magenta.y + state.player_cyan.y)/2~ ** Processing line: ~ targetX = midX - state.camera_center.w/2~ ** Processing line: ~ targetY = midY - state.camera_center.h/2~ ** Processing line: ~ state.camera_center.x += (targetX - state.camera_center.x) * 0.1 * timeScale~ ** Processing line: ~ state.camera_center.y += (targetY - state.camera_center.y) * 0.1 * timeScale~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def calc_camera_magenta~ ** Processing line: ~ timeScale = 1~ ** Processing line: ~ targetX = state.player_magenta.x + state.player_magenta.w - state.camera_magenta.w/2~ ** Processing line: ~ targetY = state.player_magenta.y + state.player_magenta.h - state.camera_magenta.h/2~ ** Processing line: ~ state.camera_magenta.x += (targetX - state.camera_magenta.x) * 0.1 * timeScale~ ** Processing line: ~ state.camera_magenta.y += (targetY - state.camera_magenta.y) * 0.1 * timeScale~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_camera_cyan~ ** Processing line: ~ timeScale = 1~ ** Processing line: ~ targetX = state.player_cyan.x + state.player_cyan.w - state.camera_cyan.w/2~ ** Processing line: ~ targetY = state.player_cyan.y + state.player_cyan.h - state.camera_cyan.h/2~ ** Processing line: ~ state.camera_cyan.x += (targetX - state.camera_cyan.x) * 0.1 * timeScale~ ** Processing line: ~ state.camera_cyan.y += (targetY - state.camera_cyan.y) * 0.1 * timeScale~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_player_quadrant angle~ ** Processing line: ~ if angle < 45 and angle > -45 and state.player_cyan.x < state.player_magenta.x~ ** Processing line: ~ return 1~ ** Processing line: ~ elsif angle < 45 and angle > -45 and state.player_cyan.x > state.player_magenta.x~ ** Processing line: ~ return 3~ ** Processing line: ~ elsif (angle > 45 or angle < -45) and state.player_cyan.y < state.player_magenta.y~ ** Processing line: ~ return 2~ ** Processing line: ~ elsif (angle > 45 or angle < -45) and state.player_cyan.y > state.player_magenta.y~ ** Processing line: ~ return 4~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_camera_shake~ ** Processing line: ~ state.trauma~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_trauma_decay~ ** Processing line: ~ state.trauma = state.trauma * 0.9~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_random_float_range(min, max)~ ** Processing line: ~ rand * (max-min) + min~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #==============================================================================================~ ** Processing line: ~ #Render Functions~ ** Processing line: ~ def render~ ** Processing line: ~ render_floor~ ** Processing line: ~ render_player_cyan~ ** Processing line: ~ render_player_magenta~ ** Processing line: ~ if center_camera_tolerance~ ** Processing line: ~ render_split_camera_scene~ ** Processing line: ~ else~ ** Processing line: ~ render_camera_center_scene~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_player_cyan~ ** Processing line: ~ outputs[:scene].sprites << {x: state.player_cyan.x,~ ** Processing line: ~ y: state.player_cyan.y,~ ** Processing line: ~ w: state.player_cyan.w,~ ** Processing line: ~ h: state.player_cyan.h,~ ** Processing line: ~ path: "sprites/player/player_#{state.player_cyan.orientation}_standing.png",~ ** Processing line: ~ r: 0,~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 255}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_player_magenta~ ** Processing line: ~ outputs[:scene].sprites << {x: state.player_magenta.x,~ ** Processing line: ~ y: state.player_magenta.y,~ ** Processing line: ~ w: state.player_magenta.w,~ ** Processing line: ~ h: state.player_magenta.h,~ ** Processing line: ~ path: "sprites/player/player_#{state.player_magenta.orientation}_standing.png",~ ** Processing line: ~ r: 255,~ ** Processing line: ~ g: 0,~ ** Processing line: ~ b: 255}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_floor~ ** Processing line: ~ outputs[:scene].sprites << [state.room.x, state.room.y,~ ** Processing line: ~ state.room.w, state.room.h,~ ** Processing line: ~ state.room.sprite_path]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_camera_center_scene~ ** Processing line: ~ zoomFactor = 1~ ** Processing line: ~ outputs[:scene].width = state.room.w~ ** Processing line: ~ outputs[:scene].height = state.room.h~ ** Processing line: ~~ ** Processing line: ~ maxAngle = 10.0~ ** Processing line: ~ maxOffset = 20.0~ ** Processing line: ~ angle = maxAngle * calc_camera_shake * calc_random_float_range(-1,1)~ ** Processing line: ~ offsetX = 32 - (maxOffset * calc_camera_shake * calc_random_float_range(-1,1))~ ** Processing line: ~ offsetY = 32 - (maxOffset * calc_camera_shake * calc_random_float_range(-1,1))~ ** Processing line: ~~ ** Processing line: ~ outputs.sprites << {x: (-state.camera_center.x - offsetX)/zoomFactor,~ ** Processing line: ~ y: (-state.camera_center.y - offsetY)/zoomFactor,~ ** Processing line: ~ w: outputs[:scene].width/zoomFactor,~ ** Processing line: ~ h: outputs[:scene].height/zoomFactor,~ ** Processing line: ~ path: :scene,~ ** Processing line: ~ angle: angle,~ ** Processing line: ~ source_w: -1,~ ** Processing line: ~ source_h: -1}~ ** Processing line: ~ outputs.labels << [128,64,"#{state.trauma.round(1)}",8,2,255,0,255,255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_split_camera_scene~ ** Processing line: ~ outputs[:scene].width = state.room.w~ ** Processing line: ~ outputs[:scene].height = state.room.h~ ** Processing line: ~ render_camera_magenta_scene~ ** Processing line: ~ render_camera_cyan_scene~ ** Processing line: ~~ ** Processing line: ~ angle = Math.atan((state.player_magenta.y - state.player_cyan.y)/(state.player_magenta.x- state.player_cyan.x)) * 180/Math::PI~ ** Processing line: ~ output_split_camera angle~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_camera_magenta_scene~ ** Processing line: ~ zoomFactor = 1~ ** Processing line: ~ offsetX = 32~ ** Processing line: ~ offsetY = 32~ ** Processing line: ~~ ** Processing line: ~ outputs[:scene_magenta].sprites << {x: (-state.camera_magenta.x*2),~ ** Processing line: ~ y: (-state.camera_magenta.y),~ ** Processing line: ~ w: outputs[:scene].width*2,~ ** Processing line: ~ h: outputs[:scene].height,~ ** Processing line: ~ path: :scene}~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_camera_cyan_scene~ ** Processing line: ~ zoomFactor = 1~ ** Processing line: ~ offsetX = 32~ ** Processing line: ~ offsetY = 32~ ** Processing line: ~ outputs[:scene_cyan].sprites << {x: (-state.camera_cyan.x*2),~ ** Processing line: ~ y: (-state.camera_cyan.y),~ ** Processing line: ~ w: outputs[:scene].width*2,~ ** Processing line: ~ h: outputs[:scene].height,~ ** Processing line: ~ path: :scene}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def output_split_camera angle~ ** Processing line: ~ #TODO: Clean this up!~ ** Processing line: ~ quadrant = calc_player_quadrant angle~ ** Processing line: ~ outputs.labels << [128,64,"#{quadrant}",8,2,255,0,255,255]~ ** Processing line: ~ if quadrant == 1~ ** Processing line: ~ set_camera_attributes(w: 640, h: 720, m_x: 640, m_y: 0, c_x: 0, c_y: 0)~ ** Processing line: ~~ ** Processing line: ~ elsif quadrant == 2~ ** Processing line: ~ set_camera_attributes(w: 1280, h: 360, m_x: 0, m_y: 360, c_x: 0, c_y: 0)~ ** Processing line: ~~ ** Processing line: ~ elsif quadrant == 3~ ** Processing line: ~ set_camera_attributes(w: 640, h: 720, m_x: 0, m_y: 0, c_x: 640, c_y: 0)~ ** Processing line: ~~ ** Processing line: ~ elsif quadrant == 4~ ** Processing line: ~ set_camera_attributes(w: 1280, h: 360, m_x: 0, m_y: 0, c_x: 0, c_y: 360)~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_camera_attributes(w: 0, h: 0, m_x: 0, m_y: 0, c_x: 0, c_y: 0)~ ** Processing line: ~ state.camera_cyan.w = w + 64~ ** Processing line: ~ state.camera_cyan.h = h + 64~ ** Processing line: ~ outputs[:scene_cyan].width = (w) * 2~ ** Processing line: ~ outputs[:scene_cyan].height = h~ ** Processing line: ~~ ** Processing line: ~ state.camera_magenta.w = w + 64~ ** Processing line: ~ state.camera_magenta.h = h + 64~ ** Processing line: ~ outputs[:scene_magenta].width = (w) * 2~ ** Processing line: ~ outputs[:scene_magenta].height = h~ ** Processing line: ~ outputs.sprites << {x: m_x,~ ** Processing line: ~ y: m_y,~ ** Processing line: ~ w: w,~ ** Processing line: ~ h: h,~ ** Processing line: ~ path: :scene_magenta}~ ** Processing line: ~ outputs.sprites << {x: c_x,~ ** Processing line: ~ y: c_y,~ ** Processing line: ~ w: w,~ ** Processing line: ~ h: h,~ ** Processing line: ~ path: :scene_cyan}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def add_trauma amount~ ** Processing line: ~ state.trauma = [state.trauma + amount, 1.0].min~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def remove_trauma amount~ ** Processing line: ~ state.trauma = [state.trauma - amount, 0.0].max~ ** Processing line: ~ end~ ** Processing line: ~ #==============================================================================================~ ** Processing line: ~ #Input functions~ ** Processing line: ~ def input~ ** Processing line: ~ input_move_cyan~ ** Processing line: ~ input_move_magenta~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.key_down.t~ ** Processing line: ~ add_trauma(0.5)~ ** Processing line: ~ elsif inputs.keyboard.key_down.y~ ** Processing line: ~ remove_trauma(0.1)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_move_cyan~ ** Processing line: ~ if inputs.keyboard.key_held.up~ ** Processing line: ~ state.player_cyan.dy = 5~ ** Processing line: ~ state.player_cyan.orientation = "up"~ ** Processing line: ~ elsif inputs.keyboard.key_held.down~ ** Processing line: ~ state.player_cyan.dy = -5~ ** Processing line: ~ state.player_cyan.orientation = "down"~ ** Processing line: ~ else~ ** Processing line: ~ state.player_cyan.dy *= 0.8~ ** Processing line: ~ end~ ** Processing line: ~ if inputs.keyboard.key_held.left~ ** Processing line: ~ state.player_cyan.dx = -5~ ** Processing line: ~ state.player_cyan.orientation = "left"~ ** Processing line: ~ elsif inputs.keyboard.key_held.right~ ** Processing line: ~ state.player_cyan.dx = 5~ ** Processing line: ~ state.player_cyan.orientation = "right"~ ** Processing line: ~ else~ ** Processing line: ~ state.player_cyan.dx *= 0.8~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [128,512,"#{state.player_cyan.x.round()}",8,2,0,255,255,255]~ ** Processing line: ~ outputs.labels << [128,480,"#{state.player_cyan.y.round()}",8,2,0,255,255,255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_move_magenta~ ** Processing line: ~ if inputs.keyboard.key_held.w~ ** Processing line: ~ state.player_magenta.dy = 5~ ** Processing line: ~ state.player_magenta.orientation = "up"~ ** Processing line: ~ elsif inputs.keyboard.key_held.s~ ** Processing line: ~ state.player_magenta.dy = -5~ ** Processing line: ~ state.player_magenta.orientation = "down"~ ** Processing line: ~ else~ ** Processing line: ~ state.player_magenta.dy *= 0.8~ ** Processing line: ~ end~ ** Processing line: ~ if inputs.keyboard.key_held.a~ ** Processing line: ~ state.player_magenta.dx = -5~ ** Processing line: ~ state.player_magenta.orientation = "left"~ ** Processing line: ~ elsif inputs.keyboard.key_held.d~ ** Processing line: ~ state.player_magenta.dx = 5~ ** Processing line: ~ state.player_magenta.orientation = "right"~ ** Processing line: ~ else~ ** Processing line: ~ state.player_magenta.dx *= 0.8~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [128,360,"#{state.player_magenta.x.round()}",8,2,255,0,255,255]~ ** Processing line: ~ outputs.labels << [128,328,"#{state.player_magenta.y.round()}",8,2,255,0,255,255]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $camera_movement = CameraMovement.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.background_color = [0,0,0]~ ** Processing line: ~ $camera_movement.inputs = args.inputs~ ** Processing line: ~ $camera_movement.outputs = args.outputs~ ** Processing line: ~ $camera_movement.state = args.state~ ** Processing line: ~ $camera_movement.grid = args.grid~ ** Processing line: ~ $camera_movement.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Rendering - Z Targeting Camera - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Z Targeting Camera - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Z Targeting Camera - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_rendering/09_z_targeting_camera/app/main.rb~ ** Processing line: ~ class Game~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ input~ ** Processing line: ~ calc~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ outputs.background_color = [219, 208, 191]~ ** Processing line: ~ player.x ||= 634~ ** Processing line: ~ player.y ||= 153~ ** Processing line: ~ player.angle ||= 90~ ** Processing line: ~ player.distance ||= arena_radius~ ** Processing line: ~ target.x ||= 634~ ** Processing line: ~ target.y ||= 359~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render~ ** Processing line: ~ outputs[:scene].sprites << ([0, 0, 933, 700, 'sprites/arena.png'].center_inside_rect grid.rect)~ ** Processing line: ~ outputs[:scene].sprites << target_sprite~ ** Processing line: ~ outputs[:scene].sprites << player_sprite~ ** Processing line: ~ outputs.sprites << scene~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def target_sprite~ ** Processing line: ~ {~ ** Processing line: ~ x: target.x, y: target.y,~ ** Processing line: ~ w: 10, h: 10,~ ** Processing line: ~ path: 'sprites/square/black.png'~ ** Processing line: ~ }.anchor_rect 0.5, 0.5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input~ ** Processing line: ~ if inputs.up && player.distance > 30~ ** Processing line: ~ player.distance -= 2~ ** Processing line: ~ elsif inputs.down && player.distance < 200~ ** Processing line: ~ player.distance += 2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ player.angle += inputs.left_right * -1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc~ ** Processing line: ~ player.x = target.x + ((player.angle * 1).vector_x player.distance)~ ** Processing line: ~ player.y = target.y + ((player.angle * -1).vector_y player.distance)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_sprite~ ** Processing line: ~ {~ ** Processing line: ~ x: player.x,~ ** Processing line: ~ y: player.y,~ ** Processing line: ~ w: 50,~ ** Processing line: ~ h: 100,~ ** Processing line: ~ path: 'sprites/player.png',~ ** Processing line: ~ angle: (player.angle * -1) + 90~ ** Processing line: ~ }.anchor_rect 0.5, 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def center_map~ ** Processing line: ~ { x: 634, y: 359 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def zoom_factor_single~ ** Processing line: ~ 2 - ((args.geometry.distance player, center_map).fdiv arena_radius)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def zoom_factor~ ** Processing line: ~ zoom_factor_single ** 2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def arena_radius~ ** Processing line: ~ 206~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def scene~ ** Processing line: ~ {~ ** Processing line: ~ x: (640 - player.x) + (640 - (640 * zoom_factor)),~ ** Processing line: ~ y: (360 - player.y - (75 * zoom_factor)) + (320 - (320 * zoom_factor)),~ ** Processing line: ~ w: 1280 * zoom_factor,~ ** Processing line: ~ h: 720 * zoom_factor,~ ** Processing line: ~ path: :scene,~ ** Processing line: ~ angle: player.angle - 90,~ ** Processing line: ~ angle_anchor_x: (player.x.fdiv 1280),~ ** Processing line: ~ angle_anchor_y: (player.y.fdiv 720)~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player~ ** Processing line: ~ state.player~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def target~ ** Processing line: ~ state.target~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $game ||= Game.new~ ** Processing line: ~ $game.args = args~ ** Processing line: ~ $game.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Rendering - Blend Modes - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Blend Modes - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Blend Modes - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_rendering/10_blend_modes/app/main.rb~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~ def draw_blendmode args, mode~ ** Processing line: ~ w = 160~ ** Processing line: ~ h = w~ ** Processing line: ~ args.state.x += (1280-w) / (args.state.blendmodes.length + 1)~ ** Processing line: ~ x = args.state.x~ ** Processing line: ~ y = (720 - h) / 2~ ** Processing line: ~ s = 'sprites/blue-feathered.png'~ ** Processing line: ~ args.outputs.sprites << { blendmode_enum: mode.value, x: x, y: y, w: w, h: h, path: s }~ ** Processing line: ~ args.outputs.labels << [x + (w/2), y, mode.name.to_s, 1, 1, 255, 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~~ ** Processing line: ~ # Different blend modes do different things, depending on what they~ ** Processing line: ~ # blend against (in this case, the pixels of the background color).~ ** Processing line: ~ args.state.bg_element ||= 1~ ** Processing line: ~ args.state.bg_color ||= 255~ ** Processing line: ~ args.state.bg_color_direction ||= 1~ ** Processing line: ~ bg_r = (args.state.bg_element == 1) ? args.state.bg_color : 0~ ** Processing line: ~ bg_g = (args.state.bg_element == 2) ? args.state.bg_color : 0~ ** Processing line: ~ bg_b = (args.state.bg_element == 3) ? args.state.bg_color : 0~ ** Processing line: ~ args.state.bg_color += args.state.bg_color_direction~ ** Processing line: ~ if (args.state.bg_color_direction > 0) && (args.state.bg_color >= 255)~ ** Processing line: ~ args.state.bg_color_direction = -1~ ** Processing line: ~ args.state.bg_color = 255~ ** Processing line: ~ elsif (args.state.bg_color_direction < 0) && (args.state.bg_color <= 0)~ ** Processing line: ~ args.state.bg_color_direction = 1~ ** Processing line: ~ args.state.bg_color = 0~ ** Processing line: ~ args.state.bg_element += 1~ ** Processing line: ~ if args.state.bg_element >= 4~ ** Processing line: ~ args.state.bg_element = 1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.background_color = [ bg_r, bg_g, bg_b, 255 ]~ ** Processing line: ~~ ** Processing line: ~ args.state.blendmodes ||= [~ ** Processing line: ~ { name: :none, value: 0 },~ ** Processing line: ~ { name: :blend, value: 1 },~ ** Processing line: ~ { name: :add, value: 2 },~ ** Processing line: ~ { name: :mod, value: 3 },~ ** Processing line: ~ { name: :mul, value: 4 }~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ args.state.x = 0 # reset this, draw_blendmode will increment it.~ ** Processing line: ~ args.state.blendmodes.each { |blendmode| draw_blendmode args, blendmode }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Rendering - Render Target Noclear - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Render Target Noclear - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Rendering - Render Target Noclear - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/07_advanced_rendering/11_render_target_noclear/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.x ||= 500~ ** Processing line: ~ args.state.y ||= 350~ ** Processing line: ~ args.state.xinc ||= 7~ ** Processing line: ~ args.state.yinc ||= 7~ ** Processing line: ~ args.state.bgcolor ||= 1~ ** Processing line: ~ args.state.bginc ||= 1~ ** Processing line: ~~ ** Processing line: ~ # clear the render target on the first tick, and then never again. Draw~ ** Processing line: ~ # another box to it every tick, accumulating over time.~ ** Processing line: ~ clear_target = (args.state.tick_count == 0) || (args.inputs.keyboard.key_down.space)~ ** Processing line: ~ args.render_target(:accumulation).background_color = [ 0, 0, 0, 0 ];~ ** Processing line: ~ args.render_target(:accumulation).clear_before_render = clear_target~ ** Processing line: ~ args.render_target(:accumulation).solids << [args.state.x, args.state.y, 25, 25, 255, 0, 0, 255];~ ** Processing line: ~ args.state.x += args.state.xinc~ ** Processing line: ~ args.state.y += args.state.yinc~ ** Processing line: ~ args.state.bgcolor += args.state.bginc~ ** Processing line: ~~ ** Processing line: ~ # animation upkeep...change where we draw the next box and what color the~ ** Processing line: ~ # window background will be.~ ** Processing line: ~ if args.state.xinc > 0 && args.state.x >= 1280~ ** Processing line: ~ args.state.xinc = -7~ ** Processing line: ~ elsif args.state.xinc < 0 && args.state.x < 0~ ** Processing line: ~ args.state.xinc = 7~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.yinc > 0 && args.state.y >= 720~ ** Processing line: ~ args.state.yinc = -7~ ** Processing line: ~ elsif args.state.yinc < 0 && args.state.y < 0~ ** Processing line: ~ args.state.yinc = 7~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.bginc > 0 && args.state.bgcolor >= 255~ ** Processing line: ~ args.state.bginc = -1~ ** Processing line: ~ elsif args.state.bginc < 0 && args.state.bgcolor <= 0~ ** Processing line: ~ args.state.bginc = 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # clear the screen to a shade of blue and draw the render target, which~ ** Processing line: ~ # is not clearing every frame, on top of it. Note that you can NOT opt to~ ** Processing line: ~ # skip clearing the screen, only render targets. The screen clears every~ ** Processing line: ~ # frame; double-buffering would prevent correct updates between frames.~ ** Processing line: ~ args.outputs.background_color = [ 0, 0, args.state.bgcolor, 255 ]~ ** Processing line: ~ args.outputs.sprites << [ 0, 0, 1280, 720, :accumulation ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Tweening Lerping Easing Functions - Easing Functions - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Tweening Lerping Easing Functions - Easing Functions - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Tweening Lerping Easing Functions - Easing Functions - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/08_tweening_lerping_easing_functions/01_easing_functions/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ # STOP! Watch the following presentation first!!!!~ ** Processing line: ~ # Math for Game Programmers: Fast and Funky 1D Nonlinear Transformations~ ** Processing line: ~ # https://www.youtube.com/watch?v=mr5xkf6zSzk~ ** Processing line: ~~ ** Processing line: ~ # You've watched the talk, yes? YES???~ ** Processing line: ~~ ** Processing line: ~ # define starting and ending points of properties to animate~ ** Processing line: ~ args.state.target_x = 1180~ ** Processing line: ~ args.state.target_y = 620~ ** Processing line: ~ args.state.target_w = 100~ ** Processing line: ~ args.state.target_h = 100~ ** Processing line: ~ args.state.starting_x = 0~ ** Processing line: ~ args.state.starting_y = 0~ ** Processing line: ~ args.state.starting_w = 300~ ** Processing line: ~ args.state.starting_h = 300~ ** Processing line: ~~ ** Processing line: ~ # define start time and duration of animation~ ** Processing line: ~ args.state.start_animate_at = 3.seconds # this is the same as writing 60 * 5 (or 300)~ ** Processing line: ~ args.state.duration = 2.seconds # this is the same as writing 60 * 2 (or 120)~ ** Processing line: ~~ ** Processing line: ~ # define type of animations~ ** Processing line: ~ # Here are all the options you have for values you can put in the array:~ ** Processing line: ~ # :identity, :quad, :cube, :quart, :quint, :flip~ ** Processing line: ~~ ** Processing line: ~ # Linear is defined as:~ ** Processing line: ~ # [:identity]~ ** Processing line: ~ #~ ** Processing line: ~ # Smooth start variations are:~ ** Processing line: ~ # [:quad]~ ** Processing line: ~ # [:cube]~ ** Processing line: ~ # [:quart]~ ** Processing line: ~ # [:quint]~ ** Processing line: ~~ ** Processing line: ~ # Linear reversed, and smooth stop are the same as the animations defined above, but reversed:~ ** Processing line: ~ # [:flip, :identity]~ ** Processing line: ~ # [:flip, :quad, :flip]~ ** Processing line: ~ # [:flip, :cube, :flip]~ ** Processing line: ~ # [:flip, :quart, :flip]~ ** Processing line: ~ # [:flip, :quint, :flip]~ ** Processing line: ~~ ** Processing line: ~ # You can also do custom definitions. See the bottom of the file details~ ** Processing line: ~ # on how to do that. I've defined a couple for you:~ ** Processing line: ~ # [:smoothest_start]~ ** Processing line: ~ # [:smoothest_stop]~ ** Processing line: ~~ ** Processing line: ~ # CHANGE THIS LINE TO ONE OF THE LINES ABOVE TO SEE VARIATIONS~ ** Processing line: ~ args.state.animation_type = [:identity]~ ** Processing line: ~ # args.state.animation_type = [:quad]~ ** Processing line: ~ # args.state.animation_type = [:cube]~ ** Processing line: ~ # args.state.animation_type = [:quart]~ ** Processing line: ~ # args.state.animation_type = [:quint]~ ** Processing line: ~ # args.state.animation_type = [:flip, :identity]~ ** Processing line: ~ # args.state.animation_type = [:flip, :quad, :flip]~ ** Processing line: ~ # args.state.animation_type = [:flip, :cube, :flip]~ ** Processing line: ~ # args.state.animation_type = [:flip, :quart, :flip]~ ** Processing line: ~ # args.state.animation_type = [:flip, :quint, :flip]~ ** Processing line: ~ # args.state.animation_type = [:smoothest_start]~ ** Processing line: ~ # args.state.animation_type = [:smoothest_stop]~ ** Processing line: ~~ ** Processing line: ~ # THIS IS WHERE THE MAGIC HAPPENS!~ ** Processing line: ~ # Numeric#ease~ ** Processing line: ~ progress = args.state.start_animate_at.ease(args.state.duration, args.state.animation_type)~ ** Processing line: ~~ ** Processing line: ~ # Numeric#ease needs to called:~ ** Processing line: ~ # 1. On the number that represents the point in time you want to start, and takes two parameters:~ ** Processing line: ~ # a. The first parameter is how long the animation should take.~ ** Processing line: ~ # b. The second parameter represents the functions that need to be called.~ ** Processing line: ~ #~ ** Processing line: ~ # For example, if I wanted an animate to start 3 seconds in, and last for 10 seconds,~ ** Processing line: ~ # and I want to animation to start fast and end slow, I would do:~ ** Processing line: ~ # (60 * 3).ease(60 * 10, :flip, :quint, :flip)~ ** Processing line: ~~ ** Processing line: ~ # initial value delta to the final value~ ** Processing line: ~ calc_x = args.state.starting_x + (args.state.target_x - args.state.starting_x) * progress~ ** Processing line: ~ calc_y = args.state.starting_y + (args.state.target_y - args.state.starting_y) * progress~ ** Processing line: ~ calc_w = args.state.starting_w + (args.state.target_w - args.state.starting_w) * progress~ ** Processing line: ~ calc_h = args.state.starting_h + (args.state.target_h - args.state.starting_h) * progress~ ** Processing line: ~~ ** Processing line: ~ args.outputs.solids << [calc_x, calc_y, calc_w, calc_h, 0, 0, 0]~ ** Processing line: ~~ ** Processing line: ~ # count down~ ** Processing line: ~ count_down = args.state.start_animate_at - args.state.tick_count~ ** Processing line: ~ if count_down > 0~ ** Processing line: ~ args.outputs.labels << [640, 375, "Running: #{args.state.animation_type} in...", 3, 1]~ ** Processing line: ~ args.outputs.labels << [640, 345, "%.2f" % count_down.fdiv(60), 3, 1]~ ** Processing line: ~ elsif progress >= 1~ ** Processing line: ~ args.outputs.labels << [640, 360, "Click screen to reset.", 3, 1]~ ** Processing line: ~ if args.inputs.click~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # $gtk.reset~ ** Processing line: ~~ ** Processing line: ~ # you can make own variations of animations using this~ ** Processing line: ~ module Easing~ ** Processing line: ~ # you have access to all the built in functions: identity, flip, quad, cube, quart, quint~ ** Processing line: ~ def self.smoothest_start x~ ** Processing line: ~ quad(quint(x))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.smoothest_stop x~ ** Processing line: ~ flip(quad(quint(flip(x))))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # this is the source for the existing easing functions~ ** Processing line: ~ def self.identity x~ ** Processing line: ~ x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.flip x~ ** Processing line: ~ 1 - x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.quad x~ ** Processing line: ~ x * x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.cube x~ ** Processing line: ~ x * x * x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.quart x~ ** Processing line: ~ x * x * x * x * x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.quint x~ ** Processing line: ~ x * x * x * x * x * x~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Tweening Lerping Easing Functions - Cubic Bezier - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Tweening Lerping Easing Functions - Cubic Bezier - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Tweening Lerping Easing Functions - Cubic Bezier - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/08_tweening_lerping_easing_functions/02_cubic_bezier/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.background_color = [33, 33, 33]~ ** Processing line: ~ args.outputs.lines << bezier(100, 100,~ ** Processing line: ~ 100, 620,~ ** Processing line: ~ 1180, 620,~ ** Processing line: ~ 1180, 100,~ ** Processing line: ~ 0)~ ** Processing line: ~~ ** Processing line: ~ args.outputs.lines << bezier(100, 100,~ ** Processing line: ~ 100, 620,~ ** Processing line: ~ 1180, 620,~ ** Processing line: ~ 1180, 100,~ ** Processing line: ~ 20)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def bezier x1, y1, x2, y2, x3, y3, x4, y4, step~ ** Processing line: ~ step ||= 0~ ** Processing line: ~ color = [200, 200, 200]~ ** Processing line: ~ points = points_for_bezier [x1, y1], [x2, y2], [x3, y3], [x4, y4], step~ ** Processing line: ~~ ** Processing line: ~ points.each_cons(2).map do |p1, p2|~ ** Processing line: ~ [p1, p2, color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def points_for_bezier p1, p2, p3, p4, step~ ** Processing line: ~ points = []~ ** Processing line: ~ if step == 0~ ** Processing line: ~ [p1, p2, p3, p4]~ ** Processing line: ~ else~ ** Processing line: ~ t_step = 1.fdiv(step + 1)~ ** Processing line: ~ t = 0~ ** Processing line: ~ t += t_step~ ** Processing line: ~ points = []~ ** Processing line: ~ while t < 1~ ** Processing line: ~ points << [~ ** Processing line: ~ b_for_t(p1.x, p2.x, p3.x, p4.x, t),~ ** Processing line: ~ b_for_t(p1.y, p2.y, p3.y, p4.y, t),~ ** Processing line: ~ ]~ ** Processing line: ~ t += t_step~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ [~ ** Processing line: ~ p1,~ ** Processing line: ~ *points,~ ** Processing line: ~ p4~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def b_for_t v0, v1, v2, v3, t~ ** Processing line: ~ pow(1 - t, 3) * v0 +~ ** Processing line: ~ 3 * pow(1 - t, 2) * t * v1 +~ ** Processing line: ~ 3 * (1 - t) * pow(t, 2) * v2 +~ ** Processing line: ~ pow(t, 3) * v3~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def pow n, to~ ** Processing line: ~ n ** to~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Tweening Lerping Easing Functions - Easing Using Spline - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Tweening Lerping Easing Functions - Easing Using Spline - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Tweening Lerping Easing Functions - Easing Using Spline - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/08_tweening_lerping_easing_functions/03_easing_using_spline/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.duration = 10.seconds~ ** Processing line: ~ args.state.spline = [~ ** Processing line: ~ [0.0, 0.33, 0.66, 1.0],~ ** Processing line: ~ [1.0, 1.0, 1.0, 1.0],~ ** Processing line: ~ [1.0, 0.66, 0.33, 0.0],~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ args.state.simulation_tick = args.state.tick_count % args.state.duration~ ** Processing line: ~ progress = 0.ease_spline_extended args.state.simulation_tick, args.state.duration, args.state.spline~ ** Processing line: ~ args.outputs.borders << args.grid.rect~ ** Processing line: ~ args.outputs.solids << [20 + 1240 * progress,~ ** Processing line: ~ 20 + 680 * progress,~ ** Processing line: ~ 20, 20].anchor_rect(0.5, 0.5)~ ** Processing line: ~ args.outputs.labels << [10,~ ** Processing line: ~ 710,~ ** Processing line: ~ "perc: #{"%.2f" % (args.state.simulation_tick / args.state.duration)} t: #{args.state.simulation_tick}"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Tweening Lerping Easing Functions - Parametric Enemy Movement - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Tweening Lerping Easing Functions - Parametric Enemy Movement - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Tweening Lerping Easing Functions - Parametric Enemy Movement - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/08_tweening_lerping_easing_functions/04_parametric_enemy_movement/app/main.rb~ ** Processing line: ~ def new_star args~ ** Processing line: ~ { x: 1280.randomize(:ratio),~ ** Processing line: ~ starting_y: 800,~ ** Processing line: ~ distance_to_travel: 900 + 100.randomize(:ratio),~ ** Processing line: ~ duration: 100.randomize(:ratio) + 60,~ ** Processing line: ~ created_at: args.state.tick_count,~ ** Processing line: ~ max_alpha: 128.randomize(:ratio) + 128,~ ** Processing line: ~ b: 255.randomize(:ratio),~ ** Processing line: ~ g: 200.randomize(:ratio),~ ** Processing line: ~ w: 1.randomize(:ratio) + 1,~ ** Processing line: ~ h: 1.randomize(:ratio) + 1 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_enemy args~ ** Processing line: ~ { x: 1280.randomize(:ratio),~ ** Processing line: ~ starting_y: 800,~ ** Processing line: ~ distance_to_travel: -900,~ ** Processing line: ~ duration: 60.randomize(:ratio) + 180,~ ** Processing line: ~ created_at: args.state.tick_count,~ ** Processing line: ~ w: 32,~ ** Processing line: ~ h: 32,~ ** Processing line: ~ fire_rate: (30.randomize(:ratio) + (60 - args.state.score)).to_i }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_bullet args, starting_x, starting_y, enemy_speed~ ** Processing line: ~ { x: starting_x,~ ** Processing line: ~ starting_y: starting_y,~ ** Processing line: ~ distance_to_travel: -900,~ ** Processing line: ~ created_at: args.state.tick_count,~ ** Processing line: ~ duration: 900 / (enemy_speed.abs + 2.0 + (5.0 * args.state.score.fdiv(100))).abs,~ ** Processing line: ~ w: 5,~ ** Processing line: ~ h: 5 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_player_bullet args, starting_x, starting_y, player_speed~ ** Processing line: ~ { x: starting_x,~ ** Processing line: ~ starting_y: starting_y,~ ** Processing line: ~ distance_to_travel: 900,~ ** Processing line: ~ created_at: args.state.tick_count,~ ** Processing line: ~ duration: 900 / (player_speed + 2.0),~ ** Processing line: ~ w: 5,~ ** Processing line: ~ h: 5 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults args~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ args.state.score ||= 0~ ** Processing line: ~ args.state.stars ||= []~ ** Processing line: ~ args.state.enemies ||= []~ ** Processing line: ~ args.state.bullets ||= []~ ** Processing line: ~ args.state.player_bullets ||= []~ ** Processing line: ~ args.state.max_stars = 50~ ** Processing line: ~ args.state.max_enemies = 10~ ** Processing line: ~ args.state.player.x ||= 640~ ** Processing line: ~ args.state.player.y ||= 100~ ** Processing line: ~ args.state.player.w ||= 32~ ** Processing line: ~ args.state.player.h ||= 32~ ** Processing line: ~~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.state.stars.clear~ ** Processing line: ~ args.state.max_stars.times do~ ** Processing line: ~ s = new_star args~ ** Processing line: ~ s[:created_at] += s[:duration].randomize(:ratio)~ ** Processing line: ~ args.state.stars << s~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.state.enemies.clear~ ** Processing line: ~ args.state.max_enemies.times do~ ** Processing line: ~ s = new_enemy args~ ** Processing line: ~ s[:created_at] += s[:duration].randomize(:ratio)~ ** Processing line: ~ args.state.enemies << s~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input args~ ** Processing line: ~ if args.inputs.keyboard.left~ ** Processing line: ~ args.state.player.x -= 5~ ** Processing line: ~ elsif args.inputs.keyboard.right~ ** Processing line: ~ args.state.player.x += 5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.keyboard.up~ ** Processing line: ~ args.state.player.y += 5~ ** Processing line: ~ elsif args.inputs.keyboard.down~ ** Processing line: ~ args.state.player.y -= 5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.keyboard.key_down.space~ ** Processing line: ~ args.state.player_bullets << new_player_bullet(args,~ ** Processing line: ~ args.state.player.x + args.state.player.w.half,~ ** Processing line: ~ args.state.player.y + args.state.player.h, 5)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.player.y = args.state.player.y.greater(0).lesser(720 - args.state.player.w)~ ** Processing line: ~ args.state.player.x = args.state.player.x.greater(0).lesser(1280 - args.state.player.h)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def completed? entity~ ** Processing line: ~ (entity[:created_at] + entity[:duration]).elapsed_time > 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_stars args~ ** Processing line: ~ if (stars_to_add = args.state.max_stars - args.state.stars.length) > 0~ ** Processing line: ~ stars_to_add.times { args.state.stars << new_star(args) }~ ** Processing line: ~ end~ ** Processing line: ~ args.state.stars = args.state.stars.reject { |s| completed? s }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_enemies args~ ** Processing line: ~ if (enemies_to_add = args.state.max_enemies - args.state.enemies.length) > 0~ ** Processing line: ~ enemies_to_add.times { args.state.enemies << new_enemy(args) }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.enemies = args.state.enemies.reject { |s| completed? s }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_bullets args~ ** Processing line: ~ args.state.enemies.each do |e|~ ** Processing line: ~ if args.state.tick_count.mod_zero?(e[:fire_rate])~ ** Processing line: ~ args.state.bullets << new_bullet(args, e[:x] + e[:w].half, current_y(e), e[:distance_to_travel] / e[:duration])~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.bullets = args.state.bullets.reject { |s| completed? s }~ ** Processing line: ~ args.state.player_bullets = args.state.player_bullets.reject { |s| completed? s }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def intersect? entity_one, entity_two~ ** Processing line: ~ entity_one.merge(y: current_y(entity_one))~ ** Processing line: ~ .intersect_rect? entity_two.merge(y: current_y(entity_two))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def kill args~ ** Processing line: ~ bullets_hitting_enemies = []~ ** Processing line: ~ dead_bullets = []~ ** Processing line: ~ dead_enemies = []~ ** Processing line: ~~ ** Processing line: ~ args.state.player_bullets.each do |b|~ ** Processing line: ~ args.state.enemies.each do |e|~ ** Processing line: ~ if intersect? b, e~ ** Processing line: ~ dead_bullets << b~ ** Processing line: ~ dead_enemies << e~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.score += dead_enemies.length~ ** Processing line: ~~ ** Processing line: ~ args.state.player_bullets.reject! { |b| dead_bullets.include? b }~ ** Processing line: ~ args.state.enemies.reject! { |e| dead_enemies.include? e }~ ** Processing line: ~~ ** Processing line: ~ dead = args.state.bullets.any? do |b|~ ** Processing line: ~ [args.state.player.x,~ ** Processing line: ~ args.state.player.y,~ ** Processing line: ~ args.state.player.w,~ ** Processing line: ~ args.state.player.h].intersect_rect? b.merge(y: current_y(b))~ ** Processing line: ~ end~ ** Processing line: ~ return unless dead~ ** Processing line: ~ args.gtk.reset~ ** Processing line: ~ defaults args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc args~ ** Processing line: ~ calc_stars args~ ** Processing line: ~ move_enemies args~ ** Processing line: ~ move_bullets args~ ** Processing line: ~ kill args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def current_y entity~ ** Processing line: ~ entity[:starting_y] + (entity[:distance_to_travel] * entity[:created_at].ease(entity[:duration], :identity))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render args~ ** Processing line: ~ args.outputs.solids << args.state.stars.map do |s|~ ** Processing line: ~ [s[:x],~ ** Processing line: ~ current_y(s),~ ** Processing line: ~ s[:w], s[:h], 0, s[:g], s[:b], s[:max_alpha] * s[:created_at].ease(20, :identity)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.borders << args.state.enemies.map do |s|~ ** Processing line: ~ [s[:x],~ ** Processing line: ~ current_y(s),~ ** Processing line: ~ s[:w], s[:h], 255, 0, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.borders << args.state.bullets.map do |b|~ ** Processing line: ~ [b[:x],~ ** Processing line: ~ current_y(b),~ ** Processing line: ~ b[:w], b[:h], 255, 0, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.borders << args.state.player_bullets.map do |b|~ ** Processing line: ~ [b[:x],~ ** Processing line: ~ current_y(b),~ ** Processing line: ~ b[:w], b[:h], 255, 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.borders << [args.state.player.x,~ ** Processing line: ~ args.state.player.y,~ ** Processing line: ~ args.state.player.w,~ ** Processing line: ~ args.state.player.h, 255, 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ defaults args~ ** Processing line: ~ input args~ ** Processing line: ~ calc args~ ** Processing line: ~ render args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Performance - Sprites As Hash - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Sprites As Hash - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Sprites As Hash - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/09_performance/01_sprites_as_hash/app/main.rb~ ** Processing line: ~~ ** Processing line: ~ # Sprites represented as Hashes using the queue ~args.outputs.sprites~~ ** Processing line: ~ # code up, but are the "slowest" to render.~ ** Processing line: ~ # The reason for this is the access of the key in the Hash and also~ ** Processing line: ~ # because the data args.outputs.sprites is cleared every tick.~ ** Processing line: ~ def random_x args~ ** Processing line: ~ (args.grid.w.randomize :ratio) * -1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def random_y args~ ** Processing line: ~ (args.grid.h.randomize :ratio) * -1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def random_speed~ ** Processing line: ~ 1 + (4.randomize :ratio)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_star args~ ** Processing line: ~ {~ ** Processing line: ~ x: (random_x args),~ ** Processing line: ~ y: (random_y args),~ ** Processing line: ~ w: 4, h: 4, path: 'sprites/tiny-star.png',~ ** Processing line: ~ s: random_speed~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_star args, star~ ** Processing line: ~ star.x += star[:s]~ ** Processing line: ~ star.y += star[:s]~ ** Processing line: ~ if star.x > args.grid.w || star.y > args.grid.h~ ** Processing line: ~ star.x = (random_x args)~ ** Processing line: ~ star.y = (random_y args)~ ** Processing line: ~ star[:s] = random_speed~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.star_count ||= 0~ ** Processing line: ~~ ** Processing line: ~ # sets console command when sample app initially opens~ ** Processing line: ~ if Kernel.global_tick_count == 0~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts "========================================================="~ ** Processing line: ~ puts "* INFO: Sprites, Hashes"~ ** Processing line: ~ puts "* INFO: Please specify the number of sprites to render."~ ** Processing line: ~ args.gtk.console.set_command "reset_with count: 100"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # init~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.state.stars = args.state.star_count.map { |i| new_star args }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # update~ ** Processing line: ~ args.state.stars.each { |s| move_star args, s }~ ** Processing line: ~~ ** Processing line: ~ # render~ ** Processing line: ~ args.outputs.sprites << args.state.stars~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # resets game, and assigns star count given by user~ ** Processing line: ~ def reset_with count: count~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ $gtk.args.state.star_count = count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Performance - Sprites As Entities - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Sprites As Entities - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Sprites As Entities - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/09_performance/02_sprites_as_entities/app/main.rb~ ** Processing line: ~ # Sprites represented as Entities using the queue ~args.outputs.sprites~~ ** Processing line: ~ # yields nicer access apis over Hashes, but require a bit more code upfront.~ ** Processing line: ~ # The hash sample has to use star[:s] to get the speed of the star, but~ ** Processing line: ~ # an entity can use .s instead.~ ** Processing line: ~ def random_x args~ ** Processing line: ~ (args.grid.w.randomize :ratio) * -1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def random_y args~ ** Processing line: ~ (args.grid.h.randomize :ratio) * -1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def random_speed~ ** Processing line: ~ 1 + (4.randomize :ratio)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_star args~ ** Processing line: ~ args.state.new_entity :star, {~ ** Processing line: ~ x: (random_x args),~ ** Processing line: ~ y: (random_y args),~ ** Processing line: ~ w: 4, h: 4,~ ** Processing line: ~ path: 'sprites/tiny-star.png',~ ** Processing line: ~ s: random_speed~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_star args, star~ ** Processing line: ~ star.x += star.s~ ** Processing line: ~ star.y += star.s~ ** Processing line: ~ if star.x > args.grid.w || star.y > args.grid.h~ ** Processing line: ~ star.x = (random_x args)~ ** Processing line: ~ star.y = (random_y args)~ ** Processing line: ~ star.s = random_speed~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.star_count ||= 0~ ** Processing line: ~~ ** Processing line: ~ # sets console command when sample app initially opens~ ** Processing line: ~ if Kernel.global_tick_count == 0~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts "========================================================="~ ** Processing line: ~ puts "* INFO: Sprites, Open Entities"~ ** Processing line: ~ puts "* INFO: Please specify the number of sprites to render."~ ** Processing line: ~ args.gtk.console.set_command "reset_with count: 100"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # init~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.state.stars = args.state.star_count.map { |i| new_star args }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # update~ ** Processing line: ~ args.state.stars.each { |s| move_star args, s }~ ** Processing line: ~~ ** Processing line: ~ # render~ ** Processing line: ~ args.outputs.sprites << args.state.stars~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # resets game, and assigns star count given by user~ ** Processing line: ~ def reset_with count: count~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ $gtk.args.state.star_count = count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Performance - Sprites As Struct - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Sprites As Struct - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Sprites As Struct - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/09_performance/03_sprites_as_struct/app/main.rb~ ** Processing line: ~ # create a Struct variant that allows for named parameters on construction.~ ** Processing line: ~ class NamedStruct < Struct~ ** Processing line: ~ def initialize **opts~ ** Processing line: ~ super(*members.map { |k| opts[k] })~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # create a Star NamedStruct~ ** Processing line: ~ Star = NamedStruct.new(:x, :y, :w, :h, :path, :s,~ ** Processing line: ~ :angle, :angle_anchor_x, :angle_anchor_y,~ ** Processing line: ~ :r, :g, :b, :a,~ ** Processing line: ~ :tile_x, :tile_y,~ ** Processing line: ~ :tile_w, :tile_h,~ ** Processing line: ~ :source_x, :source_y,~ ** Processing line: ~ :source_w, :source_h,~ ** Processing line: ~ :flip_horizontally, :flip_vertically,~ ** Processing line: ~ :blendmode_enum)~ ** Processing line: ~~ ** Processing line: ~ # Sprites represented as Structs. They require a little bit more code than Hashes,~ ** Processing line: ~ # but are the a little faster to render too.~ ** Processing line: ~ def random_x args~ ** Processing line: ~ (args.grid.w.randomize :ratio) * -1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def random_y args~ ** Processing line: ~ (args.grid.h.randomize :ratio) * -1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def random_speed~ ** Processing line: ~ 1 + (4.randomize :ratio)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_star args~ ** Processing line: ~ Star.new x: (random_x args),~ ** Processing line: ~ y: (random_y args),~ ** Processing line: ~ w: 4, h: 4,~ ** Processing line: ~ path: 'sprites/tiny-star.png',~ ** Processing line: ~ s: random_speed~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_star args, star~ ** Processing line: ~ star.x += star[:s]~ ** Processing line: ~ star.y += star[:s]~ ** Processing line: ~ if star.x > args.grid.w || star.y > args.grid.h~ ** Processing line: ~ star.x = (random_x args)~ ** Processing line: ~ star.y = (random_y args)~ ** Processing line: ~ star[:s] = random_speed~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.star_count ||= 0~ ** Processing line: ~~ ** Processing line: ~ # sets console command when sample app initially opens~ ** Processing line: ~ if Kernel.global_tick_count == 0~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts "========================================================="~ ** Processing line: ~ puts "* INFO: Sprites, Structs"~ ** Processing line: ~ puts "* INFO: Please specify the number of sprites to render."~ ** Processing line: ~ args.gtk.console.set_command "reset_with count: 100"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # init~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.state.stars = args.state.star_count.map { |i| new_star args }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # update~ ** Processing line: ~ args.state.stars.each { |s| move_star args, s }~ ** Processing line: ~~ ** Processing line: ~ # render~ ** Processing line: ~ args.outputs.sprites << args.state.stars~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # resets game, and assigns star count given by user~ ** Processing line: ~ def reset_with count: count~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ $gtk.args.state.star_count = count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Performance - Sprites As Strict Entities - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Sprites As Strict Entities - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Sprites As Strict Entities - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/09_performance/04_sprites_as_strict_entities/app/main.rb~ ** Processing line: ~ # Sprites represented as StrictEntities using the queue ~args.outputs.sprites~~ ** Processing line: ~ # yields apis access similar to Entities, but all properties that can be set on the~ ** Processing line: ~ # entity must be predefined with a default value. Strict entities do not support the~ ** Processing line: ~ # addition of new properties after the fact. They are more performant than OpenEntities~ ** Processing line: ~ # because of this constraint.~ ** Processing line: ~ def random_x args~ ** Processing line: ~ (args.grid.w.randomize :ratio) * -1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def random_y args~ ** Processing line: ~ (args.grid.h.randomize :ratio) * -1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def random_speed~ ** Processing line: ~ 1 + (4.randomize :ratio)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_star args~ ** Processing line: ~ args.state.new_entity_strict(:star,~ ** Processing line: ~ x: (random_x args),~ ** Processing line: ~ y: (random_y args),~ ** Processing line: ~ w: 4, h: 4,~ ** Processing line: ~ path: 'sprites/tiny-star.png',~ ** Processing line: ~ s: random_speed) do |entity|~ ** Processing line: ~ # invoke attr_sprite so that it responds to~ ** Processing line: ~ # all properties that are required to render a sprite~ ** Processing line: ~ entity.attr_sprite~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_star args, star~ ** Processing line: ~ star.x += star.s~ ** Processing line: ~ star.y += star.s~ ** Processing line: ~ if star.x > args.grid.w || star.y > args.grid.h~ ** Processing line: ~ star.x = (random_x args)~ ** Processing line: ~ star.y = (random_y args)~ ** Processing line: ~ star.s = random_speed~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.star_count ||= 0~ ** Processing line: ~~ ** Processing line: ~ # sets console command when sample app initially opens~ ** Processing line: ~ if Kernel.global_tick_count == 0~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts "========================================================="~ ** Processing line: ~ puts "* INFO: Sprites, Strict Entities"~ ** Processing line: ~ puts "* INFO: Please specify the number of sprites to render."~ ** Processing line: ~ args.gtk.console.set_command "reset_with count: 100"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # init~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.state.stars = args.state.star_count.map { |i| new_star args }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # update~ ** Processing line: ~ args.state.stars.each { |s| move_star args, s }~ ** Processing line: ~~ ** Processing line: ~ # render~ ** Processing line: ~ args.outputs.sprites << args.state.stars~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # resets game, and assigns star count given by user~ ** Processing line: ~ def reset_with count: count~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ $gtk.args.state.star_count = count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Performance - Sprites As Classes - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Sprites As Classes - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Sprites As Classes - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/09_performance/05_sprites_as_classes/app/main.rb~ ** Processing line: ~ # Sprites represented as Classes using the queue ~args.outputs.sprites~.~ ** Processing line: ~ # gives you full control of property declaration and method invocation.~ ** Processing line: ~ # They are more performant than OpenEntities and StrictEntities, but more code upfront.~ ** Processing line: ~ class Star~ ** Processing line: ~ attr_sprite~ ** Processing line: ~~ ** Processing line: ~ def initialize grid~ ** Processing line: ~ @grid = grid~ ** Processing line: ~ @x = (rand @grid.w) * -1~ ** Processing line: ~ @y = (rand @grid.h) * -1~ ** Processing line: ~ @w = 4~ ** Processing line: ~ @h = 4~ ** Processing line: ~ @s = 1 + (4.randomize :ratio)~ ** Processing line: ~ @path = 'sprites/tiny-star.png'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move~ ** Processing line: ~ @x += @s~ ** Processing line: ~ @y += @s~ ** Processing line: ~ @x = (rand @grid.w) * -1 if @x > @grid.right~ ** Processing line: ~ @y = (rand @grid.h) * -1 if @y > @grid.top~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # calls methods needed for game to run properly~ ** Processing line: ~ def tick args~ ** Processing line: ~ # sets console command when sample app initially opens~ ** Processing line: ~ if Kernel.global_tick_count == 0~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts "========================================================="~ ** Processing line: ~ puts "* INFO: Sprites, Classes"~ ** Processing line: ~ puts "* INFO: Please specify the number of sprites to render."~ ** Processing line: ~ args.gtk.console.set_command "reset_with count: 100"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # init~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.state.stars = args.state.star_count.map { |i| Star.new args.grid }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # update~ ** Processing line: ~ args.state.stars.each(&:move)~ ** Processing line: ~~ ** Processing line: ~ # render~ ** Processing line: ~ args.outputs.sprites << args.state.stars~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # resets game, and assigns star count given by user~ ** Processing line: ~ def reset_with count: count~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ $gtk.args.state.star_count = count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Performance - Static Sprites As Classes - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Static Sprites As Classes - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Static Sprites As Classes - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/09_performance/06_static_sprites_as_classes/app/main.rb~ ** Processing line: ~ # Sprites represented as Classes using the queue ~args.outputs.static_sprites~.~ ** Processing line: ~ # bypasses the queue behavior of ~args.outputs.sprites~. All instances are held~ ** Processing line: ~ # by reference. You get better performance, but you are mutating state of held objects~ ** Processing line: ~ # which is less functional/data oriented.~ ** Processing line: ~ class Star~ ** Processing line: ~ attr_sprite~ ** Processing line: ~~ ** Processing line: ~ def initialize grid~ ** Processing line: ~ @grid = grid~ ** Processing line: ~ @x = (rand @grid.w) * -1~ ** Processing line: ~ @y = (rand @grid.h) * -1~ ** Processing line: ~ @w = 4~ ** Processing line: ~ @h = 4~ ** Processing line: ~ @s = 1 + (4.randomize :ratio)~ ** Processing line: ~ @path = 'sprites/tiny-star.png'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move~ ** Processing line: ~ @x += @s~ ** Processing line: ~ @y += @s~ ** Processing line: ~ @x = (rand @grid.w) * -1 if @x > @grid.right~ ** Processing line: ~ @y = (rand @grid.h) * -1 if @y > @grid.top~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # calls methods needed for game to run properly~ ** Processing line: ~ def tick args~ ** Processing line: ~ # sets console command when sample app initially opens~ ** Processing line: ~ if Kernel.global_tick_count == 0~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts "========================================================="~ ** Processing line: ~ puts "* INFO: Static Sprites, Classes"~ ** Processing line: ~ puts "* INFO: Please specify the number of sprites to render."~ ** Processing line: ~ args.gtk.console.set_command "reset_with count: 100"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # init~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.state.stars = args.state.star_count.map { |i| Star.new args.grid }~ ** Processing line: ~ args.outputs.static_sprites << args.state.stars~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # update~ ** Processing line: ~ args.state.stars.each(&:move)~ ** Processing line: ~~ ** Processing line: ~ # render~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # resets game, and assigns star count given by user~ ** Processing line: ~ def reset_with count: count~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ $gtk.args.state.star_count = count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Performance - Static Sprites As Classes With Custom Drawing - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Static Sprites As Classes With Custom Drawing - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Static Sprites As Classes With Custom Drawing - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/09_performance/07_static_sprites_as_classes_with_custom_drawing/app/main.rb~ ** Processing line: ~ # Sprites represented as Classes, with a draw_override method, and using the queue ~args.outputs.static_sprites~.~ ** Processing line: ~ # is the fastest approach. This is comparable to what other game engines set as the default behavior.~ ** Processing line: ~ # There are tradeoffs for all this speed if the creation of a full blown class, and bypassing~ ** Processing line: ~ # functional/data-oriented practices.~ ** Processing line: ~ class Star~ ** Processing line: ~ def initialize grid~ ** Processing line: ~ @grid = grid~ ** Processing line: ~ @x = (rand @grid.w) * -1~ ** Processing line: ~ @y = (rand @grid.h) * -1~ ** Processing line: ~ @w = 4~ ** Processing line: ~ @h = 4~ ** Processing line: ~ @s = 1 + (4.randomize :ratio)~ ** Processing line: ~ @path = 'sprites/tiny-star.png'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move~ ** Processing line: ~ @x += @s~ ** Processing line: ~ @y += @s~ ** Processing line: ~ @x = (rand @grid.w) * -1 if @x > @grid.right~ ** Processing line: ~ @y = (rand @grid.h) * -1 if @y > @grid.top~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if the object that is in args.outputs.sprites (or static_sprites)~ ** Processing line: ~ # respond_to? :draw_override, then the method is invoked giving you~ ** Processing line: ~ # access to the class used to draw to the canvas.~ ** Processing line: ~ def draw_override ffi_draw~ ** Processing line: ~ # first move then draw~ ** Processing line: ~ move~ ** Processing line: ~~ ** Processing line: ~ # The argument order for ffi.draw_sprite is:~ ** Processing line: ~ # x, y, w, h, path~ ** Processing line: ~ ffi_draw.draw_sprite @x, @y, @w, @h, @path~ ** Processing line: ~~ ** Processing line: ~ # The argument order for ffi_draw.draw_sprite_2 is (pass in nil for default value):~ ** Processing line: ~ # x, y, w, h, path,~ ** Processing line: ~ # angle, alpha~ ** Processing line: ~~ ** Processing line: ~ # The argument order for ffi_draw.draw_sprite_3 is:~ ** Processing line: ~ # x, y, w, h,~ ** Processing line: ~ # path,~ ** Processing line: ~ # angle,~ ** Processing line: ~ # alpha, red_saturation, green_saturation, blue_saturation~ ** Processing line: ~ # tile_x, tile_y, tile_w, tile_h,~ ** Processing line: ~ # flip_horizontally, flip_vertically,~ ** Processing line: ~ # angle_anchor_x, angle_anchor_y,~ ** Processing line: ~ # source_x, source_y, source_w, source_h~ ** Processing line: ~~ ** Processing line: ~ # The argument order for ffi_draw.draw_sprite_4 is:~ ** Processing line: ~ # x, y, w, h,~ ** Processing line: ~ # path,~ ** Processing line: ~ # angle,~ ** Processing line: ~ # alpha, red_saturation, green_saturation, blue_saturation~ ** Processing line: ~ # tile_x, tile_y, tile_w, tile_h,~ ** Processing line: ~ # flip_horizontally, flip_vertically,~ ** Processing line: ~ # angle_anchor_x, angle_anchor_y,~ ** Processing line: ~ # source_x, source_y, source_w, source_h,~ ** Processing line: ~ # blendmode_enum~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # calls methods needed for game to run properly~ ** Processing line: ~ def tick args~ ** Processing line: ~ # sets console command when sample app initially opens~ ** Processing line: ~ if Kernel.global_tick_count == 0~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts ""~ ** Processing line: ~ puts "========================================================="~ ** Processing line: ~ puts "* INFO: Static Sprites, Classes, Draw Override"~ ** Processing line: ~ puts "* INFO: Please specify the number of sprites to render."~ ** Processing line: ~ args.gtk.console.set_command "reset_with count: 100"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # init~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.state.stars = args.state.star_count.map { |i| Star.new args.grid }~ ** Processing line: ~ args.outputs.static_sprites << args.state.stars~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # render framerate~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # resets game, and assigns star count given by user~ ** Processing line: ~ def reset_with count: count~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ $gtk.args.state.star_count = count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Performance - Collision Limits - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Collision Limits - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Performance - Collision Limits - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/09_performance/08_collision_limits/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~ - find_all: Finds all elements of a collection that meet certain requirements.~ ** Processing line: ~ In this sample app, we're finding all bodies that intersect with the center body.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.solids: An array. The values generate a solid.~ ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE]~ ** Processing line: ~ For more information about solids, go to mygame/documentation/03-solids-and-borders.md.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ ** Processing line: ~~ ** Processing line: ~ - ARRAY#intersect_rect?: Returns true or false depending on if two rectangles intersect.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This code demonstrates moving objects that loop around once they exceed the scope of the screen,~ ** Processing line: ~ # which has dimensions of 1280 by 720, and also detects collisions between objects called "bodies".~ ** Processing line: ~~ ** Processing line: ~ def body_count num~ ** Processing line: ~ $gtk.args.state.other_bodies = num.map { [1280 * rand, 720 * rand, 10, 10] } # other_bodies set using num collection~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~~ ** Processing line: ~ # Center body's values are set using an array~ ** Processing line: ~ # Map is used to set values of 2000 other bodies~ ** Processing line: ~ # All bodies that intersect with center body are stored in collisions collection~ ** Processing line: ~ args.state.center_body ||= [640 - 100, 360 - 100, 200, 200] # calculations done to place body in center~ ** Processing line: ~ args.state.other_bodies ||= 2000.map { [1280 * rand, 720 * rand, 10, 10] } # 2000 bodies given random position on screen~ ** Processing line: ~~ ** Processing line: ~ # finds all bodies that intersect with center body, stores them in collisions~ ** Processing line: ~ collisions = args.state.other_bodies.find_all { |b| b.intersect_rect? args.state.center_body }~ ** Processing line: ~~ ** Processing line: ~ args.borders << args.state.center_body # outputs center body as a black border~ ** Processing line: ~~ ** Processing line: ~ # transparency changes based on number of collisions; the more collisions, the redder (more transparent) the box becomes~ ** Processing line: ~ args.solids << [args.state.center_body, 255, 0, 0, collisions.length * 5] # center body is red solid~ ** Processing line: ~ args.solids << args.state.other_bodies # other bodies are output as (black) solids, as well~ ** Processing line: ~~ ** Processing line: ~ args.labels << [10, 30, args.gtk.current_framerate] # outputs frame rate in bottom left corner~ ** Processing line: ~~ ** Processing line: ~ # Bodies are returned to bottom left corner if positions exceed scope of screen~ ** Processing line: ~ args.state.other_bodies.each do |b| # for each body in the other_bodies collection~ ** Processing line: ~ b.x += 5 # x and y are both incremented by 5~ ** Processing line: ~ b.y += 5~ ** Processing line: ~ b.x = 0 if b.x > 1280 # x becomes 0 if star exceeds scope of screen (goes too far right)~ ** Processing line: ~ b.y = 0 if b.y > 720 # y becomes 0 if star exceeds scope of screen (goes too far up)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Resets the game.~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Logging - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Logging - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Logging - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/00_logging/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.background_color = [255, 255, 255, 0]~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.gtk.log_spam "log level spam"~ ** Processing line: ~ args.gtk.log_debug "log level debug"~ ** Processing line: ~ args.gtk.log_info "log level info"~ ** Processing line: ~ args.gtk.log_warn "log level warn"~ ** Processing line: ~ args.gtk.log_error "log level error"~ ** Processing line: ~ args.gtk.log_unfiltered "log level unfiltered"~ ** Processing line: ~ puts "This is a puts call"~ ** Processing line: ~ args.gtk.console.show~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.tick_count == 60~ ** Processing line: ~ puts "This is a puts call on tick 60"~ ** Processing line: ~ elsif args.state.tick_count == 120~ ** Processing line: ~ puts "This is a puts call on tick 120"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Trace Debugging - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Trace Debugging - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Trace Debugging - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/01_trace_debugging/app/main.rb~ ** Processing line: ~ class Game~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def method1 num~ ** Processing line: ~ method2 num~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def method2 num~ ** Processing line: ~ method3 num~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def method3 num~ ** Processing line: ~ method4 num~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def method4 num~ ** Processing line: ~ if num == 1~ ** Processing line: ~ puts "UNLUCKY #{num}."~ ** Processing line: ~ state.unlucky_count += 1~ ** Processing line: ~ if state.unlucky_count > 3~ ** Processing line: ~ raise "NAT 1 finally occurred. Check app/trace.txt for all method invocation history."~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ puts "LUCKY #{num}."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ state.roll_history ||= []~ ** Processing line: ~ state.roll_history << rand(20) + 1~ ** Processing line: ~ state.countdown ||= 600~ ** Processing line: ~ state.countdown -= 1~ ** Processing line: ~ state.unlucky_count ||= 0~ ** Processing line: ~ outputs.labels << [640, 360, "A dice roll of 1 will cause an exception.", 0, 1]~ ** Processing line: ~ if state.countdown > 0~ ** Processing line: ~ outputs.labels << [640, 340, "Dice roll countdown: #{state.countdown}", 0, 1]~ ** Processing line: ~ else~ ** Processing line: ~ state.attempts ||= 0~ ** Processing line: ~ state.attempts += 1~ ** Processing line: ~ outputs.labels << [640, 340, "ROLLING! #{state.attempts}", 0, 1]~ ** Processing line: ~ end~ ** Processing line: ~ return if state.countdown > 0~ ** Processing line: ~ method1 state.roll_history[-1]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $game = Game.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ trace! $game # <------------------- TRACING ENABLED FOR THIS OBJECT~ ** Processing line: ~ $game.args = args~ ** Processing line: ~ $game.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Trace Debugging Classes - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Trace Debugging Classes - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Trace Debugging Classes - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/02_trace_debugging_classes/app/main.rb~ ** Processing line: ~ class Foobar~ ** Processing line: ~ def initialize~ ** Processing line: ~ trace! # Trace is added to the constructor.~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def clicky args~ ** Processing line: ~ return unless args.inputs.mouse.click~ ** Processing line: ~ try_rand rand~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def try_rand num~ ** Processing line: ~ return if num < 0.9~ ** Processing line: ~ raise "Exception finally occurred. Take a look at logs/trace.txt #{num}."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.labels << [640, 360, "Start clicking. Eventually an exception will be thrown. Then look at logs/trace.txt.", 0, 1]~ ** Processing line: ~ args.state.foobar = Foobar.new if args.tick_count~ ** Processing line: ~ return unless args.state.foobar~ ** Processing line: ~ args.state.foobar.clicky args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Unit Tests - benchmark_api_tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - benchmark_api_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - benchmark_api_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/benchmark_api_tests.rb~ ** Processing line: ~ def test_benchmark_api args, assert~ ** Processing line: ~ result = args.gtk.benchmark iterations: 100,~ ** Processing line: ~ only_one: -> () {~ ** Processing line: ~ r = 0~ ** Processing line: ~ (1..100).each do |i|~ ** Processing line: ~ r += 1~ ** Processing line: ~ end~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ assert.equal! result.first_place.name, :only_one~ ** Processing line: ~~ ** Processing line: ~ result = args.gtk.benchmark iterations: 100,~ ** Processing line: ~ iterations_100: -> () {~ ** Processing line: ~ r = 0~ ** Processing line: ~ (1..100).each do |i|~ ** Processing line: ~ r += 1~ ** Processing line: ~ end~ ** Processing line: ~ },~ ** Processing line: ~ iterations_50: -> () {~ ** Processing line: ~ r = 0~ ** Processing line: ~ (1..50).each do |i|~ ** Processing line: ~ r += 1~ ** Processing line: ~ end~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ assert.equal! result.first_place.name, :iterations_50~ ** Processing line: ~~ ** Processing line: ~ result = args.gtk.benchmark iterations: 1,~ ** Processing line: ~ iterations_100: -> () {~ ** Processing line: ~ r = 0~ ** Processing line: ~ (1..100).each do |i|~ ** Processing line: ~ r += 1~ ** Processing line: ~ end~ ** Processing line: ~ },~ ** Processing line: ~ iterations_50: -> () {~ ** Processing line: ~ r = 0~ ** Processing line: ~ (1..50).each do |i|~ ** Processing line: ~ r += 1~ ** Processing line: ~ end~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ assert.equal! result.too_small_to_measure, true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Unit Tests - exception_raising_tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - exception_raising_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - exception_raising_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/exception_raising_tests.rb~ ** Processing line: ~ begin :shared~ ** Processing line: ~ class ExceptionalClass~ ** Processing line: ~ def initialize exception_to_throw = nil~ ** Processing line: ~ raise exception_to_throw if exception_to_throw~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_exception_in_newing_object args, assert~ ** Processing line: ~ begin~ ** Processing line: ~ ExceptionalClass.new TypeError~ ** Processing line: ~ raise "Exception wasn't thrown!"~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ assert.equal! e.class, TypeError, "Exceptions within constructor should be retained."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset 100~ ** Processing line: ~ $gtk.log_level = :off~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Unit Tests - fn_tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - fn_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - fn_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/fn_tests.rb~ ** Processing line: ~ def infinity~ ** Processing line: ~ 1 / 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def neg_infinity~ ** Processing line: ~ -1 / 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def nan~ ** Processing line: ~ 0.0 / 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_add args, assert~ ** Processing line: ~ assert.equal! (args.fn.add), 0~ ** Processing line: ~ assert.equal! (args.fn.+), 0~ ** Processing line: ~ assert.equal! (args.fn.+ 1, 2, 3), 6~ ** Processing line: ~ assert.equal! (args.fn.+ 0), 0~ ** Processing line: ~ assert.equal! (args.fn.+ 0, nil), 0~ ** Processing line: ~ assert.equal! (args.fn.+ 0, nan), nil~ ** Processing line: ~ assert.equal! (args.fn.+ 0, nil, infinity), nil~ ** Processing line: ~ assert.equal! (args.fn.+ [1, 2, 3, [4, 5, 6]]), 21~ ** Processing line: ~ assert.equal! (args.fn.+ [nil, [4, 5, 6]]), 15~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_sub args, assert~ ** Processing line: ~ neg_infinity = infinity * -1~ ** Processing line: ~ assert.equal! (args.fn.+), 0~ ** Processing line: ~ assert.equal! (args.fn.- 1, 2, 3), -4~ ** Processing line: ~ assert.equal! (args.fn.- 4), -4~ ** Processing line: ~ assert.equal! (args.fn.- 4, nan), nil~ ** Processing line: ~ assert.equal! (args.fn.- 0, nil), 0~ ** Processing line: ~ assert.equal! (args.fn.- 0, nil, infinity), nil~ ** Processing line: ~ assert.equal! (args.fn.- [0, 1, 2, 3, [4, 5, 6]]), -21~ ** Processing line: ~ assert.equal! (args.fn.- [nil, 0, [4, 5, 6]]), -15~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_div args, assert~ ** Processing line: ~ assert.equal! (args.fn.div), 1~ ** Processing line: ~ assert.equal! (args.fn./), 1~ ** Processing line: ~ assert.equal! (args.fn./ 6, 3), 2~ ** Processing line: ~ assert.equal! (args.fn./ 6, infinity), nil~ ** Processing line: ~ assert.equal! (args.fn./ 6, nan), nil~ ** Processing line: ~ assert.equal! (args.fn./ infinity), nil~ ** Processing line: ~ assert.equal! (args.fn./ 0), nil~ ** Processing line: ~ assert.equal! (args.fn./ 6, [3]), 2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_idiv args, assert~ ** Processing line: ~ assert.equal! (args.fn.idiv), 1~ ** Processing line: ~ assert.equal! (args.fn.idiv 7, 3), 2~ ** Processing line: ~ assert.equal! (args.fn.idiv 6, infinity), nil~ ** Processing line: ~ assert.equal! (args.fn.idiv 6, nan), nil~ ** Processing line: ~ assert.equal! (args.fn.idiv infinity), nil~ ** Processing line: ~ assert.equal! (args.fn.idiv 0), nil~ ** Processing line: ~ assert.equal! (args.fn.idiv 7, [3]), 2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_mul args, assert~ ** Processing line: ~ assert.equal! (args.fn.mul), 1~ ** Processing line: ~ assert.equal! (args.fn.*), 1~ ** Processing line: ~ assert.equal! (args.fn.* 7, 3), 21~ ** Processing line: ~ assert.equal! (args.fn.* 6, nan), nil~ ** Processing line: ~ assert.equal! (args.fn.* 6, infinity), nil~ ** Processing line: ~ assert.equal! (args.fn.* infinity), nil~ ** Processing line: ~ assert.equal! (args.fn.* 0), 0~ ** Processing line: ~ assert.equal! (args.fn.* 7, [3]), 21~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_lt args, assert~ ** Processing line: ~ assert.equal! (args.fn.lt 1), 1~ ** Processing line: ~ assert.equal! (args.fn.lt), nil~ ** Processing line: ~ assert.equal! (args.fn.lt infinity), nil~ ** Processing line: ~ assert.equal! (args.fn.lt nan), nil~ ** Processing line: ~ assert.equal! (args.fn.lt 10, 9, 8), 8~ ** Processing line: ~ assert.equal! (args.fn.< 10, 9, 8), 8~ ** Processing line: ~ assert.equal! (args.fn.< [10, 9, [8]]), 8~ ** Processing line: ~ assert.equal! (args.fn.< 10, 10), nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_lte args, assert~ ** Processing line: ~ assert.equal! (args.fn.lte 1), 1~ ** Processing line: ~ assert.equal! (args.fn.lte), nil~ ** Processing line: ~ assert.equal! (args.fn.lte infinity), nil~ ** Processing line: ~ assert.equal! (args.fn.lte nan), nil~ ** Processing line: ~ assert.equal! (args.fn.lte 10, 9, 8), 8~ ** Processing line: ~ assert.equal! (args.fn.lte 10, 10), 10~ ** Processing line: ~ assert.equal! (args.fn.lte 10, 9, [8]), 8~ ** Processing line: ~ assert.equal! (args.fn.<= 10, 9, 8), 8~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_gt args, assert~ ** Processing line: ~ assert.equal! (args.fn.gt 1), 1~ ** Processing line: ~ assert.equal! (args.fn.gt), nil~ ** Processing line: ~ assert.equal! (args.fn.gt infinity), nil~ ** Processing line: ~ assert.equal! (args.fn.gt nan), nil~ ** Processing line: ~ assert.equal! (args.fn.gt 8, 9, 10), 10~ ** Processing line: ~ assert.equal! (args.fn.gt [8, 9, [10]]), 10~ ** Processing line: ~ assert.equal! (args.fn.gt 10, 10), nil~ ** Processing line: ~ assert.equal! (args.fn.gt 10, 10), nil~ ** Processing line: ~ assert.equal! (args.fn.gt 10, 9), nil~ ** Processing line: ~ assert.equal! (args.fn.> 8, 9, 10), 10~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_gte args, assert~ ** Processing line: ~ assert.equal! (args.fn.gte 1), 1~ ** Processing line: ~ assert.equal! (args.fn.gte), nil~ ** Processing line: ~ assert.equal! (args.fn.gte infinity), nil~ ** Processing line: ~ assert.equal! (args.fn.gte nan), nil~ ** Processing line: ~ assert.equal! (args.fn.gte 8, 9, 10), 10~ ** Processing line: ~ assert.equal! (args.fn.gte 10, 10), 10~ ** Processing line: ~ assert.equal! (args.fn.gte 8, 9, [10]), 10~ ** Processing line: ~ assert.equal! (args.fn.gte 10, 9), nil~ ** Processing line: ~ assert.equal! (args.fn.>= 8, 9, 10), 10~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def test_acopy args, assert~ ** Processing line: ~ orig = [1, 2, 3]~ ** Processing line: ~ clone = args.fn.acopy orig~ ** Processing line: ~ assert.equal! clone, [1, 2, 3]~ ** Processing line: ~ assert.equal! clone, orig~ ** Processing line: ~ assert.not_equal! clone.object_id, orig.object_id~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_aget args, assert~ ** Processing line: ~ assert.equal! (args.fn.aget [:a, :b, :c], 1), :b~ ** Processing line: ~ assert.equal! (args.fn.aget [:a, :b, :c], nil), nil~ ** Processing line: ~ assert.equal! (args.fn.aget nil, 1), nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_alength args, assert~ ** Processing line: ~ assert.equal! (args.fn.alength [:a, :b, :c]), 3~ ** Processing line: ~ assert.equal! (args.fn.alength nil), nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_amap args, assert~ ** Processing line: ~ inc = lambda { |i| i + 1 }~ ** Processing line: ~ ary = [1, 2, 3]~ ** Processing line: ~ assert.equal! (args.fn.amap ary, inc), [2, 3, 4]~ ** Processing line: ~ assert.equal! (args.fn.amap nil, inc), nil~ ** Processing line: ~ assert.equal! (args.fn.amap ary, nil), nil~ ** Processing line: ~ assert.equal! (args.fn.amap ary, inc).class, Array~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_and args, assert~ ** Processing line: ~ assert.equal! (args.fn.and 1, 2, 3, 4), 4~ ** Processing line: ~ assert.equal! (args.fn.and 1, 2, nil, 4), nil~ ** Processing line: ~ assert.equal! (args.fn.and), true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_or args, assert~ ** Processing line: ~ assert.equal! (args.fn.or 1, 2, 3, 4), 1~ ** Processing line: ~ assert.equal! (args.fn.or 1, 2, nil, 4), 1~ ** Processing line: ~ assert.equal! (args.fn.or), nil~ ** Processing line: ~ assert.equal! (args.fn.or nil, nil, false, 5, 10), 5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_eq_eq args, assert~ ** Processing line: ~ assert.equal! (args.fn.eq?), true~ ** Processing line: ~ assert.equal! (args.fn.eq? 1, 0), false~ ** Processing line: ~ assert.equal! (args.fn.eq? 1, 1, 1), true~ ** Processing line: ~ assert.equal! (args.fn.== 1, 1, 1), true~ ** Processing line: ~ assert.equal! (args.fn.== nil, nil), true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_apply args, assert~ ** Processing line: ~ assert.equal! (args.fn.and [nil, nil, nil]), [nil, nil, nil]~ ** Processing line: ~ assert.equal! (args.fn.apply [nil, nil, nil], args.fn.method(:and)), nil~ ** Processing line: ~ and_lambda = lambda {|*xs| args.fn.and(*xs)}~ ** Processing line: ~ assert.equal! (args.fn.apply [nil, nil, nil], and_lambda), nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_areduce args, assert~ ** Processing line: ~ assert.equal! (args.fn.areduce [1, 2, 3], 0, lambda { |i, a| i + a }), 6~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_array_hash args, assert~ ** Processing line: ~ assert.equal! (args.fn.array_hash :a, 1, :b, 2), { a: 1, b: 2 }~ ** Processing line: ~ assert.equal! (args.fn.array_hash), { }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Unit Tests - gen_docs.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - gen_docs.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - gen_docs.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/gen_docs.rb~ ** Processing line: ~ # ./dragonruby mygame --eval samples/99_zz_gtk_unit_tests/gen_docs.rb --no-tick~ ** Processing line: ~ Kernel.export_docs!~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Unit Tests - geometry_tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - geometry_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - geometry_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/geometry_tests.rb~ ** Processing line: ~ begin :shared~ ** Processing line: ~ def primitive_representations x, y, w, h~ ** Processing line: ~ [~ ** Processing line: ~ [x, y, w, h],~ ** Processing line: ~ { x: x, y: y, w: w, h: h },~ ** Processing line: ~ RectForTest.new(x, y, w, h)~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class RectForTest~ ** Processing line: ~ attr_sprite~ ** Processing line: ~~ ** Processing line: ~ def initialize x, y, w, h~ ** Processing line: ~ @x = x~ ** Processing line: ~ @y = y~ ** Processing line: ~ @w = w~ ** Processing line: ~ @h = h~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ "RectForTest: #{[x, y, w, h]}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :intersect_rect?~ ** Processing line: ~ def test_intersect_rect_point args, assert~ ** Processing line: ~ assert.true! [16, 13].intersect_rect?([13, 12, 4, 4]), "point intersects with rect."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_intersect_rect args, assert~ ** Processing line: ~ intersecting = primitive_representations(0, 0, 100, 100) +~ ** Processing line: ~ primitive_representations(20, 20, 20, 20)~ ** Processing line: ~~ ** Processing line: ~ intersecting.product(intersecting).each do |rect_one, rect_two|~ ** Processing line: ~ assert.true! rect_one.intersect_rect?(rect_two),~ ** Processing line: ~ "intersect_rect? assertion failed for #{rect_one}, #{rect_two} (expected true)."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ not_intersecting = [~ ** Processing line: ~ [ 0, 0, 5, 5],~ ** Processing line: ~ { x: 10, y: 10, w: 5, h: 5 },~ ** Processing line: ~ RectForTest.new(20, 20, 5, 5)~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ not_intersecting.product(not_intersecting)~ ** Processing line: ~ .reject { |rect_one, rect_two| rect_one == rect_two }~ ** Processing line: ~ .each do |rect_one, rect_two|~ ** Processing line: ~ assert.false! rect_one.intersect_rect?(rect_two),~ ** Processing line: ~ "intersect_rect? assertion failed for #{rect_one}, #{rect_two} (expected false)."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :inside_rect?~ ** Processing line: ~ def assert_inside_rect outer: nil, inner: nil, expected: nil, assert: nil~ ** Processing line: ~ assert.true! inner.inside_rect?(outer) == expected,~ ** Processing line: ~ "inside_rect? assertion failed for outer: #{outer} inner: #{inner} (expected #{expected})."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_inside_rect args, assert~ ** Processing line: ~ outer_rects = primitive_representations(0, 0, 10, 10)~ ** Processing line: ~ inner_rects = primitive_representations(1, 1, 5, 5)~ ** Processing line: ~ primitive_representations(0, 0, 10, 10).product(primitive_representations(1, 1, 5, 5))~ ** Processing line: ~ .each do |outer, inner|~ ** Processing line: ~ assert_inside_rect outer: outer, inner: inner,~ ** Processing line: ~ expected: true, assert: assert~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :angle_to~ ** Processing line: ~ def test_angle_to args, assert~ ** Processing line: ~ origins = primitive_representations(0, 0, 0, 0)~ ** Processing line: ~ rights = primitive_representations(1, 0, 0, 0)~ ** Processing line: ~ aboves = primitive_representations(0, 1, 0, 0)~ ** Processing line: ~~ ** Processing line: ~ origins.product(aboves).each do |origin, above|~ ** Processing line: ~ assert.equal! origin.angle_to(above), 90,~ ** Processing line: ~ "A point directly above should be 90 degrees."~ ** Processing line: ~~ ** Processing line: ~ assert.equal! above.angle_from(origin), 90,~ ** Processing line: ~ "A point coming from above should be 90 degrees."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ origins.product(rights).each do |origin, right|~ ** Processing line: ~ assert.equal! origin.angle_to(right) % 360, 0,~ ** Processing line: ~ "A point directly to the right should be 0 degrees."~ ** Processing line: ~~ ** Processing line: ~ assert.equal! right.angle_from(origin) % 360, 0,~ ** Processing line: ~ "A point coming from the right should be 0 degrees."~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :scale_rect~ ** Processing line: ~ def test_scale_rect args, assert~ ** Processing line: ~ assert.equal! [0, 0, 100, 100].scale_rect(0.5, 0.5),~ ** Processing line: ~ [25.0, 25.0, 50.0, 50.0]~ ** Processing line: ~~ ** Processing line: ~ assert.equal! [0, 0, 100, 100].scale_rect(0.5),~ ** Processing line: ~ [0.0, 0.0, 50.0, 50.0]~ ** Processing line: ~~ ** Processing line: ~ assert.equal! [0, 0, 100, 100].scale_rect_extended(percentage_x: 0.5, percentage_y: 0.5, anchor_x: 0.5, anchor_y: 0.5),~ ** Processing line: ~ [25.0, 25.0, 50.0, 50.0]~ ** Processing line: ~~ ** Processing line: ~ assert.equal! [0, 0, 100, 100].scale_rect_extended(percentage_x: 0.5, percentage_y: 0.5, anchor_x: 0, anchor_y: 0),~ ** Processing line: ~ [0.0, 0.0, 50.0, 50.0]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset 100~ ** Processing line: ~ $gtk.log_level = :off~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Unit Tests - http_tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - http_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - http_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/http_tests.rb~ ** Processing line: ~ def try_assert_or_schedule args, assert~ ** Processing line: ~ if $result[:complete]~ ** Processing line: ~ log_info "Request completed! Verifying."~ ** Processing line: ~ if $result[:http_response_code] != 200~ ** Processing line: ~ log_info "The request yielded a result of #{$result[:http_response_code]} instead of 200."~ ** Processing line: ~ exit~ ** Processing line: ~ end~ ** Processing line: ~ log_info ":try_assert_or_schedule succeeded!"~ ** Processing line: ~ else~ ** Processing line: ~ args.gtk.schedule_callback Kernel.tick_count + 10 do~ ** Processing line: ~ try_assert_or_schedule args, assert~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_http args, assert~ ** Processing line: ~ $result = $gtk.http_get 'http://dragonruby.org'~ ** Processing line: ~ try_assert_or_schedule args, assert~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset 100~ ** Processing line: ~ $gtk.log_level = :off~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Unit Tests - nil_coercion_tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - nil_coercion_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - nil_coercion_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/nil_coercion_tests.rb~ ** Processing line: ~ # numbers~ ** Processing line: ~ def test_open_entity_add_number args, assert~ ** Processing line: ~ assert.nil! args.state.i_value~ ** Processing line: ~ args.state.i_value += 5~ ** Processing line: ~ assert.equal! args.state.i_value, 5~ ** Processing line: ~~ ** Processing line: ~ assert.nil! args.state.f_value~ ** Processing line: ~ args.state.f_value += 5.5~ ** Processing line: ~ assert.equal! args.state.f_value, 5.5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_open_entity_subtract_number args, assert~ ** Processing line: ~ assert.nil! args.state.i_value~ ** Processing line: ~ args.state.i_value -= 5~ ** Processing line: ~ assert.equal! args.state.i_value, -5~ ** Processing line: ~~ ** Processing line: ~ assert.nil! args.state.f_value~ ** Processing line: ~ args.state.f_value -= 5.5~ ** Processing line: ~ assert.equal! args.state.f_value, -5.5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_open_entity_multiply_number args, assert~ ** Processing line: ~ assert.nil! args.state.i_value~ ** Processing line: ~ args.state.i_value *= 5~ ** Processing line: ~ assert.equal! args.state.i_value, 0~ ** Processing line: ~~ ** Processing line: ~ assert.nil! args.state.f_value~ ** Processing line: ~ args.state.f_value *= 5.5~ ** Processing line: ~ assert.equal! args.state.f_value, 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_open_entity_divide_number args, assert~ ** Processing line: ~ assert.nil! args.state.i_value~ ** Processing line: ~ args.state.i_value /= 5~ ** Processing line: ~ assert.equal! args.state.i_value, 0~ ** Processing line: ~~ ** Processing line: ~ assert.nil! args.state.f_value~ ** Processing line: ~ args.state.f_value /= 5.5~ ** Processing line: ~ assert.equal! args.state.f_value, 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # array~ ** Processing line: ~ def test_open_entity_add_array args, assert~ ** Processing line: ~ assert.nil! args.state.values~ ** Processing line: ~ args.state.values += [:a, :b, :c]~ ** Processing line: ~ assert.equal! args.state.values, [:a, :b, :c]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_open_entity_subtract_array args, assert~ ** Processing line: ~ assert.nil! args.state.values~ ** Processing line: ~ args.state.values -= [:a, :b, :c]~ ** Processing line: ~ assert.equal! args.state.values, []~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_open_entity_shovel_array args, assert~ ** Processing line: ~ assert.nil! args.state.values~ ** Processing line: ~ args.state.values << :a~ ** Processing line: ~ assert.equal! args.state.values, [:a]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_open_entity_enumerate args, assert~ ** Processing line: ~ assert.nil! args.state.values~ ** Processing line: ~ args.state.values = args.state.values.map_with_index { |i| i }~ ** Processing line: ~ assert.equal! args.state.values, []~ ** Processing line: ~~ ** Processing line: ~ assert.nil! args.state.values_2~ ** Processing line: ~ args.state.values_2 = args.state.values_2.map { |i| i }~ ** Processing line: ~ assert.equal! args.state.values_2, []~ ** Processing line: ~~ ** Processing line: ~ assert.nil! args.state.values_3~ ** Processing line: ~ args.state.values_3 = args.state.values_3.flat_map { |i| i }~ ** Processing line: ~ assert.equal! args.state.values_3, []~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # hashes~ ** Processing line: ~ def test_open_entity_indexer args, assert~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ assert.nil! args.state.values~ ** Processing line: ~ args.state.values[:test] = :value~ ** Processing line: ~ assert.equal! args.state.values.to_s, { entity_id: 1, entity_name: :values, entity_keys_by_ref: {}, test: :value }.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # bug~ ** Processing line: ~ def test_open_entity_nil_bug args, assert~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ args.state.foo.a~ ** Processing line: ~ args.state.foo.b~ ** Processing line: ~ @hello[:foobar]~ ** Processing line: ~ assert.nil! args.state.foo.a, "a was not nil."~ ** Processing line: ~ # the line below fails~ ** Processing line: ~ # assert.nil! args.state.foo.b, "b was not nil."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Unit Tests - object_to_primitive_tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - object_to_primitive_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - object_to_primitive_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/object_to_primitive_tests.rb~ ** Processing line: ~ class PlayerSpriteForTest~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_array_to_sprite args, assert~ ** Processing line: ~ array = [[0, 0, 100, 100, "test.png"]].sprites~ ** Processing line: ~ puts "No exception was thrown. Sweet!"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_class_to_sprite args, assert~ ** Processing line: ~ array = [PlayerSprite.new].sprites~ ** Processing line: ~ assert.true! array.first.is_a?(PlayerSprite)~ ** Processing line: ~ puts "No exception was thrown. Sweet!"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset 100~ ** Processing line: ~ $gtk.log_level = :off~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Unit Tests - parsing_tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - parsing_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - parsing_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/parsing_tests.rb~ ** Processing line: ~ def test_parse_json args, assert~ ** Processing line: ~ result = args.gtk.parse_json '{ "name": "John Doe", "aliases": ["JD"] }'~ ** Processing line: ~ assert.equal! result, { "name"=>"John Doe", "aliases"=>["JD"] }, "Parsing JSON failed."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_parse_xml args, assert~ ** Processing line: ~ result = args.gtk.parse_xml <<-S~ ** Processing line: ~ ~ ** Processing line: ~ John Doe~ ** Processing line: ~ ~ ** Processing line: ~ S~ ** Processing line: ~~ ** Processing line: ~ expected = {:type=>:element,~ ** Processing line: ~ :name=>nil,~ ** Processing line: ~ :children=>[{:type=>:element,~ ** Processing line: ~ :name=>"Person",~ ** Processing line: ~ :children=>[{:type=>:element,~ ** Processing line: ~ :name=>"Name",~ ** Processing line: ~ :children=>[{:type=>:content,~ ** Processing line: ~ :data=>"John Doe"}]}],~ ** Processing line: ~ :attributes=>{"id"=>"100"}}]}~ ** Processing line: ~~ ** Processing line: ~ assert.equal! result, expected, "Parsing xml failed."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset 100~ ** Processing line: ~ $gtk.log_level = :off~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Unit Tests - pretty_format_tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - pretty_format_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - pretty_format_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/pretty_format_tests.rb~ ** Processing line: ~ def H opts~ ** Processing line: ~ opts~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def A *opts~ ** Processing line: ~ opts~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def assert_format args, assert, hash, expected~ ** Processing line: ~ actual = args.fn.pretty_format hash~ ** Processing line: ~ assert.are_equal! actual, expected~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_pretty_print args, assert~ ** Processing line: ~ # =============================~ ** Processing line: ~ # hash with single value~ ** Processing line: ~ # =============================~ ** Processing line: ~ input = (H first_name: "John")~ ** Processing line: ~ expected = <<-S~ ** Processing line: ~ {:first_name "John"}~ ** Processing line: ~ S~ ** Processing line: ~ (assert_format args, assert, input, expected)~ ** Processing line: ~~ ** Processing line: ~ # =============================~ ** Processing line: ~ # hash with two values~ ** Processing line: ~ # =============================~ ** Processing line: ~ input = (H first_name: "John", last_name: "Smith")~ ** Processing line: ~ expected = <<-S~ ** Processing line: ~ {:first_name "John"~ ** Processing line: ~ :last_name "Smith"}~ ** Processing line: ~ S~ ** Processing line: ~~ ** Processing line: ~ (assert_format args, assert, input, expected)~ ** Processing line: ~~ ** Processing line: ~ # =============================~ ** Processing line: ~ # hash with inner hash~ ** Processing line: ~ # =============================~ ** Processing line: ~ input = (H first_name: "John",~ ** Processing line: ~ last_name: "Smith",~ ** Processing line: ~ middle_initial: "I",~ ** Processing line: ~ so: (H first_name: "Pocahontas",~ ** Processing line: ~ last_name: "Tsenacommacah"),~ ** Processing line: ~ friends: (A (H first_name: "Side", last_name: "Kick"),~ ** Processing line: ~ (H first_name: "Tim", last_name: "Wizard")))~ ** Processing line: ~ expected = <<-S~ ** Processing line: ~ {:first_name "John"~ ** Processing line: ~ :last_name "Smith"~ ** Processing line: ~ :middle_initial "I"~ ** Processing line: ~ :so {:first_name "Pocahontas"~ ** Processing line: ~ :last_name "Tsenacommacah"}~ ** Processing line: ~ :friends [{:first_name "Side"~ ** Processing line: ~ :last_name "Kick"}~ ** Processing line: ~ {:first_name "Tim"~ ** Processing line: ~ :last_name "Wizard"}]}~ ** Processing line: ~ S~ ** Processing line: ~~ ** Processing line: ~ (assert_format args, assert, input, expected)~ ** Processing line: ~~ ** Processing line: ~ # =============================~ ** Processing line: ~ # array with one value~ ** Processing line: ~ # =============================~ ** Processing line: ~ input = (A 1)~ ** Processing line: ~ expected = <<-S~ ** Processing line: ~ [1]~ ** Processing line: ~ S~ ** Processing line: ~ (assert_format args, assert, input, expected)~ ** Processing line: ~~ ** Processing line: ~ # =============================~ ** Processing line: ~ # array with multiple values~ ** Processing line: ~ # =============================~ ** Processing line: ~ input = (A 1, 2, 3)~ ** Processing line: ~ expected = <<-S~ ** Processing line: ~ [1~ ** Processing line: ~ 2~ ** Processing line: ~ 3]~ ** Processing line: ~ S~ ** Processing line: ~ (assert_format args, assert, input, expected)~ ** Processing line: ~~ ** Processing line: ~ # =============================~ ** Processing line: ~ # array with multiple values hashes~ ** Processing line: ~ # =============================~ ** Processing line: ~ input = (A (H first_name: "Side", last_name: "Kick"),~ ** Processing line: ~ (H first_name: "Tim", last_name: "Wizard"))~ ** Processing line: ~ expected = <<-S~ ** Processing line: ~ [{:first_name "Side"~ ** Processing line: ~ :last_name "Kick"}~ ** Processing line: ~ {:first_name "Tim"~ ** Processing line: ~ :last_name "Wizard"}]~ ** Processing line: ~ S~ ** Processing line: ~~ ** Processing line: ~ (assert_format args, assert, input, expected)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_nested_nested args, assert~ ** Processing line: ~ # =============================~ ** Processing line: ~ # nested array in nested hash~ ** Processing line: ~ # =============================~ ** Processing line: ~ input = (H type: :root,~ ** Processing line: ~ text: "Root",~ ** Processing line: ~ children: (A (H level: 1,~ ** Processing line: ~ text: "Level 1",~ ** Processing line: ~ children: (A (H level: 2,~ ** Processing line: ~ text: "Level 2",~ ** Processing line: ~ children: [])))))~ ** Processing line: ~~ ** Processing line: ~ expected = <<-S~ ** Processing line: ~ {:type :root~ ** Processing line: ~ :text "Root"~ ** Processing line: ~ :children [{:level 1~ ** Processing line: ~ :text "Level 1"~ ** Processing line: ~ :children [{:level 2~ ** Processing line: ~ :text "Level 2"~ ** Processing line: ~ :children []}]}]}~ ** Processing line: ~~ ** Processing line: ~ S~ ** Processing line: ~~ ** Processing line: ~ (assert_format args, assert, input, expected)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_scene args, assert~ ** Processing line: ~ script = <<-S~ ** Processing line: ~ * Scene 1~ ** Processing line: ~ ** Narrator~ ** Processing line: ~ They say happy endings don't exist.~ ** Processing line: ~ ** Narrator~ ** Processing line: ~ They say true love is a lie.~ ** Processing line: ~ S~ ** Processing line: ~ input = parse_org args, script~ ** Processing line: ~ puts (args.fn.pretty_format input)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Unit Tests - require_tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - require_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - require_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/require_tests.rb~ ** Processing line: ~ def write_src path, src~ ** Processing line: ~ $gtk.write_file path, src~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ write_src 'app/unit_testing_game.rb', <<-S~ ** Processing line: ~ module UnitTesting~ ** Processing line: ~ class Game~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ S~ ** Processing line: ~~ ** Processing line: ~ write_src 'lib/unit_testing_lib.rb', <<-S~ ** Processing line: ~ module UnitTesting~ ** Processing line: ~ class Lib~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ S~ ** Processing line: ~~ ** Processing line: ~ write_src 'app/nested/unit_testing_nested.rb', <<-S~ ** Processing line: ~ module UnitTesting~ ** Processing line: ~ class Nested~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ S~ ** Processing line: ~~ ** Processing line: ~ require 'app/unit_testing_game.rb'~ ** Processing line: ~ require 'app/nested/unit_testing_nested.rb'~ ** Processing line: ~ require 'lib/unit_testing_lib.rb'~ ** Processing line: ~~ ** Processing line: ~ def test_require args, assert~ ** Processing line: ~ UnitTesting::Game.new~ ** Processing line: ~ UnitTesting::Lib.new~ ** Processing line: ~ UnitTesting::Nested.new~ ** Processing line: ~ $gtk.exec 'rm ./mygame/app/unit_testing_game.rb'~ ** Processing line: ~ $gtk.exec 'rm ./mygame/app/nested/unit_testing_nested.rb'~ ** Processing line: ~ $gtk.exec 'rm ./mygame/lib/unit_testing_lib.rb'~ ** Processing line: ~ assert.ok!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Unit Tests - serialize_deserialize_tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - serialize_deserialize_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - serialize_deserialize_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/serialize_deserialize_tests.rb~ ** Processing line: ~ def test_serialize args, assert~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ args.state.player_one = "test"~ ** Processing line: ~ result = args.gtk.serialize_state args.state~ ** Processing line: ~ assert.equal! result, "{:entity_id=>4, :entity_keys_by_ref=>{}, :tick_count=>-1, :player_one=>\"test\"}"~ ** Processing line: ~~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ args.gtk.write_file 'state.txt', ''~ ** Processing line: ~ result = args.gtk.serialize_state 'state.txt', args.state~ ** Processing line: ~ assert.equal! result, "{:entity_id=>4, :entity_keys_by_ref=>{}, :tick_count=>-1, :player_one=>\"test\"}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_deserialize args, assert~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ result = args.gtk.deserialize_state '{:entity_id=>3, :tick_count=>-1, :player_one=>"test"}'~ ** Processing line: ~ assert.equal! result.player_one, "test"~ ** Processing line: ~~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ args.gtk.write_file 'state.txt', '{:entity_id=>3, :tick_count=>-1, :player_one=>"test"}'~ ** Processing line: ~ result = args.gtk.deserialize_state 'state.txt'~ ** Processing line: ~ assert.equal! result.player_one, "test"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_very_large_serialization args, assert~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ size = 3000~ ** Processing line: ~ size.map_with_index do |i|~ ** Processing line: ~ args.state.send("k#{i}=".to_sym, i)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ result = args.gtk.serialize_state args.state~ ** Processing line: ~ assert.true! (args.gtk.console.log.join.include? "unlikely a string this large will deserialize correctly")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_strict_entity_serialization args, assert~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ args.state.player_one = args.state.new_entity(:player, name: "Ryu")~ ** Processing line: ~ args.state.player_two = args.state.new_entity_strict(:player_strict, name: "Ken")~ ** Processing line: ~~ ** Processing line: ~ serialized_state = args.gtk.serialize_state args.state~ ** Processing line: ~ assert.equal! serialized_state, '{:entity_id=>1, :entity_keys_by_ref=>{}, :tick_count=>-1, :player_one=>{:entity_id=>1, :entity_name=>:player, :entity_keys_by_ref=>{}, :entity_type=>:player, :created_at=>-1, :global_created_at=>-1, :name=>"Ryu"}, :player_two=>{:entity_id=>3, :entity_name=>:player_strict, :entity_type=>:player_strict, :created_at=>-1, :global_created_at_elapsed=>-1, :entity_strict=>true, :entity_keys_by_ref=>{:entity_type=>:entity_name, :global_created_at_elapsed=>:created_at}, :name=>"Ken"}}'~ ** Processing line: ~~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ deserialize_state = args.gtk.deserialize_state serialized_state~ ** Processing line: ~~ ** Processing line: ~ assert.equal! args.state.player_one.name, deserialize_state.player_one.name~ ** Processing line: ~ assert.true! args.state.player_one.is_a? GTK::OpenEntity~ ** Processing line: ~~ ** Processing line: ~ assert.equal! args.state.player_two.name, deserialize_state.player_two.name~ ** Processing line: ~ assert.true! args.state.player_two.is_a? GTK::StrictEntity~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_strict_entity_serialization_with_nil args, assert~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ args.state.player_one = args.state.new_entity(:player, name: "Ryu")~ ** Processing line: ~ args.state.player_two = args.state.new_entity_strict(:player_strict, name: "Ken", blood_type: nil)~ ** Processing line: ~~ ** Processing line: ~ serialized_state = args.gtk.serialize_state args.state~ ** Processing line: ~ assert.equal! serialized_state, '{:entity_id=>7, :entity_keys_by_ref=>{}, :tick_count=>-1, :player_one=>{:entity_id=>1, :entity_name=>:player, :entity_keys_by_ref=>{}, :entity_type=>:player, :created_at=>-1, :global_created_at=>-1, :name=>"Ryu"}, :player_two=>{:entity_id=>2, :entity_name=>:player_strict, :entity_type=>:player_strict, :created_at=>-1, :global_created_at_elapsed=>-1, :entity_strict=>true, :entity_keys_by_ref=>{:entity_type=>:entity_name, :global_created_at_elapsed=>:created_at}, :name=>"Ken", :blood_type=>nil}}'~ ** Processing line: ~~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ deserialized_state = args.gtk.deserialize_state serialized_state~ ** Processing line: ~~ ** Processing line: ~ assert.equal! args.state.player_one.name, deserialized_state.player_one.name~ ** Processing line: ~ assert.true! args.state.player_one.is_a? GTK::OpenEntity~ ** Processing line: ~~ ** Processing line: ~ assert.equal! args.state.player_two.name, deserialized_state.player_two.name~ ** Processing line: ~ assert.equal! args.state.player_two.blood_type, deserialized_state.player_two.blood_type~ ** Processing line: ~ assert.equal! deserialized_state.player_two.blood_type, nil~ ** Processing line: ~ assert.true! args.state.player_two.is_a? GTK::StrictEntity~ ** Processing line: ~~ ** Processing line: ~ deserialized_state.player_two.blood_type = :O~ ** Processing line: ~ assert.equal! deserialized_state.player_two.blood_type, :O~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_multiple_strict_entities args, assert~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ args.state.player = args.state.new_entity_strict(:player_one, name: "Ryu")~ ** Processing line: ~ args.state.enemy = args.state.new_entity_strict(:enemy, name: "Bison", other_property: 'extra mean')~ ** Processing line: ~~ ** Processing line: ~ serialized_state = args.gtk.serialize_state args.state~ ** Processing line: ~~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ deserialized_state = args.gtk.deserialize_state serialized_state~ ** Processing line: ~~ ** Processing line: ~ assert.equal! deserialized_state.player.name, "Ryu"~ ** Processing line: ~ assert.equal! deserialized_state.enemy.other_property, "extra mean"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_by_reference_state args, assert~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ args.state.a = { name: "Jane Doe" }~ ** Processing line: ~ args.state.b = args.state.a~ ** Processing line: ~ assert.equal! args.state.a.object_id, args.state.b.object_id~ ** Processing line: ~ serialized_state = args.gtk.serialize_state args.state~ ** Processing line: ~~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ deserialized_state = args.gtk.deserialize_state serialized_state~ ** Processing line: ~ assert.equal! deserialized_state.a.object_id, deserialized_state.b.object_id~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_by_reference_state_strict_entities args, assert~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ args.state.a = { name: "Jane Doe" }~ ** Processing line: ~ args.state.strict_entity = args.state.new_entity_strict(:couple) do |e|~ ** Processing line: ~ e.one = args.state.new_entity_strict(:person, name: "Jane")~ ** Processing line: ~ e.two = e.one~ ** Processing line: ~ end~ ** Processing line: ~ assert.equal! args.state.strict_entity.one, args.state.strict_entity.two~ ** Processing line: ~ serialized_state = args.gtk.serialize_state args.state~ ** Processing line: ~~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ deserialized_state = args.gtk.deserialize_state serialized_state~ ** Processing line: ~ assert.equal! deserialized_state.strict_entity.one, deserialized_state.strict_entity.two~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_serialization_excludes_thrash_count args, assert~ ** Processing line: ~ GTK::Entity.__reset_id__!~ ** Processing line: ~ args.state.player.name = "Ryu"~ ** Processing line: ~ # force a nil pun~ ** Processing line: ~ if args.state.player.age > 30~ ** Processing line: ~ end~ ** Processing line: ~ assert.equal! args.state.player.as_hash[:__thrash_count__][:>], 1~ ** Processing line: ~ result = args.gtk.serialize_state args.state~ ** Processing line: ~ assert.false! (result.include? "__thrash_count__"),~ ** Processing line: ~ "The __thrash_count__ key exists in state when it shouldn't have."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Unit Tests - state_serialization_experimental_tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - state_serialization_experimental_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - state_serialization_experimental_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/state_serialization_experimental_tests.rb~ ** Processing line: ~ MAX_CODE_GEN_LENGTH = 50~ ** Processing line: ~~ ** Processing line: ~ # NOTE: This is experimental/advanced stuff.~ ** Processing line: ~ def needs_partitioning? target~ ** Processing line: ~ target[:value].to_s.length > MAX_CODE_GEN_LENGTH~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def partition target~ ** Processing line: ~ return [] unless needs_partitioning? target~ ** Processing line: ~ if target[:value].is_a? GTK::OpenEntity~ ** Processing line: ~ target[:value] = target[:value].hash~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ results = []~ ** Processing line: ~ idx = 0~ ** Processing line: ~ left, right = target[:value].partition do~ ** Processing line: ~ idx += 1~ ** Processing line: ~ idx.even?~ ** Processing line: ~ end~ ** Processing line: ~ left, right = Hash[left], Hash[right]~ ** Processing line: ~ left = { value: left }~ ** Processing line: ~ right = { value: right}~ ** Processing line: ~ [left, right]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def add_partition target, path, aggregate, final_result~ ** Processing line: ~ partitions = partition target~ ** Processing line: ~ partitions.each do |part|~ ** Processing line: ~ if needs_partitioning? part~ ** Processing line: ~ if part[:value].keys.length == 1~ ** Processing line: ~ first_key = part[:value].keys[0]~ ** Processing line: ~ new_part = { value: part[:value][first_key] }~ ** Processing line: ~ path.push first_key~ ** Processing line: ~ add_partition new_part, path, aggregate, final_result~ ** Processing line: ~ path.pop~ ** Processing line: ~ else~ ** Processing line: ~ add_partition part, path, aggregate, final_result~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ final_result << { value: { __path__: [*path] } }~ ** Processing line: ~ final_result << { value: part[:value] }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def state_to_string state~ ** Processing line: ~ parts_queue = []~ ** Processing line: ~ final_queue = []~ ** Processing line: ~ add_partition({ value: state.hash },~ ** Processing line: ~ [],~ ** Processing line: ~ parts_queue,~ ** Processing line: ~ final_queue)~ ** Processing line: ~ final_queue.reject {|i| i[:value].keys.length == 0}.map do |i|~ ** Processing line: ~ i[:value].to_s~ ** Processing line: ~ end.join("\n#==================================================#\n")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def state_from_string string~ ** Processing line: ~ Kernel.eval("$load_data = {}")~ ** Processing line: ~ lines = string.split("\n#==================================================#\n")~ ** Processing line: ~ lines.each do |l|~ ** Processing line: ~ puts "todo: #{l}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ GTK::OpenEntity.parse_from_hash $load_data~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_save_and_load args, assert~ ** Processing line: ~ args.state.item_1.name = "Jane"~ ** Processing line: ~ string = state_to_string args.state~ ** Processing line: ~ state = state_from_string string~ ** Processing line: ~ assert.equal! args.state.item_1.name, state.item_1.name~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_save_and_load_big args, assert~ ** Processing line: ~ size = 1000~ ** Processing line: ~ size.map_with_index do |i|~ ** Processing line: ~ args.state.send("k#{i}=".to_sym, i)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ string = state_to_string args.state~ ** Processing line: ~ state = state_from_string string~ ** Processing line: ~ size.map_with_index do |i|~ ** Processing line: ~ assert.equal! args.state.send("k#{i}".to_sym), state.send("k#{i}".to_sym)~ ** Processing line: ~ assert.equal! args.state.send("k#{i}".to_sym), i~ ** Processing line: ~ assert.equal! state.send("k#{i}".to_sym), i~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_save_and_load_big_nested args, assert~ ** Processing line: ~ args.state.player_one.friend.nested_hash.k0 = 0~ ** Processing line: ~ args.state.player_one.friend.nested_hash.k1 = 1~ ** Processing line: ~ args.state.player_one.friend.nested_hash.k2 = 2~ ** Processing line: ~ args.state.player_one.friend.nested_hash.k3 = 3~ ** Processing line: ~ args.state.player_one.friend.nested_hash.k4 = 4~ ** Processing line: ~ args.state.player_one.friend.nested_hash.k5 = 5~ ** Processing line: ~ args.state.player_one.friend.nested_hash.k6 = 6~ ** Processing line: ~ args.state.player_one.friend.nested_hash.k7 = 7~ ** Processing line: ~ args.state.player_one.friend.nested_hash.k8 = 8~ ** Processing line: ~ args.state.player_one.friend.nested_hash.k9 = 9~ ** Processing line: ~ string = state_to_string args.state~ ** Processing line: ~ state = state_from_string string~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset 100~ ** Processing line: ~ $gtk.log_level = :off~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Advanced Debugging - Unit Tests - suggest_autocompletion_tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - suggest_autocompletion_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Advanced Debugging - Unit Tests - suggest_autocompletion_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/10_advanced_debugging/03_unit_tests/suggest_autocompletion_tests.rb~ ** Processing line: ~ def default_suggest_autocompletion args~ ** Processing line: ~ {~ ** Processing line: ~ index: 4,~ ** Processing line: ~ text: "args.",~ ** Processing line: ~ __meta__: {~ ** Processing line: ~ other_options: [~ ** Processing line: ~ {~ ** Processing line: ~ index: Fixnum,~ ** Processing line: ~ file: "app/main.rb"~ ** Processing line: ~ }~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def assert_completion source, *expected~ ** Processing line: ~ results = suggest_autocompletion text: (source.strip.gsub ":cursor", ""),~ ** Processing line: ~ index: (source.strip.index ":cursor")~ ** Processing line: ~~ ** Processing line: ~ puts results~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_args_completion args, assert~ ** Processing line: ~ $gtk.write_file_root "autocomplete.txt", ($gtk.suggest_autocompletion text: <<-S, index: 128).join("\n")~ ** Processing line: ~ require 'app/game.rb'~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.gtk.suppress_mailbox = false~ ** Processing line: ~ $game ||= Game.new~ ** Processing line: ~ $game.args = args~ ** Processing line: ~ $game.args.~ ** Processing line: ~ $game.tick~ ** Processing line: ~ end~ ** Processing line: ~ S~ ** Processing line: ~~ ** Processing line: ~ puts "contents:"~ ** Processing line: ~ puts ($gtk.read_file "autocomplete.txt")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Http - Retrieve Images - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Http - Retrieve Images - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Http - Retrieve Images - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/11_http/01_retrieve_images/app/main.rb~ ** Processing line: ~ $gtk.register_cvar 'app.warn_seconds', "seconds to wait before starting", :uint, 11~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~~ ** Processing line: ~ # Show a warning at the start.~ ** Processing line: ~ args.state.warning_debounce ||= args.cvars['app.warn_seconds'].value * 60~ ** Processing line: ~ if args.state.warning_debounce > 0~ ** Processing line: ~ args.state.warning_debounce -= 1~ ** Processing line: ~ args.outputs.labels << [640, 600, "This app shows random images from the Internet.", 10, 1, 255, 255, 255]~ ** Processing line: ~ args.outputs.labels << [640, 500, "Quit in the next few seconds if this is a problem.", 10, 1, 255, 255, 255]~ ** Processing line: ~ args.outputs.labels << [640, 350, "#{(args.state.warning_debounce / 60.0).to_i}", 10, 1, 255, 255, 255]~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.download_debounce ||= 0 # start immediately, reset to non zero later.~ ** Processing line: ~ args.state.photos ||= []~ ** Processing line: ~~ ** Processing line: ~ # Put a little pause between each download.~ ** Processing line: ~ if args.state.download.nil?~ ** Processing line: ~ if args.state.download_debounce > 0~ ** Processing line: ~ args.state.download_debounce -= 1~ ** Processing line: ~ else~ ** Processing line: ~ args.state.download = $gtk.http_get 'https://picsum.photos/200/300.jpg'~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if !args.state.download.nil?~ ** Processing line: ~ if args.state.download[:complete]~ ** Processing line: ~ if args.state.download[:http_response_code] == 200~ ** Processing line: ~ fname = "sprites/#{args.state.photos.length}.jpg"~ ** Processing line: ~ $gtk.write_file fname, args.state.download[:response_data]~ ** Processing line: ~ args.state.photos << [ 100 + rand(1080), 500 - rand(480), fname, rand(80) - 40 ]~ ** Processing line: ~ end~ ** Processing line: ~ args.state.download = nil~ ** Processing line: ~ args.state.download_debounce = (rand(3) + 2) * 60~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # draw any downloaded photos...~ ** Processing line: ~ args.state.photos.each { |i|~ ** Processing line: ~ args.outputs.primitives << [i[0], i[1], 200, 300, i[2], i[3]].sprite~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ # Draw a download progress bar...~ ** Processing line: ~ args.outputs.primitives << [0, 0, 1280, 30, 0, 0, 0, 255].solid~ ** Processing line: ~ if !args.state.download.nil?~ ** Processing line: ~ br = args.state.download[:response_read]~ ** Processing line: ~ total = args.state.download[:response_total]~ ** Processing line: ~ if total != 0~ ** Processing line: ~ pct = br.to_f / total.to_f~ ** Processing line: ~ args.outputs.primitives << [0, 0, 1280 * pct, 30, 0, 0, 255, 255].solid~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Http - In Game Web Server Http Get - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Http - In Game Web Server Http Get - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Http - In Game Web Server Http Get - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/11_http/02_in_game_web_server_http_get/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.port ||= 3000~ ** Processing line: ~ args.state.reqnum ||= 0~ ** Processing line: ~ # by default the embedded webserver runs on port 9001 (the port number is over 9000) and is disabled in a production build~ ** Processing line: ~ # to enable the http server in a production build, you need to manually start~ ** Processing line: ~ # the server up:~ ** Processing line: ~ args.gtk.start_server! port: args.state.port, enable_in_prod: true~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ args.outputs.labels << [640, 600, "Point your web browser at http://localhost:#{args.state.port}/", 10, 1, 255, 255, 255]~ ** Processing line: ~~ ** Processing line: ~ args.inputs.http_requests.each { |req|~ ** Processing line: ~ puts("METHOD: #{req.method}");~ ** Processing line: ~ puts("URI: #{req.uri}");~ ** Processing line: ~ puts("HEADERS:");~ ** Processing line: ~ req.headers.each { |k,v| puts(" #{k}: #{v}") }~ ** Processing line: ~~ ** Processing line: ~ if (req.uri == '/')~ ** Processing line: ~ # headers and body can be nil if you don't care about them.~ ** Processing line: ~ # If you don't set the Content-Type, it will default to~ ** Processing line: ~ # "text/html; charset=utf-8".~ ** Processing line: ~ # Don't set Content-Length; we'll ignore it and calculate it for you~ ** Processing line: ~ args.state.reqnum += 1~ ** Processing line: ~ req.respond 200, "hello

    This #{req.method} was request number #{args.state.reqnum}!

    \n", { 'X-DRGTK-header' => 'Powered by DragonRuby!' }~ ** Processing line: ~ else~ ** Processing line: ~ req.reject~ ** Processing line: ~ end~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Http - In Game Web Server Http Post - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Http - In Game Web Server Http Post - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Http - In Game Web Server Http Post - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/11_http/03_in_game_web_server_http_post/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ # defaults~ ** Processing line: ~ args.state.post_button = args.layout.rect(row: 0, col: 0, w: 5, h: 1).merge(text: "execute http_post")~ ** Processing line: ~ args.state.post_body_button = args.layout.rect(row: 1, col: 0, w: 5, h: 1).merge(text: "execute http_post_body")~ ** Processing line: ~ args.state.request_to_s ||= ""~ ** Processing line: ~ args.state.request_body ||= ""~ ** Processing line: ~~ ** Processing line: ~ # render~ ** Processing line: ~ args.state.post_button.yield_self do |b|~ ** Processing line: ~ args.outputs.borders << b~ ** Processing line: ~ args.outputs.labels << b.merge(text: b.text,~ ** Processing line: ~ y: b.y + 30,~ ** Processing line: ~ x: b.x + 10)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.post_body_button.yield_self do |b|~ ** Processing line: ~ args.outputs.borders << b~ ** Processing line: ~ args.outputs.labels << b.merge(text: b.text,~ ** Processing line: ~ y: b.y + 30,~ ** Processing line: ~ x: b.x + 10)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ draw_label args, 0, 6, "Request:", args.state.request_to_s~ ** Processing line: ~ draw_label args, 0, 14, "Request Body Unaltered:", args.state.request_body~ ** Processing line: ~~ ** Processing line: ~ # input~ ** Processing line: ~ if args.inputs.mouse.click~ ** Processing line: ~ # ============= HTTP_POST =============~ ** Processing line: ~ if (args.inputs.mouse.inside_rect? args.state.post_button)~ ** Processing line: ~ # ========= DATA TO SEND ===========~ ** Processing line: ~ form_fields = { "userId" => "#{Time.now.to_i}" }~ ** Processing line: ~ # ==================================~ ** Processing line: ~~ ** Processing line: ~ args.gtk.http_post "http://localhost:9001/testing",~ ** Processing line: ~ form_fields,~ ** Processing line: ~ ["Content-Type: application/x-www-form-urlencoded"]~ ** Processing line: ~~ ** Processing line: ~ args.gtk.notify! "http_post"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ============= HTTP_POST_BODY =============~ ** Processing line: ~ if (args.inputs.mouse.inside_rect? args.state.post_body_button)~ ** Processing line: ~ # =========== DATA TO SEND ==============~ ** Processing line: ~ json = "{ \"userId\": \"#{Time.now.to_i}\"}"~ ** Processing line: ~ # ==================================~ ** Processing line: ~~ ** Processing line: ~ args.gtk.http_post_body "http://localhost:9001/testing",~ ** Processing line: ~ json,~ ** Processing line: ~ ["Content-Type: application/json", "Content-Length: #{json.length}"]~ ** Processing line: ~~ ** Processing line: ~ args.gtk.notify! "http_post_body"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # calc~ ** Processing line: ~ args.inputs.http_requests.each do |r|~ ** Processing line: ~ puts "#{r}"~ ** Processing line: ~ if r.uri == "/testing"~ ** Processing line: ~ puts r~ ** Processing line: ~ args.state.request_to_s = "#{r}"~ ** Processing line: ~ args.state.request_body = r.raw_body~ ** Processing line: ~ r.respond 200, "ok"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw_label args, row, col, header, text~ ** Processing line: ~ label_pos = args.layout.rect(row: row, col: col, w: 0, h: 0)~ ** Processing line: ~ args.outputs.labels << "#{header}\n\n#{text}".wrapped_lines(80).map_with_index do |l, i|~ ** Processing line: ~ { x: label_pos.x, y: label_pos.y - (i * 15), text: l, size_enum: -2 }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** C Extensions - Basics - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~C Extensions - Basics - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~C Extensions - Basics - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/12_c_extensions/01_basics/app/main.rb~ ** Processing line: ~ $gtk.ffi_misc.gtk_dlopen("ext")~ ** Processing line: ~ include FFI::CExt~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.labels << [640, 500, "mouse.x = #{args.mouse.x.to_i}", 5, 1]~ ** Processing line: ~ args.outputs.labels << [640, 460, "square(mouse.x) = #{square(args.mouse.x.to_i)}", 5, 1]~ ** Processing line: ~ args.outputs.labels << [640, 420, "mouse.y = #{args.mouse.y.to_i}", 5, 1]~ ** Processing line: ~ args.outputs.labels << [640, 380, "square(mouse.y) = #{square(args.mouse.y.to_i)}", 5, 1]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** C Extensions - Intermediate - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~C Extensions - Intermediate - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~C Extensions - Intermediate - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/12_c_extensions/02_intermediate/app/main.rb~ ** Processing line: ~ $gtk.ffi_misc.gtk_dlopen("ext")~ ** Processing line: ~ include FFI::RE~ ** Processing line: ~~ ** Processing line: ~ def split_words(input)~ ** Processing line: ~ words = []~ ** Processing line: ~ last = IntPointer.new~ ** Processing line: ~ re = re_compile("\\w+")~ ** Processing line: ~ first = re_matchp(re, input, last)~ ** Processing line: ~ while first != -1~ ** Processing line: ~ words << input.slice(first, last.value)~ ** Processing line: ~ input = input.slice(last.value + first, input.length)~ ** Processing line: ~ first = re_matchp(re, input, last)~ ** Processing line: ~ end~ ** Processing line: ~ words~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.labels << [640, 500, split_words("hello, dragonriders!").join(' '), 5, 1]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** C Extensions - Native Pixel Arrays - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~C Extensions - Native Pixel Arrays - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~C Extensions - Native Pixel Arrays - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/12_c_extensions/03_native_pixel_arrays/app/main.rb~ ** Processing line: ~ $gtk.ffi_misc.gtk_dlopen("ext")~ ** Processing line: ~ include FFI::CExt~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.rotation ||= 0~ ** Processing line: ~~ ** Processing line: ~ update_scanner_texture # this calls into a C extension!~ ** Processing line: ~~ ** Processing line: ~ # New/changed pixel arrays get uploaded to the GPU before we render~ ** Processing line: ~ # anything. At that point, they can be scaled, rotated, and otherwise~ ** Processing line: ~ # used like any other sprite.~ ** Processing line: ~ w = 100~ ** Processing line: ~ h = 100~ ** Processing line: ~ x = (1280 - w) / 2~ ** Processing line: ~ y = (720 - h) / 2~ ** Processing line: ~ args.outputs.background_color = [64, 0, 128]~ ** Processing line: ~ args.outputs.primitives << [x, y, w, h, :scanner, args.state.rotation].sprite~ ** Processing line: ~ args.state.rotation += 1~ ** Processing line: ~~ ** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Path Finding Algorithms - Breadth First Search - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Breadth First Search - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Breadth First Search - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/13_path_finding_algorithms/01_breadth_first_search/app/main.rb~ ** Processing line: ~ # A visual demonstration of a breadth first search~ ** Processing line: ~ # Inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html~ ** Processing line: ~~ ** Processing line: ~ # An animation that can respond to user input in real time~ ** Processing line: ~~ ** Processing line: ~ # A breadth first search expands in all directions one step at a time~ ** Processing line: ~ # The frontier is a queue of cells to be expanded from~ ** Processing line: ~ # The visited hash allows quick lookups of cells that have been expanded from~ ** Processing line: ~ # The walls hash allows quick lookup of whether a cell is a wall~ ** Processing line: ~~ ** Processing line: ~ # The breadth first search starts by adding the red star to the frontier array~ ** Processing line: ~ # and marking it as visited~ ** Processing line: ~ # Each step a cell is removed from the front of the frontier array (queue)~ ** Processing line: ~ # Unless the neighbor is a wall or visited, it is added to the frontier array~ ** Processing line: ~ # The neighbor is then marked as visited~ ** Processing line: ~~ ** Processing line: ~ # The frontier is blue~ ** Processing line: ~ # Visited cells are light brown~ ** Processing line: ~ # Walls are camo green~ ** Processing line: ~ # Even when walls are visited, they will maintain their wall color~ ** Processing line: ~~ ** Processing line: ~ # The star can be moved by clicking and dragging~ ** Processing line: ~ # Walls can be added and removed by clicking and dragging~ ** Processing line: ~~ ** Processing line: ~ class BreadthFirstSearch~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def initialize(args)~ ** Processing line: ~ # Variables to edit the size and appearance of the grid~ ** Processing line: ~ # Freely customizable to user's liking~ ** Processing line: ~ args.state.grid.width = 30~ ** Processing line: ~ args.state.grid.height = 15~ ** Processing line: ~ args.state.grid.cell_size = 40~ ** Processing line: ~~ ** Processing line: ~ # Stores which step of the animation is being rendered~ ** Processing line: ~ # When the user moves the star or messes with the walls,~ ** Processing line: ~ # the breadth first search is recalculated up to this step~ ** Processing line: ~ args.state.anim_steps = 0~ ** Processing line: ~~ ** Processing line: ~ # At some step the animation will end,~ ** Processing line: ~ # and further steps won't change anything (the whole grid will be explored)~ ** Processing line: ~ # This step is roughly the grid's width * height~ ** Processing line: ~ # When anim_steps equals max_steps no more calculations will occur~ ** Processing line: ~ # and the slider will be at the end~ ** Processing line: ~ args.state.max_steps = args.state.grid.width * args.state.grid.height~ ** Processing line: ~~ ** Processing line: ~ # Whether the animation should play or not~ ** Processing line: ~ # If true, every tick moves anim_steps forward one~ ** Processing line: ~ # Pressing the stepwise animation buttons will pause the animation~ ** Processing line: ~ args.state.play = true~ ** Processing line: ~~ ** Processing line: ~ # The location of the star and walls of the grid~ ** Processing line: ~ # They can be modified to have a different initial grid~ ** Processing line: ~ # Walls are stored in a hash for quick look up when doing the search~ ** Processing line: ~ args.state.star = [0, 0]~ ** Processing line: ~ args.state.walls = {~ ** Processing line: ~ [3, 3] => true,~ ** Processing line: ~ [3, 4] => true,~ ** Processing line: ~ [3, 5] => true,~ ** Processing line: ~ [3, 6] => true,~ ** Processing line: ~ [3, 7] => true,~ ** Processing line: ~ [3, 8] => true,~ ** Processing line: ~ [3, 9] => true,~ ** Processing line: ~ [3, 10] => true,~ ** Processing line: ~ [3, 11] => true,~ ** Processing line: ~ [4, 3] => true,~ ** Processing line: ~ [4, 4] => true,~ ** Processing line: ~ [4, 5] => true,~ ** Processing line: ~ [4, 6] => true,~ ** Processing line: ~ [4, 7] => true,~ ** Processing line: ~ [4, 8] => true,~ ** Processing line: ~ [4, 9] => true,~ ** Processing line: ~ [4, 10] => true,~ ** Processing line: ~ [4, 11] => true,~ ** Processing line: ~~ ** Processing line: ~ [13, 0] => true,~ ** Processing line: ~ [13, 1] => true,~ ** Processing line: ~ [13, 2] => true,~ ** Processing line: ~ [13, 3] => true,~ ** Processing line: ~ [13, 4] => true,~ ** Processing line: ~ [13, 5] => true,~ ** Processing line: ~ [13, 6] => true,~ ** Processing line: ~ [13, 7] => true,~ ** Processing line: ~ [13, 8] => true,~ ** Processing line: ~ [13, 9] => true,~ ** Processing line: ~ [13, 10] => true,~ ** Processing line: ~ [14, 0] => true,~ ** Processing line: ~ [14, 1] => true,~ ** Processing line: ~ [14, 2] => true,~ ** Processing line: ~ [14, 3] => true,~ ** Processing line: ~ [14, 4] => true,~ ** Processing line: ~ [14, 5] => true,~ ** Processing line: ~ [14, 6] => true,~ ** Processing line: ~ [14, 7] => true,~ ** Processing line: ~ [14, 8] => true,~ ** Processing line: ~ [14, 9] => true,~ ** Processing line: ~ [14, 10] => true,~ ** Processing line: ~~ ** Processing line: ~ [21, 8] => true,~ ** Processing line: ~ [21, 9] => true,~ ** Processing line: ~ [21, 10] => true,~ ** Processing line: ~ [21, 11] => true,~ ** Processing line: ~ [21, 12] => true,~ ** Processing line: ~ [21, 13] => true,~ ** Processing line: ~ [21, 14] => true,~ ** Processing line: ~ [22, 8] => true,~ ** Processing line: ~ [22, 9] => true,~ ** Processing line: ~ [22, 10] => true,~ ** Processing line: ~ [22, 11] => true,~ ** Processing line: ~ [22, 12] => true,~ ** Processing line: ~ [22, 13] => true,~ ** Processing line: ~ [22, 14] => true,~ ** Processing line: ~ [23, 8] => true,~ ** Processing line: ~ [23, 9] => true,~ ** Processing line: ~ [24, 8] => true,~ ** Processing line: ~ [24, 9] => true,~ ** Processing line: ~ [25, 8] => true,~ ** Processing line: ~ [25, 9] => true,~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ # Variables that are used by the breadth first search~ ** Processing line: ~ # Storing cells that the search has visited, prevents unnecessary steps~ ** Processing line: ~ # Expanding the frontier of the search in order makes the search expand~ ** Processing line: ~ # from the center outward~ ** Processing line: ~ args.state.visited = {}~ ** Processing line: ~ args.state.frontier = []~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # What the user is currently editing on the grid~ ** Processing line: ~ # Possible values are: :none, :slider, :star, :remove_wall, :add_wall~ ** Processing line: ~~ ** Processing line: ~ # We store this value, because we want to remember the value even when~ ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ ** Processing line: ~ # they are still clicking down on the mouse.~ ** Processing line: ~ args.state.click_and_drag = :none~ ** Processing line: ~~ ** Processing line: ~ # Store the rects of the buttons that control the animation~ ** Processing line: ~ # They are here for user customization~ ** Processing line: ~ # Editing these might require recentering the text inside them~ ** Processing line: ~ # Those values can be found in the render_button methods~ ** Processing line: ~ args.state.buttons.left = [450, 600, 50, 50]~ ** Processing line: ~ args.state.buttons.center = [500, 600, 200, 50]~ ** Processing line: ~ args.state.buttons.right = [700, 600, 50, 50]~ ** Processing line: ~~ ** Processing line: ~ # The variables below are related to the slider~ ** Processing line: ~ # They allow the user to customize them~ ** Processing line: ~ # They also give a central location for the render and input methods to get~ ** Processing line: ~ # information from~ ** Processing line: ~ # x & y are the coordinates of the leftmost part of the slider line~ ** Processing line: ~ args.state.slider.x = 400~ ** Processing line: ~ args.state.slider.y = 675~ ** Processing line: ~ # This is the width of the line~ ** Processing line: ~ args.state.slider.w = 360~ ** Processing line: ~ # This is the offset for the circle~ ** Processing line: ~ # Allows the center of the circle to be on the line,~ ** Processing line: ~ # as opposed to the upper right corner~ ** Processing line: ~ args.state.slider.offset = 20~ ** Processing line: ~ # This is the spacing between each of the notches on the slider~ ** Processing line: ~ # Notches are places where the circle can rest on the slider line~ ** Processing line: ~ # There needs to be a notch for each step before the maximum number of steps~ ** Processing line: ~ args.state.slider.spacing = args.state.slider.w.to_f / args.state.max_steps.to_f~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This method is called every frame/tick~ ** Processing line: ~ # Every tick, the current state of the search is rendered on the screen,~ ** Processing line: ~ # User input is processed, and~ ** Processing line: ~ # The next step in the search is calculated~ ** Processing line: ~ def tick~ ** Processing line: ~ render~ ** Processing line: ~ input~ ** Processing line: ~ # If animation is playing, and max steps have not been reached~ ** Processing line: ~ # Move the search a step forward~ ** Processing line: ~ if state.play && state.anim_steps < state.max_steps~ ** Processing line: ~ # Variable that tells the program what step to recalculate up to~ ** Processing line: ~ state.anim_steps += 1~ ** Processing line: ~ calc~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws everything onto the screen~ ** Processing line: ~ def render~ ** Processing line: ~ render_buttons~ ** Processing line: ~ render_slider~ ** Processing line: ~~ ** Processing line: ~ render_background~ ** Processing line: ~ render_visited~ ** Processing line: ~ render_frontier~ ** Processing line: ~ render_walls~ ** Processing line: ~ render_star~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The methods below subdivide the task of drawing everything to the screen~ ** Processing line: ~~ ** Processing line: ~ # Draws the buttons that control the animation step and state~ ** Processing line: ~ def render_buttons~ ** Processing line: ~ render_left_button~ ** Processing line: ~ render_center_button~ ** Processing line: ~ render_right_button~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws the button which steps the search backward~ ** Processing line: ~ # Shows the user where to click to move the search backward~ ** Processing line: ~ def render_left_button~ ** Processing line: ~ # Draws the gray button, and a black border~ ** Processing line: ~ # The border separates the buttons visually~ ** Processing line: ~ outputs.solids << [buttons.left, gray]~ ** Processing line: ~ outputs.borders << [buttons.left, black]~ ** Processing line: ~~ ** Processing line: ~ # Renders an explanatory label in the center of the button~ ** Processing line: ~ # Explains to the user what the button does~ ** Processing line: ~ # If the button size is changed, the label might need to be edited as well~ ** Processing line: ~ # to keep the label in the center of the button~ ** Processing line: ~ label_x = buttons.left.x + 20~ ** Processing line: ~ label_y = buttons.left.y + 35~ ** Processing line: ~ outputs.labels << [label_x, label_y, "<"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_center_button~ ** Processing line: ~ # Draws the gray button, and a black border~ ** Processing line: ~ # The border separates the buttons visually~ ** Processing line: ~ outputs.solids << [buttons.center, gray]~ ** Processing line: ~ outputs.borders << [buttons.center, black]~ ** Processing line: ~~ ** Processing line: ~ # Renders an explanatory label in the center of the button~ ** Processing line: ~ # Explains to the user what the button does~ ** Processing line: ~ # If the button size is changed, the label might need to be edited as well~ ** Processing line: ~ # to keep the label in the center of the button~ ** Processing line: ~ label_x = buttons.center.x + 37~ ** Processing line: ~ label_y = buttons.center.y + 35~ ** Processing line: ~ label_text = state.play ? "Pause Animation" : "Play Animation"~ ** Processing line: ~ outputs.labels << [label_x, label_y, label_text]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_right_button~ ** Processing line: ~ # Draws the gray button, and a black border~ ** Processing line: ~ # The border separates the buttons visually~ ** Processing line: ~ outputs.solids << [buttons.right, gray]~ ** Processing line: ~ outputs.borders << [buttons.right, black]~ ** Processing line: ~~ ** Processing line: ~ # Renders an explanatory label in the center of the button~ ** Processing line: ~ # Explains to the user what the button does~ ** Processing line: ~ label_x = buttons.right.x + 20~ ** Processing line: ~ label_y = buttons.right.y + 35~ ** Processing line: ~ outputs.labels << [label_x, label_y, ">"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws the slider so the user can move it and see the progress of the search~ ** Processing line: ~ def render_slider~ ** Processing line: ~ # Using primitives hides the line under the white circle of the slider~ ** Processing line: ~ # Draws the line~ ** Processing line: ~ outputs.primitives << [slider.x, slider.y, slider.x + slider.w, slider.y].line~ ** Processing line: ~ # The circle needs to be offset so that the center of the circle~ ** Processing line: ~ # overlaps the line instead of the upper right corner of the circle~ ** Processing line: ~ # The circle's x value is also moved based on the current seach step~ ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.anim_steps * slider.spacing)~ ** Processing line: ~ circle_y = (slider.y - slider.offset)~ ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ ** Processing line: ~ outputs.primitives << [circle_rect, 'circle-white.png'].sprite~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws what the grid looks like with nothing on it~ ** Processing line: ~ def render_background~ ** Processing line: ~ render_unvisited~ ** Processing line: ~ render_grid_lines~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws a rectangle the size of the entire grid to represent unvisited cells~ ** Processing line: ~ def render_unvisited~ ** Processing line: ~ outputs.solids << [scale_up([0, 0, grid.width, grid.height]), unvisited_color]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws grid lines to show the division of the grid into cells~ ** Processing line: ~ def render_grid_lines~ ** Processing line: ~ for x in 0..grid.width~ ** Processing line: ~ outputs.lines << vertical_line(x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ for y in 0..grid.height~ ** Processing line: ~ outputs.lines << horizontal_line(y)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easy way to draw vertical lines given an index~ ** Processing line: ~ def vertical_line column~ ** Processing line: ~ scale_up([column, 0, column, grid.height])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easy way to draw horizontal lines given an index~ ** Processing line: ~ def horizontal_line row~ ** Processing line: ~ scale_up([0, row, grid.width, row])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws the area that is going to be searched from~ ** Processing line: ~ # The frontier is the most outward parts of the search~ ** Processing line: ~ def render_frontier~ ** Processing line: ~ outputs.solids << state.frontier.map do |cell|~ ** Processing line: ~ [scale_up([cell.x, cell.y]), frontier_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws the walls~ ** Processing line: ~ def render_walls~ ** Processing line: ~ outputs.solids << state.walls.map do |wall|~ ** Processing line: ~ [scale_up([wall.x, wall.y]), wall_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders cells that have been searched in the appropriate color~ ** Processing line: ~ def render_visited~ ** Processing line: ~ outputs.solids << state.visited.map do |cell|~ ** Processing line: ~ [scale_up([cell.x, cell.y]), visited_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the star~ ** Processing line: ~ def render_star~ ** Processing line: ~ outputs.sprites << [scale_up(state.star), 'star.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # In code, the cells are represented as 1x1 rectangles~ ** Processing line: ~ # When drawn, the cells are larger than 1x1 rectangles~ ** Processing line: ~ # This method is used to scale up cells, and lines~ ** Processing line: ~ # Objects are scaled up according to the grid.cell_size variable~ ** Processing line: ~ # This allows for easy customization of the visual scale of the grid~ ** Processing line: ~ def scale_up(cell)~ ** Processing line: ~ # Prevents the original value of cell from being edited~ ** Processing line: ~ cell = cell.clone~ ** Processing line: ~~ ** Processing line: ~ # If cell is just an x and y coordinate~ ** Processing line: ~ if cell.size == 2~ ** Processing line: ~ # Add a width and height of 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Scale all the values up~ ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ ** Processing line: ~~ ** Processing line: ~ # Returns the scaled up cell~ ** Processing line: ~ cell~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This method processes user input every tick~ ** Processing line: ~ # This method allows the user to use the buttons, slider, and edit the grid~ ** Processing line: ~ # There are 2 types of input:~ ** Processing line: ~ # Button Input~ ** Processing line: ~ # Click and Drag Input~ ** Processing line: ~ #~ ** Processing line: ~ # Button Input is used for the backward step and forward step buttons~ ** Processing line: ~ # Input is detected by mouse up within the bounds of the rect~ ** Processing line: ~ #~ ** Processing line: ~ # Click and Drag Input is used for moving the star, adding walls,~ ** Processing line: ~ # removing walls, and the slider~ ** Processing line: ~ #~ ** Processing line: ~ # When the mouse is down on the star, the click_and_drag variable is set to :star~ ** Processing line: ~ # While click_and_drag equals :star, the cursor's position is used to calculate the~ ** Processing line: ~ # appropriate drag behavior~ ** Processing line: ~ #~ ** Processing line: ~ # When the mouse goes up click_and_drag is set to :none~ ** Processing line: ~ #~ ** Processing line: ~ # A variable has to be used because the star has to continue being edited even~ ** Processing line: ~ # when the cursor is no longer over the star~ ** Processing line: ~ #~ ** Processing line: ~ # Similar things occur for the other Click and Drag inputs~ ** Processing line: ~ def input~ ** Processing line: ~ # Checks whether any of the buttons are being clicked~ ** Processing line: ~ input_buttons~ ** Processing line: ~~ ** Processing line: ~ # The detection and processing of click and drag inputs are separate~ ** Processing line: ~ # The program has to remember that the user is dragging an object~ ** Processing line: ~ # even when the mouse is no longer over that object~ ** Processing line: ~ detect_click_and_drag~ ** Processing line: ~ process_click_and_drag~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Detects and Process input for each button~ ** Processing line: ~ def input_buttons~ ** Processing line: ~ input_left_button~ ** Processing line: ~ input_center_button~ ** Processing line: ~ input_next_step_button~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Checks if the previous step button is clicked~ ** Processing line: ~ # If it is, it pauses the animation and moves the search one step backward~ ** Processing line: ~ def input_left_button~ ** Processing line: ~ if left_button_clicked?~ ** Processing line: ~ state.play = false~ ** Processing line: ~ state.anim_steps -= 1~ ** Processing line: ~ recalculate~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Controls the play/pause button~ ** Processing line: ~ # Inverses whether the animation is playing or not when clicked~ ** Processing line: ~ def input_center_button~ ** Processing line: ~ if center_button_clicked? or inputs.keyboard.key_down.space~ ** Processing line: ~ state.play = !state.play~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Checks if the next step button is clicked~ ** Processing line: ~ # If it is, it pauses the animation and moves the search one step forward~ ** Processing line: ~ def input_next_step_button~ ** Processing line: ~ if right_button_clicked?~ ** Processing line: ~ state.play = false~ ** Processing line: ~ state.anim_steps += 1~ ** Processing line: ~ calc~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Determines what the user is editing and stores the value~ ** Processing line: ~ # Storing the value allows the user to continue the same edit as long as the~ ** Processing line: ~ # mouse left click is held~ ** Processing line: ~ def detect_click_and_drag~ ** Processing line: ~ if inputs.mouse.up~ ** Processing line: ~ state.click_and_drag = :none~ ** Processing line: ~ elsif star_clicked?~ ** Processing line: ~ state.click_and_drag = :star~ ** Processing line: ~ elsif wall_clicked?~ ** Processing line: ~ state.click_and_drag = :remove_wall~ ** Processing line: ~ elsif grid_clicked?~ ** Processing line: ~ state.click_and_drag = :add_wall~ ** Processing line: ~ elsif slider_clicked?~ ** Processing line: ~ state.click_and_drag = :slider~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Processes click and drag based on what the user is currently dragging~ ** Processing line: ~ def process_click_and_drag~ ** Processing line: ~ if state.click_and_drag == :star~ ** Processing line: ~ input_star~ ** Processing line: ~ elsif state.click_and_drag == :remove_wall~ ** Processing line: ~ input_remove_wall~ ** Processing line: ~ elsif state.click_and_drag == :add_wall~ ** Processing line: ~ input_add_wall~ ** Processing line: ~ elsif state.click_and_drag == :slider~ ** Processing line: ~ input_slider~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the star to the grid closest to the mouse~ ** Processing line: ~ # Only recalculates the search if the star changes position~ ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ ** Processing line: ~ def input_star~ ** Processing line: ~ old_star = state.star.clone~ ** Processing line: ~ state.star = cell_closest_to_mouse~ ** Processing line: ~ unless old_star == state.star~ ** Processing line: ~ recalculate~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Removes walls that are under the cursor~ ** Processing line: ~ def input_remove_wall~ ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ ** Processing line: ~ # the cursor is directly over~ ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ ** Processing line: ~ if mouse_inside_grid?~ ** Processing line: ~ if state.walls.has_key?(cell_closest_to_mouse)~ ** Processing line: ~ state.walls.delete(cell_closest_to_mouse)~ ** Processing line: ~ recalculate~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds walls at cells under the cursor~ ** Processing line: ~ def input_add_wall~ ** Processing line: ~ if mouse_inside_grid?~ ** Processing line: ~ unless state.walls.has_key?(cell_closest_to_mouse)~ ** Processing line: ~ state.walls[cell_closest_to_mouse] = true~ ** Processing line: ~ recalculate~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This method is called when the user is editing the slider~ ** Processing line: ~ # It pauses the animation and moves the white circle to the closest integer point~ ** Processing line: ~ # on the slider~ ** Processing line: ~ # Changes the step of the search to be animated~ ** Processing line: ~ def input_slider~ ** Processing line: ~ state.play = false~ ** Processing line: ~ mouse_x = inputs.mouse.point.x~ ** Processing line: ~~ ** Processing line: ~ # Bounds the mouse_x to the closest x value on the slider line~ ** Processing line: ~ mouse_x = slider.x if mouse_x < slider.x~ ** Processing line: ~ mouse_x = slider.x + slider.w if mouse_x > slider.x + slider.w~ ** Processing line: ~~ ** Processing line: ~ # Sets the current search step to the one represented by the mouse x value~ ** Processing line: ~ # The slider's circle moves due to the render_slider method using anim_steps~ ** Processing line: ~ state.anim_steps = ((mouse_x - slider.x) / slider.spacing).to_i~ ** Processing line: ~~ ** Processing line: ~ recalculate~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Whenever the user edits the grid,~ ** Processing line: ~ # The search has to be recalculated upto the current step~ ** Processing line: ~ # with the current grid as the initial state of the grid~ ** Processing line: ~ def recalculate~ ** Processing line: ~ # Resets the search~ ** Processing line: ~ state.frontier = []~ ** Processing line: ~ state.visited = {}~ ** Processing line: ~~ ** Processing line: ~ # Moves the animation forward one step at a time~ ** Processing line: ~ state.anim_steps.times { calc }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # This method moves the search forward one step~ ** Processing line: ~ # When the animation is playing it is called every tick~ ** Processing line: ~ # And called whenever the current step of the animation needs to be recalculated~ ** Processing line: ~~ ** Processing line: ~ # Moves the search forward one step~ ** Processing line: ~ # Parameter called_from_tick is true if it is called from the tick method~ ** Processing line: ~ # It is false when the search is being recalculated after user editing the grid~ ** Processing line: ~ def calc~ ** Processing line: ~~ ** Processing line: ~ # The setup to the search~ ** Processing line: ~ # Runs once when the there is no frontier or visited cells~ ** Processing line: ~ if state.frontier.empty? && state.visited.empty?~ ** Processing line: ~ state.frontier << state.star~ ** Processing line: ~ state.visited[state.star] = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # A step in the search~ ** Processing line: ~ unless state.frontier.empty?~ ** Processing line: ~ # Takes the next frontier cell~ ** Processing line: ~ new_frontier = state.frontier.shift~ ** Processing line: ~ # For each of its neighbors~ ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ ** Processing line: ~ # That have not been visited and are not walls~ ** Processing line: ~ unless state.visited.has_key?(neighbor) || state.walls.has_key?(neighbor)~ ** Processing line: ~ # Add them to the frontier and mark them as visited~ ** Processing line: ~ state.frontier << neighbor~ ** Processing line: ~ state.visited[neighbor] = true~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Returns a list of adjacent cells~ ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ ** Processing line: ~ def adjacent_neighbors(cell)~ ** Processing line: ~ neighbors = []~ ** Processing line: ~~ ** Processing line: ~ neighbors << [cell.x, cell.y + 1] unless cell.y == grid.height - 1~ ** Processing line: ~ neighbors << [cell.x + 1, cell.y] unless cell.x == grid.width - 1~ ** Processing line: ~ neighbors << [cell.x, cell.y - 1] unless cell.y == 0~ ** Processing line: ~ neighbors << [cell.x - 1, cell.y] unless cell.x == 0~ ** Processing line: ~~ ** Processing line: ~ neighbors~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ ** Processing line: ~ # Finding the cell closest to the mouse helps with this~ ** Processing line: ~ def cell_closest_to_mouse~ ** Processing line: ~ # Closest cell to the mouse~ ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ ** Processing line: ~ # Bound x and y to the grid~ ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ ** Processing line: ~ # Return closest cell~ ** Processing line: ~ [x, y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # These methods detect when the buttons are clicked~ ** Processing line: ~ def left_button_clicked?~ ** Processing line: ~ inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.left)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def center_button_clicked?~ ** Processing line: ~ inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.center)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def right_button_clicked?~ ** Processing line: ~ inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.right)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the slider~ ** Processing line: ~ # Is the mouse down on the circle of the slider?~ ** Processing line: ~ def slider_clicked?~ ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.anim_steps * slider.spacing)~ ** Processing line: ~ circle_y = (slider.y - slider.offset)~ ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(circle_rect)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the star~ ** Processing line: ~ def star_clicked?~ ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(state.star))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing walls~ ** Processing line: ~ def wall_clicked?~ ** Processing line: ~ inputs.mouse.down && mouse_inside_a_wall?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be adding walls~ ** Processing line: ~ def grid_clicked?~ ** Processing line: ~ inputs.mouse.down && mouse_inside_grid?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns whether the mouse is inside of a wall~ ** Processing line: ~ # Part of the condition that checks whether the user is removing a wall~ ** Processing line: ~ def mouse_inside_a_wall?~ ** Processing line: ~ state.walls.each_key do | wall |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(scale_up([wall.x, wall.y]))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns whether the mouse is inside of a grid~ ** Processing line: ~ # Part of the condition that checks whether the user is adding a wall~ ** Processing line: ~ def mouse_inside_grid?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(scale_up([0, 0, grid.width, grid.height]))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # These methods provide handy aliases to colors~ ** Processing line: ~~ ** Processing line: ~ # Light brown~ ** Processing line: ~ def unvisited_color~ ** Processing line: ~ [221, 212, 213]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Black~ ** Processing line: ~ def grid_line_color~ ** Processing line: ~ [255, 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Dark Brown~ ** Processing line: ~ def visited_color~ ** Processing line: ~ [204, 191, 179]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Blue~ ** Processing line: ~ def frontier_color~ ** Processing line: ~ [103, 136, 204]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Camo Green~ ** Processing line: ~ def wall_color~ ** Processing line: ~ [134, 134, 120]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Button Background~ ** Processing line: ~ def gray~ ** Processing line: ~ [190, 190, 190]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Button Outline~ ** Processing line: ~ def black~ ** Processing line: ~ [0, 0, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # These methods make the code more concise~ ** Processing line: ~ def grid~ ** Processing line: ~ state.grid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def buttons~ ** Processing line: ~ state.buttons~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def slider~ ** Processing line: ~ state.slider~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Method that is called by DragonRuby periodically~ ** Processing line: ~ # Used for updating animations and calculations~ ** Processing line: ~ def tick args~ ** Processing line: ~~ ** Processing line: ~ # Pressing r will reset the application~ ** Processing line: ~ if args.inputs.keyboard.key_down.r~ ** Processing line: ~ args.gtk.reset~ ** Processing line: ~ reset~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Every tick, new args are passed, and the Breadth First Search tick is called~ ** Processing line: ~ $breadth_first_search ||= BreadthFirstSearch.new(args)~ ** Processing line: ~ $breadth_first_search.args = args~ ** Processing line: ~ $breadth_first_search.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def reset~ ** Processing line: ~ $breadth_first_search = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Path Finding Algorithms - Detailed Breadth First Search - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Detailed Breadth First Search - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Detailed Breadth First Search - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/13_path_finding_algorithms/02_detailed_breadth_first_search/app/main.rb~ ** Processing line: ~ # A visual demonstration of a breadth first search~ ** Processing line: ~ # Inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html~ ** Processing line: ~~ ** Processing line: ~ # An animation that can respond to user input in real time~ ** Processing line: ~~ ** Processing line: ~ # A breadth first search expands in all directions one step at a time~ ** Processing line: ~ # The frontier is a queue of cells to be expanded from~ ** Processing line: ~ # The visited hash allows quick lookups of cells that have been expanded from~ ** Processing line: ~ # The walls hash allows quick lookup of whether a cell is a wall~ ** Processing line: ~~ ** Processing line: ~ # The breadth first search starts by adding the red star to the frontier array~ ** Processing line: ~ # and marking it as visited~ ** Processing line: ~ # Each step a cell is removed from the front of the frontier array (queue)~ ** Processing line: ~ # Unless the neighbor is a wall or visited, it is added to the frontier array~ ** Processing line: ~ # The neighbor is then marked as visited~ ** Processing line: ~~ ** Processing line: ~ # The frontier is blue~ ** Processing line: ~ # Visited cells are light brown~ ** Processing line: ~ # Walls are camo green~ ** Processing line: ~ # Even when walls are visited, they will maintain their wall color~ ** Processing line: ~~ ** Processing line: ~ # This search numbers the order in which new cells are explored~ ** Processing line: ~ # The next cell from where the search will continue is highlighted yellow~ ** Processing line: ~ # And the cells that will be considered for expansion are in semi-transparent green~ ** Processing line: ~~ ** Processing line: ~ # The star can be moved by clicking and dragging~ ** Processing line: ~ # Walls can be added and removed by clicking and dragging~ ** Processing line: ~~ ** Processing line: ~ class DetailedBreadthFirstSearch~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def initialize(args)~ ** Processing line: ~ # Variables to edit the size and appearance of the grid~ ** Processing line: ~ # Freely customizable to user's liking~ ** Processing line: ~ args.state.grid.width = 9~ ** Processing line: ~ args.state.grid.height = 4~ ** Processing line: ~ args.state.grid.cell_size = 90~ ** Processing line: ~~ ** Processing line: ~ # Stores which step of the animation is being rendered~ ** Processing line: ~ # When the user moves the star or messes with the walls,~ ** Processing line: ~ # the breadth first search is recalculated up to this step~ ** Processing line: ~ args.state.anim_steps = 0~ ** Processing line: ~~ ** Processing line: ~ # At some step the animation will end,~ ** Processing line: ~ # and further steps won't change anything (the whole grid will be explored)~ ** Processing line: ~ # This step is roughly the grid's width * height~ ** Processing line: ~ # When anim_steps equals max_steps no more calculations will occur~ ** Processing line: ~ # and the slider will be at the end~ ** Processing line: ~ args.state.max_steps = args.state.grid.width * args.state.grid.height~ ** Processing line: ~~ ** Processing line: ~ # The location of the star and walls of the grid~ ** Processing line: ~ # They can be modified to have a different initial grid~ ** Processing line: ~ # Walls are stored in a hash for quick look up when doing the search~ ** Processing line: ~ args.state.star = [3, 2]~ ** Processing line: ~ args.state.walls = {}~ ** Processing line: ~~ ** Processing line: ~ # Variables that are used by the breadth first search~ ** Processing line: ~ # Storing cells that the search has visited, prevents unnecessary steps~ ** Processing line: ~ # Expanding the frontier of the search in order makes the search expand~ ** Processing line: ~ # from the center outward~ ** Processing line: ~ args.state.visited = {}~ ** Processing line: ~ args.state.frontier = []~ ** Processing line: ~ args.state.cell_numbers = []~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # What the user is currently editing on the grid~ ** Processing line: ~ # Possible values are: :none, :slider, :star, :remove_wall, :add_wall~ ** Processing line: ~~ ** Processing line: ~ # We store this value, because we want to remember the value even when~ ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ ** Processing line: ~ # they are still clicking down on the mouse.~ ** Processing line: ~ args.state.click_and_drag = :none~ ** Processing line: ~~ ** Processing line: ~ # The x, y, w, h values for the buttons~ ** Processing line: ~ # Allow easy movement of the buttons location~ ** Processing line: ~ # A centralized location to get values to detect input and draw the buttons~ ** Processing line: ~ # Editing these values might mean needing to edit the label offsets~ ** Processing line: ~ # which can be found in the appropriate render button methods~ ** Processing line: ~ args.state.buttons.left = [450, 600, 160, 50]~ ** Processing line: ~ args.state.buttons.right = [610, 600, 160, 50]~ ** Processing line: ~~ ** Processing line: ~ # The variables below are related to the slider~ ** Processing line: ~ # They allow the user to customize them~ ** Processing line: ~ # They also give a central location for the render and input methods to get~ ** Processing line: ~ # information from~ ** Processing line: ~ # x & y are the coordinates of the leftmost part of the slider line~ ** Processing line: ~ args.state.slider.x = 400~ ** Processing line: ~ args.state.slider.y = 675~ ** Processing line: ~ # This is the width of the line~ ** Processing line: ~ args.state.slider.w = 360~ ** Processing line: ~ # This is the offset for the circle~ ** Processing line: ~ # Allows the center of the circle to be on the line,~ ** Processing line: ~ # as opposed to the upper right corner~ ** Processing line: ~ args.state.slider.offset = 20~ ** Processing line: ~ # This is the spacing between each of the notches on the slider~ ** Processing line: ~ # Notches are places where the circle can rest on the slider line~ ** Processing line: ~ # There needs to be a notch for each step before the maximum number of steps~ ** Processing line: ~ args.state.slider.spacing = args.state.slider.w.to_f / args.state.max_steps.to_f~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This method is called every frame/tick~ ** Processing line: ~ # Every tick, the current state of the search is rendered on the screen,~ ** Processing line: ~ # User input is processed, and~ ** Processing line: ~ def tick~ ** Processing line: ~ render~ ** Processing line: ~ input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This method is called from tick and renders everything every tick~ ** Processing line: ~ def render~ ** Processing line: ~ render_buttons~ ** Processing line: ~ render_slider~ ** Processing line: ~~ ** Processing line: ~ render_background~ ** Processing line: ~ render_visited~ ** Processing line: ~ render_frontier~ ** Processing line: ~ render_walls~ ** Processing line: ~ render_star~ ** Processing line: ~~ ** Processing line: ~ render_highlights~ ** Processing line: ~ render_cell_numbers~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The methods below subdivide the task of drawing everything to the screen~ ** Processing line: ~~ ** Processing line: ~ # Draws the buttons that move the search backward or forward~ ** Processing line: ~ # These buttons are rendered so the user knows where to click to move the search~ ** Processing line: ~ def render_buttons~ ** Processing line: ~ render_left_button~ ** Processing line: ~ render_right_button~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the button which steps the search backward~ ** Processing line: ~ # Shows the user where to click to move the search backward~ ** Processing line: ~ def render_left_button~ ** Processing line: ~ # Draws the gray button, and a black border~ ** Processing line: ~ # The border separates the buttons visually~ ** Processing line: ~ outputs.solids << [buttons.left, gray]~ ** Processing line: ~ outputs.borders << [buttons.left, black]~ ** Processing line: ~~ ** Processing line: ~ # Renders an explanatory label in the center of the button~ ** Processing line: ~ # Explains to the user what the button does~ ** Processing line: ~ label_x = buttons.left.x + 05~ ** Processing line: ~ label_y = buttons.left.y + 35~ ** Processing line: ~ outputs.labels << [label_x, label_y, "< Step backward"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the button which steps the search forward~ ** Processing line: ~ # Shows the user where to click to move the search forward~ ** Processing line: ~ def render_right_button~ ** Processing line: ~ # Draws the gray button, and a black border~ ** Processing line: ~ # The border separates the buttons visually~ ** Processing line: ~ outputs.solids << [buttons.right, gray]~ ** Processing line: ~ outputs.borders << [buttons.right, black]~ ** Processing line: ~~ ** Processing line: ~ # Renders an explanatory label in the center of the button~ ** Processing line: ~ # Explains to the user what the button does~ ** Processing line: ~ label_x = buttons.right.x + 10~ ** Processing line: ~ label_y = buttons.right.y + 35~ ** Processing line: ~ outputs.labels << [label_x, label_y, "Step forward >"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws the slider so the user can move it and see the progress of the search~ ** Processing line: ~ def render_slider~ ** Processing line: ~ # Using primitives hides the line under the white circle of the slider~ ** Processing line: ~ # Draws the line~ ** Processing line: ~ outputs.primitives << [slider.x, slider.y, slider.x + slider.w, slider.y].line~ ** Processing line: ~ # The circle needs to be offset so that the center of the circle~ ** Processing line: ~ # overlaps the line instead of the upper right corner of the circle~ ** Processing line: ~ # The circle's x value is also moved based on the current seach step~ ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.anim_steps * slider.spacing)~ ** Processing line: ~ circle_y = (slider.y - slider.offset)~ ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ ** Processing line: ~ outputs.primitives << [circle_rect, 'circle-white.png'].sprite~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws what the grid looks like with nothing on it~ ** Processing line: ~ # Which is a bunch of unvisited cells~ ** Processing line: ~ # Drawn first so other things can draw on top of it~ ** Processing line: ~ def render_background~ ** Processing line: ~ render_unvisited~ ** Processing line: ~~ ** Processing line: ~ # The grid lines make the cells appear separate~ ** Processing line: ~ render_grid_lines~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws a rectangle the size of the entire grid to represent unvisited cells~ ** Processing line: ~ # Unvisited cells are the default cell~ ** Processing line: ~ def render_unvisited~ ** Processing line: ~ background = [0, 0, grid.width, grid.height]~ ** Processing line: ~ outputs.solids << [scale_up(background), unvisited_color]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws grid lines to show the division of the grid into cells~ ** Processing line: ~ def render_grid_lines~ ** Processing line: ~ for x in 0..grid.width~ ** Processing line: ~ outputs.lines << [scale_up(vertical_line(x)), grid_line_color]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ for y in 0..grid.height~ ** Processing line: ~ outputs.lines << [scale_up(horizontal_line(y)), grid_line_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easy way to get a vertical line given an index~ ** Processing line: ~ def vertical_line column~ ** Processing line: ~ [column, 0, column, grid.height]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easy way to get a horizontal line given an index~ ** Processing line: ~ def horizontal_line row~ ** Processing line: ~ [0, row, grid.width, row]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws the area that is going to be searched from~ ** Processing line: ~ # The frontier is the most outward parts of the search~ ** Processing line: ~ def render_frontier~ ** Processing line: ~ state.frontier.each do |cell|~ ** Processing line: ~ outputs.solids << [scale_up(cell), frontier_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws the walls~ ** Processing line: ~ def render_walls~ ** Processing line: ~ state.walls.each_key do |wall|~ ** Processing line: ~ outputs.solids << [scale_up(wall), wall_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders cells that have been searched in the appropriate color~ ** Processing line: ~ def render_visited~ ** Processing line: ~ state.visited.each_key do |cell|~ ** Processing line: ~ outputs.solids << [scale_up(cell), visited_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the star~ ** Processing line: ~ def render_star~ ** Processing line: ~ outputs.sprites << [scale_up(state.star), 'star.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Cells have a number rendered in them based on when they were explored~ ** Processing line: ~ # This is based off of their index in the cell_numbers array~ ** Processing line: ~ # Cells are added to this array the same time they are added to the frontier array~ ** Processing line: ~ def render_cell_numbers~ ** Processing line: ~ state.cell_numbers.each_with_index do |cell, index|~ ** Processing line: ~ # Math that approx centers the number in the cell~ ** Processing line: ~ label_x = (cell.x * grid.cell_size) + grid.cell_size / 2 - 5~ ** Processing line: ~ label_y = (cell.y * grid.cell_size) + (grid.cell_size / 2) + 5~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [label_x, label_y, (index + 1).to_s]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The next frontier to be expanded is highlighted yellow~ ** Processing line: ~ # Its adjacent non-wall neighbors have their border highlighted green~ ** Processing line: ~ # This is to show the user how the search expands~ ** Processing line: ~ def render_highlights~ ** Processing line: ~ return if state.frontier.empty?~ ** Processing line: ~~ ** Processing line: ~ # Highlight the next frontier to be expanded yellow~ ** Processing line: ~ next_frontier = state.frontier[0]~ ** Processing line: ~ outputs.solids << [scale_up(next_frontier), highlighter_yellow]~ ** Processing line: ~~ ** Processing line: ~ # Neighbors have a semi-transparent green layer over them~ ** Processing line: ~ # Unless the neighbor is a wall~ ** Processing line: ~ adjacent_neighbors(next_frontier).each do |neighbor|~ ** Processing line: ~ unless state.walls.has_key?(neighbor)~ ** Processing line: ~ outputs.solids << [scale_up(neighbor), highlighter_green, 70]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Cell Size is used when rendering to allow the grid to be scaled up or down~ ** Processing line: ~ # Cells in the frontier array and visited hash and walls hash are stored as x & y~ ** Processing line: ~ # Scaling up cells and lines when rendering allows omitting of width and height~ ** Processing line: ~ def scale_up(cell)~ ** Processing line: ~ # Prevents the original value of cell from being edited~ ** Processing line: ~ cell = cell.clone~ ** Processing line: ~~ ** Processing line: ~ # If cell is just an x and y coordinate~ ** Processing line: ~ if cell.size == 2~ ** Processing line: ~ # Add a width and height of 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Scale all the values up~ ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ ** Processing line: ~~ ** Processing line: ~ # Returns the scaled up cell~ ** Processing line: ~ cell~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # This method processes user input every tick~ ** Processing line: ~ # This method allows the user to use the buttons, slider, and edit the grid~ ** Processing line: ~ # There are 2 types of input:~ ** Processing line: ~ # Button Input~ ** Processing line: ~ # Click and Drag Input~ ** Processing line: ~ #~ ** Processing line: ~ # Button Input is used for the backward step and forward step buttons~ ** Processing line: ~ # Input is detected by mouse up within the bounds of the rect~ ** Processing line: ~ #~ ** Processing line: ~ # Click and Drag Input is used for moving the star, adding walls,~ ** Processing line: ~ # removing walls, and the slider~ ** Processing line: ~ #~ ** Processing line: ~ # When the mouse is down on the star, the click_and_drag variable is set to :star~ ** Processing line: ~ # While click_and_drag equals :star, the cursor's position is used to calculate the~ ** Processing line: ~ # appropriate drag behavior~ ** Processing line: ~ #~ ** Processing line: ~ # When the mouse goes up click_and_drag is set to :none~ ** Processing line: ~ #~ ** Processing line: ~ # A variable has to be used because the star has to continue being edited even~ ** Processing line: ~ # when the cursor is no longer over the star~ ** Processing line: ~ #~ ** Processing line: ~ # Similar things occur for the other Click and Drag inputs~ ** Processing line: ~ def input~ ** Processing line: ~ # Processes inputs for the buttons~ ** Processing line: ~ input_buttons~ ** Processing line: ~~ ** Processing line: ~ # Detects which if any click and drag input is occurring~ ** Processing line: ~ detect_click_and_drag~ ** Processing line: ~~ ** Processing line: ~ # Does the appropriate click and drag input based on the click_and_drag variable~ ** Processing line: ~ process_click_and_drag~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Detects and Process input for each button~ ** Processing line: ~ def input_buttons~ ** Processing line: ~ input_left_button~ ** Processing line: ~ input_right_button~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Checks if the previous step button is clicked~ ** Processing line: ~ # If it is, it pauses the animation and moves the search one step backward~ ** Processing line: ~ def input_left_button~ ** Processing line: ~ if left_button_clicked?~ ** Processing line: ~ unless state.anim_steps == 0~ ** Processing line: ~ state.anim_steps -= 1~ ** Processing line: ~ recalculate~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Checks if the next step button is clicked~ ** Processing line: ~ # If it is, it pauses the animation and moves the search one step forward~ ** Processing line: ~ def input_right_button~ ** Processing line: ~ if right_button_clicked?~ ** Processing line: ~ unless state.anim_steps == state.max_steps~ ** Processing line: ~ state.anim_steps += 1~ ** Processing line: ~ # Although normally recalculate would be called here~ ** Processing line: ~ # because the right button only moves the search forward~ ** Processing line: ~ # We can just do that~ ** Processing line: ~ calc~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Whenever the user edits the grid,~ ** Processing line: ~ # The search has to be recalculated upto the current step~ ** Processing line: ~~ ** Processing line: ~ def recalculate~ ** Processing line: ~ # Resets the search~ ** Processing line: ~ state.frontier = []~ ** Processing line: ~ state.visited = {}~ ** Processing line: ~ state.cell_numbers = []~ ** Processing line: ~~ ** Processing line: ~ # Moves the animation forward one step at a time~ ** Processing line: ~ state.anim_steps.times { calc }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Determines what the user is clicking and planning on dragging~ ** Processing line: ~ # Click and drag input is initiated by a click on the appropriate item~ ** Processing line: ~ # and ended by mouse up~ ** Processing line: ~ # Storing the value allows the user to continue the same edit as long as the~ ** Processing line: ~ # mouse left click is held~ ** Processing line: ~ def detect_click_and_drag~ ** Processing line: ~ if inputs.mouse.up~ ** Processing line: ~ state.click_and_drag = :none~ ** Processing line: ~ elsif star_clicked?~ ** Processing line: ~ state.click_and_drag = :star~ ** Processing line: ~ elsif wall_clicked?~ ** Processing line: ~ state.click_and_drag = :remove_wall~ ** Processing line: ~ elsif grid_clicked?~ ** Processing line: ~ state.click_and_drag = :add_wall~ ** Processing line: ~ elsif slider_clicked?~ ** Processing line: ~ state.click_and_drag = :slider~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Processes input based on what the user is currently dragging~ ** Processing line: ~ def process_click_and_drag~ ** Processing line: ~ if state.click_and_drag == :slider~ ** Processing line: ~ input_slider~ ** Processing line: ~ elsif state.click_and_drag == :star~ ** Processing line: ~ input_star~ ** Processing line: ~ elsif state.click_and_drag == :remove_wall~ ** Processing line: ~ input_remove_wall~ ** Processing line: ~ elsif state.click_and_drag == :add_wall~ ** Processing line: ~ input_add_wall~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This method is called when the user is dragging the slider~ ** Processing line: ~ # It moves the current animation step to the point represented by the slider~ ** Processing line: ~ def input_slider~ ** Processing line: ~ mouse_x = inputs.mouse.point.x~ ** Processing line: ~~ ** Processing line: ~ # Bounds the mouse_x to the closest x value on the slider line~ ** Processing line: ~ mouse_x = slider.x if mouse_x < slider.x~ ** Processing line: ~ mouse_x = slider.x + slider.w if mouse_x > slider.x + slider.w~ ** Processing line: ~~ ** Processing line: ~ # Sets the current search step to the one represented by the mouse x value~ ** Processing line: ~ # The slider's circle moves due to the render_slider method using anim_steps~ ** Processing line: ~ state.anim_steps = ((mouse_x - slider.x) / slider.spacing).to_i~ ** Processing line: ~~ ** Processing line: ~ recalculate~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the star to the grid closest to the mouse~ ** Processing line: ~ # Only recalculates the search if the star changes position~ ** Processing line: ~ # Called whenever the user is dragging the star~ ** Processing line: ~ def input_star~ ** Processing line: ~ old_star = state.star.clone~ ** Processing line: ~ state.star = cell_closest_to_mouse~ ** Processing line: ~ unless old_star == state.star~ ** Processing line: ~ recalculate~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Removes walls that are under the cursor~ ** Processing line: ~ def input_remove_wall~ ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ ** Processing line: ~ # the cursor is directly over~ ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ ** Processing line: ~ if mouse_inside_grid?~ ** Processing line: ~ if state.walls.has_key?(cell_closest_to_mouse)~ ** Processing line: ~ state.walls.delete(cell_closest_to_mouse)~ ** Processing line: ~ recalculate~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds walls at cells under the cursor~ ** Processing line: ~ def input_add_wall~ ** Processing line: ~ # Adds a wall to the hash~ ** Processing line: ~ # We can use the grid closest to mouse, because the cursor is inside the grid~ ** Processing line: ~ if mouse_inside_grid?~ ** Processing line: ~ unless state.walls.has_key?(cell_closest_to_mouse)~ ** Processing line: ~ state.walls[cell_closest_to_mouse] = true~ ** Processing line: ~ recalculate~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This method moves the search forward one step~ ** Processing line: ~ # When the animation is playing it is called every tick~ ** Processing line: ~ # And called whenever the current step of the animation needs to be recalculated~ ** Processing line: ~~ ** Processing line: ~ # Moves the search forward one step~ ** Processing line: ~ # Parameter called_from_tick is true if it is called from the tick method~ ** Processing line: ~ # It is false when the search is being recalculated after user editing the grid~ ** Processing line: ~ def calc~ ** Processing line: ~ # The setup to the search~ ** Processing line: ~ # Runs once when the there is no frontier or visited cells~ ** Processing line: ~ if state.frontier.empty? && state.visited.empty?~ ** Processing line: ~ state.frontier << state.star~ ** Processing line: ~ state.visited[state.star] = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # A step in the search~ ** Processing line: ~ unless state.frontier.empty?~ ** Processing line: ~ # Takes the next frontier cell~ ** Processing line: ~ new_frontier = state.frontier.shift~ ** Processing line: ~ # For each of its neighbors~ ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ ** Processing line: ~ # That have not been visited and are not walls~ ** Processing line: ~ unless state.visited.has_key?(neighbor) || state.walls.has_key?(neighbor)~ ** Processing line: ~ # Add them to the frontier and mark them as visited~ ** Processing line: ~ state.frontier << neighbor~ ** Processing line: ~ state.visited[neighbor] = true~ ** Processing line: ~~ ** Processing line: ~ # Also assign them a frontier number~ ** Processing line: ~ state.cell_numbers << neighbor~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Returns a list of adjacent cells~ ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ ** Processing line: ~ def adjacent_neighbors cell~ ** Processing line: ~ neighbors = []~ ** Processing line: ~~ ** Processing line: ~ neighbors << [cell.x, cell.y + 1] unless cell.y == grid.height - 1~ ** Processing line: ~ neighbors << [cell.x + 1, cell.y] unless cell.x == grid.width - 1~ ** Processing line: ~ neighbors << [cell.x, cell.y - 1] unless cell.y == 0~ ** Processing line: ~ neighbors << [cell.x - 1, cell.y] unless cell.x == 0~ ** Processing line: ~~ ** Processing line: ~ neighbors~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ ** Processing line: ~ # Finding the grid closest to the mouse helps with this~ ** Processing line: ~ def cell_closest_to_mouse~ ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ ** Processing line: ~ [x, y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # These methods detect when the buttons are clicked~ ** Processing line: ~ def left_button_clicked?~ ** Processing line: ~ (inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.left)) || inputs.keyboard.key_up.left~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def right_button_clicked?~ ** Processing line: ~ (inputs.mouse.up && inputs.mouse.point.inside_rect?(buttons.right)) || inputs.keyboard.key_up.right~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the slider~ ** Processing line: ~ def slider_clicked?~ ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.anim_steps * slider.spacing)~ ** Processing line: ~ circle_y = (slider.y - slider.offset)~ ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(circle_rect)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the star~ ** Processing line: ~ def star_clicked?~ ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(state.star))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing walls~ ** Processing line: ~ def wall_clicked?~ ** Processing line: ~ inputs.mouse.down && mouse_inside_a_wall?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be adding walls~ ** Processing line: ~ def grid_clicked?~ ** Processing line: ~ inputs.mouse.down && mouse_inside_grid?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns whether the mouse is inside of a wall~ ** Processing line: ~ # Part of the condition that checks whether the user is removing a wall~ ** Processing line: ~ def mouse_inside_a_wall?~ ** Processing line: ~ state.walls.each_key do | wall |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(scale_up(wall))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns whether the mouse is inside of a grid~ ** Processing line: ~ # Part of the condition that checks whether the user is adding a wall~ ** Processing line: ~ def mouse_inside_grid?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(scale_up([0, 0, grid.width, grid.height]))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # These methods provide handy aliases to colors~ ** Processing line: ~~ ** Processing line: ~ # Light brown~ ** Processing line: ~ def unvisited_color~ ** Processing line: ~ [221, 212, 213]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Black~ ** Processing line: ~ def grid_line_color~ ** Processing line: ~ [255, 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Dark Brown~ ** Processing line: ~ def visited_color~ ** Processing line: ~ [204, 191, 179]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Blue~ ** Processing line: ~ def frontier_color~ ** Processing line: ~ [103, 136, 204]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Camo Green~ ** Processing line: ~ def wall_color~ ** Processing line: ~ [134, 134, 120]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Next frontier to be expanded~ ** Processing line: ~ def highlighter_yellow~ ** Processing line: ~ [214, 231, 125]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The neighbors of the next frontier to be expanded~ ** Processing line: ~ def highlighter_green~ ** Processing line: ~ [65, 191, 127]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Button background~ ** Processing line: ~ def gray~ ** Processing line: ~ [190, 190, 190]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Button outline~ ** Processing line: ~ def black~ ** Processing line: ~ [0, 0, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # These methods make the code more concise~ ** Processing line: ~ def grid~ ** Processing line: ~ state.grid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def buttons~ ** Processing line: ~ state.buttons~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def slider~ ** Processing line: ~ state.slider~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ # Pressing r resets the program~ ** Processing line: ~ if args.inputs.keyboard.key_down.r~ ** Processing line: ~ args.gtk.reset~ ** Processing line: ~ reset~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $detailed_breadth_first_search ||= DetailedBreadthFirstSearch.new(args)~ ** Processing line: ~ $detailed_breadth_first_search.args = args~ ** Processing line: ~ $detailed_breadth_first_search.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def reset~ ** Processing line: ~ $detailed_breadth_first_search = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Path Finding Algorithms - Breadcrumbs - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Breadcrumbs - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Breadcrumbs - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/13_path_finding_algorithms/03_breadcrumbs/app/main.rb~ ** Processing line: ~ class Breadcrumbs~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ # This method is called every frame/tick~ ** Processing line: ~ # Every tick, the current state of the search is rendered on the screen,~ ** Processing line: ~ # User input is processed, and~ ** Processing line: ~ # The next step in the search is calculated~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ # If the grid has not been searched~ ** Processing line: ~ if search.came_from.empty?~ ** Processing line: ~ calc~ ** Processing line: ~ # Calc Path~ ** Processing line: ~ end~ ** Processing line: ~ render~ ** Processing line: ~ input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ # Variables to edit the size and appearance of the grid~ ** Processing line: ~ # Freely customizable to user's liking~ ** Processing line: ~ grid.width ||= 30~ ** Processing line: ~ grid.height ||= 15~ ** Processing line: ~ grid.cell_size ||= 40~ ** Processing line: ~ grid.rect ||= [0, 0, grid.width, grid.height]~ ** Processing line: ~~ ** Processing line: ~ # The location of the star and walls of the grid~ ** Processing line: ~ # They can be modified to have a different initial grid~ ** Processing line: ~ # Walls are stored in a hash for quick look up when doing the search~ ** Processing line: ~ grid.star ||= [2, 8]~ ** Processing line: ~ grid.target ||= [10, 5]~ ** Processing line: ~ grid.walls ||= {~ ** Processing line: ~ [3, 3] => true,~ ** Processing line: ~ [3, 4] => true,~ ** Processing line: ~ [3, 5] => true,~ ** Processing line: ~ [3, 6] => true,~ ** Processing line: ~ [3, 7] => true,~ ** Processing line: ~ [3, 8] => true,~ ** Processing line: ~ [3, 9] => true,~ ** Processing line: ~ [3, 10] => true,~ ** Processing line: ~ [3, 11] => true,~ ** Processing line: ~ [4, 3] => true,~ ** Processing line: ~ [4, 4] => true,~ ** Processing line: ~ [4, 5] => true,~ ** Processing line: ~ [4, 6] => true,~ ** Processing line: ~ [4, 7] => true,~ ** Processing line: ~ [4, 8] => true,~ ** Processing line: ~ [4, 9] => true,~ ** Processing line: ~ [4, 10] => true,~ ** Processing line: ~ [4, 11] => true,~ ** Processing line: ~ [13, 0] => true,~ ** Processing line: ~ [13, 1] => true,~ ** Processing line: ~ [13, 2] => true,~ ** Processing line: ~ [13, 3] => true,~ ** Processing line: ~ [13, 4] => true,~ ** Processing line: ~ [13, 5] => true,~ ** Processing line: ~ [13, 6] => true,~ ** Processing line: ~ [13, 7] => true,~ ** Processing line: ~ [13, 8] => true,~ ** Processing line: ~ [13, 9] => true,~ ** Processing line: ~ [13, 10] => true,~ ** Processing line: ~ [14, 0] => true,~ ** Processing line: ~ [14, 1] => true,~ ** Processing line: ~ [14, 2] => true,~ ** Processing line: ~ [14, 3] => true,~ ** Processing line: ~ [14, 4] => true,~ ** Processing line: ~ [14, 5] => true,~ ** Processing line: ~ [14, 6] => true,~ ** Processing line: ~ [14, 7] => true,~ ** Processing line: ~ [14, 8] => true,~ ** Processing line: ~ [14, 9] => true,~ ** Processing line: ~ [14, 10] => true,~ ** Processing line: ~ [21, 8] => true,~ ** Processing line: ~ [21, 9] => true,~ ** Processing line: ~ [21, 10] => true,~ ** Processing line: ~ [21, 11] => true,~ ** Processing line: ~ [21, 12] => true,~ ** Processing line: ~ [21, 13] => true,~ ** Processing line: ~ [21, 14] => true,~ ** Processing line: ~ [22, 8] => true,~ ** Processing line: ~ [22, 9] => true,~ ** Processing line: ~ [22, 10] => true,~ ** Processing line: ~ [22, 11] => true,~ ** Processing line: ~ [22, 12] => true,~ ** Processing line: ~ [22, 13] => true,~ ** Processing line: ~ [22, 14] => true,~ ** Processing line: ~ [23, 8] => true,~ ** Processing line: ~ [23, 9] => true,~ ** Processing line: ~ [24, 8] => true,~ ** Processing line: ~ [24, 9] => true,~ ** Processing line: ~ [25, 8] => true,~ ** Processing line: ~ [25, 9] => true,~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ # Variables that are used by the breadth first search~ ** Processing line: ~ # Storing cells that the search has visited, prevents unnecessary steps~ ** Processing line: ~ # Expanding the frontier of the search in order makes the search expand~ ** Processing line: ~ # from the center outward~ ** Processing line: ~~ ** Processing line: ~ # The cells from which the search is to expand~ ** Processing line: ~ search.frontier ||= []~ ** Processing line: ~ # A hash of where each cell was expanded from~ ** Processing line: ~ # The key is a cell, and the value is the cell it came from~ ** Processing line: ~ search.came_from ||= {}~ ** Processing line: ~ # Cells that are part of the path from the target to the star~ ** Processing line: ~ search.path ||= {}~ ** Processing line: ~~ ** Processing line: ~ # What the user is currently editing on the grid~ ** Processing line: ~ # We store this value, because we want to remember the value even when~ ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ ** Processing line: ~ # they are still clicking down on the mouse.~ ** Processing line: ~ state.current_input ||= :none~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc~ ** Processing line: ~ # Setup the search to start from the star~ ** Processing line: ~ search.frontier << grid.star~ ** Processing line: ~ search.came_from[grid.star] = nil~ ** Processing line: ~~ ** Processing line: ~ # Until there are no more cells to expand from~ ** Processing line: ~ until search.frontier.empty?~ ** Processing line: ~ # Takes the next frontier cell~ ** Processing line: ~ new_frontier = search.frontier.shift~ ** Processing line: ~ # For each of its neighbors~ ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ ** Processing line: ~ # That have not been visited and are not walls~ ** Processing line: ~ unless search.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor)~ ** Processing line: ~ # Add them to the frontier and mark them as visited in the first grid~ ** Processing line: ~ # Unless the target has been visited~ ** Processing line: ~ # Add the neighbor to the frontier and remember which cell it came from~ ** Processing line: ~ search.frontier << neighbor~ ** Processing line: ~ search.came_from[neighbor] = new_frontier~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Draws everything onto the screen~ ** Processing line: ~ def render~ ** Processing line: ~ render_background~ ** Processing line: ~ # render_heat_map~ ** Processing line: ~ render_walls~ ** Processing line: ~ # render_path~ ** Processing line: ~ # render_labels~ ** Processing line: ~ render_arrows~ ** Processing line: ~ render_star~ ** Processing line: ~ render_target~ ** Processing line: ~ unless grid.walls.has_key?(grid.target)~ ** Processing line: ~ render_trail~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_trail(current_cell=grid.target)~ ** Processing line: ~ return if current_cell == grid.star~ ** Processing line: ~ parent_cell = search.came_from[current_cell]~ ** Processing line: ~ if current_cell && parent_cell~ ** Processing line: ~ outputs.lines << [(current_cell.x + 0.5) * grid.cell_size, (current_cell.y + 0.5) * grid.cell_size,~ ** Processing line: ~ (parent_cell.x + 0.5) * grid.cell_size, (parent_cell.y + 0.5) * grid.cell_size, purple]~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~ render_trail(parent_cell)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_arrows~ ** Processing line: ~ search.came_from.each do |child, parent|~ ** Processing line: ~ if parent && child~ ** Processing line: ~ arrow_cell = [(child.x + parent.x) / 2, (child.y + parent.y) / 2]~ ** Processing line: ~ if parent.x > child.x # If the parent cell is to the right of the child cell~ ** Processing line: ~ outputs.sprites << [scale_up(arrow_cell), 'arrow.png', 0] # Point the arrow to the right~ ** Processing line: ~ elsif parent.x < child.x # If the parent cell is to the right of the child cell~ ** Processing line: ~ outputs.sprites << [scale_up(arrow_cell), 'arrow.png', 180] # Point the arrow to the right~ ** Processing line: ~ elsif parent.y > child.y # If the parent cell is to the right of the child cell~ ** Processing line: ~ outputs.sprites << [scale_up(arrow_cell), 'arrow.png', 90] # Point the arrow to the right~ ** Processing line: ~ elsif parent.y < child.y # If the parent cell is to the right of the child cell~ ** Processing line: ~ outputs.sprites << [scale_up(arrow_cell), 'arrow.png', 270] # Point the arrow to the right~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The methods below subdivide the task of drawing everything to the screen~ ** Processing line: ~~ ** Processing line: ~ # Draws what the grid looks like with nothing on it~ ** Processing line: ~ def render_background~ ** Processing line: ~ render_unvisited~ ** Processing line: ~ render_grid_lines~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws both grids~ ** Processing line: ~ def render_unvisited~ ** Processing line: ~ outputs.solids << [scale_up(grid.rect), unvisited_color]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws grid lines to show the division of the grid into cells~ ** Processing line: ~ def render_grid_lines~ ** Processing line: ~ for x in 0..grid.width~ ** Processing line: ~ outputs.lines << vertical_line(x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ for y in 0..grid.height~ ** Processing line: ~ outputs.lines << horizontal_line(y)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easy way to draw vertical lines given an index~ ** Processing line: ~ def vertical_line column~ ** Processing line: ~ scale_up([column, 0, column, grid.height])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easy way to draw horizontal lines given an index~ ** Processing line: ~ def horizontal_line row~ ** Processing line: ~ scale_up([0, row, grid.width, row])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws the walls on both grids~ ** Processing line: ~ def render_walls~ ** Processing line: ~ grid.walls.each_key do |wall|~ ** Processing line: ~ outputs.solids << [scale_up(wall), wall_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the star on both grids~ ** Processing line: ~ def render_star~ ** Processing line: ~ outputs.sprites << [scale_up(grid.star), 'star.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the target on both grids~ ** Processing line: ~ def render_target~ ** Processing line: ~ outputs.sprites << [scale_up(grid.target), 'target.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Labels the grids~ ** Processing line: ~ def render_labels~ ** Processing line: ~ outputs.labels << [200, 625, "Without early exit"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the path based off of the search.path hash~ ** Processing line: ~ def render_path~ ** Processing line: ~ # If the star and target are disconnected there will only be one path~ ** Processing line: ~ # The path should not render in that case~ ** Processing line: ~ unless search.path.size == 1~ ** Processing line: ~ search.path.each_key do | cell |~ ** Processing line: ~ # Renders path on both grids~ ** Processing line: ~ outputs.solids << [scale_up(cell), path_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates the path from the target to the star after the search is over~ ** Processing line: ~ # Relies on the came_from hash~ ** Processing line: ~ # Fills the search.path hash, which is later rendered on screen~ ** Processing line: ~ def calc_path~ ** Processing line: ~ endpoint = grid.target~ ** Processing line: ~ while endpoint~ ** Processing line: ~ search.path[endpoint] = true~ ** Processing line: ~ endpoint = search.came_from[endpoint]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # In code, the cells are represented as 1x1 rectangles~ ** Processing line: ~ # When drawn, the cells are larger than 1x1 rectangles~ ** Processing line: ~ # This method is used to scale up cells, and lines~ ** Processing line: ~ # Objects are scaled up according to the grid.cell_size variable~ ** Processing line: ~ # This allows for easy customization of the visual scale of the grid~ ** Processing line: ~ def scale_up(cell)~ ** Processing line: ~ # Prevents the original value of cell from being edited~ ** Processing line: ~ cell = cell.clone~ ** Processing line: ~~ ** Processing line: ~ # If cell is just an x and y coordinate~ ** Processing line: ~ if cell.size == 2~ ** Processing line: ~ # Add a width and height of 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Scale all the values up~ ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ ** Processing line: ~~ ** Processing line: ~ # Returns the scaled up cell~ ** Processing line: ~ cell~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This method processes user input every tick~ ** Processing line: ~ # Any method with "1" is related to the first grid~ ** Processing line: ~ # Any method with "2" is related to the second grid~ ** Processing line: ~ def input~ ** Processing line: ~ # The program has to remember that the user is dragging an object~ ** Processing line: ~ # even when the mouse is no longer over that object~ ** Processing line: ~ # So detecting input and processing input is separate~ ** Processing line: ~ # detect_input~ ** Processing line: ~ # process_input~ ** Processing line: ~ if inputs.mouse.up~ ** Processing line: ~ state.current_input = :none~ ** Processing line: ~ elsif star_clicked?~ ** Processing line: ~ state.current_input = :star~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if mouse_inside_grid?~ ** Processing line: ~ unless grid.target == cell_closest_to_mouse~ ** Processing line: ~ grid.target = cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ if state.current_input == :star~ ** Processing line: ~ unless grid.star == cell_closest_to_mouse~ ** Processing line: ~ grid.star = cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Determines what the user is editing and stores the value~ ** Processing line: ~ # Storing the value allows the user to continue the same edit as long as the~ ** Processing line: ~ # mouse left click is held~ ** Processing line: ~ def detect_input~ ** Processing line: ~ # When the mouse is up, nothing is being edited~ ** Processing line: ~ if inputs.mouse.up~ ** Processing line: ~ state.current_input = :none~ ** Processing line: ~ # When the star in the no second grid is clicked~ ** Processing line: ~ elsif star_clicked?~ ** Processing line: ~ state.current_input = :star~ ** Processing line: ~ # When the target in the no second grid is clicked~ ** Processing line: ~ elsif target_clicked?~ ** Processing line: ~ state.current_input = :target~ ** Processing line: ~ # When a wall in the first grid is clicked~ ** Processing line: ~ elsif wall_clicked?~ ** Processing line: ~ state.current_input = :remove_wall~ ** Processing line: ~ # When the first grid is clicked~ ** Processing line: ~ elsif grid_clicked?~ ** Processing line: ~ state.current_input = :add_wall~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Processes click and drag based on what the user is currently dragging~ ** Processing line: ~ def process_input~ ** Processing line: ~ if state.current_input == :star~ ** Processing line: ~ input_star~ ** Processing line: ~ elsif state.current_input == :target~ ** Processing line: ~ input_target~ ** Processing line: ~ elsif state.current_input == :remove_wall~ ** Processing line: ~ input_remove_wall~ ** Processing line: ~ elsif state.current_input == :add_wall~ ** Processing line: ~ input_add_wall~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the star to the cell closest to the mouse in the first grid~ ** Processing line: ~ # Only resets the search if the star changes position~ ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ ** Processing line: ~ def input_star~ ** Processing line: ~ old_star = grid.star.clone~ ** Processing line: ~ grid.star = cell_closest_to_mouse~ ** Processing line: ~ unless old_star == grid.star~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the target to the grid closest to the mouse in the first grid~ ** Processing line: ~ # Only reset_searchs the search if the target changes position~ ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ ** Processing line: ~ def input_target~ ** Processing line: ~ old_target = grid.target.clone~ ** Processing line: ~ grid.target = cell_closest_to_mouse~ ** Processing line: ~ unless old_target == grid.target~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Removes walls in the first grid that are under the cursor~ ** Processing line: ~ def input_remove_wall~ ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ ** Processing line: ~ # the cursor is directly over~ ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ ** Processing line: ~ if mouse_inside_grid?~ ** Processing line: ~ if grid.walls.has_key?(cell_closest_to_mouse)~ ** Processing line: ~ grid.walls.delete(cell_closest_to_mouse)~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds a wall in the first grid in the cell the mouse is over~ ** Processing line: ~ def input_add_wall~ ** Processing line: ~ if mouse_inside_grid?~ ** Processing line: ~ unless grid.walls.has_key?(cell_closest_to_mouse)~ ** Processing line: ~ grid.walls[cell_closest_to_mouse] = true~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Whenever the user edits the grid,~ ** Processing line: ~ # The search has to be reset_searchd upto the current step~ ** Processing line: ~ # with the current grid as the initial state of the grid~ ** Processing line: ~ def reset_search~ ** Processing line: ~ # Reset_Searchs the search~ ** Processing line: ~ search.frontier = []~ ** Processing line: ~ search.came_from = {}~ ** Processing line: ~ search.path = {}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Returns a list of adjacent cells~ ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ ** Processing line: ~ def adjacent_neighbors(cell)~ ** Processing line: ~ neighbors = []~ ** Processing line: ~~ ** Processing line: ~ # Gets all the valid neighbors into the array~ ** Processing line: ~ # From southern neighbor, clockwise~ ** Processing line: ~ neighbors << [cell.x, cell.y - 1] unless cell.y == 0~ ** Processing line: ~ neighbors << [cell.x - 1, cell.y] unless cell.x == 0~ ** Processing line: ~ neighbors << [cell.x, cell.y + 1] unless cell.y == grid.height - 1~ ** Processing line: ~ neighbors << [cell.x + 1, cell.y] unless cell.x == grid.width - 1~ ** Processing line: ~~ ** Processing line: ~ # Sorts the neighbors so the rendered path is a zigzag path~ ** Processing line: ~ # Cells in a diagonal direction are given priority~ ** Processing line: ~ # Comment this line to see the difference~ ** Processing line: ~ neighbors = neighbors.sort_by { |neighbor_x, neighbor_y| proximity_to_star(neighbor_x, neighbor_y) }~ ** Processing line: ~~ ** Processing line: ~ neighbors~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds the vertical and horizontal distance of a cell from the star~ ** Processing line: ~ # and returns the larger value~ ** Processing line: ~ # This method is used to have a zigzag pattern in the rendered path~ ** Processing line: ~ # A cell that is [5, 5] from the star,~ ** Processing line: ~ # is explored before over a cell that is [0, 7] away.~ ** Processing line: ~ # So, if possible, the search tries to go diagonal (zigzag) first~ ** Processing line: ~ def proximity_to_star(x, y)~ ** Processing line: ~ distance_x = (grid.star.x - x).abs~ ** Processing line: ~ distance_y = (grid.star.y - y).abs~ ** Processing line: ~~ ** Processing line: ~ if distance_x > distance_y~ ** Processing line: ~ return distance_x~ ** Processing line: ~ else~ ** Processing line: ~ return distance_y~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ ** Processing line: ~ # Finding the cell closest to the mouse helps with this~ ** Processing line: ~ def cell_closest_to_mouse~ ** Processing line: ~ # Closest cell to the mouse in the first grid~ ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ ** Processing line: ~ # Bound x and y to the grid~ ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ ** Processing line: ~ # Return closest cell~ ** Processing line: ~ [x, y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the star from the first grid~ ** Processing line: ~ def star_clicked?~ ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(grid.star))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the target from the first grid~ ** Processing line: ~ def target_clicked?~ ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(grid.target))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be adding walls from the first grid~ ** Processing line: ~ def grid_clicked?~ ** Processing line: ~ inputs.mouse.down && mouse_inside_grid?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns whether the mouse is inside of the first grid~ ** Processing line: ~ # Part of the condition that checks whether the user is adding a wall~ ** Processing line: ~ def mouse_inside_grid?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(scale_up(grid.rect))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # These methods provide handy aliases to colors~ ** Processing line: ~~ ** Processing line: ~ # Light brown~ ** Processing line: ~ def unvisited_color~ ** Processing line: ~ [221, 212, 213]~ ** Processing line: ~ # [255, 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Camo Green~ ** Processing line: ~ def wall_color~ ** Processing line: ~ [134, 134, 120]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Pastel White~ ** Processing line: ~ def path_color~ ** Processing line: ~ [231, 230, 228]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def red~ ** Processing line: ~ [255, 0, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def purple~ ** Processing line: ~ [149, 64, 191]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Makes code more concise~ ** Processing line: ~ def grid~ ** Processing line: ~ state.grid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def search~ ** Processing line: ~ state.search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Method that is called by DragonRuby periodically~ ** Processing line: ~ # Used for updating animations and calculations~ ** Processing line: ~ def tick args~ ** Processing line: ~~ ** Processing line: ~ # Pressing r will reset the application~ ** Processing line: ~ if args.inputs.keyboard.key_down.r~ ** Processing line: ~ args.gtk.reset~ ** Processing line: ~ reset~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Every tick, new args are passed, and the Breadth First Search tick is called~ ** Processing line: ~ $breadcrumbs ||= Breadcrumbs.new~ ** Processing line: ~ $breadcrumbs.args = args~ ** Processing line: ~ $breadcrumbs.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def reset~ ** Processing line: ~ $breadcrumbs = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # # Representation of how far away visited cells are from the star~ ** Processing line: ~ # # Replaces the render_visited method~ ** Processing line: ~ # # Visually demonstrates the effectiveness of early exit for pathfinding~ ** Processing line: ~ # def render_heat_map~ ** Processing line: ~ # # THIS CODE NEEDS SOME FIXING DUE TO REFACTORING~ ** Processing line: ~ # search.came_from.each_key do | cell |~ ** Processing line: ~ # distance = (grid.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs~ ** Processing line: ~ # max_distance = grid.width + grid.height~ ** Processing line: ~ # alpha = 255.to_i * distance.to_i / max_distance.to_i~ ** Processing line: ~ # outputs.solids << [scale_up(visited_cell), red, alpha]~ ** Processing line: ~ # # outputs.solids << [early_exit_scale_up(visited_cell), red, alpha]~ ** Processing line: ~ # end~ ** Processing line: ~ # end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Path Finding Algorithms - Early Exit - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Early Exit - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Early Exit - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/13_path_finding_algorithms/04_early_exit/app/main.rb~ ** Processing line: ~ # Comparison of a breadth first search with and without early exit~ ** Processing line: ~ # Inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html~ ** Processing line: ~~ ** Processing line: ~ # Demonstrates the exploration difference caused by early exit~ ** Processing line: ~ # Also demonstrates how breadth first search is used for path generation~ ** Processing line: ~~ ** Processing line: ~ # The left grid is a breadth first search without early exit~ ** Processing line: ~ # The right grid is a breadth first search with early exit~ ** Processing line: ~ # The red squares represent how far the search expanded~ ** Processing line: ~ # The darker the red, the farther the search proceeded~ ** Processing line: ~ # Comparison of the heat map reveals how much searching can be saved by early exit~ ** Processing line: ~ # The white path shows path generation via breadth first search~ ** Processing line: ~ class EarlyExitBreadthFirstSearch~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ # This method is called every frame/tick~ ** Processing line: ~ # Every tick, the current state of the search is rendered on the screen,~ ** Processing line: ~ # User input is processed, and~ ** Processing line: ~ # The next step in the search is calculated~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ # If the grid has not been searched~ ** Processing line: ~ if state.visited.empty?~ ** Processing line: ~ # Complete the search~ ** Processing line: ~ state.max_steps.times { step }~ ** Processing line: ~ # And calculate the path~ ** Processing line: ~ calc_path~ ** Processing line: ~ end~ ** Processing line: ~ render~ ** Processing line: ~ input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ # Variables to edit the size and appearance of the grid~ ** Processing line: ~ # Freely customizable to user's liking~ ** Processing line: ~ grid.width ||= 15~ ** Processing line: ~ grid.height ||= 15~ ** Processing line: ~ grid.cell_size ||= 40~ ** Processing line: ~ grid.rect ||= [0, 0, grid.width, grid.height]~ ** Processing line: ~~ ** Processing line: ~ # At some step the animation will end,~ ** Processing line: ~ # and further steps won't change anything (the whole grid.widthill be explored)~ ** Processing line: ~ # This step is roughly the grid's width * height~ ** Processing line: ~ # When anim_steps equals max_steps no more calculations will occur~ ** Processing line: ~ # and the slider will be at the end~ ** Processing line: ~ state.max_steps ||= args.state.grid.width * args.state.grid.height~ ** Processing line: ~~ ** Processing line: ~ # The location of the star and walls of the grid~ ** Processing line: ~ # They can be modified to have a different initial grid~ ** Processing line: ~ # Walls are stored in a hash for quick look up when doing the search~ ** Processing line: ~ state.star ||= [2, 8]~ ** Processing line: ~ state.target ||= [10, 5]~ ** Processing line: ~ state.walls ||= {}~ ** Processing line: ~~ ** Processing line: ~ # Variables that are used by the breadth first search~ ** Processing line: ~ # Storing cells that the search has visited, prevents unnecessary steps~ ** Processing line: ~ # Expanding the frontier of the search in order makes the search expand~ ** Processing line: ~ # from the center outward~ ** Processing line: ~~ ** Processing line: ~ # Visited cells in the first grid~ ** Processing line: ~ state.visited ||= {}~ ** Processing line: ~ # Visited cells in the second grid~ ** Processing line: ~ state.early_exit_visited ||= {}~ ** Processing line: ~ # The cells from which the search is to expand~ ** Processing line: ~ state.frontier ||= []~ ** Processing line: ~ # A hash of where each cell was expanded from~ ** Processing line: ~ # The key is a cell, and the value is the cell it came from~ ** Processing line: ~ state.came_from ||= {}~ ** Processing line: ~ # Cells that are part of the path from the target to the star~ ** Processing line: ~ state.path ||= {}~ ** Processing line: ~~ ** Processing line: ~ # What the user is currently editing on the grid~ ** Processing line: ~ # We store this value, because we want to remember the value even when~ ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ ** Processing line: ~ # they are still clicking down on the mouse.~ ** Processing line: ~ state.current_input ||= :none~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws everything onto the screen~ ** Processing line: ~ def render~ ** Processing line: ~ render_background~ ** Processing line: ~ render_heat_map~ ** Processing line: ~ render_walls~ ** Processing line: ~ render_path~ ** Processing line: ~ render_star~ ** Processing line: ~ render_target~ ** Processing line: ~ render_labels~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The methods below subdivide the task of drawing everything to the screen~ ** Processing line: ~~ ** Processing line: ~ # Draws what the grid looks like with nothing on it~ ** Processing line: ~ def render_background~ ** Processing line: ~ render_unvisited~ ** Processing line: ~ render_grid_lines~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws both grids~ ** Processing line: ~ def render_unvisited~ ** Processing line: ~ outputs.solids << [scale_up(grid.rect), unvisited_color]~ ** Processing line: ~ outputs.solids << [early_exit_scale_up(grid.rect), unvisited_color]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws grid lines to show the division of the grid into cells~ ** Processing line: ~ def render_grid_lines~ ** Processing line: ~ for x in 0..grid.width~ ** Processing line: ~ outputs.lines << vertical_line(x)~ ** Processing line: ~ outputs.lines << early_exit_vertical_line(x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ for y in 0..grid.height~ ** Processing line: ~ outputs.lines << horizontal_line(y)~ ** Processing line: ~ outputs.lines << early_exit_horizontal_line(y)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easy way to draw vertical lines given an index~ ** Processing line: ~ def vertical_line column~ ** Processing line: ~ scale_up([column, 0, column, grid.height])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easy way to draw horizontal lines given an index~ ** Processing line: ~ def horizontal_line row~ ** Processing line: ~ scale_up([0, row, grid.width, row])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easy way to draw vertical lines given an index~ ** Processing line: ~ def early_exit_vertical_line column~ ** Processing line: ~ scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easy way to draw horizontal lines given an index~ ** Processing line: ~ def early_exit_horizontal_line row~ ** Processing line: ~ scale_up([grid.width + 1, row, grid.width + grid.width + 1, row])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws the walls on both grids~ ** Processing line: ~ def render_walls~ ** Processing line: ~ state.walls.each_key do |wall|~ ** Processing line: ~ outputs.solids << [scale_up(wall), wall_color]~ ** Processing line: ~ outputs.solids << [early_exit_scale_up(wall), wall_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the star on both grids~ ** Processing line: ~ def render_star~ ** Processing line: ~ outputs.sprites << [scale_up(state.star), 'star.png']~ ** Processing line: ~ outputs.sprites << [early_exit_scale_up(state.star), 'star.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the target on both grids~ ** Processing line: ~ def render_target~ ** Processing line: ~ outputs.sprites << [scale_up(state.target), 'target.png']~ ** Processing line: ~ outputs.sprites << [early_exit_scale_up(state.target), 'target.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Labels the grids~ ** Processing line: ~ def render_labels~ ** Processing line: ~ outputs.labels << [200, 625, "Without early exit"]~ ** Processing line: ~ outputs.labels << [875, 625, "With early exit"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the path based off of the state.path hash~ ** Processing line: ~ def render_path~ ** Processing line: ~ # If the star and target are disconnected there will only be one path~ ** Processing line: ~ # The path should not render in that case~ ** Processing line: ~ unless state.path.size == 1~ ** Processing line: ~ state.path.each_key do | cell |~ ** Processing line: ~ # Renders path on both grids~ ** Processing line: ~ outputs.solids << [scale_up(cell), path_color]~ ** Processing line: ~ outputs.solids << [early_exit_scale_up(cell), path_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates the path from the target to the star after the search is over~ ** Processing line: ~ # Relies on the came_from hash~ ** Processing line: ~ # Fills the state.path hash, which is later rendered on screen~ ** Processing line: ~ def calc_path~ ** Processing line: ~ endpoint = state.target~ ** Processing line: ~ while endpoint~ ** Processing line: ~ state.path[endpoint] = true~ ** Processing line: ~ endpoint = state.came_from[endpoint]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Representation of how far away visited cells are from the star~ ** Processing line: ~ # Replaces the render_visited method~ ** Processing line: ~ # Visually demonstrates the effectiveness of early exit for pathfinding~ ** Processing line: ~ def render_heat_map~ ** Processing line: ~ state.visited.each_key do | visited_cell |~ ** Processing line: ~ distance = (state.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs~ ** Processing line: ~ max_distance = grid.width + grid.height~ ** Processing line: ~ alpha = 255.to_i * distance.to_i / max_distance.to_i~ ** Processing line: ~ outputs.solids << [scale_up(visited_cell), red, alpha]~ ** Processing line: ~ # outputs.solids << [early_exit_scale_up(visited_cell), red, alpha]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.early_exit_visited.each_key do | visited_cell |~ ** Processing line: ~ distance = (state.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs~ ** Processing line: ~ max_distance = grid.width + grid.height~ ** Processing line: ~ alpha = 255.to_i * distance.to_i / max_distance.to_i~ ** Processing line: ~ outputs.solids << [early_exit_scale_up(visited_cell), red, alpha]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Translates the given cell grid.width + 1 to the right and then scales up~ ** Processing line: ~ # Used to draw cells for the second grid~ ** Processing line: ~ # This method does not work for lines,~ ** Processing line: ~ # so separate methods exist for the grid lines~ ** Processing line: ~ def early_exit_scale_up(cell)~ ** Processing line: ~ cell_clone = cell.clone~ ** Processing line: ~ cell_clone.x += grid.width + 1~ ** Processing line: ~ scale_up(cell_clone)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # In code, the cells are represented as 1x1 rectangles~ ** Processing line: ~ # When drawn, the cells are larger than 1x1 rectangles~ ** Processing line: ~ # This method is used to scale up cells, and lines~ ** Processing line: ~ # Objects are scaled up according to the grid.cell_size variable~ ** Processing line: ~ # This allows for easy customization of the visual scale of the grid~ ** Processing line: ~ def scale_up(cell)~ ** Processing line: ~ # Prevents the original value of cell from being edited~ ** Processing line: ~ cell = cell.clone~ ** Processing line: ~~ ** Processing line: ~ # If cell is just an x and y coordinate~ ** Processing line: ~ if cell.size == 2~ ** Processing line: ~ # Add a width and height of 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Scale all the values up~ ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ ** Processing line: ~~ ** Processing line: ~ # Returns the scaled up cell~ ** Processing line: ~ cell~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This method processes user input every tick~ ** Processing line: ~ # Any method with "1" is related to the first grid~ ** Processing line: ~ # Any method with "2" is related to the second grid~ ** Processing line: ~ def input~ ** Processing line: ~ # The program has to remember that the user is dragging an object~ ** Processing line: ~ # even when the mouse is no longer over that object~ ** Processing line: ~ # So detecting input and processing input is separate~ ** Processing line: ~ detect_input~ ** Processing line: ~ process_input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Determines what the user is editing and stores the value~ ** Processing line: ~ # Storing the value allows the user to continue the same edit as long as the~ ** Processing line: ~ # mouse left click is held~ ** Processing line: ~ def detect_input~ ** Processing line: ~ # When the mouse is up, nothing is being edited~ ** Processing line: ~ if inputs.mouse.up~ ** Processing line: ~ state.current_input = :none~ ** Processing line: ~ # When the star in the no second grid is clicked~ ** Processing line: ~ elsif star_clicked?~ ** Processing line: ~ state.current_input = :star~ ** Processing line: ~ # When the star in the second grid is clicked~ ** Processing line: ~ elsif star2_clicked?~ ** Processing line: ~ state.current_input = :star2~ ** Processing line: ~ # When the target in the no second grid is clicked~ ** Processing line: ~ elsif target_clicked?~ ** Processing line: ~ state.current_input = :target~ ** Processing line: ~ # When the target in the second grid is clicked~ ** Processing line: ~ elsif target2_clicked?~ ** Processing line: ~ state.current_input = :target2~ ** Processing line: ~ # When a wall in the first grid is clicked~ ** Processing line: ~ elsif wall_clicked?~ ** Processing line: ~ state.current_input = :remove_wall~ ** Processing line: ~ # When a wall in the second grid is clicked~ ** Processing line: ~ elsif wall2_clicked?~ ** Processing line: ~ state.current_input = :remove_wall2~ ** Processing line: ~ # When the first grid is clicked~ ** Processing line: ~ elsif grid_clicked?~ ** Processing line: ~ state.current_input = :add_wall~ ** Processing line: ~ # When the second grid is clicked~ ** Processing line: ~ elsif grid2_clicked?~ ** Processing line: ~ state.current_input = :add_wall2~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Processes click and drag based on what the user is currently dragging~ ** Processing line: ~ def process_input~ ** Processing line: ~ if state.current_input == :star~ ** Processing line: ~ input_star~ ** Processing line: ~ elsif state.current_input == :star2~ ** Processing line: ~ input_star2~ ** Processing line: ~ elsif state.current_input == :target~ ** Processing line: ~ input_target~ ** Processing line: ~ elsif state.current_input == :target2~ ** Processing line: ~ input_target2~ ** Processing line: ~ elsif state.current_input == :remove_wall~ ** Processing line: ~ input_remove_wall~ ** Processing line: ~ elsif state.current_input == :remove_wall2~ ** Processing line: ~ input_remove_wall2~ ** Processing line: ~ elsif state.current_input == :add_wall~ ** Processing line: ~ input_add_wall~ ** Processing line: ~ elsif state.current_input == :add_wall2~ ** Processing line: ~ input_add_wall2~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the star to the cell closest to the mouse in the first grid~ ** Processing line: ~ # Only resets the search if the star changes position~ ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ ** Processing line: ~ def input_star~ ** Processing line: ~ old_star = state.star.clone~ ** Processing line: ~ state.star = cell_closest_to_mouse~ ** Processing line: ~ unless old_star == state.star~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the star to the cell closest to the mouse in the second grid~ ** Processing line: ~ # Only resets the search if the star changes position~ ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ ** Processing line: ~ def input_star2~ ** Processing line: ~ old_star = state.star.clone~ ** Processing line: ~ state.star = cell_closest_to_mouse2~ ** Processing line: ~ unless old_star == state.star~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the target to the grid closest to the mouse in the first grid~ ** Processing line: ~ # Only reset_searchs the search if the target changes position~ ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ ** Processing line: ~ def input_target~ ** Processing line: ~ old_target = state.target.clone~ ** Processing line: ~ state.target = cell_closest_to_mouse~ ** Processing line: ~ unless old_target == state.target~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the target to the cell closest to the mouse in the second grid~ ** Processing line: ~ # Only reset_searchs the search if the target changes position~ ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ ** Processing line: ~ def input_target2~ ** Processing line: ~ old_target = state.target.clone~ ** Processing line: ~ state.target = cell_closest_to_mouse2~ ** Processing line: ~ unless old_target == state.target~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Removes walls in the first grid that are under the cursor~ ** Processing line: ~ def input_remove_wall~ ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ ** Processing line: ~ # the cursor is directly over~ ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ ** Processing line: ~ if mouse_inside_grid?~ ** Processing line: ~ if state.walls.has_key?(cell_closest_to_mouse)~ ** Processing line: ~ state.walls.delete(cell_closest_to_mouse)~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Removes walls in the second grid that are under the cursor~ ** Processing line: ~ def input_remove_wall2~ ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ ** Processing line: ~ # the cursor is directly over~ ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ ** Processing line: ~ if mouse_inside_grid2?~ ** Processing line: ~ if state.walls.has_key?(cell_closest_to_mouse2)~ ** Processing line: ~ state.walls.delete(cell_closest_to_mouse2)~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds a wall in the first grid in the cell the mouse is over~ ** Processing line: ~ def input_add_wall~ ** Processing line: ~ if mouse_inside_grid?~ ** Processing line: ~ unless state.walls.has_key?(cell_closest_to_mouse)~ ** Processing line: ~ state.walls[cell_closest_to_mouse] = true~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Adds a wall in the second grid in the cell the mouse is over~ ** Processing line: ~ def input_add_wall2~ ** Processing line: ~ if mouse_inside_grid2?~ ** Processing line: ~ unless state.walls.has_key?(cell_closest_to_mouse2)~ ** Processing line: ~ state.walls[cell_closest_to_mouse2] = true~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Whenever the user edits the grid,~ ** Processing line: ~ # The search has to be reset_searchd upto the current step~ ** Processing line: ~ # with the current grid as the initial state of the grid~ ** Processing line: ~ def reset_search~ ** Processing line: ~ # Reset_Searchs the search~ ** Processing line: ~ state.frontier = []~ ** Processing line: ~ state.visited = {}~ ** Processing line: ~ state.early_exit_visited = {}~ ** Processing line: ~ state.came_from = {}~ ** Processing line: ~ state.path = {}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the search forward one step~ ** Processing line: ~ def step~ ** Processing line: ~ # The setup to the search~ ** Processing line: ~ # Runs once when there are no visited cells~ ** Processing line: ~ if state.visited.empty?~ ** Processing line: ~ state.visited[state.star] = true~ ** Processing line: ~ state.early_exit_visited[state.star] = true~ ** Processing line: ~ state.frontier << state.star~ ** Processing line: ~ state.came_from[state.star] = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # A step in the search~ ** Processing line: ~ unless state.frontier.empty?~ ** Processing line: ~ # Takes the next frontier cell~ ** Processing line: ~ new_frontier = state.frontier.shift~ ** Processing line: ~ # For each of its neighbors~ ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ ** Processing line: ~ # That have not been visited and are not walls~ ** Processing line: ~ unless state.visited.has_key?(neighbor) || state.walls.has_key?(neighbor)~ ** Processing line: ~ # Add them to the frontier and mark them as visited in the first grid~ ** Processing line: ~ state.visited[neighbor] = true~ ** Processing line: ~ # Unless the target has been visited~ ** Processing line: ~ unless state.visited.has_key?(state.target)~ ** Processing line: ~ # Mark the neighbor as visited in the second grid as well~ ** Processing line: ~ state.early_exit_visited[neighbor] = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Add the neighbor to the frontier and remember which cell it came from~ ** Processing line: ~ state.frontier << neighbor~ ** Processing line: ~ state.came_from[neighbor] = new_frontier~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Returns a list of adjacent cells~ ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ ** Processing line: ~ def adjacent_neighbors(cell)~ ** Processing line: ~ neighbors = []~ ** Processing line: ~~ ** Processing line: ~ # Gets all the valid neighbors into the array~ ** Processing line: ~ # From southern neighbor, clockwise~ ** Processing line: ~ neighbors << [cell.x, cell.y - 1] unless cell.y == 0~ ** Processing line: ~ neighbors << [cell.x - 1, cell.y] unless cell.x == 0~ ** Processing line: ~ neighbors << [cell.x, cell.y + 1] unless cell.y == grid.height - 1~ ** Processing line: ~ neighbors << [cell.x + 1, cell.y] unless cell.x == grid.width - 1~ ** Processing line: ~~ ** Processing line: ~ # Sorts the neighbors so the rendered path is a zigzag path~ ** Processing line: ~ # Cells in a diagonal direction are given priority~ ** Processing line: ~ # Comment this line to see the difference~ ** Processing line: ~ neighbors = neighbors.sort_by { |neighbor_x, neighbor_y| proximity_to_star(neighbor_x, neighbor_y) }~ ** Processing line: ~~ ** Processing line: ~ neighbors~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds the vertical and horizontal distance of a cell from the star~ ** Processing line: ~ # and returns the larger value~ ** Processing line: ~ # This method is used to have a zigzag pattern in the rendered path~ ** Processing line: ~ # A cell that is [5, 5] from the star,~ ** Processing line: ~ # is explored before over a cell that is [0, 7] away.~ ** Processing line: ~ # So, if possible, the search tries to go diagonal (zigzag) first~ ** Processing line: ~ def proximity_to_star(x, y)~ ** Processing line: ~ distance_x = (state.star.x - x).abs~ ** Processing line: ~ distance_y = (state.star.y - y).abs~ ** Processing line: ~~ ** Processing line: ~ if distance_x > distance_y~ ** Processing line: ~ return distance_x~ ** Processing line: ~ else~ ** Processing line: ~ return distance_y~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ ** Processing line: ~ # Finding the cell closest to the mouse helps with this~ ** Processing line: ~ def cell_closest_to_mouse~ ** Processing line: ~ # Closest cell to the mouse in the first grid~ ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ ** Processing line: ~ # Bound x and y to the grid~ ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ ** Processing line: ~ # Return closest cell~ ** Processing line: ~ [x, y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ ** Processing line: ~ # Finding the cell closest to the mouse in the second grid helps with this~ ** Processing line: ~ def cell_closest_to_mouse2~ ** Processing line: ~ # Closest cell grid to the mouse in the second~ ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ ** Processing line: ~ # Translate the cell to the first grid~ ** Processing line: ~ x -= grid.width + 1~ ** Processing line: ~ # Bound x and y to the first grid~ ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ ** Processing line: ~ # Return closest cell~ ** Processing line: ~ [x, y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the star from the first grid~ ** Processing line: ~ def star_clicked?~ ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(state.star))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the star from the second grid~ ** Processing line: ~ def star2_clicked?~ ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(early_exit_scale_up(state.star))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the target from the first grid~ ** Processing line: ~ def target_clicked?~ ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(scale_up(state.target))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the target from the second grid~ ** Processing line: ~ def target2_clicked?~ ** Processing line: ~ inputs.mouse.down && inputs.mouse.point.inside_rect?(early_exit_scale_up(state.target))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing walls from the first grid~ ** Processing line: ~ def wall_clicked?~ ** Processing line: ~ inputs.mouse.down && mouse_inside_wall?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing walls from the second grid~ ** Processing line: ~ def wall2_clicked?~ ** Processing line: ~ inputs.mouse.down && mouse_inside_wall2?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be adding walls from the first grid~ ** Processing line: ~ def grid_clicked?~ ** Processing line: ~ inputs.mouse.down && mouse_inside_grid?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be adding walls from the second grid~ ** Processing line: ~ def grid2_clicked?~ ** Processing line: ~ inputs.mouse.down && mouse_inside_grid2?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns whether the mouse is inside of a wall in the first grid~ ** Processing line: ~ # Part of the condition that checks whether the user is removing a wall~ ** Processing line: ~ def mouse_inside_wall?~ ** Processing line: ~ state.walls.each_key do | wall |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(scale_up(wall))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns whether the mouse is inside of a wall in the second grid~ ** Processing line: ~ # Part of the condition that checks whether the user is removing a wall~ ** Processing line: ~ def mouse_inside_wall2?~ ** Processing line: ~ state.walls.each_key do | wall |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(early_exit_scale_up(wall))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns whether the mouse is inside of the first grid~ ** Processing line: ~ # Part of the condition that checks whether the user is adding a wall~ ** Processing line: ~ def mouse_inside_grid?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(scale_up(grid.rect))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns whether the mouse is inside of the second grid~ ** Processing line: ~ # Part of the condition that checks whether the user is adding a wall~ ** Processing line: ~ def mouse_inside_grid2?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(early_exit_scale_up(grid.rect))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # These methods provide handy aliases to colors~ ** Processing line: ~~ ** Processing line: ~ # Light brown~ ** Processing line: ~ def unvisited_color~ ** Processing line: ~ [221, 212, 213]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Camo Green~ ** Processing line: ~ def wall_color~ ** Processing line: ~ [134, 134, 120]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Pastel White~ ** Processing line: ~ def path_color~ ** Processing line: ~ [231, 230, 228]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def red~ ** Processing line: ~ [255, 0, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Makes code more concise~ ** Processing line: ~ def grid~ ** Processing line: ~ state.grid~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Method that is called by DragonRuby periodically~ ** Processing line: ~ # Used for updating animations and calculations~ ** Processing line: ~ def tick args~ ** Processing line: ~~ ** Processing line: ~ # Pressing r will reset the application~ ** Processing line: ~ if args.inputs.keyboard.key_down.r~ ** Processing line: ~ args.gtk.reset~ ** Processing line: ~ reset~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Every tick, new args are passed, and the Breadth First Search tick is called~ ** Processing line: ~ $early_exit_breadth_first_search ||= EarlyExitBreadthFirstSearch.new~ ** Processing line: ~ $early_exit_breadth_first_search.args = args~ ** Processing line: ~ $early_exit_breadth_first_search.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def reset~ ** Processing line: ~ $early_exit_breadth_first_search = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Path Finding Algorithms - Dijkstra - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Dijkstra - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Dijkstra - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/13_path_finding_algorithms/05_dijkstra/app/main.rb~ ** Processing line: ~ # Demonstrates how Dijkstra's Algorithm allows movement costs to be considered~ ** Processing line: ~~ ** Processing line: ~ # Inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html~ ** Processing line: ~~ ** Processing line: ~ # The first grid is a breadth first search with an early exit.~ ** Processing line: ~ # It shows a heat map of all the cells that were visited by the search and their relative distance.~ ** Processing line: ~~ ** Processing line: ~ # The second grid is an implementation of Dijkstra's algorithm.~ ** Processing line: ~ # Light green cells have 5 times the movement cost of regular cells.~ ** Processing line: ~ # The heat map will darken based on movement cost.~ ** Processing line: ~~ ** Processing line: ~ # Dark green cells are walls, and the search cannot go through them.~ ** Processing line: ~ class Movement_Costs~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ # This method is called every frame/tick~ ** Processing line: ~ # Every tick, the current state of the search is rendered on the screen,~ ** Processing line: ~ # User input is processed, and~ ** Processing line: ~ # The next step in the search is calculated~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ input~ ** Processing line: ~ calc~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ # Variables to edit the size and appearance of the grid~ ** Processing line: ~ # Freely customizable to user's liking~ ** Processing line: ~ grid.width ||= 10~ ** Processing line: ~ grid.height ||= 10~ ** Processing line: ~ grid.cell_size ||= 60~ ** Processing line: ~ grid.rect ||= [0, 0, grid.width, grid.height]~ ** Processing line: ~~ ** Processing line: ~ # The location of the star and walls of the grid~ ** Processing line: ~ # They can be modified to have a different initial grid~ ** Processing line: ~ # Walls are stored in a hash for quick look up when doing the search~ ** Processing line: ~ state.star ||= [1, 5]~ ** Processing line: ~ state.target ||= [8, 4]~ ** Processing line: ~ state.walls ||= {[1, 1] => true, [2, 1] => true, [3, 1] => true, [1, 2] => true, [2, 2] => true, [3, 2] => true}~ ** Processing line: ~ state.hills ||= {~ ** Processing line: ~ [4, 1] => true,~ ** Processing line: ~ [5, 1] => true,~ ** Processing line: ~ [4, 2] => true,~ ** Processing line: ~ [5, 2] => true,~ ** Processing line: ~ [6, 2] => true,~ ** Processing line: ~ [4, 3] => true,~ ** Processing line: ~ [5, 3] => true,~ ** Processing line: ~ [6, 3] => true,~ ** Processing line: ~ [3, 4] => true,~ ** Processing line: ~ [4, 4] => true,~ ** Processing line: ~ [5, 4] => true,~ ** Processing line: ~ [6, 4] => true,~ ** Processing line: ~ [7, 4] => true,~ ** Processing line: ~ [3, 5] => true,~ ** Processing line: ~ [4, 5] => true,~ ** Processing line: ~ [5, 5] => true,~ ** Processing line: ~ [6, 5] => true,~ ** Processing line: ~ [7, 5] => true,~ ** Processing line: ~ [4, 6] => true,~ ** Processing line: ~ [5, 6] => true,~ ** Processing line: ~ [6, 6] => true,~ ** Processing line: ~ [7, 6] => true,~ ** Processing line: ~ [4, 7] => true,~ ** Processing line: ~ [5, 7] => true,~ ** Processing line: ~ [6, 7] => true,~ ** Processing line: ~ [4, 8] => true,~ ** Processing line: ~ [5, 8] => true,~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ # What the user is currently editing on the grid~ ** Processing line: ~ # We store this value, because we want to remember the value even when~ ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ ** Processing line: ~ # they are still clicking down on the mouse.~ ** Processing line: ~ state.user_input ||= :none~ ** Processing line: ~~ ** Processing line: ~ # Values that are used for the breadth first search~ ** Processing line: ~ # Keeping track of what cells were visited prevents counting cells multiple times~ ** Processing line: ~ breadth_first_search.visited ||= {}~ ** Processing line: ~ # The cells from which the breadth first search will expand~ ** Processing line: ~ breadth_first_search.frontier ||= []~ ** Processing line: ~ # Keeps track of which cell all cells were searched from~ ** Processing line: ~ # Used to recreate the path from the target to the star~ ** Processing line: ~ breadth_first_search.came_from ||= {}~ ** Processing line: ~~ ** Processing line: ~ # Keeps track of the movement cost so far to be at a cell~ ** Processing line: ~ # Allows the costs of new cells to be quickly calculated~ ** Processing line: ~ # Also doubles as a way to check if cells have already been visited~ ** Processing line: ~ dijkstra_search.cost_so_far ||= {}~ ** Processing line: ~ # The cells from which the Dijkstra search will expand~ ** Processing line: ~ dijkstra_search.frontier ||= []~ ** Processing line: ~ # Keeps track of which cell all cells were searched from~ ** Processing line: ~ # Used to recreate the path from the target to the star~ ** Processing line: ~ dijkstra_search.came_from ||= {}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws everything onto the screen~ ** Processing line: ~ def render~ ** Processing line: ~ render_background~ ** Processing line: ~~ ** Processing line: ~ render_heat_maps~ ** Processing line: ~~ ** Processing line: ~ render_star~ ** Processing line: ~ render_target~ ** Processing line: ~ render_hills~ ** Processing line: ~ render_walls~ ** Processing line: ~~ ** Processing line: ~ render_paths~ ** Processing line: ~ end~ ** Processing line: ~ # The methods below subdivide the task of drawing everything to the screen~ ** Processing line: ~~ ** Processing line: ~ # Draws what the grid looks like with nothing on it~ ** Processing line: ~ def render_background~ ** Processing line: ~ render_unvisited~ ** Processing line: ~ render_grid_lines~ ** Processing line: ~ render_labels~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws two rectangles the size of the grid in the default cell color~ ** Processing line: ~ # Used as part of the background~ ** Processing line: ~ def render_unvisited~ ** Processing line: ~ outputs.solids << [scale_up(grid.rect), unvisited_color]~ ** Processing line: ~ outputs.solids << [move_and_scale_up(grid.rect), unvisited_color]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws grid lines to show the division of the grid into cells~ ** Processing line: ~ def render_grid_lines~ ** Processing line: ~ for x in 0..grid.width~ ** Processing line: ~ outputs.lines << vertical_line(x)~ ** Processing line: ~ outputs.lines << shifted_vertical_line(x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ for y in 0..grid.height~ ** Processing line: ~ outputs.lines << horizontal_line(y)~ ** Processing line: ~ outputs.lines << shifted_horizontal_line(y)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easy way to draw vertical lines given an index for the first grid~ ** Processing line: ~ def vertical_line column~ ** Processing line: ~ scale_up([column, 0, column, grid.height])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easy way to draw horizontal lines given an index for the second grid~ ** Processing line: ~ def horizontal_line row~ ** Processing line: ~ scale_up([0, row, grid.width, row])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easy way to draw vertical lines given an index for the first grid~ ** Processing line: ~ def shifted_vertical_line column~ ** Processing line: ~ scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easy way to draw horizontal lines given an index for the second grid~ ** Processing line: ~ def shifted_horizontal_line row~ ** Processing line: ~ scale_up([grid.width + 1, row, grid.width + grid.width + 1, row])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Labels the grids~ ** Processing line: ~ def render_labels~ ** Processing line: ~ outputs.labels << [175, 650, "Number of steps", 3]~ ** Processing line: ~ outputs.labels << [925, 650, "Distance", 3]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_paths~ ** Processing line: ~ render_breadth_first_search_path~ ** Processing line: ~ render_dijkstra_path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_heat_maps~ ** Processing line: ~ render_breadth_first_search_heat_map~ ** Processing line: ~ render_dijkstra_heat_map~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the breadth first search on the first grid~ ** Processing line: ~ def render_breadth_first_search~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This heat map shows the cells explored by the breadth first search and how far they are from the star.~ ** Processing line: ~ def render_breadth_first_search_heat_map~ ** Processing line: ~ # For each cell explored~ ** Processing line: ~ breadth_first_search.visited.each_key do | visited_cell |~ ** Processing line: ~ # Find its distance from the star~ ** Processing line: ~ distance = (state.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs~ ** Processing line: ~ max_distance = grid.width + grid.height~ ** Processing line: ~ # Get it as a percent of the maximum distance and scale to 255 for use as an alpha value~ ** Processing line: ~ alpha = 255.to_i * distance.to_i / max_distance.to_i~ ** Processing line: ~ outputs.solids << [scale_up(visited_cell), red, alpha]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_breadth_first_search_path~ ** Processing line: ~ # If the search found the target~ ** Processing line: ~ if breadth_first_search.visited.has_key?(state.target)~ ** Processing line: ~ # Start from the target~ ** Processing line: ~ endpoint = state.target~ ** Processing line: ~ # And the cell it came from~ ** Processing line: ~ next_endpoint = breadth_first_search.came_from[endpoint]~ ** Processing line: ~ while endpoint and next_endpoint~ ** Processing line: ~ # Draw a path between these two cells~ ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ ** Processing line: ~ outputs.solids << [scale_up(path), path_color]~ ** Processing line: ~ # And get the next pair of cells~ ** Processing line: ~ endpoint = next_endpoint~ ** Processing line: ~ next_endpoint = breadth_first_search.came_from[endpoint]~ ** Processing line: ~ # Continue till there are no more cells~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the Dijkstra search on the second grid~ ** Processing line: ~ def render_dijkstra~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_dijkstra_heat_map~ ** Processing line: ~ dijkstra_search.cost_so_far.each do |visited_cell, cost|~ ** Processing line: ~ max_cost = (grid.width + grid.height) #* 5~ ** Processing line: ~ alpha = 255.to_i * cost.to_i / max_cost.to_i~ ** Processing line: ~ outputs.solids << [move_and_scale_up(visited_cell), red, alpha]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_dijkstra_path~ ** Processing line: ~ # If the search found the target~ ** Processing line: ~ if dijkstra_search.came_from.has_key?(state.target)~ ** Processing line: ~ # Get the target and the cell it came from~ ** Processing line: ~ endpoint = state.target~ ** Processing line: ~ next_endpoint = dijkstra_search.came_from[endpoint]~ ** Processing line: ~ while endpoint and next_endpoint~ ** Processing line: ~ # Draw a path between them~ ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ ** Processing line: ~ outputs.solids << [move_and_scale_up(path), path_color]~ ** Processing line: ~~ ** Processing line: ~ # Shift one cell down the path~ ** Processing line: ~ endpoint = next_endpoint~ ** Processing line: ~ next_endpoint = dijkstra_search.came_from[endpoint]~ ** Processing line: ~~ ** Processing line: ~ # Repeat till the end of the path~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the star on both grids~ ** Processing line: ~ def render_star~ ** Processing line: ~ outputs.sprites << [scale_up(state.star), 'star.png']~ ** Processing line: ~ outputs.sprites << [move_and_scale_up(state.star), 'star.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the target on both grids~ ** Processing line: ~ def render_target~ ** Processing line: ~ outputs.sprites << [scale_up(state.target), 'target.png']~ ** Processing line: ~ outputs.sprites << [move_and_scale_up(state.target), 'target.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_hills~ ** Processing line: ~ state.hills.each_key do |hill|~ ** Processing line: ~ outputs.solids << [scale_up(hill), hill_color]~ ** Processing line: ~ outputs.solids << [move_and_scale_up(hill), hill_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Draws the walls on both grids~ ** Processing line: ~ def render_walls~ ** Processing line: ~ state.walls.each_key do |wall|~ ** Processing line: ~ outputs.solids << [scale_up(wall), wall_color]~ ** Processing line: ~ outputs.solids << [move_and_scale_up(wall), wall_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_path_between(cell_one, cell_two)~ ** Processing line: ~ path = nil~ ** Processing line: ~ if cell_one.x == cell_two.x~ ** Processing line: ~ if cell_one.y < cell_two.y~ ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 0.4, 1.4]~ ** Processing line: ~ else~ ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 0.4, 1.4]~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ if cell_one.x < cell_two.x~ ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 1.4, 0.4]~ ** Processing line: ~ else~ ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 1.4, 0.4]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Representation of how far away visited cells are from the star~ ** Processing line: ~ # Replaces the render_visited method~ ** Processing line: ~ # Visually demonstrates the effectiveness of early exit for pathfinding~ ** Processing line: ~ def render_breadth_first_search_heat_map~ ** Processing line: ~ breadth_first_search.visited.each_key do | visited_cell |~ ** Processing line: ~ distance = (state.star.x - visited_cell.x).abs + (state.star.y - visited_cell.y).abs~ ** Processing line: ~ max_distance = grid.width + grid.height~ ** Processing line: ~ alpha = 255.to_i * distance.to_i / max_distance.to_i~ ** Processing line: ~ outputs.solids << [scale_up(visited_cell), red, alpha]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Translates the given cell grid.width + 1 to the right and then scales up~ ** Processing line: ~ # Used to draw cells for the second grid~ ** Processing line: ~ # This method does not work for lines,~ ** Processing line: ~ # so separate methods exist for the grid lines~ ** Processing line: ~ def move_and_scale_up(cell)~ ** Processing line: ~ cell_clone = cell.clone~ ** Processing line: ~ cell_clone.x += grid.width + 1~ ** Processing line: ~ scale_up(cell_clone)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # In code, the cells are represented as 1x1 rectangles~ ** Processing line: ~ # When drawn, the cells are larger than 1x1 rectangles~ ** Processing line: ~ # This method is used to scale up cells, and lines~ ** Processing line: ~ # Objects are scaled up according to the grid.cell_size variable~ ** Processing line: ~ # This allows for easy customization of the visual scale of the grid~ ** Processing line: ~ def scale_up(cell)~ ** Processing line: ~ # Prevents the original value of cell from being edited~ ** Processing line: ~ cell = cell.clone~ ** Processing line: ~~ ** Processing line: ~ # If cell is just an x and y coordinate~ ** Processing line: ~ if cell.size == 2~ ** Processing line: ~ # Add a width and height of 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Scale all the values up~ ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ ** Processing line: ~~ ** Processing line: ~ # Returns the scaled up cell~ ** Processing line: ~ cell~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Handles user input every tick so the grid can be edited~ ** Processing line: ~ # Separate input detection and processing is needed~ ** Processing line: ~ # For example: Adding walls is started by clicking down on a hill,~ ** Processing line: ~ # but the mouse doesn't need to remain over hills to add walls~ ** Processing line: ~ def input~ ** Processing line: ~ # If the mouse was lifted this tick~ ** Processing line: ~ if inputs.mouse.up~ ** Processing line: ~ # Set current input to none~ ** Processing line: ~ state.user_input = :none~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # If the mouse was clicked this tick~ ** Processing line: ~ if inputs.mouse.down~ ** Processing line: ~ # Determine what the user is editing and edit the state.user_input variable~ ** Processing line: ~ determine_input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Process user input based on user_input variable and current mouse position~ ** Processing line: ~ process_input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Determines what the user is editing and stores the value~ ** Processing line: ~ # This method is called the tick the mouse is clicked~ ** Processing line: ~ # Storing the value allows the user to continue the same edit as long as the~ ** Processing line: ~ # mouse left click is held~ ** Processing line: ~ def determine_input~ ** Processing line: ~ # If the mouse is over the star in the first grid~ ** Processing line: ~ if mouse_over_star?~ ** Processing line: ~ # The user is editing the star from the first grid~ ** Processing line: ~ state.user_input = :star~ ** Processing line: ~ # If the mouse is over the star in the second grid~ ** Processing line: ~ elsif mouse_over_star2?~ ** Processing line: ~ # The user is editing the star from the second grid~ ** Processing line: ~ state.user_input = :star2~ ** Processing line: ~ # If the mouse is over the target in the first grid~ ** Processing line: ~ elsif mouse_over_target?~ ** Processing line: ~ # The user is editing the target from the first grid~ ** Processing line: ~ state.user_input = :target~ ** Processing line: ~ # If the mouse is over the target in the second grid~ ** Processing line: ~ elsif mouse_over_target2?~ ** Processing line: ~ # The user is editing the target from the second grid~ ** Processing line: ~ state.user_input = :target2~ ** Processing line: ~ # If the mouse is over a wall in the first grid~ ** Processing line: ~ elsif mouse_over_wall?~ ** Processing line: ~ # The user is removing a wall from the first grid~ ** Processing line: ~ state.user_input = :remove_wall~ ** Processing line: ~ # If the mouse is over a wall in the second grid~ ** Processing line: ~ elsif mouse_over_wall2?~ ** Processing line: ~ # The user is removing a wall from the second grid~ ** Processing line: ~ state.user_input = :remove_wall2~ ** Processing line: ~ # If the mouse is over a hill in the first grid~ ** Processing line: ~ elsif mouse_over_hill?~ ** Processing line: ~ # The user is adding a wall from the first grid~ ** Processing line: ~ state.user_input = :add_wall~ ** Processing line: ~ # If the mouse is over a hill in the second grid~ ** Processing line: ~ elsif mouse_over_hill2?~ ** Processing line: ~ # The user is adding a wall from the second grid~ ** Processing line: ~ state.user_input = :add_wall2~ ** Processing line: ~ # If the mouse is over the first grid~ ** Processing line: ~ elsif mouse_over_grid?~ ** Processing line: ~ # The user is adding a hill from the first grid~ ** Processing line: ~ state.user_input = :add_hill~ ** Processing line: ~ # If the mouse is over the second grid~ ** Processing line: ~ elsif mouse_over_grid2?~ ** Processing line: ~ # The user is adding a hill from the second grid~ ** Processing line: ~ state.user_input = :add_hill2~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Processes click and drag based on what the user is currently dragging~ ** Processing line: ~ def process_input~ ** Processing line: ~ if state.user_input == :star~ ** Processing line: ~ input_star~ ** Processing line: ~ elsif state.user_input == :star2~ ** Processing line: ~ input_star2~ ** Processing line: ~ elsif state.user_input == :target~ ** Processing line: ~ input_target~ ** Processing line: ~ elsif state.user_input == :target2~ ** Processing line: ~ input_target2~ ** Processing line: ~ elsif state.user_input == :remove_wall~ ** Processing line: ~ input_remove_wall~ ** Processing line: ~ elsif state.user_input == :remove_wall2~ ** Processing line: ~ input_remove_wall2~ ** Processing line: ~ elsif state.user_input == :add_hill~ ** Processing line: ~ input_add_hill~ ** Processing line: ~ elsif state.user_input == :add_hill2~ ** Processing line: ~ input_add_hill2~ ** Processing line: ~ elsif state.user_input == :add_wall~ ** Processing line: ~ input_add_wall~ ** Processing line: ~ elsif state.user_input == :add_wall2~ ** Processing line: ~ input_add_wall2~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates the two searches~ ** Processing line: ~ def calc~ ** Processing line: ~ # If the searches have not started~ ** Processing line: ~ if breadth_first_search.visited.empty?~ ** Processing line: ~ # Calculate the two searches~ ** Processing line: ~ calc_breadth_first~ ** Processing line: ~ calc_dijkstra~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def calc_breadth_first~ ** Processing line: ~ # Sets up the Breadth First Search~ ** Processing line: ~ breadth_first_search.visited[state.star] = true~ ** Processing line: ~ breadth_first_search.frontier << state.star~ ** Processing line: ~ breadth_first_search.came_from[state.star] = nil~ ** Processing line: ~~ ** Processing line: ~ until breadth_first_search.frontier.empty?~ ** Processing line: ~ return if breadth_first_search.visited.has_key?(state.target)~ ** Processing line: ~ # A step in the search~ ** Processing line: ~ # Takes the next frontier cell~ ** Processing line: ~ new_frontier = breadth_first_search.frontier.shift~ ** Processing line: ~ # For each of its neighbors~ ** Processing line: ~ adjacent_neighbors(new_frontier).each do | neighbor |~ ** Processing line: ~ # That have not been visited and are not walls~ ** Processing line: ~ unless breadth_first_search.visited.has_key?(neighbor) || state.walls.has_key?(neighbor)~ ** Processing line: ~ # Add them to the frontier and mark them as visited in the first grid~ ** Processing line: ~ breadth_first_search.visited[neighbor] = true~ ** Processing line: ~ breadth_first_search.frontier << neighbor~ ** Processing line: ~ # Remember which cell the neighbor came from~ ** Processing line: ~ breadth_first_search.came_from[neighbor] = new_frontier~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates the Dijkstra Search from the beginning to the end~ ** Processing line: ~~ ** Processing line: ~ def calc_dijkstra~ ** Processing line: ~ # The initial values for the Dijkstra search~ ** Processing line: ~ dijkstra_search.frontier << [state.star, 0]~ ** Processing line: ~ dijkstra_search.came_from[state.star] = nil~ ** Processing line: ~ dijkstra_search.cost_so_far[state.star] = 0~ ** Processing line: ~~ ** Processing line: ~ # Until their are no more cells to be explored~ ** Processing line: ~ until dijkstra_search.frontier.empty?~ ** Processing line: ~ # Get the next cell to be explored from~ ** Processing line: ~ # We get the first element of the array which is the cell. The second element is the priority.~ ** Processing line: ~ current = dijkstra_search.frontier.shift[0]~ ** Processing line: ~~ ** Processing line: ~ # Stop the search if we found the target~ ** Processing line: ~ return if current == state.target~ ** Processing line: ~~ ** Processing line: ~ # For each of the neighbors~ ** Processing line: ~ adjacent_neighbors(current).each do | neighbor |~ ** Processing line: ~ # Unless this cell is a wall or has already been explored.~ ** Processing line: ~ unless dijkstra_search.came_from.has_key?(neighbor) or state.walls.has_key?(neighbor)~ ** Processing line: ~ # Calculate the movement cost of getting to this cell and memo~ ** Processing line: ~ new_cost = dijkstra_search.cost_so_far[current] + cost(neighbor)~ ** Processing line: ~ dijkstra_search.cost_so_far[neighbor] = new_cost~ ** Processing line: ~~ ** Processing line: ~ # Add this neighbor to the cells too be explored~ ** Processing line: ~ dijkstra_search.frontier << [neighbor, new_cost]~ ** Processing line: ~ dijkstra_search.came_from[neighbor] = current~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sort the frontier so exploration occurs that have a low cost so far.~ ** Processing line: ~ # My implementation of a priority queue~ ** Processing line: ~ dijkstra_search.frontier = dijkstra_search.frontier.sort_by {|cell, priority| priority}~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def cost(cell)~ ** Processing line: ~ if state.hills.has_key?(cell)~ ** Processing line: ~ return 5~ ** Processing line: ~ else~ ** Processing line: ~ return 1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Moves the star to the cell closest to the mouse in the first grid~ ** Processing line: ~ # Only resets the search if the star changes position~ ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ ** Processing line: ~ def input_star~ ** Processing line: ~ old_star = state.star.clone~ ** Processing line: ~ unless cell_closest_to_mouse == state.target~ ** Processing line: ~ state.star = cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_star == state.star~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the star to the cell closest to the mouse in the second grid~ ** Processing line: ~ # Only resets the search if the star changes position~ ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ ** Processing line: ~ def input_star2~ ** Processing line: ~ old_star = state.star.clone~ ** Processing line: ~ unless cell_closest_to_mouse2 == state.target~ ** Processing line: ~ state.star = cell_closest_to_mouse2~ ** Processing line: ~ end~ ** Processing line: ~ unless old_star == state.star~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the target to the grid closest to the mouse in the first grid~ ** Processing line: ~ # Only reset_searchs the search if the target changes position~ ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ ** Processing line: ~ def input_target~ ** Processing line: ~ old_target = state.target.clone~ ** Processing line: ~ unless cell_closest_to_mouse == state.star~ ** Processing line: ~ state.target = cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_target == state.target~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the target to the cell closest to the mouse in the second grid~ ** Processing line: ~ # Only reset_searchs the search if the target changes position~ ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ ** Processing line: ~ def input_target2~ ** Processing line: ~ old_target = state.target.clone~ ** Processing line: ~ unless cell_closest_to_mouse2 == state.star~ ** Processing line: ~ state.target = cell_closest_to_mouse2~ ** Processing line: ~ end~ ** Processing line: ~ unless old_target == state.target~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Removes walls in the first grid that are under the cursor~ ** Processing line: ~ def input_remove_wall~ ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ ** Processing line: ~ # the cursor is directly over~ ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ ** Processing line: ~ if mouse_over_grid?~ ** Processing line: ~ if state.walls.has_key?(cell_closest_to_mouse) or state.hills.has_key?(cell_closest_to_mouse)~ ** Processing line: ~ state.walls.delete(cell_closest_to_mouse)~ ** Processing line: ~ state.hills.delete(cell_closest_to_mouse)~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Removes walls in the second grid that are under the cursor~ ** Processing line: ~ def input_remove_wall2~ ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ ** Processing line: ~ # the cursor is directly over~ ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ ** Processing line: ~ if mouse_over_grid2?~ ** Processing line: ~ if state.walls.has_key?(cell_closest_to_mouse2) or state.hills.has_key?(cell_closest_to_mouse2)~ ** Processing line: ~ state.walls.delete(cell_closest_to_mouse2)~ ** Processing line: ~ state.hills.delete(cell_closest_to_mouse2)~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds a hill in the first grid in the cell the mouse is over~ ** Processing line: ~ def input_add_hill~ ** Processing line: ~ if mouse_over_grid?~ ** Processing line: ~ unless state.hills.has_key?(cell_closest_to_mouse)~ ** Processing line: ~ state.hills[cell_closest_to_mouse] = true~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Adds a hill in the second grid in the cell the mouse is over~ ** Processing line: ~ def input_add_hill2~ ** Processing line: ~ if mouse_over_grid2?~ ** Processing line: ~ unless state.hills.has_key?(cell_closest_to_mouse2)~ ** Processing line: ~ state.hills[cell_closest_to_mouse2] = true~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds a wall in the first grid in the cell the mouse is over~ ** Processing line: ~ def input_add_wall~ ** Processing line: ~ if mouse_over_grid?~ ** Processing line: ~ unless state.walls.has_key?(cell_closest_to_mouse)~ ** Processing line: ~ state.hills.delete(cell_closest_to_mouse)~ ** Processing line: ~ state.walls[cell_closest_to_mouse] = true~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds a wall in the second grid in the cell the mouse is over~ ** Processing line: ~ def input_add_wall2~ ** Processing line: ~ if mouse_over_grid2?~ ** Processing line: ~ unless state.walls.has_key?(cell_closest_to_mouse2)~ ** Processing line: ~ state.hills.delete(cell_closest_to_mouse2)~ ** Processing line: ~ state.walls[cell_closest_to_mouse2] = true~ ** Processing line: ~ reset_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Whenever the user edits the grid,~ ** Processing line: ~ # The search has to be reset_searchd upto the current step~ ** Processing line: ~ # with the current grid as the initial state of the grid~ ** Processing line: ~ def reset_search~ ** Processing line: ~ breadth_first_search.visited = {}~ ** Processing line: ~ breadth_first_search.frontier = []~ ** Processing line: ~ breadth_first_search.came_from = {}~ ** Processing line: ~~ ** Processing line: ~ dijkstra_search.frontier = []~ ** Processing line: ~ dijkstra_search.came_from = {}~ ** Processing line: ~ dijkstra_search.cost_so_far = {}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Returns a list of adjacent cells~ ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ ** Processing line: ~ def adjacent_neighbors(cell)~ ** Processing line: ~ neighbors = []~ ** Processing line: ~~ ** Processing line: ~ # Gets all the valid neighbors into the array~ ** Processing line: ~ # From southern neighbor, clockwise~ ** Processing line: ~ neighbors << [cell.x , cell.y - 1] unless cell.y == 0~ ** Processing line: ~ neighbors << [cell.x - 1, cell.y ] unless cell.x == 0~ ** Processing line: ~ neighbors << [cell.x , cell.y + 1] unless cell.y == grid.height - 1~ ** Processing line: ~ neighbors << [cell.x + 1, cell.y ] unless cell.x == grid.width - 1~ ** Processing line: ~~ ** Processing line: ~ # Sorts the neighbors so the rendered path is a zigzag path~ ** Processing line: ~ # Cells in a diagonal direction are given priority~ ** Processing line: ~ # Comment this line to see the difference~ ** Processing line: ~ neighbors = neighbors.sort_by { |neighbor_x, neighbor_y| proximity_to_star(neighbor_x, neighbor_y) }~ ** Processing line: ~~ ** Processing line: ~ neighbors~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds the vertical and horizontal distance of a cell from the star~ ** Processing line: ~ # and returns the larger value~ ** Processing line: ~ # This method is used to have a zigzag pattern in the rendered path~ ** Processing line: ~ # A cell that is [5, 5] from the star,~ ** Processing line: ~ # is explored before over a cell that is [0, 7] away.~ ** Processing line: ~ # So, if possible, the search tries to go diagonal (zigzag) first~ ** Processing line: ~ def proximity_to_star(x, y)~ ** Processing line: ~ distance_x = (state.star.x - x).abs~ ** Processing line: ~ distance_y = (state.star.y - y).abs~ ** Processing line: ~~ ** Processing line: ~ if distance_x > distance_y~ ** Processing line: ~ return distance_x~ ** Processing line: ~ else~ ** Processing line: ~ return distance_y~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ ** Processing line: ~ # Finding the cell closest to the mouse helps with this~ ** Processing line: ~ def cell_closest_to_mouse~ ** Processing line: ~ # Closest cell to the mouse in the first grid~ ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ ** Processing line: ~ # Bound x and y to the grid~ ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ ** Processing line: ~ # Return closest cell~ ** Processing line: ~ [x, y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ ** Processing line: ~ # Finding the cell closest to the mouse in the second grid helps with this~ ** Processing line: ~ def cell_closest_to_mouse2~ ** Processing line: ~ # Closest cell grid to the mouse in the second~ ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ ** Processing line: ~ # Translate the cell to the first grid~ ** Processing line: ~ x -= grid.width + 1~ ** Processing line: ~ # Bound x and y to the first grid~ ** Processing line: ~ x = 0 if x < 0~ ** Processing line: ~ y = 0 if y < 0~ ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ ** Processing line: ~ # Return closest cell~ ** Processing line: ~ [x, y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the star from the first grid~ ** Processing line: ~ def mouse_over_star?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(scale_up(state.star))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the star from the second grid~ ** Processing line: ~ def mouse_over_star2?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(move_and_scale_up(state.star))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the target from the first grid~ ** Processing line: ~ def mouse_over_target?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(scale_up(state.target))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the target from the second grid~ ** Processing line: ~ def mouse_over_target2?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(move_and_scale_up(state.target))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing walls from the first grid~ ** Processing line: ~ def mouse_over_wall?~ ** Processing line: ~ state.walls.each_key do | wall |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(scale_up(wall))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing walls from the second grid~ ** Processing line: ~ def mouse_over_wall2?~ ** Processing line: ~ state.walls.each_key do | wall |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(move_and_scale_up(wall))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing hills from the first grid~ ** Processing line: ~ def mouse_over_hill?~ ** Processing line: ~ state.hills.each_key do | hill |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(scale_up(hill))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing hills from the second grid~ ** Processing line: ~ def mouse_over_hill2?~ ** Processing line: ~ state.hills.each_key do | hill |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(move_and_scale_up(hill))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be adding walls from the first grid~ ** Processing line: ~ def mouse_over_grid?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(scale_up(grid.rect))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be adding walls from the second grid~ ** Processing line: ~ def mouse_over_grid2?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(move_and_scale_up(grid.rect))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # These methods provide handy aliases to colors~ ** Processing line: ~~ ** Processing line: ~ # Light brown~ ** Processing line: ~ def unvisited_color~ ** Processing line: ~ [221, 212, 213]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Camo Green~ ** Processing line: ~ def wall_color~ ** Processing line: ~ [134, 134, 120]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Pastel White~ ** Processing line: ~ def path_color~ ** Processing line: ~ [231, 230, 228]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def red~ ** Processing line: ~ [255, 0, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # A Green~ ** Processing line: ~ def hill_color~ ** Processing line: ~ [139, 173, 132]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Makes code more concise~ ** Processing line: ~ def grid~ ** Processing line: ~ state.grid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def breadth_first_search~ ** Processing line: ~ state.breadth_first_search~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def dijkstra_search~ ** Processing line: ~ state.dijkstra_search~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Method that is called by DragonRuby periodically~ ** Processing line: ~ # Used for updating animations and calculations~ ** Processing line: ~ def tick args~ ** Processing line: ~~ ** Processing line: ~ # Pressing r will reset the application~ ** Processing line: ~ if args.inputs.keyboard.key_down.r~ ** Processing line: ~ args.gtk.reset~ ** Processing line: ~ reset~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Every tick, new args are passed, and the Dijkstra tick method is called~ ** Processing line: ~ $movement_costs ||= Movement_Costs.new~ ** Processing line: ~ $movement_costs.args = args~ ** Processing line: ~ $movement_costs.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def reset~ ** Processing line: ~ $movement_costs = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Path Finding Algorithms - Heuristic - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Heuristic - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Heuristic - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/13_path_finding_algorithms/06_heuristic/app/main.rb~ ** Processing line: ~ # This program is inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html~ ** Processing line: ~~ ** Processing line: ~ # This time the heuristic search still explored less of the grid, hence finishing faster.~ ** Processing line: ~ # However, it did not find the shortest path between the star and the target.~ ** Processing line: ~~ ** Processing line: ~ # The only difference between this app and Heuristic is the change of the starting position.~ ** Processing line: ~~ ** Processing line: ~ class Heuristic_With_Walls~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ input~ ** Processing line: ~ # If animation is playing, and max steps have not been reached~ ** Processing line: ~ # Move the search a step forward~ ** Processing line: ~ if state.play && state.current_step < state.max_steps~ ** Processing line: ~ # Variable that tells the program what step to recalculate up to~ ** Processing line: ~ state.current_step += 1~ ** Processing line: ~ move_searches_one_step_forward~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ # Variables to edit the size and appearance of the grid~ ** Processing line: ~ # Freely customizable to user's liking~ ** Processing line: ~ grid.width ||= 15~ ** Processing line: ~ grid.height ||= 15~ ** Processing line: ~ grid.cell_size ||= 40~ ** Processing line: ~ grid.rect ||= [0, 0, grid.width, grid.height]~ ** Processing line: ~~ ** Processing line: ~ grid.star ||= [0, 2]~ ** Processing line: ~ grid.target ||= [14, 12]~ ** Processing line: ~ grid.walls ||= {}~ ** Processing line: ~ # There are no hills in the Heuristic Search Demo~ ** Processing line: ~~ ** Processing line: ~ # What the user is currently editing on the grid~ ** Processing line: ~ # We store this value, because we want to remember the value even when~ ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ ** Processing line: ~ # they are still clicking down on the mouse.~ ** Processing line: ~ state.user_input ||= :none~ ** Processing line: ~~ ** Processing line: ~ # These variables allow the breadth first search to take place~ ** Processing line: ~ # Came_from is a hash with a key of a cell and a value of the cell that was expanded from to find the key.~ ** Processing line: ~ # Used to prevent searching cells that have already been found~ ** Processing line: ~ # and to trace a path from the target back to the starting point.~ ** Processing line: ~ # Frontier is an array of cells to expand the search from.~ ** Processing line: ~ # The search is over when there are no more cells to search from.~ ** Processing line: ~ # Path stores the path from the target to the star, once the target has been found~ ** Processing line: ~ # It prevents calculating the path every tick.~ ** Processing line: ~ bfs.came_from ||= {}~ ** Processing line: ~ bfs.frontier ||= []~ ** Processing line: ~ bfs.path ||= []~ ** Processing line: ~~ ** Processing line: ~ heuristic.came_from ||= {}~ ** Processing line: ~ heuristic.frontier ||= []~ ** Processing line: ~ heuristic.path ||= []~ ** Processing line: ~~ ** Processing line: ~ # Stores which step of the animation is being rendered~ ** Processing line: ~ # When the user moves the star or messes with the walls,~ ** Processing line: ~ # the searches are recalculated up to this step~ ** Processing line: ~~ ** Processing line: ~ # Unless the current step has a value~ ** Processing line: ~ unless state.current_step~ ** Processing line: ~ # Set the current step to 10~ ** Processing line: ~ state.current_step = 10~ ** Processing line: ~ # And calculate the searches up to step 10~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # At some step the animation will end,~ ** Processing line: ~ # and further steps won't change anything (the whole grid will be explored)~ ** Processing line: ~ # This step is roughly the grid's width * height~ ** Processing line: ~ # When anim_steps equals max_steps no more calculations will occur~ ** Processing line: ~ # and the slider will be at the end~ ** Processing line: ~ state.max_steps = grid.width * grid.height~ ** Processing line: ~~ ** Processing line: ~ # Whether the animation should play or not~ ** Processing line: ~ # If true, every tick moves anim_steps forward one~ ** Processing line: ~ # Pressing the stepwise animation buttons will pause the animation~ ** Processing line: ~ # An if statement instead of the ||= operator is used for assigning a boolean value.~ ** Processing line: ~ # The || operator does not differentiate between nil and false.~ ** Processing line: ~ if state.play == nil~ ** Processing line: ~ state.play = false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Store the rects of the buttons that control the animation~ ** Processing line: ~ # They are here for user customization~ ** Processing line: ~ # Editing these might require recentering the text inside them~ ** Processing line: ~ # Those values can be found in the render_button methods~ ** Processing line: ~ buttons.left = [470, 600, 50, 50]~ ** Processing line: ~ buttons.center = [520, 600, 200, 50]~ ** Processing line: ~ buttons.right = [720, 600, 50, 50]~ ** Processing line: ~~ ** Processing line: ~ # The variables below are related to the slider~ ** Processing line: ~ # They allow the user to customize them~ ** Processing line: ~ # They also give a central location for the render and input methods to get~ ** Processing line: ~ # information from~ ** Processing line: ~ # x & y are the coordinates of the leftmost part of the slider line~ ** Processing line: ~ slider.x = 440~ ** Processing line: ~ slider.y = 675~ ** Processing line: ~ # This is the width of the line~ ** Processing line: ~ slider.w = 360~ ** Processing line: ~ # This is the offset for the circle~ ** Processing line: ~ # Allows the center of the circle to be on the line,~ ** Processing line: ~ # as opposed to the upper right corner~ ** Processing line: ~ slider.offset = 20~ ** Processing line: ~ # This is the spacing between each of the notches on the slider~ ** Processing line: ~ # Notches are places where the circle can rest on the slider line~ ** Processing line: ~ # There needs to be a notch for each step before the maximum number of steps~ ** Processing line: ~ slider.spacing = slider.w.to_f / state.max_steps.to_f~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # All methods with render draw stuff on the screen~ ** Processing line: ~ # UI has buttons, the slider, and labels~ ** Processing line: ~ # The search specific rendering occurs in the respective methods~ ** Processing line: ~ def render~ ** Processing line: ~ render_ui~ ** Processing line: ~ render_bfs~ ** Processing line: ~ render_heuristic~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_ui~ ** Processing line: ~ render_buttons~ ** Processing line: ~ render_slider~ ** Processing line: ~ render_labels~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_buttons~ ** Processing line: ~ render_left_button~ ** Processing line: ~ render_center_button~ ** Processing line: ~ render_right_button~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_bfs~ ** Processing line: ~ render_bfs_grid~ ** Processing line: ~ render_bfs_star~ ** Processing line: ~ render_bfs_target~ ** Processing line: ~ render_bfs_visited~ ** Processing line: ~ render_bfs_walls~ ** Processing line: ~ render_bfs_frontier~ ** Processing line: ~ render_bfs_path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_heuristic~ ** Processing line: ~ render_heuristic_grid~ ** Processing line: ~ render_heuristic_star~ ** Processing line: ~ render_heuristic_target~ ** Processing line: ~ render_heuristic_visited~ ** Processing line: ~ render_heuristic_walls~ ** Processing line: ~ render_heuristic_frontier~ ** Processing line: ~ render_heuristic_path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This method handles user input every tick~ ** Processing line: ~ def input~ ** Processing line: ~ # Check and handle button input~ ** Processing line: ~ input_buttons~ ** Processing line: ~~ ** Processing line: ~ # If the mouse was lifted this tick~ ** Processing line: ~ if inputs.mouse.up~ ** Processing line: ~ # Set current input to none~ ** Processing line: ~ state.user_input = :none~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # If the mouse was clicked this tick~ ** Processing line: ~ if inputs.mouse.down~ ** Processing line: ~ # Determine what the user is editing and appropriately edit the state.user_input variable~ ** Processing line: ~ determine_input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Process user input based on user_input variable and current mouse position~ ** Processing line: ~ process_input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Determines what the user is editing~ ** Processing line: ~ # This method is called when the mouse is clicked down~ ** Processing line: ~ def determine_input~ ** Processing line: ~ if mouse_over_slider?~ ** Processing line: ~ state.user_input = :slider~ ** Processing line: ~ # If the mouse is over the star in the first grid~ ** Processing line: ~ elsif bfs_mouse_over_star?~ ** Processing line: ~ # The user is editing the star from the first grid~ ** Processing line: ~ state.user_input = :bfs_star~ ** Processing line: ~ # If the mouse is over the star in the second grid~ ** Processing line: ~ elsif heuristic_mouse_over_star?~ ** Processing line: ~ # The user is editing the star from the second grid~ ** Processing line: ~ state.user_input = :heuristic_star~ ** Processing line: ~ # If the mouse is over the target in the first grid~ ** Processing line: ~ elsif bfs_mouse_over_target?~ ** Processing line: ~ # The user is editing the target from the first grid~ ** Processing line: ~ state.user_input = :bfs_target~ ** Processing line: ~ # If the mouse is over the target in the second grid~ ** Processing line: ~ elsif heuristic_mouse_over_target?~ ** Processing line: ~ # The user is editing the target from the second grid~ ** Processing line: ~ state.user_input = :heuristic_target~ ** Processing line: ~ # If the mouse is over a wall in the first grid~ ** Processing line: ~ elsif bfs_mouse_over_wall?~ ** Processing line: ~ # The user is removing a wall from the first grid~ ** Processing line: ~ state.user_input = :bfs_remove_wall~ ** Processing line: ~ # If the mouse is over a wall in the second grid~ ** Processing line: ~ elsif heuristic_mouse_over_wall?~ ** Processing line: ~ # The user is removing a wall from the second grid~ ** Processing line: ~ state.user_input = :heuristic_remove_wall~ ** Processing line: ~ # If the mouse is over the first grid~ ** Processing line: ~ elsif bfs_mouse_over_grid?~ ** Processing line: ~ # The user is adding a wall from the first grid~ ** Processing line: ~ state.user_input = :bfs_add_wall~ ** Processing line: ~ # If the mouse is over the second grid~ ** Processing line: ~ elsif heuristic_mouse_over_grid?~ ** Processing line: ~ # The user is adding a wall from the second grid~ ** Processing line: ~ state.user_input = :heuristic_add_wall~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Processes click and drag based on what the user is currently dragging~ ** Processing line: ~ def process_input~ ** Processing line: ~ if state.user_input == :slider~ ** Processing line: ~ process_input_slider~ ** Processing line: ~ elsif state.user_input == :bfs_star~ ** Processing line: ~ process_input_bfs_star~ ** Processing line: ~ elsif state.user_input == :heuristic_star~ ** Processing line: ~ process_input_heuristic_star~ ** Processing line: ~ elsif state.user_input == :bfs_target~ ** Processing line: ~ process_input_bfs_target~ ** Processing line: ~ elsif state.user_input == :heuristic_target~ ** Processing line: ~ process_input_heuristic_target~ ** Processing line: ~ elsif state.user_input == :bfs_remove_wall~ ** Processing line: ~ process_input_bfs_remove_wall~ ** Processing line: ~ elsif state.user_input == :heuristic_remove_wall~ ** Processing line: ~ process_input_heuristic_remove_wall~ ** Processing line: ~ elsif state.user_input == :bfs_add_wall~ ** Processing line: ~ process_input_bfs_add_wall~ ** Processing line: ~ elsif state.user_input == :heuristic_add_wall~ ** Processing line: ~ process_input_heuristic_add_wall~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_slider~ ** Processing line: ~ # Using primitives hides the line under the white circle of the slider~ ** Processing line: ~ # Draws the line~ ** Processing line: ~ outputs.primitives << [slider.x, slider.y, slider.x + slider.w, slider.y].line~ ** Processing line: ~ # The circle needs to be offset so that the center of the circle~ ** Processing line: ~ # overlaps the line instead of the upper right corner of the circle~ ** Processing line: ~ # The circle's x value is also moved based on the current seach step~ ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.current_step * slider.spacing)~ ** Processing line: ~ circle_y = (slider.y - slider.offset)~ ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ ** Processing line: ~ outputs.primitives << [circle_rect, 'circle-white.png'].sprite~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_labels~ ** Processing line: ~ outputs.labels << [205, 625, "Breadth First Search"]~ ** Processing line: ~ outputs.labels << [820, 625, "Heuristic Best-First Search"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_left_button~ ** Processing line: ~ # Draws the button_color button, and a black border~ ** Processing line: ~ # The border separates the buttons visually~ ** Processing line: ~ outputs.solids << [buttons.left, button_color]~ ** Processing line: ~ outputs.borders << [buttons.left]~ ** Processing line: ~~ ** Processing line: ~ # Renders an explanatory label in the center of the button~ ** Processing line: ~ # Explains to the user what the button does~ ** Processing line: ~ # If the button size is changed, the label might need to be edited as well~ ** Processing line: ~ # to keep the label in the center of the button~ ** Processing line: ~ label_x = buttons.left.x + 20~ ** Processing line: ~ label_y = buttons.left.y + 35~ ** Processing line: ~ outputs.labels << [label_x, label_y, "<"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_center_button~ ** Processing line: ~ # Draws the button_color button, and a black border~ ** Processing line: ~ # The border separates the buttons visually~ ** Processing line: ~ outputs.solids << [buttons.center, button_color]~ ** Processing line: ~ outputs.borders << [buttons.center]~ ** Processing line: ~~ ** Processing line: ~ # Renders an explanatory label in the center of the button~ ** Processing line: ~ # Explains to the user what the button does~ ** Processing line: ~ # If the button size is changed, the label might need to be edited as well~ ** Processing line: ~ # to keep the label in the center of the button~ ** Processing line: ~ label_x = buttons.center.x + 37~ ** Processing line: ~ label_y = buttons.center.y + 35~ ** Processing line: ~ label_text = state.play ? "Pause Animation" : "Play Animation"~ ** Processing line: ~ outputs.labels << [label_x, label_y, label_text]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_right_button~ ** Processing line: ~ # Draws the button_color button, and a black border~ ** Processing line: ~ # The border separates the buttons visually~ ** Processing line: ~ outputs.solids << [buttons.right, button_color]~ ** Processing line: ~ outputs.borders << [buttons.right]~ ** Processing line: ~~ ** Processing line: ~ # Renders an explanatory label in the center of the button~ ** Processing line: ~ # Explains to the user what the button does~ ** Processing line: ~ label_x = buttons.right.x + 20~ ** Processing line: ~ label_y = buttons.right.y + 35~ ** Processing line: ~ outputs.labels << [label_x, label_y, ">"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_bfs_grid~ ** Processing line: ~ # A large rect the size of the grid~ ** Processing line: ~ outputs.solids << [bfs_scale_up(grid.rect), default_color]~ ** Processing line: ~~ ** Processing line: ~ # The vertical grid lines~ ** Processing line: ~ for x in 0..grid.width~ ** Processing line: ~ outputs.lines << bfs_vertical_line(x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The horizontal grid lines~ ** Processing line: ~ for y in 0..grid.height~ ** Processing line: ~ outputs.lines << bfs_horizontal_line(y)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_heuristic_grid~ ** Processing line: ~ # A large rect the size of the grid~ ** Processing line: ~ outputs.solids << [heuristic_scale_up(grid.rect), default_color]~ ** Processing line: ~~ ** Processing line: ~ # The vertical grid lines~ ** Processing line: ~ for x in 0..grid.width~ ** Processing line: ~ outputs.lines << heuristic_vertical_line(x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The horizontal grid lines~ ** Processing line: ~ for y in 0..grid.height~ ** Processing line: ~ outputs.lines << heuristic_horizontal_line(y)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a vertical line for a column of the first grid~ ** Processing line: ~ def bfs_vertical_line column~ ** Processing line: ~ bfs_scale_up([column, 0, column, grid.height])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a horizontal line for a column of the first grid~ ** Processing line: ~ def bfs_horizontal_line row~ ** Processing line: ~ bfs_scale_up([0, row, grid.width, row])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a vertical line for a column of the second grid~ ** Processing line: ~ def heuristic_vertical_line column~ ** Processing line: ~ bfs_scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a horizontal line for a column of the second grid~ ** Processing line: ~ def heuristic_horizontal_line row~ ** Processing line: ~ bfs_scale_up([grid.width + 1, row, grid.width + grid.width + 1, row])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the star on the first grid~ ** Processing line: ~ def render_bfs_star~ ** Processing line: ~ outputs.sprites << [bfs_scale_up(grid.star), 'star.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the star on the second grid~ ** Processing line: ~ def render_heuristic_star~ ** Processing line: ~ outputs.sprites << [heuristic_scale_up(grid.star), 'star.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the target on the first grid~ ** Processing line: ~ def render_bfs_target~ ** Processing line: ~ outputs.sprites << [bfs_scale_up(grid.target), 'target.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the target on the second grid~ ** Processing line: ~ def render_heuristic_target~ ** Processing line: ~ outputs.sprites << [heuristic_scale_up(grid.target), 'target.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the walls on the first grid~ ** Processing line: ~ def render_bfs_walls~ ** Processing line: ~ grid.walls.each_key do | wall |~ ** Processing line: ~ outputs.solids << [bfs_scale_up(wall), wall_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the walls on the second grid~ ** Processing line: ~ def render_heuristic_walls~ ** Processing line: ~ grid.walls.each_key do | wall |~ ** Processing line: ~ outputs.solids << [heuristic_scale_up(wall), wall_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the visited cells on the first grid~ ** Processing line: ~ def render_bfs_visited~ ** Processing line: ~ bfs.came_from.each_key do | visited_cell |~ ** Processing line: ~ outputs.solids << [bfs_scale_up(visited_cell), visited_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the visited cells on the second grid~ ** Processing line: ~ def render_heuristic_visited~ ** Processing line: ~ heuristic.came_from.each_key do | visited_cell |~ ** Processing line: ~ outputs.solids << [heuristic_scale_up(visited_cell), visited_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the frontier cells on the first grid~ ** Processing line: ~ def render_bfs_frontier~ ** Processing line: ~ bfs.frontier.each do | frontier_cell |~ ** Processing line: ~ outputs.solids << [bfs_scale_up(frontier_cell), frontier_color, 200]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the frontier cells on the second grid~ ** Processing line: ~ def render_heuristic_frontier~ ** Processing line: ~ heuristic.frontier.each do | frontier_cell |~ ** Processing line: ~ outputs.solids << [heuristic_scale_up(frontier_cell), frontier_color, 200]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the path found by the breadth first search on the first grid~ ** Processing line: ~ def render_bfs_path~ ** Processing line: ~ bfs.path.each do | path |~ ** Processing line: ~ outputs.solids << [bfs_scale_up(path), path_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the path found by the heuristic search on the second grid~ ** Processing line: ~ def render_heuristic_path~ ** Processing line: ~ heuristic.path.each do | path |~ ** Processing line: ~ outputs.solids << [heuristic_scale_up(path), path_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns the rect for the path between two cells based on their relative positions~ ** Processing line: ~ def get_path_between(cell_one, cell_two)~ ** Processing line: ~ path = nil~ ** Processing line: ~~ ** Processing line: ~ # If cell one is above cell two~ ** Processing line: ~ if cell_one.x == cell_two.x and cell_one.y > cell_two.y~ ** Processing line: ~ # Path starts from the center of cell two and moves upward to the center of cell one~ ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 0.4, 1.4]~ ** Processing line: ~ # If cell one is below cell two~ ** Processing line: ~ elsif cell_one.x == cell_two.x and cell_one.y < cell_two.y~ ** Processing line: ~ # Path starts from the center of cell one and moves upward to the center of cell two~ ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 0.4, 1.4]~ ** Processing line: ~ # If cell one is to the left of cell two~ ** Processing line: ~ elsif cell_one.x > cell_two.x and cell_one.y == cell_two.y~ ** Processing line: ~ # Path starts from the center of cell two and moves rightward to the center of cell one~ ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 1.4, 0.4]~ ** Processing line: ~ # If cell one is to the right of cell two~ ** Processing line: ~ elsif cell_one.x < cell_two.x and cell_one.y == cell_two.y~ ** Processing line: ~ # Path starts from the center of cell one and moves rightward to the center of cell two~ ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 1.4, 0.4]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # In code, the cells are represented as 1x1 rectangles~ ** Processing line: ~ # When drawn, the cells are larger than 1x1 rectangles~ ** Processing line: ~ # This method is used to scale up cells, and lines~ ** Processing line: ~ # Objects are scaled up according to the grid.cell_size variable~ ** Processing line: ~ # This allows for easy customization of the visual scale of the grid~ ** Processing line: ~ # This method scales up cells for the first grid~ ** Processing line: ~ def bfs_scale_up(cell)~ ** Processing line: ~ # Prevents the original value of cell from being edited~ ** Processing line: ~ cell = cell.clone~ ** Processing line: ~~ ** Processing line: ~ # If cell is just an x and y coordinate~ ** Processing line: ~ if cell.size == 2~ ** Processing line: ~ # Add a width and height of 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Scale all the values up~ ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ ** Processing line: ~~ ** Processing line: ~ # Returns the scaled up cell~ ** Processing line: ~ cell~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Translates the given cell grid.width + 1 to the right and then scales up~ ** Processing line: ~ # Used to draw cells for the second grid~ ** Processing line: ~ # This method does not work for lines,~ ** Processing line: ~ # so separate methods exist for the grid lines~ ** Processing line: ~ def heuristic_scale_up(cell)~ ** Processing line: ~ # Prevents the original value of cell from being edited~ ** Processing line: ~ cell = cell.clone~ ** Processing line: ~ # Translates the cell to the second grid equivalent~ ** Processing line: ~ cell.x += grid.width + 1~ ** Processing line: ~ # Proceeds as if scaling up for the first grid~ ** Processing line: ~ bfs_scale_up(cell)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Checks and handles input for the buttons~ ** Processing line: ~ # Called when the mouse is lifted~ ** Processing line: ~ def input_buttons~ ** Processing line: ~ input_left_button~ ** Processing line: ~ input_center_button~ ** Processing line: ~ input_right_button~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Checks if the previous step button is clicked~ ** Processing line: ~ # If it is, it pauses the animation and moves the search one step backward~ ** Processing line: ~ def input_left_button~ ** Processing line: ~ if left_button_clicked?~ ** Processing line: ~ state.play = false~ ** Processing line: ~ state.current_step -= 1~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Controls the play/pause button~ ** Processing line: ~ # Inverses whether the animation is playing or not when clicked~ ** Processing line: ~ def input_center_button~ ** Processing line: ~ if center_button_clicked? || inputs.keyboard.key_down.space~ ** Processing line: ~ state.play = !state.play~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Checks if the next step button is clicked~ ** Processing line: ~ # If it is, it pauses the animation and moves the search one step forward~ ** Processing line: ~ def input_right_button~ ** Processing line: ~ if right_button_clicked?~ ** Processing line: ~ state.play = false~ ** Processing line: ~ state.current_step += 1~ ** Processing line: ~ move_searches_one_step_forward~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # These methods detect when the buttons are clicked~ ** Processing line: ~ def left_button_clicked?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(buttons.left) && inputs.mouse.up~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def center_button_clicked?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(buttons.center) && inputs.mouse.up~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def right_button_clicked?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(buttons.right) && inputs.mouse.up~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the slider~ ** Processing line: ~ # Is the mouse over the circle of the slider?~ ** Processing line: ~ def mouse_over_slider?~ ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.current_step * slider.spacing)~ ** Processing line: ~ circle_y = (slider.y - slider.offset)~ ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ ** Processing line: ~ inputs.mouse.point.inside_rect?(circle_rect)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the star from the first grid~ ** Processing line: ~ def bfs_mouse_over_star?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(bfs_scale_up(grid.star))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the star from the second grid~ ** Processing line: ~ def heuristic_mouse_over_star?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.star))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the target from the first grid~ ** Processing line: ~ def bfs_mouse_over_target?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(bfs_scale_up(grid.target))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the target from the second grid~ ** Processing line: ~ def heuristic_mouse_over_target?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.target))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing walls from the first grid~ ** Processing line: ~ def bfs_mouse_over_wall?~ ** Processing line: ~ grid.walls.each_key do | wall |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(bfs_scale_up(wall))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing walls from the second grid~ ** Processing line: ~ def heuristic_mouse_over_wall?~ ** Processing line: ~ grid.walls.each_key do | wall |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(heuristic_scale_up(wall))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be adding walls from the first grid~ ** Processing line: ~ def bfs_mouse_over_grid?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(bfs_scale_up(grid.rect))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be adding walls from the second grid~ ** Processing line: ~ def heuristic_mouse_over_grid?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.rect))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This method is called when the user is editing the slider~ ** Processing line: ~ # It pauses the animation and moves the white circle to the closest integer point~ ** Processing line: ~ # on the slider~ ** Processing line: ~ # Changes the step of the search to be animated~ ** Processing line: ~ def process_input_slider~ ** Processing line: ~ state.play = false~ ** Processing line: ~ mouse_x = inputs.mouse.point.x~ ** Processing line: ~~ ** Processing line: ~ # Bounds the mouse_x to the closest x value on the slider line~ ** Processing line: ~ mouse_x = slider.x if mouse_x < slider.x~ ** Processing line: ~ mouse_x = slider.x + slider.w if mouse_x > slider.x + slider.w~ ** Processing line: ~~ ** Processing line: ~ # Sets the current search step to the one represented by the mouse x value~ ** Processing line: ~ # The slider's circle moves due to the render_slider method using anim_steps~ ** Processing line: ~ state.current_step = ((mouse_x - slider.x) / slider.spacing).to_i~ ** Processing line: ~~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the star to the cell closest to the mouse in the first grid~ ** Processing line: ~ # Only resets the search if the star changes position~ ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ ** Processing line: ~ def process_input_bfs_star~ ** Processing line: ~ old_star = grid.star.clone~ ** Processing line: ~ unless bfs_cell_closest_to_mouse == grid.target~ ** Processing line: ~ grid.star = bfs_cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_star == grid.star~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the star to the cell closest to the mouse in the second grid~ ** Processing line: ~ # Only resets the search if the star changes position~ ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ ** Processing line: ~ def process_input_heuristic_star~ ** Processing line: ~ old_star = grid.star.clone~ ** Processing line: ~ unless heuristic_cell_closest_to_mouse == grid.target~ ** Processing line: ~ grid.star = heuristic_cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_star == grid.star~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the target to the grid closest to the mouse in the first grid~ ** Processing line: ~ # Only recalculate_searchess the search if the target changes position~ ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ ** Processing line: ~ def process_input_bfs_target~ ** Processing line: ~ old_target = grid.target.clone~ ** Processing line: ~ unless bfs_cell_closest_to_mouse == grid.star~ ** Processing line: ~ grid.target = bfs_cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_target == grid.target~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the target to the cell closest to the mouse in the second grid~ ** Processing line: ~ # Only recalculate_searchess the search if the target changes position~ ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ ** Processing line: ~ def process_input_heuristic_target~ ** Processing line: ~ old_target = grid.target.clone~ ** Processing line: ~ unless heuristic_cell_closest_to_mouse == grid.star~ ** Processing line: ~ grid.target = heuristic_cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_target == grid.target~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Removes walls in the first grid that are under the cursor~ ** Processing line: ~ def process_input_bfs_remove_wall~ ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ ** Processing line: ~ # the cursor is directly over~ ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ ** Processing line: ~ if bfs_mouse_over_grid?~ ** Processing line: ~ if grid.walls.has_key?(bfs_cell_closest_to_mouse)~ ** Processing line: ~ grid.walls.delete(bfs_cell_closest_to_mouse)~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Removes walls in the second grid that are under the cursor~ ** Processing line: ~ def process_input_heuristic_remove_wall~ ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ ** Processing line: ~ # the cursor is directly over~ ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ ** Processing line: ~ if heuristic_mouse_over_grid?~ ** Processing line: ~ if grid.walls.has_key?(heuristic_cell_closest_to_mouse)~ ** Processing line: ~ grid.walls.delete(heuristic_cell_closest_to_mouse)~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ # Adds a wall in the first grid in the cell the mouse is over~ ** Processing line: ~ def process_input_bfs_add_wall~ ** Processing line: ~ if bfs_mouse_over_grid?~ ** Processing line: ~ unless grid.walls.has_key?(bfs_cell_closest_to_mouse)~ ** Processing line: ~ grid.walls[bfs_cell_closest_to_mouse] = true~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds a wall in the second grid in the cell the mouse is over~ ** Processing line: ~ def process_input_heuristic_add_wall~ ** Processing line: ~ if heuristic_mouse_over_grid?~ ** Processing line: ~ unless grid.walls.has_key?(heuristic_cell_closest_to_mouse)~ ** Processing line: ~ grid.walls[heuristic_cell_closest_to_mouse] = true~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ ** Processing line: ~ # Finding the cell closest to the mouse helps with this~ ** Processing line: ~ def bfs_cell_closest_to_mouse~ ** Processing line: ~ # Closest cell to the mouse in the first grid~ ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ ** Processing line: ~ # Bound x and y to the grid~ ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ ** Processing line: ~ # Return closest cell~ ** Processing line: ~ [x, y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ ** Processing line: ~ # Finding the cell closest to the mouse in the second grid helps with this~ ** Processing line: ~ def heuristic_cell_closest_to_mouse~ ** Processing line: ~ # Closest cell grid to the mouse in the second~ ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ ** Processing line: ~ # Translate the cell to the first grid~ ** Processing line: ~ x -= grid.width + 1~ ** Processing line: ~ # Bound x and y to the first grid~ ** Processing line: ~ x = 0 if x < 0~ ** Processing line: ~ y = 0 if y < 0~ ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ ** Processing line: ~ # Return closest cell~ ** Processing line: ~ [x, y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def recalculate_searches~ ** Processing line: ~ # Reset the searches~ ** Processing line: ~ bfs.came_from = {}~ ** Processing line: ~ bfs.frontier = []~ ** Processing line: ~ bfs.path = []~ ** Processing line: ~ heuristic.came_from = {}~ ** Processing line: ~ heuristic.frontier = []~ ** Processing line: ~ heuristic.path = []~ ** Processing line: ~~ ** Processing line: ~ # Move the searches forward to the current step~ ** Processing line: ~ state.current_step.times { move_searches_one_step_forward }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_searches_one_step_forward~ ** Processing line: ~ bfs_one_step_forward~ ** Processing line: ~ heuristic_one_step_forward~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def bfs_one_step_forward~ ** Processing line: ~ return if bfs.came_from.has_key?(grid.target)~ ** Processing line: ~~ ** Processing line: ~ # Only runs at the beginning of the search as setup.~ ** Processing line: ~ if bfs.came_from.empty?~ ** Processing line: ~ bfs.frontier << grid.star~ ** Processing line: ~ bfs.came_from[grid.star] = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # A step in the search~ ** Processing line: ~ unless bfs.frontier.empty?~ ** Processing line: ~ # Takes the next frontier cell~ ** Processing line: ~ new_frontier = bfs.frontier.shift~ ** Processing line: ~ # For each of its neighbors~ ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ ** Processing line: ~ # That have not been visited and are not walls~ ** Processing line: ~ unless bfs.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor)~ ** Processing line: ~ # Add them to the frontier and mark them as visited~ ** Processing line: ~ bfs.frontier << neighbor~ ** Processing line: ~ bfs.came_from[neighbor] = new_frontier~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line~ ** Processing line: ~ # Comment this line and let a path generate to see the difference~ ** Processing line: ~ bfs.frontier = bfs.frontier.sort_by {| cell | proximity_to_star(cell) }~ ** Processing line: ~~ ** Processing line: ~ # If the search found the target~ ** Processing line: ~ if bfs.came_from.has_key?(grid.target)~ ** Processing line: ~ # Calculate the path between the target and star~ ** Processing line: ~ bfs_calc_path~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates the path between the target and star for the breadth first search~ ** Processing line: ~ # Only called when the breadth first search finds the target~ ** Processing line: ~ def bfs_calc_path~ ** Processing line: ~ # Start from the target~ ** Processing line: ~ endpoint = grid.target~ ** Processing line: ~ # And the cell it came from~ ** Processing line: ~ next_endpoint = bfs.came_from[endpoint]~ ** Processing line: ~ while endpoint and next_endpoint~ ** Processing line: ~ # Draw a path between these two cells and store it~ ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ ** Processing line: ~ bfs.path << path~ ** Processing line: ~ # And get the next pair of cells~ ** Processing line: ~ endpoint = next_endpoint~ ** Processing line: ~ next_endpoint = bfs.came_from[endpoint]~ ** Processing line: ~ # Continue till there are no more cells~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the heuristic search forward one step~ ** Processing line: ~ # Can be called from tick while the animation is playing~ ** Processing line: ~ # Can also be called when recalculating the searches after the user edited the grid~ ** Processing line: ~ def heuristic_one_step_forward~ ** Processing line: ~ # Stop the search if the target has been found~ ** Processing line: ~ return if heuristic.came_from.has_key?(grid.target)~ ** Processing line: ~~ ** Processing line: ~ # If the search has not begun~ ** Processing line: ~ if heuristic.came_from.empty?~ ** Processing line: ~ # Setup the search to begin from the star~ ** Processing line: ~ heuristic.frontier << grid.star~ ** Processing line: ~ heuristic.came_from[grid.star] = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # One step in the heuristic search~ ** Processing line: ~~ ** Processing line: ~ # Unless there are no more cells to explore from~ ** Processing line: ~ unless heuristic.frontier.empty?~ ** Processing line: ~ # Get the next cell to explore from~ ** Processing line: ~ new_frontier = heuristic.frontier.shift~ ** Processing line: ~ # For each of its neighbors~ ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ ** Processing line: ~ # That have not been visited and are not walls~ ** Processing line: ~ unless heuristic.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor)~ ** Processing line: ~ # Add them to the frontier and mark them as visited~ ** Processing line: ~ heuristic.frontier << neighbor~ ** Processing line: ~ heuristic.came_from[neighbor] = new_frontier~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line~ ** Processing line: ~ heuristic.frontier = heuristic.frontier.sort_by {| cell | proximity_to_star(cell) }~ ** Processing line: ~ # Sort the frontier so cells that are close to the target are then prioritized~ ** Processing line: ~ heuristic.frontier = heuristic.frontier.sort_by {| cell | heuristic_heuristic(cell) }~ ** Processing line: ~~ ** Processing line: ~ # If the search found the target~ ** Processing line: ~ if heuristic.came_from.has_key?(grid.target)~ ** Processing line: ~ # Calculate the path between the target and star~ ** Processing line: ~ heuristic_calc_path~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns one-dimensional absolute distance between cell and target~ ** Processing line: ~ # Returns a number to compare distances between cells and the target~ ** Processing line: ~ def heuristic_heuristic(cell)~ ** Processing line: ~ (grid.target.x - cell.x).abs + (grid.target.y - cell.y).abs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates the path between the target and star for the heuristic search~ ** Processing line: ~ # Only called when the heuristic search finds the target~ ** Processing line: ~ def heuristic_calc_path~ ** Processing line: ~ # Start from the target~ ** Processing line: ~ endpoint = grid.target~ ** Processing line: ~ # And the cell it came from~ ** Processing line: ~ next_endpoint = heuristic.came_from[endpoint]~ ** Processing line: ~ while endpoint and next_endpoint~ ** Processing line: ~ # Draw a path between these two cells and store it~ ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ ** Processing line: ~ heuristic.path << path~ ** Processing line: ~ # And get the next pair of cells~ ** Processing line: ~ endpoint = next_endpoint~ ** Processing line: ~ next_endpoint = heuristic.came_from[endpoint]~ ** Processing line: ~ # Continue till there are no more cells~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a list of adjacent cells~ ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ ** Processing line: ~ def adjacent_neighbors(cell)~ ** Processing line: ~ neighbors = []~ ** Processing line: ~~ ** Processing line: ~ # Gets all the valid neighbors into the array~ ** Processing line: ~ # From southern neighbor, clockwise~ ** Processing line: ~ neighbors << [cell.x , cell.y - 1] unless cell.y == 0~ ** Processing line: ~ neighbors << [cell.x - 1, cell.y ] unless cell.x == 0~ ** Processing line: ~ neighbors << [cell.x , cell.y + 1] unless cell.y == grid.height - 1~ ** Processing line: ~ neighbors << [cell.x + 1, cell.y ] unless cell.x == grid.width - 1~ ** Processing line: ~~ ** Processing line: ~ neighbors~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds the vertical and horizontal distance of a cell from the star~ ** Processing line: ~ # and returns the larger value~ ** Processing line: ~ # This method is used to have a zigzag pattern in the rendered path~ ** Processing line: ~ # A cell that is [5, 5] from the star,~ ** Processing line: ~ # is explored before over a cell that is [0, 7] away.~ ** Processing line: ~ # So, if possible, the search tries to go diagonal (zigzag) first~ ** Processing line: ~ def proximity_to_star(cell)~ ** Processing line: ~ distance_x = (grid.star.x - cell.x).abs~ ** Processing line: ~ distance_y = (grid.star.y - cell.y).abs~ ** Processing line: ~~ ** Processing line: ~ if distance_x > distance_y~ ** Processing line: ~ return distance_x~ ** Processing line: ~ else~ ** Processing line: ~ return distance_y~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Methods that allow code to be more concise. Subdivides args.state, which is where all variables are stored.~ ** Processing line: ~ def grid~ ** Processing line: ~ state.grid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def buttons~ ** Processing line: ~ state.buttons~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def slider~ ** Processing line: ~ state.slider~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def bfs~ ** Processing line: ~ state.bfs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def heuristic~ ** Processing line: ~ state.heuristic~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Descriptive aliases for colors~ ** Processing line: ~ def default_color~ ** Processing line: ~ [221, 212, 213] # Light Brown~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def wall_color~ ** Processing line: ~ [134, 134, 120] # Camo Green~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def visited_color~ ** Processing line: ~ [204, 191, 179] # Dark Brown~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def frontier_color~ ** Processing line: ~ [103, 136, 204] # Blue~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def path_color~ ** Processing line: ~ [231, 230, 228] # Pastel White~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def button_color~ ** Processing line: ~ [190, 190, 190] # Gray~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ # Method that is called by DragonRuby periodically~ ** Processing line: ~ # Used for updating animations and calculations~ ** Processing line: ~ def tick args~ ** Processing line: ~~ ** Processing line: ~ # Pressing r will reset the application~ ** Processing line: ~ if args.inputs.keyboard.key_down.r~ ** Processing line: ~ args.gtk.reset~ ** Processing line: ~ reset~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Every tick, new args are passed, and the Breadth First Search tick is called~ ** Processing line: ~ $heuristic_with_walls ||= Heuristic_With_Walls.new~ ** Processing line: ~ $heuristic_with_walls.args = args~ ** Processing line: ~ $heuristic_with_walls.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def reset~ ** Processing line: ~ $heuristic_with_walls = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Path Finding Algorithms - Heuristic With Walls - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Heuristic With Walls - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Heuristic With Walls - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/13_path_finding_algorithms/07_heuristic_with_walls/app/main.rb~ ** Processing line: ~ # This program is inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html~ ** Processing line: ~ # The effectiveness of the Heuristic search algorithm is shown through this demonstration.~ ** Processing line: ~ # Notice that both searches find the shortest path~ ** Processing line: ~ # The heuristic search, however, explores less of the grid, and is therefore faster.~ ** Processing line: ~ # The heuristic search prioritizes searching cells that are closer to the target.~ ** Processing line: ~ # Make sure to look at the Heuristic with walls program to see some of the downsides of the heuristic algorithm.~ ** Processing line: ~~ ** Processing line: ~ class Heuristic~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ input~ ** Processing line: ~ # If animation is playing, and max steps have not been reached~ ** Processing line: ~ # Move the search a step forward~ ** Processing line: ~ if state.play && state.current_step < state.max_steps~ ** Processing line: ~ # Variable that tells the program what step to recalculate up to~ ** Processing line: ~ state.current_step += 1~ ** Processing line: ~ move_searches_one_step_forward~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ # Variables to edit the size and appearance of the grid~ ** Processing line: ~ # Freely customizable to user's liking~ ** Processing line: ~ grid.width ||= 15~ ** Processing line: ~ grid.height ||= 15~ ** Processing line: ~ grid.cell_size ||= 40~ ** Processing line: ~ grid.rect ||= [0, 0, grid.width, grid.height]~ ** Processing line: ~~ ** Processing line: ~ grid.star ||= [0, 2]~ ** Processing line: ~ grid.target ||= [14, 12]~ ** Processing line: ~ grid.walls ||= {~ ** Processing line: ~ [2, 2] => true,~ ** Processing line: ~ [3, 2] => true,~ ** Processing line: ~ [4, 2] => true,~ ** Processing line: ~ [5, 2] => true,~ ** Processing line: ~ [6, 2] => true,~ ** Processing line: ~ [7, 2] => true,~ ** Processing line: ~ [8, 2] => true,~ ** Processing line: ~ [9, 2] => true,~ ** Processing line: ~ [10, 2] => true,~ ** Processing line: ~ [11, 2] => true,~ ** Processing line: ~ [12, 2] => true,~ ** Processing line: ~ [12, 3] => true,~ ** Processing line: ~ [12, 4] => true,~ ** Processing line: ~ [12, 5] => true,~ ** Processing line: ~ [12, 6] => true,~ ** Processing line: ~ [12, 7] => true,~ ** Processing line: ~ [12, 8] => true,~ ** Processing line: ~ [12, 9] => true,~ ** Processing line: ~ [12, 10] => true,~ ** Processing line: ~ [12, 11] => true,~ ** Processing line: ~ [12, 12] => true,~ ** Processing line: ~ [2, 12] => true,~ ** Processing line: ~ [3, 12] => true,~ ** Processing line: ~ [4, 12] => true,~ ** Processing line: ~ [5, 12] => true,~ ** Processing line: ~ [6, 12] => true,~ ** Processing line: ~ [7, 12] => true,~ ** Processing line: ~ [8, 12] => true,~ ** Processing line: ~ [9, 12] => true,~ ** Processing line: ~ [10, 12] => true,~ ** Processing line: ~ [11, 12] => true,~ ** Processing line: ~ [12, 12] => true~ ** Processing line: ~ }~ ** Processing line: ~ # There are no hills in the Heuristic Search Demo~ ** Processing line: ~~ ** Processing line: ~ # What the user is currently editing on the grid~ ** Processing line: ~ # We store this value, because we want to remember the value even when~ ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ ** Processing line: ~ # they are still clicking down on the mouse.~ ** Processing line: ~ state.user_input ||= :none~ ** Processing line: ~~ ** Processing line: ~ # These variables allow the breadth first search to take place~ ** Processing line: ~ # Came_from is a hash with a key of a cell and a value of the cell that was expanded from to find the key.~ ** Processing line: ~ # Used to prevent searching cells that have already been found~ ** Processing line: ~ # and to trace a path from the target back to the starting point.~ ** Processing line: ~ # Frontier is an array of cells to expand the search from.~ ** Processing line: ~ # The search is over when there are no more cells to search from.~ ** Processing line: ~ # Path stores the path from the target to the star, once the target has been found~ ** Processing line: ~ # It prevents calculating the path every tick.~ ** Processing line: ~ bfs.came_from ||= {}~ ** Processing line: ~ bfs.frontier ||= []~ ** Processing line: ~ bfs.path ||= []~ ** Processing line: ~~ ** Processing line: ~ heuristic.came_from ||= {}~ ** Processing line: ~ heuristic.frontier ||= []~ ** Processing line: ~ heuristic.path ||= []~ ** Processing line: ~~ ** Processing line: ~ # Stores which step of the animation is being rendered~ ** Processing line: ~ # When the user moves the star or messes with the walls,~ ** Processing line: ~ # the searches are recalculated up to this step~ ** Processing line: ~~ ** Processing line: ~ # Unless the current step has a value~ ** Processing line: ~ unless state.current_step~ ** Processing line: ~ # Set the current step to 10~ ** Processing line: ~ state.current_step = 10~ ** Processing line: ~ # And calculate the searches up to step 10~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # At some step the animation will end,~ ** Processing line: ~ # and further steps won't change anything (the whole grid will be explored)~ ** Processing line: ~ # This step is roughly the grid's width * height~ ** Processing line: ~ # When anim_steps equals max_steps no more calculations will occur~ ** Processing line: ~ # and the slider will be at the end~ ** Processing line: ~ state.max_steps = grid.width * grid.height~ ** Processing line: ~~ ** Processing line: ~ # Whether the animation should play or not~ ** Processing line: ~ # If true, every tick moves anim_steps forward one~ ** Processing line: ~ # Pressing the stepwise animation buttons will pause the animation~ ** Processing line: ~ # An if statement instead of the ||= operator is used for assigning a boolean value.~ ** Processing line: ~ # The || operator does not differentiate between nil and false.~ ** Processing line: ~ if state.play == nil~ ** Processing line: ~ state.play = false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Store the rects of the buttons that control the animation~ ** Processing line: ~ # They are here for user customization~ ** Processing line: ~ # Editing these might require recentering the text inside them~ ** Processing line: ~ # Those values can be found in the render_button methods~ ** Processing line: ~ buttons.left = [470, 600, 50, 50]~ ** Processing line: ~ buttons.center = [520, 600, 200, 50]~ ** Processing line: ~ buttons.right = [720, 600, 50, 50]~ ** Processing line: ~~ ** Processing line: ~ # The variables below are related to the slider~ ** Processing line: ~ # They allow the user to customize them~ ** Processing line: ~ # They also give a central location for the render and input methods to get~ ** Processing line: ~ # information from~ ** Processing line: ~ # x & y are the coordinates of the leftmost part of the slider line~ ** Processing line: ~ slider.x = 440~ ** Processing line: ~ slider.y = 675~ ** Processing line: ~ # This is the width of the line~ ** Processing line: ~ slider.w = 360~ ** Processing line: ~ # This is the offset for the circle~ ** Processing line: ~ # Allows the center of the circle to be on the line,~ ** Processing line: ~ # as opposed to the upper right corner~ ** Processing line: ~ slider.offset = 20~ ** Processing line: ~ # This is the spacing between each of the notches on the slider~ ** Processing line: ~ # Notches are places where the circle can rest on the slider line~ ** Processing line: ~ # There needs to be a notch for each step before the maximum number of steps~ ** Processing line: ~ slider.spacing = slider.w.to_f / state.max_steps.to_f~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # All methods with render draw stuff on the screen~ ** Processing line: ~ # UI has buttons, the slider, and labels~ ** Processing line: ~ # The search specific rendering occurs in the respective methods~ ** Processing line: ~ def render~ ** Processing line: ~ render_ui~ ** Processing line: ~ render_bfs~ ** Processing line: ~ render_heuristic~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_ui~ ** Processing line: ~ render_buttons~ ** Processing line: ~ render_slider~ ** Processing line: ~ render_labels~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_buttons~ ** Processing line: ~ render_left_button~ ** Processing line: ~ render_center_button~ ** Processing line: ~ render_right_button~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_bfs~ ** Processing line: ~ render_bfs_grid~ ** Processing line: ~ render_bfs_star~ ** Processing line: ~ render_bfs_target~ ** Processing line: ~ render_bfs_visited~ ** Processing line: ~ render_bfs_walls~ ** Processing line: ~ render_bfs_frontier~ ** Processing line: ~ render_bfs_path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_heuristic~ ** Processing line: ~ render_heuristic_grid~ ** Processing line: ~ render_heuristic_star~ ** Processing line: ~ render_heuristic_target~ ** Processing line: ~ render_heuristic_visited~ ** Processing line: ~ render_heuristic_walls~ ** Processing line: ~ render_heuristic_frontier~ ** Processing line: ~ render_heuristic_path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This method handles user input every tick~ ** Processing line: ~ def input~ ** Processing line: ~ # Check and handle button input~ ** Processing line: ~ input_buttons~ ** Processing line: ~~ ** Processing line: ~ # If the mouse was lifted this tick~ ** Processing line: ~ if inputs.mouse.up~ ** Processing line: ~ # Set current input to none~ ** Processing line: ~ state.user_input = :none~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # If the mouse was clicked this tick~ ** Processing line: ~ if inputs.mouse.down~ ** Processing line: ~ # Determine what the user is editing and appropriately edit the state.user_input variable~ ** Processing line: ~ determine_input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Process user input based on user_input variable and current mouse position~ ** Processing line: ~ process_input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Determines what the user is editing~ ** Processing line: ~ # This method is called when the mouse is clicked down~ ** Processing line: ~ def determine_input~ ** Processing line: ~ if mouse_over_slider?~ ** Processing line: ~ state.user_input = :slider~ ** Processing line: ~ # If the mouse is over the star in the first grid~ ** Processing line: ~ elsif bfs_mouse_over_star?~ ** Processing line: ~ # The user is editing the star from the first grid~ ** Processing line: ~ state.user_input = :bfs_star~ ** Processing line: ~ # If the mouse is over the star in the second grid~ ** Processing line: ~ elsif heuristic_mouse_over_star?~ ** Processing line: ~ # The user is editing the star from the second grid~ ** Processing line: ~ state.user_input = :heuristic_star~ ** Processing line: ~ # If the mouse is over the target in the first grid~ ** Processing line: ~ elsif bfs_mouse_over_target?~ ** Processing line: ~ # The user is editing the target from the first grid~ ** Processing line: ~ state.user_input = :bfs_target~ ** Processing line: ~ # If the mouse is over the target in the second grid~ ** Processing line: ~ elsif heuristic_mouse_over_target?~ ** Processing line: ~ # The user is editing the target from the second grid~ ** Processing line: ~ state.user_input = :heuristic_target~ ** Processing line: ~ # If the mouse is over a wall in the first grid~ ** Processing line: ~ elsif bfs_mouse_over_wall?~ ** Processing line: ~ # The user is removing a wall from the first grid~ ** Processing line: ~ state.user_input = :bfs_remove_wall~ ** Processing line: ~ # If the mouse is over a wall in the second grid~ ** Processing line: ~ elsif heuristic_mouse_over_wall?~ ** Processing line: ~ # The user is removing a wall from the second grid~ ** Processing line: ~ state.user_input = :heuristic_remove_wall~ ** Processing line: ~ # If the mouse is over the first grid~ ** Processing line: ~ elsif bfs_mouse_over_grid?~ ** Processing line: ~ # The user is adding a wall from the first grid~ ** Processing line: ~ state.user_input = :bfs_add_wall~ ** Processing line: ~ # If the mouse is over the second grid~ ** Processing line: ~ elsif heuristic_mouse_over_grid?~ ** Processing line: ~ # The user is adding a wall from the second grid~ ** Processing line: ~ state.user_input = :heuristic_add_wall~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Processes click and drag based on what the user is currently dragging~ ** Processing line: ~ def process_input~ ** Processing line: ~ if state.user_input == :slider~ ** Processing line: ~ process_input_slider~ ** Processing line: ~ elsif state.user_input == :bfs_star~ ** Processing line: ~ process_input_bfs_star~ ** Processing line: ~ elsif state.user_input == :heuristic_star~ ** Processing line: ~ process_input_heuristic_star~ ** Processing line: ~ elsif state.user_input == :bfs_target~ ** Processing line: ~ process_input_bfs_target~ ** Processing line: ~ elsif state.user_input == :heuristic_target~ ** Processing line: ~ process_input_heuristic_target~ ** Processing line: ~ elsif state.user_input == :bfs_remove_wall~ ** Processing line: ~ process_input_bfs_remove_wall~ ** Processing line: ~ elsif state.user_input == :heuristic_remove_wall~ ** Processing line: ~ process_input_heuristic_remove_wall~ ** Processing line: ~ elsif state.user_input == :bfs_add_wall~ ** Processing line: ~ process_input_bfs_add_wall~ ** Processing line: ~ elsif state.user_input == :heuristic_add_wall~ ** Processing line: ~ process_input_heuristic_add_wall~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_slider~ ** Processing line: ~ # Using primitives hides the line under the white circle of the slider~ ** Processing line: ~ # Draws the line~ ** Processing line: ~ outputs.primitives << [slider.x, slider.y, slider.x + slider.w, slider.y].line~ ** Processing line: ~ # The circle needs to be offset so that the center of the circle~ ** Processing line: ~ # overlaps the line instead of the upper right corner of the circle~ ** Processing line: ~ # The circle's x value is also moved based on the current seach step~ ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.current_step * slider.spacing)~ ** Processing line: ~ circle_y = (slider.y - slider.offset)~ ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ ** Processing line: ~ outputs.primitives << [circle_rect, 'circle-white.png'].sprite~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_labels~ ** Processing line: ~ outputs.labels << [205, 625, "Breadth First Search"]~ ** Processing line: ~ outputs.labels << [820, 625, "Heuristic Best-First Search"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_left_button~ ** Processing line: ~ # Draws the button_color button, and a black border~ ** Processing line: ~ # The border separates the buttons visually~ ** Processing line: ~ outputs.solids << [buttons.left, button_color]~ ** Processing line: ~ outputs.borders << [buttons.left]~ ** Processing line: ~~ ** Processing line: ~ # Renders an explanatory label in the center of the button~ ** Processing line: ~ # Explains to the user what the button does~ ** Processing line: ~ # If the button size is changed, the label might need to be edited as well~ ** Processing line: ~ # to keep the label in the center of the button~ ** Processing line: ~ label_x = buttons.left.x + 20~ ** Processing line: ~ label_y = buttons.left.y + 35~ ** Processing line: ~ outputs.labels << [label_x, label_y, "<"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_center_button~ ** Processing line: ~ # Draws the button_color button, and a black border~ ** Processing line: ~ # The border separates the buttons visually~ ** Processing line: ~ outputs.solids << [buttons.center, button_color]~ ** Processing line: ~ outputs.borders << [buttons.center]~ ** Processing line: ~~ ** Processing line: ~ # Renders an explanatory label in the center of the button~ ** Processing line: ~ # Explains to the user what the button does~ ** Processing line: ~ # If the button size is changed, the label might need to be edited as well~ ** Processing line: ~ # to keep the label in the center of the button~ ** Processing line: ~ label_x = buttons.center.x + 37~ ** Processing line: ~ label_y = buttons.center.y + 35~ ** Processing line: ~ label_text = state.play ? "Pause Animation" : "Play Animation"~ ** Processing line: ~ outputs.labels << [label_x, label_y, label_text]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_right_button~ ** Processing line: ~ # Draws the button_color button, and a black border~ ** Processing line: ~ # The border separates the buttons visually~ ** Processing line: ~ outputs.solids << [buttons.right, button_color]~ ** Processing line: ~ outputs.borders << [buttons.right]~ ** Processing line: ~~ ** Processing line: ~ # Renders an explanatory label in the center of the button~ ** Processing line: ~ # Explains to the user what the button does~ ** Processing line: ~ label_x = buttons.right.x + 20~ ** Processing line: ~ label_y = buttons.right.y + 35~ ** Processing line: ~ outputs.labels << [label_x, label_y, ">"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_bfs_grid~ ** Processing line: ~ # A large rect the size of the grid~ ** Processing line: ~ outputs.solids << [bfs_scale_up(grid.rect), default_color]~ ** Processing line: ~~ ** Processing line: ~ # The vertical grid lines~ ** Processing line: ~ for x in 0..grid.width~ ** Processing line: ~ outputs.lines << bfs_vertical_line(x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The horizontal grid lines~ ** Processing line: ~ for y in 0..grid.height~ ** Processing line: ~ outputs.lines << bfs_horizontal_line(y)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_heuristic_grid~ ** Processing line: ~ # A large rect the size of the grid~ ** Processing line: ~ outputs.solids << [heuristic_scale_up(grid.rect), default_color]~ ** Processing line: ~~ ** Processing line: ~ # The vertical grid lines~ ** Processing line: ~ for x in 0..grid.width~ ** Processing line: ~ outputs.lines << heuristic_vertical_line(x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The horizontal grid lines~ ** Processing line: ~ for y in 0..grid.height~ ** Processing line: ~ outputs.lines << heuristic_horizontal_line(y)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a vertical line for a column of the first grid~ ** Processing line: ~ def bfs_vertical_line column~ ** Processing line: ~ bfs_scale_up([column, 0, column, grid.height])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a horizontal line for a column of the first grid~ ** Processing line: ~ def bfs_horizontal_line row~ ** Processing line: ~ bfs_scale_up([0, row, grid.width, row])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a vertical line for a column of the second grid~ ** Processing line: ~ def heuristic_vertical_line column~ ** Processing line: ~ bfs_scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a horizontal line for a column of the second grid~ ** Processing line: ~ def heuristic_horizontal_line row~ ** Processing line: ~ bfs_scale_up([grid.width + 1, row, grid.width + grid.width + 1, row])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the star on the first grid~ ** Processing line: ~ def render_bfs_star~ ** Processing line: ~ outputs.sprites << [bfs_scale_up(grid.star), 'star.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the star on the second grid~ ** Processing line: ~ def render_heuristic_star~ ** Processing line: ~ outputs.sprites << [heuristic_scale_up(grid.star), 'star.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the target on the first grid~ ** Processing line: ~ def render_bfs_target~ ** Processing line: ~ outputs.sprites << [bfs_scale_up(grid.target), 'target.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the target on the second grid~ ** Processing line: ~ def render_heuristic_target~ ** Processing line: ~ outputs.sprites << [heuristic_scale_up(grid.target), 'target.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the walls on the first grid~ ** Processing line: ~ def render_bfs_walls~ ** Processing line: ~ grid.walls.each_key do | wall |~ ** Processing line: ~ outputs.solids << [bfs_scale_up(wall), wall_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the walls on the second grid~ ** Processing line: ~ def render_heuristic_walls~ ** Processing line: ~ grid.walls.each_key do | wall |~ ** Processing line: ~ outputs.solids << [heuristic_scale_up(wall), wall_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the visited cells on the first grid~ ** Processing line: ~ def render_bfs_visited~ ** Processing line: ~ bfs.came_from.each_key do | visited_cell |~ ** Processing line: ~ outputs.solids << [bfs_scale_up(visited_cell), visited_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the visited cells on the second grid~ ** Processing line: ~ def render_heuristic_visited~ ** Processing line: ~ heuristic.came_from.each_key do | visited_cell |~ ** Processing line: ~ outputs.solids << [heuristic_scale_up(visited_cell), visited_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the frontier cells on the first grid~ ** Processing line: ~ def render_bfs_frontier~ ** Processing line: ~ bfs.frontier.each do | frontier_cell |~ ** Processing line: ~ outputs.solids << [bfs_scale_up(frontier_cell), frontier_color, 200]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the frontier cells on the second grid~ ** Processing line: ~ def render_heuristic_frontier~ ** Processing line: ~ heuristic.frontier.each do | frontier_cell |~ ** Processing line: ~ outputs.solids << [heuristic_scale_up(frontier_cell), frontier_color, 200]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the path found by the breadth first search on the first grid~ ** Processing line: ~ def render_bfs_path~ ** Processing line: ~ bfs.path.each do | path |~ ** Processing line: ~ outputs.solids << [bfs_scale_up(path), path_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the path found by the heuristic search on the second grid~ ** Processing line: ~ def render_heuristic_path~ ** Processing line: ~ heuristic.path.each do | path |~ ** Processing line: ~ outputs.solids << [heuristic_scale_up(path), path_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns the rect for the path between two cells based on their relative positions~ ** Processing line: ~ def get_path_between(cell_one, cell_two)~ ** Processing line: ~ path = []~ ** Processing line: ~~ ** Processing line: ~ # If cell one is above cell two~ ** Processing line: ~ if cell_one.x == cell_two.x and cell_one.y > cell_two.y~ ** Processing line: ~ # Path starts from the center of cell two and moves upward to the center of cell one~ ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 0.4, 1.4]~ ** Processing line: ~ # If cell one is below cell two~ ** Processing line: ~ elsif cell_one.x == cell_two.x and cell_one.y < cell_two.y~ ** Processing line: ~ # Path starts from the center of cell one and moves upward to the center of cell two~ ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 0.4, 1.4]~ ** Processing line: ~ # If cell one is to the left of cell two~ ** Processing line: ~ elsif cell_one.x > cell_two.x and cell_one.y == cell_two.y~ ** Processing line: ~ # Path starts from the center of cell two and moves rightward to the center of cell one~ ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 1.4, 0.4]~ ** Processing line: ~ # If cell one is to the right of cell two~ ** Processing line: ~ elsif cell_one.x < cell_two.x and cell_one.y == cell_two.y~ ** Processing line: ~ # Path starts from the center of cell one and moves rightward to the center of cell two~ ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 1.4, 0.4]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # In code, the cells are represented as 1x1 rectangles~ ** Processing line: ~ # When drawn, the cells are larger than 1x1 rectangles~ ** Processing line: ~ # This method is used to scale up cells, and lines~ ** Processing line: ~ # Objects are scaled up according to the grid.cell_size variable~ ** Processing line: ~ # This allows for easy customization of the visual scale of the grid~ ** Processing line: ~ # This method scales up cells for the first grid~ ** Processing line: ~ def bfs_scale_up(cell)~ ** Processing line: ~ # Prevents the original value of cell from being edited~ ** Processing line: ~ cell = cell.clone~ ** Processing line: ~~ ** Processing line: ~ # If cell is just an x and y coordinate~ ** Processing line: ~ if cell.size == 2~ ** Processing line: ~ # Add a width and height of 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Scale all the values up~ ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ ** Processing line: ~~ ** Processing line: ~ # Returns the scaled up cell~ ** Processing line: ~ cell~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Translates the given cell grid.width + 1 to the right and then scales up~ ** Processing line: ~ # Used to draw cells for the second grid~ ** Processing line: ~ # This method does not work for lines,~ ** Processing line: ~ # so separate methods exist for the grid lines~ ** Processing line: ~ def heuristic_scale_up(cell)~ ** Processing line: ~ # Prevents the original value of cell from being edited~ ** Processing line: ~ cell = cell.clone~ ** Processing line: ~ # Translates the cell to the second grid equivalent~ ** Processing line: ~ cell.x += grid.width + 1~ ** Processing line: ~ # Proceeds as if scaling up for the first grid~ ** Processing line: ~ bfs_scale_up(cell)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Checks and handles input for the buttons~ ** Processing line: ~ # Called when the mouse is lifted~ ** Processing line: ~ def input_buttons~ ** Processing line: ~ input_left_button~ ** Processing line: ~ input_center_button~ ** Processing line: ~ input_right_button~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Checks if the previous step button is clicked~ ** Processing line: ~ # If it is, it pauses the animation and moves the search one step backward~ ** Processing line: ~ def input_left_button~ ** Processing line: ~ if left_button_clicked?~ ** Processing line: ~ state.play = false~ ** Processing line: ~ state.current_step -= 1~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Controls the play/pause button~ ** Processing line: ~ # Inverses whether the animation is playing or not when clicked~ ** Processing line: ~ def input_center_button~ ** Processing line: ~ if center_button_clicked? || inputs.keyboard.key_down.space~ ** Processing line: ~ state.play = !state.play~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Checks if the next step button is clicked~ ** Processing line: ~ # If it is, it pauses the animation and moves the search one step forward~ ** Processing line: ~ def input_right_button~ ** Processing line: ~ if right_button_clicked?~ ** Processing line: ~ state.play = false~ ** Processing line: ~ state.current_step += 1~ ** Processing line: ~ move_searches_one_step_forward~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # These methods detect when the buttons are clicked~ ** Processing line: ~ def left_button_clicked?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(buttons.left) && inputs.mouse.up~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def center_button_clicked?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(buttons.center) && inputs.mouse.up~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def right_button_clicked?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(buttons.right) && inputs.mouse.up~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the slider~ ** Processing line: ~ # Is the mouse over the circle of the slider?~ ** Processing line: ~ def mouse_over_slider?~ ** Processing line: ~ circle_x = (slider.x - slider.offset) + (state.current_step * slider.spacing)~ ** Processing line: ~ circle_y = (slider.y - slider.offset)~ ** Processing line: ~ circle_rect = [circle_x, circle_y, 37, 37]~ ** Processing line: ~ inputs.mouse.point.inside_rect?(circle_rect)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the star from the first grid~ ** Processing line: ~ def bfs_mouse_over_star?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(bfs_scale_up(grid.star))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the star from the second grid~ ** Processing line: ~ def heuristic_mouse_over_star?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.star))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the target from the first grid~ ** Processing line: ~ def bfs_mouse_over_target?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(bfs_scale_up(grid.target))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the target from the second grid~ ** Processing line: ~ def heuristic_mouse_over_target?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.target))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing walls from the first grid~ ** Processing line: ~ def bfs_mouse_over_wall?~ ** Processing line: ~ grid.walls.each_key do | wall |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(bfs_scale_up(wall))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing walls from the second grid~ ** Processing line: ~ def heuristic_mouse_over_wall?~ ** Processing line: ~ grid.walls.each_key do | wall |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(heuristic_scale_up(wall))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be adding walls from the first grid~ ** Processing line: ~ def bfs_mouse_over_grid?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(bfs_scale_up(grid.rect))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be adding walls from the second grid~ ** Processing line: ~ def heuristic_mouse_over_grid?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(heuristic_scale_up(grid.rect))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This method is called when the user is editing the slider~ ** Processing line: ~ # It pauses the animation and moves the white circle to the closest integer point~ ** Processing line: ~ # on the slider~ ** Processing line: ~ # Changes the step of the search to be animated~ ** Processing line: ~ def process_input_slider~ ** Processing line: ~ state.play = false~ ** Processing line: ~ mouse_x = inputs.mouse.point.x~ ** Processing line: ~~ ** Processing line: ~ # Bounds the mouse_x to the closest x value on the slider line~ ** Processing line: ~ mouse_x = slider.x if mouse_x < slider.x~ ** Processing line: ~ mouse_x = slider.x + slider.w if mouse_x > slider.x + slider.w~ ** Processing line: ~~ ** Processing line: ~ # Sets the current search step to the one represented by the mouse x value~ ** Processing line: ~ # The slider's circle moves due to the render_slider method using anim_steps~ ** Processing line: ~ state.current_step = ((mouse_x - slider.x) / slider.spacing).to_i~ ** Processing line: ~~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the star to the cell closest to the mouse in the first grid~ ** Processing line: ~ # Only resets the search if the star changes position~ ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ ** Processing line: ~ def process_input_bfs_star~ ** Processing line: ~ old_star = grid.star.clone~ ** Processing line: ~ unless bfs_cell_closest_to_mouse == grid.target~ ** Processing line: ~ grid.star = bfs_cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_star == grid.star~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the star to the cell closest to the mouse in the second grid~ ** Processing line: ~ # Only resets the search if the star changes position~ ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ ** Processing line: ~ def process_input_heuristic_star~ ** Processing line: ~ old_star = grid.star.clone~ ** Processing line: ~ unless heuristic_cell_closest_to_mouse == grid.target~ ** Processing line: ~ grid.star = heuristic_cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_star == grid.star~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the target to the grid closest to the mouse in the first grid~ ** Processing line: ~ # Only recalculate_searchess the search if the target changes position~ ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ ** Processing line: ~ def process_input_bfs_target~ ** Processing line: ~ old_target = grid.target.clone~ ** Processing line: ~ unless bfs_cell_closest_to_mouse == grid.star~ ** Processing line: ~ grid.target = bfs_cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_target == grid.target~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the target to the cell closest to the mouse in the second grid~ ** Processing line: ~ # Only recalculate_searchess the search if the target changes position~ ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ ** Processing line: ~ def process_input_heuristic_target~ ** Processing line: ~ old_target = grid.target.clone~ ** Processing line: ~ unless heuristic_cell_closest_to_mouse == grid.star~ ** Processing line: ~ grid.target = heuristic_cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_target == grid.target~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Removes walls in the first grid that are under the cursor~ ** Processing line: ~ def process_input_bfs_remove_wall~ ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ ** Processing line: ~ # the cursor is directly over~ ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ ** Processing line: ~ if bfs_mouse_over_grid?~ ** Processing line: ~ if grid.walls.has_key?(bfs_cell_closest_to_mouse)~ ** Processing line: ~ grid.walls.delete(bfs_cell_closest_to_mouse)~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Removes walls in the second grid that are under the cursor~ ** Processing line: ~ def process_input_heuristic_remove_wall~ ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ ** Processing line: ~ # the cursor is directly over~ ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ ** Processing line: ~ if heuristic_mouse_over_grid?~ ** Processing line: ~ if grid.walls.has_key?(heuristic_cell_closest_to_mouse)~ ** Processing line: ~ grid.walls.delete(heuristic_cell_closest_to_mouse)~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ # Adds a wall in the first grid in the cell the mouse is over~ ** Processing line: ~ def process_input_bfs_add_wall~ ** Processing line: ~ if bfs_mouse_over_grid?~ ** Processing line: ~ unless grid.walls.has_key?(bfs_cell_closest_to_mouse)~ ** Processing line: ~ grid.walls[bfs_cell_closest_to_mouse] = true~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds a wall in the second grid in the cell the mouse is over~ ** Processing line: ~ def process_input_heuristic_add_wall~ ** Processing line: ~ if heuristic_mouse_over_grid?~ ** Processing line: ~ unless grid.walls.has_key?(heuristic_cell_closest_to_mouse)~ ** Processing line: ~ grid.walls[heuristic_cell_closest_to_mouse] = true~ ** Processing line: ~ recalculate_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ ** Processing line: ~ # Finding the cell closest to the mouse helps with this~ ** Processing line: ~ def bfs_cell_closest_to_mouse~ ** Processing line: ~ # Closest cell to the mouse in the first grid~ ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ ** Processing line: ~ # Bound x and y to the grid~ ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ ** Processing line: ~ # Return closest cell~ ** Processing line: ~ [x, y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ ** Processing line: ~ # Finding the cell closest to the mouse in the second grid helps with this~ ** Processing line: ~ def heuristic_cell_closest_to_mouse~ ** Processing line: ~ # Closest cell grid to the mouse in the second~ ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ ** Processing line: ~ # Translate the cell to the first grid~ ** Processing line: ~ x -= grid.width + 1~ ** Processing line: ~ # Bound x and y to the first grid~ ** Processing line: ~ x = 0 if x < 0~ ** Processing line: ~ y = 0 if y < 0~ ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ ** Processing line: ~ # Return closest cell~ ** Processing line: ~ [x, y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def recalculate_searches~ ** Processing line: ~ # Reset the searches~ ** Processing line: ~ bfs.came_from = {}~ ** Processing line: ~ bfs.frontier = []~ ** Processing line: ~ bfs.path = []~ ** Processing line: ~ heuristic.came_from = {}~ ** Processing line: ~ heuristic.frontier = []~ ** Processing line: ~ heuristic.path = []~ ** Processing line: ~~ ** Processing line: ~ # Move the searches forward to the current step~ ** Processing line: ~ state.current_step.times { move_searches_one_step_forward }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_searches_one_step_forward~ ** Processing line: ~ bfs_one_step_forward~ ** Processing line: ~ heuristic_one_step_forward~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def bfs_one_step_forward~ ** Processing line: ~ return if bfs.came_from.has_key?(grid.target)~ ** Processing line: ~~ ** Processing line: ~ # Only runs at the beginning of the search as setup.~ ** Processing line: ~ if bfs.came_from.empty?~ ** Processing line: ~ bfs.frontier << grid.star~ ** Processing line: ~ bfs.came_from[grid.star] = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # A step in the search~ ** Processing line: ~ unless bfs.frontier.empty?~ ** Processing line: ~ # Takes the next frontier cell~ ** Processing line: ~ new_frontier = bfs.frontier.shift~ ** Processing line: ~ # For each of its neighbors~ ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ ** Processing line: ~ # That have not been visited and are not walls~ ** Processing line: ~ unless bfs.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor)~ ** Processing line: ~ # Add them to the frontier and mark them as visited~ ** Processing line: ~ bfs.frontier << neighbor~ ** Processing line: ~ bfs.came_from[neighbor] = new_frontier~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line~ ** Processing line: ~ # Comment this line and let a path generate to see the difference~ ** Processing line: ~ bfs.frontier = bfs.frontier.sort_by {| cell | proximity_to_star(cell) }~ ** Processing line: ~~ ** Processing line: ~ # If the search found the target~ ** Processing line: ~ if bfs.came_from.has_key?(grid.target)~ ** Processing line: ~ # Calculate the path between the target and star~ ** Processing line: ~ bfs_calc_path~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates the path between the target and star for the breadth first search~ ** Processing line: ~ # Only called when the breadth first search finds the target~ ** Processing line: ~ def bfs_calc_path~ ** Processing line: ~ # Start from the target~ ** Processing line: ~ endpoint = grid.target~ ** Processing line: ~ # And the cell it came from~ ** Processing line: ~ next_endpoint = bfs.came_from[endpoint]~ ** Processing line: ~ while endpoint and next_endpoint~ ** Processing line: ~ # Draw a path between these two cells and store it~ ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ ** Processing line: ~ bfs.path << path~ ** Processing line: ~ # And get the next pair of cells~ ** Processing line: ~ endpoint = next_endpoint~ ** Processing line: ~ next_endpoint = bfs.came_from[endpoint]~ ** Processing line: ~ # Continue till there are no more cells~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the heuristic search forward one step~ ** Processing line: ~ # Can be called from tick while the animation is playing~ ** Processing line: ~ # Can also be called when recalculating the searches after the user edited the grid~ ** Processing line: ~ def heuristic_one_step_forward~ ** Processing line: ~ # Stop the search if the target has been found~ ** Processing line: ~ return if heuristic.came_from.has_key?(grid.target)~ ** Processing line: ~~ ** Processing line: ~ # If the search has not begun~ ** Processing line: ~ if heuristic.came_from.empty?~ ** Processing line: ~ # Setup the search to begin from the star~ ** Processing line: ~ heuristic.frontier << grid.star~ ** Processing line: ~ heuristic.came_from[grid.star] = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # One step in the heuristic search~ ** Processing line: ~~ ** Processing line: ~ # Unless there are no more cells to explore from~ ** Processing line: ~ unless heuristic.frontier.empty?~ ** Processing line: ~ # Get the next cell to explore from~ ** Processing line: ~ new_frontier = heuristic.frontier.shift~ ** Processing line: ~ # For each of its neighbors~ ** Processing line: ~ adjacent_neighbors(new_frontier).each do |neighbor|~ ** Processing line: ~ # That have not been visited and are not walls~ ** Processing line: ~ unless heuristic.came_from.has_key?(neighbor) || grid.walls.has_key?(neighbor)~ ** Processing line: ~ # Add them to the frontier and mark them as visited~ ** Processing line: ~ heuristic.frontier << neighbor~ ** Processing line: ~ heuristic.came_from[neighbor] = new_frontier~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line~ ** Processing line: ~ heuristic.frontier = heuristic.frontier.sort_by {| cell | proximity_to_star(cell) }~ ** Processing line: ~ # Sort the frontier so cells that are close to the target are then prioritized~ ** Processing line: ~ heuristic.frontier = heuristic.frontier.sort_by {| cell | heuristic_heuristic(cell) }~ ** Processing line: ~~ ** Processing line: ~ # If the search found the target~ ** Processing line: ~ if heuristic.came_from.has_key?(grid.target)~ ** Processing line: ~ # Calculate the path between the target and star~ ** Processing line: ~ heuristic_calc_path~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns one-dimensional absolute distance between cell and target~ ** Processing line: ~ # Returns a number to compare distances between cells and the target~ ** Processing line: ~ def heuristic_heuristic(cell)~ ** Processing line: ~ (grid.target.x - cell.x).abs + (grid.target.y - cell.y).abs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates the path between the target and star for the heuristic search~ ** Processing line: ~ # Only called when the heuristic search finds the target~ ** Processing line: ~ def heuristic_calc_path~ ** Processing line: ~ # Start from the target~ ** Processing line: ~ endpoint = grid.target~ ** Processing line: ~ # And the cell it came from~ ** Processing line: ~ next_endpoint = heuristic.came_from[endpoint]~ ** Processing line: ~ while endpoint and next_endpoint~ ** Processing line: ~ # Draw a path between these two cells and store it~ ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ ** Processing line: ~ heuristic.path << path~ ** Processing line: ~ # And get the next pair of cells~ ** Processing line: ~ endpoint = next_endpoint~ ** Processing line: ~ next_endpoint = heuristic.came_from[endpoint]~ ** Processing line: ~ # Continue till there are no more cells~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a list of adjacent cells~ ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ ** Processing line: ~ def adjacent_neighbors(cell)~ ** Processing line: ~ neighbors = []~ ** Processing line: ~~ ** Processing line: ~ # Gets all the valid neighbors into the array~ ** Processing line: ~ # From southern neighbor, clockwise~ ** Processing line: ~ neighbors << [cell.x , cell.y - 1] unless cell.y == 0~ ** Processing line: ~ neighbors << [cell.x - 1, cell.y ] unless cell.x == 0~ ** Processing line: ~ neighbors << [cell.x , cell.y + 1] unless cell.y == grid.height - 1~ ** Processing line: ~ neighbors << [cell.x + 1, cell.y ] unless cell.x == grid.width - 1~ ** Processing line: ~~ ** Processing line: ~ neighbors~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds the vertical and horizontal distance of a cell from the star~ ** Processing line: ~ # and returns the larger value~ ** Processing line: ~ # This method is used to have a zigzag pattern in the rendered path~ ** Processing line: ~ # A cell that is [5, 5] from the star,~ ** Processing line: ~ # is explored before over a cell that is [0, 7] away.~ ** Processing line: ~ # So, if possible, the search tries to go diagonal (zigzag) first~ ** Processing line: ~ def proximity_to_star(cell)~ ** Processing line: ~ distance_x = (grid.star.x - cell.x).abs~ ** Processing line: ~ distance_y = (grid.star.y - cell.y).abs~ ** Processing line: ~~ ** Processing line: ~ if distance_x > distance_y~ ** Processing line: ~ return distance_x~ ** Processing line: ~ else~ ** Processing line: ~ return distance_y~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Methods that allow code to be more concise. Subdivides args.state, which is where all variables are stored.~ ** Processing line: ~ def grid~ ** Processing line: ~ state.grid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def buttons~ ** Processing line: ~ state.buttons~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def slider~ ** Processing line: ~ state.slider~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def bfs~ ** Processing line: ~ state.bfs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def heuristic~ ** Processing line: ~ state.heuristic~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Descriptive aliases for colors~ ** Processing line: ~ def default_color~ ** Processing line: ~ [221, 212, 213] # Light Brown~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def wall_color~ ** Processing line: ~ [134, 134, 120] # Camo Green~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def visited_color~ ** Processing line: ~ [204, 191, 179] # Dark Brown~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def frontier_color~ ** Processing line: ~ [103, 136, 204] # Blue~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def path_color~ ** Processing line: ~ [231, 230, 228] # Pastel White~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def button_color~ ** Processing line: ~ [190, 190, 190] # Gray~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ # Method that is called by DragonRuby periodically~ ** Processing line: ~ # Used for updating animations and calculations~ ** Processing line: ~ def tick args~ ** Processing line: ~~ ** Processing line: ~ # Pressing r will reset the application~ ** Processing line: ~ if args.inputs.keyboard.key_down.r~ ** Processing line: ~ args.gtk.reset~ ** Processing line: ~ reset~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Every tick, new args are passed, and the Breadth First Search tick is called~ ** Processing line: ~ $heuristic ||= Heuristic.new~ ** Processing line: ~ $heuristic.args = args~ ** Processing line: ~ $heuristic.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def reset~ ** Processing line: ~ $heuristic = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Path Finding Algorithms - A Star - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - A Star - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - A Star - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/13_path_finding_algorithms/08_a_star/app/main.rb~ ** Processing line: ~ # This program is inspired by https://www.redblobgames.com/pathfinding/a-star/introduction.html~ ** Processing line: ~~ ** Processing line: ~ # The A* Search works by incorporating both the distance from the starting point~ ** Processing line: ~ # and the distance from the target in its heurisitic.~ ** Processing line: ~~ ** Processing line: ~ # It tends to find the correct (shortest) path even when the Greedy Best-First Search does not,~ ** Processing line: ~ # and it explores less of the grid, and is therefore faster, than Dijkstra's Search.~ ** Processing line: ~~ ** Processing line: ~ class A_Star_Algorithm~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ input~ ** Processing line: ~~ ** Processing line: ~ if dijkstra.came_from.empty?~ ** Processing line: ~ calc_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ # Variables to edit the size and appearance of the grid~ ** Processing line: ~ # Freely customizable to user's liking~ ** Processing line: ~ grid.width ||= 15~ ** Processing line: ~ grid.height ||= 15~ ** Processing line: ~ grid.cell_size ||= 27~ ** Processing line: ~ grid.rect ||= [0, 0, grid.width, grid.height]~ ** Processing line: ~~ ** Processing line: ~ grid.star ||= [0, 2]~ ** Processing line: ~ grid.target ||= [11, 13]~ ** Processing line: ~ grid.walls ||= {~ ** Processing line: ~ [2, 2] => true,~ ** Processing line: ~ [3, 2] => true,~ ** Processing line: ~ [4, 2] => true,~ ** Processing line: ~ [5, 2] => true,~ ** Processing line: ~ [6, 2] => true,~ ** Processing line: ~ [7, 2] => true,~ ** Processing line: ~ [8, 2] => true,~ ** Processing line: ~ [9, 2] => true,~ ** Processing line: ~ [10, 2] => true,~ ** Processing line: ~ [11, 2] => true,~ ** Processing line: ~ [12, 2] => true,~ ** Processing line: ~ [12, 3] => true,~ ** Processing line: ~ [12, 4] => true,~ ** Processing line: ~ [12, 5] => true,~ ** Processing line: ~ [12, 6] => true,~ ** Processing line: ~ [12, 7] => true,~ ** Processing line: ~ [12, 8] => true,~ ** Processing line: ~ [12, 9] => true,~ ** Processing line: ~ [12, 10] => true,~ ** Processing line: ~ [12, 11] => true,~ ** Processing line: ~ [12, 12] => true,~ ** Processing line: ~ [5, 12] => true,~ ** Processing line: ~ [6, 12] => true,~ ** Processing line: ~ [7, 12] => true,~ ** Processing line: ~ [8, 12] => true,~ ** Processing line: ~ [9, 12] => true,~ ** Processing line: ~ [10, 12] => true,~ ** Processing line: ~ [11, 12] => true,~ ** Processing line: ~ [12, 12] => true~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ # What the user is currently editing on the grid~ ** Processing line: ~ # We store this value, because we want to remember the value even when~ ** Processing line: ~ # the user's cursor is no longer over what they're interacting with, but~ ** Processing line: ~ # they are still clicking down on the mouse.~ ** Processing line: ~ state.user_input ||= :none~ ** Processing line: ~~ ** Processing line: ~ # These variables allow the breadth first search to take place~ ** Processing line: ~ # Came_from is a hash with a key of a cell and a value of the cell that was expanded from to find the key.~ ** Processing line: ~ # Used to prevent searching cells that have already been found~ ** Processing line: ~ # and to trace a path from the target back to the starting point.~ ** Processing line: ~ # Frontier is an array of cells to expand the search from.~ ** Processing line: ~ # The search is over when there are no more cells to search from.~ ** Processing line: ~ # Path stores the path from the target to the star, once the target has been found~ ** Processing line: ~ # It prevents calculating the path every tick.~ ** Processing line: ~ dijkstra.came_from ||= {}~ ** Processing line: ~ dijkstra.cost_so_far ||= {}~ ** Processing line: ~ dijkstra.frontier ||= []~ ** Processing line: ~ dijkstra.path ||= []~ ** Processing line: ~~ ** Processing line: ~ greedy.came_from ||= {}~ ** Processing line: ~ greedy.frontier ||= []~ ** Processing line: ~ greedy.path ||= []~ ** Processing line: ~~ ** Processing line: ~ a_star.frontier ||= []~ ** Processing line: ~ a_star.came_from ||= {}~ ** Processing line: ~ a_star.path ||= []~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # All methods with render draw stuff on the screen~ ** Processing line: ~ # UI has buttons, the slider, and labels~ ** Processing line: ~ # The search specific rendering occurs in the respective methods~ ** Processing line: ~ def render~ ** Processing line: ~ render_labels~ ** Processing line: ~ render_dijkstra~ ** Processing line: ~ render_greedy~ ** Processing line: ~ render_a_star~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_labels~ ** Processing line: ~ outputs.labels << [150, 450, "Dijkstra's"]~ ** Processing line: ~ outputs.labels << [550, 450, "Greedy Best-First"]~ ** Processing line: ~ outputs.labels << [1025, 450, "A* Search"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_dijkstra~ ** Processing line: ~ render_dijkstra_grid~ ** Processing line: ~ render_dijkstra_star~ ** Processing line: ~ render_dijkstra_target~ ** Processing line: ~ render_dijkstra_visited~ ** Processing line: ~ render_dijkstra_walls~ ** Processing line: ~ render_dijkstra_path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_greedy~ ** Processing line: ~ render_greedy_grid~ ** Processing line: ~ render_greedy_star~ ** Processing line: ~ render_greedy_target~ ** Processing line: ~ render_greedy_visited~ ** Processing line: ~ render_greedy_walls~ ** Processing line: ~ render_greedy_path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_a_star~ ** Processing line: ~ render_a_star_grid~ ** Processing line: ~ render_a_star_star~ ** Processing line: ~ render_a_star_target~ ** Processing line: ~ render_a_star_visited~ ** Processing line: ~ render_a_star_walls~ ** Processing line: ~ render_a_star_path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This method handles user input every tick~ ** Processing line: ~ def input~ ** Processing line: ~ # If the mouse was lifted this tick~ ** Processing line: ~ if inputs.mouse.up~ ** Processing line: ~ # Set current input to none~ ** Processing line: ~ state.user_input = :none~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # If the mouse was clicked this tick~ ** Processing line: ~ if inputs.mouse.down~ ** Processing line: ~ # Determine what the user is editing and appropriately edit the state.user_input variable~ ** Processing line: ~ determine_input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Process user input based on user_input variable and current mouse position~ ** Processing line: ~ process_input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Determines what the user is editing~ ** Processing line: ~ # This method is called when the mouse is clicked down~ ** Processing line: ~ def determine_input~ ** Processing line: ~ # If the mouse is over the star in the first grid~ ** Processing line: ~ if dijkstra_mouse_over_star?~ ** Processing line: ~ # The user is editing the star from the first grid~ ** Processing line: ~ state.user_input = :dijkstra_star~ ** Processing line: ~ # If the mouse is over the star in the second grid~ ** Processing line: ~ elsif greedy_mouse_over_star?~ ** Processing line: ~ # The user is editing the star from the second grid~ ** Processing line: ~ state.user_input = :greedy_star~ ** Processing line: ~ # If the mouse is over the star in the third grid~ ** Processing line: ~ elsif a_star_mouse_over_star?~ ** Processing line: ~ # The user is editing the star from the third grid~ ** Processing line: ~ state.user_input = :a_star_star~ ** Processing line: ~ # If the mouse is over the target in the first grid~ ** Processing line: ~ elsif dijkstra_mouse_over_target?~ ** Processing line: ~ # The user is editing the target from the first grid~ ** Processing line: ~ state.user_input = :dijkstra_target~ ** Processing line: ~ # If the mouse is over the target in the second grid~ ** Processing line: ~ elsif greedy_mouse_over_target?~ ** Processing line: ~ # The user is editing the target from the second grid~ ** Processing line: ~ state.user_input = :greedy_target~ ** Processing line: ~ # If the mouse is over the target in the third grid~ ** Processing line: ~ elsif a_star_mouse_over_target?~ ** Processing line: ~ # The user is editing the target from the third grid~ ** Processing line: ~ state.user_input = :a_star_target~ ** Processing line: ~ # If the mouse is over a wall in the first grid~ ** Processing line: ~ elsif dijkstra_mouse_over_wall?~ ** Processing line: ~ # The user is removing a wall from the first grid~ ** Processing line: ~ state.user_input = :dijkstra_remove_wall~ ** Processing line: ~ # If the mouse is over a wall in the second grid~ ** Processing line: ~ elsif greedy_mouse_over_wall?~ ** Processing line: ~ # The user is removing a wall from the second grid~ ** Processing line: ~ state.user_input = :greedy_remove_wall~ ** Processing line: ~ # If the mouse is over a wall in the third grid~ ** Processing line: ~ elsif a_star_mouse_over_wall?~ ** Processing line: ~ # The user is removing a wall from the third grid~ ** Processing line: ~ state.user_input = :a_star_remove_wall~ ** Processing line: ~ # If the mouse is over the first grid~ ** Processing line: ~ elsif dijkstra_mouse_over_grid?~ ** Processing line: ~ # The user is adding a wall from the first grid~ ** Processing line: ~ state.user_input = :dijkstra_add_wall~ ** Processing line: ~ # If the mouse is over the second grid~ ** Processing line: ~ elsif greedy_mouse_over_grid?~ ** Processing line: ~ # The user is adding a wall from the second grid~ ** Processing line: ~ state.user_input = :greedy_add_wall~ ** Processing line: ~ # If the mouse is over the third grid~ ** Processing line: ~ elsif a_star_mouse_over_grid?~ ** Processing line: ~ # The user is adding a wall from the third grid~ ** Processing line: ~ state.user_input = :a_star_add_wall~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Processes click and drag based on what the user is currently dragging~ ** Processing line: ~ def process_input~ ** Processing line: ~ if state.user_input == :dijkstra_star~ ** Processing line: ~ process_input_dijkstra_star~ ** Processing line: ~ elsif state.user_input == :greedy_star~ ** Processing line: ~ process_input_greedy_star~ ** Processing line: ~ elsif state.user_input == :a_star_star~ ** Processing line: ~ process_input_a_star_star~ ** Processing line: ~ elsif state.user_input == :dijkstra_target~ ** Processing line: ~ process_input_dijkstra_target~ ** Processing line: ~ elsif state.user_input == :greedy_target~ ** Processing line: ~ process_input_greedy_target~ ** Processing line: ~ elsif state.user_input == :a_star_target~ ** Processing line: ~ process_input_a_star_target~ ** Processing line: ~ elsif state.user_input == :dijkstra_remove_wall~ ** Processing line: ~ process_input_dijkstra_remove_wall~ ** Processing line: ~ elsif state.user_input == :greedy_remove_wall~ ** Processing line: ~ process_input_greedy_remove_wall~ ** Processing line: ~ elsif state.user_input == :a_star_remove_wall~ ** Processing line: ~ process_input_a_star_remove_wall~ ** Processing line: ~ elsif state.user_input == :dijkstra_add_wall~ ** Processing line: ~ process_input_dijkstra_add_wall~ ** Processing line: ~ elsif state.user_input == :greedy_add_wall~ ** Processing line: ~ process_input_greedy_add_wall~ ** Processing line: ~ elsif state.user_input == :a_star_add_wall~ ** Processing line: ~ process_input_a_star_add_wall~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_dijkstra_grid~ ** Processing line: ~ # A large rect the size of the grid~ ** Processing line: ~ outputs.solids << [dijkstra_scale_up(grid.rect), default_color]~ ** Processing line: ~~ ** Processing line: ~ # The vertical grid lines~ ** Processing line: ~ for x in 0..grid.width~ ** Processing line: ~ outputs.lines << dijkstra_vertical_line(x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The horizontal grid lines~ ** Processing line: ~ for y in 0..grid.height~ ** Processing line: ~ outputs.lines << dijkstra_horizontal_line(y)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_greedy_grid~ ** Processing line: ~ # A large rect the size of the grid~ ** Processing line: ~ outputs.solids << [greedy_scale_up(grid.rect), default_color]~ ** Processing line: ~~ ** Processing line: ~ # The vertical grid lines~ ** Processing line: ~ for x in 0..grid.width~ ** Processing line: ~ outputs.lines << greedy_vertical_line(x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The horizontal grid lines~ ** Processing line: ~ for y in 0..grid.height~ ** Processing line: ~ outputs.lines << greedy_horizontal_line(y)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_a_star_grid~ ** Processing line: ~ # A large rect the size of the grid~ ** Processing line: ~ outputs.solids << [a_star_scale_up(grid.rect), default_color]~ ** Processing line: ~~ ** Processing line: ~ # The vertical grid lines~ ** Processing line: ~ for x in 0..grid.width~ ** Processing line: ~ outputs.lines << a_star_vertical_line(x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The horizontal grid lines~ ** Processing line: ~ for y in 0..grid.height~ ** Processing line: ~ outputs.lines << a_star_horizontal_line(y)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a vertical line for a column of the first grid~ ** Processing line: ~ def dijkstra_vertical_line column~ ** Processing line: ~ dijkstra_scale_up([column, 0, column, grid.height])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a horizontal line for a column of the first grid~ ** Processing line: ~ def dijkstra_horizontal_line row~ ** Processing line: ~ dijkstra_scale_up([0, row, grid.width, row])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a vertical line for a column of the second grid~ ** Processing line: ~ def greedy_vertical_line column~ ** Processing line: ~ dijkstra_scale_up([column + grid.width + 1, 0, column + grid.width + 1, grid.height])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a horizontal line for a column of the second grid~ ** Processing line: ~ def greedy_horizontal_line row~ ** Processing line: ~ dijkstra_scale_up([grid.width + 1, row, grid.width + grid.width + 1, row])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a vertical line for a column of the third grid~ ** Processing line: ~ def a_star_vertical_line column~ ** Processing line: ~ dijkstra_scale_up([column + (grid.width * 2) + 2, 0, column + (grid.width * 2) + 2, grid.height])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a horizontal line for a column of the third grid~ ** Processing line: ~ def a_star_horizontal_line row~ ** Processing line: ~ dijkstra_scale_up([(grid.width * 2) + 2, row, (grid.width * 2) + grid.width + 2, row])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the star on the first grid~ ** Processing line: ~ def render_dijkstra_star~ ** Processing line: ~ outputs.sprites << [dijkstra_scale_up(grid.star), 'star.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the star on the second grid~ ** Processing line: ~ def render_greedy_star~ ** Processing line: ~ outputs.sprites << [greedy_scale_up(grid.star), 'star.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the star on the third grid~ ** Processing line: ~ def render_a_star_star~ ** Processing line: ~ outputs.sprites << [a_star_scale_up(grid.star), 'star.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the target on the first grid~ ** Processing line: ~ def render_dijkstra_target~ ** Processing line: ~ outputs.sprites << [dijkstra_scale_up(grid.target), 'target.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the target on the second grid~ ** Processing line: ~ def render_greedy_target~ ** Processing line: ~ outputs.sprites << [greedy_scale_up(grid.target), 'target.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the target on the third grid~ ** Processing line: ~ def render_a_star_target~ ** Processing line: ~ outputs.sprites << [a_star_scale_up(grid.target), 'target.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the walls on the first grid~ ** Processing line: ~ def render_dijkstra_walls~ ** Processing line: ~ grid.walls.each_key do | wall |~ ** Processing line: ~ outputs.solids << [dijkstra_scale_up(wall), wall_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the walls on the second grid~ ** Processing line: ~ def render_greedy_walls~ ** Processing line: ~ grid.walls.each_key do | wall |~ ** Processing line: ~ outputs.solids << [greedy_scale_up(wall), wall_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the walls on the third grid~ ** Processing line: ~ def render_a_star_walls~ ** Processing line: ~ grid.walls.each_key do | wall |~ ** Processing line: ~ outputs.solids << [a_star_scale_up(wall), wall_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the visited cells on the first grid~ ** Processing line: ~ def render_dijkstra_visited~ ** Processing line: ~ dijkstra.came_from.each_key do | visited_cell |~ ** Processing line: ~ outputs.solids << [dijkstra_scale_up(visited_cell), visited_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the visited cells on the second grid~ ** Processing line: ~ def render_greedy_visited~ ** Processing line: ~ greedy.came_from.each_key do | visited_cell |~ ** Processing line: ~ outputs.solids << [greedy_scale_up(visited_cell), visited_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the visited cells on the third grid~ ** Processing line: ~ def render_a_star_visited~ ** Processing line: ~ a_star.came_from.each_key do | visited_cell |~ ** Processing line: ~ outputs.solids << [a_star_scale_up(visited_cell), visited_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the path found by the breadth first search on the first grid~ ** Processing line: ~ def render_dijkstra_path~ ** Processing line: ~ dijkstra.path.each do | path |~ ** Processing line: ~ outputs.solids << [dijkstra_scale_up(path), path_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the path found by the greedy search on the second grid~ ** Processing line: ~ def render_greedy_path~ ** Processing line: ~ greedy.path.each do | path |~ ** Processing line: ~ outputs.solids << [greedy_scale_up(path), path_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Renders the path found by the a_star search on the third grid~ ** Processing line: ~ def render_a_star_path~ ** Processing line: ~ a_star.path.each do | path |~ ** Processing line: ~ outputs.solids << [a_star_scale_up(path), path_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns the rect for the path between two cells based on their relative positions~ ** Processing line: ~ def get_path_between(cell_one, cell_two)~ ** Processing line: ~ path = []~ ** Processing line: ~~ ** Processing line: ~ # If cell one is above cell two~ ** Processing line: ~ if cell_one.x == cell_two.x and cell_one.y > cell_two.y~ ** Processing line: ~ # Path starts from the center of cell two and moves upward to the center of cell one~ ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 0.4, 1.4]~ ** Processing line: ~ # If cell one is below cell two~ ** Processing line: ~ elsif cell_one.x == cell_two.x and cell_one.y < cell_two.y~ ** Processing line: ~ # Path starts from the center of cell one and moves upward to the center of cell two~ ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 0.4, 1.4]~ ** Processing line: ~ # If cell one is to the left of cell two~ ** Processing line: ~ elsif cell_one.x > cell_two.x and cell_one.y == cell_two.y~ ** Processing line: ~ # Path starts from the center of cell two and moves rightward to the center of cell one~ ** Processing line: ~ path = [cell_two.x + 0.3, cell_two.y + 0.3, 1.4, 0.4]~ ** Processing line: ~ # If cell one is to the right of cell two~ ** Processing line: ~ elsif cell_one.x < cell_two.x and cell_one.y == cell_two.y~ ** Processing line: ~ # Path starts from the center of cell one and moves rightward to the center of cell two~ ** Processing line: ~ path = [cell_one.x + 0.3, cell_one.y + 0.3, 1.4, 0.4]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # In code, the cells are represented as 1x1 rectangles~ ** Processing line: ~ # When drawn, the cells are larger than 1x1 rectangles~ ** Processing line: ~ # This method is used to scale up cells, and lines~ ** Processing line: ~ # Objects are scaled up according to the grid.cell_size variable~ ** Processing line: ~ # This allows for easy customization of the visual scale of the grid~ ** Processing line: ~ # This method scales up cells for the first grid~ ** Processing line: ~ def dijkstra_scale_up(cell)~ ** Processing line: ~ # Prevents the original value of cell from being edited~ ** Processing line: ~ cell = cell.clone~ ** Processing line: ~~ ** Processing line: ~ # If cell is just an x and y coordinate~ ** Processing line: ~ if cell.size == 2~ ** Processing line: ~ # Add a width and height of 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ cell << 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Scale all the values up~ ** Processing line: ~ cell.map! { |value| value * grid.cell_size }~ ** Processing line: ~~ ** Processing line: ~ # Returns the scaled up cell~ ** Processing line: ~ cell~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Translates the given cell grid.width + 1 to the right and then scales up~ ** Processing line: ~ # Used to draw cells for the second grid~ ** Processing line: ~ # This method does not work for lines,~ ** Processing line: ~ # so separate methods exist for the grid lines~ ** Processing line: ~ def greedy_scale_up(cell)~ ** Processing line: ~ # Prevents the original value of cell from being edited~ ** Processing line: ~ cell = cell.clone~ ** Processing line: ~ # Translates the cell to the second grid equivalent~ ** Processing line: ~ cell.x += grid.width + 1~ ** Processing line: ~ # Proceeds as if scaling up for the first grid~ ** Processing line: ~ dijkstra_scale_up(cell)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Translates the given cell (grid.width + 1) * 2 to the right and then scales up~ ** Processing line: ~ # Used to draw cells for the third grid~ ** Processing line: ~ # This method does not work for lines,~ ** Processing line: ~ # so separate methods exist for the grid lines~ ** Processing line: ~ def a_star_scale_up(cell)~ ** Processing line: ~ # Prevents the original value of cell from being edited~ ** Processing line: ~ cell = cell.clone~ ** Processing line: ~ # Translates the cell to the second grid equivalent~ ** Processing line: ~ cell.x += grid.width + 1~ ** Processing line: ~ # Translates the cell to the third grid equivalent~ ** Processing line: ~ cell.x += grid.width + 1~ ** Processing line: ~ # Proceeds as if scaling up for the first grid~ ** Processing line: ~ dijkstra_scale_up(cell)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the star from the first grid~ ** Processing line: ~ def dijkstra_mouse_over_star?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(dijkstra_scale_up(grid.star))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the star from the second grid~ ** Processing line: ~ def greedy_mouse_over_star?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(greedy_scale_up(grid.star))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the star from the third grid~ ** Processing line: ~ def a_star_mouse_over_star?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(a_star_scale_up(grid.star))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the target from the first grid~ ** Processing line: ~ def dijkstra_mouse_over_target?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(dijkstra_scale_up(grid.target))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the target from the second grid~ ** Processing line: ~ def greedy_mouse_over_target?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(greedy_scale_up(grid.target))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be moving the target from the third grid~ ** Processing line: ~ def a_star_mouse_over_target?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(a_star_scale_up(grid.target))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing walls from the first grid~ ** Processing line: ~ def dijkstra_mouse_over_wall?~ ** Processing line: ~ grid.walls.each_key do | wall |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(dijkstra_scale_up(wall))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing walls from the second grid~ ** Processing line: ~ def greedy_mouse_over_wall?~ ** Processing line: ~ grid.walls.each_key do | wall |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(greedy_scale_up(wall))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be removing walls from the third grid~ ** Processing line: ~ def a_star_mouse_over_wall?~ ** Processing line: ~ grid.walls.each_key do | wall |~ ** Processing line: ~ return true if inputs.mouse.point.inside_rect?(a_star_scale_up(wall))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be adding walls from the first grid~ ** Processing line: ~ def dijkstra_mouse_over_grid?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(dijkstra_scale_up(grid.rect))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be adding walls from the second grid~ ** Processing line: ~ def greedy_mouse_over_grid?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(greedy_scale_up(grid.rect))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Signal that the user is going to be adding walls from the third grid~ ** Processing line: ~ def a_star_mouse_over_grid?~ ** Processing line: ~ inputs.mouse.point.inside_rect?(a_star_scale_up(grid.rect))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the star to the cell closest to the mouse in the first grid~ ** Processing line: ~ # Only resets the search if the star changes position~ ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ ** Processing line: ~ def process_input_dijkstra_star~ ** Processing line: ~ old_star = grid.star.clone~ ** Processing line: ~ unless dijkstra_cell_closest_to_mouse == grid.target~ ** Processing line: ~ grid.star = dijkstra_cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_star == grid.star~ ** Processing line: ~ reset_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the star to the cell closest to the mouse in the second grid~ ** Processing line: ~ # Only resets the search if the star changes position~ ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ ** Processing line: ~ def process_input_greedy_star~ ** Processing line: ~ old_star = grid.star.clone~ ** Processing line: ~ unless greedy_cell_closest_to_mouse == grid.target~ ** Processing line: ~ grid.star = greedy_cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_star == grid.star~ ** Processing line: ~ reset_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the star to the cell closest to the mouse in the third grid~ ** Processing line: ~ # Only resets the search if the star changes position~ ** Processing line: ~ # Called whenever the user is editing the star (puts mouse down on star)~ ** Processing line: ~ def process_input_a_star_star~ ** Processing line: ~ old_star = grid.star.clone~ ** Processing line: ~ unless a_star_cell_closest_to_mouse == grid.target~ ** Processing line: ~ grid.star = a_star_cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_star == grid.star~ ** Processing line: ~ reset_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the target to the grid closest to the mouse in the first grid~ ** Processing line: ~ # Only reset_searchess the search if the target changes position~ ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ ** Processing line: ~ def process_input_dijkstra_target~ ** Processing line: ~ old_target = grid.target.clone~ ** Processing line: ~ unless dijkstra_cell_closest_to_mouse == grid.star~ ** Processing line: ~ grid.target = dijkstra_cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_target == grid.target~ ** Processing line: ~ reset_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the target to the cell closest to the mouse in the second grid~ ** Processing line: ~ # Only reset_searchess the search if the target changes position~ ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ ** Processing line: ~ def process_input_greedy_target~ ** Processing line: ~ old_target = grid.target.clone~ ** Processing line: ~ unless greedy_cell_closest_to_mouse == grid.star~ ** Processing line: ~ grid.target = greedy_cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_target == grid.target~ ** Processing line: ~ reset_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves the target to the cell closest to the mouse in the third grid~ ** Processing line: ~ # Only reset_searchess the search if the target changes position~ ** Processing line: ~ # Called whenever the user is editing the target (puts mouse down on target)~ ** Processing line: ~ def process_input_a_star_target~ ** Processing line: ~ old_target = grid.target.clone~ ** Processing line: ~ unless a_star_cell_closest_to_mouse == grid.star~ ** Processing line: ~ grid.target = a_star_cell_closest_to_mouse~ ** Processing line: ~ end~ ** Processing line: ~ unless old_target == grid.target~ ** Processing line: ~ reset_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Removes walls in the first grid that are under the cursor~ ** Processing line: ~ def process_input_dijkstra_remove_wall~ ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ ** Processing line: ~ # the cursor is directly over~ ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ ** Processing line: ~ if dijkstra_mouse_over_grid?~ ** Processing line: ~ if grid.walls.has_key?(dijkstra_cell_closest_to_mouse)~ ** Processing line: ~ grid.walls.delete(dijkstra_cell_closest_to_mouse)~ ** Processing line: ~ reset_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Removes walls in the second grid that are under the cursor~ ** Processing line: ~ def process_input_greedy_remove_wall~ ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ ** Processing line: ~ # the cursor is directly over~ ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ ** Processing line: ~ if greedy_mouse_over_grid?~ ** Processing line: ~ if grid.walls.has_key?(greedy_cell_closest_to_mouse)~ ** Processing line: ~ grid.walls.delete(greedy_cell_closest_to_mouse)~ ** Processing line: ~ reset_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Removes walls in the third grid that are under the cursor~ ** Processing line: ~ def process_input_a_star_remove_wall~ ** Processing line: ~ # The mouse needs to be inside the grid, because we only want to remove walls~ ** Processing line: ~ # the cursor is directly over~ ** Processing line: ~ # Recalculations should only occur when a wall is actually deleted~ ** Processing line: ~ if a_star_mouse_over_grid?~ ** Processing line: ~ if grid.walls.has_key?(a_star_cell_closest_to_mouse)~ ** Processing line: ~ grid.walls.delete(a_star_cell_closest_to_mouse)~ ** Processing line: ~ reset_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds a wall in the first grid in the cell the mouse is over~ ** Processing line: ~ def process_input_dijkstra_add_wall~ ** Processing line: ~ if dijkstra_mouse_over_grid?~ ** Processing line: ~ unless grid.walls.has_key?(dijkstra_cell_closest_to_mouse)~ ** Processing line: ~ grid.walls[dijkstra_cell_closest_to_mouse] = true~ ** Processing line: ~ reset_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds a wall in the second grid in the cell the mouse is over~ ** Processing line: ~ def process_input_greedy_add_wall~ ** Processing line: ~ if greedy_mouse_over_grid?~ ** Processing line: ~ unless grid.walls.has_key?(greedy_cell_closest_to_mouse)~ ** Processing line: ~ grid.walls[greedy_cell_closest_to_mouse] = true~ ** Processing line: ~ reset_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds a wall in the third grid in the cell the mouse is over~ ** Processing line: ~ def process_input_a_star_add_wall~ ** Processing line: ~ if a_star_mouse_over_grid?~ ** Processing line: ~ unless grid.walls.has_key?(a_star_cell_closest_to_mouse)~ ** Processing line: ~ grid.walls[a_star_cell_closest_to_mouse] = true~ ** Processing line: ~ reset_searches~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ ** Processing line: ~ # Finding the cell closest to the mouse helps with this~ ** Processing line: ~ def dijkstra_cell_closest_to_mouse~ ** Processing line: ~ # Closest cell to the mouse in the first grid~ ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ ** Processing line: ~ # Bound x and y to the grid~ ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ ** Processing line: ~ # Return closest cell~ ** Processing line: ~ [x, y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ ** Processing line: ~ # Finding the cell closest to the mouse in the second grid helps with this~ ** Processing line: ~ def greedy_cell_closest_to_mouse~ ** Processing line: ~ # Closest cell grid to the mouse in the second~ ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ ** Processing line: ~ # Translate the cell to the first grid~ ** Processing line: ~ x -= grid.width + 1~ ** Processing line: ~ # Bound x and y to the first grid~ ** Processing line: ~ x = 0 if x < 0~ ** Processing line: ~ y = 0 if y < 0~ ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ ** Processing line: ~ # Return closest cell~ ** Processing line: ~ [x, y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # When the user grabs the star and puts their cursor to the far right~ ** Processing line: ~ # and moves up and down, the star is supposed to move along the grid as well~ ** Processing line: ~ # Finding the cell closest to the mouse in the third grid helps with this~ ** Processing line: ~ def a_star_cell_closest_to_mouse~ ** Processing line: ~ # Closest cell grid to the mouse in the second~ ** Processing line: ~ x = (inputs.mouse.point.x / grid.cell_size).to_i~ ** Processing line: ~ y = (inputs.mouse.point.y / grid.cell_size).to_i~ ** Processing line: ~ # Translate the cell to the first grid~ ** Processing line: ~ x -= (grid.width + 1) * 2~ ** Processing line: ~ # Bound x and y to the first grid~ ** Processing line: ~ x = 0 if x < 0~ ** Processing line: ~ y = 0 if y < 0~ ** Processing line: ~ x = grid.width - 1 if x > grid.width - 1~ ** Processing line: ~ y = grid.height - 1 if y > grid.height - 1~ ** Processing line: ~ # Return closest cell~ ** Processing line: ~ [x, y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reset_searches~ ** Processing line: ~ # Reset the searches~ ** Processing line: ~ dijkstra.came_from = {}~ ** Processing line: ~ dijkstra.cost_so_far = {}~ ** Processing line: ~ dijkstra.frontier = []~ ** Processing line: ~ dijkstra.path = []~ ** Processing line: ~~ ** Processing line: ~ greedy.came_from = {}~ ** Processing line: ~ greedy.frontier = []~ ** Processing line: ~ greedy.path = []~ ** Processing line: ~ a_star.came_from = {}~ ** Processing line: ~ a_star.frontier = []~ ** Processing line: ~ a_star.path = []~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_searches~ ** Processing line: ~ calc_dijkstra~ ** Processing line: ~ calc_greedy~ ** Processing line: ~ calc_a_star~ ** Processing line: ~ # Move the searches forward to the current step~ ** Processing line: ~ # state.current_step.times { move_searches_one_step_forward }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_dijkstra~ ** Processing line: ~ # Sets up the search to begin from the star~ ** Processing line: ~ dijkstra.frontier << grid.star~ ** Processing line: ~ dijkstra.came_from[grid.star] = nil~ ** Processing line: ~ dijkstra.cost_so_far[grid.star] = 0~ ** Processing line: ~~ ** Processing line: ~ # Until the target is found or there are no more cells to explore from~ ** Processing line: ~ until dijkstra.came_from.has_key?(grid.target) or dijkstra.frontier.empty?~ ** Processing line: ~ # Take the next frontier cell. The first element is the cell, the second is the priority.~ ** Processing line: ~ new_frontier = dijkstra.frontier.shift#[0]~ ** Processing line: ~ # For each of its neighbors~ ** Processing line: ~ adjacent_neighbors(new_frontier).each do | neighbor |~ ** Processing line: ~ # That have not been visited and are not walls~ ** Processing line: ~ unless dijkstra.came_from.has_key?(neighbor) or grid.walls.has_key?(neighbor)~ ** Processing line: ~ # Add them to the frontier and mark them as visited~ ** Processing line: ~ dijkstra.frontier << neighbor~ ** Processing line: ~ dijkstra.came_from[neighbor] = new_frontier~ ** Processing line: ~ dijkstra.cost_so_far[neighbor] = dijkstra.cost_so_far[new_frontier] + 1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line~ ** Processing line: ~ # Comment this line and let a path generate to see the difference~ ** Processing line: ~ dijkstra.frontier = dijkstra.frontier.sort_by {| cell | proximity_to_star(cell) }~ ** Processing line: ~ dijkstra.frontier = dijkstra.frontier.sort_by {| cell | dijkstra.cost_so_far[cell] }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # If the search found the target~ ** Processing line: ~ if dijkstra.came_from.has_key?(grid.target)~ ** Processing line: ~ # Calculate the path between the target and star~ ** Processing line: ~ dijkstra_calc_path~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_greedy~ ** Processing line: ~ # Sets up the search to begin from the star~ ** Processing line: ~ greedy.frontier << grid.star~ ** Processing line: ~ greedy.came_from[grid.star] = nil~ ** Processing line: ~~ ** Processing line: ~ # Until the target is found or there are no more cells to explore from~ ** Processing line: ~ until greedy.came_from.has_key?(grid.target) or greedy.frontier.empty?~ ** Processing line: ~ # Take the next frontier cell~ ** Processing line: ~ new_frontier = greedy.frontier.shift~ ** Processing line: ~ # For each of its neighbors~ ** Processing line: ~ adjacent_neighbors(new_frontier).each do | neighbor |~ ** Processing line: ~ # That have not been visited and are not walls~ ** Processing line: ~ unless greedy.came_from.has_key?(neighbor) or grid.walls.has_key?(neighbor)~ ** Processing line: ~ # Add them to the frontier and mark them as visited~ ** Processing line: ~ greedy.frontier << neighbor~ ** Processing line: ~ greedy.came_from[neighbor] = new_frontier~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line~ ** Processing line: ~ # Comment this line and let a path generate to see the difference~ ** Processing line: ~ greedy.frontier = greedy.frontier.sort_by {| cell | proximity_to_star(cell) }~ ** Processing line: ~ # Sort the frontier so cells that are close to the target are then prioritized~ ** Processing line: ~ greedy.frontier = greedy.frontier.sort_by {| cell | greedy_heuristic(cell) }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # If the search found the target~ ** Processing line: ~ if greedy.came_from.has_key?(grid.target)~ ** Processing line: ~ # Calculate the path between the target and star~ ** Processing line: ~ greedy_calc_path~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_a_star~ ** Processing line: ~ # Setup the search to start from the star~ ** Processing line: ~ a_star.came_from[grid.star] = nil~ ** Processing line: ~ a_star.cost_so_far[grid.star] = 0~ ** Processing line: ~ a_star.frontier << grid.star~ ** Processing line: ~~ ** Processing line: ~ # Until there are no more cells to explore from or the search has found the target~ ** Processing line: ~ until a_star.frontier.empty? or a_star.came_from.has_key?(grid.target)~ ** Processing line: ~ # Get the next cell to expand from~ ** Processing line: ~ current_frontier = a_star.frontier.shift~ ** Processing line: ~~ ** Processing line: ~ # For each of that cells neighbors~ ** Processing line: ~ adjacent_neighbors(current_frontier).each do | neighbor |~ ** Processing line: ~ # That have not been visited and are not walls~ ** Processing line: ~ unless a_star.came_from.has_key?(neighbor) or grid.walls.has_key?(neighbor)~ ** Processing line: ~ # Add them to the frontier and mark them as visited~ ** Processing line: ~ a_star.frontier << neighbor~ ** Processing line: ~ a_star.came_from[neighbor] = current_frontier~ ** Processing line: ~ a_star.cost_so_far[neighbor] = a_star.cost_so_far[current_frontier] + 1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sort the frontier so that cells that are in a zigzag pattern are prioritized over those in an line~ ** Processing line: ~ # Comment this line and let a path generate to see the difference~ ** Processing line: ~ a_star.frontier = a_star.frontier.sort_by {| cell | proximity_to_star(cell) }~ ** Processing line: ~ a_star.frontier = a_star.frontier.sort_by {| cell | a_star.cost_so_far[cell] + greedy_heuristic(cell) }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # If the search found the target~ ** Processing line: ~ if a_star.came_from.has_key?(grid.target)~ ** Processing line: ~ # Calculate the path between the target and star~ ** Processing line: ~ a_star_calc_path~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates the path between the target and star for the breadth first search~ ** Processing line: ~ # Only called when the breadth first search finds the target~ ** Processing line: ~ def dijkstra_calc_path~ ** Processing line: ~ # Start from the target~ ** Processing line: ~ endpoint = grid.target~ ** Processing line: ~ # And the cell it came from~ ** Processing line: ~ next_endpoint = dijkstra.came_from[endpoint]~ ** Processing line: ~ while endpoint and next_endpoint~ ** Processing line: ~ # Draw a path between these two cells and store it~ ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ ** Processing line: ~ dijkstra.path << path~ ** Processing line: ~ # And get the next pair of cells~ ** Processing line: ~ endpoint = next_endpoint~ ** Processing line: ~ next_endpoint = dijkstra.came_from[endpoint]~ ** Processing line: ~ # Continue till there are no more cells~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns one-dimensional absolute distance between cell and target~ ** Processing line: ~ # Returns a number to compare distances between cells and the target~ ** Processing line: ~ def greedy_heuristic(cell)~ ** Processing line: ~ (grid.target.x - cell.x).abs + (grid.target.y - cell.y).abs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates the path between the target and star for the greedy search~ ** Processing line: ~ # Only called when the greedy search finds the target~ ** Processing line: ~ def greedy_calc_path~ ** Processing line: ~ # Start from the target~ ** Processing line: ~ endpoint = grid.target~ ** Processing line: ~ # And the cell it came from~ ** Processing line: ~ next_endpoint = greedy.came_from[endpoint]~ ** Processing line: ~ while endpoint and next_endpoint~ ** Processing line: ~ # Draw a path between these two cells and store it~ ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ ** Processing line: ~ greedy.path << path~ ** Processing line: ~ # And get the next pair of cells~ ** Processing line: ~ endpoint = next_endpoint~ ** Processing line: ~ next_endpoint = greedy.came_from[endpoint]~ ** Processing line: ~ # Continue till there are no more cells~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates the path between the target and star for the a_star search~ ** Processing line: ~ # Only called when the a_star search finds the target~ ** Processing line: ~ def a_star_calc_path~ ** Processing line: ~ # Start from the target~ ** Processing line: ~ endpoint = grid.target~ ** Processing line: ~ # And the cell it came from~ ** Processing line: ~ next_endpoint = a_star.came_from[endpoint]~ ** Processing line: ~~ ** Processing line: ~ while endpoint and next_endpoint~ ** Processing line: ~ # Draw a path between these two cells and store it~ ** Processing line: ~ path = get_path_between(endpoint, next_endpoint)~ ** Processing line: ~ a_star.path << path~ ** Processing line: ~ # And get the next pair of cells~ ** Processing line: ~ endpoint = next_endpoint~ ** Processing line: ~ next_endpoint = a_star.came_from[endpoint]~ ** Processing line: ~ # Continue till there are no more cells~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a list of adjacent cells~ ** Processing line: ~ # Used to determine what the next cells to be added to the frontier are~ ** Processing line: ~ def adjacent_neighbors(cell)~ ** Processing line: ~ neighbors = []~ ** Processing line: ~~ ** Processing line: ~ # Gets all the valid neighbors into the array~ ** Processing line: ~ # From southern neighbor, clockwise~ ** Processing line: ~ neighbors << [cell.x , cell.y - 1] unless cell.y == 0~ ** Processing line: ~ neighbors << [cell.x - 1, cell.y ] unless cell.x == 0~ ** Processing line: ~ neighbors << [cell.x , cell.y + 1] unless cell.y == grid.height - 1~ ** Processing line: ~ neighbors << [cell.x + 1, cell.y ] unless cell.x == grid.width - 1~ ** Processing line: ~~ ** Processing line: ~ neighbors~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds the vertical and horizontal distance of a cell from the star~ ** Processing line: ~ # and returns the larger value~ ** Processing line: ~ # This method is used to have a zigzag pattern in the rendered path~ ** Processing line: ~ # A cell that is [5, 5] from the star,~ ** Processing line: ~ # is explored before over a cell that is [0, 7] away.~ ** Processing line: ~ # So, if possible, the search tries to go diagonal (zigzag) first~ ** Processing line: ~ def proximity_to_star(cell)~ ** Processing line: ~ distance_x = (grid.star.x - cell.x).abs~ ** Processing line: ~ distance_y = (grid.star.y - cell.y).abs~ ** Processing line: ~~ ** Processing line: ~ if distance_x > distance_y~ ** Processing line: ~ return distance_x~ ** Processing line: ~ else~ ** Processing line: ~ return distance_y~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Methods that allow code to be more concise. Subdivides args.state, which is where all variables are stored.~ ** Processing line: ~ def grid~ ** Processing line: ~ state.grid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def dijkstra~ ** Processing line: ~ state.dijkstra~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def greedy~ ** Processing line: ~ state.greedy~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def a_star~ ** Processing line: ~ state.a_star~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Descriptive aliases for colors~ ** Processing line: ~ def default_color~ ** Processing line: ~ [221, 212, 213] # Light Brown~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def wall_color~ ** Processing line: ~ [134, 134, 120] # Camo Green~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def visited_color~ ** Processing line: ~ [204, 191, 179] # Dark Brown~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def path_color~ ** Processing line: ~ [231, 230, 228] # Pastel White~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def button_color~ ** Processing line: ~ [190, 190, 190] # Gray~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Method that is called by DragonRuby periodically~ ** Processing line: ~ # Used for updating animations and calculations~ ** Processing line: ~ def tick args~ ** Processing line: ~~ ** Processing line: ~ # Pressing r will reset the application~ ** Processing line: ~ if args.inputs.keyboard.key_down.r~ ** Processing line: ~ args.gtk.reset~ ** Processing line: ~ reset~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Every tick, new args are passed, and the Breadth First Search tick is called~ ** Processing line: ~ $a_star_algorithm ||= A_Star_Algorithm.new~ ** Processing line: ~ $a_star_algorithm.args = args~ ** Processing line: ~ $a_star_algorithm.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def reset~ ** Processing line: ~ $a_star_algorithm = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Path Finding Algorithms - Tower Defense - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Tower Defense - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Path Finding Algorithms - Tower Defense - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/13_path_finding_algorithms/09_tower_defense/app/main.rb~ ** Processing line: ~ # An example of some major components in a tower defence game~ ** Processing line: ~ # The pathing of the tanks is determined by A* algorithm -- try editing the walls~ ** Processing line: ~~ ** Processing line: ~ # The turrets shoot bullets at the closest tank. The bullets are heat-seeking~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $gtk.reset if args.inputs.keyboard.key_down.r~ ** Processing line: ~ defaults args~ ** Processing line: ~ render args~ ** Processing line: ~ calc args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults args~ ** Processing line: ~ args.outputs.background_color = wall_color~ ** Processing line: ~ args.state.grid_size = 5~ ** Processing line: ~ args.state.tile_size = 50~ ** Processing line: ~ args.state.grid_start ||= [0, 0]~ ** Processing line: ~ args.state.grid_goal ||= [4, 4]~ ** Processing line: ~~ ** Processing line: ~ # Try editing these walls to see the path change!~ ** Processing line: ~ args.state.walls ||= {~ ** Processing line: ~ [0, 4] => true,~ ** Processing line: ~ [1, 3] => true,~ ** Processing line: ~ [3, 1] => true,~ ** Processing line: ~ # [4, 0] => true,~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ args.state.a_star.frontier ||= []~ ** Processing line: ~ args.state.a_star.came_from ||= {}~ ** Processing line: ~ args.state.a_star.path ||= []~ ** Processing line: ~~ ** Processing line: ~ args.state.tanks ||= []~ ** Processing line: ~ args.state.tank_spawn_period ||= 60~ ** Processing line: ~ args.state.tank_sprite_path ||= 'sprites/circle/white.png'~ ** Processing line: ~ args.state.tank_speed ||= 1~ ** Processing line: ~~ ** Processing line: ~ args.state.turret_shoot_period = 10~ ** Processing line: ~ # Turrets can be entered as [x, y] but are immediately mapped to hashes~ ** Processing line: ~ # Walls are also added where the turrets are to prevent tanks from pathing over them~ ** Processing line: ~ args.state.turrets ||= [~ ** Processing line: ~ [2, 2]~ ** Processing line: ~ ].each { |turret| args.state.walls[turret] = true}.map do |x, y|~ ** Processing line: ~ {~ ** Processing line: ~ x: x * args.state.tile_size,~ ** Processing line: ~ y: y * args.state.tile_size,~ ** Processing line: ~ w: args.state.tile_size,~ ** Processing line: ~ h: args.state.tile_size,~ ** Processing line: ~ path: 'sprites/circle/gray.png',~ ** Processing line: ~ range: 100~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.bullet_size ||= 25~ ** Processing line: ~ args.state.bullets ||= []~ ** Processing line: ~ args.state.bullet_path ||= 'sprites/circle/orange.png'~ ** Processing line: ~ #~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render args~ ** Processing line: ~ render_grid args~ ** Processing line: ~ render_a_star args~ ** Processing line: ~ args.outputs.sprites << args.state.tanks~ ** Processing line: ~ args.outputs.sprites << args.state.turrets~ ** Processing line: ~ args.outputs.sprites << args.state.bullets~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_grid args~ ** Processing line: ~ # Draw a square the size and color of the grid~ ** Processing line: ~ args.outputs.solids << [~ ** Processing line: ~ 0,~ ** Processing line: ~ 0,~ ** Processing line: ~ args.state.grid_size * args.state.tile_size,~ ** Processing line: ~ args.state.grid_size * args.state.tile_size,~ ** Processing line: ~ grid_color~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ # Draw lines across the grid to show tiles~ ** Processing line: ~ (args.state.grid_size + 1).times do | value |~ ** Processing line: ~ render_horizontal_line(args, value)~ ** Processing line: ~ render_vertical_line(args, value)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Render special tiles~ ** Processing line: ~ render_tile(args, args.state.grid_start, start_color)~ ** Processing line: ~ render_tile(args, args.state.grid_goal, goal_color)~ ** Processing line: ~ args.state.walls.keys.each { |wall| render_tile(args, wall, wall_color) }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_vertical_line args, x~ ** Processing line: ~ args.outputs.lines << [~ ** Processing line: ~ x * args.state.tile_size,~ ** Processing line: ~ 0,~ ** Processing line: ~ x * args.state.tile_size,~ ** Processing line: ~ args.state.tile_size * args.state.grid_size,~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_horizontal_line args, y~ ** Processing line: ~ args.outputs.lines << [~ ** Processing line: ~ 0,~ ** Processing line: ~ y * args.state.tile_size,~ ** Processing line: ~ args.state.tile_size * args.state.grid_size,~ ** Processing line: ~ y * args.state.tile_size,~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_tile args, tile, color~ ** Processing line: ~ args.outputs.solids << [~ ** Processing line: ~ tile.x * args.state.tile_size,~ ** Processing line: ~ tile.y * args.state.tile_size,~ ** Processing line: ~ args.state.tile_size,~ ** Processing line: ~ args.state.tile_size,~ ** Processing line: ~ color~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc args~ ** Processing line: ~ calc_a_star args~ ** Processing line: ~ calc_tanks args~ ** Processing line: ~ calc_turrets args~ ** Processing line: ~ calc_bullets args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_a_star args~ ** Processing line: ~ # Only does this one time~ ** Processing line: ~ return unless args.state.a_star.path.empty?~ ** Processing line: ~~ ** Processing line: ~ # Start the search from the grid start~ ** Processing line: ~ args.state.a_star.frontier << args.state.grid_start~ ** Processing line: ~ args.state.a_star.came_from[args.state.grid_start] = nil~ ** Processing line: ~~ ** Processing line: ~ # Until a path to the goal has been found or there are no more tiles to explore~ ** Processing line: ~ until (args.state.a_star.came_from.has_key?(args.state.grid_goal)|| args.state.a_star.frontier.empty?)~ ** Processing line: ~ # For the first tile in the frontier~ ** Processing line: ~ tile_to_expand_from = args.state.a_star.frontier.shift~ ** Processing line: ~ # Add each of its neighbors to the frontier~ ** Processing line: ~ neighbors(args, tile_to_expand_from).each do | tile |~ ** Processing line: ~ args.state.a_star.frontier << tile~ ** Processing line: ~ args.state.a_star.came_from[tile] = tile_to_expand_from~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Stop calculating a path if the goal was never reached~ ** Processing line: ~ return unless args.state.a_star.came_from.has_key? args.state.grid_goal~ ** Processing line: ~~ ** Processing line: ~ # Fill path by tracing back from the goal~ ** Processing line: ~ current_cell = args.state.grid_goal~ ** Processing line: ~ while current_cell~ ** Processing line: ~ args.state.a_star.path.unshift current_cell~ ** Processing line: ~ current_cell = args.state.a_star.came_from[current_cell]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ puts "The path has been calculated"~ ** Processing line: ~ puts args.state.a_star.path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_tanks args~ ** Processing line: ~ spawn_tank args~ ** Processing line: ~ move_tanks args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_tanks args~ ** Processing line: ~ # Remove tanks that have reached the end of their path~ ** Processing line: ~ args.state.tanks.reject! { |tank| tank[:a_star].empty? }~ ** Processing line: ~~ ** Processing line: ~ # Tanks have an array that has each tile it has to go to in order from a* path~ ** Processing line: ~ args.state.tanks.each do | tank |~ ** Processing line: ~ destination = tank[:a_star][0]~ ** Processing line: ~ # Move the tank towards the destination~ ** Processing line: ~ tank[:x] += copy_sign(args.state.tank_speed, ((destination.x * args.state.tile_size) - tank[:x]))~ ** Processing line: ~ tank[:y] += copy_sign(args.state.tank_speed, ((destination.y * args.state.tile_size) - tank[:y]))~ ** Processing line: ~ # If the tank has reached its destination~ ** Processing line: ~ if (destination.x * args.state.tile_size) == tank[:x] and~ ** Processing line: ~ (destination.y * args.state.tile_size) == tank[:y]~ ** Processing line: ~ # Set the destination to the next point in the path~ ** Processing line: ~ tank[:a_star].shift~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_turrets args~ ** Processing line: ~ return unless args.state.tick_count.mod_zero? args.state.turret_shoot_period~ ** Processing line: ~ args.state.turrets.each do | turret |~ ** Processing line: ~ # Finds the closest tank~ ** Processing line: ~ target = nil~ ** Processing line: ~ shortest_distance = turret[:range] + 1~ ** Processing line: ~ args.state.tanks.each do | tank |~ ** Processing line: ~ distance = distance_between(turret[:x], turret[:y], tank[:x], tank[:y])~ ** Processing line: ~ if distance < shortest_distance~ ** Processing line: ~ target = tank~ ** Processing line: ~ shortest_distance = distance~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ # If there is a tank in range, fires a bullet~ ** Processing line: ~ if target~ ** Processing line: ~ args.state.bullets << {~ ** Processing line: ~ x: turret[:x],~ ** Processing line: ~ y: turret[:y],~ ** Processing line: ~ w: args.state.bullet_size,~ ** Processing line: ~ h: args.state.bullet_size,~ ** Processing line: ~ path: args.state.bullet_path,~ ** Processing line: ~ # Note that this makes it heat-seeking, because target is passed by reference~ ** Processing line: ~ # Could do target.clone to make the bullet go to where the tank initially was~ ** Processing line: ~ target: target~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_bullets args~ ** Processing line: ~ # Bullets aim for the center of their targets~ ** Processing line: ~ args.state.bullets.each { |bullet| move bullet, center_of(bullet[:target])}~ ** Processing line: ~ args.state.bullets.reject! { |b| b.intersect_rect? b[:target] }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def center_of object~ ** Processing line: ~ object = object.clone~ ** Processing line: ~ object[:x] += 0.5~ ** Processing line: ~ object[:y] += 0.5~ ** Processing line: ~ object~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_a_star args~ ** Processing line: ~ args.state.a_star.path.map do |tile|~ ** Processing line: ~ # Map each x, y coordinate to the center of the tile and scale up~ ** Processing line: ~ [(tile.x + 0.5) * args.state.tile_size, (tile.y + 0.5) * args.state.tile_size]~ ** Processing line: ~ end.inject do | point_a, point_b |~ ** Processing line: ~ # Render the line between each point~ ** Processing line: ~ args.outputs.lines << [point_a.x, point_a.y, point_b.x, point_b.y, a_star_color]~ ** Processing line: ~ point_b~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Moves object to target at speed~ ** Processing line: ~ def move object, target, speed = 1~ ** Processing line: ~ if target.is_a? Hash~ ** Processing line: ~ object[:x] += copy_sign(speed, target[:x] - object[:x])~ ** Processing line: ~ object[:y] += copy_sign(speed, target[:y] - object[:y])~ ** Processing line: ~ else~ ** Processing line: ~ object[:x] += copy_sign(speed, target.x - object[:x])~ ** Processing line: ~ object[:y] += copy_sign(speed, target.y - object[:y])~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ #~ ** Processing line: ~ #~ ** Processing line: ~ def distance_between a_x, a_y, b_x, b_y~ ** Processing line: ~ (((b_x - a_x) ** 2) + ((b_y - a_y) ** 2)) ** 0.5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def copy_sign value, sign~ ** Processing line: ~ return 0 if sign == 0~ ** Processing line: ~ return value if sign > 0~ ** Processing line: ~ -value~ ** Processing line: ~ end~ ** Processing line: ~ #~ ** Processing line: ~ def spawn_tank args~ ** Processing line: ~ return unless args.state.tick_count.mod_zero? args.state.tank_spawn_period~ ** Processing line: ~ args.state.tanks << {~ ** Processing line: ~ x: args.state.grid_start.x,~ ** Processing line: ~ y: args.state.grid_start.y,~ ** Processing line: ~ w: args.state.tile_size,~ ** Processing line: ~ h: args.state.tile_size,~ ** Processing line: ~ path: args.state.tank_sprite_path,~ ** Processing line: ~ a_star: args.state.a_star.path.clone~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def neighbors args, tile~ ** Processing line: ~ [[tile.x, tile.y - 1],~ ** Processing line: ~ [tile.x, tile.y + 1],~ ** Processing line: ~ [tile.x + 1, tile.y],~ ** Processing line: ~ [tile.x - 1, tile.y]].reject do | neighbor |~ ** Processing line: ~ args.state.a_star.came_from.has_key?(neighbor) or~ ** Processing line: ~ tile_out_of_bounds?(args, neighbor) or~ ** Processing line: ~ args.state.walls.has_key? neighbor~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tile_out_of_bounds? args, tile~ ** Processing line: ~ tile.x < 0 or tile.y < 0 or tile.x >= args.state.grid_size or tile.y >= args.state.grid_size~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def grid_color~ ** Processing line: ~ [133, 226, 144]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def start_color~ ** Processing line: ~ [226, 144, 133]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def goal_color~ ** Processing line: ~ [226, 133, 144]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def wall_color~ ** Processing line: ~ [133, 144, 226]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def a_star_color~ ** Processing line: ~ [0, 0, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** 3d - 3d Cube - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~3d - 3d Cube - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~3d - 3d Cube - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_3d/01_3d_cube/app/main.rb~ ** Processing line: ~ STARTX = 0.0~ ** Processing line: ~ STARTY = 0.0~ ** Processing line: ~ ENDY = 20.0~ ** Processing line: ~ ENDX = 20.0~ ** Processing line: ~ SPINPOINT = 10~ ** Processing line: ~ SPINDURATION = 400~ ** Processing line: ~ POINTSIZE = 8~ ** Processing line: ~ BOXDEPTH = 40~ ** Processing line: ~ YAW = 1~ ** Processing line: ~ DISTANCE = 10~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ a = Math.sin(args.state.tick_count / SPINDURATION) * Math.tan(args.state.tick_count / SPINDURATION)~ ** Processing line: ~ s = Math.sin(a)~ ** Processing line: ~ c = Math.cos(a)~ ** Processing line: ~ x = STARTX~ ** Processing line: ~ y = STARTY~ ** Processing line: ~ offset_x = (1280 - (ENDX - STARTX)) / 2~ ** Processing line: ~ offset_y = (360 - (ENDY - STARTY)) / 2~ ** Processing line: ~~ ** Processing line: ~ srand(1)~ ** Processing line: ~ while y < ENDY do~ ** Processing line: ~ while x < ENDX do~ ** Processing line: ~ if (y == STARTY ||~ ** Processing line: ~ y == (ENDY / 0.5) * 2 ||~ ** Processing line: ~ y == (ENDY / 0.5) * 2 + 0.5 ||~ ** Processing line: ~ y == ENDY - 0.5 ||~ ** Processing line: ~ x == STARTX ||~ ** Processing line: ~ x == ENDX - 0.5)~ ** Processing line: ~ z = rand(BOXDEPTH)~ ** Processing line: ~ z *= Math.sin(a / 2)~ ** Processing line: ~ x -= SPINPOINT~ ** Processing line: ~ u = (x * c) - (z * s)~ ** Processing line: ~ v = (x * s) + (z * c)~ ** Processing line: ~ k = DISTANCE.fdiv(100) + (v / 500 * YAW)~ ** Processing line: ~ u = u / k~ ** Processing line: ~ v = y / k~ ** Processing line: ~ w = POINTSIZE / 10 / k~ ** Processing line: ~ args.outputs.sprites << { x: offset_x + u - w, y: offset_y + v - w, w: w, h: w, path: 'sprites/square-blue.png'}~ ** Processing line: ~ x += SPINPOINT~ ** Processing line: ~ end~ ** Processing line: ~ x += 0.5~ ** Processing line: ~ end~ ** Processing line: ~ y += 0.5~ ** Processing line: ~ x = STARTX~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** 3d - Wireframe - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~3d - Wireframe - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~3d - Wireframe - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_3d/02_wireframe/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.model ||= Object3D.new('data/shuttle.off')~ ** Processing line: ~ args.state.mtx ||= rotate3D(0, 0, 0)~ ** Processing line: ~ args.state.inv_mtx ||= rotate3D(0, 0, 0)~ ** Processing line: ~ delta_mtx = rotate3D(args.inputs.up_down * 0.01, input_roll(args) * 0.01, args.inputs.left_right * 0.01)~ ** Processing line: ~ args.outputs.lines << args.state.model.edges~ ** Processing line: ~ args.state.model.fast_3x3_transform! args.state.inv_mtx~ ** Processing line: ~ args.state.inv_mtx = mtx_mul(delta_mtx.transpose, args.state.inv_mtx)~ ** Processing line: ~ args.state.mtx = mtx_mul(args.state.mtx, delta_mtx)~ ** Processing line: ~ args.state.model.fast_3x3_transform! args.state.mtx~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ args.outputs.debug << args.gtk.framerate_diagnostics_primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_roll args~ ** Processing line: ~ roll = 0~ ** Processing line: ~ roll += 1 if args.inputs.keyboard.e~ ** Processing line: ~ roll -= 1 if args.inputs.keyboard.q~ ** Processing line: ~ roll~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rotate3D(theta_x = 0.1, theta_y = 0.1, theta_z = 0.1)~ ** Processing line: ~ c_x, s_x = Math.cos(theta_x), Math.sin(theta_x)~ ** Processing line: ~ c_y, s_y = Math.cos(theta_y), Math.sin(theta_y)~ ** Processing line: ~ c_z, s_z = Math.cos(theta_z), Math.sin(theta_z)~ ** Processing line: ~ rot_x = [[1, 0, 0], [0, c_x, -s_x], [0, s_x, c_x]]~ ** Processing line: ~ rot_y = [[c_y, 0, s_y], [0, 1, 0], [-s_y, 0, c_y]]~ ** Processing line: ~ rot_z = [[c_z, -s_z, 0], [s_z, c_z, 0], [0, 0, 1]]~ ** Processing line: ~ mtx_mul(mtx_mul(rot_x, rot_y), rot_z)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mtx_mul(a, b)~ ** Processing line: ~ is = (0...a.length)~ ** Processing line: ~ js = (0...b[0].length)~ ** Processing line: ~ ks = (0...b.length)~ ** Processing line: ~ is.map do |i|~ ** Processing line: ~ js.map do |j|~ ** Processing line: ~ ks.map do |k|~ ** Processing line: ~ a[i][k] * b[k][j]~ ** Processing line: ~ end.reduce(&:plus)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class Object3D~ ** Processing line: ~ attr_reader :vert_count, :face_count, :edge_count, :verts, :faces, :edges~ ** Processing line: ~~ ** Processing line: ~ def initialize(path)~ ** Processing line: ~ @vert_count = 0~ ** Processing line: ~ @face_count = 0~ ** Processing line: ~ @edge_count = 0~ ** Processing line: ~ @verts = []~ ** Processing line: ~ @faces = []~ ** Processing line: ~ @edges = []~ ** Processing line: ~ _init_from_file path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def _init_from_file path~ ** Processing line: ~ file_lines = $gtk.read_file(path).split("\n")~ ** Processing line: ~ .reject { |line| line.start_with?('#') || line.split(' ').length == 0 } # Strip out simple comments and blank lines~ ** Processing line: ~ .map { |line| line.split('#')[0] } # Strip out end of line comments~ ** Processing line: ~ .map { |line| line.split(' ') } # Tokenize by splitting on whitespace~ ** Processing line: ~ raise "OFF file did not start with OFF." if file_lines.shift != ["OFF"] # OFF meshes are supposed to begin with "OFF" as the first line.~ ** Processing line: ~ raise " line malformed" if file_lines[0].length != 3 # The second line needs to have 3 numbers. Raise an error if it doesn't.~ ** Processing line: ~ @vert_count, @face_count, @edge_count = file_lines.shift&.map(&:to_i) # Update the counts~ ** Processing line: ~ # Only the vertex and face counts need to be accurate. Raise an error if they are inaccurate.~ ** Processing line: ~ raise "Incorrect number of vertices and/or faces (Parsed VFE header: #{@vert_count} #{@face_count} #{@edge_count})" if file_lines.length != @vert_count + @face_count~ ** Processing line: ~ # Grab all the lines describing vertices.~ ** Processing line: ~ vert_lines = file_lines[0, @vert_count]~ ** Processing line: ~ # Grab all the lines describing faces.~ ** Processing line: ~ face_lines = file_lines[@vert_count, @face_count]~ ** Processing line: ~ # Create all the vertices~ ** Processing line: ~ @verts = vert_lines.map_with_index { |line, id| Vertex.new(line, id) }~ ** Processing line: ~ # Create all the faces~ ** Processing line: ~ @faces = face_lines.map { |line| Face.new(line, @verts) }~ ** Processing line: ~ # Create all the edges~ ** Processing line: ~ @edges = @faces.flat_map(&:edges).uniq do |edge|~ ** Processing line: ~ sorted = edge.sorted~ ** Processing line: ~ [sorted.point_a, sorted.point_b]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def fast_3x3_transform! mtx~ ** Processing line: ~ @verts.each { |vert| vert.fast_3x3_transform! mtx }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class Face~ ** Processing line: ~~ ** Processing line: ~ attr_reader :verts, :edges~ ** Processing line: ~~ ** Processing line: ~ def initialize(data, verts)~ ** Processing line: ~ vert_count = data[0].to_i~ ** Processing line: ~ vert_ids = data[1, vert_count].map(&:to_i)~ ** Processing line: ~ @verts = vert_ids.map { |i| verts[i] }~ ** Processing line: ~ @edges = []~ ** Processing line: ~ (0...vert_count).each { |i| @edges[i] = Edge.new(verts[vert_ids[i - 1]], verts[vert_ids[i]]) }~ ** Processing line: ~ @edges.rotate! 1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class Edge~ ** Processing line: ~ attr_reader :point_a, :point_b~ ** Processing line: ~~ ** Processing line: ~ def initialize(point_a, point_b)~ ** Processing line: ~ @point_a = point_a~ ** Processing line: ~ @point_b = point_b~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def sorted~ ** Processing line: ~ @point_a.id < @point_b.id ? self : Edge.new(@point_b, @point_a)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw_override ffi~ ** Processing line: ~ ffi.draw_line(@point_a.render_x, @point_a.render_y, @point_b.render_x, @point_b.render_y, 255, 0, 0, 128)~ ** Processing line: ~ ffi.draw_line(@point_a.render_x+1, @point_a.render_y, @point_b.render_x+1, @point_b.render_y, 255, 0, 0, 128)~ ** Processing line: ~ ffi.draw_line(@point_a.render_x, @point_a.render_y+1, @point_b.render_x, @point_b.render_y+1, 255, 0, 0, 128)~ ** Processing line: ~ ffi.draw_line(@point_a.render_x+1, @point_a.render_y+1, @point_b.render_x+1, @point_b.render_y+1, 255, 0, 0, 128)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def primitive_marker~ ** Processing line: ~ :line~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class Vertex~ ** Processing line: ~ attr_accessor :x, :y, :z, :id~ ** Processing line: ~~ ** Processing line: ~ def initialize(data, id)~ ** Processing line: ~ @x = data[0].to_f~ ** Processing line: ~ @y = data[1].to_f~ ** Processing line: ~ @z = data[2].to_f~ ** Processing line: ~ @id = id~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def fast_3x3_transform! mtx~ ** Processing line: ~ _x, _y, _z = @x, @y, @z~ ** Processing line: ~ @x = mtx[0][0] * _x + mtx[0][1] * _y + mtx[0][2] * _z~ ** Processing line: ~ @y = mtx[1][0] * _x + mtx[1][1] * _y + mtx[1][2] * _z~ ** Processing line: ~ @z = mtx[2][0] * _x + mtx[2][1] * _y + mtx[2][2] * _z~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_x~ ** Processing line: ~ @x * (10 / (5 - @y)) * 170 + 640~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_y~ ** Processing line: ~ @z * (10 / (5 - @y)) * 170 + 360~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** 3d - Wireframe - Data - what-is-this.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~3d - Wireframe - Data - what-is-this.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~3d - Wireframe - Data - what-is-this.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_3d/02_wireframe/data/what-is-this.txt~ ** Processing line: ~ https://en.wikipedia.org/wiki/OFF_(file_format)~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** 3d - Yaw Pitch Roll - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~3d - Yaw Pitch Roll - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~3d - Yaw Pitch Roll - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_3d/03_yaw_pitch_roll/app/main.rb~ ** Processing line: ~ class Game~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def matrix_mul m, v~ ** Processing line: ~ (hmap x: ((m.x.x * v.x) + (m.x.y * v.y) + (m.x.z * v.z) + (m.x.w * v.w)),~ ** Processing line: ~ y: ((m.y.x * v.x) + (m.y.y * v.y) + (m.y.z * v.z) + (m.y.w * v.w)),~ ** Processing line: ~ z: ((m.z.x * v.x) + (m.z.y * v.y) + (m.z.z * v.z) + (m.z.w * v.w)),~ ** Processing line: ~ w: ((m.w.x * v.x) + (m.w.y * v.y) + (m.w.z * v.z) + (m.w.w * v.w)))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_ship~ ** Processing line: ~ [~ ** Processing line: ~ # engine back~ ** Processing line: ~ { x: -1, y: -1, z: 1, w: 0 },~ ** Processing line: ~ { x: -1, y: 1, z: 1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -1, y: 1, z: 1, w: 0 },~ ** Processing line: ~ { x: 1, y: 1, z: 1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 1, y: 1, z: 1, w: 0 },~ ** Processing line: ~ { x: 1, y: -1, z: 1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 1, y: -1, z: 1, w: 0 },~ ** Processing line: ~ { x: -1, y: -1, z: 1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # engine front~ ** Processing line: ~ { x: -1, y: -1, z: -1, w: 0 },~ ** Processing line: ~ { x: -1, y: 1, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -1, y: 1, z: -1, w: 0 },~ ** Processing line: ~ { x: 1, y: 1, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 1, y: 1, z: -1, w: 0 },~ ** Processing line: ~ { x: 1, y: -1, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 1, y: -1, z: -1, w: 0 },~ ** Processing line: ~ { x: -1, y: -1, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # engine left~ ** Processing line: ~ { x: -1, z: -1, y: -1, w: 0 },~ ** Processing line: ~ { x: -1, z: -1, y: 1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -1, z: -1, y: 1, w: 0 },~ ** Processing line: ~ { x: -1, z: 1, y: 1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -1, z: 1, y: 1, w: 0 },~ ** Processing line: ~ { x: -1, z: 1, y: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -1, z: 1, y: -1, w: 0 },~ ** Processing line: ~ { x: -1, z: -1, y: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # engine right~ ** Processing line: ~ { x: 1, z: -1, y: -1, w: 0 },~ ** Processing line: ~ { x: 1, z: -1, y: 1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 1, z: -1, y: 1, w: 0 },~ ** Processing line: ~ { x: 1, z: 1, y: 1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 1, z: 1, y: 1, w: 0 },~ ** Processing line: ~ { x: 1, z: 1, y: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 1, z: 1, y: -1, w: 0 },~ ** Processing line: ~ { x: 1, z: -1, y: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # top front of engine to front of ship~ ** Processing line: ~ { x: 1, y: 1, z: 1, w: 0 },~ ** Processing line: ~ { x: 0, y: -1, z: 9, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 0, y: -1, z: 9, w: 0 },~ ** Processing line: ~ { x: -1, y: 1, z: 1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # bottom front of engine~ ** Processing line: ~ { x: 1, y: -1, z: 1, w: 0 },~ ** Processing line: ~ { x: 0, y: -1, z: 9, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -1, y: -1, z: 1, w: 0 },~ ** Processing line: ~ { x: 0, y: -1, z: 9, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # right wing~ ** Processing line: ~ # front of wing~ ** Processing line: ~ { x: 1, y: 0.10, z: 1, w: 0 },~ ** Processing line: ~ { x: 9, y: 0.10, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 9, y: 0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: 10, y: 0.10, z: -2, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # back of wing~ ** Processing line: ~ { x: 1, y: 0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: 9, y: 0.10, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 10, y: 0.10, z: -2, w: 0 },~ ** Processing line: ~ { x: 8, y: 0.10, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # front of wing~ ** Processing line: ~ { x: 1, y: -0.10, z: 1, w: 0 },~ ** Processing line: ~ { x: 9, y: -0.10, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 9, y: -0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: 10, y: -0.10, z: -2, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # back of wing~ ** Processing line: ~ { x: 1, y: -0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: 9, y: -0.10, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 10, y: -0.10, z: -2, w: 0 },~ ** Processing line: ~ { x: 8, y: -0.10, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # left wing~ ** Processing line: ~ # front of wing~ ** Processing line: ~ { x: -1, y: 0.10, z: 1, w: 0 },~ ** Processing line: ~ { x: -9, y: 0.10, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -9, y: 0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: -10, y: 0.10, z: -2, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # back of wing~ ** Processing line: ~ { x: -1, y: 0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: -9, y: 0.10, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -10, y: 0.10, z: -2, w: 0 },~ ** Processing line: ~ { x: -8, y: 0.10, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # front of wing~ ** Processing line: ~ { x: -1, y: -0.10, z: 1, w: 0 },~ ** Processing line: ~ { x: -9, y: -0.10, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -9, y: -0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: -10, y: -0.10, z: -2, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # back of wing~ ** Processing line: ~ { x: -1, y: -0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: -9, y: -0.10, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -10, y: -0.10, z: -2, w: 0 },~ ** Processing line: ~ { x: -8, y: -0.10, z: -1, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # left fin~ ** Processing line: ~ # top~ ** Processing line: ~ { x: -1, y: 0.10, z: 1, w: 0 },~ ** Processing line: ~ { x: -1, y: 3, z: -3, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -1, y: 0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: -1, y: 3, z: -3, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -1.1, y: 0.10, z: 1, w: 0 },~ ** Processing line: ~ { x: -1.1, y: 3, z: -3, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -1.1, y: 0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: -1.1, y: 3, z: -3, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # bottom~ ** Processing line: ~ { x: -1, y: -0.10, z: 1, w: 0 },~ ** Processing line: ~ { x: -1, y: -2, z: -2, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -1, y: -0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: -1, y: -2, z: -2, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -1.1, y: -0.10, z: 1, w: 0 },~ ** Processing line: ~ { x: -1.1, y: -2, z: -2, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: -1.1, y: -0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: -1.1, y: -2, z: -2, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # right fin~ ** Processing line: ~ { x: 1, y: 0.10, z: 1, w: 0 },~ ** Processing line: ~ { x: 1, y: 3, z: -3, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 1, y: 0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: 1, y: 3, z: -3, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 1.1, y: 0.10, z: 1, w: 0 },~ ** Processing line: ~ { x: 1.1, y: 3, z: -3, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 1.1, y: 0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: 1.1, y: 3, z: -3, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ # bottom~ ** Processing line: ~ { x: 1, y: -0.10, z: 1, w: 0 },~ ** Processing line: ~ { x: 1, y: -2, z: -2, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 1, y: -0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: 1, y: -2, z: -2, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 1.1, y: -0.10, z: 1, w: 0 },~ ** Processing line: ~ { x: 1.1, y: -2, z: -2, w: 0 },~ ** Processing line: ~~ ** Processing line: ~ { x: 1.1, y: -0.10, z: -1, w: 0 },~ ** Processing line: ~ { x: 1.1, y: -2, z: -2, w: 0 },~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ state.points ||= player_ship~ ** Processing line: ~ state.shifted_points ||= state.points.map { |point| point }~ ** Processing line: ~~ ** Processing line: ~ state.scale ||= 1~ ** Processing line: ~ state.angle_x ||= 0~ ** Processing line: ~ state.angle_y ||= 0~ ** Processing line: ~ state.angle_z ||= 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def matrix_new x0, y0, z0, w0, x1, y1, z1, w1, x2, y2, z2, w2, x3, y3, z3, w3~ ** Processing line: ~ (hmap x: (hmap x: x0, y: y0, z: z0, w: w0),~ ** Processing line: ~ y: (hmap x: x1, y: y1, z: z1, w: w1),~ ** Processing line: ~ z: (hmap x: x2, y: y2, z: z2, w: w2),~ ** Processing line: ~ w: (hmap x: x3, y: y3, z: z3, w: w3))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def angle_z_matrix degrees~ ** Processing line: ~ cos_t = Math.cos degrees.to_radians~ ** Processing line: ~ sin_t = Math.sin degrees.to_radians~ ** Processing line: ~ (matrix_new cos_t, -sin_t, 0, 0,~ ** Processing line: ~ sin_t, cos_t, 0, 0,~ ** Processing line: ~ 0, 0, 1, 0,~ ** Processing line: ~ 0, 0, 0, 1)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def angle_y_matrix degrees~ ** Processing line: ~ cos_t = Math.cos degrees.to_radians~ ** Processing line: ~ sin_t = Math.sin degrees.to_radians~ ** Processing line: ~ (matrix_new cos_t, 0, sin_t, 0,~ ** Processing line: ~ 0, 1, 0, 0,~ ** Processing line: ~ -sin_t, 0, cos_t, 0,~ ** Processing line: ~ 0, 0, 0, 1)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def angle_x_matrix degrees~ ** Processing line: ~ cos_t = Math.cos degrees.to_radians~ ** Processing line: ~ sin_t = Math.sin degrees.to_radians~ ** Processing line: ~ (matrix_new 1, 0, 0, 0,~ ** Processing line: ~ 0, cos_t, -sin_t, 0,~ ** Processing line: ~ 0, sin_t, cos_t, 0,~ ** Processing line: ~ 0, 0, 0, 1)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def scale_matrix factor~ ** Processing line: ~ (matrix_new factor, 0, 0, 0,~ ** Processing line: ~ 0, factor, 0, 0,~ ** Processing line: ~ 0, 0, factor, 0,~ ** Processing line: ~ 0, 0, 0, 1)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input~ ** Processing line: ~ if (inputs.keyboard.shift && inputs.keyboard.p)~ ** Processing line: ~ state.scale -= 0.1~ ** Processing line: ~ elsif inputs.keyboard.p~ ** Processing line: ~ state.scale += 0.1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.mouse.wheel~ ** Processing line: ~ state.scale += inputs.mouse.wheel.y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.scale = state.scale.clamp(0.1, 1000)~ ** Processing line: ~~ ** Processing line: ~ if (inputs.keyboard.shift && inputs.keyboard.y) || inputs.keyboard.right~ ** Processing line: ~ state.angle_y += 1~ ** Processing line: ~ elsif (inputs.keyboard.y) || inputs.keyboard.left~ ** Processing line: ~ state.angle_y -= 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if (inputs.keyboard.shift && inputs.keyboard.x) || inputs.keyboard.down~ ** Processing line: ~ state.angle_x -= 1~ ** Processing line: ~ elsif (inputs.keyboard.x || inputs.keyboard.up)~ ** Processing line: ~ state.angle_x += 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.shift && inputs.keyboard.z~ ** Processing line: ~ state.angle_z += 1~ ** Processing line: ~ elsif inputs.keyboard.z~ ** Processing line: ~ state.angle_z -= 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.zero~ ** Processing line: ~ state.angle_x = 0~ ** Processing line: ~ state.angle_y = 0~ ** Processing line: ~ state.angle_z = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ angle_x = state.angle_x~ ** Processing line: ~ angle_y = state.angle_y~ ** Processing line: ~ angle_z = state.angle_z~ ** Processing line: ~ scale = state.scale~ ** Processing line: ~~ ** Processing line: ~ s_matrix = scale_matrix state.scale~ ** Processing line: ~ x_matrix = angle_z_matrix angle_z~ ** Processing line: ~ y_matrix = angle_y_matrix angle_y~ ** Processing line: ~ z_matrix = angle_x_matrix angle_x~ ** Processing line: ~~ ** Processing line: ~ state.shifted_points = state.points.map do |point|~ ** Processing line: ~ (matrix_mul s_matrix,~ ** Processing line: ~ (matrix_mul z_matrix,~ ** Processing line: ~ (matrix_mul x_matrix,~ ** Processing line: ~ (matrix_mul y_matrix, point)))).merge(original: point)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def thick_line line~ ** Processing line: ~ [~ ** Processing line: ~ line.merge(y: line.y - 1, y2: line.y2 - 1, r: 0, g: 0, b: 0),~ ** Processing line: ~ line.merge(x: line.x - 1, x2: line.x2 - 1, r: 0, g: 0, b: 0),~ ** Processing line: ~ line.merge(x: line.x - 0, x2: line.x2 - 0, r: 0, g: 0, b: 0),~ ** Processing line: ~ line.merge(y: line.y + 1, y2: line.y2 + 1, r: 0, g: 0, b: 0),~ ** Processing line: ~ line.merge(x: line.x + 1, x2: line.x2 + 1, r: 0, g: 0, b: 0)~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render~ ** Processing line: ~ outputs.lines << state.shifted_points.each_slice(2).map do |(p1, p2)|~ ** Processing line: ~ perc = 0~ ** Processing line: ~ thick_line({ x: p1.x.*(10) + 640, y: p1.y.*(10) + 320,~ ** Processing line: ~ x2: p2.x.*(10) + 640, y2: p2.y.*(10) + 320,~ ** Processing line: ~ r: 255 * perc,~ ** Processing line: ~ g: 255 * perc,~ ** Processing line: ~ b: 255 * perc })~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [ 10, 700, "angle_x: #{state.angle_x.to_sf}", 0]~ ** Processing line: ~ outputs.labels << [ 10, 670, "x, shift+x", 0]~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [210, 700, "angle_y: #{state.angle_y.to_sf}", 0]~ ** Processing line: ~ outputs.labels << [210, 670, "y, shift+y", 0]~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [410, 700, "angle_z: #{state.angle_z.to_sf}", 0]~ ** Processing line: ~ outputs.labels << [410, 670, "z, shift+z", 0]~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [610, 700, "scale: #{state.scale.to_sf}", 0]~ ** Processing line: ~ outputs.labels << [610, 670, "p, shift+p", 0]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $game = Game.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $game.args = args~ ** Processing line: ~ $game.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_angles x, y, z~ ** Processing line: ~ $game.state.angle_x = x~ ** Processing line: ~ $game.state.angle_y = y~ ** Processing line: ~ $game.state.angle_z = z~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Arcade - Bullet Hell - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Arcade - Bullet Hell - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Arcade - Bullet Hell - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_arcade/bullet_hell/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.base_columns ||= 10.times.map { |n| 50 * n + 1280 / 2 - 5 * 50 + 5 }~ ** Processing line: ~ args.state.base_rows ||= 5.times.map { |n| 50 * n + 720 - 5 * 50 }~ ** Processing line: ~ args.state.offset_columns = 10.times.map { |n| (n - 4.5) * Math.sin(Kernel.tick_count.to_radians) * 12 }~ ** Processing line: ~ args.state.offset_rows = 5.map { 0 }~ ** Processing line: ~ args.state.columns = 10.times.map { |i| args.state.base_columns[i] + args.state.offset_columns[i] }~ ** Processing line: ~ args.state.rows = 5.times.map { |i| args.state.base_rows[i] + args.state.offset_rows[i] }~ ** Processing line: ~ args.state.explosions ||= []~ ** Processing line: ~ args.state.enemies ||= []~ ** Processing line: ~ args.state.score ||= 0~ ** Processing line: ~ args.state.wave ||= 0~ ** Processing line: ~ if args.state.enemies.empty?~ ** Processing line: ~ args.state.wave += 1~ ** Processing line: ~ args.state.wave_root = Math.sqrt(args.state.wave)~ ** Processing line: ~ args.state.enemies = make_enemies~ ** Processing line: ~ end~ ** Processing line: ~ args.state.player ||= {x: 620, y: 80, w: 40, h: 40, path: 'sprites/circle-gray.png', angle: 90, cooldown: 0, alive: true}~ ** Processing line: ~ args.state.enemy_bullets ||= []~ ** Processing line: ~ args.state.player_bullets ||= []~ ** Processing line: ~ args.state.lives ||= 3~ ** Processing line: ~ args.state.missed_shots ||= 0~ ** Processing line: ~ args.state.fired_shots ||= 0~ ** Processing line: ~~ ** Processing line: ~ update_explosions args~ ** Processing line: ~ update_enemy_positions args~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.left && args.state.player[:x] > (300 + 5)~ ** Processing line: ~ args.state.player[:x] -= 5~ ** Processing line: ~ end~ ** Processing line: ~ if args.inputs.right && args.state.player[:x] < (1280 - args.state.player[:w] - 300 - 5)~ ** Processing line: ~ args.state.player[:x] += 5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.enemy_bullets.each do |bullet|~ ** Processing line: ~ bullet[:x] += bullet[:dx]~ ** Processing line: ~ bullet[:y] += bullet[:dy]~ ** Processing line: ~ end~ ** Processing line: ~ args.state.player_bullets.each do |bullet|~ ** Processing line: ~ bullet[:x] += bullet[:dx]~ ** Processing line: ~ bullet[:y] += bullet[:dy]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.enemy_bullets = args.state.enemy_bullets.find_all { |bullet| bullet[:y].between?(-16, 736) }~ ** Processing line: ~ args.state.player_bullets = args.state.player_bullets.find_all do |bullet|~ ** Processing line: ~ if bullet[:y].between?(-16, 736)~ ** Processing line: ~ true~ ** Processing line: ~ else~ ** Processing line: ~ args.state.missed_shots += 1~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.enemies = args.state.enemies.reject do |enemy|~ ** Processing line: ~ if args.state.player[:alive] && 1500 > (args.state.player[:x] - enemy[:x]) ** 2 + (args.state.player[:y] - enemy[:y]) ** 2~ ** Processing line: ~ args.state.explosions << {x: enemy[:x] + 4, y: enemy[:y] + 4, w: 32, h: 32, path: 'sprites/explosion-0.png', age: 0}~ ** Processing line: ~ args.state.explosions << {x: args.state.player[:x] + 4, y: args.state.player[:y] + 4, w: 32, h: 32, path: 'sprites/explosion-0.png', age: 0}~ ** Processing line: ~ args.state.player[:alive] = false~ ** Processing line: ~ true~ ** Processing line: ~ else~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ args.state.enemy_bullets.each do |bullet|~ ** Processing line: ~ if args.state.player[:alive] && 400 > (args.state.player[:x] - bullet[:x] + 12) ** 2 + (args.state.player[:y] - bullet[:y] + 12) ** 2~ ** Processing line: ~ args.state.explosions << {x: args.state.player[:x] + 4, y: args.state.player[:y] + 4, w: 32, h: 32, path: 'sprites/explosion-0.png', age: 0}~ ** Processing line: ~ args.state.player[:alive] = false~ ** Processing line: ~ bullet[:despawn] = true~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ args.state.enemies = args.state.enemies.reject do |enemy|~ ** Processing line: ~ args.state.player_bullets.any? do |bullet|~ ** Processing line: ~ if 400 > (enemy[:x] - bullet[:x] + 12) ** 2 + (enemy[:y] - bullet[:y] + 12) ** 2~ ** Processing line: ~ args.state.explosions << {x: enemy[:x] + 4, y: enemy[:y] + 4, w: 32, h: 32, path: 'sprites/explosion-0.png', age: 0}~ ** Processing line: ~ bullet[:despawn] = true~ ** Processing line: ~ args.state.score += 1000 * args.state.wave~ ** Processing line: ~ true~ ** Processing line: ~ else~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.player_bullets = args.state.player_bullets.reject { |bullet| bullet[:despawn] }~ ** Processing line: ~ args.state.enemy_bullets = args.state.enemy_bullets.reject { |bullet| bullet[:despawn] }~ ** Processing line: ~~ ** Processing line: ~ args.state.player[:cooldown] -= 1~ ** Processing line: ~ if args.inputs.keyboard.key_held.space && args.state.player[:cooldown] <= 0 && args.state.player[:alive]~ ** Processing line: ~ args.state.player_bullets << {x: args.state.player[:x] + 12, y: args.state.player[:y] + 28, w: 16, h: 16, path: 'sprites/star.png', dx: 0, dy: 8}.sprite~ ** Processing line: ~ args.state.fired_shots += 1~ ** Processing line: ~ args.state.player[:cooldown] = 10 + 20 / args.state.wave~ ** Processing line: ~ end~ ** Processing line: ~ args.state.enemies.each do |enemy|~ ** Processing line: ~ if Math.rand < 0.0005 + 0.0005 * args.state.wave && args.state.player[:alive] && enemy[:move_state] == :normal~ ** Processing line: ~ args.state.enemy_bullets << {x: enemy[:x] + 12, y: enemy[:y] - 8, w: 16, h: 16, path: 'sprites/star.png', dx: 0, dy: -3 - args.state.wave_root}.sprite~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ args.outputs.primitives << args.state.enemies.map do |enemy|~ ** Processing line: ~ [enemy[:x], enemy[:y], 40, 40, enemy[:path], -90].sprite~ ** Processing line: ~ end~ ** Processing line: ~ args.outputs.primitives << args.state.player if args.state.player[:alive]~ ** Processing line: ~ args.outputs.primitives << args.state.explosions~ ** Processing line: ~ args.outputs.primitives << args.state.player_bullets~ ** Processing line: ~ args.outputs.primitives << args.state.enemy_bullets~ ** Processing line: ~ accuracy = args.state.fired_shots.zero? ? 1 : (args.state.fired_shots - args.state.missed_shots) / args.state.fired_shots~ ** Processing line: ~ args.outputs.primitives << [~ ** Processing line: ~ [0, 0, 300, 720, 96, 0, 0].solid,~ ** Processing line: ~ [1280 - 300, 0, 300, 720, 96, 0, 0].solid,~ ** Processing line: ~ [1280 - 290, 60, "Wave #{args.state.wave}", 255, 255, 255].label,~ ** Processing line: ~ [1280 - 290, 40, "Accuracy #{(accuracy * 100).floor}%", 255, 255, 255].label,~ ** Processing line: ~ [1280 - 290, 20, "Score #{(args.state.score * accuracy).floor}", 255, 255, 255].label,~ ** Processing line: ~ ]~ ** Processing line: ~ args.outputs.primitives << args.state.lives.times.map do |n|~ ** Processing line: ~ [1280 - 290 + 50 * n, 80, 40, 40, 'sprites/circle-gray.png', 90].sprite~ ** Processing line: ~ end~ ** Processing line: ~ #args.outputs.debug << args.gtk.framerate_diagnostics_primitives~ ** Processing line: ~~ ** Processing line: ~ if (!args.state.player[:alive]) && args.state.enemy_bullets.empty? && args.state.explosions.empty? && args.state.enemies.all? { |enemy| enemy[:move_state] == :normal }~ ** Processing line: ~ args.state.player[:alive] = true~ ** Processing line: ~ args.state.player[:x] = 624~ ** Processing line: ~ args.state.player[:y] = 80~ ** Processing line: ~ args.state.lives -= 1~ ** Processing line: ~ if args.state.lives == -1~ ** Processing line: ~ args.state.clear!~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def make_enemies~ ** Processing line: ~ enemies = []~ ** Processing line: ~ enemies += 10.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 0, col: n, path: 'sprites/circle-orange.png', move_state: :retreat} }~ ** Processing line: ~ enemies += 10.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 1, col: n, path: 'sprites/circle-orange.png', move_state: :retreat} }~ ** Processing line: ~ enemies += 8.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 2, col: n + 1, path: 'sprites/circle-blue.png', move_state: :retreat} }~ ** Processing line: ~ enemies += 8.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 3, col: n + 1, path: 'sprites/circle-blue.png', move_state: :retreat} }~ ** Processing line: ~ enemies += 4.times.map { |n| {x: Math.rand * 1280 * 2 - 640, y: Math.rand * 720 * 2 + 720, row: 4, col: n + 3, path: 'sprites/circle-green.png', move_state: :retreat} }~ ** Processing line: ~ enemies~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def update_explosions args~ ** Processing line: ~ args.state.explosions.each do |explosion|~ ** Processing line: ~ explosion[:age] += 0.5~ ** Processing line: ~ explosion[:path] = "sprites/explosion-#{explosion[:age].floor}.png"~ ** Processing line: ~ end~ ** Processing line: ~ args.state.explosions = args.state.explosions.reject { |explosion| explosion[:age] >= 7 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def update_enemy_positions args~ ** Processing line: ~ args.state.enemies.each do |enemy|~ ** Processing line: ~ if enemy[:move_state] == :normal~ ** Processing line: ~ enemy[:x] = args.state.columns[enemy[:col]]~ ** Processing line: ~ enemy[:y] = args.state.rows[enemy[:row]]~ ** Processing line: ~ enemy[:move_state] = :dive if Math.rand < 0.0002 + 0.00005 * args.state.wave && args.state.player[:alive]~ ** Processing line: ~ elsif enemy[:move_state] == :dive~ ** Processing line: ~ enemy[:target_x] ||= args.state.player[:x]~ ** Processing line: ~ enemy[:target_y] ||= args.state.player[:y]~ ** Processing line: ~ dx = enemy[:target_x] - enemy[:x]~ ** Processing line: ~ dy = enemy[:target_y] - enemy[:y]~ ** Processing line: ~ vel = Math.sqrt(dx * dx + dy * dy)~ ** Processing line: ~ speed_limit = 2 + args.state.wave_root~ ** Processing line: ~ if vel > speed_limit~ ** Processing line: ~ dx /= vel / speed_limit~ ** Processing line: ~ dy /= vel / speed_limit~ ** Processing line: ~ end~ ** Processing line: ~ if vel < 1 || !args.state.player[:alive]~ ** Processing line: ~ enemy[:move_state] = :retreat~ ** Processing line: ~ end~ ** Processing line: ~ enemy[:x] += dx~ ** Processing line: ~ enemy[:y] += dy~ ** Processing line: ~ elsif enemy[:move_state] == :retreat~ ** Processing line: ~ enemy[:target_x] = args.state.columns[enemy[:col]]~ ** Processing line: ~ enemy[:target_y] = args.state.rows[enemy[:row]]~ ** Processing line: ~ dx = enemy[:target_x] - enemy[:x]~ ** Processing line: ~ dy = enemy[:target_y] - enemy[:y]~ ** Processing line: ~ vel = Math.sqrt(dx * dx + dy * dy)~ ** Processing line: ~ speed_limit = 2 + args.state.wave_root~ ** Processing line: ~ if vel > speed_limit~ ** Processing line: ~ dx /= vel / speed_limit~ ** Processing line: ~ dy /= vel / speed_limit~ ** Processing line: ~ elsif vel < 1~ ** Processing line: ~ enemy[:move_state] = :normal~ ** Processing line: ~ enemy[:target_x] = nil~ ** Processing line: ~ enemy[:target_y] = nil~ ** Processing line: ~ end~ ** Processing line: ~ enemy[:x] += dx~ ** Processing line: ~ enemy[:y] += dy~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Arcade - Dueling Starships - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Arcade - Dueling Starships - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Arcade - Dueling Starships - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_arcade/dueling_starships/app/main.rb~ ** Processing line: ~ class DuelingSpaceships~ ** Processing line: ~ attr_accessor :state, :inputs, :outputs, :grid~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ calc~ ** Processing line: ~ input~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ outputs.background_color = [0, 0, 0]~ ** Processing line: ~ state.ship_blue ||= new_blue_ship~ ** Processing line: ~ state.ship_red ||= new_red_ship~ ** Processing line: ~ state.flames ||= []~ ** Processing line: ~ state.bullets ||= []~ ** Processing line: ~ state.ship_blue_score ||= 0~ ** Processing line: ~ state.ship_red_score ||= 0~ ** Processing line: ~ state.stars ||= 100.map do~ ** Processing line: ~ [rand.add(2).to_square(grid.w_half.randomize(:sign, :ratio),~ ** Processing line: ~ grid.h_half.randomize(:sign, :ratio)),~ ** Processing line: ~ 128 + 128.randomize(:ratio), 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def default_ship x, y, angle, sprite_path, bullet_sprite_path, color~ ** Processing line: ~ state.new_entity(:ship,~ ** Processing line: ~ { x: x,~ ** Processing line: ~ y: y,~ ** Processing line: ~ dy: 0,~ ** Processing line: ~ dx: 0,~ ** Processing line: ~ damage: 0,~ ** Processing line: ~ dead: false,~ ** Processing line: ~ angle: angle,~ ** Processing line: ~ max_alpha: 255,~ ** Processing line: ~ sprite_path: sprite_path,~ ** Processing line: ~ bullet_sprite_path: bullet_sprite_path,~ ** Processing line: ~ color: color })~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_red_ship~ ** Processing line: ~ default_ship(400, 250.randomize(:sign, :ratio),~ ** Processing line: ~ 180, 'sprites/ship_red.png', 'sprites/red_bullet.png',~ ** Processing line: ~ [255, 90, 90])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_blue_ship~ ** Processing line: ~ default_ship(-400, 250.randomize(:sign, :ratio),~ ** Processing line: ~ 0, 'sprites/ship_blue.png', 'sprites/blue_bullet.png',~ ** Processing line: ~ [110, 140, 255])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render~ ** Processing line: ~ render_instructions~ ** Processing line: ~ render_score~ ** Processing line: ~ render_universe~ ** Processing line: ~ render_flames~ ** Processing line: ~ render_ships~ ** Processing line: ~ render_bullets~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_ships~ ** Processing line: ~ update_ship_outputs(state.ship_blue)~ ** Processing line: ~ update_ship_outputs(state.ship_red)~ ** Processing line: ~ outputs.sprites << [state.ship_blue.sprite, state.ship_red.sprite]~ ** Processing line: ~ outputs.labels << [state.ship_blue.label, state.ship_red.label]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_instructions~ ** Processing line: ~ return if state.ship_blue.dx > 0 || state.ship_blue.dy > 0 ||~ ** Processing line: ~ state.ship_red.dx > 0 || state.ship_red.dy > 0 ||~ ** Processing line: ~ state.flames.length > 0~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [grid.left.shift_right(30),~ ** Processing line: ~ grid.bottom.shift_up(30),~ ** Processing line: ~ "Two gamepads needed to play. R1 to accelerate. Left and right on D-PAD to turn ship. Hold A to shoot. Press B to drop mines.",~ ** Processing line: ~ 0, 0, 255, 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc~ ** Processing line: ~ calc_thrusts~ ** Processing line: ~ calc_ships~ ** Processing line: ~ calc_bullets~ ** Processing line: ~ calc_winner~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input~ ** Processing line: ~ input_accelerate~ ** Processing line: ~ input_turn~ ** Processing line: ~ input_bullets_and_mines~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_score~ ** Processing line: ~ outputs.labels << [grid.left.shift_right(80),~ ** Processing line: ~ grid.top.shift_down(40),~ ** Processing line: ~ state.ship_blue_score, 30, 1, state.ship_blue.color]~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [grid.right.shift_left(80),~ ** Processing line: ~ grid.top.shift_down(40),~ ** Processing line: ~ state.ship_red_score, 30, 1, state.ship_red.color]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_universe~ ** Processing line: ~ return if outputs.static_solids.any?~ ** Processing line: ~ outputs.static_solids << grid.rect~ ** Processing line: ~ outputs.static_solids << state.stars~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def apply_round_finished_alpha entity~ ** Processing line: ~ return entity unless state.round_finished_debounce~ ** Processing line: ~ entity.a *= state.round_finished_debounce.percentage_of(2.seconds)~ ** Processing line: ~ return entity~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def update_ship_outputs ship, sprite_size = 66~ ** Processing line: ~ ship.sprite =~ ** Processing line: ~ apply_round_finished_alpha [sprite_size.to_square(ship.x, ship.y),~ ** Processing line: ~ ship.sprite_path,~ ** Processing line: ~ ship.angle,~ ** Processing line: ~ ship.dead ? 0 : 255 * ship.created_at.ease(2.seconds)].sprite~ ** Processing line: ~ ship.label =~ ** Processing line: ~ apply_round_finished_alpha [ship.x,~ ** Processing line: ~ ship.y + 100,~ ** Processing line: ~ "." * 5.minus(ship.damage).greater(0), 20, 1, ship.color, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_flames sprite_size = 6~ ** Processing line: ~ outputs.sprites << state.flames.map do |p|~ ** Processing line: ~ apply_round_finished_alpha [sprite_size.to_square(p.x, p.y),~ ** Processing line: ~ 'sprites/flame.png', 0,~ ** Processing line: ~ p.max_alpha * p.created_at.ease(p.lifetime, :flip)].sprite~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_bullets sprite_size = 10~ ** Processing line: ~ outputs.sprites << state.bullets.map do |b|~ ** Processing line: ~ apply_round_finished_alpha [b.sprite_size.to_square(b.x, b.y),~ ** Processing line: ~ b.owner.bullet_sprite_path,~ ** Processing line: ~ 0, b.max_alpha].sprite~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def wrap_location! location~ ** Processing line: ~ location.x = grid.left if location.x > grid.right~ ** Processing line: ~ location.x = grid.right if location.x < grid.left~ ** Processing line: ~ location.y = grid.top if location.y < grid.bottom~ ** Processing line: ~ location.y = grid.bottom if location.y > grid.top~ ** Processing line: ~ location~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_thrusts~ ** Processing line: ~ state.flames =~ ** Processing line: ~ state.flames~ ** Processing line: ~ .reject(&:old?)~ ** Processing line: ~ .map do |p|~ ** Processing line: ~ p.speed *= 0.9~ ** Processing line: ~ p.y += p.angle.vector_y(p.speed)~ ** Processing line: ~ p.x += p.angle.vector_x(p.speed)~ ** Processing line: ~ wrap_location! p~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def all_ships~ ** Processing line: ~ [state.ship_blue, state.ship_red]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def alive_ships~ ** Processing line: ~ all_ships.reject { |s| s.dead }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_bullet bullet~ ** Processing line: ~ bullet.y += bullet.angle.vector_y(bullet.speed)~ ** Processing line: ~ bullet.x += bullet.angle.vector_x(bullet.speed)~ ** Processing line: ~ wrap_location! bullet~ ** Processing line: ~ explode_bullet! bullet if bullet.old?~ ** Processing line: ~ return if bullet.exploded~ ** Processing line: ~ return if state.round_finished~ ** Processing line: ~ alive_ships.each do |s|~ ** Processing line: ~ if s != bullet.owner &&~ ** Processing line: ~ s.sprite.intersect_rect?(bullet.sprite_size.to_square(bullet.x, bullet.y))~ ** Processing line: ~ explode_bullet! bullet, 10, 5, 30~ ** Processing line: ~ s.damage += 1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_bullets~ ** Processing line: ~ state.bullets.each { |b| calc_bullet b }~ ** Processing line: ~ state.bullets.reject! { |b| b.exploded }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def create_explosion! type, entity, flame_count, max_speed, lifetime, max_alpha = 255~ ** Processing line: ~ flame_count.times do~ ** Processing line: ~ state.flames << state.new_entity(type,~ ** Processing line: ~ { angle: 360.randomize(:ratio),~ ** Processing line: ~ speed: max_speed.randomize(:ratio),~ ** Processing line: ~ lifetime: lifetime,~ ** Processing line: ~ x: entity.x,~ ** Processing line: ~ y: entity.y,~ ** Processing line: ~ max_alpha: max_alpha })~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def explode_bullet! bullet, flame_override = 5, max_speed = 5, lifetime = 10~ ** Processing line: ~ bullet.exploded = true~ ** Processing line: ~ create_explosion! :bullet_explosion,~ ** Processing line: ~ bullet,~ ** Processing line: ~ flame_override,~ ** Processing line: ~ max_speed,~ ** Processing line: ~ lifetime,~ ** Processing line: ~ bullet.max_alpha~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_ship ship~ ** Processing line: ~ ship.x += ship.dx~ ** Processing line: ~ ship.y += ship.dy~ ** Processing line: ~ wrap_location! ship~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_ships~ ** Processing line: ~ all_ships.each { |s| calc_ship s }~ ** Processing line: ~ return if all_ships.any? { |s| s.dead }~ ** Processing line: ~ return if state.round_finished~ ** Processing line: ~ return unless state.ship_blue.sprite.intersect_rect?(state.ship_red.sprite)~ ** Processing line: ~ state.ship_blue.damage = 5~ ** Processing line: ~ state.ship_red.damage = 5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def create_thruster_flames! ship~ ** Processing line: ~ state.flames << state.new_entity(:ship_thruster,~ ** Processing line: ~ { angle: ship.angle + 180 + 60.randomize(:sign, :ratio),~ ** Processing line: ~ speed: 5.randomize(:ratio),~ ** Processing line: ~ max_alpha: 255 * ship.created_at_elapsed.percentage_of(2.seconds),~ ** Processing line: ~ lifetime: 30,~ ** Processing line: ~ x: ship.x - ship.angle.vector_x(40) + 5.randomize(:sign, :ratio),~ ** Processing line: ~ y: ship.y - ship.angle.vector_y(40) + 5.randomize(:sign, :ratio) })~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_accelerate_ship should_move_ship, ship~ ** Processing line: ~ return if ship.dead~ ** Processing line: ~~ ** Processing line: ~ should_move_ship &&= (ship.dx + ship.dy).abs < 5~ ** Processing line: ~~ ** Processing line: ~ if should_move_ship~ ** Processing line: ~ create_thruster_flames! ship~ ** Processing line: ~ ship.dx += ship.angle.vector_x 0.050~ ** Processing line: ~ ship.dy += ship.angle.vector_y 0.050~ ** Processing line: ~ else~ ** Processing line: ~ ship.dx *= 0.99~ ** Processing line: ~ ship.dy *= 0.99~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_accelerate~ ** Processing line: ~ input_accelerate_ship inputs.controller_one.key_held.r1 || inputs.keyboard.up, state.ship_blue~ ** Processing line: ~ input_accelerate_ship inputs.controller_two.key_held.r1, state.ship_red~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_turn_ship direction, ship~ ** Processing line: ~ ship.angle -= 3 * direction~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_turn~ ** Processing line: ~ input_turn_ship inputs.controller_one.left_right + inputs.keyboard.left_right, state.ship_blue~ ** Processing line: ~ input_turn_ship inputs.controller_two.left_right, state.ship_red~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_bullet create_bullet, ship~ ** Processing line: ~ return unless create_bullet~ ** Processing line: ~ return if ship.dead~ ** Processing line: ~~ ** Processing line: ~ state.bullets << state.new_entity(:ship_bullet,~ ** Processing line: ~ { owner: ship,~ ** Processing line: ~ angle: ship.angle,~ ** Processing line: ~ max_alpha: 255 * ship.created_at_elapsed.percentage_of(2.seconds),~ ** Processing line: ~ speed: 5 + ship.dx.mult(ship.angle.vector_x) + ship.dy.mult(ship.angle.vector_y),~ ** Processing line: ~ lifetime: 120,~ ** Processing line: ~ sprite_size: 10,~ ** Processing line: ~ x: ship.x + ship.angle.vector_x * 32,~ ** Processing line: ~ y: ship.y + ship.angle.vector_y * 32 })~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_mine create_mine, ship~ ** Processing line: ~ return unless create_mine~ ** Processing line: ~ return if ship.dead~ ** Processing line: ~~ ** Processing line: ~ state.bullets << state.new_entity(:ship_bullet,~ ** Processing line: ~ { owner: ship,~ ** Processing line: ~ angle: 360.randomize(:sign, :ratio),~ ** Processing line: ~ max_alpha: 255 * ship.created_at_elapsed.percentage_of(2.seconds),~ ** Processing line: ~ speed: 0.02,~ ** Processing line: ~ sprite_size: 10,~ ** Processing line: ~ lifetime: 600,~ ** Processing line: ~ x: ship.x + ship.angle.vector_x * -50,~ ** Processing line: ~ y: ship.y + ship.angle.vector_y * -50 })~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_bullets_and_mines~ ** Processing line: ~ return if state.bullets.length > 100~ ** Processing line: ~~ ** Processing line: ~ [~ ** Processing line: ~ [inputs.controller_one.key_held.a || inputs.keyboard.key_held.space,~ ** Processing line: ~ inputs.controller_one.key_down.b || inputs.keyboard.key_down.down,~ ** Processing line: ~ state.ship_blue],~ ** Processing line: ~ [inputs.controller_two.key_held.a, inputs.controller_two.key_down.b, state.ship_red]~ ** Processing line: ~ ].each do |a_held, b_down, ship|~ ** Processing line: ~ input_bullet(a_held && state.tick_count.mod_zero?(10).or(a_held == 0), ship)~ ** Processing line: ~ input_mine(b_down, ship)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_kill_ships~ ** Processing line: ~ alive_ships.find_all { |s| s.damage >= 5 }.each do |s|~ ** Processing line: ~ s.dead = true~ ** Processing line: ~ create_explosion! :ship_explosion, s, 20, 20, 30, s.max_alpha~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_score~ ** Processing line: ~ return if state.round_finished~ ** Processing line: ~ return if alive_ships.length > 1~ ** Processing line: ~~ ** Processing line: ~ if alive_ships.first == state.ship_red~ ** Processing line: ~ state.ship_red_score += 1~ ** Processing line: ~ elsif alive_ships.first == state.ship_blue~ ** Processing line: ~ state.ship_blue_score += 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.round_finished = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_reset_ships~ ** Processing line: ~ return unless state.round_finished~ ** Processing line: ~ state.round_finished_debounce ||= 2.seconds~ ** Processing line: ~ state.round_finished_debounce -= 1~ ** Processing line: ~ return if state.round_finished_debounce > 0~ ** Processing line: ~ start_new_round!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def start_new_round!~ ** Processing line: ~ state.ship_blue = new_blue_ship~ ** Processing line: ~ state.ship_red = new_red_ship~ ** Processing line: ~ state.round_finished = false~ ** Processing line: ~ state.round_finished_debounce = nil~ ** Processing line: ~ state.flames.clear~ ** Processing line: ~ state.bullets.clear~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_winner~ ** Processing line: ~ calc_kill_ships~ ** Processing line: ~ calc_score~ ** Processing line: ~ calc_reset_ships~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $dueling_spaceship = DuelingSpaceships.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.grid.origin_center!~ ** Processing line: ~ $dueling_spaceship.inputs = args.inputs~ ** Processing line: ~ $dueling_spaceship.outputs = args.outputs~ ** Processing line: ~ $dueling_spaceship.state = args.state~ ** Processing line: ~ $dueling_spaceship.grid = args.grid~ ** Processing line: ~ $dueling_spaceship.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** arcade/flappy dragon/credits.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~arcade/flappy dragon/credits.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~arcade/flappy dragon/credits.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_arcade/flappy_dragon/CREDITS.txt~ ** Processing line: ~ code: Amir Rajan, https://twitter.com/amirrajan~ ** Processing line: ~ graphics and audio: Nick Culbertson, https://twitter.com/MobyPixel~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** arcade/flappy dragon/main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~arcade/flappy dragon/main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~arcade/flappy dragon/main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_arcade/flappy_dragon/app/main.rb~ ** Processing line: ~ class FlappyDragon~ ** Processing line: ~ attr_accessor :grid, :inputs, :state, :outputs~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ calc~ ** Processing line: ~ process_inputs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ state.flap_power = 11~ ** Processing line: ~ state.gravity = 0.9~ ** Processing line: ~ state.ceiling = 600~ ** Processing line: ~ state.ceiling_flap_power = 6~ ** Processing line: ~ state.wall_countdown_length = 100~ ** Processing line: ~ state.wall_gap_size = 100~ ** Processing line: ~ state.wall_countdown ||= 0~ ** Processing line: ~ state.hi_score ||= 0~ ** Processing line: ~ state.score ||= 0~ ** Processing line: ~ state.walls ||= []~ ** Processing line: ~ state.x ||= 50~ ** Processing line: ~ state.y ||= 500~ ** Processing line: ~ state.dy ||= 0~ ** Processing line: ~ state.scene ||= :menu~ ** Processing line: ~ state.scene_at ||= 0~ ** Processing line: ~ state.difficulty ||= :normal~ ** Processing line: ~ state.new_difficulty ||= :normal~ ** Processing line: ~ state.countdown ||= 4.seconds~ ** Processing line: ~ state.flash_at ||= 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render~ ** Processing line: ~ outputs.sounds << "sounds/flappy-song.ogg" if state.tick_count == 1~ ** Processing line: ~ render_score~ ** Processing line: ~ render_menu~ ** Processing line: ~ render_game~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_score~ ** Processing line: ~ outputs.primitives << { x: 10, y: 710, text: "HI SCORE: #{state.hi_score}", **large_white_typeset }~ ** Processing line: ~ outputs.primitives << { x: 10, y: 680, text: "SCORE: #{state.score}", **large_white_typeset }~ ** Processing line: ~ outputs.primitives << { x: 10, y: 650, text: "DIFFICULTY: #{state.difficulty.upcase}", **large_white_typeset }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_menu~ ** Processing line: ~ return unless state.scene == :menu~ ** Processing line: ~ render_overlay~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << { x: 640, y: 700, text: "Flappy Dragon", size_enum: 50, alignment_enum: 1, **white }~ ** Processing line: ~ outputs.labels << { x: 640, y: 500, text: "Instructions: Press Spacebar to flap. Don't die.", size_enum: 4, alignment_enum: 1, **white }~ ** Processing line: ~ outputs.labels << { x: 430, y: 430, text: "[Tab] Change difficulty", size_enum: 4, alignment_enum: 0, **white }~ ** Processing line: ~ outputs.labels << { x: 430, y: 400, text: "[Enter] Start at New Difficulty ", size_enum: 4, alignment_enum: 0, **white }~ ** Processing line: ~ outputs.labels << { x: 430, y: 370, text: "[Escape] Cancel/Resume ", size_enum: 4, alignment_enum: 0, **white }~ ** Processing line: ~ outputs.labels << { x: 640, y: 300, text: "(mouse, touch, and game controllers work, too!) ", size_enum: 4, alignment_enum: 1, **white }~ ** Processing line: ~ outputs.labels << { x: 640, y: 200, text: "Difficulty: #{state.new_difficulty.capitalize}", size_enum: 4, alignment_enum: 1, **white }~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << { x: 10, y: 100, text: "Code: @amirrajan", **white }~ ** Processing line: ~ outputs.labels << { x: 10, y: 80, text: "Art: @mobypixel", **white }~ ** Processing line: ~ outputs.labels << { x: 10, y: 60, text: "Music: @mobypixel", **white }~ ** Processing line: ~ outputs.labels << { x: 10, y: 40, text: "Engine: DragonRuby GTK", **white }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_overlay~ ** Processing line: ~ overlay_rect = grid.rect.scale_rect(1.1, 0, 0)~ ** Processing line: ~ outputs.primitives << { x: overlay_rect.x,~ ** Processing line: ~ y: overlay_rect.y,~ ** Processing line: ~ w: overlay_rect.w,~ ** Processing line: ~ h: overlay_rect.h,~ ** Processing line: ~ r: 0, g: 0, b: 0, a: 230 }.solid!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_game~ ** Processing line: ~ render_game_over~ ** Processing line: ~ render_background~ ** Processing line: ~ render_walls~ ** Processing line: ~ render_dragon~ ** Processing line: ~ render_flash~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_game_over~ ** Processing line: ~ return unless state.scene == :game~ ** Processing line: ~ outputs.labels << { x: 638, y: 358, text: score_text, size_enum: 20, alignment_enum: 1 }~ ** Processing line: ~ outputs.labels << { x: 635, y: 360, text: score_text, size_enum: 20, alignment_enum: 1, r: 255, g: 255, b: 255 }~ ** Processing line: ~ outputs.labels << { x: 638, y: 428, text: countdown_text, size_enum: 20, alignment_enum: 1 }~ ** Processing line: ~ outputs.labels << { x: 635, y: 430, text: countdown_text, size_enum: 20, alignment_enum: 1, r: 255, g: 255, b: 255 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_background~ ** Processing line: ~ outputs.sprites << { x: 0, y: 0, w: 1280, h: 720, path: 'sprites/background.png' }~ ** Processing line: ~~ ** Processing line: ~ scroll_point_at = state.tick_count~ ** Processing line: ~ scroll_point_at = state.scene_at if state.scene == :menu~ ** Processing line: ~ scroll_point_at = state.death_at if state.countdown > 0~ ** Processing line: ~ scroll_point_at ||= 0~ ** Processing line: ~~ ** Processing line: ~ outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_back.png', 0.25)~ ** Processing line: ~ outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_middle.png', 0.50)~ ** Processing line: ~ outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_front.png', 1.00, -80)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def scrolling_background at, path, rate, y = 0~ ** Processing line: ~ [~ ** Processing line: ~ { x: 0 - at.*(rate) % 1440, y: y, w: 1440, h: 720, path: path },~ ** Processing line: ~ { x: 1440 - at.*(rate) % 1440, y: y, w: 1440, h: 720, path: path }~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_walls~ ** Processing line: ~ state.walls.each do |w|~ ** Processing line: ~ w.sprites = [~ ** Processing line: ~ { x: w.x, y: w.bottom_height - 720, w: 100, h: 720, path: 'sprites/wall.png', angle: 180 },~ ** Processing line: ~ { x: w.x, y: w.top_y, w: 100, h: 720, path: 'sprites/wallbottom.png', angle: 0 }~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ outputs.sprites << state.walls.map(&:sprites)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_dragon~ ** Processing line: ~ state.show_death = true if state.countdown == 3.seconds~ ** Processing line: ~~ ** Processing line: ~ if state.show_death == false || !state.death_at~ ** Processing line: ~ animation_index = state.flapped_at.frame_index 6, 2, false if state.flapped_at~ ** Processing line: ~ sprite_name = "sprites/dragon_fly#{animation_index.or(0) + 1}.png"~ ** Processing line: ~ state.dragon_sprite = { x: state.x, y: state.y, w: 100, h: 80, path: sprite_name, angle: state.dy * 1.2 }~ ** Processing line: ~ else~ ** Processing line: ~ sprite_name = "sprites/dragon_die.png"~ ** Processing line: ~ state.dragon_sprite = { x: state.x, y: state.y, w: 100, h: 80, path: sprite_name, angle: state.dy * 1.2 }~ ** Processing line: ~ sprite_changed_elapsed = state.death_at.elapsed_time - 1.seconds~ ** Processing line: ~ state.dragon_sprite.angle += (sprite_changed_elapsed ** 1.3) * state.death_fall_direction * -1~ ** Processing line: ~ state.dragon_sprite.x += (sprite_changed_elapsed ** 1.2) * state.death_fall_direction~ ** Processing line: ~ state.dragon_sprite.y += (sprite_changed_elapsed * 14 - sprite_changed_elapsed ** 1.6)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.sprites << state.dragon_sprite~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_flash~ ** Processing line: ~ return unless state.flash_at~ ** Processing line: ~~ ** Processing line: ~ outputs.primitives << { **grid.rect.to_hash,~ ** Processing line: ~ **white,~ ** Processing line: ~ a: 255 * state.flash_at.ease(20, :flip) }.solid!~ ** Processing line: ~~ ** Processing line: ~ state.flash_at = 0 if state.flash_at.elapsed_time > 20~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc~ ** Processing line: ~ return unless state.scene == :game~ ** Processing line: ~ reset_game if state.countdown == 1~ ** Processing line: ~ state.countdown -= 1 and return if state.countdown > 0~ ** Processing line: ~ calc_walls~ ** Processing line: ~ calc_flap~ ** Processing line: ~ calc_game_over~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_walls~ ** Processing line: ~ state.walls.each { |w| w.x -= 8 }~ ** Processing line: ~~ ** Processing line: ~ walls_count_before_removal = state.walls.length~ ** Processing line: ~~ ** Processing line: ~ state.walls.reject! { |w| w.x < -100 }~ ** Processing line: ~~ ** Processing line: ~ state.score += 1 if state.walls.count < walls_count_before_removal~ ** Processing line: ~~ ** Processing line: ~ state.wall_countdown -= 1 and return if state.wall_countdown > 0~ ** Processing line: ~~ ** Processing line: ~ state.walls << state.new_entity(:wall) do |w|~ ** Processing line: ~ w.x = grid.right~ ** Processing line: ~ w.opening = grid.top~ ** Processing line: ~ .randomize(:ratio)~ ** Processing line: ~ .greater(200)~ ** Processing line: ~ .lesser(520)~ ** Processing line: ~ w.bottom_height = w.opening - state.wall_gap_size~ ** Processing line: ~ w.top_y = w.opening + state.wall_gap_size~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.wall_countdown = state.wall_countdown_length~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_flap~ ** Processing line: ~ state.y += state.dy~ ** Processing line: ~ state.dy = state.dy.lesser state.flap_power~ ** Processing line: ~ state.dy -= state.gravity~ ** Processing line: ~ return if state.y < state.ceiling~ ** Processing line: ~ state.y = state.ceiling~ ** Processing line: ~ state.dy = state.dy.lesser state.ceiling_flap_power~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_game_over~ ** Processing line: ~ return unless game_over?~ ** Processing line: ~~ ** Processing line: ~ state.death_at = state.tick_count~ ** Processing line: ~ state.death_from = state.walls.first~ ** Processing line: ~ state.death_fall_direction = -1~ ** Processing line: ~ state.death_fall_direction = 1 if state.x > state.death_from.x~ ** Processing line: ~ outputs.sounds << "sounds/hit-sound.wav"~ ** Processing line: ~ begin_countdown~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_inputs~ ** Processing line: ~ process_inputs_menu~ ** Processing line: ~ process_inputs_game~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_inputs_menu~ ** Processing line: ~ return unless state.scene == :menu~ ** Processing line: ~~ ** Processing line: ~ changediff = inputs.keyboard.key_down.tab || inputs.controller_one.key_down.select~ ** Processing line: ~ if inputs.mouse.click~ ** Processing line: ~ p = inputs.mouse.click.point~ ** Processing line: ~ if (p.y >= 165) && (p.y < 200) && (p.x >= 500) && (p.x < 800)~ ** Processing line: ~ changediff = true~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if changediff~ ** Processing line: ~ case state.new_difficulty~ ** Processing line: ~ when :easy~ ** Processing line: ~ state.new_difficulty = :normal~ ** Processing line: ~ when :normal~ ** Processing line: ~ state.new_difficulty = :hard~ ** Processing line: ~ when :hard~ ** Processing line: ~ state.new_difficulty = :flappy~ ** Processing line: ~ when :flappy~ ** Processing line: ~ state.new_difficulty = :easy~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.key_down.enter || inputs.controller_one.key_down.start || inputs.controller_one.key_down.a~ ** Processing line: ~ state.difficulty = state.new_difficulty~ ** Processing line: ~ change_to_scene :game~ ** Processing line: ~ reset_game false~ ** Processing line: ~ state.hi_score = 0~ ** Processing line: ~ begin_countdown~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.key_down.escape || (inputs.mouse.click && !changediff) || inputs.controller_one.key_down.b~ ** Processing line: ~ state.new_difficulty = state.difficulty~ ** Processing line: ~ change_to_scene :game~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_inputs_game~ ** Processing line: ~ return unless state.scene == :game~ ** Processing line: ~~ ** Processing line: ~ clicked_menu = false~ ** Processing line: ~ if inputs.mouse.click~ ** Processing line: ~ p = inputs.mouse.click.point~ ** Processing line: ~ clicked_menu = (p.y >= 620) && (p.x < 275)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if clicked_menu || inputs.keyboard.key_down.escape || inputs.keyboard.key_down.enter || inputs.controller_one.key_down.start~ ** Processing line: ~ change_to_scene :menu~ ** Processing line: ~ elsif (inputs.mouse.down || inputs.mouse.click || inputs.keyboard.key_down.space || inputs.controller_one.key_down.a) && state.countdown == 0~ ** Processing line: ~ state.dy = 0~ ** Processing line: ~ state.dy += state.flap_power~ ** Processing line: ~ state.flapped_at = state.tick_count~ ** Processing line: ~ outputs.sounds << "sounds/fly-sound.wav"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def white~ ** Processing line: ~ { r: 255, g: 255, b: 255 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def large_white_typeset~ ** Processing line: ~ { size_enum: 5, alignment_enum: 0, r: 255, g: 255, b: 255 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def at_beginning?~ ** Processing line: ~ state.walls.count == 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def dragon_collision_box~ ** Processing line: ~ state.dragon_sprite~ ** Processing line: ~ .scale_rect(1.0 - collision_forgiveness, 0.5, 0.5)~ ** Processing line: ~ .rect_shift_right(10)~ ** Processing line: ~ .rect_shift_up(state.dy * 2)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def game_over?~ ** Processing line: ~ return true if state.y <= 0.-(500 * collision_forgiveness) && !at_beginning?~ ** Processing line: ~~ ** Processing line: ~ state.walls~ ** Processing line: ~ .flat_map { |w| w.sprites }~ ** Processing line: ~ .any? do |s|~ ** Processing line: ~ s && s.intersect_rect?(dragon_collision_box)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def collision_forgiveness~ ** Processing line: ~ case state.difficulty~ ** Processing line: ~ when :easy~ ** Processing line: ~ 0.9~ ** Processing line: ~ when :normal~ ** Processing line: ~ 0.7~ ** Processing line: ~ when :hard~ ** Processing line: ~ 0.5~ ** Processing line: ~ when :flappy~ ** Processing line: ~ 0.3~ ** Processing line: ~ else~ ** Processing line: ~ 0.9~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def countdown_text~ ** Processing line: ~ state.countdown ||= -1~ ** Processing line: ~ return "" if state.countdown == 0~ ** Processing line: ~ return "GO!" if state.countdown.idiv(60) == 0~ ** Processing line: ~ return "GAME OVER" if state.death_at~ ** Processing line: ~ return "READY?"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def begin_countdown~ ** Processing line: ~ state.countdown = 4.seconds~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def score_text~ ** Processing line: ~ return "" unless state.countdown > 1.seconds~ ** Processing line: ~ return "" unless state.death_at~ ** Processing line: ~ return "SCORE: 0 (LOL)" if state.score == 0~ ** Processing line: ~ return "HI SCORE: #{state.score}" if state.score == state.hi_score~ ** Processing line: ~ return "SCORE: #{state.score}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reset_game set_flash = true~ ** Processing line: ~ state.flash_at = state.tick_count if set_flash~ ** Processing line: ~ state.walls = []~ ** Processing line: ~ state.y = 500~ ** Processing line: ~ state.dy = 0~ ** Processing line: ~ state.hi_score = state.hi_score.greater(state.score)~ ** Processing line: ~ state.score = 0~ ** Processing line: ~ state.wall_countdown = state.wall_countdown_length.fdiv(2)~ ** Processing line: ~ state.show_death = false~ ** Processing line: ~ state.death_at = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def change_to_scene scene~ ** Processing line: ~ state.scene = scene~ ** Processing line: ~ state.scene_at = state.tick_count~ ** Processing line: ~ inputs.keyboard.clear~ ** Processing line: ~ inputs.controller_one.clear~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $flappy_dragon = FlappyDragon.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $flappy_dragon.grid = args.grid~ ** Processing line: ~ $flappy_dragon.inputs = args.inputs~ ** Processing line: ~ $flappy_dragon.state = args.state~ ** Processing line: ~ $flappy_dragon.outputs = args.outputs~ ** Processing line: ~ $flappy_dragon.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Arcade - Pong - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Arcade - Pong - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Arcade - Pong - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_arcade/pong/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ defaults args~ ** Processing line: ~ render args~ ** Processing line: ~ calc args~ ** Processing line: ~ input args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults args~ ** Processing line: ~ args.state.ball.debounce ||= 3 * 60~ ** Processing line: ~ args.state.ball.size ||= 10~ ** Processing line: ~ args.state.ball.size_half ||= args.state.ball.size / 2~ ** Processing line: ~ args.state.ball.x ||= 640~ ** Processing line: ~ args.state.ball.y ||= 360~ ** Processing line: ~ args.state.ball.dx ||= 5.randomize(:sign)~ ** Processing line: ~ args.state.ball.dy ||= 5.randomize(:sign)~ ** Processing line: ~ args.state.left_paddle.y ||= 360~ ** Processing line: ~ args.state.right_paddle.y ||= 360~ ** Processing line: ~ args.state.paddle.h ||= 120~ ** Processing line: ~ args.state.paddle.w ||= 10~ ** Processing line: ~ args.state.left_paddle.score ||= 0~ ** Processing line: ~ args.state.right_paddle.score ||= 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render args~ ** Processing line: ~ render_center_line args~ ** Processing line: ~ render_scores args~ ** Processing line: ~ render_countdown args~ ** Processing line: ~ render_ball args~ ** Processing line: ~ render_paddles args~ ** Processing line: ~ render_instructions args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :render_methods~ ** Processing line: ~ def render_center_line args~ ** Processing line: ~ args.outputs.lines << [640, 0, 640, 720]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_scores args~ ** Processing line: ~ args.outputs.labels << [~ ** Processing line: ~ [320, 650, args.state.left_paddle.score, 10, 1],~ ** Processing line: ~ [960, 650, args.state.right_paddle.score, 10, 1]~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_countdown args~ ** Processing line: ~ return unless args.state.ball.debounce > 0~ ** Processing line: ~ args.outputs.labels << [640, 360, "%.2f" % args.state.ball.debounce.fdiv(60), 10, 1]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_ball args~ ** Processing line: ~ args.outputs.solids << solid_ball(args)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_paddles args~ ** Processing line: ~ args.outputs.solids << solid_left_paddle(args)~ ** Processing line: ~ args.outputs.solids << solid_right_paddle(args)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_instructions args~ ** Processing line: ~ args.outputs.labels << [320, 30, "W and S keys to move left paddle.", 0, 1]~ ** Processing line: ~ args.outputs.labels << [920, 30, "O and L keys to move right paddle.", 0, 1]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc args~ ** Processing line: ~ args.state.ball.debounce -= 1 and return if args.state.ball.debounce > 0~ ** Processing line: ~ calc_move_ball args~ ** Processing line: ~ calc_collision_with_left_paddle args~ ** Processing line: ~ calc_collision_with_right_paddle args~ ** Processing line: ~ calc_collision_with_walls args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :calc_methods~ ** Processing line: ~ def calc_move_ball args~ ** Processing line: ~ args.state.ball.x += args.state.ball.dx~ ** Processing line: ~ args.state.ball.y += args.state.ball.dy~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_collision_with_left_paddle args~ ** Processing line: ~ if solid_left_paddle(args).intersect_rect? solid_ball(args)~ ** Processing line: ~ args.state.ball.dx *= -1~ ** Processing line: ~ elsif args.state.ball.x < 0~ ** Processing line: ~ args.state.right_paddle.score += 1~ ** Processing line: ~ calc_reset_round args~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_collision_with_right_paddle args~ ** Processing line: ~ if solid_right_paddle(args).intersect_rect? solid_ball(args)~ ** Processing line: ~ args.state.ball.dx *= -1~ ** Processing line: ~ elsif args.state.ball.x > 1280~ ** Processing line: ~ args.state.left_paddle.score += 1~ ** Processing line: ~ calc_reset_round args~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_collision_with_walls args~ ** Processing line: ~ if args.state.ball.y + args.state.ball.size_half > 720~ ** Processing line: ~ args.state.ball.y = 720 - args.state.ball.size_half~ ** Processing line: ~ args.state.ball.dy *= -1~ ** Processing line: ~ elsif args.state.ball.y - args.state.ball.size_half < 0~ ** Processing line: ~ args.state.ball.y = args.state.ball.size_half~ ** Processing line: ~ args.state.ball.dy *= -1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_reset_round args~ ** Processing line: ~ args.state.ball.x = 640~ ** Processing line: ~ args.state.ball.y = 360~ ** Processing line: ~ args.state.ball.dx = 5.randomize(:sign)~ ** Processing line: ~ args.state.ball.dy = 5.randomize(:sign)~ ** Processing line: ~ args.state.ball.debounce = 3 * 60~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input args~ ** Processing line: ~ input_left_paddle args~ ** Processing line: ~ input_right_paddle args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :input_methods~ ** Processing line: ~ def input_left_paddle args~ ** Processing line: ~ if args.inputs.controller_one.key_down.down || args.inputs.keyboard.key_down.s~ ** Processing line: ~ args.state.left_paddle.y -= 40~ ** Processing line: ~ elsif args.inputs.controller_one.key_down.up || args.inputs.keyboard.key_down.w~ ** Processing line: ~ args.state.left_paddle.y += 40~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_right_paddle args~ ** Processing line: ~ if args.inputs.controller_two.key_down.down || args.inputs.keyboard.key_down.l~ ** Processing line: ~ args.state.right_paddle.y -= 40~ ** Processing line: ~ elsif args.inputs.controller_two.key_down.up || args.inputs.keyboard.key_down.o~ ** Processing line: ~ args.state.right_paddle.y += 40~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin :assets~ ** Processing line: ~ def solid_ball args~ ** Processing line: ~ centered_rect args.state.ball.x, args.state.ball.y, args.state.ball.size, args.state.ball.size~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def solid_left_paddle args~ ** Processing line: ~ centered_rect_vertically 0, args.state.left_paddle.y, args.state.paddle.w, args.state.paddle.h~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def solid_right_paddle args~ ** Processing line: ~ centered_rect_vertically 1280 - args.state.paddle.w, args.state.right_paddle.y, args.state.paddle.w, args.state.paddle.h~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def centered_rect x, y, w, h~ ** Processing line: ~ [x - w / 2, y - h / 2, w, h]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def centered_rect_vertically x, y, w, h~ ** Processing line: ~ [x, y - h / 2, w, h]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Arcade - Snakemoji - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Arcade - Snakemoji - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Arcade - Snakemoji - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_arcade/snakemoji/app/main.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ ################################~ ** Processing line: ~ # So I was working on a snake game while~ ** Processing line: ~ # learning DragonRuby, and at some point I had a thought~ ** Processing line: ~ # what if I use "😀" as a function name, surely it wont work right...?~ ** Processing line: ~ # RIGHT....?~ ** Processing line: ~ # BUT IT DID, IT WORKED~ ** Processing line: ~ # it all went downhill from then~ ** Processing line: ~ # Created by Anton K. (ai Doge)~ ** Processing line: ~ # https://gist.github.com/scorp200~ ** Processing line: ~ #############LICENSE############~ ** Processing line: ~ # Feel free to use this anywhere and however you want~ ** Processing line: ~ # You can sell this to EA for $1,000,000 if you want, its completely free.~ ** Processing line: ~ # Just rememeber you are helping this... thing... to spread...~ ** Processing line: ~ # ALSO! I am not liable for any mental, physical or financial damage caused.~ ** Processing line: ~ #############LICENSE############~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ class Array~ ** Processing line: ~ #Helper function~ ** Processing line: ~ def move! vector~ ** Processing line: ~ self.x += vector.x~ ** Processing line: ~ self.y += vector.y~ ** Processing line: ~ return self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Helper function to draw snake body~ ** Processing line: ~ def draw! 🎮, 📺, color~ ** Processing line: ~ translate 📺.solids, 🎮.⛓, [self.x * 🎮.⚖️ + 🎮.🛶 / 2, self.y * 🎮.⚖️ + 🎮.🛶 / 2, 🎮.⚖️ - 🎮.🛶, 🎮.⚖️ - 🎮.🛶, color]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #This is where it all started, I was trying to find good way to multiply a map by a number, * is already used so is **~ ** Processing line: ~ #I kept trying different combinations of symbols, when suddenly...~ ** Processing line: ~ def 😀 value~ ** Processing line: ~ self.map {|d| d * value}~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Draw stuff with an offset~ ** Processing line: ~ def translate output_collection, ⛓, what~ ** Processing line: ~ what.x += ⛓.x~ ** Processing line: ~ what.y += ⛓.y~ ** Processing line: ~ output_collection << what~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ BLUE = [33, 150, 243]~ ** Processing line: ~ RED = [244, 67, 54]~ ** Processing line: ~ GOLD = [255, 193, 7]~ ** Processing line: ~ LAST = 0~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ defaults args.state~ ** Processing line: ~ render args.state, args.outputs~ ** Processing line: ~ input args.state, args.inputs~ ** Processing line: ~ update args.state~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def update 🎮~ ** Processing line: ~ #Update every 10 frames~ ** Processing line: ~ if 🎮.tick_count.mod_zero? 10~ ** Processing line: ~ #Add new snake body piece at head's location~ ** Processing line: ~ 🎮.🐍 << [*🎮.🤖]~ ** Processing line: ~ #Assign Next Direction to Direction~ ** Processing line: ~ 🎮.🚗 = *🎮.🚦~ ** Processing line: ~~ ** Processing line: ~ #Trim the snake a bit if its longer than current size~ ** Processing line: ~ if 🎮.🐍.length > 🎮.🛒~ ** Processing line: ~ 🎮.🐍 = 🎮.🐍[-🎮.🛒..-1]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Move the head in the Direction~ ** Processing line: ~ 🎮.🤖.move! 🎮.🚗~ ** Processing line: ~~ ** Processing line: ~ #If Head is outside the playing field, or inside snake's body restart game~ ** Processing line: ~ if 🎮.🤖.x < 0 || 🎮.🤖.x >= 🎮.🗺.x || 🎮.🤖.y < 0 || 🎮.🤖.y >= 🎮.🗺.y || 🎮.🚗 != [0, 0] && 🎮.🐍.any? {|s| s == 🎮.🤖}~ ** Processing line: ~ LAST = 🎮.💰~ ** Processing line: ~ 🎮.as_hash.clear~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #If head lands on food add size and score~ ** Processing line: ~ if 🎮.🤖 == 🎮.🍎~ ** Processing line: ~ 🎮.🛒 += 1~ ** Processing line: ~ 🎮.💰 += (🎮.🛒 * 0.8).floor.to_i + 5~ ** Processing line: ~ spawn_🍎 🎮~ ** Processing line: ~ puts 🎮.🍎~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Every second remove 1 point~ ** Processing line: ~ if 🎮.💰 > 0 && 🎮.tick_count.mod_zero?(60)~ ** Processing line: ~ 🎮.💰 -= 1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def spawn_🍎 🎮~ ** Processing line: ~ #Food~ ** Processing line: ~ 🎮.🍎 ||= [*🎮.🤖]~ ** Processing line: ~ #Randomly spawns food inside the playing field, keep doing this if the food keeps landing on the snake's body~ ** Processing line: ~ while 🎮.🐍.any? {|s| s == 🎮.🍎} || 🎮.🍎 == 🎮.🤖 do~ ** Processing line: ~ 🎮.🍎 = [rand(🎮.🗺.x), rand(🎮.🗺.y)]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render 🎮, 📺~ ** Processing line: ~ #Paint the background black~ ** Processing line: ~ 📺.solids << [0, 0, 1280, 720, 0, 0, 0, 255]~ ** Processing line: ~ #Draw a border for the playing field~ ** Processing line: ~ translate 📺.borders, 🎮.⛓, [0, 0, 🎮.🗺.x * 🎮.⚖️, 🎮.🗺.y * 🎮.⚖️, 255, 255, 255]~ ** Processing line: ~~ ** Processing line: ~ #Draw the snake's body~ ** Processing line: ~ 🎮.🐍.map do |🐍| 🐍.draw! 🎮, 📺, BLUE end~ ** Processing line: ~ #Draw the head~ ** Processing line: ~ 🎮.🤖.draw! 🎮, 📺, BLUE~ ** Processing line: ~ #Draw the food~ ** Processing line: ~ 🎮.🍎.draw! 🎮, 📺, RED~ ** Processing line: ~~ ** Processing line: ~ #Draw current score~ ** Processing line: ~ translate 📺.labels, 🎮.⛓, [5, 715, "Score: #{🎮.💰}", GOLD]~ ** Processing line: ~ #Draw your last score, if any~ ** Processing line: ~ translate 📺.labels, 🎮.⛓, [[*🎮.🤖.😀(🎮.⚖️)].move!([0, 🎮.⚖️ * 2]), "Your Last score is #{LAST}", 0, 1, GOLD] unless LAST == 0 || 🎮.🚗 != [0, 0]~ ** Processing line: ~ #Draw starting message, only if Direction is 0~ ** Processing line: ~ translate 📺.labels, 🎮.⛓, [🎮.🤖.😀(🎮.⚖️), "Press any Arrow key to start", 0, 1, GOLD] unless 🎮.🚗 != [0, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input 🎮, 🕹~ ** Processing line: ~ #Left and Right keyboard input, only change if X direction is 0~ ** Processing line: ~ if 🕹.keyboard.key_held.left && 🎮.🚗.x == 0~ ** Processing line: ~ 🎮.🚦 = [-1, 0]~ ** Processing line: ~ elsif 🕹.keyboard.key_held.right && 🎮.🚗.x == 0~ ** Processing line: ~ 🎮.🚦 = [1, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Up and Down keyboard input, only change if Y direction is 0~ ** Processing line: ~ if 🕹.keyboard.key_held.up && 🎮.🚗.y == 0~ ** Processing line: ~ 🎮.🚦 = [0, 1]~ ** Processing line: ~ elsif 🕹.keyboard.key_held.down && 🎮.🚗.y == 0~ ** Processing line: ~ 🎮.🚦 = [0, -1]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults 🎮~ ** Processing line: ~ #Playing field size~ ** Processing line: ~ 🎮.🗺 ||= [20, 20]~ ** Processing line: ~ #Scale for drawing, screen height / Field height~ ** Processing line: ~ 🎮.⚖️ ||= 720 / 🎮.🗺.y~ ** Processing line: ~ #Offset, offset all rendering to the center of the screen~ ** Processing line: ~ 🎮.⛓ ||= [(1280 - 720).fdiv(2), 0]~ ** Processing line: ~ #Padding, make the snake body slightly smaller than the scale~ ** Processing line: ~ 🎮.🛶 ||= (🎮.⚖️ * 0.2).to_i~ ** Processing line: ~ #Snake Size~ ** Processing line: ~ 🎮.🛒 ||= 3~ ** Processing line: ~ #Snake head, the only part we are actually controlling~ ** Processing line: ~ 🎮.🤖 ||= [🎮.🗺.x / 2, 🎮.🗺.y / 2]~ ** Processing line: ~ #Snake body map, follows the head~ ** Processing line: ~ 🎮.🐍 ||= []~ ** Processing line: ~ #Direction the head moves to~ ** Processing line: ~ 🎮.🚗 ||= [0, 0]~ ** Processing line: ~ #Next_Direction, during input check only change this variable and then when game updates asign this to Direction~ ** Processing line: ~ 🎮.🚦 ||= [*🎮.🚗]~ ** Processing line: ~ #Your score~ ** Processing line: ~ 🎮.💰 ||= 0~ ** Processing line: ~ #Spawns Food randomly~ ** Processing line: ~ spawn_🍎(🎮) unless 🎮.🍎?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Arcade - Solar System - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Arcade - Solar System - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Arcade - Solar System - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_arcade/solar_system/app/main.rb~ ** Processing line: ~ # Focused tutorial video: https://s3.amazonaws.com/s3.dragonruby.org/dragonruby-nddnug-workshop.mp4~ ** Processing line: ~ # Workshop/Presentation which provides motivation for creating a game engine: https://www.youtube.com/watch?v=S3CFce1arC8~ ** Processing line: ~~ ** Processing line: ~ def defaults args~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ args.state.x ||= 640~ ** Processing line: ~ args.state.y ||= 360~ ** Processing line: ~ args.state.stars ||= 100.map do~ ** Processing line: ~ [1280 * rand, 720 * rand, rand.fdiv(10), 255 * rand, 255 * rand, 255 * rand]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.sun ||= args.state.new_entity(:sun) do |s|~ ** Processing line: ~ s.s = 100~ ** Processing line: ~ s.path = 'sprites/sun.png'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.planets = [~ ** Processing line: ~ [:mercury, 65, 5, 88],~ ** Processing line: ~ [:venus, 100, 10, 225],~ ** Processing line: ~ [:earth, 120, 10, 365],~ ** Processing line: ~ [:mars, 140, 8, 687],~ ** Processing line: ~ [:jupiter, 280, 30, 365 * 11.8],~ ** Processing line: ~ [:saturn, 350, 20, 365 * 29.5],~ ** Processing line: ~ [:uranus, 400, 15, 365 * 84],~ ** Processing line: ~ [:neptune, 440, 15, 365 * 164.8],~ ** Processing line: ~ [:pluto, 480, 5, 365 * 247.8],~ ** Processing line: ~ ].map do |name, distance, size, year_in_days|~ ** Processing line: ~ args.state.new_entity(name) do |p|~ ** Processing line: ~ p.path = "sprites/#{name}.png"~ ** Processing line: ~ p.distance = distance * 0.7~ ** Processing line: ~ p.s = size * 0.7~ ** Processing line: ~ p.year_in_days = year_in_days~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.ship ||= args.state.new_entity(:ship) do |s|~ ** Processing line: ~ s.x = 1280 * rand~ ** Processing line: ~ s.y = 720 * rand~ ** Processing line: ~ s.angle = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_sprite args, entity~ ** Processing line: ~ x = 0~ ** Processing line: ~ y = 0~ ** Processing line: ~~ ** Processing line: ~ if entity.year_in_days~ ** Processing line: ~ day = args.state.tick_count~ ** Processing line: ~ day_in_year = day % entity.year_in_days~ ** Processing line: ~ entity.random_start_day ||= day_in_year * rand~ ** Processing line: ~ percentage_of_year = day_in_year.fdiv(entity.year_in_days)~ ** Processing line: ~ angle = 365 * percentage_of_year~ ** Processing line: ~ x = angle.vector_x(entity.distance)~ ** Processing line: ~ y = angle.vector_y(entity.distance)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ [640 + x - entity.s.half, 360 + y - entity.s.half, entity.s, entity.s, entity.path]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render args~ ** Processing line: ~ args.outputs.solids << [0, 0, 1280, 720]~ ** Processing line: ~~ ** Processing line: ~ args.outputs.sprites << args.state.stars.map do |x, y, _, r, g, b|~ ** Processing line: ~ [x, y, 10, 10, 'sprites/star.png', 0, 100, r, g, b]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.sprites << to_sprite(args, args.state.sun)~ ** Processing line: ~ args.outputs.sprites << args.state.planets.map { |p| to_sprite args, p }~ ** Processing line: ~ args.outputs.sprites << [args.state.ship.x, args.state.ship.y, 20, 20, 'sprites/ship.png', args.state.ship.angle]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc args~ ** Processing line: ~ args.state.stars = args.state.stars.map do |x, y, speed, r, g, b|~ ** Processing line: ~ x += speed~ ** Processing line: ~ y += speed~ ** Processing line: ~ x = 0 if x > 1280~ ** Processing line: ~ y = 0 if y > 720~ ** Processing line: ~ [x, y, speed, r, g, b]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.outputs.sounds << 'sounds/bg.ogg'~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_inputs args~ ** Processing line: ~ if args.inputs.keyboard.left || args.inputs.controller_one.key_held.left~ ** Processing line: ~ args.state.ship.angle += 1~ ** Processing line: ~ elsif args.inputs.keyboard.right || args.inputs.controller_one.key_held.right~ ** Processing line: ~ args.state.ship.angle -= 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.keyboard.up || args.inputs.controller_one.key_held.a~ ** Processing line: ~ args.state.ship.x += args.state.ship.angle.x_vector~ ** Processing line: ~ args.state.ship.y += args.state.ship.angle.y_vector~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ defaults args~ ** Processing line: ~ render args~ ** Processing line: ~ calc args~ ** Processing line: ~ process_inputs args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def r~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Arcade - Sound Golf - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Arcade - Sound Golf - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Arcade - Sound Golf - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_arcade/sound_golf/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs Listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - sample: Chooses random element from array.~ ** Processing line: ~ In this sample app, the target note is set by taking a sample from the collection~ ** Processing line: ~ of available notes.~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~ - args.grid.(left|right|top|bottom): Pixel value for the boundaries of the virtual~ ** Processing line: ~ 720 p screen (Dragon Ruby Game Toolkits's virtual resolution is always 1280x720).~ ** Processing line: ~~ ** Processing line: ~ - args.state.new_entity: Used when we want to create a new object, like a sprite or button.~ ** Processing line: ~ For example, if we want to create a new button, we would declare it as a new entity and~ ** Processing line: ~ then define its properties.~ ** Processing line: ~~ ** Processing line: ~ - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated~ ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ ** Processing line: ~~ ** Processing line: ~ - find_all: Finds all elements from a collection that meet a certain requirements (and excludes the ones that don't).~ ** Processing line: ~~ ** Processing line: ~ - first: Returns the first element of an array.~ ** Processing line: ~~ ** Processing line: ~ - inside_rect: Returns true or false depending on if the point is inside the rect.~ ** Processing line: ~~ ** Processing line: ~ - to_sym: Returns symbol corresponding to string. Will create a symbol if it does~ ** Processing line: ~ not already exist.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app allows users to test their musical skills by matching the piano sound that plays in each~ ** Processing line: ~ # level to the correct note.~ ** Processing line: ~~ ** Processing line: ~ # Runs all the methods necessary for the game to function properly.~ ** Processing line: ~ def tick args~ ** Processing line: ~ defaults args~ ** Processing line: ~ render args~ ** Processing line: ~ calc args~ ** Processing line: ~ input_mouse args~ ** Processing line: ~ tick_instructions args, "Sample app shows how to play sounds. args.outputs.sounds << \"path_to_wav.wav\""~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets default values and creates empty collections~ ** Processing line: ~ # Initialization happens in the first frame only~ ** Processing line: ~ def defaults args~ ** Processing line: ~ args.state.notes ||= []~ ** Processing line: ~ args.state.click_feedbacks ||= []~ ** Processing line: ~ args.state.current_level ||= 1~ ** Processing line: ~ args.state.times_wrong ||= 0 # when game starts, user hasn't guessed wrong yet~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Uses a label to display current level, and shows the score~ ** Processing line: ~ # Creates a button to play the sample note, and displays the available notes that could be a potential match~ ** Processing line: ~ def render args~ ** Processing line: ~~ ** Processing line: ~ # grid.w_half positions the label in the horizontal center of the screen.~ ** Processing line: ~ args.outputs.labels << [args.grid.w_half, args.grid.top.shift_down(40), "Hole #{args.state.current_level} of 9", 0, 1, 0, 0, 0]~ ** Processing line: ~~ ** Processing line: ~ render_score args # shows score on screen~ ** Processing line: ~~ ** Processing line: ~ args.state.play_again_button ||= { x: 560, y: args.grid.h * 3 / 4 - 40, w: 160, h: 60, label: 'again' } # array definition, text/title~ ** Processing line: ~ args.state.play_note_button ||= { x: 560, y: args.grid.h * 3 / 4 - 40, w: 160, h: 60, label: 'play' }~ ** Processing line: ~~ ** Processing line: ~ if args.state.game_over # if game is over, a "play again" button is shown~ ** Processing line: ~ # Calculations ensure that Play Again label is displayed in center of border~ ** Processing line: ~ # Remove calculations from y parameters and see what happens to border and label placement~ ** Processing line: ~ args.outputs.labels << [args.grid.w_half, args.grid.h * 3 / 4, "Play Again", 0, 1, 0, 0, 0] # outputs label~ ** Processing line: ~ args.outputs.borders << args.state.play_again_button # outputs border~ ** Processing line: ~ else # otherwise, if game is not over~ ** Processing line: ~ # Calculations ensure that label appears in center of border~ ** Processing line: ~ args.outputs.labels << [args.grid.w_half, args.grid.h * 3 / 4, "Play Note ##{args.state.current_level}", 0, 1, 0, 0, 0] # outputs label~ ** Processing line: ~ args.outputs.borders << args.state.play_note_button # outputs border~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return if args.state.game_over # return if game is over~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << [args.grid.w_half, 400, "I think the note is a(n)...", 0, 1, 0, 0, 0] # outputs label~ ** Processing line: ~~ ** Processing line: ~ # Shows all of the available notes that can be potential matches.~ ** Processing line: ~ available_notes.each_with_index do |note, i|~ ** Processing line: ~ args.state.notes[i] ||= piano_button(args, note, i + 1) # calls piano_button method on each note (creates label and border)~ ** Processing line: ~ args.outputs.labels << args.state.notes[i].label # outputs note on screen with a label and a border~ ** Processing line: ~ args.outputs.borders << args.state.notes[i].border~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Shows whether or not the user is correct by filling the screen with either red or green~ ** Processing line: ~ args.outputs.solids << args.state.click_feedbacks.map { |c| c.solid }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Shows the score (number of times the user guesses wrong) onto the screen using labels.~ ** Processing line: ~ def render_score args~ ** Processing line: ~ if args.state.times_wrong == 0 # if the user has guessed wrong zero times, the score is par~ ** Processing line: ~ args.outputs.labels << [args.grid.w_half, args.grid.top.shift_down(80), "Score: PAR", 0, 1, 0, 0, 0]~ ** Processing line: ~ else # otherwise, number of times the user has guessed wrong is shown~ ** Processing line: ~ args.outputs.labels << [args.grid.w_half, args.grid.top.shift_down(80), "Score: +#{args.state.times_wrong}", 0, 1, 0, 0, 0] # shows score using string interpolation~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the target note for the level and performs calculations on click_feedbacks.~ ** Processing line: ~ def calc args~ ** Processing line: ~ args.state.target_note ||= available_notes.sample # chooses a note from available_notes collection as target note~ ** Processing line: ~ args.state.click_feedbacks.each { |c| c.solid[-1] -= 5 } # remove this line and solid color will remain on screen indefinitely~ ** Processing line: ~ # comment this line out and the solid color will keep flashing on screen instead of being removed from click_feedbacks collection~ ** Processing line: ~ args.state.click_feedbacks.reject! { |c| c.solid[-1] <= 0 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Uses input from the user to play the target note, as well as the other notes that could be a potential match.~ ** Processing line: ~ def input_mouse args~ ** Processing line: ~ return unless args.inputs.mouse.click # return unless the mouse is clicked~ ** Processing line: ~~ ** Processing line: ~ # finds button that was clicked by user~ ** Processing line: ~ button_clicked = args.outputs.borders.find_all do |b| # go through borders collection to find all borders that meet requirements~ ** Processing line: ~ args.inputs.mouse.click.point.inside_rect? b # find button border that mouse was clicked inside of~ ** Processing line: ~ end.find_all { |b| b.is_a? Hash }.first # reject, return first element~ ** Processing line: ~~ ** Processing line: ~ return unless button_clicked # return unless button_clicked as a value (a button was clicked)~ ** Processing line: ~~ ** Processing line: ~ queue_click_feedback args, # calls queue_click_feedback method on the button that was clicked~ ** Processing line: ~ button_clicked.x,~ ** Processing line: ~ button_clicked.y,~ ** Processing line: ~ button_clicked.w,~ ** Processing line: ~ button_clicked.h,~ ** Processing line: ~ 150, 100, 200 # sets color of button to shade of purple~ ** Processing line: ~~ ** Processing line: ~ if button_clicked[:label] == 'play' # if "play note" button is pressed~ ** Processing line: ~ args.outputs.sounds << "sounds/#{args.state.target_note}.wav" # sound of target note is output~ ** Processing line: ~ elsif button_clicked[:label] == 'again' # if "play game again" button is pressed~ ** Processing line: ~ args.state.target_note = nil # no target note~ ** Processing line: ~ args.state.current_level = 1 # starts at level 1 again~ ** Processing line: ~ args.state.times_wrong = 0 # starts off with 0 wrong guesses~ ** Processing line: ~ args.state.game_over = false # the game is not over (because it has just been restarted)~ ** Processing line: ~ else # otherwise if neither of those buttons were pressed~ ** Processing line: ~ args.outputs.sounds << "sounds/#{button_clicked[:label]}.wav" # sound of clicked note is played~ ** Processing line: ~ if button_clicked[:label] == args.state.target_note # if clicked note is target note~ ** Processing line: ~ args.state.target_note = nil # target note is emptied~ ** Processing line: ~~ ** Processing line: ~ if args.state.current_level < 9 # if game hasn't reached level 9~ ** Processing line: ~ args.state.current_level += 1 # game goes to next level~ ** Processing line: ~ else # otherwise, if game has reached level 9~ ** Processing line: ~ args.state.game_over = true # the game is over~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ queue_click_feedback args, 0, 0, args.grid.w, args.grid.h, 100, 200, 100 # green shown if user guesses correctly~ ** Processing line: ~ else # otherwise, if clicked note is not target note~ ** Processing line: ~ args.state.times_wrong += 1 # increments times user guessed wrong~ ** Processing line: ~ queue_click_feedback args, 0, 0, args.grid.w, args.grid.h, 200, 100, 100 # red shown is user guesses wrong~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Creates a collection of all of the available notes as symbols~ ** Processing line: ~ def available_notes~ ** Processing line: ~ [:C3, :D3, :E3, :F3, :G3, :A3, :B3, :C4]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Creates buttons for each note, and sets a label (the note's name) and border for each note's button.~ ** Processing line: ~ def piano_button args, note, position~ ** Processing line: ~ args.state.new_entity(:button) do |b| # declares button as new entity~ ** Processing line: ~ b.label = [460 + 40.mult(position), args.grid.h * 0.4, "#{note}", 0, 1, 0, 0, 0] # label definition~ ** Processing line: ~ b.border = { x: 460 + 40.mult(position) - 20, y: args.grid.h * 0.4 - 32, w: 40, h: 40, label: note } # border definition, text/title; 20 subtracted so label is in center of border~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Color of click feedback changes depending on what button was clicked, and whether the guess is right or wrong~ ** Processing line: ~ # If a button is clicked, the inside of button is purple (see input_mouse method)~ ** Processing line: ~ # If correct note is clicked, screen turns green~ ** Processing line: ~ # If incorrect note is clicked, screen turns red (again, see input_mouse method)~ ** Processing line: ~ def queue_click_feedback args, x, y, w, h, *color~ ** Processing line: ~ args.state.click_feedbacks << args.state.new_entity(:click_feedback) do |c| # declares feedback as new entity~ ** Processing line: ~ c.solid = [x, y, w, h, *color, 255] # sets color~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Arcade - Twinstick - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Arcade - Twinstick - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Arcade - Twinstick - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_arcade/twinstick/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.player ||= {x: 600, y: 320, w: 80, h: 80, path: 'sprites/circle-white.png', vx: 0, vy: 0, health: 10, cooldown: 0, score: 0}~ ** Processing line: ~ args.state.enemies ||= []~ ** Processing line: ~ args.state.player_bullets ||= []~ ** Processing line: ~ args.state.tick_count ||= -1~ ** Processing line: ~ args.state.tick_count += 1~ ** Processing line: ~ spawn_enemies args~ ** Processing line: ~ kill_enemies args~ ** Processing line: ~ move_enemies args~ ** Processing line: ~ move_bullets args~ ** Processing line: ~ move_player args~ ** Processing line: ~ fire_player args~ ** Processing line: ~ args.state.player[:r] = args.state.player[:g] = args.state.player[:b] = (args.state.player[:health] * 25.5).clamp(0, 255)~ ** Processing line: ~ label_color = args.state.player[:health] <= 5 ? 255 : 0~ ** Processing line: ~ args.outputs.labels << [~ ** Processing line: ~ {~ ** Processing line: ~ x: args.state.player.x + 40, y: args.state.player.y + 60, alignment_enum: 1, text: "#{args.state.player[:health]} HP",~ ** Processing line: ~ r: label_color, g: label_color, b: label_color~ ** Processing line: ~ }, {~ ** Processing line: ~ x: args.state.player.x + 40, y: args.state.player.y + 40, alignment_enum: 1, text: "#{args.state.player[:score]} PTS",~ ** Processing line: ~ r: label_color, g: label_color, b: label_color, size_enum: 2 - args.state.player[:score].to_s.length,~ ** Processing line: ~ }~ ** Processing line: ~ ]~ ** Processing line: ~ args.outputs.sprites << [args.state.player, args.state.enemies, args.state.player_bullets]~ ** Processing line: ~ args.state.clear! if args.state.player[:health] < 0 # Reset the game if the player's health drops below zero~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def spawn_enemies args~ ** Processing line: ~ # Spawn enemies more frequently as the player's score increases.~ ** Processing line: ~ if rand < (100+args.state.player[:score])/(10000 + args.state.player[:score]) || args.state.tick_count.zero?~ ** Processing line: ~ theta = rand * Math::PI * 2~ ** Processing line: ~ args.state.enemies << {~ ** Processing line: ~ x: 600 + Math.cos(theta) * 800, y: 320 + Math.sin(theta) * 800, w: 80, h: 80, path: 'sprites/circle-white.png',~ ** Processing line: ~ r: (256 * rand).floor, g: (256 * rand).floor, b: (256 * rand).floor~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def kill_enemies args~ ** Processing line: ~ args.state.enemies.reject! do |enemy|~ ** Processing line: ~ # Check if enemy and player are within 80 pixels of each other (i.e. overlapping)~ ** Processing line: ~ if 6400 > (enemy.x - args.state.player.x) ** 2 + (enemy.y - args.state.player.y) ** 2~ ** Processing line: ~ # Enemy is touching player. Kill enemy, and reduce player HP by 1.~ ** Processing line: ~ args.state.player[:health] -= 1~ ** Processing line: ~ else~ ** Processing line: ~ args.state.player_bullets.any? do |bullet|~ ** Processing line: ~ # Check if enemy and bullet are within 50 pixels of each other (i.e. overlapping)~ ** Processing line: ~ if 2500 > (enemy.x - bullet.x + 30) ** 2 + (enemy.y - bullet.y + 30) ** 2~ ** Processing line: ~ # Increase player health by one for each enemy killed by a bullet after the first enemy, up to a maximum of 10 HP~ ** Processing line: ~ args.state.player[:health] += 1 if args.state.player[:health] < 10 && bullet[:kills] > 0~ ** Processing line: ~ # Keep track of how many enemies have been killed by this particular bullet~ ** Processing line: ~ bullet[:kills] += 1~ ** Processing line: ~ # Earn more points by killing multiple enemies with one shot.~ ** Processing line: ~ args.state.player[:score] += bullet[:kills]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_enemies args~ ** Processing line: ~ args.state.enemies.each do |enemy|~ ** Processing line: ~ # Get the angle from the enemy to the player~ ** Processing line: ~ theta = Math.atan2(enemy.y - args.state.player.y, enemy.x - args.state.player.x)~ ** Processing line: ~ # Convert the angle to a vector pointing at the player~ ** Processing line: ~ dx, dy = theta.to_degrees.vector 5~ ** Processing line: ~ # Move the enemy towards thr player~ ** Processing line: ~ enemy.x -= dx~ ** Processing line: ~ enemy.y -= dy~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_bullets args~ ** Processing line: ~ args.state.player_bullets.each do |bullet|~ ** Processing line: ~ # Move the bullets according to the bullet's velocity~ ** Processing line: ~ bullet.x += bullet[:vx]~ ** Processing line: ~ bullet.y += bullet[:vy]~ ** Processing line: ~ end~ ** Processing line: ~ args.state.player_bullets.reject! do |bullet|~ ** Processing line: ~ # Despawn bullets that are outside the screen area~ ** Processing line: ~ bullet.x < -20 || bullet.y < -20 || bullet.x > 1300 || bullet.y > 740~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_player args~ ** Processing line: ~ # Get the currently held direction.~ ** Processing line: ~ dx, dy = move_directional_vector args~ ** Processing line: ~ # Take the weighted average of the old velocities and the desired velocities.~ ** Processing line: ~ # Since move_directional_vector returns values between -1 and 1,~ ** Processing line: ~ # and we want to limit the speed to 7.5, we multiply dx and dy by 7.5*0.1 to get 0.75~ ** Processing line: ~ args.state.player[:vx] = args.state.player[:vx] * 0.9 + dx * 0.75~ ** Processing line: ~ args.state.player[:vy] = args.state.player[:vy] * 0.9 + dy * 0.75~ ** Processing line: ~ # Move the player~ ** Processing line: ~ args.state.player.x += args.state.player[:vx]~ ** Processing line: ~ args.state.player.y += args.state.player[:vy]~ ** Processing line: ~ # If the player is about to go out of bounds, put them back in bounds.~ ** Processing line: ~ args.state.player.x = args.state.player.x.clamp(0, 1201)~ ** Processing line: ~ args.state.player.y = args.state.player.y.clamp(0, 640)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def fire_player args~ ** Processing line: ~ # Reduce the firing cooldown each tick~ ** Processing line: ~ args.state.player[:cooldown] -= 1~ ** Processing line: ~ # If the player is allowed to fire~ ** Processing line: ~ if args.state.player[:cooldown] <= 0~ ** Processing line: ~ dx, dy = shoot_directional_vector args # Get the bullet velocity~ ** Processing line: ~ return if dx == 0 && dy == 0 # If the velocity is zero, the player doesn't want to fire. Therefore, we just return early.~ ** Processing line: ~ # Add a new bullet to the list of player bullets.~ ** Processing line: ~ args.state.player_bullets << {~ ** Processing line: ~ x: args.state.player.x + 30 + 40 * dx,~ ** Processing line: ~ y: args.state.player.y + 30 + 40 * dy,~ ** Processing line: ~ w: 20, h: 20,~ ** Processing line: ~ path: 'sprites/circle-white.png',~ ** Processing line: ~ r: 0, g: 0, b: 0,~ ** Processing line: ~ vx: 10 * dx + args.state.player[:vx] / 7.5, vy: 10 * dy + args.state.player[:vy] / 7.5, # Factor in a bit of the player's velocity~ ** Processing line: ~ kills: 0~ ** Processing line: ~ }~ ** Processing line: ~ args.state.player[:cooldown] = 30 # Reset the cooldown~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Custom function for getting a directional vector just for movement using WASD~ ** Processing line: ~ def move_directional_vector args~ ** Processing line: ~ dx = 0~ ** Processing line: ~ dx += 1 if args.inputs.keyboard.d~ ** Processing line: ~ dx -= 1 if args.inputs.keyboard.a~ ** Processing line: ~ dy = 0~ ** Processing line: ~ dy += 1 if args.inputs.keyboard.w~ ** Processing line: ~ dy -= 1 if args.inputs.keyboard.s~ ** Processing line: ~ if dx != 0 && dy != 0~ ** Processing line: ~ dx *= 0.7071~ ** Processing line: ~ dy *= 0.7071~ ** Processing line: ~ end~ ** Processing line: ~ [dx, dy]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Custom function for getting a directional vector just for shooting using the arrow keys~ ** Processing line: ~ def shoot_directional_vector args~ ** Processing line: ~ dx = 0~ ** Processing line: ~ dx += 1 if args.inputs.keyboard.key_down.right || args.inputs.keyboard.key_held.right~ ** Processing line: ~ dx -= 1 if args.inputs.keyboard.key_down.left || args.inputs.keyboard.key_held.left~ ** Processing line: ~ dy = 0~ ** Processing line: ~ dy += 1 if args.inputs.keyboard.key_down.up || args.inputs.keyboard.key_held.up~ ** Processing line: ~ dy -= 1 if args.inputs.keyboard.key_down.down || args.inputs.keyboard.key_held.down~ ** Processing line: ~ if dx != 0 && dy != 0~ ** Processing line: ~ dx *= 0.7071~ ** Processing line: ~ dy *= 0.7071~ ** Processing line: ~ end~ ** Processing line: ~ [dx, dy]~ ** Processing line: ~ end~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Crafting - Craft Game Starting Point - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Crafting - Craft Game Starting Point - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Crafting - Craft Game Starting Point - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_crafting/craft_game_starting_point/app/main.rb~ ** Processing line: ~ # ==================================================~ ** Processing line: ~ # A NOTE TO JAM CRAFT PARTICIPANTS:~ ** Processing line: ~ # The comments and code in here are just as small piece of DragonRuby's capabilities.~ ** Processing line: ~ # Be sure to check out the rest of the sample apps. Start with README.txt and go from there!~ ** Processing line: ~ # ==================================================~ ** Processing line: ~~ ** Processing line: ~ # def tick args is the entry point into your game. This function is called at~ ** Processing line: ~ # a fixed update time of 60hz (60 fps).~ ** Processing line: ~ def tick args~ ** Processing line: ~ # The defaults function intitializes the game.~ ** Processing line: ~ defaults args~ ** Processing line: ~~ ** Processing line: ~ # After the game is initialized, render it.~ ** Processing line: ~ render args~ ** Processing line: ~~ ** Processing line: ~ # After rendering the player should be able to respond to input.~ ** Processing line: ~ input args~ ** Processing line: ~~ ** Processing line: ~ # After responding to input, the game performs any additional calculations.~ ** Processing line: ~ calc args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults args~ ** Processing line: ~ # hide the mouse cursor for this game, we are going to render our own cursor~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.gtk.hide_cursor~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.click_ripples ||= []~ ** Processing line: ~~ ** Processing line: ~ # everything is on a 1280x720 virtual canvas, so you can~ ** Processing line: ~ # hardcode locations~ ** Processing line: ~~ ** Processing line: ~ # define the borders for where the inventory is located~ ** Processing line: ~ # args.state is a data structure that accepts any arbitrary parameters~ ** Processing line: ~ # so you can create an object graph without having to create any classes.~ ** Processing line: ~~ ** Processing line: ~ # Bottom left is 0, 0. Top right is 1280, 720.~ ** Processing line: ~ # The inventory area is at the top of the screen~ ** Processing line: ~ # the number 80 is the size of all the sprites, so that is what is being~ ** Processing line: ~ # used to decide the with and height~ ** Processing line: ~ args.state.sprite_size = 80~ ** Processing line: ~~ ** Processing line: ~ args.state.inventory_border.w = args.state.sprite_size * 10~ ** Processing line: ~ args.state.inventory_border.h = args.state.sprite_size * 3~ ** Processing line: ~ args.state.inventory_border.x = 10~ ** Processing line: ~ args.state.inventory_border.y = 710 - args.state.inventory_border.h~ ** Processing line: ~~ ** Processing line: ~ # define the borders for where the crafting area is located~ ** Processing line: ~ # the crafting area is below the inventory area~ ** Processing line: ~ # the number 80 is the size of all the sprites, so that is what is being~ ** Processing line: ~ # used to decide the with and height~ ** Processing line: ~ args.state.craft_border.x = 10~ ** Processing line: ~ args.state.craft_border.y = 220~ ** Processing line: ~ args.state.craft_border.w = args.state.sprite_size * 3~ ** Processing line: ~ args.state.craft_border.h = args.state.sprite_size * 3~ ** Processing line: ~~ ** Processing line: ~ # define the area where results are located~ ** Processing line: ~ # the crafting result is to the right of the craft area~ ** Processing line: ~ args.state.result_border.x = 10 + args.state.sprite_size * 3 + args.state.sprite_size~ ** Processing line: ~ args.state.result_border.y = 220 + args.state.sprite_size~ ** Processing line: ~ args.state.result_border.w = args.state.sprite_size~ ** Processing line: ~ args.state.result_border.h = args.state.sprite_size~ ** Processing line: ~~ ** Processing line: ~ # initialize items for the first time if they are nil~ ** Processing line: ~ # you start with 15 wood, 1 chest, and 5 plank~ ** Processing line: ~ # Ruby has built in syntax for dictionaries (they look a lot like json objects).~ ** Processing line: ~ # Ruby also has a special type called a Symbol denoted with a : followed by a word.~ ** Processing line: ~ # Symbols are nice because they remove the need for magic strings.~ ** Processing line: ~ if !args.state.items~ ** Processing line: ~ args.state.items = [~ ** Processing line: ~ {~ ** Processing line: ~ id: :wood, # :wood is a Symbol, this is better than using "wood" for the id~ ** Processing line: ~ quantity: 15,~ ** Processing line: ~ path: 'sprites/wood.png',~ ** Processing line: ~ location: :inventory,~ ** Processing line: ~ ordinal_x: 0, ordinal_y: 0~ ** Processing line: ~ },~ ** Processing line: ~ {~ ** Processing line: ~ id: :chest,~ ** Processing line: ~ quantity: 1,~ ** Processing line: ~ path: 'sprites/chest.png',~ ** Processing line: ~ location: :inventory,~ ** Processing line: ~ ordinal_x: 1, ordinal_y: 0~ ** Processing line: ~ },~ ** Processing line: ~ {~ ** Processing line: ~ id: :plank,~ ** Processing line: ~ quantity: 5,~ ** Processing line: ~ path: 'sprites/plank.png',~ ** Processing line: ~ location: :inventory,~ ** Processing line: ~ ordinal_x: 2, ordinal_y: 0~ ** Processing line: ~ },~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ # after initializing the oridinal positions, derive the pixel~ ** Processing line: ~ # locations assuming that the width and height are 80~ ** Processing line: ~ args.state.items.each { |item| set_inventory_position args, item }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # define all the oridinal positions of the inventory slots~ ** Processing line: ~ if !args.state.inventory_area~ ** Processing line: ~ args.state.inventory_area = [~ ** Processing line: ~ { ordinal_x: 0, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 1, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 2, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 3, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 4, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 5, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 6, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 7, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 8, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 9, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 0, ordinal_y: 1 },~ ** Processing line: ~ { ordinal_x: 1, ordinal_y: 1 },~ ** Processing line: ~ { ordinal_x: 2, ordinal_y: 1 },~ ** Processing line: ~ { ordinal_x: 3, ordinal_y: 1 },~ ** Processing line: ~ { ordinal_x: 4, ordinal_y: 1 },~ ** Processing line: ~ { ordinal_x: 5, ordinal_y: 1 },~ ** Processing line: ~ { ordinal_x: 6, ordinal_y: 1 },~ ** Processing line: ~ { ordinal_x: 7, ordinal_y: 1 },~ ** Processing line: ~ { ordinal_x: 8, ordinal_y: 1 },~ ** Processing line: ~ { ordinal_x: 9, ordinal_y: 1 },~ ** Processing line: ~ { ordinal_x: 0, ordinal_y: 2 },~ ** Processing line: ~ { ordinal_x: 1, ordinal_y: 2 },~ ** Processing line: ~ { ordinal_x: 2, ordinal_y: 2 },~ ** Processing line: ~ { ordinal_x: 3, ordinal_y: 2 },~ ** Processing line: ~ { ordinal_x: 4, ordinal_y: 2 },~ ** Processing line: ~ { ordinal_x: 5, ordinal_y: 2 },~ ** Processing line: ~ { ordinal_x: 6, ordinal_y: 2 },~ ** Processing line: ~ { ordinal_x: 7, ordinal_y: 2 },~ ** Processing line: ~ { ordinal_x: 8, ordinal_y: 2 },~ ** Processing line: ~ { ordinal_x: 9, ordinal_y: 2 },~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ # after initializing the oridinal positions, derive the pixel~ ** Processing line: ~ # locations assuming that the width and height are 80~ ** Processing line: ~ args.state.inventory_area.each { |i| set_inventory_position args, i }~ ** Processing line: ~~ ** Processing line: ~ # if you want to see the result you can use the Ruby function called "puts".~ ** Processing line: ~ # Uncomment this line to see the value.~ ** Processing line: ~ # puts args.state.inventory_area~ ** Processing line: ~~ ** Processing line: ~ # You can see all things written via puts in DragonRuby's Console, or under logs/log.txt.~ ** Processing line: ~ # To bring up DragonRuby's Console, press the ~ key within the game.~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # define all the oridinal positions of the craft slots~ ** Processing line: ~ if !args.state.craft_area~ ** Processing line: ~ args.state.craft_area = [~ ** Processing line: ~ { ordinal_x: 0, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 0, ordinal_y: 1 },~ ** Processing line: ~ { ordinal_x: 0, ordinal_y: 2 },~ ** Processing line: ~ { ordinal_x: 1, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 1, ordinal_y: 1 },~ ** Processing line: ~ { ordinal_x: 1, ordinal_y: 2 },~ ** Processing line: ~ { ordinal_x: 2, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 2, ordinal_y: 1 },~ ** Processing line: ~ { ordinal_x: 2, ordinal_y: 2 },~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ # after initializing the oridinal positions, derive the pixel~ ** Processing line: ~ # locations assuming that the width and height are 80~ ** Processing line: ~ args.state.craft_area.each { |c| set_craft_position args, c }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def render args~ ** Processing line: ~ # for the results area, create a sprite that show its boundaries~ ** Processing line: ~ args.outputs.primitives << { x: args.state.result_border.x,~ ** Processing line: ~ y: args.state.result_border.y,~ ** Processing line: ~ w: args.state.result_border.w,~ ** Processing line: ~ h: args.state.result_border.h,~ ** Processing line: ~ path: 'sprites/border-black.png' }~ ** Processing line: ~~ ** Processing line: ~ # for each inventory spot, create a sprite~ ** Processing line: ~ # args.outputs.primitives is how DragonRuby performs a render.~ ** Processing line: ~ # Adding a single hash or multiple hashes to this array will tell~ ** Processing line: ~ # DragonRuby to render those primitives on that frame.~ ** Processing line: ~~ ** Processing line: ~ # The .map function on Array is used instead of any kind of looping.~ ** Processing line: ~ # .map returns a new object for every object within an Array.~ ** Processing line: ~ args.outputs.primitives << args.state.inventory_area.map do |a|~ ** Processing line: ~ { x: a.x, y: a.y, w: a.w, h: a.h, path: 'sprites/border-black.png' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # for each craft spot, create a sprite~ ** Processing line: ~ args.outputs.primitives << args.state.craft_area.map do |a|~ ** Processing line: ~ { x: a.x, y: a.y, w: a.w, h: a.h, path: 'sprites/border-black.png' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # after the borders have been rendered, render the~ ** Processing line: ~ # items within those slots (and allow for highlighting)~ ** Processing line: ~ # if an item isn't currently being held~ ** Processing line: ~ allow_inventory_highlighting = !args.state.held_item~ ** Processing line: ~~ ** Processing line: ~ # go through each item and render them~ ** Processing line: ~ # use Array's find_all method to remove any items that are currently being held~ ** Processing line: ~ args.state.items.find_all { |item| item[:location] != :held }.map do |item|~ ** Processing line: ~ # if an item is currently being held, don't render it in it's spot within the~ ** Processing line: ~ # inventory or craft area (this is handled via the find_all method).~ ** Processing line: ~~ ** Processing line: ~ # the item_prefab returns a hash containing all the visual components of an item.~ ** Processing line: ~ # the main sprite, the black background, the quantity text, and a hover indication~ ** Processing line: ~ # if the mouse is currently hovering over the item.~ ** Processing line: ~ args.outputs.primitives << item_prefab(args, item, allow_inventory_highlighting, args.inputs.mouse)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The last thing we want to render is the item currently being held.~ ** Processing line: ~ args.outputs.primitives << item_prefab(args, args.state.held_item, allow_inventory_highlighting, args.inputs.mouse)~ ** Processing line: ~~ ** Processing line: ~ args.outputs.primitives << args.state.click_ripples~ ** Processing line: ~~ ** Processing line: ~ # render a mouse cursor since we have the OS cursor hidden~ ** Processing line: ~ args.outputs.primitives << { x: args.inputs.mouse.x - 5, y: args.inputs.mouse.y - 5, w: 10, h: 10, path: 'sprites/circle-gray.png', a: 128 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Alrighty! This is where all the fun happens~ ** Processing line: ~ def input args~ ** Processing line: ~ # if the mouse is clicked and not item is currently being held~ ** Processing line: ~ # args.state.held_item is nil when the game starts.~ ** Processing line: ~ # If the player clicks, the property args.inputs.mouse.click will~ ** Processing line: ~ # be a non nil value, we don't want to process any of the code here~ ** Processing line: ~ # if the mouse hasn't been clicked~ ** Processing line: ~ return if !args.inputs.mouse.click~ ** Processing line: ~~ ** Processing line: ~ # if a click occurred, add a ripple to the ripple queue~ ** Processing line: ~ args.state.click_ripples << { x: args.inputs.mouse.x - 5, y: args.inputs.mouse.y - 5, w: 10, h: 10, path: 'sprites/circle-gray.png', a: 128 }~ ** Processing line: ~~ ** Processing line: ~ # if the mouse has been clicked, and no item is currently held...~ ** Processing line: ~ if !args.state.held_item~ ** Processing line: ~ # see if any of the items intersect the pointer using the inside_rect? method~ ** Processing line: ~ # the find method will either return the first object that returns true~ ** Processing line: ~ # for the match clause, or it'll return nil if nothing matches the match clause~ ** Processing line: ~ found = args.state.items.find do |item|~ ** Processing line: ~ # for each item in args.state.items, run the following boolean check~ ** Processing line: ~ args.inputs.mouse.click.point.inside_rect?(item)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if an item intersects the mouse pointer, then set the item's location to :held and~ ** Processing line: ~ # set args.state.held_item to the item for later reference~ ** Processing line: ~ if found~ ** Processing line: ~ args.state.held_item = found~ ** Processing line: ~ found[:location] = :held~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if the mouse is clicked and an item is currently beign held....~ ** Processing line: ~ elsif args.state.held_item~ ** Processing line: ~ # determine if a slot within the craft area was clicked~ ** Processing line: ~ craft_area = args.state.craft_area.find { |a| args.inputs.mouse.click.point.inside_rect? a }~ ** Processing line: ~~ ** Processing line: ~ # also determine if a slot within the inventory area was clicked~ ** Processing line: ~ inventory_area = args.state.inventory_area.find { |a| args.inputs.mouse.click.point.inside_rect? a }~ ** Processing line: ~~ ** Processing line: ~ # if the click was within a craft area~ ** Processing line: ~ if craft_area~ ** Processing line: ~ # check to see if an item is already there and ignore the click if an item is found~ ** Processing line: ~ # item_at_craft_slot is a helper method that returns an item or nil for a given oridinal~ ** Processing line: ~ # position~ ** Processing line: ~ item_already_there = item_at_craft_slot args, craft_area[:ordinal_x], craft_area[:ordinal_y]~ ** Processing line: ~~ ** Processing line: ~ # if an item *doesn't* exist in the craft area~ ** Processing line: ~ if !item_already_there~ ** Processing line: ~ # if the quantity they are currently holding is greater than 1~ ** Processing line: ~ if args.state.held_item[:quantity] > 1~ ** Processing line: ~ # remove one item (creating a seperate item of the same type), and place it~ ** Processing line: ~ # at the oridinal position and location of the craft area~ ** Processing line: ~ # the .merge method on Hash creates a new Hash, but updates any values~ ** Processing line: ~ # passed as arguments to merge~ ** Processing line: ~ new_item = args.state.held_item.merge(quantity: 1,~ ** Processing line: ~ location: :craft,~ ** Processing line: ~ ordinal_x: craft_area[:ordinal_x],~ ** Processing line: ~ ordinal_y: craft_area[:ordinal_y])~ ** Processing line: ~~ ** Processing line: ~ # after the item is crated, place it into the args.state.items collection~ ** Processing line: ~ args.state.items << new_item~ ** Processing line: ~~ ** Processing line: ~ # then subtract one from the held item~ ** Processing line: ~ args.state.held_item[:quantity] -= 1~ ** Processing line: ~~ ** Processing line: ~ # if the craft area is available and there is only one item being held~ ** Processing line: ~ elsif args.state.held_item[:quantity] == 1~ ** Processing line: ~ # instead of creating any new items just set the location of the held item~ ** Processing line: ~ # to the oridinal position of the craft area, and then nil out the~ ** Processing line: ~ # held item state so that a new item can be picked up~ ** Processing line: ~ args.state.held_item[:location] = :craft~ ** Processing line: ~ args.state.held_item[:ordinal_x] = craft_area[:ordinal_x]~ ** Processing line: ~ args.state.held_item[:ordinal_y] = craft_area[:ordinal_y]~ ** Processing line: ~ args.state.held_item = nil~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if the selected area is an inventory area (as opposed to within the craft area)~ ** Processing line: ~ elsif inventory_area~ ** Processing line: ~~ ** Processing line: ~ # check to see if there is already an item in that inventory slot~ ** Processing line: ~ # the item_at_inventory_slot helper method returns an item or nil~ ** Processing line: ~ item_already_there = item_at_inventory_slot args, inventory_area[:ordinal_x], inventory_area[:ordinal_y]~ ** Processing line: ~~ ** Processing line: ~ # if there is already an item there, and the item types/id match~ ** Processing line: ~ if item_already_there && item_already_there[:id] == args.state.held_item[:id]~ ** Processing line: ~ # then merge the item quantities~ ** Processing line: ~ held_quantity = args.state.held_item[:quantity]~ ** Processing line: ~ item_already_there[:quantity] += held_quantity~ ** Processing line: ~~ ** Processing line: ~ # remove the item being held from the items collection (since it's quantity is now 0)~ ** Processing line: ~ args.state.items.reject! { |i| i[:location] == :held }~ ** Processing line: ~~ ** Processing line: ~ # nil out the held_item so a new item can be picked up~ ** Processing line: ~ args.state.held_item = nil~ ** Processing line: ~~ ** Processing line: ~ # if there currently isn't an item there, then put the held item in the slot~ ** Processing line: ~ elsif !item_already_there~ ** Processing line: ~ args.state.held_item[:location] = :inventory~ ** Processing line: ~ args.state.held_item[:ordinal_x] = inventory_area[:ordinal_x]~ ** Processing line: ~ args.state.held_item[:ordinal_y] = inventory_area[:ordinal_y]~ ** Processing line: ~~ ** Processing line: ~ # nil out the held_item so a new item can be picked up~ ** Processing line: ~ args.state.held_item = nil~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # the calc method is executed after input~ ** Processing line: ~ def calc args~ ** Processing line: ~ # make sure that the real position of the inventory~ ** Processing line: ~ # items are updated every frame to ensure that they~ ** Processing line: ~ # are placed correctly given their location and oridinal positions~ ** Processing line: ~ # instead of using .map, here we use .each (since we are not returning a new item and just updating the items in place)~ ** Processing line: ~ args.state.items.each do |item|~ ** Processing line: ~ # based on the location of the item, invoke the correct pixel conversion method~ ** Processing line: ~ if item[:location] == :inventory~ ** Processing line: ~ set_inventory_position args, item~ ** Processing line: ~ elsif item[:location] == :craft~ ** Processing line: ~ set_craft_position args, item~ ** Processing line: ~ elsif item[:location] == :held~ ** Processing line: ~ # if the item is held, center the item around the mouse pointer~ ** Processing line: ~ args.state.held_item.x = args.inputs.mouse.x - args.state.held_item.w.half~ ** Processing line: ~ args.state.held_item.y = args.inputs.mouse.y - args.state.held_item.h.half~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # for each hash/sprite in the click ripples queue,~ ** Processing line: ~ # expand its size by 20 percent and decrease its alpha~ ** Processing line: ~ # by 10.~ ** Processing line: ~ args.state.click_ripples.each do |ripple|~ ** Processing line: ~ delta_w = ripple.w * 1.2 - ripple.w~ ** Processing line: ~ delta_h = ripple.h * 1.2 - ripple.h~ ** Processing line: ~ ripple.x -= delta_w.half~ ** Processing line: ~ ripple.y -= delta_h.half~ ** Processing line: ~ ripple.w += delta_w~ ** Processing line: ~ ripple.h += delta_h~ ** Processing line: ~ ripple.a -= 10~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # remove any items from the collection where the alpha value is less than equal to~ ** Processing line: ~ # zero using the reject! method (reject with an exclamation point at the end changes the~ ** Processing line: ~ # array value in place, while reject without the exclamation point returns a new array).~ ** Processing line: ~ args.state.click_ripples.reject! { |ripple| ripple.a <= 0 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # helper function for finding an item at a craft slot~ ** Processing line: ~ def item_at_craft_slot args, ordinal_x, ordinal_y~ ** Processing line: ~ args.state.items.find { |i| i[:location] == :craft && i[:ordinal_x] == ordinal_x && i[:ordinal_y] == ordinal_y }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # helper function for finding an item at an inventory slot~ ** Processing line: ~ def item_at_inventory_slot args, ordinal_x, ordinal_y~ ** Processing line: ~ args.state.items.find { |i| i[:location] == :inventory && i[:ordinal_x] == ordinal_x && i[:ordinal_y] == ordinal_y }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # helper function that creates a visual representation of an item~ ** Processing line: ~ def item_prefab args, item, should_highlight, mouse~ ** Processing line: ~ return nil unless item~ ** Processing line: ~~ ** Processing line: ~ overlay = nil~ ** Processing line: ~~ ** Processing line: ~ x = item.x~ ** Processing line: ~ y = item.y~ ** Processing line: ~ w = item.w~ ** Processing line: ~ h = item.h~ ** Processing line: ~~ ** Processing line: ~ if should_highlight && mouse.point.inside_rect?(item)~ ** Processing line: ~ overlay = { x: x, y: y, w: w, h: h, path: "sprites/square-blue.png", a: 130, }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ [~ ** Processing line: ~ # sprites are hashes with a path property, this is the main sprite~ ** Processing line: ~ { x: x, y: y, w: args.state.sprite_size, h: args.state.sprite_size, path: item[:path], },~ ** Processing line: ~~ ** Processing line: ~ # this represents the black area in the bottom right corner of the main sprite so that the~ ** Processing line: ~ # quantity is visible~ ** Processing line: ~ { x: x + 55, y: y, w: 25, h: 25, path: "sprites/square-black.png", }, # sprites are hashes with a path property~ ** Processing line: ~~ ** Processing line: ~ # labels are hashes with a text property~ ** Processing line: ~ { x: x + 56, y: y + 22, text: "#{item[:quantity]}", r: 255, g: 255, b: 255, },~ ** Processing line: ~~ ** Processing line: ~ # this is the mouse overlay, if the overlay isn't applicable, then this value will be nil (nil values will not be rendered)~ ** Processing line: ~ overlay~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # helper function for deriving the position of an item within inventory~ ** Processing line: ~ def set_inventory_position args, item~ ** Processing line: ~ item.x = args.state.inventory_border.x + item[:ordinal_x] * 80~ ** Processing line: ~ item.y = (args.state.inventory_border.y + args.state.inventory_border.h - 80) - item[:ordinal_y] * 80~ ** Processing line: ~ item.w = 80~ ** Processing line: ~ item.h = 80~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # helper function for deriving the position of an item within the craft area~ ** Processing line: ~ def set_craft_position args, item~ ** Processing line: ~ item.x = args.state.craft_border.x + item[:ordinal_x] * 80~ ** Processing line: ~ item.y = (args.state.craft_border.y + args.state.inventory_border.h - 80) - item[:ordinal_y] * 80~ ** Processing line: ~ item.w = 80~ ** Processing line: ~ item.h = 80~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Any lines outside of a function will be executed when the file is reloaded.~ ** Processing line: ~ # So every time you save main.rb, the game will be reset.~ ** Processing line: ~ # Comment out the line below if you don't want this to happen.~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Crafting - Farming Game Starting Point - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Crafting - Farming Game Starting Point - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Crafting - Farming Game Starting Point - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_crafting/farming_game_starting_point/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.tile_size = 80~ ** Processing line: ~ args.state.player_speed = 4~ ** Processing line: ~ args.state.player ||= tile(args, 7, 3, 0, 128, 180)~ ** Processing line: ~ generate_map args~ ** Processing line: ~ #press j to plant a green onion~ ** Processing line: ~ if args.inputs.keyboard.j~ ** Processing line: ~ #change this part you can change what you want to plant~ ** Processing line: ~ args.state.walls << tile(args, ((args.state.player.x+80)/args.state.tile_size), ((args.state.player.y)/args.state.tile_size), 255, 255, 255)~ ** Processing line: ~ args.state.plants << tile(args, ((args.state.player.x+80)/args.state.tile_size), ((args.state.player.y+80)/args.state.tile_size), 0, 160, 0)~ ** Processing line: ~ end~ ** Processing line: ~ # Adds walls, background, and player to args.outputs.solids so they appear on screen~ ** Processing line: ~ args.outputs.solids << [0,0,1280,720, 237,189,101]~ ** Processing line: ~ args.outputs.sprites << [0, 0, 1280, 720, 'sprites/background.png']~ ** Processing line: ~ args.outputs.solids << args.state.walls~ ** Processing line: ~ args.outputs.solids << args.state.player~ ** Processing line: ~ args.outputs.solids << args.state.plants~ ** Processing line: ~ args.outputs.labels << [320, 640, "press J to plant", 3, 1, 255, 0, 0, 200]~ ** Processing line: ~~ ** Processing line: ~ move_player args, -1, 0 if args.inputs.keyboard.left # x position decreases by 1 if left key is pressed~ ** Processing line: ~ move_player args, 1, 0 if args.inputs.keyboard.right # x position increases by 1 if right key is pressed~ ** Processing line: ~ move_player args, 0, 1 if args.inputs.keyboard.up # y position increases by 1 if up is pressed~ ** Processing line: ~ move_player args, 0, -1 if args.inputs.keyboard.down # y position decreases by 1 if down is pressed~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets position, size, and color of the tile~ ** Processing line: ~ def tile args, x, y, *color~ ** Processing line: ~ [x * args.state.tile_size, # sets definition for array using method parameters~ ** Processing line: ~ y * args.state.tile_size, # multiplying by tile_size sets x and y to correct position using pixel values~ ** Processing line: ~ args.state.tile_size,~ ** Processing line: ~ args.state.tile_size,~ ** Processing line: ~ *color]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Creates map by adding tiles to the wall, as well as a goal (that the player needs to reach)~ ** Processing line: ~ def generate_map args~ ** Processing line: ~ return if args.state.area~ ** Processing line: ~~ ** Processing line: ~ # Creates the area of the map. There are 9 rows running horizontally across the screen~ ** Processing line: ~ # and 16 columns running vertically on the screen. Any spot with a "1" is not~ ** Processing line: ~ # open for the player to move into (and is green), and any spot with a "0" is available~ ** Processing line: ~ # for the player to move in.~ ** Processing line: ~ args.state.area = [~ ** Processing line: ~ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,],~ ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,],~ ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,],~ ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,],~ ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,],~ ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,],~ ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,],~ ** Processing line: ~ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,],~ ** Processing line: ~ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],~ ** Processing line: ~ ].reverse # reverses the order of the area collection~ ** Processing line: ~~ ** Processing line: ~ # By reversing the order, the way that the area appears above is how it appears~ ** Processing line: ~ # on the screen in the game. If we did not reverse, the map would appear inverted.~ ** Processing line: ~~ ** Processing line: ~ #The wall starts off with no tiles.~ ** Processing line: ~ args.state.walls = []~ ** Processing line: ~ args.state.plants = []~ ** Processing line: ~~ ** Processing line: ~ # If v is 1, a green tile is added to args.state.walls.~ ** Processing line: ~ # If v is 2, a black tile is created as the goal.~ ** Processing line: ~ args.state.area.map_2d do |y, x, v|~ ** Processing line: ~ if v == 1~ ** Processing line: ~ args.state.walls << tile(args, x, y, 255, 160, 156) # green tile~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Allows the player to move their box around the screen~ ** Processing line: ~ def move_player args, *vector~ ** Processing line: ~ box = args.state.player.shift_rect(vector) # box is able to move at an angle~ ** Processing line: ~~ ** Processing line: ~ # If the player's box hits a wall, it is not able to move further in that direction~ ** Processing line: ~ return if args.state.walls~ ** Processing line: ~ .any_intersect_rect?(box)~ ** Processing line: ~~ ** Processing line: ~ # Player's box is able to move at angles (not just the four general directions) fast~ ** Processing line: ~ args.state.player =~ ** Processing line: ~ args.state.player~ ** Processing line: ~ .shift_rect(vector.x * args.state.player_speed, # if we don't multiply by speed, then~ ** Processing line: ~ vector.y * args.state.player_speed) # the box will move extremely slow~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Crafting - Farming Game Starting Point - tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Crafting - Farming Game Starting Point - tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Crafting - Farming Game Starting Point - tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_crafting/farming_game_starting_point/app/tests.rb~ ** Processing line: ~ # For advanced users:~ ** Processing line: ~ # You can put some quick verification tests here, any method~ ** Processing line: ~ # that starts with the `test_` will be run when you save this file.~ ** Processing line: ~~ ** Processing line: ~ # Here is an example test and game~ ** Processing line: ~~ ** Processing line: ~ # To run the test: ./dragonruby mygame --eval app/tests.rb --no-tick~ ** Processing line: ~~ ** Processing line: ~ class MySuperHappyFunGame~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ outputs.solids << [100, 100, 300, 300]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_universe args, assert~ ** Processing line: ~ game = MySuperHappyFunGame.new~ ** Processing line: ~ game.args = args~ ** Processing line: ~ game.tick~ ** Processing line: ~ assert.true! args.outputs.solids.length == 1, "failure: a solid was not added after tick"~ ** Processing line: ~ assert.false! 1 == 2, "failure: some how, 1 equals 2, the world is ending"~ ** Processing line: ~ puts "test_universe completed successfully"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ puts "running tests"~ ** Processing line: ~ $gtk.reset 100~ ** Processing line: ~ $gtk.log_level = :off~ ** Processing line: ~ $gtk.tests.start~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Dev Tools - Add Buttons To Console - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Dev Tools - Add Buttons To Console - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Dev Tools - Add Buttons To Console - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_dev_tools/add_buttons_to_console/app/main.rb~ ** Processing line: ~ # You can customize the buttons that show up in the Console.~ ** Processing line: ~ class GTK::Console::Menu~ ** Processing line: ~ # STEP 1: Override the custom_buttons function.~ ** Processing line: ~ def custom_buttons~ ** Processing line: ~ [~ ** Processing line: ~ (button id: :yay,~ ** Processing line: ~ # row for button~ ** Processing line: ~ row: 3,~ ** Processing line: ~ # column for button~ ** Processing line: ~ col: 10,~ ** Processing line: ~ # text~ ** Processing line: ~ text: "I AM CUSTOM",~ ** Processing line: ~ # when clicked call the custom_button_clicked function~ ** Processing line: ~ method: :custom_button_clicked),~ ** Processing line: ~~ ** Processing line: ~ (button id: :yay,~ ** Processing line: ~ # row for button~ ** Processing line: ~ row: 3,~ ** Processing line: ~ # column for button~ ** Processing line: ~ col: 9,~ ** Processing line: ~ # text~ ** Processing line: ~ text: "CUSTOM ALSO",~ ** Processing line: ~ # when clicked call the custom_button_also_clicked function~ ** Processing line: ~ method: :custom_button_also_clicked)~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # STEP 2: Define the function that should be called.~ ** Processing line: ~ def custom_button_clicked~ ** Processing line: ~ log "* INFO: I AM CUSTOM was clicked!"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def custom_button_also_clicked~ ** Processing line: ~ log "* INFO: Custom Button Clicked at #{Kernel.global_tick_count}!"~ ** Processing line: ~~ ** Processing line: ~ all_buttons_as_string = $gtk.console.menu.buttons.map do |b|~ ** Processing line: ~ <<-S.strip~ ** Processing line: ~ ** id: #{b[:id]}~ ** Processing line: ~ :PROPERTIES:~ ** Processing line: ~ :id: :#{b[:id]}~ ** Processing line: ~ :method: :#{b[:method]}~ ** Processing line: ~ :text: #{b[:text]}~ ** Processing line: ~ :END:~ ** Processing line: ~ S~ ** Processing line: ~ end.join("\n")~ ** Processing line: ~~ ** Processing line: ~ log <<-S~ ** Processing line: ~ * INFO: Here are all the buttons:~ ** Processing line: ~ #{all_buttons_as_string}~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.labels << [args.grid.center.x, args.grid.center.y,~ ** Processing line: ~ "Open the DragonRuby Console to see the custom menu items.",~ ** Processing line: ~ 0, 1]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Dev Tools - Animation Creator Starting Point - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Dev Tools - Animation Creator Starting Point - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Dev Tools - Animation Creator Starting Point - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_dev_tools/animation_creator_starting_point/app/main.rb~ ** Processing line: ~ class OneBitLowrezPaint~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ outputs.background_color = [0, 0, 0]~ ** Processing line: ~ defaults~ ** Processing line: ~ render_instructions~ ** Processing line: ~ render_canvas~ ** Processing line: ~ render_buttons_frame_selection~ ** Processing line: ~ render_animation_frame_thumbnails~ ** Processing line: ~ render_animation~ ** Processing line: ~ input_mouse_click~ ** Processing line: ~ input_keyboard~ ** Processing line: ~ calc_auto_export~ ** Processing line: ~ calc_buttons_frame_selection~ ** Processing line: ~ calc_animation_frames~ ** Processing line: ~ process_queue_create_sprite~ ** Processing line: ~ process_queue_reset_sprite~ ** Processing line: ~ process_queue_update_rt_animation_frame~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ state.animation_frames_per_second = 12~ ** Processing line: ~ queues.create_sprite ||= []~ ** Processing line: ~ queues.reset_sprite ||= []~ ** Processing line: ~ queues.update_rt_animation_frame ||= []~ ** Processing line: ~~ ** Processing line: ~ if !state.animation_frames~ ** Processing line: ~ state.animation_frames ||= []~ ** Processing line: ~ add_animation_frame_to_end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.last_mouse_down ||= 0~ ** Processing line: ~ state.last_mouse_up ||= 0~ ** Processing line: ~~ ** Processing line: ~ state.buttons_frame_selection.left = 10~ ** Processing line: ~ state.buttons_frame_selection.top = grid.top - 10~ ** Processing line: ~ state.buttons_frame_selection.size = 20~ ** Processing line: ~~ ** Processing line: ~ defaults_canvas_sprite~ ** Processing line: ~~ ** Processing line: ~ state.edit_mode ||= :drawing~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults_canvas_sprite~ ** Processing line: ~ rt_canvas.size = 16~ ** Processing line: ~ rt_canvas.zoom = 30~ ** Processing line: ~ rt_canvas.width = rt_canvas.size * rt_canvas.zoom~ ** Processing line: ~ rt_canvas.height = rt_canvas.size * rt_canvas.zoom~ ** Processing line: ~ rt_canvas.sprite = { x: 0,~ ** Processing line: ~ y: 0,~ ** Processing line: ~ w: rt_canvas.width,~ ** Processing line: ~ h: rt_canvas.height,~ ** Processing line: ~ path: :rt_canvas }.center_inside_rect(x: 0, y: 0, w: 640, h: 720)~ ** Processing line: ~~ ** Processing line: ~ return unless state.tick_count == 1~ ** Processing line: ~~ ** Processing line: ~ outputs[:rt_canvas].width = rt_canvas.width~ ** Processing line: ~ outputs[:rt_canvas].height = rt_canvas.height~ ** Processing line: ~ outputs[:rt_canvas].sprites << (rt_canvas.size + 1).map_with_index do |x|~ ** Processing line: ~ (rt_canvas.size + 1).map_with_index do |y|~ ** Processing line: ~ path = 'sprites/square-white.png'~ ** Processing line: ~ path = 'sprites/square-blue.png' if x == 7 || x == 8~ ** Processing line: ~ { x: x * rt_canvas.zoom,~ ** Processing line: ~ y: y * rt_canvas.zoom,~ ** Processing line: ~ w: rt_canvas.zoom,~ ** Processing line: ~ h: rt_canvas.zoom,~ ** Processing line: ~ path: path,~ ** Processing line: ~ a: 50 }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_instructions~ ** Processing line: ~ instructions = [~ ** Processing line: ~ "* Hotkeys:",~ ** Processing line: ~ "- d: hold to erase, release to draw.",~ ** Processing line: ~ "- a: add frame.",~ ** Processing line: ~ "- c: copy frame.",~ ** Processing line: ~ "- v: paste frame.",~ ** Processing line: ~ "- x: delete frame.",~ ** Processing line: ~ "- b: go to previous frame.",~ ** Processing line: ~ "- f: go to next frame.",~ ** Processing line: ~ "- w: save to ./canvas directory.",~ ** Processing line: ~ "- l: load from ./canvas."~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ instructions.each.with_index do |l, i|~ ** Processing line: ~ outputs.labels << { x: 840, y: 500 - (i * 20), text: "#{l}",~ ** Processing line: ~ r: 180, g: 180, b: 180, size_enum: 0 }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_canvas~ ** Processing line: ~ return if state.tick_count.zero?~ ** Processing line: ~ outputs.sprites << rt_canvas.sprite~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_buttons_frame_selection~ ** Processing line: ~ args.outputs.primitives << state.buttons_frame_selection.items.map_with_index do |b, i|~ ** Processing line: ~ label = { x: b.x + state.buttons_frame_selection.size.half,~ ** Processing line: ~ y: b.y,~ ** Processing line: ~ text: "#{i + 1}", r: 180, g: 180, b: 180,~ ** Processing line: ~ size_enum: -4, alignment_enum: 1 }.label!~ ** Processing line: ~~ ** Processing line: ~ selection_border = b.merge(r: 40, g: 40, b: 40).border!~ ** Processing line: ~~ ** Processing line: ~ if i == state.animation_frames_selected_index~ ** Processing line: ~ selection_border = b.merge(r: 40, g: 230, b: 200).border!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ [selection_border, label]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_animation_frame_thumbnails~ ** Processing line: ~ return if state.tick_count.zero?~ ** Processing line: ~~ ** Processing line: ~ outputs[:current_animation_frame].width = rt_canvas.size~ ** Processing line: ~ outputs[:current_animation_frame].height = rt_canvas.size~ ** Processing line: ~ outputs[:current_animation_frame].solids << selected_animation_frame[:pixels].map_with_index do |f, i|~ ** Processing line: ~ { x: f.x,~ ** Processing line: ~ y: f.y,~ ** Processing line: ~ w: 1,~ ** Processing line: ~ h: 1, r: 255, g: 255, b: 255 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.sprites << rt_canvas.sprite.merge(path: :current_animation_frame)~ ** Processing line: ~~ ** Processing line: ~ state.animation_frames.map_with_index do |animation_frame, animation_frame_index|~ ** Processing line: ~ outputs.sprites << state.buttons_frame_selection[:items][animation_frame_index][:inner_rect]~ ** Processing line: ~ .merge(path: animation_frame[:rt_name])~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_animation~ ** Processing line: ~ sprite_index = 0.frame_index count: state.animation_frames.length,~ ** Processing line: ~ hold_for: 60 / state.animation_frames_per_second,~ ** Processing line: ~ repeat: true~ ** Processing line: ~~ ** Processing line: ~ args.outputs.sprites << { x: 700 - 8,~ ** Processing line: ~ y: 120,~ ** Processing line: ~ w: 16,~ ** Processing line: ~ h: 16,~ ** Processing line: ~ path: (sprite_path sprite_index) }~ ** Processing line: ~~ ** Processing line: ~ args.outputs.sprites << { x: 700 - 16,~ ** Processing line: ~ y: 230,~ ** Processing line: ~ w: 32,~ ** Processing line: ~ h: 32,~ ** Processing line: ~ path: (sprite_path sprite_index) }~ ** Processing line: ~~ ** Processing line: ~ args.outputs.sprites << { x: 700 - 32,~ ** Processing line: ~ y: 360,~ ** Processing line: ~ w: 64,~ ** Processing line: ~ h: 64,~ ** Processing line: ~ path: (sprite_path sprite_index) }~ ** Processing line: ~~ ** Processing line: ~ args.outputs.sprites << { x: 700 - 64,~ ** Processing line: ~ y: 520,~ ** Processing line: ~ w: 128,~ ** Processing line: ~ h: 128,~ ** Processing line: ~ path: (sprite_path sprite_index) }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_mouse_click~ ** Processing line: ~ if inputs.mouse.up~ ** Processing line: ~ state.last_mouse_up = state.tick_count~ ** Processing line: ~ elsif inputs.mouse.moved && user_is_editing?~ ** Processing line: ~ edit_current_animation_frame inputs.mouse.point~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return unless inputs.mouse.click~ ** Processing line: ~~ ** Processing line: ~ clicked_frame_button = state.buttons_frame_selection.items.find do |b|~ ** Processing line: ~ inputs.mouse.point.inside_rect? b~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if (clicked_frame_button)~ ** Processing line: ~ state.animation_frames_selected_index = clicked_frame_button[:index]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if (inputs.mouse.point.inside_rect? rt_canvas.sprite)~ ** Processing line: ~ state.last_mouse_down = state.tick_count~ ** Processing line: ~ edit_current_animation_frame inputs.mouse.point~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_keyboard~ ** Processing line: ~ # w to save~ ** Processing line: ~ if inputs.keyboard.key_down.w~ ** Processing line: ~ t = Time.now~ ** Processing line: ~ state.save_description = "Time: #{t} (#{t.to_i})"~ ** Processing line: ~ gtk.serialize_state 'canvas/state.txt', state~ ** Processing line: ~ gtk.serialize_state "tmp/canvas_backups/#{t.to_i}/state.txt", state~ ** Processing line: ~ animation_frames.each_with_index do |animation_frame, i|~ ** Processing line: ~ queues.update_rt_animation_frame << { index: i,~ ** Processing line: ~ at: state.tick_count + i,~ ** Processing line: ~ queue_sprite_creation: true }~ ** Processing line: ~ queues.create_sprite << { index: i,~ ** Processing line: ~ at: state.tick_count + animation_frames.length + i,~ ** Processing line: ~ path_override: "tmp/canvas_backups/#{t.to_i}/sprite-#{i}.png" }~ ** Processing line: ~ end~ ** Processing line: ~ gtk.notify! "Canvas saved."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # l to load~ ** Processing line: ~ if inputs.keyboard.key_down.l~ ** Processing line: ~ args.state = gtk.deserialize_state 'canvas/state.txt'~ ** Processing line: ~ animation_frames.each_with_index do |a, i|~ ** Processing line: ~ queues.update_rt_animation_frame << { index: i,~ ** Processing line: ~ at: state.tick_count + i,~ ** Processing line: ~ queue_sprite_creation: true }~ ** Processing line: ~ end~ ** Processing line: ~ gtk.notify! "Canvas loaded."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # d to go into delete mode, release to paint~ ** Processing line: ~ if inputs.keyboard.key_held.d~ ** Processing line: ~ state.edit_mode = :erasing~ ** Processing line: ~ gtk.notify! "Erasing." if inputs.keyboard.key_held.d == (state.tick_count - 1)~ ** Processing line: ~ elsif inputs.keyboard.key_up.d~ ** Processing line: ~ state.edit_mode = :drawing~ ** Processing line: ~ gtk.notify! "Drawing."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # a to add a frame to the end~ ** Processing line: ~ if inputs.keyboard.key_down.a~ ** Processing line: ~ queues.create_sprite << { index: state.animation_frames_selected_index,~ ** Processing line: ~ at: state.tick_count }~ ** Processing line: ~ queues.create_sprite << { index: state.animation_frames_selected_index + 1,~ ** Processing line: ~ at: state.tick_count }~ ** Processing line: ~ add_animation_frame_to_end~ ** Processing line: ~ gtk.notify! "Frame added to end."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # c or t to copy~ ** Processing line: ~ if (inputs.keyboard.key_down.c || inputs.keyboard.key_down.t)~ ** Processing line: ~ state.clipboard = [selected_animation_frame[:pixels]].flatten~ ** Processing line: ~ gtk.notify! "Current frame copied."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # v or q to paste~ ** Processing line: ~ if (inputs.keyboard.key_down.v || inputs.keyboard.key_down.q) && state.clipboard~ ** Processing line: ~ selected_animation_frame[:pixels] = [state.clipboard].flatten~ ** Processing line: ~ queues.update_rt_animation_frame << { index: state.animation_frames_selected_index,~ ** Processing line: ~ at: state.tick_count,~ ** Processing line: ~ queue_sprite_creation: true }~ ** Processing line: ~ gtk.notify! "Pasted."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # f to go forward/next frame~ ** Processing line: ~ if (inputs.keyboard.key_down.f)~ ** Processing line: ~ if (state.animation_frames_selected_index == (state.animation_frames.length - 1))~ ** Processing line: ~ state.animation_frames_selected_index = 0~ ** Processing line: ~ else~ ** Processing line: ~ state.animation_frames_selected_index += 1~ ** Processing line: ~ end~ ** Processing line: ~ gtk.notify! "Next frame."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # b to go back/previous frame~ ** Processing line: ~ if (inputs.keyboard.key_down.b)~ ** Processing line: ~ if (state.animation_frames_selected_index == 0)~ ** Processing line: ~ state.animation_frames_selected_index = state.animation_frames.length - 1~ ** Processing line: ~ else~ ** Processing line: ~ state.animation_frames_selected_index -= 1~ ** Processing line: ~ end~ ** Processing line: ~ gtk.notify! "Previous frame."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # x to delete frame~ ** Processing line: ~ if (inputs.keyboard.key_down.x) && animation_frames.length > 1~ ** Processing line: ~ state.clipboard = selected_animation_frame[:pixels]~ ** Processing line: ~ state.animation_frames = animation_frames.find_all { |v| v[:index] != state.animation_frames_selected_index }~ ** Processing line: ~ if state.animation_frames_selected_index >= state.animation_frames.length~ ** Processing line: ~ state.animation_frames_selected_index = state.animation_frames.length - 1~ ** Processing line: ~ end~ ** Processing line: ~ gtk.notify! "Frame deleted."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_auto_export~ ** Processing line: ~ return if user_is_editing?~ ** Processing line: ~ return if state.last_mouse_up.elapsed_time != 30~ ** Processing line: ~ # auto export current animation frame if there is no editing for 30 ticks~ ** Processing line: ~ queues.create_sprite << { index: state.animation_frames_selected_index,~ ** Processing line: ~ at: state.tick_count }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_buttons_frame_selection~ ** Processing line: ~ state.buttons_frame_selection.items = animation_frames.length.map_with_index do |i|~ ** Processing line: ~ { x: state.buttons_frame_selection.left + i * state.buttons_frame_selection.size,~ ** Processing line: ~ y: state.buttons_frame_selection.top - state.buttons_frame_selection.size,~ ** Processing line: ~ inner_rect: {~ ** Processing line: ~ x: (state.buttons_frame_selection.left + 2) + i * state.buttons_frame_selection.size,~ ** Processing line: ~ y: (state.buttons_frame_selection.top - state.buttons_frame_selection.size + 2),~ ** Processing line: ~ w: 16,~ ** Processing line: ~ h: 16,~ ** Processing line: ~ },~ ** Processing line: ~ w: state.buttons_frame_selection.size,~ ** Processing line: ~ h: state.buttons_frame_selection.size,~ ** Processing line: ~ index: i }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_animation_frames~ ** Processing line: ~ animation_frames.each_with_index do |animation_frame, i|~ ** Processing line: ~ animation_frame[:index] = i~ ** Processing line: ~ animation_frame[:rt_name] = "animation_frame_#{i}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_queue_create_sprite~ ** Processing line: ~ sprites_to_create = queues.create_sprite~ ** Processing line: ~ .find_all { |h| h[:at].elapsed? }~ ** Processing line: ~~ ** Processing line: ~ queues.create_sprite = queues.create_sprite - sprites_to_create~ ** Processing line: ~~ ** Processing line: ~ sprites_to_create.each do |h|~ ** Processing line: ~ export_animation_frame h[:index], h[:path_override]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_queue_reset_sprite~ ** Processing line: ~ sprites_to_reset = queues.reset_sprite~ ** Processing line: ~ .find_all { |h| h[:at].elapsed? }~ ** Processing line: ~~ ** Processing line: ~ queues.reset_sprite -= sprites_to_reset~ ** Processing line: ~~ ** Processing line: ~ sprites_to_reset.each { |h| gtk.reset_sprite (sprite_path h[:index]) }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_queue_update_rt_animation_frame~ ** Processing line: ~ animation_frames_to_update = queues.update_rt_animation_frame~ ** Processing line: ~ .find_all { |h| h[:at].elapsed? }~ ** Processing line: ~~ ** Processing line: ~ queues.update_rt_animation_frame -= animation_frames_to_update~ ** Processing line: ~~ ** Processing line: ~ animation_frames_to_update.each do |h|~ ** Processing line: ~ update_animation_frame_render_target animation_frames[h[:index]]~ ** Processing line: ~~ ** Processing line: ~ if h[:queue_sprite_creation]~ ** Processing line: ~ queues.create_sprite << { index: h[:index],~ ** Processing line: ~ at: state.tick_count + 1 }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def update_animation_frame_render_target animation_frame~ ** Processing line: ~ return if !animation_frame~ ** Processing line: ~~ ** Processing line: ~ outputs[animation_frame[:rt_name]].width = state.rt_canvas.size~ ** Processing line: ~ outputs[animation_frame[:rt_name]].height = state.rt_canvas.size~ ** Processing line: ~ outputs[animation_frame[:rt_name]].solids << animation_frame[:pixels].map do |f|~ ** Processing line: ~ { x: f.x,~ ** Processing line: ~ y: f.y,~ ** Processing line: ~ w: 1,~ ** Processing line: ~ h: 1, r: 255, g: 255, b: 255 }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def animation_frames~ ** Processing line: ~ state.animation_frames~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def add_animation_frame_to_end~ ** Processing line: ~ animation_frames << {~ ** Processing line: ~ index: animation_frames.length,~ ** Processing line: ~ pixels: [],~ ** Processing line: ~ rt_name: "animation_frame_#{animation_frames.length}"~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ state.animation_frames_selected_index = (animation_frames.length - 1)~ ** Processing line: ~ queues.update_rt_animation_frame << { index: state.animation_frames_selected_index,~ ** Processing line: ~ at: state.tick_count,~ ** Processing line: ~ queue_sprite_creation: true }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def sprite_path i~ ** Processing line: ~ "canvas/sprite-#{i}.png"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def export_animation_frame i, path_override = nil~ ** Processing line: ~ return if !state.animation_frames[i]~ ** Processing line: ~~ ** Processing line: ~ outputs.screenshots << state.buttons_frame_selection~ ** Processing line: ~ .items[i][:inner_rect]~ ** Processing line: ~ .merge(path: path_override || (sprite_path i))~ ** Processing line: ~~ ** Processing line: ~ outputs.screenshots << state.buttons_frame_selection~ ** Processing line: ~ .items[i][:inner_rect]~ ** Processing line: ~ .merge(path: "tmp/sprite_backups/#{Time.now.to_i}-sprite-#{i}.png")~ ** Processing line: ~~ ** Processing line: ~ queues.reset_sprite << { index: i, at: state.tick_count }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def selected_animation_frame~ ** Processing line: ~ state.animation_frames[state.animation_frames_selected_index]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def edit_current_animation_frame point~ ** Processing line: ~ draw_area_point = (to_draw_area point)~ ** Processing line: ~ if state.edit_mode == :drawing && (!selected_animation_frame[:pixels].include? draw_area_point)~ ** Processing line: ~ selected_animation_frame[:pixels] << draw_area_point~ ** Processing line: ~ queues.update_rt_animation_frame << { index: state.animation_frames_selected_index,~ ** Processing line: ~ at: state.tick_count,~ ** Processing line: ~ queue_sprite_creation: !user_is_editing? }~ ** Processing line: ~ elsif state.edit_mode == :erasing && (selected_animation_frame[:pixels].include? draw_area_point)~ ** Processing line: ~ selected_animation_frame[:pixels] = selected_animation_frame[:pixels].reject { |p| p == draw_area_point }~ ** Processing line: ~ queues.update_rt_animation_frame << { index: state.animation_frames_selected_index,~ ** Processing line: ~ at: state.tick_count,~ ** Processing line: ~ queue_sprite_creation: !user_is_editing? }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def user_is_editing?~ ** Processing line: ~ state.last_mouse_down > state.last_mouse_up~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_draw_area point~ ** Processing line: ~ x, y = point~ ** Processing line: ~ x -= rt_canvas.sprite.x~ ** Processing line: ~ y -= rt_canvas.sprite.y~ ** Processing line: ~ { x: x.idiv(rt_canvas.zoom),~ ** Processing line: ~ y: y.idiv(rt_canvas.zoom) }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rt_canvas~ ** Processing line: ~ state.rt_canvas ||= state.new_entity(:rt_canvas)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def queues~ ** Processing line: ~ state.queues ||= state.new_entity(:queues)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $game = OneBitLowrezPaint.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $game.args = args~ ** Processing line: ~ $game.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Dev Tools - Tile Editor Starting Point - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Dev Tools - Tile Editor Starting Point - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Dev Tools - Tile Editor Starting Point - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_dev_tools/tile_editor_starting_point/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - to_s: Returns a string representation of an object.~ ** Processing line: ~ For example, if we had~ ** Processing line: ~ 500.to_s~ ** Processing line: ~ the string "500" would be returned.~ ** Processing line: ~ Similar to to_i, which returns an integer representation of an object.~ ** Processing line: ~~ ** Processing line: ~ - Ceil: Returns an integer number greater than or equal to the original~ ** Processing line: ~ with no decimal.~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - ARRAY#inside_rect?: Returns true or false depending on if the point is inside a rect.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.sprites: An array. The values generate a sprite.~ ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, IMAGE PATH]~ ** Processing line: ~ For more information about sprites, go to mygame/documentation/05-sprites.md.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.solids: An array. The values generate a solid.~ ** Processing line: ~ The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE]~ ** Processing line: ~ For more information about solids, go to mygame/documentation/03-solids-and-borders.md.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.lines: An array. The values generate a line.~ ** Processing line: ~ The parameters are [X1, Y1, X2, Y2, RED, GREEN, BLUE]~ ** Processing line: ~ For more information about lines, go to mygame/documentation/04-lines.md.~ ** Processing line: ~~ ** Processing line: ~ - args.state.new_entity: Used when we want to create a new object, like a sprite or button.~ ** Processing line: ~ In this sample app, new_entity is used to create a new button that clears the grid.~ ** Processing line: ~ (Remember, you can use state to define ANY property and it will be retained across frames.)~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app shows an empty grid that the user can paint in. There are different image tiles that~ ** Processing line: ~ # the user can use to fill the grid, and the "Clear" button can be pressed to clear the grid boxes.~ ** Processing line: ~~ ** Processing line: ~ class TileEditor~ ** Processing line: ~ attr_accessor :inputs, :state, :outputs, :grid, :args~ ** Processing line: ~~ ** Processing line: ~ # Runs all the methods necessary for the game to function properly.~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ check_click~ ** Processing line: ~ draw_buttons~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets default values~ ** Processing line: ~ # Initialization only happens in the first frame~ ** Processing line: ~ # NOTE: The values of some of these variables may seem confusingly large at first.~ ** Processing line: ~ # The gridSize is 1600 but it seems a lot smaller on the screen, for example.~ ** Processing line: ~ # But keep in mind that by using the "W", "A", "S", and "D" keys, you can~ ** Processing line: ~ # move the grid's view in all four directions for more grid spaces.~ ** Processing line: ~ def defaults~ ** Processing line: ~ state.tileCords ||= []~ ** Processing line: ~ state.tileQuantity ||= 6~ ** Processing line: ~ state.tileSize ||= 50~ ** Processing line: ~ state.tileSelected ||= 1~ ** Processing line: ~ state.tempX ||= 50~ ** Processing line: ~ state.tempY ||= 500~ ** Processing line: ~ state.speed ||= 4~ ** Processing line: ~ state.centerX ||= 4000~ ** Processing line: ~ state.centerY ||= 4000~ ** Processing line: ~ state.originalCenter ||= [state.centerX, state.centerY]~ ** Processing line: ~ state.gridSize ||= 1600~ ** Processing line: ~ state.lineQuantity ||= 50~ ** Processing line: ~ state.increment ||= state.gridSize / state.lineQuantity~ ** Processing line: ~ state.gridX ||= []~ ** Processing line: ~ state.gridY ||= []~ ** Processing line: ~ state.filled_squares ||= []~ ** Processing line: ~ state.grid_border ||= [390, 140, 500, 500]~ ** Processing line: ~~ ** Processing line: ~ get_grid unless state.tempX == 0 # calls get_grid in the first frame only~ ** Processing line: ~ determineTileCords unless state.tempX == 0 # calls determineTileCords in first frame~ ** Processing line: ~ state.tempX = 0 # sets tempX to 0; the two methods aren't called again~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calculates the placement of lines or separators in the grid~ ** Processing line: ~ def get_grid~ ** Processing line: ~ curr_x = state.centerX - (state.gridSize / 2) # starts at left of grid~ ** Processing line: ~ deltaX = state.gridSize / state.lineQuantity # finds distance to place vertical lines evenly through width of grid~ ** Processing line: ~ (state.lineQuantity + 2).times do~ ** Processing line: ~ state.gridX << curr_x # adds curr_x to gridX collection~ ** Processing line: ~ curr_x += deltaX # increment curr_x by the distance between vertical lines~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ curr_y = state.centerY - (state.gridSize / 2) # starts at bottom of grid~ ** Processing line: ~ deltaY = state.gridSize / state.lineQuantity # finds distance to place horizontal lines evenly through height of grid~ ** Processing line: ~ (state.lineQuantity + 2).times do~ ** Processing line: ~ state.gridY << curr_y # adds curr_y to gridY collection~ ** Processing line: ~ curr_y += deltaY # increments curr_y to distance between horizontal lines~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Determines coordinate positions of patterned tiles (on the left side of the grid)~ ** Processing line: ~ def determineTileCords~ ** Processing line: ~ state.tempCounter ||= 1 # initializes tempCounter to 1~ ** Processing line: ~ state.tileQuantity.times do # there are 6 different kinds of tiles~ ** Processing line: ~ state.tileCords += [[state.tempX, state.tempY, state.tempCounter]] # adds tile definition to collection~ ** Processing line: ~ state.tempX += 75 # increments tempX to put horizontal space between the patterned tiles~ ** Processing line: ~ state.tempCounter += 1 # increments tempCounter~ ** Processing line: ~ if state.tempX > 200 # if tempX exceeds 200 pixels~ ** Processing line: ~ state.tempX = 50 # a new row of patterned tiles begins~ ** Processing line: ~ state.tempY -= 75 # the new row is 75 pixels lower than the previous row~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs objects (grid, tiles, etc) onto the screen~ ** Processing line: ~ def render~ ** Processing line: ~ outputs.sprites << state.tileCords.map do # outputs tileCords collection using images in sprites folder~ ** Processing line: ~ |x, y, order|~ ** Processing line: ~ [x, y, state.tileSize, state.tileSize, 'sprites/image' + order.to_s + ".png"]~ ** Processing line: ~ end~ ** Processing line: ~ outputs.solids << [0, 0, 1280, 720, 255, 255, 255] # outputs white background~ ** Processing line: ~ add_grid # outputs grid~ ** Processing line: ~ print_title # outputs title and current tile pattern~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Creates a grid by outputting vertical and horizontal grid lines onto the screen.~ ** Processing line: ~ # Outputs sprites for the filled_squares collection onto the screen.~ ** Processing line: ~ def add_grid~ ** Processing line: ~~ ** Processing line: ~ # Outputs the grid's border.~ ** Processing line: ~ outputs.borders << state.grid_border~ ** Processing line: ~ temp = 0~ ** Processing line: ~~ ** Processing line: ~ # Before looking at the code that outputs the vertical and horizontal lines in the~ ** Processing line: ~ # grid, take note of the fact that:~ ** Processing line: ~ # grid_border[1] refers to the border's bottom line (running horizontally),~ ** Processing line: ~ # grid_border[2] refers to the border's top line (running (horizontally),~ ** Processing line: ~ # grid_border[0] refers to the border's left line (running vertically),~ ** Processing line: ~ # and grid_border[3] refers to the border's right line (running vertically).~ ** Processing line: ~~ ** Processing line: ~ # [2]~ ** Processing line: ~ # ----------~ ** Processing line: ~ # | |~ ** Processing line: ~ # [0] | | [3]~ ** Processing line: ~ # | |~ ** Processing line: ~ # ----------~ ** Processing line: ~ # [1]~ ** Processing line: ~~ ** Processing line: ~ # Calculates the positions and outputs the x grid lines in the color gray.~ ** Processing line: ~ state.gridX.map do # perform an action on all elements of the gridX collection~ ** Processing line: ~ |x|~ ** Processing line: ~ temp += 1 # increment temp~ ** Processing line: ~~ ** Processing line: ~ # if x's value is greater than (or equal to) the x value of the border's left side~ ** Processing line: ~ # and less than (or equal to) the x value of the border's right side~ ** Processing line: ~ if x >= state.centerX - (state.grid_border[2] / 2) && x <= state.centerX + (state.grid_border[2] / 2)~ ** Processing line: ~ delta = state.centerX - 640~ ** Processing line: ~ # vertical lines have the same starting and ending x positions~ ** Processing line: ~ # starting y and ending y positions lead from the bottom of the border to the top of the border~ ** Processing line: ~ outputs.lines << [x - delta, state.grid_border[1], x - delta, state.grid_border[1] + state.grid_border[2], 150, 150, 150] # sets definition of vertical line and outputs it~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ temp = 0~ ** Processing line: ~~ ** Processing line: ~ # Calculates the positions and outputs the y grid lines in the color gray.~ ** Processing line: ~ state.gridY.map do # perform an action on all elements of the gridY collection~ ** Processing line: ~ |y|~ ** Processing line: ~ temp += 1 # increment temp~ ** Processing line: ~~ ** Processing line: ~ # if y's value is greater than (or equal to) the y value of the border's bottom side~ ** Processing line: ~ # and less than (or equal to) the y value of the border's top side~ ** Processing line: ~ if y >= state.centerY - (state.grid_border[3] / 2) && y <= state.centerY + (state.grid_border[3] / 2)~ ** Processing line: ~ delta = state.centerY - 393~ ** Processing line: ~ # horizontal lines have the same starting and ending y positions~ ** Processing line: ~ # starting x and ending x positions lead from the left side of the border to the right side of the border~ ** Processing line: ~ outputs.lines << [state.grid_border[0], y - delta, state.grid_border[0] + state.grid_border[3], y - delta, 150, 150, 150] # sets definition of horizontal line and outputs it~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets values and outputs sprites for the filled_squares collection.~ ** Processing line: ~ state.filled_squares.map do # perform an action on every element of the filled_squares collection~ ** Processing line: ~ |x, y, w, h, sprite|~ ** Processing line: ~ # if x's value is greater than (or equal to) the x value of 17 pixels to the left of the border's left side~ ** Processing line: ~ # and less than (or equal to) the x value of the border's right side~ ** Processing line: ~ # and y's value is greater than (or equal to) the y value of the border's bottom side~ ** Processing line: ~ # and less than (or equal to) the y value of 25 pixels above the border's top side~ ** Processing line: ~ # NOTE: The allowance of 17 pixels and 25 pixels is due to the fact that a grid box may be slightly cut off or~ ** Processing line: ~ # not entirely visible in the grid's view (until it is moved using "W", "A", "S", "D")~ ** Processing line: ~ if x >= state.centerX - (state.grid_border[2] / 2) - 17 && x <= state.centerX + (state.grid_border[2] / 2) &&~ ** Processing line: ~ y >= state.centerY - (state.grid_border[3] / 2) && y <= state.centerY + (state.grid_border[3] / 2) + 25~ ** Processing line: ~ # calculations done to place sprites in grid spaces that are meant to filled in~ ** Processing line: ~ # mess around with the x and y values and see how the sprite placement changes~ ** Processing line: ~ outputs.sprites << [x - state.centerX + 630, y - state.centerY + 360, w, h, sprite]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # outputs a white solid along the left side of the grid (change the color and you'll be able to see it against the white background)~ ** Processing line: ~ # state.increment subtracted in x parameter because solid's position is denoted by bottom left corner~ ** Processing line: ~ # state.increment subtracted in y parameter to avoid covering the title label~ ** Processing line: ~ outputs.primitives << [state.grid_border[0] - state.increment,~ ** Processing line: ~ state.grid_border[1] - state.increment, state.increment, state.grid_border[3] + (state.increment * 2),~ ** Processing line: ~ 255, 255, 255].solid~ ** Processing line: ~~ ** Processing line: ~ # outputs a white solid along the right side of the grid~ ** Processing line: ~ # state.increment subtracted from y parameter to avoid covering title label~ ** Processing line: ~ outputs.primitives << [state.grid_border[0] + state.grid_border[2],~ ** Processing line: ~ state.grid_border[1] - state.increment, state.increment, state.grid_border[3] + (state.increment * 2),~ ** Processing line: ~ 255, 255, 255].solid~ ** Processing line: ~~ ** Processing line: ~ # outputs a white solid along the bottom of the grid~ ** Processing line: ~ # state.increment subtracted from y parameter to avoid covering last row of grid boxes~ ** Processing line: ~ outputs.primitives << [state.grid_border[0] - state.increment, state.grid_border[1] - state.increment,~ ** Processing line: ~ state.grid_border[2] + (2 * state.increment), state.increment, 255, 255, 255].solid~ ** Processing line: ~~ ** Processing line: ~ # outputs a white solid along the top of the grid~ ** Processing line: ~ outputs.primitives << [state.grid_border[0] - state.increment, state.grid_border[1] + state.grid_border[3],~ ** Processing line: ~ state.grid_border[2] + (2 * state.increment), state.increment, 255, 255, 255].solid~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs title and current tile pattern~ ** Processing line: ~ def print_title~ ** Processing line: ~ outputs.labels << [640, 700, 'Mouse to Place Tile, WASD to Move Around', 7, 1] # title label~ ** Processing line: ~ outputs.lines << horizontal_separator(660, 0, 1280) # outputs horizontal separator~ ** Processing line: ~ outputs.labels << [1050, 500, 'Current:', 3, 1] # outputs Current label~ ** Processing line: ~ outputs.sprites << [1110, 474, state.tileSize / 2, state.tileSize / 2, 'sprites/image' + state.tileSelected.to_s + ".png"] # outputs sprite of current tile pattern using images in sprites folder; output is half the size of a tile~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the starting position, ending position, and color for the horizontal separator.~ ** Processing line: ~ def horizontal_separator y, x, x2~ ** Processing line: ~ [x, y, x2, y, 150, 150, 150] # definition of separator; horizontal line means same starting/ending y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Checks if the mouse is being clicked or dragged~ ** Processing line: ~ def check_click~ ** Processing line: ~ if inputs.keyboard.key_down.r # if the "r" key is pressed down~ ** Processing line: ~ $dragon.reset~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.mouse.down #is mouse up or down?~ ** Processing line: ~ state.mouse_held = true~ ** Processing line: ~ if inputs.mouse.position.x < state.grid_border[0] # if mouse's x position is inside the grid's borders~ ** Processing line: ~ state.tileCords.map do # perform action on all elements of tileCords collection~ ** Processing line: ~ |x, y, order|~ ** Processing line: ~ # if mouse's x position is greater than (or equal to) the starting x position of a tile~ ** Processing line: ~ # and the mouse's x position is also less than (or equal to) the ending x position of that tile,~ ** Processing line: ~ # and the mouse's y position is greater than (or equal to) the starting y position of that tile,~ ** Processing line: ~ # and the mouse's y position is also less than (or equal to) the ending y position of that tile,~ ** Processing line: ~ # (BASICALLY, IF THE MOUSE'S POSITION IS WITHIN THE STARTING AND ENDING POSITIONS OF A TILE)~ ** Processing line: ~ if inputs.mouse.position.x >= x && inputs.mouse.position.x <= x + state.tileSize &&~ ** Processing line: ~ inputs.mouse.position.y >= y && inputs.mouse.position.y <= y + state.tileSize~ ** Processing line: ~ state.tileSelected = order # that tile is selected~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ elsif inputs.mouse.up # otherwise, if the mouse is in the "up" state~ ** Processing line: ~ state.mouse_held = false # mouse is not held down or dragged~ ** Processing line: ~ state.mouse_dragging = false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if state.mouse_held && # mouse needs to be down~ ** Processing line: ~ !inputs.mouse.click && # must not be first click~ ** Processing line: ~ ((inputs.mouse.previous_click.point.x - inputs.mouse.position.x).abs > 15 ||~ ** Processing line: ~ (inputs.mouse.previous_click.point.y - inputs.mouse.position.y).abs > 15) # Need to move 15 pixels before "drag"~ ** Processing line: ~ state.mouse_dragging = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if mouse is clicked inside grid's border, search_lines method is called with click input type~ ** Processing line: ~ if ((inputs.mouse.click) && (inputs.mouse.click.point.inside_rect? state.grid_border))~ ** Processing line: ~ search_lines(inputs.mouse.click.point, :click)~ ** Processing line: ~~ ** Processing line: ~ # if mouse is dragged inside grid's border, search_lines method is called with drag input type~ ** Processing line: ~ elsif ((state.mouse_dragging) && (inputs.mouse.position.inside_rect? state.grid_border))~ ** Processing line: ~ search_lines(inputs.mouse.position, :drag)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Changes grid's position on screen by moving it up, down, left, or right.~ ** Processing line: ~~ ** Processing line: ~ # centerX is incremented by speed if the "d" key is pressed and if that sum is less than~ ** Processing line: ~ # the original left side of the center plus half the grid, minus half the top border of grid.~ ** Processing line: ~ # MOVES GRID RIGHT (increasing x)~ ** Processing line: ~ state.centerX += state.speed if inputs.keyboard.key_held.d &&~ ** Processing line: ~ (state.centerX + state.speed) < state.originalCenter[0] + (state.gridSize / 2) - (state.grid_border[2] / 2)~ ** Processing line: ~ # centerX is decremented by speed if the "a" key is pressed and if that difference is greater than~ ** Processing line: ~ # the original left side of the center minus half the grid, plus half the top border of grid.~ ** Processing line: ~ # MOVES GRID LEFT (decreasing x)~ ** Processing line: ~ state.centerX -= state.speed if inputs.keyboard.key_held.a &&~ ** Processing line: ~ (state.centerX - state.speed) > state.originalCenter[0] - (state.gridSize / 2) + (state.grid_border[2] / 2)~ ** Processing line: ~ # centerY is incremented by speed if the "w" key is pressed and if that sum is less than~ ** Processing line: ~ # the original bottom of the center plus half the grid, minus half the right border of grid.~ ** Processing line: ~ # MOVES GRID UP (increasing y)~ ** Processing line: ~ state.centerY += state.speed if inputs.keyboard.key_held.w &&~ ** Processing line: ~ (state.centerY + state.speed) < state.originalCenter[1] + (state.gridSize / 2) - (state.grid_border[3] / 2)~ ** Processing line: ~ # centerY is decremented by speed if the "s" key is pressed and if the difference is greater than~ ** Processing line: ~ # the original bottom of the center minus half the grid, plus half the right border of grid.~ ** Processing line: ~ # MOVES GRID DOWN (decreasing y)~ ** Processing line: ~ state.centerY -= state.speed if inputs.keyboard.key_held.s &&~ ** Processing line: ~ (state.centerY - state.speed) > state.originalCenter[1] - (state.gridSize / 2) + (state.grid_border[3] / 2)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Performs calculations on the gridX and gridY collections, and sets values.~ ** Processing line: ~ # Sets the definition of a grid box, including the image that it is filled with.~ ** Processing line: ~ def search_lines (point, input_type)~ ** Processing line: ~ point.x += state.centerX - 630 # increments x and y~ ** Processing line: ~ point.y += state.centerY - 360~ ** Processing line: ~ findX = 0~ ** Processing line: ~ findY = 0~ ** Processing line: ~ increment = state.gridSize / state.lineQuantity # divides grid by number of separators~ ** Processing line: ~~ ** Processing line: ~ state.gridX.map do # perform an action on every element of collection~ ** Processing line: ~ |x|~ ** Processing line: ~ # findX increments x by 10 if point.x is less than that sum and findX is currently 0~ ** Processing line: ~ findX = x + 10 if point.x < (x + 10) && findX == 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.gridY.map do~ ** Processing line: ~ |y|~ ** Processing line: ~ # findY is set to y if point.y is less than that value and findY is currently 0~ ** Processing line: ~ findY = y if point.y < (y) && findY == 0~ ** Processing line: ~ end~ ** Processing line: ~ # position of a box is denoted by bottom left corner, which is why the increment is being subtracted~ ** Processing line: ~ grid_box = [findX - (increment.ceil), findY - (increment.ceil), increment.ceil, increment.ceil,~ ** Processing line: ~ "sprites/image" + state.tileSelected.to_s + ".png"] # sets sprite definition~ ** Processing line: ~~ ** Processing line: ~ if input_type == :click # if user clicks their mouse~ ** Processing line: ~ if state.filled_squares.include? grid_box # if grid box is already filled in~ ** Processing line: ~ state.filled_squares.delete grid_box # box is cleared and removed from filled_squares~ ** Processing line: ~ else~ ** Processing line: ~ state.filled_squares << grid_box # otherwise, box is filled in and added to filled_squares~ ** Processing line: ~ end~ ** Processing line: ~ elsif input_type == :drag # if user drags mouse~ ** Processing line: ~ unless state.filled_squares.include? grid_box # unless grid box dragged over is already filled in~ ** Processing line: ~ state.filled_squares << grid_box # box is filled in and added to filled_squares~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Creates a "Clear" button using labels and borders.~ ** Processing line: ~ def draw_buttons~ ** Processing line: ~ x, y, w, h = 390, 50, 240, 50~ ** Processing line: ~ state.clear_button ||= state.new_entity(:button_with_fade)~ ** Processing line: ~~ ** Processing line: ~ # x and y positions are set to display "Clear" label in center of the button~ ** Processing line: ~ # Try changing first two parameters to simply x, y and see what happens to the text placement~ ** Processing line: ~ state.clear_button.label ||= [x + w.half, y + h.half + 10, "Clear", 0, 1]~ ** Processing line: ~ state.clear_button.border ||= [x, y, w, h] # definition of button's border~ ** Processing line: ~~ ** Processing line: ~ # If the mouse is clicked inside the borders of the clear button~ ** Processing line: ~ if inputs.mouse.click && inputs.mouse.click.point.inside_rect?(state.clear_button.border)~ ** Processing line: ~ state.clear_button.clicked_at = inputs.mouse.click.created_at # value is frame of mouse click~ ** Processing line: ~ state.filled_squares.clear # filled squares collection is emptied (squares are cleared)~ ** Processing line: ~ inputs.mouse.previous_click = nil # no previous click~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << state.clear_button.label # outputs clear button~ ** Processing line: ~ outputs.borders << state.clear_button.border~ ** Processing line: ~~ ** Processing line: ~ # When the clear button is clicked, the color of the button changes~ ** Processing line: ~ # and the transparency changes, as well. If you change the time from~ ** Processing line: ~ # 0.25.seconds to 1.25.seconds or more, the change will last longer.~ ** Processing line: ~ if state.clear_button.clicked_at~ ** Processing line: ~ outputs.solids << [x, y, w, h, 0, 180, 80, 255 * state.clear_button.clicked_at.ease(0.25.seconds, :flip)]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $tile_editor = TileEditor.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $tile_editor.inputs = args.inputs~ ** Processing line: ~ $tile_editor.grid = args.grid~ ** Processing line: ~ $tile_editor.args = args~ ** Processing line: ~ $tile_editor.outputs = args.outputs~ ** Processing line: ~ $tile_editor.state = args.state~ ** Processing line: ~ $tile_editor.tick~ ** Processing line: ~ tick_instructions args, "Roll your own tile editor. CLICK to select a sprite. CLICK in grid to place sprite. WASD to move around."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Dungeon Crawl - Classics Jam - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Dungeon Crawl - Classics Jam - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Dungeon Crawl - Classics Jam - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_dungeon_crawl/classics_jam/app/main.rb~ ** Processing line: ~ class Game~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ input~ ** Processing line: ~ calc~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ player.x ||= 640~ ** Processing line: ~ player.y ||= 360~ ** Processing line: ~ player.w ||= 16~ ** Processing line: ~ player.h ||= 16~ ** Processing line: ~ player.attacked_at ||= -1~ ** Processing line: ~ player.angle ||= 0~ ** Processing line: ~ player.future_player ||= future_player_position 0, 0~ ** Processing line: ~ player.projectiles ||= []~ ** Processing line: ~ player.damage ||= 0~ ** Processing line: ~ state.level ||= create_level level_one_template~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render~ ** Processing line: ~ outputs.sprites << level.walls.map do |w|~ ** Processing line: ~ w.merge(path: 'sprites/square/gray.png')~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.sprites << level.spawn_locations.map do |s|~ ** Processing line: ~ s.merge(path: 'sprites/square/blue.png')~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.sprites << player.projectiles.map do |p|~ ** Processing line: ~ p.merge(path: 'sprites/square/blue.png')~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.sprites << level.enemies.map do |e|~ ** Processing line: ~ e.merge(path: 'sprites/square/red.png')~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.sprites << player.merge(path: 'sprites/circle/green.png', angle: player.angle)~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << { x: 30, y: 30.from_top, text: "damage: #{player.damage || 0}" }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input~ ** Processing line: ~ player.angle = inputs.directional_angle || player.angle~ ** Processing line: ~ if inputs.controller_one.key_down.a || inputs.keyboard.key_down.space~ ** Processing line: ~ player.attacked_at = state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc~ ** Processing line: ~ calc_player~ ** Processing line: ~ calc_projectiles~ ** Processing line: ~ calc_enemies~ ** Processing line: ~ calc_spawn_locations~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_player~ ** Processing line: ~ if player.attacked_at == state.tick_count~ ** Processing line: ~ player.projectiles << { at: state.tick_count,~ ** Processing line: ~ x: player.x,~ ** Processing line: ~ y: player.y,~ ** Processing line: ~ angle: player.angle,~ ** Processing line: ~ w: 4,~ ** Processing line: ~ h: 4 }.center_inside_rect(player)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if player.attacked_at.elapsed_time > 5~ ** Processing line: ~ future_player = future_player_position inputs.left_right * 2, inputs.up_down * 2~ ** Processing line: ~ future_player_collision = future_collision player, future_player, level.walls~ ** Processing line: ~ player.x = future_player_collision.x if !future_player_collision.dx_collision~ ** Processing line: ~ player.y = future_player_collision.y if !future_player_collision.dy_collision~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_projectile_collisions entities~ ** Processing line: ~ entities.each do |e|~ ** Processing line: ~ e.damage ||= 0~ ** Processing line: ~ player.projectiles.each do |p|~ ** Processing line: ~ if !p.collided && (p.intersect_rect? e)~ ** Processing line: ~ p.collided = true~ ** Processing line: ~ e.damage += 1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_projectiles~ ** Processing line: ~ player.projectiles.map! do |p|~ ** Processing line: ~ dx, dy = p.angle.vector 10~ ** Processing line: ~ p.merge(x: p.x + dx, y: p.y + dy)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ calc_projectile_collisions level.walls + level.enemies + level.spawn_locations~ ** Processing line: ~ player.projectiles.reject! { |p| p.at.elapsed_time > 10000 }~ ** Processing line: ~ player.projectiles.reject! { |p| p.collided }~ ** Processing line: ~ level.enemies.reject! { |e| e.damage > e.hp }~ ** Processing line: ~ level.spawn_locations.reject! { |s| s.damage > s.hp }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_enemies~ ** Processing line: ~ level.enemies.map! do |e|~ ** Processing line: ~ dx = 0~ ** Processing line: ~ dx = 1 if e.x < player.x~ ** Processing line: ~ dx = -1 if e.x > player.x~ ** Processing line: ~ dy = 0~ ** Processing line: ~ dy = 1 if e.y < player.y~ ** Processing line: ~ dy = -1 if e.y > player.y~ ** Processing line: ~ future_e = future_entity_position dx, dy, e~ ** Processing line: ~ future_e_collision = future_collision e, future_e, level.enemies + level.walls~ ** Processing line: ~ e.next_x = e.x~ ** Processing line: ~ e.next_y = e.y~ ** Processing line: ~ e.next_x = future_e_collision.x if !future_e_collision.dx_collision~ ** Processing line: ~ e.next_y = future_e_collision.y if !future_e_collision.dy_collision~ ** Processing line: ~ e~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ level.enemies.map! do |e|~ ** Processing line: ~ e.x = e.next_x~ ** Processing line: ~ e.y = e.next_y~ ** Processing line: ~ e~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ level.enemies.each do |e|~ ** Processing line: ~ player.damage += 1 if e.intersect_rect? player~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_spawn_locations~ ** Processing line: ~ level.spawn_locations.map! do |s|~ ** Processing line: ~ s.merge(countdown: s.countdown - 1)~ ** Processing line: ~ end~ ** Processing line: ~ level.spawn_locations~ ** Processing line: ~ .find_all { |s| s.countdown.neg? }~ ** Processing line: ~ .each do |s|~ ** Processing line: ~ s.countdown = s.rate~ ** Processing line: ~ s.merge(countdown: s.rate)~ ** Processing line: ~ new_enemy = create_enemy s~ ** Processing line: ~ if !(level.enemies.find { |e| e.intersect_rect? new_enemy })~ ** Processing line: ~ level.enemies << new_enemy~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def create_enemy spawn_location~ ** Processing line: ~ to_cell(spawn_location.ordinal_x, spawn_location.ordinal_y).merge hp: 2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def create_level level_template~ ** Processing line: ~ {~ ** Processing line: ~ walls: level_template.walls.map { |w| to_cell(w.ordinal_x, w.ordinal_y).merge(w) },~ ** Processing line: ~ enemies: [],~ ** Processing line: ~ spawn_locations: level_template.spawn_locations.map { |s| to_cell(s.ordinal_x, s.ordinal_y).merge(s) }~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def level_one_template~ ** Processing line: ~ {~ ** Processing line: ~ walls: [{ ordinal_x: 25, ordinal_y: 20},~ ** Processing line: ~ { ordinal_x: 25, ordinal_y: 21},~ ** Processing line: ~ { ordinal_x: 25, ordinal_y: 22},~ ** Processing line: ~ { ordinal_x: 25, ordinal_y: 23}],~ ** Processing line: ~ spawn_locations: [{ ordinal_x: 10, ordinal_y: 10, rate: 120, countdown: 0, hp: 5 }]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player~ ** Processing line: ~ state.player ||= {}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def level~ ** Processing line: ~ state.level ||= {}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def future_collision entity, future_entity, others~ ** Processing line: ~ dx_collision = others.find { |o| o != entity && (o.intersect_rect? future_entity.dx) }~ ** Processing line: ~ dy_collision = others.find { |o| o != entity && (o.intersect_rect? future_entity.dy) }~ ** Processing line: ~~ ** Processing line: ~ {~ ** Processing line: ~ dx_collision: dx_collision,~ ** Processing line: ~ x: future_entity.dx.x,~ ** Processing line: ~ dy_collision: dy_collision,~ ** Processing line: ~ y: future_entity.dy.y~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def future_entity_position dx, dy, entity~ ** Processing line: ~ {~ ** Processing line: ~ dx: entity.merge(x: entity.x + dx),~ ** Processing line: ~ dy: entity.merge(y: entity.y + dy),~ ** Processing line: ~ both: entity.merge(x: entity.x + dx, y: entity.y + dy)~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def future_player_position dx, dy~ ** Processing line: ~ future_entity_position dx, dy, player~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_cell ordinal_x, ordinal_y~ ** Processing line: ~ { x: ordinal_x * 16, y: ordinal_y * 16, w: 16, h: 16 }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $game ||= Game.new~ ** Processing line: ~ $game.args = args~ ** Processing line: ~ $game.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ $game = nil~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Fighting - Special Move Inputs - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Fighting - Special Move Inputs - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Fighting - Special Move Inputs - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_fighting/01_special_move_inputs/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ #tick_instructions args, "Use LEFT and RIGHT arrow keys to move and SPACE to jump."~ ** Processing line: ~ defaults args~ ** Processing line: ~ render args~ ** Processing line: ~ input args~ ** Processing line: ~ calc args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # sets default values and creates empty collections~ ** Processing line: ~ # initialization only happens in the first frame~ ** Processing line: ~ def defaults args~ ** Processing line: ~ fiddle args~ ** Processing line: ~~ ** Processing line: ~ args.state.tick_count = args.state.tick_count~ ** Processing line: ~ args.state.bridge_top = 128~ ** Processing line: ~ args.state.player.x ||= 0 # initializes player's properties~ ** Processing line: ~ args.state.player.y ||= args.state.bridge_top~ ** Processing line: ~ args.state.player.w ||= 64~ ** Processing line: ~ args.state.player.h ||= 64~ ** Processing line: ~ args.state.player.dy ||= 0~ ** Processing line: ~ args.state.player.dx ||= 0~ ** Processing line: ~ args.state.player.r ||= 0~ ** Processing line: ~ args.state.game_over_at ||= 0~ ** Processing line: ~ args.state.animation_time ||=0~ ** Processing line: ~~ ** Processing line: ~ args.state.timeleft ||=0~ ** Processing line: ~ args.state.timeright ||=0~ ** Processing line: ~ args.state.lastpush ||=0~ ** Processing line: ~~ ** Processing line: ~ args.state.inputlist ||= ["j","k","l"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # sets enemy, player, hammer values~ ** Processing line: ~ def fiddle args~ ** Processing line: ~ args.state.gravity = -0.5~ ** Processing line: ~ args.state.player_jump_power = 10 # sets player values~ ** Processing line: ~ args.state.player_jump_power_duration = 5~ ** Processing line: ~ args.state.player_max_run_speed = 20~ ** Processing line: ~ args.state.player_speed_slowdown_rate = 0.9~ ** Processing line: ~ args.state.player_acceleration = 0.9~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # outputs objects onto the screen~ ** Processing line: ~ def render args~ ** Processing line: ~ if (args.state.player.dx < 0.01) && (args.state.player.dx > -0.01)~ ** Processing line: ~ args.state.player.dx = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #move list~ ** Processing line: ~ (args.layout.rect_group row: 0, col_from_right: 8, drow: 0.3,~ ** Processing line: ~ merge: { vertical_alignment_enum: 0, size_enum: -2 },~ ** Processing line: ~ group: [~ ** Processing line: ~ { text: "move: WASD" },~ ** Processing line: ~ { text: "jump: Space" },~ ** Processing line: ~ { text: "attack forwards: J (while on ground" },~ ** Processing line: ~ { text: "attack upwards: K (while on groud)" },~ ** Processing line: ~ { text: "attack backwards: J (while on ground and holding A)" },~ ** Processing line: ~ { text: "attack downwards: K (while in air)" },~ ** Processing line: ~ { text: "dash attack: J, K in quick succession." },~ ** Processing line: ~ { text: "shield: hold J, K at the same time." },~ ** Processing line: ~ { text: "dash backwards: A, A in quick succession." },~ ** Processing line: ~ ]).into args.outputs.labels~ ** Processing line: ~~ ** Processing line: ~ # registered moves~ ** Processing line: ~ args.outputs.labels << { x: 0.to_layout_col,~ ** Processing line: ~ y: 0.to_layout_row,~ ** Processing line: ~ text: "input history",~ ** Processing line: ~ size_enum: -2,~ ** Processing line: ~ vertical_alignment_enum: 0 }~ ** Processing line: ~~ ** Processing line: ~ (args.state.inputlist.take(5)).map do |s|~ ** Processing line: ~ { text: s, size_enum: -2, vertical_alignment_enum: 0 }~ ** Processing line: ~ end.yield_self do |group|~ ** Processing line: ~ (args.layout.rect_group row: 0.3, col: 0, drow: 0.3, group: group).into args.outputs.labels~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ #sprites~ ** Processing line: ~ player = [args.state.player.x, args.state.player.y,~ ** Processing line: ~ args.state.player.w, args.state.player.h,~ ** Processing line: ~ "sprites/square/white.png",~ ** Processing line: ~ args.state.player.r]~ ** Processing line: ~~ ** Processing line: ~ playershield = [args.state.player.x - 20, args.state.player.y - 10,~ ** Processing line: ~ args.state.player.w + 20, args.state.player.h + 20,~ ** Processing line: ~ "sprites/square/blue.png",~ ** Processing line: ~ args.state.player.r,~ ** Processing line: ~ 0]~ ** Processing line: ~~ ** Processing line: ~ playerjab = [args.state.player.x + 32, args.state.player.y,~ ** Processing line: ~ args.state.player.w, args.state.player.h,~ ** Processing line: ~ "sprites/isometric/indigo.png",~ ** Processing line: ~ args.state.player.r,~ ** Processing line: ~ 0]~ ** Processing line: ~~ ** Processing line: ~ playerupper = [args.state.player.x, args.state.player.y + 32,~ ** Processing line: ~ args.state.player.w, args.state.player.h,~ ** Processing line: ~ "sprites/isometric/indigo.png",~ ** Processing line: ~ args.state.player.r+90,~ ** Processing line: ~ 0]~ ** Processing line: ~~ ** Processing line: ~ if ((args.state.tick_count - args.state.lastpush) <= 15)~ ** Processing line: ~ if (args.state.inputlist[0] == "<<")~ ** Processing line: ~ player = [args.state.player.x, args.state.player.y,~ ** Processing line: ~ args.state.player.w, args.state.player.h,~ ** Processing line: ~ "sprites/square/yellow.png", args.state.player.r]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if (args.state.inputlist[0] == "shield")~ ** Processing line: ~ player = [args.state.player.x, args.state.player.y,~ ** Processing line: ~ args.state.player.w, args.state.player.h,~ ** Processing line: ~ "sprites/square/indigo.png", args.state.player.r]~ ** Processing line: ~~ ** Processing line: ~ playershield = [args.state.player.x - 10, args.state.player.y - 10,~ ** Processing line: ~ args.state.player.w + 20, args.state.player.h + 20,~ ** Processing line: ~ "sprites/square/blue.png", args.state.player.r, 50]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if (args.state.inputlist[0] == "back-attack")~ ** Processing line: ~ playerjab = [args.state.player.x - 20, args.state.player.y,~ ** Processing line: ~ args.state.player.w - 10, args.state.player.h,~ ** Processing line: ~ "sprites/isometric/indigo.png", args.state.player.r, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if (args.state.inputlist[0] == "forward-attack")~ ** Processing line: ~ playerjab = [args.state.player.x + 32, args.state.player.y,~ ** Processing line: ~ args.state.player.w, args.state.player.h,~ ** Processing line: ~ "sprites/isometric/indigo.png", args.state.player.r, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if (args.state.inputlist[0] == "up-attack")~ ** Processing line: ~ playerupper = [args.state.player.x, args.state.player.y + 32,~ ** Processing line: ~ args.state.player.w, args.state.player.h,~ ** Processing line: ~ "sprites/isometric/indigo.png", args.state.player.r + 90, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if (args.state.inputlist[0] == "dair")~ ** Processing line: ~ playerupper = [args.state.player.x, args.state.player.y - 32,~ ** Processing line: ~ args.state.player.w, args.state.player.h,~ ** Processing line: ~ "sprites/isometric/indigo.png", args.state.player.r + 90, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if (args.state.inputlist[0] == "dash-attack")~ ** Processing line: ~ playerupper = [args.state.player.x, args.state.player.y + 32,~ ** Processing line: ~ args.state.player.w, args.state.player.h,~ ** Processing line: ~ "sprites/isometric/violet.png", args.state.player.r + 90, 255]~ ** Processing line: ~~ ** Processing line: ~ playerjab = [args.state.player.x + 32, args.state.player.y,~ ** Processing line: ~ args.state.player.w, args.state.player.h,~ ** Processing line: ~ "sprites/isometric/violet.png", args.state.player.r, 255]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.sprites << playerjab~ ** Processing line: ~ args.outputs.sprites << playerupper~ ** Processing line: ~ args.outputs.sprites << player~ ** Processing line: ~ args.outputs.sprites << playershield~ ** Processing line: ~~ ** Processing line: ~ args.outputs.solids << 20.map_with_index do |i| # uses 20 squares to form bridge~ ** Processing line: ~ [i * 64, args.state.bridge_top - 64, 64, 64]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Performs calculations to move objects on the screen~ ** Processing line: ~ def calc args~ ** Processing line: ~ # Since velocity is the change in position, the change in x increases by dx. Same with y and dy.~ ** Processing line: ~ args.state.player.x += args.state.player.dx~ ** Processing line: ~ args.state.player.y += args.state.player.dy~ ** Processing line: ~~ ** Processing line: ~ # Since acceleration is the change in velocity, the change in y (dy) increases every frame~ ** Processing line: ~ args.state.player.dy += args.state.gravity~ ** Processing line: ~~ ** Processing line: ~ # player's y position is either current y position or y position of top of~ ** Processing line: ~ # bridge, whichever has a greater value~ ** Processing line: ~ # ensures that the player never goes below the bridge~ ** Processing line: ~ args.state.player.y = args.state.player.y.greater(args.state.bridge_top)~ ** Processing line: ~~ ** Processing line: ~ # player's x position is either the current x position or 0, whichever has a greater value~ ** Processing line: ~ # ensures that the player doesn't go too far left (out of the screen's scope)~ ** Processing line: ~ args.state.player.x = args.state.player.x.greater(0)~ ** Processing line: ~~ ** Processing line: ~ # player is not falling if it is located on the top of the bridge~ ** Processing line: ~ args.state.player.falling = false if args.state.player.y == args.state.bridge_top~ ** Processing line: ~ #args.state.player.rect = [args.state.player.x, args.state.player.y, args.state.player.h, args.state.player.w] # sets definition for player~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Resets the player by changing its properties back to the values they had at initialization~ ** Processing line: ~ def reset_player args~ ** Processing line: ~ args.state.player.x = 0~ ** Processing line: ~ args.state.player.y = args.state.bridge_top~ ** Processing line: ~ args.state.player.dy = 0~ ** Processing line: ~ args.state.player.dx = 0~ ** Processing line: ~ args.state.enemy.hammers.clear # empties hammer collection~ ** Processing line: ~ args.state.enemy.hammer_queue.clear # empties hammer_queue~ ** Processing line: ~ args.state.game_over_at = args.state.tick_count # game_over_at set to current frame (or passage of time)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Processes input from the user to move the player~ ** Processing line: ~ def input args~ ** Processing line: ~ if args.state.inputlist.length > 5~ ** Processing line: ~ args.state.inputlist.pop~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ should_process_special_move = (args.inputs.keyboard.key_down.j) ||~ ** Processing line: ~ (args.inputs.keyboard.key_down.k) ||~ ** Processing line: ~ (args.inputs.keyboard.key_down.a) ||~ ** Processing line: ~ (args.inputs.keyboard.key_down.d) ||~ ** Processing line: ~ (args.inputs.controller_one.key_down.y) ||~ ** Processing line: ~ (args.inputs.controller_one.key_down.x) ||~ ** Processing line: ~ (args.inputs.controller_one.key_down.left) ||~ ** Processing line: ~ (args.inputs.controller_one.key_down.right)~ ** Processing line: ~~ ** Processing line: ~ if (should_process_special_move)~ ** Processing line: ~ if (args.inputs.keyboard.key_down.j && args.inputs.keyboard.key_down.k) ||~ ** Processing line: ~ (args.inputs.controller_one.key_down.x && args.inputs.controller_one.key_down.y)~ ** Processing line: ~ args.state.inputlist.unshift("shield")~ ** Processing line: ~ elsif (args.inputs.keyboard.key_down.k || args.inputs.controller_one.key_down.y) &&~ ** Processing line: ~ (args.state.inputlist[0] == "forward-attack") && ((args.state.tick_count - args.state.lastpush) <= 15)~ ** Processing line: ~ args.state.inputlist.unshift("dash-attack")~ ** Processing line: ~ args.state.player.dx = 20~ ** Processing line: ~ elsif (args.inputs.keyboard.key_down.j && args.inputs.keyboard.a) ||~ ** Processing line: ~ (args.inputs.controller_one.key_down.x && args.inputs.controller_one.key_down.left)~ ** Processing line: ~ args.state.inputlist.unshift("back-attack")~ ** Processing line: ~ elsif ( args.inputs.controller_one.key_down.x || args.inputs.keyboard.key_down.j)~ ** Processing line: ~ args.state.inputlist.unshift("forward-attack")~ ** Processing line: ~ elsif (args.inputs.keyboard.key_down.k || args.inputs.controller_one.key_down.y) &&~ ** Processing line: ~ (args.state.player.y > 128)~ ** Processing line: ~ args.state.inputlist.unshift("dair")~ ** Processing line: ~ elsif (args.inputs.keyboard.key_down.k || args.inputs.controller_one.key_down.y)~ ** Processing line: ~ args.state.inputlist.unshift("up-attack")~ ** Processing line: ~ elsif (args.inputs.controller_one.key_down.left || args.inputs.keyboard.key_down.a) &&~ ** Processing line: ~ (args.state.inputlist[0] == "<") &&~ ** Processing line: ~ ((args.state.tick_count - args.state.lastpush) <= 10)~ ** Processing line: ~ args.state.inputlist.unshift("<<")~ ** Processing line: ~ args.state.player.dx = -15~ ** Processing line: ~ elsif (args.inputs.controller_one.key_down.left || args.inputs.keyboard.key_down.a)~ ** Processing line: ~ args.state.inputlist.unshift("<")~ ** Processing line: ~ args.state.timeleft = args.state.tick_count~ ** Processing line: ~ elsif (args.inputs.controller_one.key_down.right || args.inputs.keyboard.key_down.d)~ ** Processing line: ~ args.state.inputlist.unshift(">")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.lastpush = args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.keyboard.space || args.inputs.controller_one.r2 # if the user presses the space bar~ ** Processing line: ~ args.state.player.jumped_at ||= args.state.tick_count # jumped_at is set to current frame~ ** Processing line: ~~ ** Processing line: ~ # if the time that has passed since the jump is less than the player's jump duration and~ ** Processing line: ~ # the player is not falling~ ** Processing line: ~ if args.state.player.jumped_at.elapsed_time < args.state.player_jump_power_duration && !args.state.player.falling~ ** Processing line: ~ args.state.player.dy = args.state.player_jump_power # change in y is set to power of player's jump~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if the space bar is in the "up" state (or not being pressed down)~ ** Processing line: ~ if args.inputs.keyboard.key_up.space || args.inputs.controller_one.key_up.r2~ ** Processing line: ~ args.state.player.jumped_at = nil # jumped_at is empty~ ** Processing line: ~ args.state.player.falling = true # the player is falling~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.left # if left key is pressed~ ** Processing line: ~ if args.state.player.dx < -5~ ** Processing line: ~ args.state.player.dx = args.state.player.dx~ ** Processing line: ~ else~ ** Processing line: ~ args.state.player.dx = -5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ elsif args.inputs.right # if right key is pressed~ ** Processing line: ~ if args.state.player.dx > 5~ ** Processing line: ~ args.state.player.dx = args.state.player.dx~ ** Processing line: ~ else~ ** Processing line: ~ args.state.player.dx = 5~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ args.state.player.dx *= args.state.player_speed_slowdown_rate # dx is scaled down~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if ((args.state.player.dx).abs > 5) #&& ((args.state.tick_count - args.state.lastpush) <= 10)~ ** Processing line: ~ args.state.player.dx *= 0.95~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.mouse.click ||~ ** Processing line: ~ args.inputs.keyboard.directional_vector ||~ ** Processing line: ~ args.inputs.keyboard.key_down.enter ||~ ** Processing line: ~ args.inputs.keyboard.key_down.space ||~ ** Processing line: ~ args.inputs.keyboard.key_down.escape~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Lowrez - Nokia 3310 - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Lowrez - Nokia 3310 - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Lowrez - Nokia 3310 - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_lowrez/nokia_3310/app/main.rb~ ** Processing line: ~ require 'app/nokia.rb'~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HELLO WORLD ======================================================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # Steps to get started:~ ** Processing line: ~ # 1. ~def tick args~ is the entry point for your game.~ ** Processing line: ~ # 2. There are quite a few code samples below, remove the "##"~ ** Processing line: ~ # before each line and save the file to see the changes.~ ** Processing line: ~ # 3. 0, 0 is in bottom left and 83, 47 is in top right corner.~ ** Processing line: ~ # 4. Be sure to come to the discord channel if you need~ ** Processing line: ~ # more help: [[http://discord.dragonruby.org]].~ ** Processing line: ~~ ** Processing line: ~ # Commenting and uncommenting code:~ ** Processing line: ~ # - Add a "#" infront of lines to comment out code~ ** Processing line: ~ # - Remove the "#" infront of lines to comment out code~ ** Processing line: ~~ ** Processing line: ~ # Invoke the hello_world subroutine/method~ ** Processing line: ~ hello_world args # <---- add a "#" to the beginning of the line to stop running this subroutine/method.~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HOW TO RENDER A LABEL ============================================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~~ ** Processing line: ~ # Uncomment the line below to invoke the how_to_render_a_label subroutine/method.~ ** Processing line: ~ # Note: The method is defined in this file with the signature ~def how_to_render_a_label args~~ ** Processing line: ~ # Scroll down to the method to see the details.~ ** Processing line: ~~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_render_a_label args # <---- remove the "#" at the beginning of this line to run the method~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HOW TO RENDER A FILLED SQUARE (SOLID) ============================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_render_solids args~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HOW TO RENDER AN UNFILLED SQUARE (BORDER) ========================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_render_borders args~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HOW TO RENDER A LINE =============================================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_render_lines args~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # == HOW TO RENDER A SPRITE =============================================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_render_sprites args~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HOW TO MOVE A SPRITE BASED OFF OF USER INPUT =====================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_move_a_sprite args~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HOW TO ANIMATE A SPRITE (SEPERATE PNGS) ==========================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_animate_a_sprite args~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HOW TO ANIMATE A SPRITE (SPRITE SHEET) ===========================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_animate_a_sprite_sheet args~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HOW TO DETERMINE COLLISION =============================================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_determine_collision args~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HOW TO CREATE BUTTONS ==================================================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_create_buttons args~ ** Processing line: ~~ ** Processing line: ~ # ==== The line below renders a debug grid, mouse information, and current tick~ ** Processing line: ~ # render_debug args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HELLO WORLD ======================================================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ def hello_world args~ ** Processing line: ~ args.nokia.solids << { x: 0, y: 64, w: 10, h: 10, r: 255 }~ ** Processing line: ~~ ** Processing line: ~ args.nokia.labels << {~ ** Processing line: ~ x: 42,~ ** Processing line: ~ y: 46,~ ** Processing line: ~ text: "nokia 3310 jam 3",~ ** Processing line: ~ size_enum: NOKIA_FONT_SM,~ ** Processing line: ~ alignment_enum: 1,~ ** Processing line: ~ r: 0,~ ** Processing line: ~ g: 0,~ ** Processing line: ~ b: 0,~ ** Processing line: ~ a: 255,~ ** Processing line: ~ font: NOKIA_FONT_PATH~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ args.nokia.sprites << {~ ** Processing line: ~ x: 42 - 10,~ ** Processing line: ~ y: 26 - 10,~ ** Processing line: ~ w: 20,~ ** Processing line: ~ h: 20,~ ** Processing line: ~ path: 'sprites/monochrome-ship.png',~ ** Processing line: ~ a: 255,~ ** Processing line: ~ angle: args.state.tick_count % 360~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HOW TO RENDER A LABEL ============================================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ def how_to_render_a_label args~ ** Processing line: ~ # NOTE: Text is aligned from the TOP LEFT corner~ ** Processing line: ~~ ** Processing line: ~ # Render an EXTRA LARGE/XL label (remove the "#" in front of each line below)~ ** Processing line: ~ args.nokia.labels << { x: 0, y: 46, text: "Hello World",~ ** Processing line: ~ size_enum: NOKIA_FONT_XL,~ ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ ** Processing line: ~ font: NOKIA_FONT_PATH }~ ** Processing line: ~~ ** Processing line: ~ # Render a LARGE/LG label (remove the "#" in front of each line below)~ ** Processing line: ~ args.nokia.labels << { x: 0, y: 29, text: "Hello World",~ ** Processing line: ~ size_enum: NOKIA_FONT_LG,~ ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ ** Processing line: ~ font: NOKIA_FONT_PATH }~ ** Processing line: ~~ ** Processing line: ~ # Render a MEDIUM/MD label (remove the "#" in front of each line below)~ ** Processing line: ~ args.nokia.labels << { x: 0, y: 16, text: "Hello World",~ ** Processing line: ~ size_enum: NOKIA_FONT_MD,~ ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ ** Processing line: ~ font: NOKIA_FONT_PATH }~ ** Processing line: ~~ ** Processing line: ~ # Render a SMALL/SM label (remove the "#" in front of each line below)~ ** Processing line: ~ args.nokia.labels << { x: 0, y: 7, text: "Hello World",~ ** Processing line: ~ size_enum: NOKIA_FONT_SM,~ ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ ** Processing line: ~ font: NOKIA_FONT_PATH }~ ** Processing line: ~~ ** Processing line: ~ # You are provided args.nokia.default_label which returns a Hash that you~ ** Processing line: ~ # can ~merge~ properties with~ ** Processing line: ~ # Example 1~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(text: "Default")~ ** Processing line: ~~ ** Processing line: ~ # Example 2~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 31,~ ** Processing line: ~ text: "Default")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ # ==== HOW TO RENDER FILLED SQUARES (SOLIDS) ==================================~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ def how_to_render_solids args~ ** Processing line: ~ # Render a square at 0, 0 with a width and height of 1~ ** Processing line: ~ args.nokia.solids << { x: 0, y: 0, w: 1, h: 1 }~ ** Processing line: ~~ ** Processing line: ~ # Render a square at 1, 1 with a width and height of 2~ ** Processing line: ~ args.nokia.solids << { x: 1, y: 1, w: 2, h: 2 }~ ** Processing line: ~~ ** Processing line: ~ # Render a square at 3, 3 with a width and height of 3~ ** Processing line: ~ args.nokia.solids << { x: 3, y: 3, w: 3, h: 3 }~ ** Processing line: ~~ ** Processing line: ~ # Render a square at 6, 6 with a width and height of 4~ ** Processing line: ~ args.nokia.solids << { x: 6, y: 6, w: 4, h: 4 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ # ==== HOW TO RENDER UNFILLED SQUARES (BORDERS) ===============================~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ def how_to_render_borders args~ ** Processing line: ~ # Render a square at 0, 0 with a width and height of 3~ ** Processing line: ~ args.nokia.borders << { x: 0, y: 0, w: 3, h: 3, a: 255 }~ ** Processing line: ~~ ** Processing line: ~ # Render a square at 3, 3 with a width and height of 3~ ** Processing line: ~ args.nokia.borders << { x: 3, y: 3, w: 4, h: 4, a: 255 }~ ** Processing line: ~~ ** Processing line: ~ # Render a square at 5, 5 with a width and height of 4~ ** Processing line: ~ args.nokia.borders << { x: 7, y: 7, w: 5, h: 5, a: 255 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ # ==== HOW TO RENDER A LINE ===================================================~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ def how_to_render_lines args~ ** Processing line: ~ # Render a horizontal line at the bottom~ ** Processing line: ~ args.nokia.lines << { x: 0, y: 0, x2: 83, y2: 0 }~ ** Processing line: ~~ ** Processing line: ~ # Render a vertical line at the left~ ** Processing line: ~ args.nokia.lines << { x: 0, y: 0, x2: 0, y2: 47 }~ ** Processing line: ~~ ** Processing line: ~ # Render a diagonal line starting from the bottom left and going to the top right~ ** Processing line: ~ args.nokia.lines << { x: 0, y: 0, x2: 83, y2: 47 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ # == HOW TO RENDER A SPRITE ===================================================~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ def how_to_render_sprites args~ ** Processing line: ~ # Loop 10 times and create 10 sprites in 10 positions~ ** Processing line: ~ # Render a sprite at the bottom left with a width and height of 5 and a path of 'sprites/monochrome-ship.png'~ ** Processing line: ~ 10.times do |i|~ ** Processing line: ~ args.nokia.sprites << {~ ** Processing line: ~ x: i * 8.4,~ ** Processing line: ~ y: i * 4.8,~ ** Processing line: ~ w: 5,~ ** Processing line: ~ h: 5,~ ** Processing line: ~ path: 'sprites/monochrome-ship.png'~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Given an array of positions create sprites~ ** Processing line: ~ positions = [~ ** Processing line: ~ { x: 20, y: 32 },~ ** Processing line: ~ { x: 45, y: 15 },~ ** Processing line: ~ { x: 72, y: 23 },~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ positions.each do |position|~ ** Processing line: ~ # use Ruby's ~Hash#merge~ function to create a sprite~ ** Processing line: ~ args.nokia.sprites << position.merge(path: 'sprites/monochrome-ship.png',~ ** Processing line: ~ w: 5,~ ** Processing line: ~ h: 5)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ # ==== HOW TO ANIMATE A SPRITE (SEPERATE PNGS) ==========================~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ def how_to_animate_a_sprite args~ ** Processing line: ~ # STEP 1: Define when you want the animation to start. The animation in this case will start in 3 seconds~ ** Processing line: ~ start_animation_on_tick = 180~ ** Processing line: ~~ ** Processing line: ~ # STEP 2: Get the frame_index given the start tick.~ ** Processing line: ~ sprite_index = start_animation_on_tick.frame_index count: 7, # how many sprites?~ ** Processing line: ~ hold_for: 8, # how long to hold each sprite?~ ** Processing line: ~ repeat: true # should it repeat?~ ** Processing line: ~~ ** Processing line: ~ # STEP 3: frame_index will return nil if the frame hasn't arrived yet~ ** Processing line: ~ if sprite_index~ ** Processing line: ~ # if the sprite_index is populated, use it to determine the sprite path and render it~ ** Processing line: ~ sprite_path = "sprites/explosion-#{sprite_index}.png"~ ** Processing line: ~ args.nokia.sprites << { x: 42 - 16,~ ** Processing line: ~ y: 47 - 32,~ ** Processing line: ~ w: 32,~ ** Processing line: ~ h: 32,~ ** Processing line: ~ path: sprite_path }~ ** Processing line: ~ else~ ** Processing line: ~ # if the sprite_index is nil, render a countdown instead~ ** Processing line: ~ countdown_in_seconds = ((start_animation_on_tick - args.state.tick_count) / 60).round(1)~ ** Processing line: ~~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 0,~ ** Processing line: ~ y: 18,~ ** Processing line: ~ text: "Count Down: #{countdown_in_seconds.to_sf}",~ ** Processing line: ~ alignment_enum: 0)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # render the current tick and the resolved sprite index~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 0,~ ** Processing line: ~ y: 11,~ ** Processing line: ~ text: "Tick: #{args.state.tick_count}")~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 0,~ ** Processing line: ~ y: 5,~ ** Processing line: ~ text: "sprite_index: #{sprite_index}")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ # ==== HOW TO ANIMATE A SPRITE (SPRITE SHEET) =================================~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ def how_to_animate_a_sprite_sheet args~ ** Processing line: ~ # STEP 1: Define when you want the animation to start. The animation in this case will start in 3 seconds~ ** Processing line: ~ start_animation_on_tick = 180~ ** Processing line: ~~ ** Processing line: ~ # STEP 2: Get the frame_index given the start tick.~ ** Processing line: ~ sprite_index = start_animation_on_tick.frame_index count: 7, # how many sprites?~ ** Processing line: ~ hold_for: 8, # how long to hold each sprite?~ ** Processing line: ~ repeat: true # should it repeat?~ ** Processing line: ~~ ** Processing line: ~ # STEP 3: frame_index will return nil if the frame hasn't arrived yet~ ** Processing line: ~ if sprite_index~ ** Processing line: ~ # if the sprite_index is populated, use it to determine the source rectangle and render it~ ** Processing line: ~ args.nokia.sprites << {~ ** Processing line: ~ x: 42 - 16,~ ** Processing line: ~ y: 47 - 32,~ ** Processing line: ~ w: 32,~ ** Processing line: ~ h: 32,~ ** Processing line: ~ path: "sprites/explosion-sheet.png",~ ** Processing line: ~ source_x: 32 * sprite_index,~ ** Processing line: ~ source_y: 0,~ ** Processing line: ~ source_w: 32,~ ** Processing line: ~ source_h: 32~ ** Processing line: ~ }~ ** Processing line: ~ else~ ** Processing line: ~ # if the sprite_index is nil, render a countdown instead~ ** Processing line: ~ countdown_in_seconds = ((start_animation_on_tick - args.state.tick_count) / 60).round(1)~ ** Processing line: ~~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 0,~ ** Processing line: ~ y: 18,~ ** Processing line: ~ text: "Count Down: #{countdown_in_seconds.to_sf}",~ ** Processing line: ~ alignment_enum: 0)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # render the current tick and the resolved sprite index~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 0,~ ** Processing line: ~ y: 11,~ ** Processing line: ~ text: "tick: #{args.state.tick_count}")~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 0,~ ** Processing line: ~ y: 5,~ ** Processing line: ~ text: "sprite_index: #{sprite_index}")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ # ==== HOW TO STORE STATE, ACCEPT INPUT, AND RENDER SPRITE BASED OFF OF STATE =~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ def how_to_move_a_sprite args~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 42,~ ** Processing line: ~ y: 46, text: "Use Arrow Keys",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 42,~ ** Processing line: ~ y: 41, text: "Or WASD",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 42,~ ** Processing line: ~ y: 36, text: "Or Click",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~~ ** Processing line: ~ # set the initial values for x and y using ||= ("or equal operator")~ ** Processing line: ~ args.state.ship.x ||= 0~ ** Processing line: ~ args.state.ship.y ||= 0~ ** Processing line: ~~ ** Processing line: ~ # if a mouse click occurs, update the ship's x and y to be the location of the click~ ** Processing line: ~ if args.nokia.mouse_click~ ** Processing line: ~ args.state.ship.x = args.nokia.mouse_click.x~ ** Processing line: ~ args.state.ship.y = args.nokia.mouse_click.y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if a or left arrow is pressed/held, decrement the ships x position~ ** Processing line: ~ if args.nokia.keyboard.left~ ** Processing line: ~ args.state.ship.x -= 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if d or right arrow is pressed/held, increment the ships x position~ ** Processing line: ~ if args.nokia.keyboard.right~ ** Processing line: ~ args.state.ship.x += 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if s or down arrow is pressed/held, decrement the ships y position~ ** Processing line: ~ if args.nokia.keyboard.down~ ** Processing line: ~ args.state.ship.y -= 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if w or up arrow is pressed/held, increment the ships y position~ ** Processing line: ~ if args.nokia.keyboard.up~ ** Processing line: ~ args.state.ship.y += 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # render the sprite to the screen using the position stored in args.state.ship~ ** Processing line: ~ args.nokia.sprites << {~ ** Processing line: ~ x: args.state.ship.x,~ ** Processing line: ~ y: args.state.ship.y,~ ** Processing line: ~ w: 5,~ ** Processing line: ~ h: 5,~ ** Processing line: ~ path: 'sprites/monochrome-ship.png',~ ** Processing line: ~ # parameters beyond this point are optional~ ** Processing line: ~ angle: 0, # Note: rotation angle is denoted in degrees NOT radians~ ** Processing line: ~ r: 255,~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 255,~ ** Processing line: ~ a: 255~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HOW TO DETERMINE COLLISION =======================================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ def how_to_determine_collision args~ ** Processing line: ~ # Render the instructions~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 42,~ ** Processing line: ~ y: 46, text: "Click Anywhere",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~~ ** Processing line: ~ # if a mouse click occurs:~ ** Processing line: ~ # - set ship_one if it isn't set~ ** Processing line: ~ # - set ship_two if it isn't set~ ** Processing line: ~ # - otherwise reset ship one and ship two~ ** Processing line: ~ if args.nokia.mouse_click~ ** Processing line: ~ # is ship_one set?~ ** Processing line: ~ if !args.state.ship_one~ ** Processing line: ~ args.state.ship_one = { x: args.nokia.mouse_click.x - 5,~ ** Processing line: ~ y: args.nokia.mouse_click.y - 5,~ ** Processing line: ~ w: 10,~ ** Processing line: ~ h: 10 }~ ** Processing line: ~ # is ship_one set?~ ** Processing line: ~ elsif !args.state.ship_two~ ** Processing line: ~ args.state.ship_two = { x: args.nokia.mouse_click.x - 5,~ ** Processing line: ~ y: args.nokia.mouse_click.y - 5,~ ** Processing line: ~ w: 10,~ ** Processing line: ~ h: 10 }~ ** Processing line: ~ # should we reset?~ ** Processing line: ~ else~ ** Processing line: ~ args.state.ship_one = nil~ ** Processing line: ~ args.state.ship_two = nil~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # render ship one if it's set~ ** Processing line: ~ if args.state.ship_one~ ** Processing line: ~ # use Ruby's .merge method which is available on ~Hash~ to set the sprite and alpha~ ** Processing line: ~ # render ship one~ ** Processing line: ~ args.nokia.sprites << args.state.ship_one.merge(path: 'sprites/monochrome-ship.png')~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.ship_two~ ** Processing line: ~ # use Ruby's .merge method which is available on ~Hash~ to set the sprite and alpha~ ** Processing line: ~ # render ship two~ ** Processing line: ~ args.nokia.sprites << args.state.ship_two.merge(path: 'sprites/monochrome-ship.png')~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if both ship one and ship two are set, then determine collision~ ** Processing line: ~ if args.state.ship_one && args.state.ship_two~ ** Processing line: ~ # collision is determined using the intersect_rect? method~ ** Processing line: ~ if args.state.ship_one.intersect_rect? args.state.ship_two~ ** Processing line: ~ # if collision occurred, render the words collision!~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 42,~ ** Processing line: ~ y: 5,~ ** Processing line: ~ text: "Collision!",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~ else~ ** Processing line: ~ # if collision occurred, render the words no collision.~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 42,~ ** Processing line: ~ y: 5,~ ** Processing line: ~ text: "No Collision.",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ # if both ship one and ship two aren't set, then render --~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 42,~ ** Processing line: ~ y: 6,~ ** Processing line: ~ text: "--",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ # ==== HOW TO CREATE BUTTONS ==================================================~ ** Processing line: ~ # =============================================================================~ ** Processing line: ~ def how_to_create_buttons args~ ** Processing line: ~ # Define a button style~ ** Processing line: ~ args.state.button_style = { w: 82, h: 10, }~ ** Processing line: ~~ ** Processing line: ~ # Render instructions~ ** Processing line: ~ args.state.button_message ||= "Press a Button!"~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 42,~ ** Processing line: ~ y: 82,~ ** Processing line: ~ text: args.state.button_message,~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Creates button one using a border and a label~ ** Processing line: ~ args.state.button_one_border = args.state.button_style.merge( x: 1, y: 32)~ ** Processing line: ~ args.nokia.borders << args.state.button_one_border~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: args.state.button_one_border.x + 2,~ ** Processing line: ~ y: args.state.button_one_border.y + NOKIA_FONT_SM_HEIGHT + 2,~ ** Processing line: ~ text: "Button One")~ ** Processing line: ~~ ** Processing line: ~ # Creates button two using a border and a label~ ** Processing line: ~ args.state.button_two_border = args.state.button_style.merge( x: 1, y: 20)~ ** Processing line: ~~ ** Processing line: ~ args.nokia.borders << args.state.button_two_border~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: args.state.button_two_border.x + 2,~ ** Processing line: ~ y: args.state.button_two_border.y + NOKIA_FONT_SM_HEIGHT + 2,~ ** Processing line: ~ text: "Button Two")~ ** Processing line: ~~ ** Processing line: ~ # Initialize the state variable that tracks which button was clicked to "" (empty stringI~ ** Processing line: ~ args.state.last_button_clicked ||= "--"~ ** Processing line: ~~ ** Processing line: ~ # If a click occurs, check to see if either button one, or button two was clicked~ ** Processing line: ~ # using the inside_rect? method of the mouse~ ** Processing line: ~ # set args.state.last_button_clicked accordingly~ ** Processing line: ~ if args.nokia.mouse_click~ ** Processing line: ~ if args.nokia.mouse_click.inside_rect? args.state.button_one_border~ ** Processing line: ~ args.state.last_button_clicked = "One Clicked!"~ ** Processing line: ~ elsif args.nokia.mouse_click.inside_rect? args.state.button_two_border~ ** Processing line: ~ args.state.last_button_clicked = "Two Clicked!"~ ** Processing line: ~ else~ ** Processing line: ~ args.state.last_button_clicked = "--"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Render the current value of args.state.last_button_clicked~ ** Processing line: ~ args.nokia.labels << args.nokia~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 42,~ ** Processing line: ~ y: 5,~ ** Processing line: ~ text: args.state.last_button_clicked,~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_debug args~ ** Processing line: ~ if !args.state.grid_rendered~ ** Processing line: ~ (NOKIA_HEIGHT + 1).map_with_index do |i|~ ** Processing line: ~ args.outputs.static_debug << {~ ** Processing line: ~ x: NOKIA_X_OFFSET,~ ** Processing line: ~ y: NOKIA_Y_OFFSET + (i * NOKIA_ZOOM),~ ** Processing line: ~ x2: NOKIA_X_OFFSET + NOKIA_ZOOMED_WIDTH,~ ** Processing line: ~ y2: NOKIA_Y_OFFSET + (i * NOKIA_ZOOM),~ ** Processing line: ~ r: 128,~ ** Processing line: ~ g: 128,~ ** Processing line: ~ b: 128,~ ** Processing line: ~ a: 80~ ** Processing line: ~ }.line~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ (NOKIA_WIDTH + 1).map_with_index do |i|~ ** Processing line: ~ args.outputs.static_debug << {~ ** Processing line: ~ x: NOKIA_X_OFFSET + (i * NOKIA_ZOOM),~ ** Processing line: ~ y: NOKIA_Y_OFFSET,~ ** Processing line: ~ x2: NOKIA_X_OFFSET + (i * NOKIA_ZOOM),~ ** Processing line: ~ y2: NOKIA_Y_OFFSET + NOKIA_ZOOMED_HEIGHT,~ ** Processing line: ~ r: 128,~ ** Processing line: ~ g: 128,~ ** Processing line: ~ b: 128,~ ** Processing line: ~ a: 80~ ** Processing line: ~ }.line~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.grid_rendered = true~ ** Processing line: ~~ ** Processing line: ~ args.state.last_click ||= 0~ ** Processing line: ~ args.state.last_up ||= 0~ ** Processing line: ~ args.state.last_click = args.state.tick_count if args.nokia.mouse_down # you can also use args.nokia.click~ ** Processing line: ~ args.state.last_up = args.state.tick_count if args.nokia.mouse_up~ ** Processing line: ~ args.state.label_style = { size_enum: -1.5 }~ ** Processing line: ~~ ** Processing line: ~ args.state.watch_list = [~ ** Processing line: ~ "args.state.tick_count is: #{args.state.tick_count}",~ ** Processing line: ~ "args.nokia.mouse_position is: #{args.nokia.mouse_position.x}, #{args.nokia.mouse_position.y}",~ ** Processing line: ~ "args.nokia.mouse_down tick: #{args.state.last_click || "never"}",~ ** Processing line: ~ "args.nokia.mouse_up tick: #{args.state.last_up || "false"}",~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << args.state~ ** Processing line: ~ .watch_list~ ** Processing line: ~ .map_with_index do |text, i|~ ** Processing line: ~ {~ ** Processing line: ~ x: 5,~ ** Processing line: ~ y: 720 - (i * 18),~ ** Processing line: ~ text: text,~ ** Processing line: ~ size_enum: -1.5,~ ** Processing line: ~ r: 255, g: 255, b: 255~ ** Processing line: ~ }.label!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << {~ ** Processing line: ~ x: 640,~ ** Processing line: ~ y: 25,~ ** Processing line: ~ text: "INFO: dev mode is currently enabled. Comment out the invocation of ~render_debug~ within the ~tick~ method to hide the debug layer.",~ ** Processing line: ~ size_enum: -0.5,~ ** Processing line: ~ alignment_enum: 1,~ ** Processing line: ~ r: 255, g: 255, b: 255~ ** Processing line: ~ }.label!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def snake_demo args~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Lowrez - Nokia 3310 - nokia.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Lowrez - Nokia 3310 - nokia.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Lowrez - Nokia 3310 - nokia.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_lowrez/nokia_3310/app/nokia.rb~ ** Processing line: ~ # Emulation of a 64x64 canvas. Don't change this file unless you know what you're doing :-)~ ** Processing line: ~ # Head over to main.rb and study the code there.~ ** Processing line: ~~ ** Processing line: ~ NOKIA_WIDTH = 84~ ** Processing line: ~ NOKIA_HEIGHT = 48~ ** Processing line: ~ NOKIA_ZOOM = 12~ ** Processing line: ~ NOKIA_ZOOMED_WIDTH = NOKIA_WIDTH * NOKIA_ZOOM~ ** Processing line: ~ NOKIA_ZOOMED_HEIGHT = NOKIA_HEIGHT * NOKIA_ZOOM~ ** Processing line: ~ NOKIA_X_OFFSET = (1280 - NOKIA_ZOOMED_WIDTH).half~ ** Processing line: ~ NOKIA_Y_OFFSET = ( 720 - NOKIA_ZOOMED_HEIGHT).half~ ** Processing line: ~~ ** Processing line: ~ NOKIA_FONT_XL = -1~ ** Processing line: ~ NOKIA_FONT_XL_HEIGHT = 20~ ** Processing line: ~~ ** Processing line: ~ NOKIA_FONT_LG = -3.5~ ** Processing line: ~ NOKIA_FONT_LG_HEIGHT = 15~ ** Processing line: ~~ ** Processing line: ~ NOKIA_FONT_MD = -6~ ** Processing line: ~ NOKIA_FONT_MD_HEIGHT = 10~ ** Processing line: ~~ ** Processing line: ~ NOKIA_FONT_SM = -8.5~ ** Processing line: ~ NOKIA_FONT_SM_HEIGHT = 5~ ** Processing line: ~~ ** Processing line: ~ NOKIA_FONT_PATH = 'fonts/lowrez.ttf'~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ class NokiaOutputs~ ** Processing line: ~ attr_accessor :width, :height~ ** Processing line: ~~ ** Processing line: ~ def initialize args~ ** Processing line: ~ @args = args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def outputs_nokia~ ** Processing line: ~ return @args.outputs if @args.state.tick_count <= 0~ ** Processing line: ~ return @args.outputs[:nokia]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def solids~ ** Processing line: ~ outputs_nokia.solids~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def borders~ ** Processing line: ~ outputs_nokia.borders~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def sprites~ ** Processing line: ~ outputs_nokia.sprites~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def labels~ ** Processing line: ~ outputs_nokia.labels~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def default_label~ ** Processing line: ~ {~ ** Processing line: ~ x: 0,~ ** Processing line: ~ y: 63,~ ** Processing line: ~ text: "",~ ** Processing line: ~ size_enum: NOKIA_FONT_SM,~ ** Processing line: ~ alignment_enum: 0,~ ** Processing line: ~ r: 0,~ ** Processing line: ~ g: 0,~ ** Processing line: ~ b: 0,~ ** Processing line: ~ a: 255,~ ** Processing line: ~ font: NOKIA_FONT_PATH~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def lines~ ** Processing line: ~ outputs_nokia.lines~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def primitives~ ** Processing line: ~ outputs_nokia.primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def click~ ** Processing line: ~ return nil unless @args.inputs.mouse.click~ ** Processing line: ~ mouse~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mouse_click~ ** Processing line: ~ click~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mouse_down~ ** Processing line: ~ @args.inputs.mouse.down~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mouse_up~ ** Processing line: ~ @args.inputs.mouse.up~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mouse~ ** Processing line: ~ [~ ** Processing line: ~ ((@args.inputs.mouse.x - NOKIA_X_OFFSET).idiv(NOKIA_ZOOM)),~ ** Processing line: ~ ((@args.inputs.mouse.y - NOKIA_Y_OFFSET).idiv(NOKIA_ZOOM))~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mouse_position~ ** Processing line: ~ mouse~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def keyboard~ ** Processing line: ~ @args.inputs.keyboard~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class GTK::Args~ ** Processing line: ~ def init_nokia~ ** Processing line: ~ return if @nokia~ ** Processing line: ~ @nokia = NokiaOutputs.new self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def nokia~ ** Processing line: ~ @nokia~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Runtime~ ** Processing line: ~ alias_method :__original_tick_core__, :tick_core unless Runtime.instance_methods.include?(:__original_tick_core__)~ ** Processing line: ~~ ** Processing line: ~ def tick_core~ ** Processing line: ~ @args.init_nokia~ ** Processing line: ~~ ** Processing line: ~ __original_tick_core__~ ** Processing line: ~~ ** Processing line: ~ return if @args.state.tick_count <= 0~ ** Processing line: ~~ ** Processing line: ~ @args.render_target(:nokia)~ ** Processing line: ~ .labels~ ** Processing line: ~ .each do |l|~ ** Processing line: ~ l.y += 1~ ** Processing line: ~ if (l.a || 255) > 128~ ** Processing line: ~ l.r = 67~ ** Processing line: ~ l.g = 82~ ** Processing line: ~ l.b = 61~ ** Processing line: ~ l.a = 255~ ** Processing line: ~ else~ ** Processing line: ~ l.a = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @args.render_target(:nokia)~ ** Processing line: ~ .sprites~ ** Processing line: ~ .each do |s|~ ** Processing line: ~ if (s.a || 255) > 128~ ** Processing line: ~ s.a = 255~ ** Processing line: ~ else~ ** Processing line: ~ s.a = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @args.render_target(:nokia)~ ** Processing line: ~ .solids~ ** Processing line: ~ .each do |s|~ ** Processing line: ~ if (s.a || 255) > 128~ ** Processing line: ~ s.r = 67~ ** Processing line: ~ s.g = 82~ ** Processing line: ~ s.b = 61~ ** Processing line: ~ s.a = 255~ ** Processing line: ~ else~ ** Processing line: ~ s.a = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @args.render_target(:nokia)~ ** Processing line: ~ .borders~ ** Processing line: ~ .each do |s|~ ** Processing line: ~ if (s.a || 255) > 128~ ** Processing line: ~ s.r = 67~ ** Processing line: ~ s.g = 82~ ** Processing line: ~ s.b = 61~ ** Processing line: ~ s.a = 255~ ** Processing line: ~ else~ ** Processing line: ~ s.a = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @args.render_target(:nokia)~ ** Processing line: ~ .lines~ ** Processing line: ~ .each do |l|~ ** Processing line: ~ l.y += 1~ ** Processing line: ~ l.y2 += 1~ ** Processing line: ~ l.y2 += 1 if l.y1 != l.y2~ ** Processing line: ~ l.x2 += 1 if l.x1 != l.x2~ ** Processing line: ~~ ** Processing line: ~ if (l.a || 255) > 128~ ** Processing line: ~ l.r = 67~ ** Processing line: ~ l.g = 82~ ** Processing line: ~ l.b = 61~ ** Processing line: ~ l.a = 255~ ** Processing line: ~ else~ ** Processing line: ~ l.a = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @args.outputs.borders << {~ ** Processing line: ~ x: NOKIA_X_OFFSET - 1,~ ** Processing line: ~ y: NOKIA_Y_OFFSET - 1,~ ** Processing line: ~ w: NOKIA_ZOOMED_WIDTH + 2,~ ** Processing line: ~ h: NOKIA_ZOOMED_HEIGHT + 2,~ ** Processing line: ~ r: 128, g: 128, b: 128~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ @args.outputs.background_color = [199, 240, 216]~ ** Processing line: ~~ ** Processing line: ~ @args.outputs.solids << [0, 0, NOKIA_X_OFFSET, 720]~ ** Processing line: ~ @args.outputs.solids << [0, 0, 1280, NOKIA_Y_OFFSET]~ ** Processing line: ~ @args.outputs.solids << [NOKIA_X_OFFSET + NOKIA_ZOOMED_WIDTH, 0, NOKIA_X_OFFSET, 720]~ ** Processing line: ~ @args.outputs.solids << [0, NOKIA_Y_OFFSET.from_top, 1280, NOKIA_Y_OFFSET]~ ** Processing line: ~~ ** Processing line: ~ @args.outputs~ ** Processing line: ~ .sprites << { x: NOKIA_X_OFFSET,~ ** Processing line: ~ y: NOKIA_Y_OFFSET,~ ** Processing line: ~ w: NOKIA_ZOOMED_WIDTH,~ ** Processing line: ~ h: NOKIA_ZOOMED_HEIGHT,~ ** Processing line: ~ source_x: 0,~ ** Processing line: ~ source_y: 0,~ ** Processing line: ~ source_w: NOKIA_WIDTH,~ ** Processing line: ~ source_h: NOKIA_HEIGHT,~ ** Processing line: ~ path: :nokia }~ ** Processing line: ~~ ** Processing line: ~ if !@args.state.overlay_rendered~ ** Processing line: ~ (NOKIA_HEIGHT + 1).map_with_index do |i|~ ** Processing line: ~ @args.outputs.static_lines << {~ ** Processing line: ~ x: NOKIA_X_OFFSET,~ ** Processing line: ~ y: NOKIA_Y_OFFSET + (i * NOKIA_ZOOM),~ ** Processing line: ~ x2: NOKIA_X_OFFSET + NOKIA_ZOOMED_WIDTH,~ ** Processing line: ~ y2: NOKIA_Y_OFFSET + (i * NOKIA_ZOOM),~ ** Processing line: ~ r: 199,~ ** Processing line: ~ g: 240,~ ** Processing line: ~ b: 216,~ ** Processing line: ~ a: 100~ ** Processing line: ~ }.line!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ (NOKIA_WIDTH + 1).map_with_index do |i|~ ** Processing line: ~ @args.outputs.static_lines << {~ ** Processing line: ~ x: NOKIA_X_OFFSET + (i * NOKIA_ZOOM),~ ** Processing line: ~ y: NOKIA_Y_OFFSET,~ ** Processing line: ~ x2: NOKIA_X_OFFSET + (i * NOKIA_ZOOM),~ ** Processing line: ~ y2: NOKIA_Y_OFFSET + NOKIA_ZOOMED_HEIGHT,~ ** Processing line: ~ r: 199,~ ** Processing line: ~ g: 240,~ ** Processing line: ~ b: 216,~ ** Processing line: ~ a: 100~ ** Processing line: ~ }.line!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @args.state.overlay_rendered = true~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Lowrez - Resolution 64x64 - lowrez.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Lowrez - Resolution 64x64 - lowrez.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Lowrez - Resolution 64x64 - lowrez.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_lowrez/resolution_64x64/app/lowrez.rb~ ** Processing line: ~ # Emulation of a 64x64 canvas. Don't change this file unless you know what you're doing :-)~ ** Processing line: ~ # Head over to main.rb and study the code there.~ ** Processing line: ~~ ** Processing line: ~ LOWREZ_SIZE = 64~ ** Processing line: ~ LOWREZ_ZOOM = 10~ ** Processing line: ~ LOWREZ_ZOOMED_SIZE = LOWREZ_SIZE * LOWREZ_ZOOM~ ** Processing line: ~ LOWREZ_X_OFFSET = (1280 - LOWREZ_ZOOMED_SIZE).half~ ** Processing line: ~ LOWREZ_Y_OFFSET = ( 720 - LOWREZ_ZOOMED_SIZE).half~ ** Processing line: ~~ ** Processing line: ~ LOWREZ_FONT_XL = -1~ ** Processing line: ~ LOWREZ_FONT_XL_HEIGHT = 20~ ** Processing line: ~~ ** Processing line: ~ LOWREZ_FONT_LG = -3.5~ ** Processing line: ~ LOWREZ_FONT_LG_HEIGHT = 15~ ** Processing line: ~~ ** Processing line: ~ LOWREZ_FONT_MD = -6~ ** Processing line: ~ LOWREZ_FONT_MD_HEIGHT = 10~ ** Processing line: ~~ ** Processing line: ~ LOWREZ_FONT_SM = -8.5~ ** Processing line: ~ LOWREZ_FONT_SM_HEIGHT = 5~ ** Processing line: ~~ ** Processing line: ~ LOWREZ_FONT_PATH = 'fonts/lowrez.ttf'~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ class LowrezOutputs~ ** Processing line: ~ attr_accessor :width, :height~ ** Processing line: ~~ ** Processing line: ~ def initialize args~ ** Processing line: ~ @args = args~ ** Processing line: ~ @background_color ||= [0, 0, 0]~ ** Processing line: ~ @args.outputs.background_color = @background_color~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def background_color~ ** Processing line: ~ @background_color ||= [0, 0, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def background_color= opts~ ** Processing line: ~ @background_color = opts~ ** Processing line: ~ @args.outputs.background_color = @background_color~ ** Processing line: ~~ ** Processing line: ~ outputs_lowrez.solids << [0, 0, LOWREZ_SIZE, LOWREZ_SIZE, @background_color]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def outputs_lowrez~ ** Processing line: ~ return @args.outputs if @args.state.tick_count <= 0~ ** Processing line: ~ return @args.outputs[:lowrez]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def solids~ ** Processing line: ~ outputs_lowrez.solids~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def borders~ ** Processing line: ~ outputs_lowrez.borders~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def sprites~ ** Processing line: ~ outputs_lowrez.sprites~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def labels~ ** Processing line: ~ outputs_lowrez.labels~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def default_label~ ** Processing line: ~ {~ ** Processing line: ~ x: 0,~ ** Processing line: ~ y: 63,~ ** Processing line: ~ text: "",~ ** Processing line: ~ size_enum: LOWREZ_FONT_SM,~ ** Processing line: ~ alignment_enum: 0,~ ** Processing line: ~ r: 0,~ ** Processing line: ~ g: 0,~ ** Processing line: ~ b: 0,~ ** Processing line: ~ a: 255,~ ** Processing line: ~ font: LOWREZ_FONT_PATH~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def lines~ ** Processing line: ~ outputs_lowrez.lines~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def primitives~ ** Processing line: ~ outputs_lowrez.primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def click~ ** Processing line: ~ return nil unless @args.inputs.mouse.click~ ** Processing line: ~ mouse~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mouse_click~ ** Processing line: ~ click~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mouse_down~ ** Processing line: ~ @args.inputs.mouse.down~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mouse_up~ ** Processing line: ~ @args.inputs.mouse.up~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mouse~ ** Processing line: ~ [~ ** Processing line: ~ ((@args.inputs.mouse.x - LOWREZ_X_OFFSET).idiv(LOWREZ_ZOOM)),~ ** Processing line: ~ ((@args.inputs.mouse.y - LOWREZ_Y_OFFSET).idiv(LOWREZ_ZOOM))~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mouse_position~ ** Processing line: ~ mouse~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def keyboard~ ** Processing line: ~ @args.inputs.keyboard~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class GTK::Args~ ** Processing line: ~ def init_lowrez~ ** Processing line: ~ return if @lowrez~ ** Processing line: ~ @lowrez = LowrezOutputs.new self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def lowrez~ ** Processing line: ~ @lowrez~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Runtime~ ** Processing line: ~ alias_method :__original_tick_core__, :tick_core unless Runtime.instance_methods.include?(:__original_tick_core__)~ ** Processing line: ~~ ** Processing line: ~ def tick_core~ ** Processing line: ~ @args.init_lowrez~ ** Processing line: ~ __original_tick_core__~ ** Processing line: ~~ ** Processing line: ~ return if @args.state.tick_count <= 0~ ** Processing line: ~~ ** Processing line: ~ @args.render_target(:lowrez)~ ** Processing line: ~ .labels~ ** Processing line: ~ .each do |l|~ ** Processing line: ~ l.y += 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @args.render_target(:lowrez)~ ** Processing line: ~ .lines~ ** Processing line: ~ .each do |l|~ ** Processing line: ~ l.y += 1~ ** Processing line: ~ l.y2 += 1~ ** Processing line: ~ l.y2 += 1 if l.y1 != l.y2~ ** Processing line: ~ l.x2 += 1 if l.x1 != l.x2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @args.outputs~ ** Processing line: ~ .sprites << { x: 320,~ ** Processing line: ~ y: 40,~ ** Processing line: ~ w: 640,~ ** Processing line: ~ h: 640,~ ** Processing line: ~ source_x: 0,~ ** Processing line: ~ source_y: 0,~ ** Processing line: ~ source_w: 64,~ ** Processing line: ~ source_h: 64,~ ** Processing line: ~ path: :lowrez }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Lowrez - Resolution 64x64 - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Lowrez - Resolution 64x64 - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Lowrez - Resolution 64x64 - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_lowrez/resolution_64x64/app/main.rb~ ** Processing line: ~ require 'app/lowrez.rb'~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ # How to set the background color~ ** Processing line: ~ args.lowrez.background_color = [255, 255, 255]~ ** Processing line: ~~ ** Processing line: ~ # ==== HELLO WORLD ======================================================~ ** Processing line: ~ # Steps to get started:~ ** Processing line: ~ # 1. ~def tick args~ is the entry point for your game.~ ** Processing line: ~ # 2. There are quite a few code samples below, remove the "##"~ ** Processing line: ~ # before each line and save the file to see the changes.~ ** Processing line: ~ # 3. 0, 0 is in bottom left and 63, 63 is in top right corner.~ ** Processing line: ~ # 4. Be sure to come to the discord channel if you need~ ** Processing line: ~ # more help: [[http://discord.dragonruby.org]].~ ** Processing line: ~~ ** Processing line: ~ # Commenting and uncommenting code:~ ** Processing line: ~ # - Add a "#" infront of lines to comment out code~ ** Processing line: ~ # - Remove the "#" infront of lines to comment out code~ ** Processing line: ~~ ** Processing line: ~ # Invoke the hello_world subroutine/method~ ** Processing line: ~ hello_world args # <---- add a "#" to the beginning of the line to stop running this subroutine/method.~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # ==== HOW TO RENDER A LABEL ============================================~ ** Processing line: ~ # Uncomment the line below to invoke the how_to_render_a_label subroutine/method.~ ** Processing line: ~ # Note: The method is defined in this file with the signature ~def how_to_render_a_label args~~ ** Processing line: ~ # Scroll down to the method to see the details.~ ** Processing line: ~~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_render_a_label args # <---- remove the "#" at the begging of this line to run the method~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # ==== HOW TO RENDER A FILLED SQUARE (SOLID) ============================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_render_solids args~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # ==== HOW TO RENDER AN UNFILLED SQUARE (BORDER) ========================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_render_borders args~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # ==== HOW TO RENDER A LINE =============================================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_render_lines args~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # == HOW TO RENDER A SPRITE =============================================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_render_sprites args~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # ==== HOW TO MOVE A SPRITE BASED OFF OF USER INPUT =====================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_move_a_sprite args~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # ==== HOW TO ANIMATE A SPRITE (SEPERATE PNGS) ==========================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_animate_a_sprite args~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # ==== HOW TO ANIMATE A SPRITE (SPRITE SHEET) ===========================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_animate_a_sprite_sheet args~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # ==== HOW TO DETERMINE COLLISION =============================================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_determine_collision args~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # ==== HOW TO CREATE BUTTONS ==================================================~ ** Processing line: ~ # Remove the "#" at the beginning of the line below~ ** Processing line: ~ # how_to_create_buttons args~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # ==== The line below renders a debug grid, mouse information, and current tick~ ** Processing line: ~ render_debug args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def hello_world args~ ** Processing line: ~ args.lowrez.solids << { x: 0, y: 64, w: 10, h: 10, r: 255 }~ ** Processing line: ~~ ** Processing line: ~ args.lowrez.labels << {~ ** Processing line: ~ x: 32,~ ** Processing line: ~ y: 63,~ ** Processing line: ~ text: "lowrezjam 2020",~ ** Processing line: ~ size_enum: LOWREZ_FONT_SM,~ ** Processing line: ~ alignment_enum: 1,~ ** Processing line: ~ r: 0,~ ** Processing line: ~ g: 0,~ ** Processing line: ~ b: 0,~ ** Processing line: ~ a: 255,~ ** Processing line: ~ font: LOWREZ_FONT_PATH~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ args.lowrez.sprites << {~ ** Processing line: ~ x: 32 - 10,~ ** Processing line: ~ y: 32 - 10,~ ** Processing line: ~ w: 20,~ ** Processing line: ~ h: 20,~ ** Processing line: ~ path: 'sprites/lowrez-ship-blue.png',~ ** Processing line: ~ a: args.state.tick_count % 255,~ ** Processing line: ~ angle: args.state.tick_count % 360~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HOW TO RENDER A LABEL ============================================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ def how_to_render_a_label args~ ** Processing line: ~ # NOTE: Text is aligned from the TOP LEFT corner~ ** Processing line: ~~ ** Processing line: ~ # Render an EXTRA LARGE/XL label (remove the "#" in front of each line below)~ ** Processing line: ~ args.lowrez.labels << { x: 0, y: 57, text: "Hello World",~ ** Processing line: ~ size_enum: LOWREZ_FONT_XL,~ ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ ** Processing line: ~ font: LOWREZ_FONT_PATH }~ ** Processing line: ~~ ** Processing line: ~ # Render a LARGE/LG label (remove the "#" in front of each line below)~ ** Processing line: ~ args.lowrez.labels << { x: 0, y: 36, text: "Hello World",~ ** Processing line: ~ size_enum: LOWREZ_FONT_LG,~ ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ ** Processing line: ~ font: LOWREZ_FONT_PATH }~ ** Processing line: ~~ ** Processing line: ~ # Render a MEDIUM/MD label (remove the "#" in front of each line below)~ ** Processing line: ~ args.lowrez.labels << { x: 0, y: 20, text: "Hello World",~ ** Processing line: ~ size_enum: LOWREZ_FONT_MD,~ ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ ** Processing line: ~ font: LOWREZ_FONT_PATH }~ ** Processing line: ~~ ** Processing line: ~ # Render a SMALL/SM label (remove the "#" in front of each line below)~ ** Processing line: ~ args.lowrez.labels << { x: 0, y: 9, text: "Hello World",~ ** Processing line: ~ size_enum: LOWREZ_FONT_SM,~ ** Processing line: ~ r: 0, g: 0, b: 0, a: 255,~ ** Processing line: ~ font: LOWREZ_FONT_PATH }~ ** Processing line: ~~ ** Processing line: ~ # You are provided args.lowrez.default_label which returns a Hash that you~ ** Processing line: ~ # can ~merge~ properties with~ ** Processing line: ~ # Example 1~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(text: "Default")~ ** Processing line: ~~ ** Processing line: ~ # Example 2~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 31,~ ** Processing line: ~ text: "Default",~ ** Processing line: ~ r: 128,~ ** Processing line: ~ g: 128,~ ** Processing line: ~ b: 128)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ ## # ==== HOW TO RENDER FILLED SQUARES (SOLIDS) ==================================~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ def how_to_render_solids args~ ** Processing line: ~ # Render a red square at 0, 0 with a width and height of 1~ ** Processing line: ~ args.lowrez.solids << { x: 0, y: 0, w: 1, h: 1, r: 255, g: 0, b: 0, a: 255 }~ ** Processing line: ~~ ** Processing line: ~ # Render a red square at 1, 1 with a width and height of 2~ ** Processing line: ~ args.lowrez.solids << { x: 1, y: 1, w: 2, h: 2, r: 255, g: 0, b: 0, a: 255 }~ ** Processing line: ~~ ** Processing line: ~ # Render a red square at 3, 3 with a width and height of 3~ ** Processing line: ~ args.lowrez.solids << { x: 3, y: 3, w: 3, h: 3, r: 255, g: 0, b: 0 }~ ** Processing line: ~~ ** Processing line: ~ # Render a red square at 6, 6 with a width and height of 4~ ** Processing line: ~ args.lowrez.solids << { x: 6, y: 6, w: 4, h: 4, r: 255, g: 0, b: 0 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ ## # ==== HOW TO RENDER UNFILLED SQUARES (BORDERS) ===============================~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ def how_to_render_borders args~ ** Processing line: ~ # Render a red square at 0, 0 with a width and height of 3~ ** Processing line: ~ args.lowrez.borders << { x: 0, y: 0, w: 3, h: 3, r: 255, g: 0, b: 0, a: 255 }~ ** Processing line: ~~ ** Processing line: ~ # Render a red square at 3, 3 with a width and height of 3~ ** Processing line: ~ args.lowrez.borders << { x: 3, y: 3, w: 4, h: 4, r: 255, g: 0, b: 0, a: 255 }~ ** Processing line: ~~ ** Processing line: ~ # Render a red square at 5, 5 with a width and height of 4~ ** Processing line: ~ args.lowrez.borders << { x: 7, y: 7, w: 5, h: 5, r: 255, g: 0, b: 0, a: 255 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ ## # ==== HOW TO RENDER A LINE ===================================================~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ def how_to_render_lines args~ ** Processing line: ~ # Render a horizontal line at the bottom~ ** Processing line: ~ args.lowrez.lines << { x: 0, y: 0, x2: 63, y2: 0, r: 255 }~ ** Processing line: ~~ ** Processing line: ~ # Render a vertical line at the left~ ** Processing line: ~ args.lowrez.lines << { x: 0, y: 0, x2: 0, y2: 63, r: 255 }~ ** Processing line: ~~ ** Processing line: ~ # Render a diagonal line starting from the bottom left and going to the top right~ ** Processing line: ~ args.lowrez.lines << { x: 0, y: 0, x2: 63, y2: 63, r: 255 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ ## # == HOW TO RENDER A SPRITE ===================================================~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ def how_to_render_sprites args~ ** Processing line: ~ # Loop 10 times and create 10 sprites in 10 positions~ ** Processing line: ~ # Render a sprite at the bottom left with a width and height of 5 and a path of 'sprites/lowrez-ship-blue.png'~ ** Processing line: ~ 10.times do |i|~ ** Processing line: ~ args.lowrez.sprites << {~ ** Processing line: ~ x: i * 5,~ ** Processing line: ~ y: i * 5,~ ** Processing line: ~ w: 5,~ ** Processing line: ~ h: 5,~ ** Processing line: ~ path: 'sprites/lowrez-ship-blue.png'~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Given an array of positions create sprites~ ** Processing line: ~ positions = [~ ** Processing line: ~ { x: 10, y: 42 },~ ** Processing line: ~ { x: 15, y: 45 },~ ** Processing line: ~ { x: 22, y: 33 },~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ positions.each do |position|~ ** Processing line: ~ # use Ruby's ~Hash#merge~ function to create a sprite~ ** Processing line: ~ args.lowrez.sprites << position.merge(path: 'sprites/lowrez-ship-red.png',~ ** Processing line: ~ w: 5,~ ** Processing line: ~ h: 5)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ ## # ==== HOW TO ANIMATE A SPRITE (SEPERATE PNGS) ==========================~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ def how_to_animate_a_sprite args~ ** Processing line: ~ # STEP 1: Define when you want the animation to start. The animation in this case will start in 3 seconds~ ** Processing line: ~ start_animation_on_tick = 180~ ** Processing line: ~~ ** Processing line: ~ # STEP 2: Get the frame_index given the start tick.~ ** Processing line: ~ sprite_index = start_animation_on_tick.frame_index count: 7, # how many sprites?~ ** Processing line: ~ hold_for: 4, # how long to hold each sprite?~ ** Processing line: ~ repeat: true # should it repeat?~ ** Processing line: ~~ ** Processing line: ~ # STEP 3: frame_index will return nil if the frame hasn't arrived yet~ ** Processing line: ~ if sprite_index~ ** Processing line: ~ # if the sprite_index is populated, use it to determine the sprite path and render it~ ** Processing line: ~ sprite_path = "sprites/explosion-#{sprite_index}.png"~ ** Processing line: ~ args.lowrez.sprites << { x: 0, y: 0, w: 64, h: 64, path: sprite_path }~ ** Processing line: ~ else~ ** Processing line: ~ # if the sprite_index is nil, render a countdown instead~ ** Processing line: ~ countdown_in_seconds = ((start_animation_on_tick - args.state.tick_count) / 60).round(1)~ ** Processing line: ~~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 32,~ ** Processing line: ~ y: 32,~ ** Processing line: ~ text: "Count Down: #{countdown_in_seconds}",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # render the current tick and the resolved sprite index~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 0,~ ** Processing line: ~ y: 11,~ ** Processing line: ~ text: "Tick: #{args.state.tick_count}")~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 0,~ ** Processing line: ~ y: 5,~ ** Processing line: ~ text: "sprite_index: #{sprite_index}")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ ## # ==== HOW TO ANIMATE A SPRITE (SPRITE SHEET) =================================~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ def how_to_animate_a_sprite_sheet args~ ** Processing line: ~ # STEP 1: Define when you want the animation to start. The animation in this case will start in 3 seconds~ ** Processing line: ~ start_animation_on_tick = 180~ ** Processing line: ~~ ** Processing line: ~ # STEP 2: Get the frame_index given the start tick.~ ** Processing line: ~ sprite_index = start_animation_on_tick.frame_index count: 7, # how many sprites?~ ** Processing line: ~ hold_for: 4, # how long to hold each sprite?~ ** Processing line: ~ repeat: true # should it repeat?~ ** Processing line: ~~ ** Processing line: ~ # STEP 3: frame_index will return nil if the frame hasn't arrived yet~ ** Processing line: ~ if sprite_index~ ** Processing line: ~ # if the sprite_index is populated, use it to determine the source rectangle and render it~ ** Processing line: ~ args.lowrez.sprites << {~ ** Processing line: ~ x: 0,~ ** Processing line: ~ y: 0,~ ** Processing line: ~ w: 64,~ ** Processing line: ~ h: 64,~ ** Processing line: ~ path: "sprites/explosion-sheet.png",~ ** Processing line: ~ source_x: 32 * sprite_index,~ ** Processing line: ~ source_y: 0,~ ** Processing line: ~ source_w: 32,~ ** Processing line: ~ source_h: 32~ ** Processing line: ~ }~ ** Processing line: ~ else~ ** Processing line: ~ # if the sprite_index is nil, render a countdown instead~ ** Processing line: ~ countdown_in_seconds = ((start_animation_on_tick - args.state.tick_count) / 60).round(1)~ ** Processing line: ~~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 32,~ ** Processing line: ~ y: 32,~ ** Processing line: ~ text: "Count Down: #{countdown_in_seconds}",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # render the current tick and the resolved sprite index~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 0,~ ** Processing line: ~ y: 11,~ ** Processing line: ~ text: "tick: #{args.state.tick_count}")~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 0,~ ** Processing line: ~ y: 5,~ ** Processing line: ~ text: "sprite_index: #{sprite_index}")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ ## # ==== HOW TO STORE STATE, ACCEPT INPUT, AND RENDER SPRITE BASED OFF OF STATE =~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ def how_to_move_a_sprite args~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 32,~ ** Processing line: ~ y: 62, text: "Use Arrow Keys",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 32,~ ** Processing line: ~ y: 56, text: "Use WASD",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 32,~ ** Processing line: ~ y: 50, text: "Or Click",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~~ ** Processing line: ~ # set the initial values for x and y using ||= ("or equal operator")~ ** Processing line: ~ args.state.ship.x ||= 0~ ** Processing line: ~ args.state.ship.y ||= 0~ ** Processing line: ~~ ** Processing line: ~ # if a mouse click occurs, update the ship's x and y to be the location of the click~ ** Processing line: ~ if args.lowrez.mouse_click~ ** Processing line: ~ args.state.ship.x = args.lowrez.mouse_click.x~ ** Processing line: ~ args.state.ship.y = args.lowrez.mouse_click.y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if a or left arrow is pressed/held, decrement the ships x position~ ** Processing line: ~ if args.lowrez.keyboard.left~ ** Processing line: ~ args.state.ship.x -= 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if d or right arrow is pressed/held, increment the ships x position~ ** Processing line: ~ if args.lowrez.keyboard.right~ ** Processing line: ~ args.state.ship.x += 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if s or down arrow is pressed/held, decrement the ships y position~ ** Processing line: ~ if args.lowrez.keyboard.down~ ** Processing line: ~ args.state.ship.y -= 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if w or up arrow is pressed/held, increment the ships y position~ ** Processing line: ~ if args.lowrez.keyboard.up~ ** Processing line: ~ args.state.ship.y += 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # render the sprite to the screen using the position stored in args.state.ship~ ** Processing line: ~ args.lowrez.sprites << {~ ** Processing line: ~ x: args.state.ship.x,~ ** Processing line: ~ y: args.state.ship.y,~ ** Processing line: ~ w: 5,~ ** Processing line: ~ h: 5,~ ** Processing line: ~ path: 'sprites/lowrez-ship-blue.png',~ ** Processing line: ~ # parameters beyond this point are optional~ ** Processing line: ~ angle: 0, # Note: rotation angle is denoted in degrees NOT radians~ ** Processing line: ~ r: 255,~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 255,~ ** Processing line: ~ a: 255~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ # ==== HOW TO DETERMINE COLLISION =======================================~ ** Processing line: ~ # =======================================================================~ ** Processing line: ~ def how_to_determine_collision args~ ** Processing line: ~ # Render the instructions~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 32,~ ** Processing line: ~ y: 62, text: "Click Anywhere",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~~ ** Processing line: ~ # if a mouse click occurs:~ ** Processing line: ~ # - set ship_one if it isn't set~ ** Processing line: ~ # - set ship_two if it isn't set~ ** Processing line: ~ # - otherwise reset ship one and ship two~ ** Processing line: ~ if args.lowrez.mouse_click~ ** Processing line: ~ # is ship_one set?~ ** Processing line: ~ if !args.state.ship_one~ ** Processing line: ~ args.state.ship_one = { x: args.lowrez.mouse_click.x - 10,~ ** Processing line: ~ y: args.lowrez.mouse_click.y - 10,~ ** Processing line: ~ w: 20,~ ** Processing line: ~ h: 20 }~ ** Processing line: ~ # is ship_one set?~ ** Processing line: ~ elsif !args.state.ship_two~ ** Processing line: ~ args.state.ship_two = { x: args.lowrez.mouse_click.x - 10,~ ** Processing line: ~ y: args.lowrez.mouse_click.y - 10,~ ** Processing line: ~ w: 20,~ ** Processing line: ~ h: 20 }~ ** Processing line: ~ # should we reset?~ ** Processing line: ~ else~ ** Processing line: ~ args.state.ship_one = nil~ ** Processing line: ~ args.state.ship_two = nil~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # render ship one if it's set~ ** Processing line: ~ if args.state.ship_one~ ** Processing line: ~ # use Ruby's .merge method which is available on ~Hash~ to set the sprite and alpha~ ** Processing line: ~ # render ship one~ ** Processing line: ~ args.lowrez.sprites << args.state.ship_one.merge(path: 'sprites/lowrez-ship-blue.png', a: 100)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.ship_two~ ** Processing line: ~ # use Ruby's .merge method which is available on ~Hash~ to set the sprite and alpha~ ** Processing line: ~ # render ship two~ ** Processing line: ~ args.lowrez.sprites << args.state.ship_two.merge(path: 'sprites/lowrez-ship-red.png', a: 100)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if both ship one and ship two are set, then determine collision~ ** Processing line: ~ if args.state.ship_one && args.state.ship_two~ ** Processing line: ~ # collision is determined using the intersect_rect? method~ ** Processing line: ~ if args.state.ship_one.intersect_rect? args.state.ship_two~ ** Processing line: ~ # if collision occurred, render the words collision!~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 31,~ ** Processing line: ~ y: 5,~ ** Processing line: ~ text: "Collision!",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~ else~ ** Processing line: ~ # if collision occurred, render the words no collision.~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 31,~ ** Processing line: ~ y: 5,~ ** Processing line: ~ text: "No Collision.",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ # if both ship one and ship two aren't set, then render --~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(x: 31,~ ** Processing line: ~ y: 6,~ ** Processing line: ~ text: "--",~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ ## # ==== HOW TO CREATE BUTTONS ==================================================~ ** Processing line: ~ ## # =============================================================================~ ** Processing line: ~ def how_to_create_buttons args~ ** Processing line: ~ # Define a button style~ ** Processing line: ~ args.state.button_style = { w: 62, h: 10, r: 80, g: 80, b: 80 }~ ** Processing line: ~ args.state.label_style = { r: 80, g: 80, b: 80 }~ ** Processing line: ~~ ** Processing line: ~ # Render instructions~ ** Processing line: ~ args.state.button_message ||= "Press a Button!"~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(args.state.label_style)~ ** Processing line: ~ .merge(x: 32,~ ** Processing line: ~ y: 62,~ ** Processing line: ~ text: args.state.button_message,~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Creates button one using a border and a label~ ** Processing line: ~ args.state.button_one_border = args.state.button_style.merge( x: 1, y: 32)~ ** Processing line: ~ args.lowrez.borders << args.state.button_one_border~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(args.state.label_style)~ ** Processing line: ~ .merge(x: args.state.button_one_border.x + 2,~ ** Processing line: ~ y: args.state.button_one_border.y + LOWREZ_FONT_SM_HEIGHT + 2,~ ** Processing line: ~ text: "Button One")~ ** Processing line: ~~ ** Processing line: ~ # Creates button two using a border and a label~ ** Processing line: ~ args.state.button_two_border = args.state.button_style.merge( x: 1, y: 20)~ ** Processing line: ~~ ** Processing line: ~ args.lowrez.borders << args.state.button_two_border~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(args.state.label_style)~ ** Processing line: ~ .merge(x: args.state.button_two_border.x + 2,~ ** Processing line: ~ y: args.state.button_two_border.y + LOWREZ_FONT_SM_HEIGHT + 2,~ ** Processing line: ~ text: "Button Two")~ ** Processing line: ~~ ** Processing line: ~ # Initialize the state variable that tracks which button was clicked to "" (empty stringI~ ** Processing line: ~ args.state.last_button_clicked ||= "--"~ ** Processing line: ~~ ** Processing line: ~ # If a click occurs, check to see if either button one, or button two was clicked~ ** Processing line: ~ # using the inside_rect? method of the mouse~ ** Processing line: ~ # set args.state.last_button_clicked accordingly~ ** Processing line: ~ if args.lowrez.mouse_click~ ** Processing line: ~ if args.lowrez.mouse_click.inside_rect? args.state.button_one_border~ ** Processing line: ~ args.state.last_button_clicked = "One Clicked!"~ ** Processing line: ~ elsif args.lowrez.mouse_click.inside_rect? args.state.button_two_border~ ** Processing line: ~ args.state.last_button_clicked = "Two Clicked!"~ ** Processing line: ~ else~ ** Processing line: ~ args.state.last_button_clicked = "--"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Render the current value of args.state.last_button_clicked~ ** Processing line: ~ args.lowrez.labels << args.lowrez~ ** Processing line: ~ .default_label~ ** Processing line: ~ .merge(args.state.label_style)~ ** Processing line: ~ .merge(x: 32,~ ** Processing line: ~ y: 5,~ ** Processing line: ~ text: args.state.last_button_clicked,~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def render_debug args~ ** Processing line: ~ if !args.state.grid_rendered~ ** Processing line: ~ 65.map_with_index do |i|~ ** Processing line: ~ args.outputs.static_debug << {~ ** Processing line: ~ x: LOWREZ_X_OFFSET,~ ** Processing line: ~ y: LOWREZ_Y_OFFSET + (i * 10),~ ** Processing line: ~ x2: LOWREZ_X_OFFSET + LOWREZ_ZOOMED_SIZE,~ ** Processing line: ~ y2: LOWREZ_Y_OFFSET + (i * 10),~ ** Processing line: ~ r: 128,~ ** Processing line: ~ g: 128,~ ** Processing line: ~ b: 128,~ ** Processing line: ~ a: 80~ ** Processing line: ~ }.line!~ ** Processing line: ~~ ** Processing line: ~ args.outputs.static_debug << {~ ** Processing line: ~ x: LOWREZ_X_OFFSET + (i * 10),~ ** Processing line: ~ y: LOWREZ_Y_OFFSET,~ ** Processing line: ~ x2: LOWREZ_X_OFFSET + (i * 10),~ ** Processing line: ~ y2: LOWREZ_Y_OFFSET + LOWREZ_ZOOMED_SIZE,~ ** Processing line: ~ r: 128,~ ** Processing line: ~ g: 128,~ ** Processing line: ~ b: 128,~ ** Processing line: ~ a: 80~ ** Processing line: ~ }.line!~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.grid_rendered = true~ ** Processing line: ~~ ** Processing line: ~ args.state.last_click ||= 0~ ** Processing line: ~ args.state.last_up ||= 0~ ** Processing line: ~ args.state.last_click = args.state.tick_count if args.lowrez.mouse_down # you can also use args.lowrez.click~ ** Processing line: ~ args.state.last_up = args.state.tick_count if args.lowrez.mouse_up~ ** Processing line: ~ args.state.label_style = { size_enum: -1.5 }~ ** Processing line: ~~ ** Processing line: ~ args.state.watch_list = [~ ** Processing line: ~ "args.state.tick_count is: #{args.state.tick_count}",~ ** Processing line: ~ "args.lowrez.mouse_position is: #{args.lowrez.mouse_position.x}, #{args.lowrez.mouse_position.y}",~ ** Processing line: ~ "args.lowrez.mouse_down tick: #{args.state.last_click || "never"}",~ ** Processing line: ~ "args.lowrez.mouse_up tick: #{args.state.last_up || "false"}",~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << args.state~ ** Processing line: ~ .watch_list~ ** Processing line: ~ .map_with_index do |text, i|~ ** Processing line: ~ {~ ** Processing line: ~ x: 5,~ ** Processing line: ~ y: 720 - (i * 20),~ ** Processing line: ~ text: text,~ ** Processing line: ~ size_enum: -1.5~ ** Processing line: ~ }.label!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << {~ ** Processing line: ~ x: 640,~ ** Processing line: ~ y: 25,~ ** Processing line: ~ text: "INFO: dev mode is currently enabled. Comment out the invocation of ~render_debug~ within the ~tick~ method to hide the debug layer.",~ ** Processing line: ~ size_enum: -0.5,~ ** Processing line: ~ alignment_enum: 1~ ** Processing line: ~ }.label!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Mario - Jumping - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Mario - Jumping - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Mario - Jumping - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_mario/01_jumping/app/main.rb~ ** Processing line: ~ def tick args~ ** Processing line: ~ defaults args~ ** Processing line: ~ render args~ ** Processing line: ~ input args~ ** Processing line: ~ calc args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults args~ ** Processing line: ~ args.state.player.x ||= args.grid.w.half~ ** Processing line: ~ args.state.player.y ||= 0~ ** Processing line: ~ args.state.player.size ||= 100~ ** Processing line: ~ args.state.player.dy ||= 0~ ** Processing line: ~ args.state.player.action ||= :jumping~ ** Processing line: ~ args.state.jump.power = 20~ ** Processing line: ~ args.state.jump.increase_frames = 10~ ** Processing line: ~ args.state.jump.increase_power = 1~ ** Processing line: ~ args.state.gravity = -1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render args~ ** Processing line: ~ args.outputs.sprites << {~ ** Processing line: ~ x: args.state.player.x -~ ** Processing line: ~ args.state.player.size.half,~ ** Processing line: ~ y: args.state.player.y,~ ** Processing line: ~ w: args.state.player.size,~ ** Processing line: ~ h: args.state.player.size,~ ** Processing line: ~ path: 'sprites/square/red.png'~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input args~ ** Processing line: ~ if args.inputs.keyboard.key_down.space~ ** Processing line: ~ if args.state.player.action == :standing~ ** Processing line: ~ args.state.player.action = :jumping~ ** Processing line: ~ args.state.player.dy = args.state.jump.power~ ** Processing line: ~~ ** Processing line: ~ # record when the action took place~ ** Processing line: ~ current_frame = args.state.tick_count~ ** Processing line: ~ args.state.player.action_at = current_frame~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # if the space bar is being held~ ** Processing line: ~ if args.inputs.keyboard.key_held.space~ ** Processing line: ~ # is the player jumping~ ** Processing line: ~ is_jumping = args.state.player.action == :jumping~ ** Processing line: ~~ ** Processing line: ~ # when was the jump performed~ ** Processing line: ~ time_of_jump = args.state.player.action_at~ ** Processing line: ~~ ** Processing line: ~ # how much time has passed since the jump~ ** Processing line: ~ jump_elapsed_time = time_of_jump.elapsed_time~ ** Processing line: ~~ ** Processing line: ~ # how much time is allowed for increasing power~ ** Processing line: ~ time_allowed = args.state.jump.increase_frames~ ** Processing line: ~~ ** Processing line: ~ # if the player is jumping~ ** Processing line: ~ # and the elapsed time is less than~ ** Processing line: ~ # the allowed time~ ** Processing line: ~ if is_jumping && jump_elapsed_time < time_allowed~ ** Processing line: ~ # increase the dy by the increase power~ ** Processing line: ~ power_to_add = args.state.jump.increase_power~ ** Processing line: ~ args.state.player.dy += power_to_add~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc args~ ** Processing line: ~ if args.state.player.action == :jumping~ ** Processing line: ~ args.state.player.y += args.state.player.dy~ ** Processing line: ~ args.state.player.dy += args.state.gravity~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.player.y < 0~ ** Processing line: ~ args.state.player.y = 0~ ** Processing line: ~ args.state.player.action = :standing~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Mario - Jumping And Collisions - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Mario - Jumping And Collisions - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Mario - Jumping And Collisions - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_mario/02_jumping_and_collisions/app/main.rb~ ** Processing line: ~ class Game~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ input~ ** Processing line: ~ calc~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ return if state.tick_count != 0~ ** Processing line: ~~ ** Processing line: ~ player.x = 64~ ** Processing line: ~ player.y = 800~ ** Processing line: ~ player.size = 50~ ** Processing line: ~ player.dx = 0~ ** Processing line: ~ player.dy = 0~ ** Processing line: ~ player.action = :falling~ ** Processing line: ~~ ** Processing line: ~ player.max_speed = 20~ ** Processing line: ~ player.jump_power = 15~ ** Processing line: ~ player.jump_air_time = 15~ ** Processing line: ~ player.jump_increase_power = 1~ ** Processing line: ~~ ** Processing line: ~ state.gravity = -1~ ** Processing line: ~ state.drag = 0.001~ ** Processing line: ~ state.tile_size = 64~ ** Processing line: ~ state.tiles ||= [~ ** Processing line: ~ { ordinal_x: 0, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 1, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 2, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 3, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 4, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 5, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 6, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 7, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 8, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 9, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 10, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 11, ordinal_y: 0 },~ ** Processing line: ~ { ordinal_x: 12, ordinal_y: 0 },~ ** Processing line: ~~ ** Processing line: ~ { ordinal_x: 9, ordinal_y: 3 },~ ** Processing line: ~ { ordinal_x: 10, ordinal_y: 3 },~ ** Processing line: ~ { ordinal_x: 11, ordinal_y: 3 },~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ tiles.each do |t|~ ** Processing line: ~ t.rect = { x: t.ordinal_x * 64,~ ** Processing line: ~ y: t.ordinal_y * 64,~ ** Processing line: ~ w: 64,~ ** Processing line: ~ h: 64 }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render~ ** Processing line: ~ render_player~ ** Processing line: ~ render_tiles~ ** Processing line: ~ # render_grid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input~ ** Processing line: ~ input_jump~ ** Processing line: ~ input_move~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc~ ** Processing line: ~ calc_player_rect~ ** Processing line: ~ calc_left~ ** Processing line: ~ calc_right~ ** Processing line: ~ calc_below~ ** Processing line: ~ calc_above~ ** Processing line: ~ calc_player_dy~ ** Processing line: ~ calc_player_dx~ ** Processing line: ~ calc_game_over~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_player~ ** Processing line: ~ outputs.sprites << {~ ** Processing line: ~ x: player.x,~ ** Processing line: ~ y: player.y,~ ** Processing line: ~ w: player.size,~ ** Processing line: ~ h: player.size,~ ** Processing line: ~ path: 'sprites/square/red.png'~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_tiles~ ** Processing line: ~ outputs.sprites << state.tiles.map do |t|~ ** Processing line: ~ t.merge path: 'sprites/square/white.png',~ ** Processing line: ~ x: t.ordinal_x * 64,~ ** Processing line: ~ y: t.ordinal_y * 64,~ ** Processing line: ~ w: 64,~ ** Processing line: ~ h: 64~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_grid~ ** Processing line: ~ if state.tick_count == 0~ ** Processing line: ~ outputs[:grid].background_color = [0, 0, 0, 0]~ ** Processing line: ~ outputs[:grid].borders << available_brick_locations~ ** Processing line: ~ outputs[:grid].labels << available_brick_locations.map do |b|~ ** Processing line: ~ [~ ** Processing line: ~ b.merge(text: "#{b.ordinal_x},#{b.ordinal_y}",~ ** Processing line: ~ x: b.x + 2,~ ** Processing line: ~ y: b.y + 2,~ ** Processing line: ~ size_enum: -3,~ ** Processing line: ~ vertical_alignment_enum: 0,~ ** Processing line: ~ blendmode_enum: 0),~ ** Processing line: ~ b.merge(text: "#{b.x},#{b.y}",~ ** Processing line: ~ x: b.x + 2,~ ** Processing line: ~ y: b.y + 2 + 20,~ ** Processing line: ~ size_enum: -3,~ ** Processing line: ~ vertical_alignment_enum: 0,~ ** Processing line: ~ blendmode_enum: 0)~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.sprites << { x: 0, y: 0, w: 1280, h: 720, path: :grid }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_jump~ ** Processing line: ~ if inputs.keyboard.key_down.space~ ** Processing line: ~ player_jump~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.key_held.space~ ** Processing line: ~ player_jump_increase_air_time~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_move~ ** Processing line: ~ if player.dx.abs < 20~ ** Processing line: ~ if inputs.keyboard.left~ ** Processing line: ~ player.dx -= 2~ ** Processing line: ~ elsif inputs.keyboard.right~ ** Processing line: ~ player.dx += 2~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_game_over~ ** Processing line: ~ if player.y < -64~ ** Processing line: ~ player.x = 64~ ** Processing line: ~ player.y = 800~ ** Processing line: ~ player.dx = 0~ ** Processing line: ~ player.dy = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_player_rect~ ** Processing line: ~ player.rect = player_current_rect~ ** Processing line: ~ player.next_rect = player_next_rect~ ** Processing line: ~ player.prev_rect = player_prev_rect~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_player_dx~ ** Processing line: ~ player.dx = player_next_dx~ ** Processing line: ~ player.x += player.dx~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_player_dy~ ** Processing line: ~ player.y += player.dy~ ** Processing line: ~ player.dy = player_next_dy~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_below~ ** Processing line: ~ return unless player.dy < 0~ ** Processing line: ~ tiles_below = tiles_find { |t| t.rect.top <= player.prev_rect.y }~ ** Processing line: ~ collision = tiles_find_colliding tiles_below, (player.rect.merge y: player.next_rect.y)~ ** Processing line: ~ if collision~ ** Processing line: ~ player.y = collision.rect.y + state.tile_size~ ** Processing line: ~ player.dy = 0~ ** Processing line: ~ player.action = :standing~ ** Processing line: ~ else~ ** Processing line: ~ player.action = :falling~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_left~ ** Processing line: ~ return unless player.dx < 0 && player_next_dx < 0~ ** Processing line: ~ tiles_left = tiles_find { |t| t.rect.right <= player.prev_rect.left }~ ** Processing line: ~ collision = tiles_find_colliding tiles_left, (player.rect.merge x: player.next_rect.x)~ ** Processing line: ~ return unless collision~ ** Processing line: ~ player.x = collision.rect.right~ ** Processing line: ~ player.dx = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_right~ ** Processing line: ~ return unless player.dx > 0 && player_next_dx > 0~ ** Processing line: ~ tiles_right = tiles_find { |t| t.rect.left >= player.prev_rect.right }~ ** Processing line: ~ collision = tiles_find_colliding tiles_right, (player.rect.merge x: player.next_rect.x)~ ** Processing line: ~ return unless collision~ ** Processing line: ~ player.x = collision.rect.left - player.rect.w~ ** Processing line: ~ player.dx = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_above~ ** Processing line: ~ return unless player.dy > 0~ ** Processing line: ~ tiles_above = tiles_find { |t| t.rect.y >= player.prev_rect.y }~ ** Processing line: ~ collision = tiles_find_colliding tiles_above, (player.rect.merge y: player.next_rect.y)~ ** Processing line: ~ return unless collision~ ** Processing line: ~ player.dy = 0~ ** Processing line: ~ player.y = collision.rect.bottom - player.rect.h~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_current_rect~ ** Processing line: ~ { x: player.x, y: player.y, w: player.size, h: player.size }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def available_brick_locations~ ** Processing line: ~ (0..19).to_a~ ** Processing line: ~ .product(0..11)~ ** Processing line: ~ .map do |(ordinal_x, ordinal_y)|~ ** Processing line: ~ { ordinal_x: ordinal_x,~ ** Processing line: ~ ordinal_y: ordinal_y,~ ** Processing line: ~ x: ordinal_x * 64,~ ** Processing line: ~ y: ordinal_y * 64,~ ** Processing line: ~ w: 64,~ ** Processing line: ~ h: 64 }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player~ ** Processing line: ~ state.player ||= args.state.new_entity :player~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_next_dy~ ** Processing line: ~ player.dy + state.gravity + state.drag ** 2 * -1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_next_dx~ ** Processing line: ~ player.dx * 0.8~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_next_rect~ ** Processing line: ~ player.rect.merge x: player.x + player_next_dx,~ ** Processing line: ~ y: player.y + player_next_dy~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_prev_rect~ ** Processing line: ~ player.rect.merge x: player.x - player.dx,~ ** Processing line: ~ y: player.y - player.dy~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_jump~ ** Processing line: ~ return if player.action != :standing~ ** Processing line: ~ player.action = :jumping~ ** Processing line: ~ player.dy = state.player.jump_power~ ** Processing line: ~ current_frame = state.tick_count~ ** Processing line: ~ player.action_at = current_frame~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_jump_increase_air_time~ ** Processing line: ~ return if player.action != :jumping~ ** Processing line: ~ return if player.action_at.elapsed_time >= player.jump_air_time~ ** Processing line: ~ player.dy += player.jump_increase_power~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tiles~ ** Processing line: ~ state.tiles~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tiles_find_colliding tiles, target~ ** Processing line: ~ tiles.find { |t| t.rect.intersect_rect? target }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tiles_find &block~ ** Processing line: ~ tiles.find_all(&block)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $game ||= Game.new~ ** Processing line: ~ $game.args = args~ ** Processing line: ~ $game.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Platformer - Clepto Frog - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - Clepto Frog - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - Clepto Frog - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_platformer/clepto_frog/app/main.rb~ ** Processing line: ~ MAP_FILE_PATH = 'map.txt'~ ** Processing line: ~~ ** Processing line: ~ require 'app/map.rb'~ ** Processing line: ~~ ** Processing line: ~ class CleptoFrog~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def render_ending~ ** Processing line: ~ state.game_over_at ||= state.tick_count~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [640, 700, "Clepto Frog", 4, 1]~ ** Processing line: ~~ ** Processing line: ~ if state.tick_count >= (state.game_over_at + 120)~ ** Processing line: ~ outputs.labels << [640, 620, "\"I... I.... don't believe it.\" - New Guy",~ ** Processing line: ~ 4, 1, 0, 0, 0, 255 * (state.game_over_at + 120).ease(60)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if state.tick_count >= (state.game_over_at + 240)~ ** Processing line: ~ outputs.labels << [640, 580, "\"He actually stole all the mugs?\" - New Guy",~ ** Processing line: ~ 4, 1, 0, 0, 0, 255 * (state.game_over_at + 240).ease(60)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if state.tick_count >= (state.game_over_at + 360)~ ** Processing line: ~ outputs.labels << [640, 540, "\"Kind of feel bad STARTING HIM WITH NOTHING again.\" - New Guy",~ ** Processing line: ~ 4, 1, 0, 0, 0, 255 * (state.game_over_at + 360).ease(60)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.sprites << [640 - 50, 360 - 50, 100, 100,~ ** Processing line: ~ "sprites/square-green.png"]~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [640, 300, "Current Time: #{"%.2f" % state.stuff_time}", 4, 1]~ ** Processing line: ~ outputs.labels << [640, 270, "Best Time: #{"%.2f" % state.stuff_best_time}", 4, 1]~ ** Processing line: ~~ ** Processing line: ~ if state.tick_count >= (state.game_over_at + 550)~ ** Processing line: ~ restart_game~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def restart_game~ ** Processing line: ~ state.world = nil~ ** Processing line: ~ state.x = nil~ ** Processing line: ~ state.y = nil~ ** Processing line: ~ state.dx = nil~ ** Processing line: ~ state.dy = nil~ ** Processing line: ~ state.stuff_score = 0~ ** Processing line: ~ state.stuff_time = 0~ ** Processing line: ~ state.intro_tick_count = nil~ ** Processing line: ~ defaults~ ** Processing line: ~ state.game_start_at = state.tick_count~ ** Processing line: ~ state.scene = :game~ ** Processing line: ~ state.game_over_at = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_intro~ ** Processing line: ~ outputs.labels << [640, 700, "Clepto Frog", 4, 1]~ ** Processing line: ~ if state.tick_count == 120~ ** Processing line: ~ state.scene = :game~ ** Processing line: ~ state.game_start_at = state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ if state.scene == :intro && state.tick_count <= 120~ ** Processing line: ~ render_intro~ ** Processing line: ~ elsif state.scene == :ending~ ** Processing line: ~ render_ending~ ** Processing line: ~ else~ ** Processing line: ~ render~ ** Processing line: ~ end~ ** Processing line: ~ calc~ ** Processing line: ~ process_inputs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ state.scene ||= :intro~ ** Processing line: ~ state.stuff_score ||= 0~ ** Processing line: ~ state.stuff_time ||= 0~ ** Processing line: ~ state.stuff_best_time ||= nil~ ** Processing line: ~ state.camera_x ||= 0~ ** Processing line: ~ state.camera_y ||= 0~ ** Processing line: ~ state.target_camera_scale ||= 1~ ** Processing line: ~ state.camera_scale ||= 1~ ** Processing line: ~ state.tongue_length ||= 100~ ** Processing line: ~ state.dev_action ||= :collision_mode~ ** Processing line: ~ state.action ||= :aiming~ ** Processing line: ~ state.tongue_angle ||= 90~ ** Processing line: ~ state.tile_size = 64~ ** Processing line: ~ state.gravity = -0.1~ ** Processing line: ~ state.air = -0.01~ ** Processing line: ~ state.player_width = 60~ ** Processing line: ~ state.player_height = 60~ ** Processing line: ~ state.collision_tolerance = 0.0~ ** Processing line: ~ state.previous_tile_size ||= state.tile_size~ ** Processing line: ~ state.x ||= 2400~ ** Processing line: ~ state.y ||= 200~ ** Processing line: ~ state.dy ||= 0~ ** Processing line: ~ state.dx ||= 0~ ** Processing line: ~ attempt_load_world_from_file~ ** Processing line: ~ state.world_lookup ||= { }~ ** Processing line: ~ state.world_collision_rects ||= []~ ** Processing line: ~ state.mode ||= :creating~ ** Processing line: ~ state.select_menu ||= [0, 720, 1280, 720]~ ** Processing line: ~ state.sprite_quantity ||= 20~ ** Processing line: ~ state.sprite_coords ||= []~ ** Processing line: ~ state.banner_coords ||= [640, 680 + 720]~ ** Processing line: ~ state.sprite_selected ||= 1~ ** Processing line: ~ state.map_saved_at ||= 0~ ** Processing line: ~ state.intro_tick_count ||= state.tick_count~ ** Processing line: ~ if state.sprite_coords == []~ ** Processing line: ~ count = 1~ ** Processing line: ~ temp_x = 165~ ** Processing line: ~ temp_y = 500 + 720~ ** Processing line: ~ state.sprite_quantity.times do~ ** Processing line: ~ state.sprite_coords += [[temp_x, temp_y, count]]~ ** Processing line: ~ temp_x += 100~ ** Processing line: ~ count += 1~ ** Processing line: ~ if temp_x > 1280 - (165 + 50)~ ** Processing line: ~ temp_x = 165~ ** Processing line: ~ temp_y -= 75~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def start_of_tongue x = nil, y = nil~ ** Processing line: ~ x ||= state.x~ ** Processing line: ~ y ||= state.y~ ** Processing line: ~ [~ ** Processing line: ~ x + state.player_width.half,~ ** Processing line: ~ y + state.player_height.half~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def stage_definition~ ** Processing line: ~ outputs.sprites << [vx(0), vy(0), vw(10000), vw(5875), 'sprites/level-map.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render~ ** Processing line: ~ stage_definition~ ** Processing line: ~ start_of_tongue_render = [vx(start_of_tongue.x), vy(start_of_tongue.y)]~ ** Processing line: ~ end_of_tongue_render = [vx(end_of_tongue.x), vy(end_of_tongue.y)]~ ** Processing line: ~~ ** Processing line: ~ if state.anchor_point~ ** Processing line: ~ anchor_point_render = [vx(state.anchor_point.x), vy(state.anchor_point.y)]~ ** Processing line: ~ outputs.sprites << { x: start_of_tongue_render.x,~ ** Processing line: ~ y: start_of_tongue_render.y,~ ** Processing line: ~ w: vw(2),~ ** Processing line: ~ h: args.geometry.distance(start_of_tongue_render, anchor_point_render),~ ** Processing line: ~ path: 'sprites/square-pink.png',~ ** Processing line: ~ angle_anchor_y: 0,~ ** Processing line: ~ angle: state.tongue_angle - 90 }~ ** Processing line: ~ else~ ** Processing line: ~ outputs.sprites << { x: vx(start_of_tongue.x),~ ** Processing line: ~ y: vy(start_of_tongue.y),~ ** Processing line: ~ w: vw(2),~ ** Processing line: ~ h: vh(state.tongue_length),~ ** Processing line: ~ path: 'sprites/square-pink.png',~ ** Processing line: ~ angle_anchor_y: 0,~ ** Processing line: ~ angle: state.tongue_angle - 90 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.sprites << state.objects.map { |o| [vx(o.x), vy(o.y), vw(o.w), vh(o.h), o.path] }~ ** Processing line: ~~ ** Processing line: ~ if state.god_mode~ ** Processing line: ~ # SHOW HIDE COLLISIONS~ ** Processing line: ~ outputs.sprites << state.world.map do |rect|~ ** Processing line: ~ x = vx(rect.x)~ ** Processing line: ~ y = vy(rect.y)~ ** Processing line: ~ if x > -80 && x < 1280 && y > -80 && y < 720~ ** Processing line: ~ {~ ** Processing line: ~ x: x,~ ** Processing line: ~ y: y,~ ** Processing line: ~ w: vw(rect.w || state.tile_size),~ ** Processing line: ~ h: vh(rect.h || state.tile_size),~ ** Processing line: ~ path: 'sprites/square-gray.png',~ ** Processing line: ~ a: 128~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ render_player~ ** Processing line: ~ outputs.sprites << [vx(2315), vy(45), vw(569), vh(402), 'sprites/square-blue.png', 0, 40]~ ** Processing line: ~~ ** Processing line: ~ # Label in top left of the screen~ ** Processing line: ~ outputs.primitives << [20, 640, 180, 70, 255, 255, 255, 128].solid~ ** Processing line: ~ outputs.primitives << [30, 700, "Stuff: #{state.stuff_score} of #{$mugs.count}", 1].label~ ** Processing line: ~ outputs.primitives << [30, 670, "Time: #{"%.2f" % state.stuff_time}", 1].label~ ** Processing line: ~~ ** Processing line: ~ if state.god_mode~ ** Processing line: ~ if state.map_saved_at > 0 && state.map_saved_at.elapsed_time < 120~ ** Processing line: ~ outputs.primitives << [920, 670, 'Map has been exported!', 1, 0, 50, 100, 50].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Creates sprite following mouse to help indicate which sprite you have selected~ ** Processing line: ~ outputs.primitives << [inputs.mouse.position.x - 32 * state.camera_scale,~ ** Processing line: ~ inputs.mouse.position.y - 32 * state.camera_scale,~ ** Processing line: ~ state.tile_size * state.camera_scale,~ ** Processing line: ~ state.tile_size * state.camera_scale, 'sprites/square-indigo.png', 0, 100].sprite~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ render_mini_map~ ** Processing line: ~ outputs.primitives << [0, 0, 1280, 720, 255, 255, 255, 255 * state.game_start_at.ease(60, :flip)].solid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_mini_map~ ** Processing line: ~ x, y = 1170, 10~ ** Processing line: ~ outputs.primitives << [x, y, 100, 58, 0, 0, 0, 200].solid~ ** Processing line: ~ outputs.primitives << [x + args.state.x.fdiv(100) - 1, y + args.state.y.fdiv(100) - 1, 2, 2, 0, 255, 0].solid~ ** Processing line: ~ t_start = start_of_tongue~ ** Processing line: ~ t_end = end_of_tongue~ ** Processing line: ~ outputs.primitives << [~ ** Processing line: ~ x + t_start.x.fdiv(100), y + t_start.y.fdiv(100),~ ** Processing line: ~ x + t_end.x.fdiv(100), y + t_end.y.fdiv(100),~ ** Processing line: ~ 255, 255, 255~ ** Processing line: ~ ].line~ ** Processing line: ~~ ** Processing line: ~ state.objects.each do |o|~ ** Processing line: ~ outputs.primitives << [x + o.x.fdiv(100) - 1, y + o.y.fdiv(100) - 1, 2, 2, 200, 200, 0].solid~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_camera percentage_override = nil~ ** Processing line: ~ percentage = percentage_override || (0.2 * state.camera_scale)~ ** Processing line: ~ target_scale = state.target_camera_scale~ ** Processing line: ~ distance_scale = target_scale - state.camera_scale~ ** Processing line: ~ state.camera_scale += distance_scale * percentage~ ** Processing line: ~~ ** Processing line: ~ target_x = state.x * state.target_camera_scale~ ** Processing line: ~ target_y = state.y * state.target_camera_scale~ ** Processing line: ~~ ** Processing line: ~ distance_x = target_x - (state.camera_x + 640)~ ** Processing line: ~ distance_y = target_y - (state.camera_y + 360)~ ** Processing line: ~ state.camera_x += distance_x * percentage if distance_x.abs > 1~ ** Processing line: ~ state.camera_y += distance_y * percentage if distance_y.abs > 1~ ** Processing line: ~ state.camera_x = 0 if state.camera_x < 0~ ** Processing line: ~ state.camera_y = 0 if state.camera_y < 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def vx x~ ** Processing line: ~ (x * state.camera_scale) - state.camera_x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def vy y~ ** Processing line: ~ (y * state.camera_scale) - state.camera_y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def vw w~ ** Processing line: ~ w * state.camera_scale~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def vh h~ ** Processing line: ~ h * state.camera_scale~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc~ ** Processing line: ~ calc_camera~ ** Processing line: ~ calc_world_lookup~ ** Processing line: ~ calc_player~ ** Processing line: ~ calc_on_floor~ ** Processing line: ~ calc_score~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_camera_scale v = nil~ ** Processing line: ~ return if v < 0.1~ ** Processing line: ~ state.target_camera_scale = v~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_inputs_god_mode~ ** Processing line: ~ return unless state.god_mode~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.key_down.equal_sign || (inputs.keyboard.equal_sign && state.tick_count.mod_zero?(10))~ ** Processing line: ~ set_camera_scale state.camera_scale + 0.1~ ** Processing line: ~ elsif inputs.keyboard.key_down.hyphen || (inputs.keyboard.hyphen && state.tick_count.mod_zero?(10))~ ** Processing line: ~ set_camera_scale state.camera_scale - 0.1~ ** Processing line: ~ elsif inputs.keyboard.eight || inputs.keyboard.zero~ ** Processing line: ~ set_camera_scale 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.mouse.click~ ** Processing line: ~ state.id_seed += 1~ ** Processing line: ~ id = state.id_seed~ ** Processing line: ~ x = state.camera_x + (inputs.mouse.click.x.fdiv(state.camera_scale) - 32)~ ** Processing line: ~ y = state.camera_y + (inputs.mouse.click.y.fdiv(state.camera_scale) - 32)~ ** Processing line: ~ x = ((x + 2).idiv 4) * 4~ ** Processing line: ~ y = ((y + 2).idiv 4) * 4~ ** Processing line: ~ w = 64~ ** Processing line: ~ h = 64~ ** Processing line: ~ candidate_rect = { id: id, x: x, y: y, w: w, h: h }~ ** Processing line: ~ scaled_candidate_rect = { x: x + 30, y: y + 30, w: w - 60, h: h - 60 }~ ** Processing line: ~ to_remove = state.world.find { |r| r.intersect_rect? scaled_candidate_rect }~ ** Processing line: ~ if to_remove && args.inputs.keyboard.x~ ** Processing line: ~ state.world.reject! { |r| r.id == to_remove.id }~ ** Processing line: ~ else~ ** Processing line: ~ state.world << candidate_rect~ ** Processing line: ~ end~ ** Processing line: ~ export_map~ ** Processing line: ~ state.world_lookup = {}~ ** Processing line: ~ state.world_collision_rects = nil~ ** Processing line: ~ calc_world_lookup~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if input_up?~ ** Processing line: ~ state.y += 10~ ** Processing line: ~ state.dy = 0~ ** Processing line: ~ elsif input_down?~ ** Processing line: ~ state.y -= 10~ ** Processing line: ~ state.dy = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if input_left?~ ** Processing line: ~ state.x -= 10~ ** Processing line: ~ state.dx = 0~ ** Processing line: ~ elsif input_right?~ ** Processing line: ~ state.x += 10~ ** Processing line: ~ state.dx = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_inputs~ ** Processing line: ~ if state.scene == :game~ ** Processing line: ~ process_inputs_player_movement~ ** Processing line: ~ process_inputs_god_mode~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_up?~ ** Processing line: ~ inputs.keyboard.w || inputs.keyboard.up || inputs.keyboard.k~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_up_released?~ ** Processing line: ~ inputs.keyboard.key_up.w ||~ ** Processing line: ~ inputs.keyboard.key_up.up ||~ ** Processing line: ~ inputs.keyboard.key_up.k~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_down?~ ** Processing line: ~ inputs.keyboard.s || inputs.keyboard.down || inputs.keyboard.j~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_down_released?~ ** Processing line: ~ inputs.keyboard.key_up.s ||~ ** Processing line: ~ inputs.keyboard.key_up.down ||~ ** Processing line: ~ inputs.keyboard.key_up.j~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_left?~ ** Processing line: ~ inputs.keyboard.a || inputs.keyboard.left || inputs.keyboard.h~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_right?~ ** Processing line: ~ inputs.keyboard.d || inputs.keyboard.right || inputs.keyboard.l~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_object path, w, h~ ** Processing line: ~ state.object = path~ ** Processing line: ~ state.object_w = w~ ** Processing line: ~ state.object_h = h~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def collision_mode~ ** Processing line: ~ state.dev_action = :collision_mode~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_inputs_player_movement~ ** Processing line: ~ if inputs.keyboard.key_down.g~ ** Processing line: ~ state.god_mode = !state.god_mode~ ** Processing line: ~ puts state.god_mode~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.key_down.u && state.dev_action == :collision_mode~ ** Processing line: ~ state.world = state.world[0..-2]~ ** Processing line: ~ state.world_lookup = {}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.key_down.space && !state.anchor_point~ ** Processing line: ~ state.tongue_length = 0~ ** Processing line: ~ state.action = :shooting~ ** Processing line: ~ outputs.sounds << 'sounds/shooting.wav'~ ** Processing line: ~ elsif inputs.keyboard.key_down.space~ ** Processing line: ~ state.action = :aiming~ ** Processing line: ~ state.anchor_point = nil~ ** Processing line: ~ state.tongue_length = 100~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if state.anchor_point~ ** Processing line: ~ if input_up?~ ** Processing line: ~ if state.tongue_length >= 105~ ** Processing line: ~ state.tongue_length -= 5~ ** Processing line: ~ state.dy += 0.8~ ** Processing line: ~ end~ ** Processing line: ~ elsif input_down?~ ** Processing line: ~ state.tongue_length += 5~ ** Processing line: ~ state.dy -= 0.8~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if input_left? && state.dx > 1~ ** Processing line: ~ state.dx *= 0.98~ ** Processing line: ~ elsif input_left? && state.dx < -1~ ** Processing line: ~ state.dx *= 1.03~ ** Processing line: ~ elsif input_left? && !state.on_floor~ ** Processing line: ~ state.dx -= 3~ ** Processing line: ~ elsif input_right? && state.dx > 1~ ** Processing line: ~ state.dx *= 1.03~ ** Processing line: ~ elsif input_right? && state.dx < -1~ ** Processing line: ~ state.dx *= 0.98~ ** Processing line: ~ elsif input_right? && !state.on_floor~ ** Processing line: ~ state.dx += 3~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ if input_left?~ ** Processing line: ~ state.tongue_angle += 1.5~ ** Processing line: ~ state.tongue_angle = state.tongue_angle~ ** Processing line: ~ elsif input_right?~ ** Processing line: ~ state.tongue_angle -= 1.5~ ** Processing line: ~ state.tongue_angle = state.tongue_angle~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def attempt_load_world_from_file~ ** Processing line: ~ return if state.world~ ** Processing line: ~ # exported_world = gtk.read_file(MAP_FILE_PATH)~ ** Processing line: ~ state.world = []~ ** Processing line: ~ state.objects = []~ ** Processing line: ~~ ** Processing line: ~ if $collisions~ ** Processing line: ~ state.id_seed ||= 0~ ** Processing line: ~ $collisions.each do |x, y, w, h|~ ** Processing line: ~ state.id_seed += 1~ ** Processing line: ~ state.world << { id: state.id_seed, x: x, y: y, w: w, h: h }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if $mugs~ ** Processing line: ~ $mugs.map do |x, y, w, h, path|~ ** Processing line: ~ state.objects << [x, y, w, h, path]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_world_lookup~ ** Processing line: ~ if state.tile_size != state.previous_tile_size~ ** Processing line: ~ state.previous_tile_size = state.tile_size~ ** Processing line: ~ state.world_lookup = {}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return if state.world_lookup.keys.length > 0~ ** Processing line: ~ return unless state.world.length > 0~ ** Processing line: ~~ ** Processing line: ~ # Searches through the world and finds the cordinates that exist~ ** Processing line: ~ state.world_lookup = {}~ ** Processing line: ~ state.world.each do |rect|~ ** Processing line: ~ state.world_lookup[rect.id] = rect~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Assigns collision rects for every sprite drawn~ ** Processing line: ~ state.world_collision_rects =~ ** Processing line: ~ state.world_lookup~ ** Processing line: ~ .keys~ ** Processing line: ~ .map do |key|~ ** Processing line: ~ rect = state.world_lookup[key]~ ** Processing line: ~ s = state.tile_size~ ** Processing line: ~ rect.w ||= s~ ** Processing line: ~ rect.h ||= s~ ** Processing line: ~ {~ ** Processing line: ~ args: rect,~ ** Processing line: ~ left_right: { x: rect.x, y: rect.y + 4, w: rect.w, h: rect.h - 6 },~ ** Processing line: ~ top: { x: rect.x + 4, y: rect.y + 6, w: rect.w - 8, h: rect.h - 6 },~ ** Processing line: ~ bottom: { x: rect.x + 1, y: rect.y - 1, w: rect.w - 2, h: rect.h - 8 },~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_pendulum~ ** Processing line: ~ return if !state.anchor_point~ ** Processing line: ~ target_x = state.anchor_point.x - start_of_tongue.x~ ** Processing line: ~ target_y = state.anchor_point.y -~ ** Processing line: ~ state.tongue_length - 5 - 20 - state.player_height~ ** Processing line: ~~ ** Processing line: ~ diff_y = state.y - target_y~ ** Processing line: ~~ ** Processing line: ~ if target_x > 0~ ** Processing line: ~ state.dx += 0.6~ ** Processing line: ~ elsif target_x < 0~ ** Processing line: ~ state.dx -= 0.6~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if diff_y > 0~ ** Processing line: ~ state.dy -= 0.1~ ** Processing line: ~ elsif diff_y < 0~ ** Processing line: ~ state.dy += 0.1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.dx *= 0.99~ ** Processing line: ~~ ** Processing line: ~ if state.dy.abs < 2~ ** Processing line: ~ state.dy *= 0.8~ ** Processing line: ~ else~ ** Processing line: ~ state.dy *= 0.90~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if state.tongue_length && state.y~ ** Processing line: ~ state.dy += state.tongue_angle.vector_y state.tongue_length.fdiv(1000)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_tongue_angle~ ** Processing line: ~ return unless state.anchor_point~ ** Processing line: ~ state.tongue_angle = args.geometry.angle_from state.anchor_point, start_of_tongue~ ** Processing line: ~ state.tongue_length = args.geometry.distance(start_of_tongue, state.anchor_point)~ ** Processing line: ~ state.tongue_length = state.tongue_length.greater(100)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_from_end_of_tongue~ ** Processing line: ~ p = state.tongue_angle.vector(state.tongue_length)~ ** Processing line: ~ derived_start = [state.anchor_point.x - p.x, state.anchor_point.y - p.y]~ ** Processing line: ~ derived_start.x -= state.player_width.half~ ** Processing line: ~ derived_start.y -= state.player_height.half~ ** Processing line: ~ derived_start~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def end_of_tongue~ ** Processing line: ~ p = state.tongue_angle.vector(state.tongue_length)~ ** Processing line: ~ { x: start_of_tongue.x + p.x, y: start_of_tongue.y + p.y }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_shooting~ ** Processing line: ~ calc_shooting_increment~ ** Processing line: ~ calc_shooting_increment~ ** Processing line: ~ calc_shooting_increment~ ** Processing line: ~ calc_shooting_increment~ ** Processing line: ~ calc_shooting_increment~ ** Processing line: ~ calc_shooting_increment~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_shooting_increment~ ** Processing line: ~ return unless state.action == :shooting~ ** Processing line: ~ state.tongue_length += 5~ ** Processing line: ~ potential_anchor = end_of_tongue~ ** Processing line: ~ if potential_anchor.x <= 0~ ** Processing line: ~ state.anchor_point = potential_anchor~ ** Processing line: ~ state.action = :anchored~ ** Processing line: ~ outputs.sounds << 'sounds/attached.wav'~ ** Processing line: ~ elsif potential_anchor.x >= 10000~ ** Processing line: ~ state.anchor_point = potential_anchor~ ** Processing line: ~ state.action = :anchored~ ** Processing line: ~ outputs.sounds << 'sounds/attached.wav'~ ** Processing line: ~ elsif potential_anchor.y <= 0~ ** Processing line: ~ state.anchor_point = potential_anchor~ ** Processing line: ~ state.action = :anchored~ ** Processing line: ~ outputs.sounds << 'sounds/attached.wav'~ ** Processing line: ~ elsif potential_anchor.y >= 5875~ ** Processing line: ~ state.anchor_point = potential_anchor~ ** Processing line: ~ state.action = :anchored~ ** Processing line: ~ outputs.sounds << 'sounds/attached.wav'~ ** Processing line: ~ else~ ** Processing line: ~ anchor_rect = { x: potential_anchor.x - 5, y: potential_anchor.y - 5, w: 10, h: 10 }~ ** Processing line: ~ collision = state.world_collision_rects.find_all do |v|~ ** Processing line: ~ v[:args].intersect_rect?(anchor_rect)~ ** Processing line: ~ end.first~ ** Processing line: ~ if collision~ ** Processing line: ~ state.anchor_point = potential_anchor~ ** Processing line: ~ state.action = :anchored~ ** Processing line: ~ outputs.sounds << 'sounds/attached.wav'~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_player~ ** Processing line: ~ calc_shooting~ ** Processing line: ~ if !state.god_mode~ ** Processing line: ~ state.dy += state.gravity # Since acceleration is the change in velocity, the change in y (dy) increases every frame~ ** Processing line: ~ state.dx += state.dx * state.air~ ** Processing line: ~ end~ ** Processing line: ~ calc_pendulum~ ** Processing line: ~ calc_box_collision~ ** Processing line: ~ calc_edge_collision~ ** Processing line: ~ if !state.god_mode~ ** Processing line: ~ state.y += state.dy~ ** Processing line: ~ state.x += state.dx~ ** Processing line: ~ end~ ** Processing line: ~ calc_tongue_angle~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_box_collision~ ** Processing line: ~ return unless state.world_lookup.keys.length > 0~ ** Processing line: ~ collision_floor~ ** Processing line: ~ collision_left~ ** Processing line: ~ collision_right~ ** Processing line: ~ collision_ceiling~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_edge_collision~ ** Processing line: ~ # Ensures that player doesn't fall below the map~ ** Processing line: ~ if next_y < 0 && state.dy < 0~ ** Processing line: ~ state.y = 0~ ** Processing line: ~ state.dy = state.dy.abs * 0.8~ ** Processing line: ~ state.collision_on_y = true~ ** Processing line: ~ # Ensures player doesn't go insanely high~ ** Processing line: ~ elsif next_y > 5875 - state.tile_size && state.dy > 0~ ** Processing line: ~ state.y = 5875 - state.tile_size~ ** Processing line: ~ state.dy = state.dy.abs * 0.8 * -1~ ** Processing line: ~ state.collision_on_y = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Ensures that player remains in the horizontal range its supposed to~ ** Processing line: ~ if state.x >= 10000 - state.tile_size && state.dx > 0~ ** Processing line: ~ state.x = 10000 - state.tile_size~ ** Processing line: ~ state.dx = state.dx.abs * 0.8 * -1~ ** Processing line: ~ state.collision_on_x = true~ ** Processing line: ~ elsif state.x <= 0 && state.dx < 0~ ** Processing line: ~ state.x = 0~ ** Processing line: ~ state.dx = state.dx.abs * 0.8~ ** Processing line: ~ state.collision_on_x = true~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def next_y~ ** Processing line: ~ state.y + state.dy~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def next_x~ ** Processing line: ~ if state.dx < 0~ ** Processing line: ~ return (state.x + state.dx) - (state.tile_size - state.player_width)~ ** Processing line: ~ else~ ** Processing line: ~ return (state.x + state.dx) + (state.tile_size - state.player_width)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def collision_floor~ ** Processing line: ~ return unless state.dy <= 0~ ** Processing line: ~~ ** Processing line: ~ player_rect = [state.x, next_y, state.tile_size, state.tile_size]~ ** Processing line: ~~ ** Processing line: ~ # Runs through all the sprites on the field and determines if the player hits the bottom of sprite (hence "-0.1" above)~ ** Processing line: ~ floor_collisions = state.world_collision_rects~ ** Processing line: ~ .find_all { |r| r[:top].intersect_rect?(player_rect, state.collision_tolerance) }~ ** Processing line: ~ .first~ ** Processing line: ~~ ** Processing line: ~ return unless floor_collisions~ ** Processing line: ~ state.y = floor_collisions[:top].top~ ** Processing line: ~ state.dy = state.dy.abs * 0.8~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def collision_left~ ** Processing line: ~ return unless state.dx < 0~ ** Processing line: ~ player_rect = [next_x, state.y, state.tile_size, state.tile_size]~ ** Processing line: ~~ ** Processing line: ~ # Runs through all the sprites on the field and determines if the player hits the left side of sprite (hence "-0.1" above)~ ** Processing line: ~ left_side_collisions = state.world_collision_rects~ ** Processing line: ~ .find_all { |r| r[:left_right].intersect_rect?(player_rect, state.collision_tolerance) }~ ** Processing line: ~ .first~ ** Processing line: ~~ ** Processing line: ~ return unless left_side_collisions~ ** Processing line: ~ state.x = left_side_collisions[:left_right].right + 1~ ** Processing line: ~ state.dx = state.dy.abs * 0.8~ ** Processing line: ~ state.collision_on_x = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def collision_right~ ** Processing line: ~ return unless state.dx > 0~ ** Processing line: ~~ ** Processing line: ~ player_rect = [next_x, state.y, state.tile_size, state.tile_size]~ ** Processing line: ~ # Runs through all the sprites on the field and determines if the player hits the right side of sprite (hence "-0.1" above)~ ** Processing line: ~ right_side_collisions = state.world_collision_rects~ ** Processing line: ~ .find_all { |r| r[:left_right].intersect_rect?(player_rect, state.collision_tolerance) }~ ** Processing line: ~ .first~ ** Processing line: ~~ ** Processing line: ~ return unless right_side_collisions~ ** Processing line: ~ state.x = right_side_collisions[:left_right].left - state.tile_size - 1~ ** Processing line: ~ state.dx = state.dx.abs * 0.8 * -1~ ** Processing line: ~ state.collision_on_x = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def collision_ceiling~ ** Processing line: ~ return unless state.dy > 0~ ** Processing line: ~~ ** Processing line: ~ player_rect = [state.x, next_y, state.player_width, state.player_height]~ ** Processing line: ~~ ** Processing line: ~ # Runs through all the sprites on the field and determines if the player hits the ceiling of sprite (hence "+0.1" above)~ ** Processing line: ~ ceil_collisions = state.world_collision_rects~ ** Processing line: ~ .find_all { |r| r[:bottom].intersect_rect?(player_rect, state.collision_tolerance) }~ ** Processing line: ~ .first~ ** Processing line: ~~ ** Processing line: ~ return unless ceil_collisions~ ** Processing line: ~ state.y = ceil_collisions[:bottom].y - state.tile_size - 1~ ** Processing line: ~ state.dy = state.dy.abs * 0.8 * -1~ ** Processing line: ~ state.collision_on_y = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_coord point~ ** Processing line: ~ # Integer divides (idiv) point.x to turn into grid~ ** Processing line: ~ # Then, you can just multiply each integer by state.tile_size~ ** Processing line: ~ # later and huzzah. Grid coordinates~ ** Processing line: ~ [point.x.idiv(state.tile_size), point.y.idiv(state.tile_size)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def export_map~ ** Processing line: ~ export_string = "$collisions = [\n"~ ** Processing line: ~ export_string += state.world.map do |rect|~ ** Processing line: ~ "[#{rect.x},#{rect.y},#{rect.w},#{rect.h}],"~ ** Processing line: ~ end.join "\n"~ ** Processing line: ~ export_string += "\n]\n\n"~ ** Processing line: ~ export_string += "$mugs = [\n"~ ** Processing line: ~ export_string += state.objects.map do |x, y, w, h, path|~ ** Processing line: ~ "[#{x},#{y},#{w},#{h},'#{path}'],"~ ** Processing line: ~ end.join "\n"~ ** Processing line: ~ export_string += "\n]\n\n"~ ** Processing line: ~ gtk.write_file(MAP_FILE_PATH, export_string)~ ** Processing line: ~ state.map_saved_at = state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inputs_export_stage~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_score~ ** Processing line: ~ return unless state.scene == :game~ ** Processing line: ~ player = [state.x, state.y, state.player_width, state.player_height]~ ** Processing line: ~ collected = state.objects.find_all { |s| s.intersect_rect? player }~ ** Processing line: ~ state.stuff_score += collected.length~ ** Processing line: ~ if collected.length > 0~ ** Processing line: ~ outputs.sounds << 'sounds/collectable.wav'~ ** Processing line: ~ end~ ** Processing line: ~ state.objects = state.objects.reject { |s| collected.include? s }~ ** Processing line: ~ state.stuff_time += 0.01~ ** Processing line: ~ if state.objects.length == 0~ ** Processing line: ~ if !state.stuff_best_time || state.stuff_time < state.stuff_best_time~ ** Processing line: ~ state.stuff_best_time = state.stuff_time~ ** Processing line: ~ end~ ** Processing line: ~ state.game_over_at = nil~ ** Processing line: ~ state.scene = :ending~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_on_floor~ ** Processing line: ~ if state.action == :anchored~ ** Processing line: ~ state.on_floor = false~ ** Processing line: ~ state.on_floor_debounce = 30~ ** Processing line: ~ else~ ** Processing line: ~ state.on_floor_debounce ||= 30~ ** Processing line: ~~ ** Processing line: ~ if state.dy.round != 0~ ** Processing line: ~ state.on_floor_debounce = 30~ ** Processing line: ~ state.on_floor = false~ ** Processing line: ~ else~ ** Processing line: ~ state.on_floor_debounce -= 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if state.on_floor_debounce <= 0~ ** Processing line: ~ state.on_floor_debounce = 0~ ** Processing line: ~ state.on_floor = true~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_player~ ** Processing line: ~ path = "sprites/square-green.png"~ ** Processing line: ~ angle = 0~ ** Processing line: ~ # outputs.labels << [vx(state.x), vy(state.y) - 30, "dy: #{state.dy.round}"]~ ** Processing line: ~ if state.action == :idle~ ** Processing line: ~ # outputs.labels << [vx(state.x), vy(state.y), "IDLE"]~ ** Processing line: ~ path = "sprites/square-green.png"~ ** Processing line: ~ elsif state.action == :aiming && !state.on_floor~ ** Processing line: ~ # outputs.labels << [vx(state.x), vy(state.y), "AIMING AIR BORN"]~ ** Processing line: ~ angle = state.tongue_angle - 90~ ** Processing line: ~ path = "sprites/square-green.png"~ ** Processing line: ~ elsif state.action == :aiming # ON THE GROUND~ ** Processing line: ~ # outputs.labels << [vx(state.x), vy(state.y), "AIMING GROUND"]~ ** Processing line: ~ path = "sprites/square-green.png"~ ** Processing line: ~ elsif state.action == :shooting && !state.on_floor~ ** Processing line: ~ # outputs.labels << [vx(state.x), vy(state.y), "SHOOTING AIR BORN"]~ ** Processing line: ~ path = "sprites/square-green.png"~ ** Processing line: ~ angle = state.tongue_angle - 90~ ** Processing line: ~ elsif state.action == :shooting~ ** Processing line: ~ # outputs.labels << [vx(state.x), vy(state.y), "SHOOTING ON GROUND"]~ ** Processing line: ~ path = "sprites/square-green.png"~ ** Processing line: ~ elsif state.action == :anchored~ ** Processing line: ~ # outputs.labels << [vx(state.x), vy(state.y), "SWINGING"]~ ** Processing line: ~ angle = state.tongue_angle - 90~ ** Processing line: ~ path = "sprites/square-green.png"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.sprites << [vx(state.x),~ ** Processing line: ~ vy(state.y),~ ** Processing line: ~ vw(state.player_width),~ ** Processing line: ~ vh(state.player_height),~ ** Processing line: ~ path,~ ** Processing line: ~ angle]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_player_old~ ** Processing line: ~ # Player~ ** Processing line: ~ if state.action == :aiming~ ** Processing line: ~ path = 'sprites\frg\idle\frog_idle.png'~ ** Processing line: ~ if state.dx > 2~ ** Processing line: ~ #directional right sprite was here but i needa redo it~ ** Processing line: ~ path = 'sprites\frg\anchor\frog-anchor-0.png'~ ** Processing line: ~ #directional left sprite was here but i needa redo it~ ** Processing line: ~ elsif state.dx < -2~ ** Processing line: ~ path = 'sprites\frg\anchor\frog-anchor-0.png'~ ** Processing line: ~ end~ ** Processing line: ~ outputs.sprites << [vx(state.x),~ ** Processing line: ~ vy(state.y),~ ** Processing line: ~ vw(state.player_width),~ ** Processing line: ~ vh(state.player_height),~ ** Processing line: ~ path,~ ** Processing line: ~ (state.tongue_angle - 90)]~ ** Processing line: ~ elsif state.action == :anchored || state.action == :shooting~ ** Processing line: ~ outputs.sprites << [vx(state.x),~ ** Processing line: ~ vy(state.y),~ ** Processing line: ~ vw(state.player_width),~ ** Processing line: ~ vw(state.player_height),~ ** Processing line: ~ 'sprites/animations_povfrog/frog_bwah_up.png',~ ** Processing line: ~ (state.tongue_angle - 90)]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ $game = CleptoFrog.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ if args.state.scene == :game~ ** Processing line: ~ tick_instructions args, "SPACE to SHOOT and RELEASE tongue. LEFT, RIGHT to SWING and BUILD momentum. MINIMAP in bottom right corner.", 360~ ** Processing line: ~ end~ ** Processing line: ~ $game.args = args~ ** Processing line: ~ $game.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_instructions args, text, y = 715~ ** Processing line: ~ return if args.state.key_event_occurred~ ** Processing line: ~ if args.inputs.keyboard.directional_vector || args.inputs.keyboard.key_down.space~ ** Processing line: ~ args.state.key_event_occurred = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.debug << [0, y - 50, 1280, 60].solid~ ** Processing line: ~ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label~ ** Processing line: ~ args.outputs.debug << [640, y - 25, "(SPACE to dismiss instructions)" , -2, 1, 255, 255, 255].label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Platformer - Clepto Frog - map.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - Clepto Frog - map.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - Clepto Frog - map.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_platformer/clepto_frog/app/map.rb~ ** Processing line: ~ $collisions = [~ ** Processing line: ~ [326, 463, 64, 64],~ ** Processing line: ~ [274, 462, 64, 64],~ ** Processing line: ~ [326, 413, 64, 64],~ ** Processing line: ~ [275, 412, 64, 64],~ ** Processing line: ~ [124, 651, 64, 64],~ ** Processing line: ~ [72, 651, 64, 64],~ ** Processing line: ~ [124, 600, 64, 64],~ ** Processing line: ~ [69, 599, 64, 64],~ ** Processing line: ~ [501, 997, 64, 64],~ ** Processing line: ~ [476, 995, 64, 64],~ ** Processing line: ~ [3224, 2057, 64, 64],~ ** Processing line: ~ [3224, 1994, 64, 64],~ ** Processing line: ~ [3225, 1932, 64, 64],~ ** Processing line: ~ [3225, 1870, 64, 64],~ ** Processing line: ~ [3226, 1806, 64, 64],~ ** Processing line: ~ [3224, 1744, 64, 64],~ ** Processing line: ~ [3225, 1689, 64, 64],~ ** Processing line: ~ [3226, 1660, 64, 64],~ ** Processing line: ~ [3161, 1658, 64, 64],~ ** Processing line: ~ [3097, 1660, 64, 64],~ ** Processing line: ~ [3033, 1658, 64, 64],~ ** Processing line: ~ [2969, 1658, 64, 64],~ ** Processing line: ~ [2904, 1658, 64, 64],~ ** Processing line: ~ [2839, 1657, 64, 64],~ ** Processing line: ~ [2773, 1657, 64, 64],~ ** Processing line: ~ [2709, 1658, 64, 64],~ ** Processing line: ~ [2643, 1657, 64, 64],~ ** Processing line: ~ [2577, 1657, 64, 64],~ ** Processing line: ~ [2509, 1658, 64, 64],~ ** Processing line: ~ [2440, 1658, 64, 64],~ ** Processing line: ~ [2371, 1658, 64, 64],~ ** Processing line: ~ [2301, 1659, 64, 64],~ ** Processing line: ~ [2230, 1659, 64, 64],~ ** Processing line: ~ [2159, 1659, 64, 64],~ ** Processing line: ~ [2092, 1660, 64, 64],~ ** Processing line: ~ [2025, 1661, 64, 64],~ ** Processing line: ~ [1958, 1660, 64, 64],~ ** Processing line: ~ [1888, 1659, 64, 64],~ ** Processing line: ~ [1817, 1657, 64, 64],~ ** Processing line: ~ [1745, 1656, 64, 64],~ ** Processing line: ~ [1673, 1658, 64, 64],~ ** Processing line: ~ [1605, 1660, 64, 64],~ ** Processing line: ~ [1536, 1658, 64, 64],~ ** Processing line: ~ [1465, 1660, 64, 64],~ ** Processing line: ~ [1386, 1960, 64, 64],~ ** Processing line: ~ [1384, 1908, 64, 64],~ ** Processing line: ~ [1387, 1862, 64, 64],~ ** Processing line: ~ [1326, 1863, 64, 64],~ ** Processing line: ~ [1302, 1862, 64, 64],~ ** Processing line: ~ [1119, 1906, 64, 64],~ ** Processing line: ~ [1057, 1905, 64, 64],~ ** Processing line: ~ [994, 1905, 64, 64],~ ** Processing line: ~ [937, 1904, 64, 64],~ ** Processing line: ~ [896, 1904, 64, 64],~ ** Processing line: ~ [1001, 1845, 64, 64],~ ** Processing line: ~ [1003, 1780, 64, 64],~ ** Processing line: ~ [1003, 1718, 64, 64],~ ** Processing line: ~ [692, 1958, 64, 64],~ ** Processing line: ~ [691, 1900, 64, 64],~ ** Processing line: ~ [774, 1861, 64, 64],~ ** Processing line: ~ [712, 1861, 64, 64],~ ** Processing line: ~ [691, 1863, 64, 64],~ ** Processing line: ~ [325, 2133, 64, 64],~ ** Processing line: ~ [275, 2134, 64, 64],~ ** Processing line: ~ [326, 2082, 64, 64],~ ** Processing line: ~ [275, 2082, 64, 64],~ ** Processing line: ~ [124, 2321, 64, 64],~ ** Processing line: ~ [71, 2320, 64, 64],~ ** Processing line: ~ [123, 2267, 64, 64],~ ** Processing line: ~ [71, 2268, 64, 64],~ ** Processing line: ~ [2354, 1859, 64, 64],~ ** Processing line: ~ [2292, 1859, 64, 64],~ ** Processing line: ~ [2231, 1857, 64, 64],~ ** Processing line: ~ [2198, 1858, 64, 64],~ ** Processing line: ~ [2353, 1802, 64, 64],~ ** Processing line: ~ [2296, 1798, 64, 64],~ ** Processing line: ~ [2233, 1797, 64, 64],~ ** Processing line: ~ [2200, 1797, 64, 64],~ ** Processing line: ~ [2352, 1742, 64, 64],~ ** Processing line: ~ [2288, 1741, 64, 64],~ ** Processing line: ~ [2230, 1743, 64, 64],~ ** Processing line: ~ [2196, 1743, 64, 64],~ ** Processing line: ~ [1736, 460, 64, 64],~ ** Processing line: ~ [1735, 400, 64, 64],~ ** Processing line: ~ [1736, 339, 64, 64],~ ** Processing line: ~ [1736, 275, 64, 64],~ ** Processing line: ~ [1738, 210, 64, 64],~ ** Processing line: ~ [1735, 145, 64, 64],~ ** Processing line: ~ [1735, 87, 64, 64],~ ** Processing line: ~ [1736, 51, 64, 64],~ ** Processing line: ~ [539, 289, 64, 64],~ ** Processing line: ~ [541, 228, 64, 64],~ ** Processing line: ~ [626, 191, 64, 64],~ ** Processing line: ~ [572, 192, 64, 64],~ ** Processing line: ~ [540, 193, 64, 64],~ ** Processing line: ~ [965, 233, 64, 64],~ ** Processing line: ~ [904, 234, 64, 64],~ ** Processing line: ~ [840, 234, 64, 64],~ ** Processing line: ~ [779, 234, 64, 64],~ ** Processing line: ~ [745, 236, 64, 64],~ ** Processing line: ~ [851, 169, 64, 64],~ ** Processing line: ~ [849, 108, 64, 64],~ ** Processing line: ~ [852, 50, 64, 64],~ ** Processing line: ~ [1237, 289, 64, 64],~ ** Processing line: ~ [1236, 228, 64, 64],~ ** Processing line: ~ [1238, 197, 64, 64],~ ** Processing line: ~ [1181, 192, 64, 64],~ ** Processing line: ~ [1152, 192, 64, 64],~ ** Processing line: ~ [1443, 605, 64, 64],~ ** Processing line: ~ [1419, 606, 64, 64],~ ** Processing line: ~ [1069, 925, 64, 64],~ ** Processing line: ~ [1068, 902, 64, 64],~ ** Processing line: ~ [1024, 927, 64, 64],~ ** Processing line: ~ [1017, 897, 64, 64],~ ** Processing line: ~ [963, 926, 64, 64],~ ** Processing line: ~ [958, 898, 64, 64],~ ** Processing line: ~ [911, 928, 64, 64],~ ** Processing line: ~ [911, 896, 64, 64],~ ** Processing line: ~ [2132, 803, 64, 64],~ ** Processing line: ~ [2081, 803, 64, 64],~ ** Processing line: ~ [2131, 752, 64, 64],~ ** Processing line: ~ [2077, 751, 64, 64],~ ** Processing line: ~ [2615, 649, 64, 64],~ ** Processing line: ~ [2564, 651, 64, 64],~ ** Processing line: ~ [2533, 650, 64, 64],~ ** Processing line: ~ [2027, 156, 64, 64],~ ** Processing line: ~ [1968, 155, 64, 64],~ ** Processing line: ~ [1907, 153, 64, 64],~ ** Processing line: ~ [1873, 155, 64, 64],~ ** Processing line: ~ [2025, 95, 64, 64],~ ** Processing line: ~ [1953, 98, 64, 64],~ ** Processing line: ~ [1894, 100, 64, 64],~ ** Processing line: ~ [1870, 100, 64, 64],~ ** Processing line: ~ [2029, 45, 64, 64],~ ** Processing line: ~ [1971, 48, 64, 64],~ ** Processing line: ~ [1915, 47, 64, 64],~ ** Processing line: ~ [1873, 47, 64, 64],~ ** Processing line: ~ [3956, 288, 64, 64],~ ** Processing line: ~ [3954, 234, 64, 64],~ ** Processing line: ~ [4042, 190, 64, 64],~ ** Processing line: ~ [3990, 190, 64, 64],~ ** Processing line: ~ [3958, 195, 64, 64],~ ** Processing line: ~ [3422, 709, 64, 64],~ ** Processing line: ~ [3425, 686, 64, 64],~ ** Processing line: ~ [3368, 709, 64, 64],~ ** Processing line: ~ [3364, 683, 64, 64],~ ** Processing line: ~ [3312, 711, 64, 64],~ ** Processing line: ~ [3307, 684, 64, 64],~ ** Processing line: ~ [3266, 712, 64, 64],~ ** Processing line: ~ [3269, 681, 64, 64],~ ** Processing line: ~ [4384, 236, 64, 64],~ ** Processing line: ~ [4320, 234, 64, 64],~ ** Processing line: ~ [4257, 235, 64, 64],~ ** Processing line: ~ [4192, 234, 64, 64],~ ** Processing line: ~ [4162, 234, 64, 64],~ ** Processing line: ~ [4269, 171, 64, 64],~ ** Processing line: ~ [4267, 111, 64, 64],~ ** Processing line: ~ [4266, 52, 64, 64],~ ** Processing line: ~ [4580, 458, 64, 64],~ ** Processing line: ~ [4582, 396, 64, 64],~ ** Processing line: ~ [4582, 335, 64, 64],~ ** Processing line: ~ [4581, 275, 64, 64],~ ** Processing line: ~ [4581, 215, 64, 64],~ ** Processing line: ~ [4581, 152, 64, 64],~ ** Processing line: ~ [4582, 89, 64, 64],~ ** Processing line: ~ [4583, 51, 64, 64],~ ** Processing line: ~ [4810, 289, 64, 64],~ ** Processing line: ~ [4810, 227, 64, 64],~ ** Processing line: ~ [4895, 189, 64, 64],~ ** Processing line: ~ [4844, 191, 64, 64],~ ** Processing line: ~ [4809, 191, 64, 64],~ ** Processing line: ~ [5235, 233, 64, 64],~ ** Processing line: ~ [5176, 232, 64, 64],~ ** Processing line: ~ [5118, 230, 64, 64],~ ** Processing line: ~ [5060, 232, 64, 64],~ ** Processing line: ~ [5015, 237, 64, 64],~ ** Processing line: ~ [5123, 171, 64, 64],~ ** Processing line: ~ [5123, 114, 64, 64],~ ** Processing line: ~ [5121, 51, 64, 64],~ ** Processing line: ~ [5523, 461, 64, 64],~ ** Processing line: ~ [5123, 42, 64, 64],~ ** Processing line: ~ [5525, 401, 64, 64],~ ** Processing line: ~ [5525, 340, 64, 64],~ ** Processing line: ~ [5526, 273, 64, 64],~ ** Processing line: ~ [5527, 211, 64, 64],~ ** Processing line: ~ [5525, 150, 64, 64],~ ** Processing line: ~ [5527, 84, 64, 64],~ ** Processing line: ~ [5524, 44, 64, 64],~ ** Processing line: ~ [5861, 288, 64, 64],~ ** Processing line: ~ [5861, 229, 64, 64],~ ** Processing line: ~ [5945, 193, 64, 64],~ ** Processing line: ~ [5904, 193, 64, 64],~ ** Processing line: ~ [5856, 194, 64, 64],~ ** Processing line: ~ [6542, 234, 64, 64],~ ** Processing line: ~ [6478, 235, 64, 64],~ ** Processing line: ~ [6413, 238, 64, 64],~ ** Processing line: ~ [6348, 235, 64, 64],~ ** Processing line: ~ [6285, 236, 64, 64],~ ** Processing line: ~ [6222, 235, 64, 64],~ ** Processing line: ~ [6160, 235, 64, 64],~ ** Processing line: ~ [6097, 236, 64, 64],~ ** Processing line: ~ [6069, 237, 64, 64],~ ** Processing line: ~ [6321, 174, 64, 64],~ ** Processing line: ~ [6318, 111, 64, 64],~ ** Processing line: ~ [6320, 49, 64, 64],~ ** Processing line: ~ [6753, 291, 64, 64],~ ** Processing line: ~ [6752, 227, 64, 64],~ ** Processing line: ~ [6753, 192, 64, 64],~ ** Processing line: ~ [6692, 191, 64, 64],~ ** Processing line: ~ [6668, 193, 64, 64],~ ** Processing line: ~ [6336, 604, 64, 64],~ ** Processing line: ~ [6309, 603, 64, 64],~ ** Processing line: ~ [7264, 461, 64, 64],~ ** Processing line: ~ [7264, 395, 64, 64],~ ** Processing line: ~ [7264, 333, 64, 64],~ ** Processing line: ~ [7264, 270, 64, 64],~ ** Processing line: ~ [7265, 207, 64, 64],~ ** Processing line: ~ [7266, 138, 64, 64],~ ** Processing line: ~ [7264, 78, 64, 64],~ ** Processing line: ~ [7266, 48, 64, 64],~ ** Processing line: ~ [7582, 149, 64, 64],~ ** Processing line: ~ [7524, 147, 64, 64],~ ** Processing line: ~ [7461, 146, 64, 64],~ ** Processing line: ~ [7425, 148, 64, 64],~ ** Processing line: ~ [7580, 86, 64, 64],~ ** Processing line: ~ [7582, 41, 64, 64],~ ** Processing line: ~ [7519, 41, 64, 64],~ ** Processing line: ~ [7460, 40, 64, 64],~ ** Processing line: ~ [7427, 96, 64, 64],~ ** Processing line: ~ [7427, 41, 64, 64],~ ** Processing line: ~ [8060, 288, 64, 64],~ ** Processing line: ~ [8059, 226, 64, 64],~ ** Processing line: ~ [8145, 194, 64, 64],~ ** Processing line: ~ [8081, 194, 64, 64],~ ** Processing line: ~ [8058, 195, 64, 64],~ ** Processing line: ~ [8485, 234, 64, 64],~ ** Processing line: ~ [8422, 235, 64, 64],~ ** Processing line: ~ [8360, 235, 64, 64],~ ** Processing line: ~ [8296, 235, 64, 64],~ ** Processing line: ~ [8266, 237, 64, 64],~ ** Processing line: ~ [8371, 173, 64, 64],~ ** Processing line: ~ [8370, 117, 64, 64],~ ** Processing line: ~ [8372, 59, 64, 64],~ ** Processing line: ~ [8372, 51, 64, 64],~ ** Processing line: ~ [9147, 192, 64, 64],~ ** Processing line: ~ [9063, 287, 64, 64],~ ** Processing line: ~ [9064, 225, 64, 64],~ ** Processing line: ~ [9085, 193, 64, 64],~ ** Processing line: ~ [9063, 194, 64, 64],~ ** Processing line: ~ [9492, 234, 64, 64],~ ** Processing line: ~ [9428, 234, 64, 64],~ ** Processing line: ~ [9365, 235, 64, 64],~ ** Processing line: ~ [9302, 235, 64, 64],~ ** Processing line: ~ [9270, 237, 64, 64],~ ** Processing line: ~ [9374, 172, 64, 64],~ ** Processing line: ~ [9376, 109, 64, 64],~ ** Processing line: ~ [9377, 48, 64, 64],~ ** Processing line: ~ [9545, 1060, 64, 64],~ ** Processing line: ~ [9482, 1062, 64, 64],~ ** Processing line: ~ [9423, 1062, 64, 64],~ ** Processing line: ~ [9387, 1062, 64, 64],~ ** Processing line: ~ [9541, 999, 64, 64],~ ** Processing line: ~ [9542, 953, 64, 64],~ ** Processing line: ~ [9478, 953, 64, 64],~ ** Processing line: ~ [9388, 999, 64, 64],~ ** Processing line: ~ [9414, 953, 64, 64],~ ** Processing line: ~ [9389, 953, 64, 64],~ ** Processing line: ~ [9294, 1194, 64, 64],~ ** Processing line: ~ [9245, 1195, 64, 64],~ ** Processing line: ~ [9297, 1143, 64, 64],~ ** Processing line: ~ [9245, 1144, 64, 64],~ ** Processing line: ~ [5575, 1781, 64, 64],~ ** Processing line: ~ [5574, 1753, 64, 64],~ ** Processing line: ~ [5522, 1782, 64, 64],~ ** Processing line: ~ [5518, 1753, 64, 64],~ ** Processing line: ~ [5472, 1783, 64, 64],~ ** Processing line: ~ [5471, 1751, 64, 64],~ ** Processing line: ~ [5419, 1781, 64, 64],~ ** Processing line: ~ [5421, 1749, 64, 64],~ ** Processing line: ~ [500, 3207, 64, 64],~ ** Processing line: ~ [477, 3205, 64, 64],~ ** Processing line: ~ [1282, 3214, 64, 64],~ ** Processing line: ~ [1221, 3214, 64, 64],~ ** Processing line: ~ [1188, 3215, 64, 64],~ ** Processing line: ~ [1345, 3103, 64, 64],~ ** Processing line: ~ [1288, 3103, 64, 64],~ ** Processing line: ~ [1231, 3104, 64, 64],~ ** Processing line: ~ [1190, 3153, 64, 64],~ ** Processing line: ~ [1189, 3105, 64, 64],~ ** Processing line: ~ [2255, 3508, 64, 64],~ ** Processing line: ~ [2206, 3510, 64, 64],~ ** Processing line: ~ [2254, 3458, 64, 64],~ ** Processing line: ~ [2202, 3458, 64, 64],~ ** Processing line: ~ [2754, 2930, 64, 64],~ ** Processing line: ~ [2726, 2932, 64, 64],~ ** Processing line: ~ [3408, 2874, 64, 64],~ ** Processing line: ~ [3407, 2849, 64, 64],~ ** Processing line: ~ [3345, 2872, 64, 64],~ ** Processing line: ~ [3342, 2847, 64, 64],~ ** Processing line: ~ [3284, 2874, 64, 64],~ ** Processing line: ~ [3284, 2848, 64, 64],~ ** Processing line: ~ [3248, 2878, 64, 64],~ ** Processing line: ~ [3252, 2848, 64, 64],~ ** Processing line: ~ [3953, 3274, 64, 64],~ ** Processing line: ~ [3899, 3277, 64, 64],~ ** Processing line: ~ [3951, 3222, 64, 64],~ ** Processing line: ~ [3900, 3222, 64, 64],~ ** Processing line: ~ [4310, 2968, 64, 64],~ ** Processing line: ~ [4246, 2969, 64, 64],~ ** Processing line: ~ [4183, 2965, 64, 64],~ ** Processing line: ~ [4153, 2967, 64, 64],~ ** Processing line: ~ [4311, 2910, 64, 64],~ ** Processing line: ~ [4308, 2856, 64, 64],~ ** Processing line: ~ [4251, 2855, 64, 64],~ ** Processing line: ~ [4197, 2857, 64, 64],~ ** Processing line: ~ [5466, 3184, 64, 64],~ ** Processing line: ~ [5466, 3158, 64, 64],~ ** Processing line: ~ [5404, 3184, 64, 64],~ ** Processing line: ~ [5404, 3156, 64, 64],~ ** Processing line: ~ [5343, 3185, 64, 64],~ ** Processing line: ~ [5342, 3156, 64, 64],~ ** Processing line: ~ [5308, 3185, 64, 64],~ ** Processing line: ~ [5307, 3154, 64, 64],~ ** Processing line: ~ [6163, 2950, 64, 64],~ ** Processing line: ~ [6111, 2952, 64, 64],~ ** Processing line: ~ [6164, 2898, 64, 64],~ ** Processing line: ~ [6113, 2897, 64, 64],~ ** Processing line: ~ [7725, 3156, 64, 64],~ ** Processing line: ~ [7661, 3157, 64, 64],~ ** Processing line: ~ [7598, 3157, 64, 64],~ ** Processing line: ~ [7533, 3156, 64, 64],~ ** Processing line: ~ [7468, 3156, 64, 64],~ ** Processing line: ~ [7401, 3156, 64, 64],~ ** Processing line: ~ [7335, 3157, 64, 64],~ ** Processing line: ~ [7270, 3157, 64, 64],~ ** Processing line: ~ [7208, 3157, 64, 64],~ ** Processing line: ~ [7146, 3157, 64, 64],~ ** Processing line: ~ [7134, 3159, 64, 64],~ ** Processing line: ~ [6685, 3726, 64, 64],~ ** Processing line: ~ [6685, 3663, 64, 64],~ ** Processing line: ~ [6683, 3602, 64, 64],~ ** Processing line: ~ [6679, 3538, 64, 64],~ ** Processing line: ~ [6680, 3474, 64, 64],~ ** Processing line: ~ [6682, 3413, 64, 64],~ ** Processing line: ~ [6681, 3347, 64, 64],~ ** Processing line: ~ [6681, 3287, 64, 64],~ ** Processing line: ~ [6682, 3223, 64, 64],~ ** Processing line: ~ [6683, 3161, 64, 64],~ ** Processing line: ~ [6682, 3102, 64, 64],~ ** Processing line: ~ [6684, 3042, 64, 64],~ ** Processing line: ~ [6685, 2980, 64, 64],~ ** Processing line: ~ [6685, 2920, 64, 64],~ ** Processing line: ~ [6683, 2859, 64, 64],~ ** Processing line: ~ [6684, 2801, 64, 64],~ ** Processing line: ~ [6686, 2743, 64, 64],~ ** Processing line: ~ [6683, 2683, 64, 64],~ ** Processing line: ~ [6681, 2622, 64, 64],~ ** Processing line: ~ [6682, 2559, 64, 64],~ ** Processing line: ~ [6683, 2498, 64, 64],~ ** Processing line: ~ [6685, 2434, 64, 64],~ ** Processing line: ~ [6683, 2371, 64, 64],~ ** Processing line: ~ [6683, 2306, 64, 64],~ ** Processing line: ~ [6684, 2242, 64, 64],~ ** Processing line: ~ [6683, 2177, 64, 64],~ ** Processing line: ~ [6683, 2112, 64, 64],~ ** Processing line: ~ [6683, 2049, 64, 64],~ ** Processing line: ~ [6683, 1985, 64, 64],~ ** Processing line: ~ [6682, 1923, 64, 64],~ ** Processing line: ~ [6683, 1860, 64, 64],~ ** Processing line: ~ [6685, 1797, 64, 64],~ ** Processing line: ~ [6684, 1735, 64, 64],~ ** Processing line: ~ [6685, 1724, 64, 64],~ ** Processing line: ~ [7088, 1967, 64, 64],~ ** Processing line: ~ [7026, 1966, 64, 64],~ ** Processing line: ~ [6964, 1967, 64, 64],~ ** Processing line: ~ [6900, 1965, 64, 64],~ ** Processing line: ~ [6869, 1969, 64, 64],~ ** Processing line: ~ [6972, 1904, 64, 64],~ ** Processing line: ~ [6974, 1840, 64, 64],~ ** Processing line: ~ [6971, 1776, 64, 64],~ ** Processing line: ~ [6971, 1716, 64, 64],~ ** Processing line: ~ [7168, 1979, 64, 64],~ ** Processing line: ~ [7170, 1919, 64, 64],~ ** Processing line: ~ [7169, 1882, 64, 64],~ ** Processing line: ~ [7115, 1880, 64, 64],~ ** Processing line: ~ [7086, 1881, 64, 64],~ ** Processing line: ~ [7725, 1837, 64, 64],~ ** Processing line: ~ [7724, 1776, 64, 64],~ ** Processing line: ~ [7724, 1728, 64, 64],~ ** Processing line: ~ [7661, 1727, 64, 64],~ ** Processing line: ~ [7603, 1728, 64, 64],~ ** Processing line: ~ [7571, 1837, 64, 64],~ ** Processing line: ~ [7570, 1774, 64, 64],~ ** Processing line: ~ [7572, 1725, 64, 64],~ ** Processing line: ~ [7859, 2134, 64, 64],~ ** Processing line: ~ [7858, 2070, 64, 64],~ ** Processing line: ~ [7858, 2008, 64, 64],~ ** Processing line: ~ [7860, 1942, 64, 64],~ ** Processing line: ~ [7856, 1878, 64, 64],~ ** Processing line: ~ [7860, 1813, 64, 64],~ ** Processing line: ~ [7859, 1750, 64, 64],~ ** Processing line: ~ [7856, 1724, 64, 64],~ ** Processing line: ~ [8155, 1837, 64, 64],~ ** Processing line: ~ [8092, 1839, 64, 64],~ ** Processing line: ~ [8032, 1838, 64, 64],~ ** Processing line: ~ [7999, 1839, 64, 64],~ ** Processing line: ~ [8153, 1773, 64, 64],~ ** Processing line: ~ [8154, 1731, 64, 64],~ ** Processing line: ~ [8090, 1730, 64, 64],~ ** Processing line: ~ [8035, 1732, 64, 64],~ ** Processing line: ~ [8003, 1776, 64, 64],~ ** Processing line: ~ [8003, 1730, 64, 64],~ ** Processing line: ~ [8421, 1978, 64, 64],~ ** Processing line: ~ [8420, 1917, 64, 64],~ ** Processing line: ~ [8505, 1878, 64, 64],~ ** Processing line: ~ [8443, 1881, 64, 64],~ ** Processing line: ~ [8420, 1882, 64, 64],~ ** Processing line: ~ [8847, 1908, 64, 64],~ ** Processing line: ~ [8783, 1908, 64, 64],~ ** Processing line: ~ [8718, 1910, 64, 64],~ ** Processing line: ~ [8654, 1910, 64, 64],~ ** Processing line: ~ [8628, 1911, 64, 64],~ ** Processing line: ~ [8729, 1847, 64, 64],~ ** Processing line: ~ [8731, 1781, 64, 64],~ ** Processing line: ~ [8731, 1721, 64, 64],~ ** Processing line: ~ [9058, 2135, 64, 64],~ ** Processing line: ~ [9056, 2073, 64, 64],~ ** Processing line: ~ [9058, 2006, 64, 64],~ ** Processing line: ~ [9057, 1939, 64, 64],~ ** Processing line: ~ [9058, 1876, 64, 64],~ ** Processing line: ~ [9056, 1810, 64, 64],~ ** Processing line: ~ [9059, 1745, 64, 64],~ ** Processing line: ~ [9060, 1722, 64, 64],~ ** Processing line: ~ [9273, 1977, 64, 64],~ ** Processing line: ~ [9273, 1912, 64, 64],~ ** Processing line: ~ [9358, 1883, 64, 64],~ ** Processing line: ~ [9298, 1881, 64, 64],~ ** Processing line: ~ [9270, 1883, 64, 64],~ ** Processing line: ~ [9699, 1910, 64, 64],~ ** Processing line: ~ [9637, 1910, 64, 64],~ ** Processing line: ~ [9576, 1910, 64, 64],~ ** Processing line: ~ [9512, 1911, 64, 64],~ ** Processing line: ~ [9477, 1912, 64, 64],~ ** Processing line: ~ [9584, 1846, 64, 64],~ ** Processing line: ~ [9585, 1783, 64, 64],~ ** Processing line: ~ [9586, 1719, 64, 64],~ ** Processing line: ~ [8320, 2788, 64, 64],~ ** Processing line: ~ [8256, 2789, 64, 64],~ ** Processing line: ~ [8192, 2789, 64, 64],~ ** Processing line: ~ [8180, 2789, 64, 64],~ ** Processing line: ~ [8319, 2730, 64, 64],~ ** Processing line: ~ [8319, 2671, 64, 64],~ ** Processing line: ~ [8319, 2639, 64, 64],~ ** Processing line: ~ [8259, 2639, 64, 64],~ ** Processing line: ~ [8202, 2639, 64, 64],~ ** Processing line: ~ [8179, 2727, 64, 64],~ ** Processing line: ~ [8178, 2665, 64, 64],~ ** Processing line: ~ [8177, 2636, 64, 64],~ ** Processing line: ~ [9360, 3138, 64, 64],~ ** Processing line: ~ [9296, 3137, 64, 64],~ ** Processing line: ~ [9235, 3139, 64, 64],~ ** Processing line: ~ [9174, 3139, 64, 64],~ ** Processing line: ~ [9113, 3138, 64, 64],~ ** Processing line: ~ [9050, 3138, 64, 64],~ ** Processing line: ~ [8988, 3138, 64, 64],~ ** Processing line: ~ [8925, 3138, 64, 64],~ ** Processing line: ~ [8860, 3136, 64, 64],~ ** Processing line: ~ [8797, 3136, 64, 64],~ ** Processing line: ~ [8770, 3138, 64, 64],~ ** Processing line: ~ [8827, 4171, 64, 64],~ ** Processing line: ~ [8827, 4107, 64, 64],~ ** Processing line: ~ [8827, 4043, 64, 64],~ ** Processing line: ~ [8827, 3978, 64, 64],~ ** Processing line: ~ [8825, 3914, 64, 64],~ ** Processing line: ~ [8824, 3858, 64, 64],~ ** Processing line: ~ [9635, 4234, 64, 64],~ ** Processing line: ~ [9584, 4235, 64, 64],~ ** Processing line: ~ [9634, 4187, 64, 64],~ ** Processing line: ~ [9582, 4183, 64, 64],~ ** Processing line: ~ [9402, 5114, 64, 64],~ ** Processing line: ~ [9402, 5087, 64, 64],~ ** Processing line: ~ [9347, 5113, 64, 64],~ ** Processing line: ~ [9345, 5086, 64, 64],~ ** Processing line: ~ [9287, 5114, 64, 64],~ ** Processing line: ~ [9285, 5085, 64, 64],~ ** Processing line: ~ [9245, 5114, 64, 64],~ ** Processing line: ~ [9244, 5086, 64, 64],~ ** Processing line: ~ [9336, 5445, 64, 64],~ ** Processing line: ~ [9285, 5445, 64, 64],~ ** Processing line: ~ [9337, 5395, 64, 64],~ ** Processing line: ~ [9283, 5393, 64, 64],~ ** Processing line: ~ [8884, 4968, 64, 64],~ ** Processing line: ~ [8884, 4939, 64, 64],~ ** Processing line: ~ [8822, 4967, 64, 64],~ ** Processing line: ~ [8823, 4940, 64, 64],~ ** Processing line: ~ [8765, 4967, 64, 64],~ ** Processing line: ~ [8762, 4937, 64, 64],~ ** Processing line: ~ [8726, 4969, 64, 64],~ ** Processing line: ~ [8727, 4939, 64, 64],~ ** Processing line: ~ [7946, 5248, 64, 64],~ ** Processing line: ~ [7945, 5220, 64, 64],~ ** Processing line: ~ [7887, 5248, 64, 64],~ ** Processing line: ~ [7886, 5219, 64, 64],~ ** Processing line: ~ [7830, 5248, 64, 64],~ ** Processing line: ~ [7827, 5218, 64, 64],~ ** Processing line: ~ [7781, 5248, 64, 64],~ ** Processing line: ~ [7781, 5216, 64, 64],~ ** Processing line: ~ [6648, 4762, 64, 64],~ ** Processing line: ~ [6621, 4761, 64, 64],~ ** Processing line: ~ [5011, 4446, 64, 64],~ ** Processing line: ~ [4982, 4444, 64, 64],~ ** Processing line: ~ [4146, 4641, 64, 64],~ ** Processing line: ~ [4092, 4643, 64, 64],~ ** Processing line: ~ [4145, 4589, 64, 64],~ ** Processing line: ~ [4091, 4590, 64, 64],~ ** Processing line: ~ [4139, 4497, 64, 64],~ ** Processing line: ~ [4135, 4437, 64, 64],~ ** Processing line: ~ [4135, 4383, 64, 64],~ ** Processing line: ~ [4078, 4495, 64, 64],~ ** Processing line: ~ [4014, 4494, 64, 64],~ ** Processing line: ~ [3979, 4496, 64, 64],~ ** Processing line: ~ [4074, 4384, 64, 64],~ ** Processing line: ~ [4015, 4381, 64, 64],~ ** Processing line: ~ [3980, 4433, 64, 64],~ ** Processing line: ~ [3981, 4384, 64, 64],~ ** Processing line: ~ [3276, 4279, 64, 64],~ ** Processing line: ~ [3275, 4218, 64, 64],~ ** Processing line: ~ [3276, 4170, 64, 64],~ ** Processing line: ~ [3211, 4164, 64, 64],~ ** Processing line: ~ [3213, 4280, 64, 64],~ ** Processing line: ~ [3156, 4278, 64, 64],~ ** Processing line: ~ [3120, 4278, 64, 64],~ ** Processing line: ~ [3151, 4163, 64, 64],~ ** Processing line: ~ [3120, 4216, 64, 64],~ ** Processing line: ~ [3120, 4161, 64, 64],~ ** Processing line: ~ [1536, 4171, 64, 64],~ ** Processing line: ~ [1536, 4110, 64, 64],~ ** Processing line: ~ [1535, 4051, 64, 64],~ ** Processing line: ~ [1536, 3991, 64, 64],~ ** Processing line: ~ [1536, 3928, 64, 64],~ ** Processing line: ~ [1536, 3863, 64, 64],~ ** Processing line: ~ [1078, 4605, 64, 64],~ ** Processing line: ~ [1076, 4577, 64, 64],~ ** Processing line: ~ [1018, 4604, 64, 64],~ ** Processing line: ~ [1018, 4575, 64, 64],~ ** Processing line: ~ [957, 4606, 64, 64],~ ** Processing line: ~ [960, 4575, 64, 64],~ ** Processing line: ~ [918, 4602, 64, 64],~ ** Processing line: ~ [918, 4580, 64, 64],~ ** Processing line: ~ [394, 4164, 64, 64],~ ** Processing line: ~ [335, 4163, 64, 64],~ ** Processing line: ~ [274, 4161, 64, 64],~ ** Processing line: ~ [236, 4163, 64, 64],~ ** Processing line: ~ [394, 4140, 64, 64],~ ** Processing line: ~ [329, 4139, 64, 64],~ ** Processing line: ~ [268, 4139, 64, 64],~ ** Processing line: ~ [239, 4139, 64, 64],~ ** Processing line: ~ [4326, 5073, 64, 64],~ ** Processing line: ~ [4324, 5042, 64, 64],~ ** Processing line: ~ [4265, 5074, 64, 64],~ ** Processing line: ~ [4263, 5042, 64, 64],~ ** Processing line: ~ [4214, 5072, 64, 64],~ ** Processing line: ~ [4211, 5043, 64, 64],~ ** Processing line: ~ [4166, 5073, 64, 64],~ ** Processing line: ~ [4164, 5041, 64, 64],~ ** Processing line: ~ [4844, 5216, 64, 64],~ ** Processing line: ~ [4844, 5189, 64, 64],~ ** Processing line: ~ [4785, 5217, 64, 64],~ ** Processing line: ~ [4790, 5187, 64, 64],~ ** Processing line: ~ [4726, 5219, 64, 64],~ ** Processing line: ~ [4728, 5185, 64, 64],~ ** Processing line: ~ [4681, 5218, 64, 64],~ ** Processing line: ~ [4684, 5186, 64, 64],~ ** Processing line: ~ [4789, 4926, 64, 64],~ ** Processing line: ~ [4734, 4928, 64, 64],~ ** Processing line: ~ [4787, 4876, 64, 64],~ ** Processing line: ~ [4738, 4874, 64, 64],~ ** Processing line: ~ [4775, 5548, 64, 64],~ ** Processing line: ~ [4775, 5495, 64, 64],~ ** Processing line: ~ [4723, 5550, 64, 64],~ ** Processing line: ~ [4725, 5494, 64, 64],~ ** Processing line: ~ [1360, 5269, 64, 64],~ ** Processing line: ~ [1362, 5218, 64, 64],~ ** Processing line: ~ [1315, 5266, 64, 64],~ ** Processing line: ~ [1282, 5266, 64, 64],~ ** Processing line: ~ [1246, 5311, 64, 64],~ ** Processing line: ~ [1190, 5312, 64, 64],~ ** Processing line: ~ [1136, 5310, 64, 64],~ ** Processing line: ~ [1121, 5427, 64, 64],~ ** Processing line: ~ [1121, 5370, 64, 64],~ ** Processing line: ~ [1074, 5427, 64, 64],~ ** Processing line: ~ [1064, 5423, 64, 64],~ ** Processing line: ~ [1052, 5417, 64, 64],~ ** Processing line: ~ [1050, 5368, 64, 64],~ ** Processing line: ~ [1008, 5314, 64, 64],~ ** Processing line: ~ [997, 5307, 64, 64],~ ** Processing line: ~ [977, 5299, 64, 64],~ ** Processing line: ~ [976, 5248, 64, 64],~ ** Processing line: ~ [825, 5267, 64, 64],~ ** Processing line: ~ [826, 5213, 64, 64],~ ** Processing line: ~ [776, 5267, 64, 64],~ ** Processing line: ~ [768, 5261, 64, 64],~ ** Processing line: ~ [755, 5256, 64, 64],~ ** Processing line: ~ [753, 5209, 64, 64],~ ** Processing line: ~ [1299, 5206, 64, 64],~ ** Processing line: ~ [1238, 5204, 64, 64],~ ** Processing line: ~ [1178, 5203, 64, 64],~ ** Processing line: ~ [1124, 5204, 64, 64],~ ** Processing line: ~ [1065, 5206, 64, 64],~ ** Processing line: ~ [1008, 5203, 64, 64],~ ** Processing line: ~ [977, 5214, 64, 64],~ ** Processing line: ~ [410, 5313, 64, 64],~ ** Processing line: ~ [407, 5249, 64, 64],~ ** Processing line: ~ [411, 5225, 64, 64],~ ** Processing line: ~ [397, 5217, 64, 64],~ ** Processing line: ~ [378, 5209, 64, 64],~ ** Processing line: ~ [358, 5312, 64, 64],~ ** Processing line: ~ [287, 5427, 64, 64],~ ** Processing line: ~ [286, 5364, 64, 64],~ ** Processing line: ~ [300, 5313, 64, 64],~ ** Processing line: ~ [242, 5427, 64, 64],~ ** Processing line: ~ [229, 5420, 64, 64],~ ** Processing line: ~ [217, 5416, 64, 64],~ ** Processing line: ~ [215, 5364, 64, 64],~ ** Processing line: ~ [174, 5311, 64, 64],~ ** Processing line: ~ [165, 5308, 64, 64],~ ** Processing line: ~ [139, 5300, 64, 64],~ ** Processing line: ~ [141, 5236, 64, 64],~ ** Processing line: ~ [141, 5211, 64, 64],~ ** Processing line: ~ [315, 5208, 64, 64],~ ** Processing line: ~ [251, 5208, 64, 64],~ ** Processing line: ~ [211, 5211, 64, 64],~ ** Processing line: ~ [8050, 4060, 64, 64],~ ** Processing line: ~ [7992, 4060, 64, 64],~ ** Processing line: ~ [7929, 4060, 64, 64],~ ** Processing line: ~ [7866, 4061, 64, 64],~ ** Processing line: ~ [7828, 4063, 64, 64],~ ** Processing line: ~ [7934, 4001, 64, 64],~ ** Processing line: ~ [7935, 3936, 64, 64],~ ** Processing line: ~ [7935, 3875, 64, 64],~ ** Processing line: ~ [7622, 4111, 64, 64],~ ** Processing line: ~ [7623, 4049, 64, 64],~ ** Processing line: ~ [7707, 4018, 64, 64],~ ** Processing line: ~ [7663, 4019, 64, 64],~ ** Processing line: ~ [7623, 4017, 64, 64],~ ** Processing line: ~ [7193, 4060, 64, 64],~ ** Processing line: ~ [7131, 4059, 64, 64],~ ** Processing line: ~ [7070, 4057, 64, 64],~ ** Processing line: ~ [7008, 4060, 64, 64],~ ** Processing line: ~ [6977, 4060, 64, 64],~ ** Processing line: ~ [7080, 3998, 64, 64],~ ** Processing line: ~ [7081, 3935, 64, 64],~ ** Processing line: ~ [7080, 3873, 64, 64],~ ** Processing line: ~ [6855, 4019, 64, 64],~ ** Processing line: ~ [6790, 4018, 64, 64],~ ** Processing line: ~ [6770, 4114, 64, 64],~ ** Processing line: ~ [6770, 4060, 64, 64],~ ** Processing line: ~ [6768, 4013, 64, 64],~ ** Processing line: ~ [6345, 4060, 64, 64],~ ** Processing line: ~ [6284, 4062, 64, 64],~ ** Processing line: ~ [6222, 4061, 64, 64],~ ** Processing line: ~ [6166, 4061, 64, 64],~ ** Processing line: ~ [6124, 4066, 64, 64],~ ** Processing line: ~ [6226, 3995, 64, 64],~ ** Processing line: ~ [6226, 3933, 64, 64],~ ** Processing line: ~ [6228, 3868, 64, 64],~ ** Processing line: ~ [5916, 4113, 64, 64],~ ** Processing line: ~ [5918, 4052, 64, 64],~ ** Processing line: ~ [6001, 4018, 64, 64],~ ** Processing line: ~ [5941, 4019, 64, 64],~ ** Processing line: ~ [5918, 4020, 64, 64],~ ** Processing line: ~ [5501, 4059, 64, 64],~ ** Processing line: ~ [5439, 4061, 64, 64],~ ** Processing line: ~ [5376, 4059, 64, 64],~ ** Processing line: ~ [5312, 4058, 64, 64],~ ** Processing line: ~ [5285, 4062, 64, 64],~ ** Processing line: ~ [5388, 3999, 64, 64],~ ** Processing line: ~ [5385, 3941, 64, 64],~ ** Processing line: ~ [5384, 3874, 64, 64],~ ** Processing line: ~ [5075, 4112, 64, 64],~ ** Processing line: ~ [5074, 4051, 64, 64],~ ** Processing line: ~ [5158, 4018, 64, 64],~ ** Processing line: ~ [5095, 4020, 64, 64],~ ** Processing line: ~ [5073, 4018, 64, 64],~ ** Processing line: ~ [4549, 3998, 64, 64],~ ** Processing line: ~ [4393, 3996, 64, 64],~ ** Processing line: ~ [4547, 3938, 64, 64],~ ** Processing line: ~ [4547, 3886, 64, 64],~ ** Processing line: ~ [4488, 3885, 64, 64],~ ** Processing line: ~ [4427, 3885, 64, 64],~ ** Processing line: ~ [4395, 3938, 64, 64],~ ** Processing line: ~ [4395, 3885, 64, 64],~ ** Processing line: ~ [0, 0, 64, 64],~ ** Processing line: ~ [0, 1670, 64, 64],~ ** Processing line: ~ [6691, 1653, 64, 64],~ ** Processing line: ~ [1521, 3792, 64, 64],~ ** Processing line: ~ [0, 5137, 64, 64],~ ** Processing line: ~ [0, 0, 64, 64],~ ** Processing line: ~ [0, 1670, 64, 64],~ ** Processing line: ~ [6691, 1653, 64, 64],~ ** Processing line: ~ [1521, 3792, 64, 64],~ ** Processing line: ~ [0, 5137, 64, 64],~ ** Processing line: ~ [1215, 2421, 64, 64],~ ** Processing line: ~ [1214, 2360, 64, 64],~ ** Processing line: ~ [1211, 2300, 64, 64],~ ** Processing line: ~ [1211, 2291, 64, 64],~ ** Processing line: ~ [1158, 2420, 64, 64],~ ** Processing line: ~ [1156, 2358, 64, 64],~ ** Processing line: ~ [1149, 2291, 64, 64],~ ** Processing line: ~ [1095, 2420, 64, 64],~ ** Processing line: ~ [1030, 2418, 64, 64],~ ** Processing line: ~ [966, 2419, 64, 64],~ ** Processing line: ~ [903, 2419, 64, 64],~ ** Processing line: ~ [852, 2419, 64, 64],~ ** Processing line: ~ [1087, 2291, 64, 64],~ ** Processing line: ~ [1023, 2291, 64, 64],~ ** Processing line: ~ [960, 2291, 64, 64],~ ** Processing line: ~ [896, 2292, 64, 64],~ ** Processing line: ~ [854, 2355, 64, 64],~ ** Processing line: ~ [854, 2292, 64, 64],~ ** Processing line: ~ [675, 3017, 64, 64],~ ** Processing line: ~ [622, 3017, 64, 64],~ ** Processing line: ~ [676, 2965, 64, 64],~ ** Processing line: ~ [622, 2965, 64, 64],~ ** Processing line: ~ [1560, 3212, 64, 64],~ ** Processing line: ~ [1496, 3212, 64, 64],~ ** Processing line: ~ [1430, 3211, 64, 64],~ ** Processing line: ~ [1346, 3214, 64, 64],~ ** Processing line: ~ [1410, 3213, 64, 64],~ ** Processing line: ~ [1560, 3147, 64, 64],~ ** Processing line: ~ [1559, 3105, 64, 64],~ ** Processing line: ~ [1496, 3105, 64, 64],~ ** Processing line: ~ [1442, 3105, 64, 64],~ ** Processing line: ~ [1412, 3106, 64, 64],~ ** Processing line: ~ [918, 4163, 64, 64],~ ** Processing line: ~ [854, 4161, 64, 64],~ ** Processing line: ~ [792, 4160, 64, 64],~ ** Processing line: ~ [729, 4159, 64, 64],~ ** Processing line: ~ [666, 4158, 64, 64],~ ** Processing line: ~ [601, 4158, 64, 64],~ ** Processing line: ~ [537, 4156, 64, 64],~ ** Processing line: ~ [918, 4137, 64, 64],~ ** Processing line: ~ [854, 4137, 64, 64],~ ** Processing line: ~ [789, 4136, 64, 64],~ ** Processing line: ~ [726, 4137, 64, 64],~ ** Processing line: ~ [661, 4137, 64, 64],~ ** Processing line: ~ [599, 4139, 64, 64],~ ** Processing line: ~ [538, 4137, 64, 64],~ ** Processing line: ~ [5378, 4254, 64, 64],~ ** Processing line: ~ [5440, 4204, 64, 64],~ ** Processing line: ~ [5405, 4214, 64, 64],~ ** Processing line: ~ [5350, 4254, 64, 64],~ ** Processing line: ~ [5439, 4177, 64, 64],~ ** Processing line: ~ [5413, 4173, 64, 64],~ ** Processing line: ~ [5399, 4128, 64, 64],~ ** Processing line: ~ [5352, 4200, 64, 64],~ ** Processing line: ~ [5352, 4158, 64, 64],~ ** Processing line: ~ [5392, 4130, 64, 64],~ ** Processing line: ~ [6216, 4251, 64, 64],~ ** Processing line: ~ [6190, 4251, 64, 64],~ ** Processing line: ~ [6279, 4200, 64, 64],~ ** Processing line: ~ [6262, 4205, 64, 64],~ ** Processing line: ~ [6233, 4214, 64, 64],~ ** Processing line: ~ [6280, 4172, 64, 64],~ ** Processing line: ~ [6256, 4169, 64, 64],~ ** Processing line: ~ [6239, 4128, 64, 64],~ ** Processing line: ~ [6231, 4128, 64, 64],~ ** Processing line: ~ [6191, 4195, 64, 64],~ ** Processing line: ~ [6190, 4158, 64, 64],~ ** Processing line: ~ [7072, 4250, 64, 64],~ ** Processing line: ~ [7046, 4250, 64, 64],~ ** Processing line: ~ [7133, 4202, 64, 64],~ ** Processing line: ~ [7107, 4209, 64, 64],~ ** Processing line: ~ [7086, 4214, 64, 64],~ ** Processing line: ~ [7133, 4173, 64, 64],~ ** Processing line: ~ [7108, 4169, 64, 64],~ ** Processing line: ~ [7092, 4127, 64, 64],~ ** Processing line: ~ [7084, 4128, 64, 64],~ ** Processing line: ~ [7047, 4191, 64, 64],~ ** Processing line: ~ [7047, 4156, 64, 64],~ ** Processing line: ~ [7926, 4252, 64, 64],~ ** Processing line: ~ [7900, 4253, 64, 64],~ ** Processing line: ~ [7987, 4202, 64, 64],~ ** Processing line: ~ [7965, 4209, 64, 64],~ ** Processing line: ~ [7942, 4216, 64, 64],~ ** Processing line: ~ [7989, 4174, 64, 64],~ ** Processing line: ~ [7970, 4170, 64, 64],~ ** Processing line: ~ [7949, 4126, 64, 64],~ ** Processing line: ~ [7901, 4196, 64, 64],~ ** Processing line: ~ [7900, 4159, 64, 64],~ ** Processing line: ~ [7941, 4130, 64, 64],~ ** Processing line: ~ [2847, 379, 64, 64],~ ** Processing line: ~ [2825, 380, 64, 64],~ ** Processing line: ~ [2845, 317, 64, 64],~ ** Processing line: ~ [2829, 316, 64, 64],~ ** Processing line: ~ [2845, 255, 64, 64],~ ** Processing line: ~ [2830, 257, 64, 64],~ ** Processing line: ~ [2845, 202, 64, 64],~ ** Processing line: ~ [2829, 198, 64, 64],~ ** Processing line: ~ [2770, 169, 64, 64],~ ** Processing line: ~ [2708, 170, 64, 64],~ ** Processing line: ~ [2646, 171, 64, 64],~ ** Processing line: ~ [2582, 171, 64, 64],~ ** Processing line: ~ [2518, 171, 64, 64],~ ** Processing line: ~ [2454, 171, 64, 64],~ ** Processing line: ~ [2391, 172, 64, 64],~ ** Processing line: ~ [2332, 379, 64, 64],~ ** Processing line: ~ [2315, 379, 64, 64],~ ** Processing line: ~ [2334, 316, 64, 64],~ ** Processing line: ~ [2315, 317, 64, 64],~ ** Processing line: ~ [2332, 254, 64, 64],~ ** Processing line: ~ [2314, 254, 64, 64],~ ** Processing line: ~ [2335, 192, 64, 64],~ ** Processing line: ~ [2311, 192, 64, 64],~ ** Processing line: ~ [2846, 142, 64, 64],~ ** Processing line: ~ [2784, 140, 64, 64],~ ** Processing line: ~ [2846, 79, 64, 64],~ ** Processing line: ~ [2847, 41, 64, 64],~ ** Processing line: ~ [2783, 80, 64, 64],~ ** Processing line: ~ [2790, 39, 64, 64],~ ** Processing line: ~ [2727, 41, 64, 64],~ ** Processing line: ~ [2665, 43, 64, 64],~ ** Processing line: ~ [2605, 43, 64, 64],~ ** Processing line: ~ [2543, 44, 64, 64],~ ** Processing line: ~ [2480, 45, 64, 64],~ ** Processing line: ~ [2419, 45, 64, 64],~ ** Processing line: ~ [2357, 44, 64, 64],~ ** Processing line: ~ [2313, 129, 64, 64],~ ** Processing line: ~ [2313, 70, 64, 64],~ ** Processing line: ~ [2314, 40, 64, 64],~ ** Processing line: ~ [2517, 2385, 64, 64],~ ** Processing line: ~ [2452, 2385, 64, 64],~ ** Processing line: ~ [2390, 2386, 64, 64],~ ** Processing line: ~ [2328, 2386, 64, 64],~ ** Processing line: ~ [2264, 2386, 64, 64],~ ** Processing line: ~ [2200, 2386, 64, 64],~ ** Processing line: ~ [2137, 2387, 64, 64],~ ** Processing line: ~ [2071, 2385, 64, 64],~ ** Processing line: ~ [2016, 2389, 64, 64],~ ** Processing line: ~ [2517, 2341, 64, 64],~ ** Processing line: ~ [2518, 2316, 64, 64],~ ** Processing line: ~ [2456, 2316, 64, 64],~ ** Processing line: ~ [2393, 2316, 64, 64],~ ** Processing line: ~ [2328, 2317, 64, 64],~ ** Processing line: ~ [2264, 2316, 64, 64],~ ** Processing line: ~ [2207, 2318, 64, 64],~ ** Processing line: ~ [2144, 2317, 64, 64],~ ** Processing line: ~ [2081, 2316, 64, 64],~ ** Processing line: ~ [2015, 2342, 64, 64],~ ** Processing line: ~ [2016, 2315, 64, 64],~ ** Processing line: ~ [869, 3709, 64, 64],~ ** Processing line: ~ [819, 3710, 64, 64],~ ** Processing line: ~ [869, 3658, 64, 64],~ ** Processing line: ~ [820, 3658, 64, 64],~ ** Processing line: ~ [0, 0, 64, 64],~ ** Processing line: ~ [0, 1670, 64, 64],~ ** Processing line: ~ [6691, 1653, 64, 64],~ ** Processing line: ~ [1521, 3792, 64, 64],~ ** Processing line: ~ [0, 5137, 64, 64],~ ** Processing line: ~ [3898, 2400, 64, 64],~ ** Processing line: ~ [3835, 2400, 64, 64],~ ** Processing line: ~ [3771, 2400, 64, 64],~ ** Processing line: ~ [3708, 2401, 64, 64],~ ** Processing line: ~ [3646, 2401, 64, 64],~ ** Processing line: ~ [3587, 2401, 64, 64],~ ** Processing line: ~ [3530, 2401, 64, 64],~ ** Processing line: ~ [3897, 2340, 64, 64],~ ** Processing line: ~ [3897, 2295, 64, 64],~ ** Processing line: ~ [3834, 2296, 64, 64],~ ** Processing line: ~ [3773, 2295, 64, 64],~ ** Processing line: ~ [3710, 2296, 64, 64],~ ** Processing line: ~ [3656, 2295, 64, 64],~ ** Processing line: ~ [3593, 2294, 64, 64],~ ** Processing line: ~ [3527, 2339, 64, 64],~ ** Processing line: ~ [3531, 2293, 64, 64],~ ** Processing line: ~ [4152, 2903, 64, 64],~ ** Processing line: ~ [4155, 2858, 64, 64],~ ** Processing line: ~ [3942, 1306, 64, 64],~ ** Processing line: ~ [3942, 1279, 64, 64],~ ** Processing line: ~ [3879, 1306, 64, 64],~ ** Processing line: ~ [3881, 1278, 64, 64],~ ** Processing line: ~ [3819, 1305, 64, 64],~ ** Processing line: ~ [3819, 1277, 64, 64],~ ** Processing line: ~ [3756, 1306, 64, 64],~ ** Processing line: ~ [3756, 1277, 64, 64],~ ** Processing line: ~ [3694, 1306, 64, 64],~ ** Processing line: ~ [3695, 1277, 64, 64],~ ** Processing line: ~ [3631, 1306, 64, 64],~ ** Processing line: ~ [3632, 1278, 64, 64],~ ** Processing line: ~ [3565, 1306, 64, 64],~ ** Processing line: ~ [3567, 1279, 64, 64],~ ** Processing line: ~ [4432, 1165, 64, 64],~ ** Processing line: ~ [4408, 1163, 64, 64],~ ** Processing line: ~ [5123, 1003, 64, 64],~ ** Processing line: ~ [5065, 1002, 64, 64],~ ** Processing line: ~ [5042, 1002, 64, 64],~ ** Processing line: ~ [6020, 1780, 64, 64],~ ** Processing line: ~ [6020, 1756, 64, 64],~ ** Processing line: ~ [5959, 1780, 64, 64],~ ** Processing line: ~ [5959, 1752, 64, 64],~ ** Processing line: ~ [5897, 1779, 64, 64],~ ** Processing line: ~ [5899, 1752, 64, 64],~ ** Processing line: ~ [5836, 1779, 64, 64],~ ** Processing line: ~ [5836, 1751, 64, 64],~ ** Processing line: ~ [5776, 1780, 64, 64],~ ** Processing line: ~ [5776, 1754, 64, 64],~ ** Processing line: ~ [5717, 1780, 64, 64],~ ** Processing line: ~ [5716, 1752, 64, 64],~ ** Processing line: ~ [5658, 1781, 64, 64],~ ** Processing line: ~ [5658, 1755, 64, 64],~ ** Processing line: ~ [5640, 1781, 64, 64],~ ** Processing line: ~ [5640, 1754, 64, 64],~ ** Processing line: ~ [5832, 2095, 64, 64],~ ** Processing line: ~ [5782, 2093, 64, 64],~ ** Processing line: ~ [5832, 2044, 64, 64],~ ** Processing line: ~ [5777, 2043, 64, 64],~ ** Processing line: ~ [4847, 2577, 64, 64],~ ** Processing line: ~ [4795, 2577, 64, 64],~ ** Processing line: ~ [4846, 2526, 64, 64],~ ** Processing line: ~ [4794, 2526, 64, 64],~ ** Processing line: ~ [8390, 923, 64, 64],~ ** Processing line: ~ [8363, 922, 64, 64],~ ** Processing line: ~ [7585, 1084, 64, 64],~ ** Processing line: ~ [7582, 1058, 64, 64],~ ** Processing line: ~ [7525, 1084, 64, 64],~ ** Processing line: ~ [7524, 1056, 64, 64],~ ** Processing line: ~ [7478, 1085, 64, 64],~ ** Processing line: ~ [7476, 1055, 64, 64],~ ** Processing line: ~ [7421, 1086, 64, 64],~ ** Processing line: ~ [7421, 1052, 64, 64],~ ** Processing line: ~ [7362, 1085, 64, 64],~ ** Processing line: ~ [7361, 1053, 64, 64],~ ** Processing line: ~ [7307, 1087, 64, 64],~ ** Processing line: ~ [7307, 1054, 64, 64],~ ** Processing line: ~ [7258, 1086, 64, 64],~ ** Processing line: ~ [7255, 1058, 64, 64],~ ** Processing line: ~ [7203, 1083, 64, 64],~ ** Processing line: ~ [7203, 1055, 64, 64],~ ** Processing line: ~ [7161, 1085, 64, 64],~ ** Processing line: ~ [7158, 1057, 64, 64],~ ** Processing line: ~ [7100, 1083, 64, 64],~ ** Processing line: ~ [7099, 1058, 64, 64],~ ** Processing line: ~ [7038, 1082, 64, 64],~ ** Processing line: ~ [7038, 1058, 64, 64],~ ** Processing line: ~ [6982, 1083, 64, 64],~ ** Processing line: ~ [6984, 1057, 64, 64],~ ** Processing line: ~ [0, 0, 64, 64],~ ** Processing line: ~ [0, 1670, 64, 64],~ ** Processing line: ~ [6691, 1653, 64, 64],~ ** Processing line: ~ [1521, 3792, 64, 64],~ ** Processing line: ~ [0, 5137, 64, 64],~ ** Processing line: ~ [0, 0, 64, 64],~ ** Processing line: ~ [0, 1670, 64, 64],~ ** Processing line: ~ [6691, 1653, 64, 64],~ ** Processing line: ~ [1521, 3792, 64, 64],~ ** Processing line: ~ [0, 5137, 64, 64],~ ** Processing line: ~ [0, 0, 64, 64],~ ** Processing line: ~ [0, 1670, 64, 64],~ ** Processing line: ~ [6691, 1653, 64, 64],~ ** Processing line: ~ [1521, 3792, 64, 64],~ ** Processing line: ~ [0, 5137, 64, 64],~ ** Processing line: ~ [8346, 424, 64, 64],~ ** Processing line: ~ [8407, 376, 64, 64],~ ** Processing line: ~ [8375, 386, 64, 64],~ ** Processing line: ~ [8407, 347, 64, 64],~ ** Processing line: ~ [8388, 343, 64, 64],~ ** Processing line: ~ [8320, 423, 64, 64],~ ** Processing line: ~ [8319, 363, 64, 64],~ ** Processing line: ~ [8368, 303, 64, 64],~ ** Processing line: ~ [8359, 303, 64, 64],~ ** Processing line: ~ [8318, 330, 64, 64],~ ** Processing line: ~ [9369, 425, 64, 64],~ ** Processing line: ~ [9340, 425, 64, 64],~ ** Processing line: ~ [9431, 376, 64, 64],~ ** Processing line: ~ [9414, 382, 64, 64],~ ** Processing line: ~ [9387, 391, 64, 64],~ ** Processing line: ~ [9431, 349, 64, 64],~ ** Processing line: ~ [9412, 344, 64, 64],~ ** Processing line: ~ [9392, 305, 64, 64],~ ** Processing line: ~ [9339, 365, 64, 64],~ ** Processing line: ~ [9341, 333, 64, 64],~ ** Processing line: ~ [9384, 301, 64, 64],~ ** Processing line: ~ [7673, 1896, 64, 64],~ ** Processing line: ~ [7642, 1834, 64, 64],~ ** Processing line: ~ [7646, 1901, 64, 64],~ ** Processing line: ~ [4500, 4054, 64, 64],~ ** Processing line: ~ [4476, 4055, 64, 64],~ ** Processing line: ~ [4459, 3997, 64, 64],~ ** Processing line: ~ [76, 5215, 64, 64],~ ** Processing line: ~ [39, 5217, 64, 64],~ ** Processing line: ~ [0, 0, 10000, 40],~ ** Processing line: ~ [0, 1670, 3250, 60],~ ** Processing line: ~ [6691, 1653, 3290, 60],~ ** Processing line: ~ [1521, 3792, 7370, 60],~ ** Processing line: ~ [0, 5137, 3290, 60]~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ $mugs = [~ ** Processing line: ~ [85, 87, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [958, 1967, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [2537, 1734, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [3755, 2464, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [1548, 3273, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [2050, 220, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [854, 297, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [343, 526, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [3454, 772, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [5041, 298, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [6089, 300, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [6518, 295, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [7661, 47, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [9392, 1125, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [7298, 1152, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [5816, 1843, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [876, 3772, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [1029, 4667, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [823, 5324, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [3251, 5220, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [4747, 5282, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [9325, 5178, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [9635, 4298, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [7837, 4127, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [8651, 1971, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [6892, 2031, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [4626, 3882, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [4024, 4554, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [3925, 3337, 39, 43, "sprites/square-orange.png"],~ ** Processing line: ~ [5064, 1064, 39, 43, "sprites/square-orange.png"]~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Platformer - Gorillas Basic - credits.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - Gorillas Basic - credits.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - Gorillas Basic - credits.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_platformer/gorillas_basic/CREDITS.txt~ ** Processing line: ~ code: Amir Rajan, https://twitter.com/amirrajan~ ** Processing line: ~ graphics: Nick Culbertson, https://twitter.com/MobyPixel~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Platformer - Gorillas Basic - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - Gorillas Basic - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - Gorillas Basic - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_platformer/gorillas_basic/app/main.rb~ ** Processing line: ~ class YouSoBasicGorillas~ ** Processing line: ~ attr_accessor :outputs, :grid, :state, :inputs~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ calc~ ** Processing line: ~ process_inputs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ outputs.background_color = [33, 32, 87]~ ** Processing line: ~ state.building_spacing = 1~ ** Processing line: ~ state.building_room_spacing = 15~ ** Processing line: ~ state.building_room_width = 10~ ** Processing line: ~ state.building_room_height = 15~ ** Processing line: ~ state.building_heights = [4, 4, 6, 8, 15, 20, 18]~ ** Processing line: ~ state.building_room_sizes = [5, 4, 6, 7]~ ** Processing line: ~ state.gravity = 0.25~ ** Processing line: ~ state.first_strike ||= :player_1~ ** Processing line: ~ state.buildings ||= []~ ** Processing line: ~ state.holes ||= []~ ** Processing line: ~ state.player_1_score ||= 0~ ** Processing line: ~ state.player_2_score ||= 0~ ** Processing line: ~ state.wind ||= 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render~ ** Processing line: ~ render_stage~ ** Processing line: ~ render_value_insertion~ ** Processing line: ~ render_gorillas~ ** Processing line: ~ render_holes~ ** Processing line: ~ render_banana~ ** Processing line: ~ render_game_over~ ** Processing line: ~ render_score~ ** Processing line: ~ render_wind~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_score~ ** Processing line: ~ outputs.primitives << [0, 0, 1280, 31, fancy_white].solid~ ** Processing line: ~ outputs.primitives << [1, 1, 1279, 29].solid~ ** Processing line: ~ outputs.labels << [ 10, 25, "Score: #{state.player_1_score}", 0, 0, fancy_white]~ ** Processing line: ~ outputs.labels << [1270, 25, "Score: #{state.player_2_score}", 0, 2, fancy_white]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_wind~ ** Processing line: ~ outputs.primitives << [640, 12, state.wind * 500 + state.wind * 10 * rand, 4, 35, 136, 162].solid~ ** Processing line: ~ outputs.lines << [640, 30, 640, 0, fancy_white]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_game_over~ ** Processing line: ~ return unless state.over~ ** Processing line: ~ outputs.primitives << [grid.rect, 0, 0, 0, 200].solid~ ** Processing line: ~ outputs.primitives << [640, 370, "Game Over!!", 5, 1, fancy_white].label~ ** Processing line: ~ if state.winner == :player_1~ ** Processing line: ~ outputs.primitives << [640, 340, "Player 1 Wins!!", 5, 1, fancy_white].label~ ** Processing line: ~ else~ ** Processing line: ~ outputs.primitives << [640, 340, "Player 2 Wins!!", 5, 1, fancy_white].label~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_stage~ ** Processing line: ~ return unless state.stage_generated~ ** Processing line: ~ return if state.stage_rendered~ ** Processing line: ~~ ** Processing line: ~ outputs.static_solids << [grid.rect, 33, 32, 87]~ ** Processing line: ~ outputs.static_solids << state.buildings.map(&:solids)~ ** Processing line: ~ state.stage_rendered = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_gorilla gorilla, id~ ** Processing line: ~ return unless gorilla~ ** Processing line: ~ if state.banana && state.banana.owner == gorilla~ ** Processing line: ~ animation_index = state.banana.created_at.frame_index(3, 5, false)~ ** Processing line: ~ end~ ** Processing line: ~ if !animation_index~ ** Processing line: ~ outputs.sprites << [gorilla.solid, "sprites/#{id}-idle.png"]~ ** Processing line: ~ else~ ** Processing line: ~ outputs.sprites << [gorilla.solid, "sprites/#{id}-#{animation_index}.png"]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_gorillas~ ** Processing line: ~ render_gorilla state.player_1, :left~ ** Processing line: ~ render_gorilla state.player_2, :right~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_value_insertion~ ** Processing line: ~ return if state.banana~ ** Processing line: ~ return if state.over~ ** Processing line: ~~ ** Processing line: ~ if state.current_turn == :player_1_angle~ ** Processing line: ~ outputs.labels << [ 10, 710, "Angle: #{state.player_1_angle}_", fancy_white]~ ** Processing line: ~ elsif state.current_turn == :player_1_velocity~ ** Processing line: ~ outputs.labels << [ 10, 710, "Angle: #{state.player_1_angle}", fancy_white]~ ** Processing line: ~ outputs.labels << [ 10, 690, "Velocity: #{state.player_1_velocity}_", fancy_white]~ ** Processing line: ~ elsif state.current_turn == :player_2_angle~ ** Processing line: ~ outputs.labels << [1120, 710, "Angle: #{state.player_2_angle}_", fancy_white]~ ** Processing line: ~ elsif state.current_turn == :player_2_velocity~ ** Processing line: ~ outputs.labels << [1120, 710, "Angle: #{state.player_2_angle}", fancy_white]~ ** Processing line: ~ outputs.labels << [1120, 690, "Velocity: #{state.player_2_velocity}_", fancy_white]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_banana~ ** Processing line: ~ return unless state.banana~ ** Processing line: ~ rotation = state.tick_count.%(360) * 20~ ** Processing line: ~ rotation *= -1 if state.banana.dx > 0~ ** Processing line: ~ outputs.sprites << [state.banana.x, state.banana.y, 15, 15, 'sprites/banana.png', rotation]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_holes~ ** Processing line: ~ outputs.sprites << state.holes.map do |s|~ ** Processing line: ~ animation_index = s.created_at.frame_index(7, 3, false)~ ** Processing line: ~ if animation_index~ ** Processing line: ~ [s.sprite, [s.sprite.rect, "sprites/explosion#{animation_index}.png" ]]~ ** Processing line: ~ else~ ** Processing line: ~ s.sprite~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc~ ** Processing line: ~ calc_generate_stage~ ** Processing line: ~ calc_current_turn~ ** Processing line: ~ calc_banana~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_current_turn~ ** Processing line: ~ return if state.current_turn~ ** Processing line: ~~ ** Processing line: ~ state.current_turn = :player_1_angle~ ** Processing line: ~ state.current_turn = :player_2_angle if state.first_strike == :player_2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_generate_stage~ ** Processing line: ~ return if state.stage_generated~ ** Processing line: ~~ ** Processing line: ~ state.buildings << building_prefab(state.building_spacing + -20, *random_building_size)~ ** Processing line: ~ 8.numbers.inject(state.buildings) do |buildings, i|~ ** Processing line: ~ buildings <<~ ** Processing line: ~ building_prefab(state.building_spacing +~ ** Processing line: ~ state.buildings.last.right,~ ** Processing line: ~ *random_building_size)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ building_two = state.buildings[1]~ ** Processing line: ~ state.player_1 = new_player(building_two.x + building_two.w.fdiv(2),~ ** Processing line: ~ building_two.h)~ ** Processing line: ~~ ** Processing line: ~ building_nine = state.buildings[-3]~ ** Processing line: ~ state.player_2 = new_player(building_nine.x + building_nine.w.fdiv(2),~ ** Processing line: ~ building_nine.h)~ ** Processing line: ~ state.stage_generated = true~ ** Processing line: ~ state.wind = 1.randomize(:ratio, :sign)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_player x, y~ ** Processing line: ~ state.new_entity(:gorilla) do |p|~ ** Processing line: ~ p.x = x - 25~ ** Processing line: ~ p.y = y~ ** Processing line: ~ p.solid = [p.x, p.y, 50, 50]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_banana~ ** Processing line: ~ return unless state.banana~ ** Processing line: ~~ ** Processing line: ~ state.banana.x += state.banana.dx~ ** Processing line: ~ state.banana.dx += state.wind.fdiv(50)~ ** Processing line: ~ state.banana.y += state.banana.dy~ ** Processing line: ~ state.banana.dy -= state.gravity~ ** Processing line: ~ banana_collision = [state.banana.x, state.banana.y, 10, 10]~ ** Processing line: ~~ ** Processing line: ~ if state.player_1 && banana_collision.intersect_rect?(state.player_1.solid)~ ** Processing line: ~ state.over = true~ ** Processing line: ~ if state.banana.owner == state.player_2~ ** Processing line: ~ state.winner = :player_2~ ** Processing line: ~ else~ ** Processing line: ~ state.winner = :player_1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.player_2_score += 1~ ** Processing line: ~ elsif state.player_2 && banana_collision.intersect_rect?(state.player_2.solid)~ ** Processing line: ~ state.over = true~ ** Processing line: ~ if state.banana.owner == state.player_2~ ** Processing line: ~ state.winner = :player_1~ ** Processing line: ~ else~ ** Processing line: ~ state.winner = :player_2~ ** Processing line: ~ end~ ** Processing line: ~ state.player_1_score += 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if state.over~ ** Processing line: ~ place_hole~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return if state.holes.any? do |h|~ ** Processing line: ~ h.sprite.scale_rect(0.8, 0.5, 0.5).intersect_rect? [state.banana.x, state.banana.y, 10, 10]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return unless state.banana.y < 0 || state.buildings.any? do |b|~ ** Processing line: ~ b.rect.intersect_rect? [state.banana.x, state.banana.y, 1, 1]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ place_hole~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def place_hole~ ** Processing line: ~ return unless state.banana~ ** Processing line: ~~ ** Processing line: ~ state.holes << state.new_entity(:banana) do |b|~ ** Processing line: ~ b.sprite = [state.banana.x - 20, state.banana.y - 20, 40, 40, 'sprites/hole.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.banana = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_inputs_main~ ** Processing line: ~ return if state.banana~ ** Processing line: ~ return if state.over~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.key_down.enter~ ** Processing line: ~ input_execute_turn~ ** Processing line: ~ elsif inputs.keyboard.key_down.backspace~ ** Processing line: ~ state.as_hash[state.current_turn] ||= ""~ ** Processing line: ~ state.as_hash[state.current_turn] = state.as_hash[state.current_turn][0..-2]~ ** Processing line: ~ elsif inputs.keyboard.key_down.char~ ** Processing line: ~ state.as_hash[state.current_turn] ||= ""~ ** Processing line: ~ state.as_hash[state.current_turn] += inputs.keyboard.key_down.char~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_inputs_game_over~ ** Processing line: ~ return unless state.over~ ** Processing line: ~ return unless inputs.keyboard.key_down.truthy_keys.any?~ ** Processing line: ~ state.over = false~ ** Processing line: ~ outputs.static_solids.clear~ ** Processing line: ~ state.buildings.clear~ ** Processing line: ~ state.holes.clear~ ** Processing line: ~ state.stage_generated = false~ ** Processing line: ~ state.stage_rendered = false~ ** Processing line: ~ if state.first_strike == :player_1~ ** Processing line: ~ state.first_strike = :player_2~ ** Processing line: ~ else~ ** Processing line: ~ state.first_strike = :player_1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_inputs~ ** Processing line: ~ process_inputs_main~ ** Processing line: ~ process_inputs_game_over~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_execute_turn~ ** Processing line: ~ return if state.banana~ ** Processing line: ~~ ** Processing line: ~ if state.current_turn == :player_1_angle && parse_or_clear!(:player_1_angle)~ ** Processing line: ~ state.current_turn = :player_1_velocity~ ** Processing line: ~ elsif state.current_turn == :player_1_velocity && parse_or_clear!(:player_1_velocity)~ ** Processing line: ~ state.current_turn = :player_2_angle~ ** Processing line: ~ state.banana =~ ** Processing line: ~ new_banana(state.player_1,~ ** Processing line: ~ state.player_1.x + 25,~ ** Processing line: ~ state.player_1.y + 60,~ ** Processing line: ~ state.player_1_angle,~ ** Processing line: ~ state.player_1_velocity)~ ** Processing line: ~ elsif state.current_turn == :player_2_angle && parse_or_clear!(:player_2_angle)~ ** Processing line: ~ state.current_turn = :player_2_velocity~ ** Processing line: ~ elsif state.current_turn == :player_2_velocity && parse_or_clear!(:player_2_velocity)~ ** Processing line: ~ state.current_turn = :player_1_angle~ ** Processing line: ~ state.banana =~ ** Processing line: ~ new_banana(state.player_2,~ ** Processing line: ~ state.player_2.x + 25,~ ** Processing line: ~ state.player_2.y + 60,~ ** Processing line: ~ 180 - state.player_2_angle,~ ** Processing line: ~ state.player_2_velocity)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if state.banana~ ** Processing line: ~ state.player_1_angle = nil~ ** Processing line: ~ state.player_1_velocity = nil~ ** Processing line: ~ state.player_2_angle = nil~ ** Processing line: ~ state.player_2_velocity = nil~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def random_building_size~ ** Processing line: ~ [state.building_heights.sample, state.building_room_sizes.sample]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def int? v~ ** Processing line: ~ v.to_i.to_s == v.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def random_building_color~ ** Processing line: ~ [[ 99, 0, 107],~ ** Processing line: ~ [ 35, 64, 124],~ ** Processing line: ~ [ 35, 136, 162],~ ** Processing line: ~ ].sample~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def random_window_color~ ** Processing line: ~ [[ 88, 62, 104],~ ** Processing line: ~ [253, 224, 187]].sample~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def windows_for_building starting_x, floors, rooms~ ** Processing line: ~ floors.-(1).combinations(rooms - 1).map do |floor, room|~ ** Processing line: ~ [starting_x +~ ** Processing line: ~ state.building_room_width.*(room) +~ ** Processing line: ~ state.building_room_spacing.*(room + 1),~ ** Processing line: ~ state.building_room_height.*(floor) +~ ** Processing line: ~ state.building_room_spacing.*(floor + 1),~ ** Processing line: ~ state.building_room_width,~ ** Processing line: ~ state.building_room_height,~ ** Processing line: ~ random_window_color]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def building_prefab starting_x, floors, rooms~ ** Processing line: ~ state.new_entity(:building) do |b|~ ** Processing line: ~ b.x = starting_x~ ** Processing line: ~ b.y = 0~ ** Processing line: ~ b.w = state.building_room_width.*(rooms) +~ ** Processing line: ~ state.building_room_spacing.*(rooms + 1)~ ** Processing line: ~ b.h = state.building_room_height.*(floors) +~ ** Processing line: ~ state.building_room_spacing.*(floors + 1)~ ** Processing line: ~ b.right = b.x + b.w~ ** Processing line: ~ b.rect = [b.x, b.y, b.w, b.h]~ ** Processing line: ~ b.solids = [[b.x - 1, b.y, b.w + 2, b.h + 1, fancy_white],~ ** Processing line: ~ [b.x, b.y, b.w, b.h, random_building_color],~ ** Processing line: ~ windows_for_building(b.x, floors, rooms)]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def parse_or_clear! game_prop~ ** Processing line: ~ if int? state.as_hash[game_prop]~ ** Processing line: ~ state.as_hash[game_prop] = state.as_hash[game_prop].to_i~ ** Processing line: ~ return true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.as_hash[game_prop] = nil~ ** Processing line: ~ return false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_banana owner, x, y, angle, velocity~ ** Processing line: ~ state.new_entity(:banana) do |b|~ ** Processing line: ~ b.owner = owner~ ** Processing line: ~ b.x = x~ ** Processing line: ~ b.y = y~ ** Processing line: ~ b.angle = angle % 360~ ** Processing line: ~ b.velocity = velocity / 5~ ** Processing line: ~ b.dx = b.angle.vector_x(b.velocity)~ ** Processing line: ~ b.dy = b.angle.vector_y(b.velocity)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def fancy_white~ ** Processing line: ~ [253, 252, 253]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $you_so_basic_gorillas = YouSoBasicGorillas.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $you_so_basic_gorillas.outputs = args.outputs~ ** Processing line: ~ $you_so_basic_gorillas.grid = args.grid~ ** Processing line: ~ $you_so_basic_gorillas.state = args.state~ ** Processing line: ~ $you_so_basic_gorillas.inputs = args.inputs~ ** Processing line: ~ $you_so_basic_gorillas.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Platformer - Gorillas Basic - tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - Gorillas Basic - tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - Gorillas Basic - tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_platformer/gorillas_basic/app/tests.rb~ ** Processing line: ~ $gtk.reset 100~ ** Processing line: ~ $gtk.supress_framerate_warning = true~ ** Processing line: ~ $gtk.require 'app/tests/building_generation_tests.rb'~ ** Processing line: ~ $gtk.tests.start~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Platformer - Gorillas Basic - Tests - building_generation_tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - Gorillas Basic - Tests - building_generation_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - Gorillas Basic - Tests - building_generation_tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_platformer/gorillas_basic/app/tests/building_generation_tests.rb~ ** Processing line: ~ def test_solids args, assert~ ** Processing line: ~ game = YouSoBasicGorillas.new~ ** Processing line: ~ game.outputs = args.outputs~ ** Processing line: ~ game.grid = args.grid~ ** Processing line: ~ game.state = args.state~ ** Processing line: ~ game.inputs = args.inputs~ ** Processing line: ~ game.tick~ ** Processing line: ~ assert.true! args.state.stage_generated, "stage wasn't generated but it should have been"~ ** Processing line: ~ game.tick~ ** Processing line: ~ assert.true! args.outputs.static_solids.length > 0, "stage wasn't rendered"~ ** Processing line: ~ number_of_building_components = (args.state.buildings.map { |b| 2 + b.solids[2].length }.inject do |sum, v| (sum || 0) + v end)~ ** Processing line: ~ the_only_background = 1~ ** Processing line: ~ static_solids = args.outputs.static_solids.length~ ** Processing line: ~ assert.true! static_solids == the_only_background.+(number_of_building_components), "not all parts of the buildings and background were rendered"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Platformer - The Little Probe - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - The Little Probe - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - The Little Probe - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_platformer/the_little_probe/app/main.rb~ ** Processing line: ~ class FallingCircle~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ fiddle~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ input~ ** Processing line: ~ calc~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def fiddle~ ** Processing line: ~ state.gravity = -0.02~ ** Processing line: ~ circle.radius = 15~ ** Processing line: ~ circle.elasticity = 0.4~ ** Processing line: ~ camera.follow_speed = 0.4 * 0.4~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render~ ** Processing line: ~ render_stage_editor~ ** Processing line: ~ render_debug~ ** Processing line: ~ render_game~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ if state.tick_count == 0~ ** Processing line: ~ outputs.sounds << "sounds/bg.ogg"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.storyline ||= [~ ** Processing line: ~ { text: "<- -> to aim, hold space to charge", distance_gate: 0 },~ ** Processing line: ~ { text: "the little probe - by @amirrajan, made with DragonRuby Game Toolkit", distance_gate: 0 },~ ** Processing line: ~ { text: "mission control, this is sasha. landing on europa successful.", distance_gate: 0 },~ ** Processing line: ~ { text: "operation \"find earth 2.0\", initiated at 8-29-2036 14:00.", distance_gate: 0 },~ ** Processing line: ~ { text: "jupiter's sure is beautiful...", distance_gate: 4000 },~ ** Processing line: ~ { text: "hmm, it seems there's some kind of anomoly in the sky", distance_gate: 7000 },~ ** Processing line: ~ { text: "dancing lights, i'll call them whisps.", distance_gate: 8000 },~ ** Processing line: ~ { text: "#todo... look i ran out of time -_-", distance_gate: 9000 },~ ** Processing line: ~ { text: "there's never enough time", distance_gate: 9000 },~ ** Processing line: ~ { text: "the game jam was fun though ^_^", distance_gate: 10000 },~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ load_level force: args.state.tick_count == 0~ ** Processing line: ~ state.line_mode ||= :terrain~ ** Processing line: ~~ ** Processing line: ~ state.sound_index ||= 1~ ** Processing line: ~ circle.potential_lift ||= 0~ ** Processing line: ~ circle.angle ||= 90~ ** Processing line: ~ circle.check_point_at ||= -1000~ ** Processing line: ~ circle.game_over_at ||= -1000~ ** Processing line: ~ circle.x ||= -485~ ** Processing line: ~ circle.y ||= 12226~ ** Processing line: ~ circle.check_point_x ||= circle.x~ ** Processing line: ~ circle.check_point_y ||= circle.y~ ** Processing line: ~ circle.dy ||= 0~ ** Processing line: ~ circle.dx ||= 0~ ** Processing line: ~ circle.previous_dy ||= 0~ ** Processing line: ~ circle.previous_dx ||= 0~ ** Processing line: ~ circle.angle ||= 0~ ** Processing line: ~ circle.after_images ||= []~ ** Processing line: ~ circle.terrains_to_monitor ||= {}~ ** Processing line: ~ circle.impact_history ||= []~ ** Processing line: ~~ ** Processing line: ~ camera.x ||= 0~ ** Processing line: ~ camera.y ||= 0~ ** Processing line: ~ camera.target_x ||= 0~ ** Processing line: ~ camera.target_y ||= 0~ ** Processing line: ~ state.snaps ||= { }~ ** Processing line: ~ state.snap_number = 10~ ** Processing line: ~~ ** Processing line: ~ args.state.storyline_x ||= -1000~ ** Processing line: ~ args.state.storyline_y ||= -1000~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_game~ ** Processing line: ~ outputs.background_color = [0, 0, 0]~ ** Processing line: ~ outputs.sprites << [-circle.x + 1100,~ ** Processing line: ~ -circle.y - 100,~ ** Processing line: ~ 2416 * 4,~ ** Processing line: ~ 3574 * 4,~ ** Processing line: ~ 'sprites/jupiter.png']~ ** Processing line: ~ outputs.sprites << [-circle.x,~ ** Processing line: ~ -circle.y,~ ** Processing line: ~ 2416 * 4,~ ** Processing line: ~ 3574 * 4,~ ** Processing line: ~ 'sprites/level.png']~ ** Processing line: ~ outputs.sprites << state.whisp_queue~ ** Processing line: ~ render_aiming_retical~ ** Processing line: ~ render_circle~ ** Processing line: ~ render_notification~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_notification~ ** Processing line: ~ toast_length = 500~ ** Processing line: ~ if circle.game_over_at.elapsed_time < toast_length~ ** Processing line: ~ label_text = "..."~ ** Processing line: ~ elsif circle.check_point_at.elapsed_time > toast_length~ ** Processing line: ~ args.state.current_storyline = nil~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~ if circle.check_point_at &&~ ** Processing line: ~ circle.check_point_at.elapsed_time == 1 &&~ ** Processing line: ~ !args.state.current_storyline~ ** Processing line: ~ if args.state.storyline.length > 0 && args.state.distance_traveled > args.state.storyline[0][:distance_gate]~ ** Processing line: ~ args.state.current_storyline = args.state.storyline.shift[:text]~ ** Processing line: ~ args.state.distance_traveled ||= 0~ ** Processing line: ~ args.state.storyline_x = circle.x~ ** Processing line: ~ args.state.storyline_y = circle.y~ ** Processing line: ~ end~ ** Processing line: ~ return unless args.state.current_storyline~ ** Processing line: ~ end~ ** Processing line: ~ label_text = args.state.current_storyline~ ** Processing line: ~ return unless label_text~ ** Processing line: ~ x = circle.x + camera.x~ ** Processing line: ~ y = circle.y + camera.y - 40~ ** Processing line: ~ w = 900~ ** Processing line: ~ h = 30~ ** Processing line: ~ outputs.primitives << [x - w.idiv(2), y - h, w, h, 255, 255, 255, 255].solid~ ** Processing line: ~ outputs.primitives << [x - w.idiv(2), y - h, w, h, 0, 0, 0, 255].border~ ** Processing line: ~ outputs.labels << [x, y - 4, label_text, 1, 1, 0, 0, 0, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_aiming_retical~ ** Processing line: ~ outputs.sprites << [state.camera.x + circle.x + circle.angle.vector_x(circle.potential_lift * 10) - 5,~ ** Processing line: ~ state.camera.y + circle.y + circle.angle.vector_y(circle.potential_lift * 10) - 5,~ ** Processing line: ~ 10, 10, 'sprites/circle-orange.png']~ ** Processing line: ~ outputs.sprites << [state.camera.x + circle.x + circle.angle.vector_x(circle.radius * 3) - 5,~ ** Processing line: ~ state.camera.y + circle.y + circle.angle.vector_y(circle.radius * 3) - 5,~ ** Processing line: ~ 10, 10, 'sprites/circle-orange.png', 0, 128]~ ** Processing line: ~ if rand > 0.9~ ** Processing line: ~ outputs.sprites << [state.camera.x + circle.x + circle.angle.vector_x(circle.radius * 3) - 5,~ ** Processing line: ~ state.camera.y + circle.y + circle.angle.vector_y(circle.radius * 3) - 5,~ ** Processing line: ~ 10, 10, 'sprites/circle-white.png', 0, 128]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_circle~ ** Processing line: ~ outputs.sprites << circle.after_images.map do |ai|~ ** Processing line: ~ ai.merge(x: ai.x + state.camera.x - circle.radius,~ ** Processing line: ~ y: ai.y + state.camera.y - circle.radius,~ ** Processing line: ~ w: circle.radius * 2,~ ** Processing line: ~ h: circle.radius * 2,~ ** Processing line: ~ path: 'sprites/circle-white.png')~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.sprites << [(circle.x - circle.radius) + state.camera.x,~ ** Processing line: ~ (circle.y - circle.radius) + state.camera.y,~ ** Processing line: ~ circle.radius * 2,~ ** Processing line: ~ circle.radius * 2,~ ** Processing line: ~ 'sprites/probe.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_debug~ ** Processing line: ~ return unless state.debug_mode~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [10, 30, state.line_mode, 0, 0, 0, 0, 0]~ ** Processing line: ~ outputs.labels << [12, 32, state.line_mode, 0, 0, 255, 255, 255]~ ** Processing line: ~~ ** Processing line: ~ args.outputs.lines << trajectory(circle).line.to_hash.tap do |h|~ ** Processing line: ~ h[:x] += state.camera.x~ ** Processing line: ~ h[:y] += state.camera.y~ ** Processing line: ~ h[:x2] += state.camera.x~ ** Processing line: ~ h[:y2] += state.camera.y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.primitives << state.terrain.find_all do |t|~ ** Processing line: ~ circle.x.between?(t.x - 640, t.x2 + 640) || circle.y.between?(t.y - 360, t.y2 + 360)~ ** Processing line: ~ end.map do |t|~ ** Processing line: ~ [~ ** Processing line: ~ t.line.associate(r: 0, g: 255, b: 0) do |h|~ ** Processing line: ~ h.x += state.camera.x~ ** Processing line: ~ h.y += state.camera.y~ ** Processing line: ~ h.x2 += state.camera.x~ ** Processing line: ~ h.y2 += state.camera.y~ ** Processing line: ~ if circle.rect.intersect_rect? t[:rect]~ ** Processing line: ~ h[:r] = 255~ ** Processing line: ~ h[:g] = 0~ ** Processing line: ~ end~ ** Processing line: ~ h~ ** Processing line: ~ end,~ ** Processing line: ~ t[:rect].border.associate(r: 255, g: 0, b: 0) do |h|~ ** Processing line: ~ h.x += state.camera.x~ ** Processing line: ~ h.y += state.camera.y~ ** Processing line: ~ h.b = 255 if line_near_rect? circle.rect, t~ ** Processing line: ~ h~ ** Processing line: ~ end~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.primitives << state.lava.find_all do |t|~ ** Processing line: ~ circle.x.between?(t.x - 640, t.x2 + 640) || circle.y.between?(t.y - 360, t.y2 + 360)~ ** Processing line: ~ end.map do |t|~ ** Processing line: ~ [~ ** Processing line: ~ t.line.associate(r: 0, g: 0, b: 255) do |h|~ ** Processing line: ~ h.x += state.camera.x~ ** Processing line: ~ h.y += state.camera.y~ ** Processing line: ~ h.x2 += state.camera.x~ ** Processing line: ~ h.y2 += state.camera.y~ ** Processing line: ~ if circle.rect.intersect_rect? t[:rect]~ ** Processing line: ~ h[:r] = 255~ ** Processing line: ~ h[:b] = 0~ ** Processing line: ~ end~ ** Processing line: ~ h~ ** Processing line: ~ end,~ ** Processing line: ~ t[:rect].border.associate(r: 255, g: 0, b: 0) do |h|~ ** Processing line: ~ h.x += state.camera.x~ ** Processing line: ~ h.y += state.camera.y~ ** Processing line: ~ h.b = 255 if line_near_rect? circle.rect, t~ ** Processing line: ~ h~ ** Processing line: ~ end~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if state.god_mode~ ** Processing line: ~ border = circle.rect.merge(x: circle.rect.x + state.camera.x,~ ** Processing line: ~ y: circle.rect.y + state.camera.y,~ ** Processing line: ~ g: 255)~ ** Processing line: ~ else~ ** Processing line: ~ border = circle.rect.merge(x: circle.rect.x + state.camera.x,~ ** Processing line: ~ y: circle.rect.y + state.camera.y,~ ** Processing line: ~ b: 255)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ outputs.borders << border~ ** Processing line: ~~ ** Processing line: ~ overlapping ||= {}~ ** Processing line: ~~ ** Processing line: ~ circle.impact_history.each do |h|~ ** Processing line: ~ label_mod = 300~ ** Processing line: ~ x = (h[:body][:x].-(150).idiv(label_mod)) * label_mod + camera.x~ ** Processing line: ~ y = (h[:body][:y].+(150).idiv(label_mod)) * label_mod + camera.y~ ** Processing line: ~ 10.times do~ ** Processing line: ~ if overlapping[x] && overlapping[x][y]~ ** Processing line: ~ y -= 52~ ** Processing line: ~ else~ ** Processing line: ~ break~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ overlapping[x] ||= {}~ ** Processing line: ~ overlapping[x][y] ||= true~ ** Processing line: ~ outputs.primitives << [x, y - 25, 300, 50, 0, 0, 0, 128].solid~ ** Processing line: ~ outputs.labels << [x + 10, y + 24, "dy: %.2f" % h[:body][:new_dy], -2, 0, 255, 255, 255]~ ** Processing line: ~ outputs.labels << [x + 10, y + 9, "dx: %.2f" % h[:body][:new_dx], -2, 0, 255, 255, 255]~ ** Processing line: ~ outputs.labels << [x + 10, y - 5, " ?: #{h[:body][:new_reason]}", -2, 0, 255, 255, 255]~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [x + 100, y + 24, "angle: %.2f" % h[:impact][:angle], -2, 0, 255, 255, 255]~ ** Processing line: ~ outputs.labels << [x + 100, y + 9, "m(l): %.2f" % h[:terrain][:slope], -2, 0, 255, 255, 255]~ ** Processing line: ~ outputs.labels << [x + 100, y - 5, "m(c): %.2f" % h[:body][:slope], -2, 0, 255, 255, 255]~ ** Processing line: ~~ ** Processing line: ~ outputs.labels << [x + 200, y + 24, "ray: #{h[:impact][:ray]}", -2, 0, 255, 255, 255]~ ** Processing line: ~ outputs.labels << [x + 200, y + 9, "nxt: #{h[:impact][:ray_next]}", -2, 0, 255, 255, 255]~ ** Processing line: ~ outputs.labels << [x + 200, y - 5, "typ: #{h[:impact][:type]}", -2, 0, 255, 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if circle.floor~ ** Processing line: ~ outputs.labels << [circle.x + camera.x + 30, circle.y + camera.y + 100, "point: #{circle.floor_point.slice(:x, :y).values}", -2, 0]~ ** Processing line: ~ outputs.labels << [circle.x + camera.x + 31, circle.y + camera.y + 101, "point: #{circle.floor_point.slice(:x, :y).values}", -2, 0, 255, 255, 255]~ ** Processing line: ~ outputs.labels << [circle.x + camera.x + 30, circle.y + camera.y + 85, "circle: #{circle.as_hash.slice(:x, :y).values}", -2, 0]~ ** Processing line: ~ outputs.labels << [circle.x + camera.x + 31, circle.y + camera.y + 86, "circle: #{circle.as_hash.slice(:x, :y).values}", -2, 0, 255, 255, 255]~ ** Processing line: ~ outputs.labels << [circle.x + camera.x + 30, circle.y + camera.y + 70, "rel: #{circle.floor_relative_x} #{circle.floor_relative_y}", -2, 0]~ ** Processing line: ~ outputs.labels << [circle.x + camera.x + 31, circle.y + camera.y + 71, "rel: #{circle.floor_relative_x} #{circle.floor_relative_y}", -2, 0, 255, 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_stage_editor~ ** Processing line: ~ return unless state.god_mode~ ** Processing line: ~ return unless state.point_one~ ** Processing line: ~ args.lines << [state.point_one, inputs.mouse.point, 0, 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def trajectory body~ ** Processing line: ~ [body.x + body.dx,~ ** Processing line: ~ body.y + body.dy,~ ** Processing line: ~ body.x + body.dx * 1000,~ ** Processing line: ~ body.y + body.dy * 1000,~ ** Processing line: ~ 0, 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def lengthen_line line, num~ ** Processing line: ~ line = normalize_line(line)~ ** Processing line: ~ slope = geometry.line_slope(line, replace_infinity: 10).abs~ ** Processing line: ~ if slope < 2~ ** Processing line: ~ [line.x - num, line.y, line.x2 + num, line.y2].line.to_hash~ ** Processing line: ~ else~ ** Processing line: ~ [line.x, line.y, line.x2, line.y2].line.to_hash~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def normalize_line line~ ** Processing line: ~ if line.x > line.x2~ ** Processing line: ~ x = line.x2~ ** Processing line: ~ y = line.y2~ ** Processing line: ~ x2 = line.x~ ** Processing line: ~ y2 = line.y~ ** Processing line: ~ else~ ** Processing line: ~ x = line.x~ ** Processing line: ~ y = line.y~ ** Processing line: ~ x2 = line.x2~ ** Processing line: ~ y2 = line.y2~ ** Processing line: ~ end~ ** Processing line: ~ [x, y, x2, y2]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rect_for_line line~ ** Processing line: ~ if line.x > line.x2~ ** Processing line: ~ x = line.x2~ ** Processing line: ~ y = line.y2~ ** Processing line: ~ x2 = line.x~ ** Processing line: ~ y2 = line.y~ ** Processing line: ~ else~ ** Processing line: ~ x = line.x~ ** Processing line: ~ y = line.y~ ** Processing line: ~ x2 = line.x2~ ** Processing line: ~ y2 = line.y2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ w = x2 - x~ ** Processing line: ~ h = y2 - y~ ** Processing line: ~~ ** Processing line: ~ if h < 0~ ** Processing line: ~ y += h~ ** Processing line: ~ h = h.abs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if w < circle.radius~ ** Processing line: ~ x -= circle.radius~ ** Processing line: ~ w = circle.radius * 2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if h < circle.radius~ ** Processing line: ~ y -= circle.radius~ ** Processing line: ~ h = circle.radius * 2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ { x: x, y: y, w: w, h: h }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def snap_to_grid x, y, snaps~ ** Processing line: ~ snap_number = 10~ ** Processing line: ~ x = x.to_i~ ** Processing line: ~ y = y.to_i~ ** Processing line: ~~ ** Processing line: ~ x_floor = x.idiv(snap_number) * snap_number~ ** Processing line: ~ x_mod = x % snap_number~ ** Processing line: ~ x_ceil = (x.idiv(snap_number) + 1) * snap_number~ ** Processing line: ~~ ** Processing line: ~ y_floor = y.idiv(snap_number) * snap_number~ ** Processing line: ~ y_mod = y % snap_number~ ** Processing line: ~ y_ceil = (y.idiv(snap_number) + 1) * snap_number~ ** Processing line: ~~ ** Processing line: ~ if snaps[x_floor]~ ** Processing line: ~ x_result = x_floor~ ** Processing line: ~ elsif snaps[x_ceil]~ ** Processing line: ~ x_result = x_ceil~ ** Processing line: ~ elsif x_mod < snap_number.idiv(2)~ ** Processing line: ~ x_result = x_floor~ ** Processing line: ~ else~ ** Processing line: ~ x_result = x_ceil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ snaps[x_result] ||= {}~ ** Processing line: ~~ ** Processing line: ~ if snaps[x_result][y_floor]~ ** Processing line: ~ y_result = y_floor~ ** Processing line: ~ elsif snaps[x_result][y_ceil]~ ** Processing line: ~ y_result = y_ceil~ ** Processing line: ~ elsif y_mod < snap_number.idiv(2)~ ** Processing line: ~ y_result = y_floor~ ** Processing line: ~ else~ ** Processing line: ~ y_result = y_ceil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ snaps[x_result][y_result] = true~ ** Processing line: ~ return [x_result, y_result]~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def snap_line line~ ** Processing line: ~ x, y, x2, y2 = line~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def string_to_line s~ ** Processing line: ~ x, y, x2, y2 = s.split(',').map(&:to_f)~ ** Processing line: ~~ ** Processing line: ~ if x > x2~ ** Processing line: ~ x2, x = x, x2~ ** Processing line: ~ y2, y = y, y2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ x, y = snap_to_grid x, y, state.snaps~ ** Processing line: ~ x2, y2 = snap_to_grid x2, y2, state.snaps~ ** Processing line: ~ [x, y, x2, y2].line.to_hash~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def load_lines file~ ** Processing line: ~ return unless state.snaps~ ** Processing line: ~ data = gtk.read_file(file) || ""~ ** Processing line: ~ data.each_line~ ** Processing line: ~ .reject { |l| l.strip.length == 0 }~ ** Processing line: ~ .map { |l| string_to_line l }~ ** Processing line: ~ .map { |h| h.merge(rect: rect_for_line(h)) }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def load_terrain~ ** Processing line: ~ load_lines 'data/level.txt'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def load_lava~ ** Processing line: ~ load_lines 'data/level_lava.txt'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def load_level force: false~ ** Processing line: ~ if force~ ** Processing line: ~ state.snaps = {}~ ** Processing line: ~ state.terrain = load_terrain~ ** Processing line: ~ state.lava = load_lava~ ** Processing line: ~ else~ ** Processing line: ~ state.terrain ||= load_terrain~ ** Processing line: ~ state.lava ||= load_lava~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def save_lines lines, file~ ** Processing line: ~ s = lines.map do |l|~ ** Processing line: ~ "#{l.x1},#{l.y1},#{l.x2},#{l.y2}"~ ** Processing line: ~ end.join("\n")~ ** Processing line: ~ gtk.write_file(file, s)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def save_level~ ** Processing line: ~ save_lines(state.terrain, 'level.txt')~ ** Processing line: ~ save_lines(state.lava, 'level_lava.txt')~ ** Processing line: ~ load_level force: true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def line_near_rect? rect, terrain~ ** Processing line: ~ geometry.intersect_rect?(rect, terrain[:rect])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def point_within_line? point, line~ ** Processing line: ~ return false if !point~ ** Processing line: ~ return false if !line~ ** Processing line: ~ return true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_impacts x, dx, y, dy, radius~ ** Processing line: ~ results = { }~ ** Processing line: ~ results[:x] = x~ ** Processing line: ~ results[:y] = y~ ** Processing line: ~ results[:dx] = x~ ** Processing line: ~ results[:dy] = y~ ** Processing line: ~ results[:point] = { x: x, y: y }~ ** Processing line: ~ results[:rect] = { x: x - radius, y: y - radius, w: radius * 2, h: radius * 2 }~ ** Processing line: ~ results[:trajectory] = trajectory(results)~ ** Processing line: ~ results[:impacts] = terrain.find_all { |t| t && (line_near_rect? results[:rect], t) }.map do |t|~ ** Processing line: ~ {~ ** Processing line: ~ terrain: t,~ ** Processing line: ~ point: geometry.line_intersect(results[:trajectory], t, replace_infinity: 1000),~ ** Processing line: ~ type: :terrain~ ** Processing line: ~ }~ ** Processing line: ~ end.reject { |t| !point_within_line? t[:point], t[:terrain] }~ ** Processing line: ~~ ** Processing line: ~ results[:impacts] += lava.find_all { |t| line_near_rect? results[:rect], t }.map do |t|~ ** Processing line: ~ {~ ** Processing line: ~ terrain: t,~ ** Processing line: ~ point: geometry.line_intersect(results[:trajectory], t, replace_infinity: 1000),~ ** Processing line: ~ type: :lava~ ** Processing line: ~ }~ ** Processing line: ~ end.reject { |t| !t || (!point_within_line? t[:point], t[:terrain]) }~ ** Processing line: ~~ ** Processing line: ~ results~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_potential_impacts~ ** Processing line: ~ impact_results = calc_impacts circle.x, circle.dx, circle.y, circle.dy, circle.radius~ ** Processing line: ~ circle.rect = impact_results[:rect]~ ** Processing line: ~ circle.trajectory = impact_results[:trajectory]~ ** Processing line: ~ circle.impacts = impact_results[:impacts]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_terrains_to_monitor~ ** Processing line: ~ return unless circle.impacts~ ** Processing line: ~ circle.impact = nil~ ** Processing line: ~ circle.impacts.each do |i|~ ** Processing line: ~ circle.terrains_to_monitor[i[:terrain]] ||= {~ ** Processing line: ~ ray_start: geometry.ray_test(circle, i[:terrain]),~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ circle.terrains_to_monitor[i[:terrain]][:ray_current] = geometry.ray_test(circle, i[:terrain])~ ** Processing line: ~ if circle.terrains_to_monitor[i[:terrain]][:ray_start] != circle.terrains_to_monitor[i[:terrain]][:ray_current]~ ** Processing line: ~ if circle.x.between?(i[:terrain].x, i[:terrain].x2) || circle.y.between?(i[:terrain].y, i[:terrain].y2)~ ** Processing line: ~ circle.impact = i~ ** Processing line: ~ circle.ray_current = circle.terrains_to_monitor[i[:terrain]][:ray_current]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def impact_result body, impact~ ** Processing line: ~ infinity_alias = 1000~ ** Processing line: ~ r = {~ ** Processing line: ~ body: {},~ ** Processing line: ~ terrain: {},~ ** Processing line: ~ impact: {}~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ r[:body][:line] = body.trajectory.dup~ ** Processing line: ~ r[:body][:slope] = geometry.line_slope(body.trajectory, replace_infinity: infinity_alias)~ ** Processing line: ~ r[:body][:slope_sign] = r[:body][:slope].sign~ ** Processing line: ~ r[:body][:x] = body.x~ ** Processing line: ~ r[:body][:y] = body.y~ ** Processing line: ~ r[:body][:dy] = body.dy~ ** Processing line: ~ r[:body][:dx] = body.dx~ ** Processing line: ~~ ** Processing line: ~ r[:terrain][:line] = impact[:terrain].dup~ ** Processing line: ~ r[:terrain][:slope] = geometry.line_slope(impact[:terrain], replace_infinity: infinity_alias)~ ** Processing line: ~ r[:terrain][:slope_sign] = r[:terrain][:slope].sign~ ** Processing line: ~~ ** Processing line: ~ r[:impact][:angle] = geometry.angle_between_lines(body.trajectory, impact[:terrain], replace_infinity: infinity_alias)~ ** Processing line: ~ r[:impact][:point] = { x: impact[:point].x, y: impact[:point].y }~ ** Processing line: ~ r[:impact][:same_slope_sign] = r[:body][:slope_sign] == r[:terrain][:slope_sign]~ ** Processing line: ~ r[:impact][:ray] = body.ray_current~ ** Processing line: ~ r[:body][:new_on_floor] = body.on_floor~ ** Processing line: ~ r[:body][:new_floor] = r[:terrain][:line]~ ** Processing line: ~~ ** Processing line: ~ if r[:impact][:angle].abs < 90 && r[:terrain][:slope].abs < 3~ ** Processing line: ~ play_sound~ ** Processing line: ~ r[:body][:new_dy] = r[:body][:dy] * circle.elasticity * -1~ ** Processing line: ~ r[:body][:new_dx] = r[:body][:dx] * circle.elasticity~ ** Processing line: ~ r[:impact][:type] = :horizontal~ ** Processing line: ~ r[:body][:new_reason] = "-"~ ** Processing line: ~ elsif r[:impact][:angle].abs < 90 && r[:terrain][:slope].abs > 3~ ** Processing line: ~ play_sound~ ** Processing line: ~ r[:body][:new_dy] = r[:body][:dy] * 1.1~ ** Processing line: ~ r[:body][:new_dx] = r[:body][:dx] * -circle.elasticity~ ** Processing line: ~ r[:impact][:type] = :vertical~ ** Processing line: ~ r[:body][:new_reason] = "|"~ ** Processing line: ~ else~ ** Processing line: ~ play_sound~ ** Processing line: ~ r[:body][:new_dx] = r[:body][:dx] * -circle.elasticity~ ** Processing line: ~ r[:body][:new_dy] = r[:body][:dy] * -circle.elasticity~ ** Processing line: ~ r[:impact][:type] = :slanted~ ** Processing line: ~ r[:body][:new_reason] = "/"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ r[:impact][:energy] = r[:body][:new_dx].abs + r[:body][:new_dy].abs~ ** Processing line: ~~ ** Processing line: ~ if r[:impact][:energy] <= 0.3 && r[:terrain][:slope].abs < 4~ ** Processing line: ~ r[:body][:new_dx] = 0~ ** Processing line: ~ r[:body][:new_dy] = 0~ ** Processing line: ~ r[:impact][:energy] = 0~ ** Processing line: ~ r[:body][:new_on_floor] = true~ ** Processing line: ~ r[:body][:new_floor] = r[:terrain][:line]~ ** Processing line: ~ r[:body][:new_reason] = "0"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ r[:impact][:ray_next] = geometry.ray_test({ x: r[:body][:x] - (r[:body][:dx] * 1.1) + r[:body][:new_dx],~ ** Processing line: ~ y: r[:body][:y] - (r[:body][:dy] * 1.1) + r[:body][:new_dy] + state.gravity },~ ** Processing line: ~ r[:terrain][:line])~ ** Processing line: ~~ ** Processing line: ~ if r[:impact][:ray_next] == r[:impact][:ray]~ ** Processing line: ~ r[:body][:new_dx] *= -1~ ** Processing line: ~ r[:body][:new_dy] *= -1~ ** Processing line: ~ r[:body][:new_reason] = "clip"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ r~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def game_over!~ ** Processing line: ~ circle.x = circle.check_point_x~ ** Processing line: ~ circle.y = circle.check_point_y~ ** Processing line: ~ circle.dx = 0~ ** Processing line: ~ circle.dy = 0~ ** Processing line: ~ circle.game_over_at = state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def not_game_over!~ ** Processing line: ~ impact_history_entry = impact_result circle, circle.impact~ ** Processing line: ~ circle.impact_history << impact_history_entry~ ** Processing line: ~ circle.x -= circle.dx * 1.1~ ** Processing line: ~ circle.y -= circle.dy * 1.1~ ** Processing line: ~ circle.dx = impact_history_entry[:body][:new_dx]~ ** Processing line: ~ circle.dy = impact_history_entry[:body][:new_dy]~ ** Processing line: ~ circle.on_floor = impact_history_entry[:body][:new_on_floor]~ ** Processing line: ~~ ** Processing line: ~ if circle.on_floor~ ** Processing line: ~ circle.check_point_at = state.tick_count~ ** Processing line: ~ circle.check_point_x = circle.x~ ** Processing line: ~ circle.check_point_y = circle.y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ circle.previous_floor = circle.floor || {}~ ** Processing line: ~ circle.floor = impact_history_entry[:body][:new_floor] || {}~ ** Processing line: ~ circle.floor_point = impact_history_entry[:impact][:point]~ ** Processing line: ~ if circle.floor.slice(:x, :y, :x2, :y2) != circle.previous_floor.slice(:x, :y, :x2, :y2)~ ** Processing line: ~ new_relative_x = if circle.dx > 0~ ** Processing line: ~ :right~ ** Processing line: ~ elsif circle.dx < 0~ ** Processing line: ~ :left~ ** Processing line: ~ else~ ** Processing line: ~ nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ new_relative_y = if circle.dy > 0~ ** Processing line: ~ :above~ ** Processing line: ~ elsif circle.dy < 0~ ** Processing line: ~ :below~ ** Processing line: ~ else~ ** Processing line: ~ nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ circle.floor_relative_x = new_relative_x~ ** Processing line: ~ circle.floor_relative_y = new_relative_y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ circle.impact = nil~ ** Processing line: ~ circle.terrains_to_monitor.clear~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_physics~ ** Processing line: ~ if args.state.god_mode~ ** Processing line: ~ calc_potential_impacts~ ** Processing line: ~ calc_terrains_to_monitor~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if circle.y < -700~ ** Processing line: ~ game_over~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return if state.game_over~ ** Processing line: ~ return if circle.on_floor~ ** Processing line: ~ circle.previous_dy = circle.dy~ ** Processing line: ~ circle.previous_dx = circle.dx~ ** Processing line: ~ circle.x += circle.dx~ ** Processing line: ~ circle.y += circle.dy~ ** Processing line: ~ args.state.distance_traveled ||= 0~ ** Processing line: ~ args.state.distance_traveled += circle.dx.abs + circle.dy.abs~ ** Processing line: ~ circle.dy += state.gravity~ ** Processing line: ~ calc_potential_impacts~ ** Processing line: ~ calc_terrains_to_monitor~ ** Processing line: ~ return unless circle.impact~ ** Processing line: ~ if circle.impact && circle.impact[:type] == :lava~ ** Processing line: ~ game_over!~ ** Processing line: ~ else~ ** Processing line: ~ not_game_over!~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_god_mode~ ** Processing line: ~ state.debug_mode = !state.debug_mode if inputs.keyboard.key_down.forward_slash~ ** Processing line: ~~ ** Processing line: ~ # toggle god mode~ ** Processing line: ~ if inputs.keyboard.key_down.g~ ** Processing line: ~ state.god_mode = !state.god_mode~ ** Processing line: ~ state.potential_lift = 0~ ** Processing line: ~ circle.floor = nil~ ** Processing line: ~ circle.floor_point = nil~ ** Processing line: ~ circle.floor_relative_x = nil~ ** Processing line: ~ circle.floor_relative_y = nil~ ** Processing line: ~ circle.impact = nil~ ** Processing line: ~ circle.terrains_to_monitor.clear~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return unless state.god_mode~ ** Processing line: ~~ ** Processing line: ~ circle.x = circle.x.to_i~ ** Processing line: ~ circle.y = circle.y.to_i~ ** Processing line: ~~ ** Processing line: ~ # move god circle~ ** Processing line: ~ if inputs.keyboard.left || inputs.keyboard.a~ ** Processing line: ~ circle.x -= 20~ ** Processing line: ~ elsif inputs.keyboard.right || inputs.keyboard.d || inputs.keyboard.f~ ** Processing line: ~ circle.x += 20~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.keyboard.up || inputs.keyboard.w~ ** Processing line: ~ circle.y += 20~ ** Processing line: ~ elsif inputs.keyboard.down || inputs.keyboard.s~ ** Processing line: ~ circle.y -= 20~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # delete terrain~ ** Processing line: ~ if inputs.keyboard.key_down.x~ ** Processing line: ~ calc_terrains_to_monitor~ ** Processing line: ~ state.terrain = state.terrain.reject do |t|~ ** Processing line: ~ t[:rect].intersect_rect? circle.rect~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.lava = state.lava.reject do |t|~ ** Processing line: ~ t[:rect].intersect_rect? circle.rect~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ calc_potential_impacts~ ** Processing line: ~ save_level~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # change terrain type~ ** Processing line: ~ if inputs.keyboard.key_down.l~ ** Processing line: ~ if state.line_mode == :terrain~ ** Processing line: ~ state.line_mode = :lava~ ** Processing line: ~ else~ ** Processing line: ~ state.line_mode = :terrain~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if inputs.mouse.click && !state.point_one~ ** Processing line: ~ state.point_one = inputs.mouse.click.point~ ** Processing line: ~ elsif inputs.mouse.click && state.point_one~ ** Processing line: ~ l = [*state.point_one, *inputs.mouse.click.point]~ ** Processing line: ~ l = [l.x - state.camera.x,~ ** Processing line: ~ l.y - state.camera.y,~ ** Processing line: ~ l.x2 - state.camera.x,~ ** Processing line: ~ l.y2 - state.camera.y].line.to_hash~ ** Processing line: ~ l[:rect] = rect_for_line l~ ** Processing line: ~ if state.line_mode == :terrain~ ** Processing line: ~ state.terrain << l~ ** Processing line: ~ else~ ** Processing line: ~ state.lava << l~ ** Processing line: ~ end~ ** Processing line: ~ save_level~ ** Processing line: ~ next_x = inputs.mouse.click.point.x - 640~ ** Processing line: ~ next_y = inputs.mouse.click.point.y - 360~ ** Processing line: ~ circle.x += next_x~ ** Processing line: ~ circle.y += next_y~ ** Processing line: ~ state.point_one = nil~ ** Processing line: ~ elsif inputs.keyboard.one~ ** Processing line: ~ state.point_one = [circle.x + camera.x, circle.y+ camera.y]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # cancel chain lines~ ** Processing line: ~ if inputs.keyboard.key_down.nine || inputs.keyboard.key_down.escape || inputs.keyboard.key_up.six || inputs.keyboard.key_up.one~ ** Processing line: ~ state.point_one = nil~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def play_sound~ ** Processing line: ~ return if state.sound_debounce > 0~ ** Processing line: ~ state.sound_debounce = 5~ ** Processing line: ~ outputs.sounds << "sounds/03#{"%02d" % state.sound_index}.wav"~ ** Processing line: ~ state.sound_index += 1~ ** Processing line: ~ if state.sound_index > 21~ ** Processing line: ~ state.sound_index = 1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input_game~ ** Processing line: ~ if inputs.keyboard.down || inputs.keyboard.space~ ** Processing line: ~ circle.potential_lift += 0.03~ ** Processing line: ~ circle.potential_lift = circle.potential_lift.lesser(10)~ ** Processing line: ~ elsif inputs.keyboard.key_up.down || inputs.keyboard.key_up.space~ ** Processing line: ~ play_sound~ ** Processing line: ~ circle.dy += circle.angle.vector_y circle.potential_lift~ ** Processing line: ~ circle.dx += circle.angle.vector_x circle.potential_lift~ ** Processing line: ~~ ** Processing line: ~ if circle.on_floor~ ** Processing line: ~ if circle.floor_relative_y == :above~ ** Processing line: ~ circle.y += circle.potential_lift.abs * 2~ ** Processing line: ~ elsif circle.floor_relative_y == :below~ ** Processing line: ~ circle.y -= circle.potential_lift.abs * 2~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ circle.on_floor = false~ ** Processing line: ~ circle.potential_lift = 0~ ** Processing line: ~ circle.terrains_to_monitor.clear~ ** Processing line: ~ circle.impact_history.clear~ ** Processing line: ~ circle.impact = nil~ ** Processing line: ~ calc_physics~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # aim probe~ ** Processing line: ~ if inputs.keyboard.right || inputs.keyboard.a~ ** Processing line: ~ circle.angle -= 2~ ** Processing line: ~ elsif inputs.keyboard.left || inputs.keyboard.d~ ** Processing line: ~ circle.angle += 2~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input~ ** Processing line: ~ input_god_mode~ ** Processing line: ~ input_game~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_camera~ ** Processing line: ~ state.camera.target_x = 640 - circle.x~ ** Processing line: ~ state.camera.target_y = 360 - circle.y~ ** Processing line: ~ xdiff = state.camera.target_x - state.camera.x~ ** Processing line: ~ ydiff = state.camera.target_y - state.camera.y~ ** Processing line: ~ state.camera.x += xdiff * camera.follow_speed~ ** Processing line: ~ state.camera.y += ydiff * camera.follow_speed~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc~ ** Processing line: ~ state.sound_debounce ||= 0~ ** Processing line: ~ state.sound_debounce -= 1~ ** Processing line: ~ state.sound_debounce = 0 if state.sound_debounce < 0~ ** Processing line: ~ if state.god_mode~ ** Processing line: ~ circle.dy *= 0.1~ ** Processing line: ~ circle.dx *= 0.1~ ** Processing line: ~ end~ ** Processing line: ~ calc_camera~ ** Processing line: ~ state.whisp_queue ||= []~ ** Processing line: ~ if state.tick_count.mod_zero?(4)~ ** Processing line: ~ state.whisp_queue << {~ ** Processing line: ~ x: -300,~ ** Processing line: ~ y: 1400 * rand,~ ** Processing line: ~ speed: 2.randomize(:ratio) + 3,~ ** Processing line: ~ w: 20,~ ** Processing line: ~ h: 20, path: 'sprites/whisp.png',~ ** Processing line: ~ a: 0,~ ** Processing line: ~ created_at: state.tick_count,~ ** Processing line: ~ angle: 0,~ ** Processing line: ~ r: 100,~ ** Processing line: ~ g: 128 + 128 * rand,~ ** Processing line: ~ b: 128 + 128 * rand~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.whisp_queue.each do |w|~ ** Processing line: ~ w.x += w[:speed] * 2~ ** Processing line: ~ w.x -= circle.dx * 0.3~ ** Processing line: ~ w.y -= w[:speed]~ ** Processing line: ~ w.y -= circle.dy * 0.3~ ** Processing line: ~ w.angle += w[:speed]~ ** Processing line: ~ w.a = w[:created_at].ease(30) * 255~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ state.whisp_queue = state.whisp_queue.reject { |w| w[:x] > 1280 }~ ** Processing line: ~~ ** Processing line: ~ if state.tick_count.mod_zero?(2) && (circle.dx != 0 || circle.dy != 0)~ ** Processing line: ~ circle.after_images << {~ ** Processing line: ~ x: circle.x,~ ** Processing line: ~ y: circle.y,~ ** Processing line: ~ w: circle.radius,~ ** Processing line: ~ h: circle.radius,~ ** Processing line: ~ a: 255,~ ** Processing line: ~ created_at: state.tick_count~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ circle.after_images.each do |ai|~ ** Processing line: ~ ai.a = ai[:created_at].ease(10, :flip) * 255~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ circle.after_images = circle.after_images.reject { |ai| ai[:created_at].elapsed_time > 10 }~ ** Processing line: ~ calc_physics~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def circle~ ** Processing line: ~ state.circle~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def camera~ ** Processing line: ~ state.camera~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def terrain~ ** Processing line: ~ state.terrain~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def lava~ ** Processing line: ~ state.lava~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # $gtk.reset~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ if args.inputs.keyboard.r~ ** Processing line: ~ args.gtk.reset~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~ # uncomment the line below to slow down the game so you~ ** Processing line: ~ # can see each tick as it passes~ ** Processing line: ~ # args.gtk.slowmo! 30~ ** Processing line: ~ $game ||= FallingCircle.new~ ** Processing line: ~ $game.args = args~ ** Processing line: ~ $game.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reset~ ** Processing line: ~ $game = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Platformer - The Little Probe - Data - level.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - The Little Probe - Data - level.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - The Little Probe - Data - level.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_platformer/the_little_probe/data/level.txt~ ** Processing line: ~ 640,8840,1180,8840~ ** Processing line: ~ -60,10220,0,9960~ ** Processing line: ~ -60,10220,0,10500~ ** Processing line: ~ 0,10500,0,10780~ ** Processing line: ~ 0,10780,40,10900~ ** Processing line: ~ 500,10920,760,10960~ ** Processing line: ~ 300,10560,820,10600~ ** Processing line: ~ 420,10320,700,10300~ ** Processing line: ~ 820,10600,1500,10600~ ** Processing line: ~ 1500,10600,1940,10600~ ** Processing line: ~ 1940,10600,2380,10580~ ** Processing line: ~ 2380,10580,2800,10620~ ** Processing line: ~ 2240,11080,2480,11020~ ** Processing line: ~ 2000,11120,2240,11080~ ** Processing line: ~ 1760,11180,2000,11120~ ** Processing line: ~ 1620,11180,1760,11180~ ** Processing line: ~ 1500,11220,1620,11180~ ** Processing line: ~ 1180,11280,1340,11220~ ** Processing line: ~ 1040,11240,1180,11280~ ** Processing line: ~ 840,11280,1040,11240~ ** Processing line: ~ 640,11280,840,11280~ ** Processing line: ~ 500,11220,640,11280~ ** Processing line: ~ 420,11140,500,11220~ ** Processing line: ~ 240,11100,420,11140~ ** Processing line: ~ 100,11120,240,11100~ ** Processing line: ~ 0,11180,100,11120~ ** Processing line: ~ -160,11220,0,11180~ ** Processing line: ~ -260,11240,-160,11220~ ** Processing line: ~ 1340,11220,1500,11220~ ** Processing line: ~ 960,13300,1280,13060~ ** Processing line: ~ 1280,13060,1540,12860~ ** Processing line: ~ 1540,12860,1820,12700~ ** Processing line: ~ 1820,12700,2080,12520~ ** Processing line: ~ 2080,12520,2240,12400~ ** Processing line: ~ 2240,12400,2240,12240~ ** Processing line: ~ 2240,12240,2400,12080~ ** Processing line: ~ 2400,12080,2560,11920~ ** Processing line: ~ 2560,11920,2640,11740~ ** Processing line: ~ 2640,11740,2740,11580~ ** Processing line: ~ 2740,11580,2800,11400~ ** Processing line: ~ 2800,11400,2800,11240~ ** Processing line: ~ 2740,11140,2800,11240~ ** Processing line: ~ 2700,11040,2740,11140~ ** Processing line: ~ 2700,11040,2740,10960~ ** Processing line: ~ 2740,10960,2740,10920~ ** Processing line: ~ 2700,10900,2740,10920~ ** Processing line: ~ 2380,10900,2700,10900~ ** Processing line: ~ 2040,10920,2380,10900~ ** Processing line: ~ 1720,10940,2040,10920~ ** Processing line: ~ 1380,11000,1720,10940~ ** Processing line: ~ 1180,10980,1380,11000~ ** Processing line: ~ 900,10980,1180,10980~ ** Processing line: ~ 760,10960,900,10980~ ** Processing line: ~ 240,10960,500,10920~ ** Processing line: ~ 40,10900,240,10960~ ** Processing line: ~ 0,9700,0,9960~ ** Processing line: ~ -60,9500,0,9700~ ** Processing line: ~ -60,9420,-60,9500~ ** Processing line: ~ -60,9420,-60,9340~ ** Processing line: ~ -60,9340,-60,9280~ ** Processing line: ~ -60,9120,-60,9280~ ** Processing line: ~ -60,8940,-60,9120~ ** Processing line: ~ -60,8940,-60,8780~ ** Processing line: ~ -60,8780,0,8700~ ** Processing line: ~ 0,8700,40,8680~ ** Processing line: ~ 40,8680,240,8700~ ** Processing line: ~ 240,8700,360,8780~ ** Processing line: ~ 360,8780,640,8840~ ** Processing line: ~ 1420,8400,1540,8480~ ** Processing line: ~ 1540,8480,1680,8500~ ** Processing line: ~ 1680,8500,1940,8460~ ** Processing line: ~ 1180,8840,1280,8880~ ** Processing line: ~ 1280,8880,1340,8860~ ** Processing line: ~ 1340,8860,1720,8860~ ** Processing line: ~ 1720,8860,1820,8920~ ** Processing line: ~ 1820,8920,1820,9140~ ** Processing line: ~ 1820,9140,1820,9280~ ** Processing line: ~ 1820,9460,1820,9280~ ** Processing line: ~ 1760,9480,1820,9460~ ** Processing line: ~ 1640,9480,1760,9480~ ** Processing line: ~ 1540,9500,1640,9480~ ** Processing line: ~ 1340,9500,1540,9500~ ** Processing line: ~ 1100,9500,1340,9500~ ** Processing line: ~ 1040,9540,1100,9500~ ** Processing line: ~ 960,9540,1040,9540~ ** Processing line: ~ 300,9420,360,9460~ ** Processing line: ~ 240,9440,300,9420~ ** Processing line: ~ 180,9600,240,9440~ ** Processing line: ~ 120,9660,180,9600~ ** Processing line: ~ 100,9820,120,9660~ ** Processing line: ~ 100,9820,120,9860~ ** Processing line: ~ 120,9860,140,9900~ ** Processing line: ~ 140,9900,140,10000~ ** Processing line: ~ 140,10440,180,10540~ ** Processing line: ~ 100,10080,140,10000~ ** Processing line: ~ 100,10080,140,10100~ ** Processing line: ~ 140,10100,140,10440~ ** Processing line: ~ 180,10540,300,10560~ ** Processing line: ~ 2140,9560,2140,9640~ ** Processing line: ~ 2140,9720,2140,9640~ ** Processing line: ~ 1880,9780,2140,9720~ ** Processing line: ~ 1720,9780,1880,9780~ ** Processing line: ~ 1620,9740,1720,9780~ ** Processing line: ~ 1500,9780,1620,9740~ ** Processing line: ~ 1380,9780,1500,9780~ ** Processing line: ~ 1340,9820,1380,9780~ ** Processing line: ~ 1200,9820,1340,9820~ ** Processing line: ~ 1100,9780,1200,9820~ ** Processing line: ~ 900,9780,1100,9780~ ** Processing line: ~ 820,9720,900,9780~ ** Processing line: ~ 540,9720,820,9720~ ** Processing line: ~ 360,9840,540,9720~ ** Processing line: ~ 360,9840,360,9960~ ** Processing line: ~ 360,9960,360,10080~ ** Processing line: ~ 360,10140,360,10080~ ** Processing line: ~ 360,10140,360,10240~ ** Processing line: ~ 360,10240,420,10320~ ** Processing line: ~ 700,10300,820,10280~ ** Processing line: ~ 820,10280,820,10280~ ** Processing line: ~ 820,10280,900,10320~ ** Processing line: ~ 900,10320,1040,10300~ ** Processing line: ~ 1040,10300,1200,10320~ ** Processing line: ~ 1200,10320,1380,10280~ ** Processing line: ~ 1380,10280,1500,10300~ ** Processing line: ~ 1500,10300,1760,10300~ ** Processing line: ~ 2800,10620,2840,10600~ ** Processing line: ~ 2840,10600,2900,10600~ ** Processing line: ~ 2900,10600,3000,10620~ ** Processing line: ~ 3000,10620,3080,10620~ ** Processing line: ~ 3080,10620,3140,10600~ ** Processing line: ~ 3140,10540,3140,10600~ ** Processing line: ~ 3140,10540,3140,10460~ ** Processing line: ~ 3140,10460,3140,10360~ ** Processing line: ~ 3140,10360,3140,10260~ ** Processing line: ~ 3140,10260,3140,10140~ ** Processing line: ~ 3140,10140,3140,10000~ ** Processing line: ~ 3140,10000,3140,9860~ ** Processing line: ~ 3140,9860,3160,9720~ ** Processing line: ~ 3160,9720,3160,9580~ ** Processing line: ~ 3160,9580,3160,9440~ ** Processing line: ~ 3160,9300,3160,9440~ ** Processing line: ~ 3160,9300,3160,9140~ ** Processing line: ~ 3160,9140,3160,8980~ ** Processing line: ~ 3160,8980,3160,8820~ ** Processing line: ~ 3160,8820,3160,8680~ ** Processing line: ~ 3160,8680,3160,8520~ ** Processing line: ~ 1760,10300,1880,10300~ ** Processing line: ~ 660,9500,960,9540~ ** Processing line: ~ 640,9460,660,9500~ ** Processing line: ~ 360,9460,640,9460~ ** Processing line: ~ -480,10760,-440,10880~ ** Processing line: ~ -480,11020,-440,10880~ ** Processing line: ~ -480,11160,-260,11240~ ** Processing line: ~ -480,11020,-480,11160~ ** Processing line: ~ -600,11420,-380,11320~ ** Processing line: ~ -380,11320,-200,11340~ ** Processing line: ~ -200,11340,0,11340~ ** Processing line: ~ 0,11340,180,11340~ ** Processing line: ~ 960,13420,960,13300~ ** Processing line: ~ 960,13420,960,13520~ ** Processing line: ~ 960,13520,1000,13560~ ** Processing line: ~ 1000,13560,1040,13540~ ** Processing line: ~ 1040,13540,1200,13440~ ** Processing line: ~ 1200,13440,1380,13380~ ** Processing line: ~ 1380,13380,1620,13300~ ** Processing line: ~ 1620,13300,1820,13220~ ** Processing line: ~ 1820,13220,2000,13200~ ** Processing line: ~ 2000,13200,2240,13200~ ** Processing line: ~ 2240,13200,2440,13160~ ** Processing line: ~ 2440,13160,2640,13040~ ** Processing line: ~ -480,10760,-440,10620~ ** Processing line: ~ -440,10620,-360,10560~ ** Processing line: ~ -380,10460,-360,10560~ ** Processing line: ~ -380,10460,-360,10300~ ** Processing line: ~ -380,10140,-360,10300~ ** Processing line: ~ -380,10140,-380,10040~ ** Processing line: ~ -380,9880,-380,10040~ ** Processing line: ~ -380,9720,-380,9880~ ** Processing line: ~ -380,9720,-380,9540~ ** Processing line: ~ -380,9360,-380,9540~ ** Processing line: ~ -380,9180,-380,9360~ ** Processing line: ~ -380,9180,-380,9000~ ** Processing line: ~ -380,8840,-380,9000~ ** Processing line: ~ -380,8840,-380,8760~ ** Processing line: ~ -380,8760,-380,8620~ ** Processing line: ~ -380,8620,-380,8520~ ** Processing line: ~ -380,8520,-360,8400~ ** Processing line: ~ -360,8400,-100,8400~ ** Processing line: ~ -100,8400,-60,8420~ ** Processing line: ~ -60,8420,240,8440~ ** Processing line: ~ 240,8440,240,8380~ ** Processing line: ~ 240,8380,500,8440~ ** Processing line: ~ 500,8440,760,8460~ ** Processing line: ~ 760,8460,1000,8400~ ** Processing line: ~ 1000,8400,1180,8420~ ** Processing line: ~ 1180,8420,1420,8400~ ** Processing line: ~ 1940,8460,2140,8420~ ** Processing line: ~ 2140,8420,2200,8520~ ** Processing line: ~ 2200,8680,2200,8520~ ** Processing line: ~ 2140,8840,2200,8680~ ** Processing line: ~ 2140,8840,2140,9020~ ** Processing line: ~ 2140,9100,2140,9020~ ** Processing line: ~ 2140,9200,2140,9100~ ** Processing line: ~ 2140,9200,2200,9320~ ** Processing line: ~ 2200,9320,2200,9440~ ** Processing line: ~ 2140,9560,2200,9440~ ** Processing line: ~ 1880,10300,2200,10280~ ** Processing line: ~ 2200,10280,2480,10260~ ** Processing line: ~ 2480,10260,2700,10240~ ** Processing line: ~ 2700,10240,2840,10180~ ** Processing line: ~ 2840,10180,2900,10060~ ** Processing line: ~ 2900,9860,2900,10060~ ** Processing line: ~ 2900,9640,2900,9860~ ** Processing line: ~ 2900,9640,2900,9500~ ** Processing line: ~ 2900,9460,2900,9500~ ** Processing line: ~ 2740,9460,2900,9460~ ** Processing line: ~ 2700,9460,2740,9460~ ** Processing line: ~ 2700,9360,2700,9460~ ** Processing line: ~ 2700,9320,2700,9360~ ** Processing line: ~ 2600,9320,2700,9320~ ** Processing line: ~ 2600,9260,2600,9320~ ** Processing line: ~ 2600,9200,2600,9260~ ** Processing line: ~ 2480,9120,2600,9200~ ** Processing line: ~ 2440,9080,2480,9120~ ** Processing line: ~ 2380,9080,2440,9080~ ** Processing line: ~ 2320,9060,2380,9080~ ** Processing line: ~ 2320,8860,2320,9060~ ** Processing line: ~ 2320,8860,2380,8840~ ** Processing line: ~ 2380,8840,2480,8860~ ** Processing line: ~ 2480,8860,2600,8840~ ** Processing line: ~ 2600,8840,2740,8840~ ** Processing line: ~ 2740,8840,2840,8800~ ** Processing line: ~ 2840,8800,2900,8700~ ** Processing line: ~ 2900,8600,2900,8700~ ** Processing line: ~ 2900,8480,2900,8600~ ** Processing line: ~ 2900,8380,2900,8480~ ** Processing line: ~ 2900,8380,2900,8260~ ** Processing line: ~ 2900,8260,2900,8140~ ** Processing line: ~ 2900,8140,2900,8020~ ** Processing line: ~ 2900,8020,2900,7900~ ** Processing line: ~ 2900,7820,2900,7900~ ** Processing line: ~ 2900,7820,2900,7740~ ** Processing line: ~ 2900,7660,2900,7740~ ** Processing line: ~ 2900,7560,2900,7660~ ** Processing line: ~ 2900,7460,2900,7560~ ** Processing line: ~ 2900,7460,2900,7360~ ** Processing line: ~ 2900,7260,2900,7360~ ** Processing line: ~ 2840,7160,2900,7260~ ** Processing line: ~ 2800,7080,2840,7160~ ** Processing line: ~ 2700,7100,2800,7080~ ** Processing line: ~ 2560,7120,2700,7100~ ** Processing line: ~ 2400,7100,2560,7120~ ** Processing line: ~ 2320,7100,2400,7100~ ** Processing line: ~ 2140,7100,2320,7100~ ** Processing line: ~ 2040,7080,2140,7100~ ** Processing line: ~ 1940,7080,2040,7080~ ** Processing line: ~ 1820,7140,1940,7080~ ** Processing line: ~ 1680,7140,1820,7140~ ** Processing line: ~ 1540,7140,1680,7140~ ** Processing line: ~ 1420,7220,1540,7140~ ** Processing line: ~ 1280,7220,1380,7220~ ** Processing line: ~ 1140,7200,1280,7220~ ** Processing line: ~ 1000,7220,1140,7200~ ** Processing line: ~ 760,7280,900,7320~ ** Processing line: ~ 540,7220,760,7280~ ** Processing line: ~ 300,7180,540,7220~ ** Processing line: ~ 180,7120,180,7160~ ** Processing line: ~ 40,7140,180,7120~ ** Processing line: ~ -60,7160,40,7140~ ** Processing line: ~ -200,7120,-60,7160~ ** Processing line: ~ 180,7160,300,7180~ ** Processing line: ~ -260,7060,-200,7120~ ** Processing line: ~ -260,6980,-260,7060~ ** Processing line: ~ -260,6880,-260,6980~ ** Processing line: ~ -260,6880,-260,6820~ ** Processing line: ~ -260,6820,-200,6760~ ** Processing line: ~ -200,6760,-100,6740~ ** Processing line: ~ -100,6740,-60,6740~ ** Processing line: ~ -60,6740,40,6740~ ** Processing line: ~ 40,6740,300,6800~ ** Processing line: ~ 300,6800,420,6760~ ** Processing line: ~ 420,6760,500,6740~ ** Processing line: ~ 500,6740,540,6760~ ** Processing line: ~ 540,6760,540,6760~ ** Processing line: ~ 540,6760,640,6780~ ** Processing line: ~ 640,6660,640,6780~ ** Processing line: ~ 580,6580,640,6660~ ** Processing line: ~ 580,6440,580,6580~ ** Processing line: ~ 580,6440,640,6320~ ** Processing line: ~ 640,6320,640,6180~ ** Processing line: ~ 580,6080,640,6180~ ** Processing line: ~ 580,6080,640,5960~ ** Processing line: ~ 640,5960,640,5840~ ** Processing line: ~ 640,5840,640,5700~ ** Processing line: ~ 640,5700,660,5560~ ** Processing line: ~ 660,5560,660,5440~ ** Processing line: ~ 660,5440,660,5300~ ** Processing line: ~ 660,5140,660,5300~ ** Processing line: ~ 660,5140,660,5000~ ** Processing line: ~ 660,5000,660,4880~ ** Processing line: ~ 660,4880,820,4860~ ** Processing line: ~ 820,4860,1000,4840~ ** Processing line: ~ 1000,4840,1100,4860~ ** Processing line: ~ 1100,4860,1280,4860~ ** Processing line: ~ 1280,4860,1420,4840~ ** Processing line: ~ 1420,4840,1580,4860~ ** Processing line: ~ 1580,4860,1720,4820~ ** Processing line: ~ 1720,4820,1880,4860~ ** Processing line: ~ 1880,4860,2000,4840~ ** Processing line: ~ 2000,4840,2140,4840~ ** Processing line: ~ 2140,4840,2320,4860~ ** Processing line: ~ 2320,4860,2440,4880~ ** Processing line: ~ 2440,4880,2600,4880~ ** Processing line: ~ 2600,4880,2800,4880~ ** Processing line: ~ 2800,4880,2900,4880~ ** Processing line: ~ 2900,4880,2900,4820~ ** Processing line: ~ 2900,4740,2900,4820~ ** Processing line: ~ 2800,4700,2900,4740~ ** Processing line: ~ 2520,4680,2800,4700~ ** Processing line: ~ 2240,4660,2520,4680~ ** Processing line: ~ 1940,4620,2240,4660~ ** Processing line: ~ 1820,4580,1940,4620~ ** Processing line: ~ 1820,4500,1820,4580~ ** Processing line: ~ 1820,4500,1880,4420~ ** Processing line: ~ 1880,4420,2000,4420~ ** Processing line: ~ 2000,4420,2200,4420~ ** Processing line: ~ 2200,4420,2400,4440~ ** Processing line: ~ 2400,4440,2600,4440~ ** Processing line: ~ 2600,4440,2840,4440~ ** Processing line: ~ 2840,4440,2900,4400~ ** Processing line: ~ 2740,4260,2900,4280~ ** Processing line: ~ 2600,4240,2740,4260~ ** Processing line: ~ 2480,4280,2600,4240~ ** Processing line: ~ 2320,4240,2480,4280~ ** Processing line: ~ 2140,4220,2320,4240~ ** Processing line: ~ 1940,4220,2140,4220~ ** Processing line: ~ 1880,4160,1940,4220~ ** Processing line: ~ 1880,4160,1880,4080~ ** Processing line: ~ 1880,4080,2040,4040~ ** Processing line: ~ 2040,4040,2240,4060~ ** Processing line: ~ 2240,4060,2400,4040~ ** Processing line: ~ 2400,4040,2600,4060~ ** Processing line: ~ 2600,4060,2740,4020~ ** Processing line: ~ 2740,4020,2840,3940~ ** Processing line: ~ 2840,3780,2840,3940~ ** Processing line: ~ 2740,3660,2840,3780~ ** Processing line: ~ 2700,3680,2740,3660~ ** Processing line: ~ 2520,3700,2700,3680~ ** Processing line: ~ 2380,3700,2520,3700~ ** Processing line: ~ 2200,3720,2380,3700~ ** Processing line: ~ 2040,3720,2200,3720~ ** Processing line: ~ 1880,3700,2040,3720~ ** Processing line: ~ 1820,3680,1880,3700~ ** Processing line: ~ 1760,3600,1820,3680~ ** Processing line: ~ 1760,3600,1820,3480~ ** Processing line: ~ 1820,3480,1880,3440~ ** Processing line: ~ 1880,3440,1960,3460~ ** Processing line: ~ 1960,3460,2140,3460~ ** Processing line: ~ 2140,3460,2380,3460~ ** Processing line: ~ 2380,3460,2640,3440~ ** Processing line: ~ 2640,3440,2900,3380~ ** Processing line: ~ 2840,3280,2900,3380~ ** Processing line: ~ 2840,3280,2900,3200~ ** Processing line: ~ 2900,3200,2900,3140~ ** Processing line: ~ 2840,3020,2900,3140~ ** Processing line: ~ 2800,2960,2840,3020~ ** Processing line: ~ 2700,3000,2800,2960~ ** Processing line: ~ 2600,2980,2700,3000~ ** Processing line: ~ 2380,3000,2600,2980~ ** Processing line: ~ 2140,3000,2380,3000~ ** Processing line: ~ 1880,3000,2140,3000~ ** Processing line: ~ 1720,3040,1880,3000~ ** Processing line: ~ 1640,2960,1720,3040~ ** Processing line: ~ 1500,2940,1640,2960~ ** Processing line: ~ 1340,3000,1500,2940~ ** Processing line: ~ 1240,3000,1340,3000~ ** Processing line: ~ 1140,3020,1240,3000~ ** Processing line: ~ 1040,3000,1140,3020~ ** Processing line: ~ 960,2960,1040,3000~ ** Processing line: ~ 900,2960,960,2960~ ** Processing line: ~ 840,2840,900,2960~ ** Processing line: ~ 700,2820,840,2840~ ** Processing line: ~ 540,2820,700,2820~ ** Processing line: ~ 420,2820,540,2820~ ** Processing line: ~ 180,2800,420,2820~ ** Processing line: ~ 60,2780,180,2800~ ** Processing line: ~ -60,2800,60,2780~ ** Processing line: ~ -160,2760,-60,2800~ ** Processing line: ~ -260,2740,-160,2760~ ** Processing line: ~ -300,2640,-260,2740~ ** Processing line: ~ -360,2560,-300,2640~ ** Processing line: ~ -380,2460,-360,2560~ ** Processing line: ~ -380,2460,-300,2380~ ** Processing line: ~ -300,2300,-300,2380~ ** Processing line: ~ -300,2300,-300,2220~ ** Processing line: ~ -300,2100,-300,2220~ ** Processing line: ~ -300,2100,-300,2040~ ** Processing line: ~ -300,2040,-160,2040~ ** Processing line: ~ -160,2040,-60,2040~ ** Processing line: ~ -60,2040,60,2040~ ** Processing line: ~ 60,2040,180,2040~ ** Processing line: ~ 180,2040,360,2040~ ** Processing line: ~ 360,2040,540,2040~ ** Processing line: ~ 540,2040,700,2080~ ** Processing line: ~ 660,2160,700,2080~ ** Processing line: ~ 660,2160,700,2260~ ** Processing line: ~ 660,2380,700,2260~ ** Processing line: ~ 500,2340,660,2380~ ** Processing line: ~ 360,2340,500,2340~ ** Processing line: ~ 240,2340,360,2340~ ** Processing line: ~ 40,2320,240,2340~ ** Processing line: ~ -60,2320,40,2320~ ** Processing line: ~ -100,2380,-60,2320~ ** Processing line: ~ -100,2380,-100,2460~ ** Processing line: ~ -100,2460,-100,2540~ ** Processing line: ~ -100,2540,0,2560~ ** Processing line: ~ 0,2560,140,2600~ ** Processing line: ~ 140,2600,300,2600~ ** Processing line: ~ 300,2600,460,2600~ ** Processing line: ~ 460,2600,640,2600~ ** Processing line: ~ 640,2600,760,2580~ ** Processing line: ~ 760,2580,820,2560~ ** Processing line: ~ 820,2560,820,2500~ ** Processing line: ~ 820,2500,820,2400~ ** Processing line: ~ 820,2400,840,2320~ ** Processing line: ~ 840,2320,840,2240~ ** Processing line: ~ 820,2120,840,2240~ ** Processing line: ~ 820,2020,820,2120~ ** Processing line: ~ 820,1900,820,2020~ ** Processing line: ~ 760,1840,820,1900~ ** Processing line: ~ 640,1840,760,1840~ ** Processing line: ~ 500,1840,640,1840~ ** Processing line: ~ 300,1860,420,1880~ ** Processing line: ~ 180,1840,300,1860~ ** Processing line: ~ 420,1880,500,1840~ ** Processing line: ~ 0,1840,180,1840~ ** Processing line: ~ -60,1860,0,1840~ ** Processing line: ~ -160,1840,-60,1860~ ** Processing line: ~ -200,1800,-160,1840~ ** Processing line: ~ -260,1760,-200,1800~ ** Processing line: ~ -260,1680,-260,1760~ ** Processing line: ~ -260,1620,-260,1680~ ** Processing line: ~ -260,1540,-260,1620~ ** Processing line: ~ -260,1540,-260,1460~ ** Processing line: ~ -300,1420,-260,1460~ ** Processing line: ~ -300,1420,-300,1340~ ** Processing line: ~ -300,1340,-260,1260~ ** Processing line: ~ -260,1260,-260,1160~ ** Processing line: ~ -260,1060,-260,1160~ ** Processing line: ~ -260,1060,-260,960~ ** Processing line: ~ -260,880,-260,960~ ** Processing line: ~ -260,880,-260,780~ ** Processing line: ~ -260,780,-260,680~ ** Processing line: ~ -300,580,-260,680~ ** Processing line: ~ -300,580,-300,480~ ** Processing line: ~ -300,480,-260,400~ ** Processing line: ~ -300,320,-260,400~ ** Processing line: ~ -300,320,-300,240~ ** Processing line: ~ -300,240,-200,220~ ** Processing line: ~ -200,220,-200,160~ ** Processing line: ~ -200,160,-100,140~ ** Processing line: ~ -100,140,0,120~ ** Processing line: ~ 0,120,60,120~ ** Processing line: ~ 60,120,180,120~ ** Processing line: ~ 180,120,300,120~ ** Processing line: ~ 300,120,420,140~ ** Processing line: ~ 420,140,580,180~ ** Processing line: ~ 580,180,760,180~ ** Processing line: ~ 760,180,900,180~ ** Processing line: ~ 960,180,1100,180~ ** Processing line: ~ 1100,180,1340,200~ ** Processing line: ~ 1340,200,1580,200~ ** Processing line: ~ 1580,200,1720,180~ ** Processing line: ~ 1720,180,2000,140~ ** Processing line: ~ 2000,140,2240,140~ ** Processing line: ~ 2240,140,2480,140~ ** Processing line: ~ 2520,140,2800,160~ ** Processing line: ~ 2800,160,3000,160~ ** Processing line: ~ 3000,160,3140,160~ ** Processing line: ~ 3140,260,3140,160~ ** Processing line: ~ 3140,260,3140,380~ ** Processing line: ~ 3080,500,3140,380~ ** Processing line: ~ 3080,620,3080,500~ ** Processing line: ~ 3080,620,3080,740~ ** Processing line: ~ 3080,740,3080,840~ ** Processing line: ~ 3080,960,3080,840~ ** Processing line: ~ 3080,1080,3080,960~ ** Processing line: ~ 3080,1080,3080,1200~ ** Processing line: ~ 3080,1200,3080,1340~ ** Processing line: ~ 3080,1340,3080,1460~ ** Processing line: ~ 3080,1580,3080,1460~ ** Processing line: ~ 3080,1700,3080,1580~ ** Processing line: ~ 3080,1700,3080,1760~ ** Processing line: ~ 3080,1760,3200,1760~ ** Processing line: ~ 3200,1760,3320,1760~ ** Processing line: ~ 3320,1760,3520,1760~ ** Processing line: ~ 3520,1760,3680,1740~ ** Processing line: ~ 3680,1740,3780,1700~ ** Processing line: ~ 3780,1700,3840,1620~ ** Processing line: ~ 3840,1620,3840,1520~ ** Processing line: ~ 3840,1520,3840,1420~ ** Processing line: ~ 3840,1320,3840,1420~ ** Processing line: ~ 3840,1120,3840,1320~ ** Processing line: ~ 3840,1120,3840,940~ ** Processing line: ~ 3840,940,3840,760~ ** Processing line: ~ 3780,600,3840,760~ ** Processing line: ~ 3780,600,3780,440~ ** Processing line: ~ 3780,320,3780,440~ ** Processing line: ~ 3780,320,3780,160~ ** Processing line: ~ 3780,60,3780,160~ ** Processing line: ~ 3780,60,4020,60~ ** Processing line: ~ 4020,60,4260,40~ ** Processing line: ~ 4260,40,4500,40~ ** Processing line: ~ 4500,40,4740,40~ ** Processing line: ~ 4740,40,4840,20~ ** Processing line: ~ 4840,20,4880,80~ ** Processing line: ~ 4880,80,5080,40~ ** Processing line: ~ 5080,40,5280,20~ ** Processing line: ~ 5280,20,5500,0~ ** Processing line: ~ 5500,0,5720,0~ ** Processing line: ~ 5720,0,5940,60~ ** Processing line: ~ 5940,60,6240,60~ ** Processing line: ~ 6240,60,6540,20~ ** Processing line: ~ 6540,20,6840,20~ ** Processing line: ~ 6840,20,7040,0~ ** Processing line: ~ 7040,0,7140,0~ ** Processing line: ~ 7140,0,7400,20~ ** Processing line: ~ 7400,20,7680,0~ ** Processing line: ~ 7680,0,7940,0~ ** Processing line: ~ 7940,0,8200,-20~ ** Processing line: ~ 8200,-20,8360,20~ ** Processing line: ~ 8360,20,8560,-40~ ** Processing line: ~ 8560,-40,8760,0~ ** Processing line: ~ 8760,0,8880,40~ ** Processing line: ~ 8880,120,8880,40~ ** Processing line: ~ 8840,220,8840,120~ ** Processing line: ~ 8620,240,8840,220~ ** Processing line: ~ 8420,260,8620,240~ ** Processing line: ~ 8200,280,8420,260~ ** Processing line: ~ 7940,280,8200,280~ ** Processing line: ~ 7760,240,7940,280~ ** Processing line: ~ 7560,220,7760,240~ ** Processing line: ~ 7360,280,7560,220~ ** Processing line: ~ 7140,260,7360,280~ ** Processing line: ~ 6940,240,7140,260~ ** Processing line: ~ 6720,220,6940,240~ ** Processing line: ~ 6480,220,6720,220~ ** Processing line: ~ 6360,300,6480,220~ ** Processing line: ~ 6240,300,6360,300~ ** Processing line: ~ 6200,500,6240,300~ ** Processing line: ~ 6200,500,6360,540~ ** Processing line: ~ 6360,540,6540,520~ ** Processing line: ~ 6540,520,6720,480~ ** Processing line: ~ 6720,480,6880,460~ ** Processing line: ~ 6880,460,7080,500~ ** Processing line: ~ 7080,500,7320,500~ ** Processing line: ~ 7320,500,7680,500~ ** Processing line: ~ 7680,620,7680,500~ ** Processing line: ~ 7520,640,7680,620~ ** Processing line: ~ 7360,640,7520,640~ ** Processing line: ~ 7200,640,7360,640~ ** Processing line: ~ 7040,660,7200,640~ ** Processing line: ~ 6880,720,7040,660~ ** Processing line: ~ 6720,700,6880,720~ ** Processing line: ~ 6540,700,6720,700~ ** Processing line: ~ 6420,760,6540,700~ ** Processing line: ~ 6280,740,6420,760~ ** Processing line: ~ 6240,760,6280,740~ ** Processing line: ~ 6200,920,6240,760~ ** Processing line: ~ 6200,920,6360,960~ ** Processing line: ~ 6360,960,6540,960~ ** Processing line: ~ 6540,960,6720,960~ ** Processing line: ~ 6720,960,6760,980~ ** Processing line: ~ 6760,980,6880,940~ ** Processing line: ~ 6880,940,7080,940~ ** Processing line: ~ 7080,940,7280,940~ ** Processing line: ~ 7280,940,7520,920~ ** Processing line: ~ 7520,920,7760,900~ ** Processing line: ~ 7760,900,7980,860~ ** Processing line: ~ 7980,860,8100,880~ ** Processing line: ~ 8100,880,8280,900~ ** Processing line: ~ 8280,900,8500,820~ ** Processing line: ~ 8500,820,8700,820~ ** Processing line: ~ 8700,820,8760,840~ ** Processing line: ~ 8760,960,8760,840~ ** Processing line: ~ 8700,1040,8760,960~ ** Processing line: ~ 8560,1060,8700,1040~ ** Processing line: ~ 8460,1080,8560,1060~ ** Processing line: ~ 8360,1040,8460,1080~ ** Processing line: ~ 8280,1080,8360,1040~ ** Processing line: ~ 8160,1120,8280,1080~ ** Processing line: ~ 8040,1120,8160,1120~ ** Processing line: ~ 7940,1100,8040,1120~ ** Processing line: ~ 7800,1120,7940,1100~ ** Processing line: ~ 7680,1120,7800,1120~ ** Processing line: ~ 7520,1100,7680,1120~ ** Processing line: ~ 7360,1100,7520,1100~ ** Processing line: ~ 7200,1120,7360,1100~ ** Processing line: ~ 7040,1180,7200,1120~ ** Processing line: ~ 6880,1160,7040,1180~ ** Processing line: ~ 6720,1160,6880,1160~ ** Processing line: ~ 6540,1160,6720,1160~ ** Processing line: ~ 6360,1160,6540,1160~ ** Processing line: ~ 6200,1160,6360,1160~ ** Processing line: ~ 6040,1220,6200,1160~ ** Processing line: ~ 6040,1220,6040,1400~ ** Processing line: ~ 6040,1400,6200,1440~ ** Processing line: ~ 6200,1440,6320,1440~ ** Processing line: ~ 6320,1440,6440,1440~ ** Processing line: ~ 6600,1440,6760,1440~ ** Processing line: ~ 6760,1440,6940,1420~ ** Processing line: ~ 6440,1440,6600,1440~ ** Processing line: ~ 6940,1420,7280,1400~ ** Processing line: ~ 7280,1400,7560,1400~ ** Processing line: ~ 7560,1400,7760,1400~ ** Processing line: ~ 7760,1400,7940,1360~ ** Processing line: ~ 7940,1360,8100,1380~ ** Processing line: ~ 8100,1380,8280,1340~ ** Processing line: ~ 8280,1340,8460,1320~ ** Processing line: ~ 8660,1300,8760,1360~ ** Processing line: ~ 8460,1320,8660,1300~ ** Processing line: ~ 8760,1360,8800,1500~ ** Processing line: ~ 8800,1660,8800,1500~ ** Processing line: ~ 8800,1660,8800,1820~ ** Processing line: ~ 8700,1840,8800,1820~ ** Processing line: ~ 8620,1860,8700,1840~ ** Processing line: ~ 8560,1800,8620,1860~ ** Processing line: ~ 8560,1800,8620,1680~ ** Processing line: ~ 8500,1640,8620,1680~ ** Processing line: ~ 8420,1680,8500,1640~ ** Processing line: ~ 8280,1680,8420,1680~ ** Processing line: ~ 8160,1680,8280,1680~ ** Processing line: ~ 7900,1680,8160,1680~ ** Processing line: ~ 7680,1680,7900,1680~ ** Processing line: ~ 7400,1660,7680,1680~ ** Processing line: ~ 7140,1680,7400,1660~ ** Processing line: ~ 6880,1640,7140,1680~ ** Processing line: ~ 6040,1820,6320,1780~ ** Processing line: ~ 5900,1840,6040,1820~ ** Processing line: ~ 6640,1700,6880,1640~ ** Processing line: ~ 6320,1780,6640,1700~ ** Processing line: ~ 5840,2040,5900,1840~ ** Processing line: ~ 5840,2040,5840,2220~ ** Processing line: ~ 5840,2220,5840,2320~ ** Processing line: ~ 5840,2460,5840,2320~ ** Processing line: ~ 5840,2560,5840,2460~ ** Processing line: ~ 5840,2560,5960,2620~ ** Processing line: ~ 5960,2620,6200,2620~ ** Processing line: ~ 6200,2620,6380,2600~ ** Processing line: ~ 6380,2600,6600,2580~ ** Processing line: ~ 6600,2580,6800,2600~ ** Processing line: ~ 6800,2600,7040,2580~ ** Processing line: ~ 7040,2580,7280,2580~ ** Processing line: ~ 7280,2580,7480,2560~ ** Processing line: ~ 7760,2540,7980,2520~ ** Processing line: ~ 7980,2520,8160,2500~ ** Processing line: ~ 7480,2560,7760,2540~ ** Processing line: ~ 8160,2500,8160,2420~ ** Processing line: ~ 8160,2420,8160,2320~ ** Processing line: ~ 8160,2180,8160,2320~ ** Processing line: ~ 7980,2160,8160,2180~ ** Processing line: ~ 7800,2180,7980,2160~ ** Processing line: ~ 7600,2200,7800,2180~ ** Processing line: ~ 7400,2200,7600,2200~ ** Processing line: ~ 6960,2200,7200,2200~ ** Processing line: ~ 7200,2200,7400,2200~ ** Processing line: ~ 6720,2200,6960,2200~ ** Processing line: ~ 6540,2180,6720,2200~ ** Processing line: ~ 6320,2200,6540,2180~ ** Processing line: ~ 6240,2160,6320,2200~ ** Processing line: ~ 6240,2160,6240,2040~ ** Processing line: ~ 6240,2040,6240,1940~ ** Processing line: ~ 6240,1940,6440,1940~ ** Processing line: ~ 6440,1940,6720,1940~ ** Processing line: ~ 6720,1940,6940,1920~ ** Processing line: ~ 7520,1920,7760,1920~ ** Processing line: ~ 6940,1920,7280,1920~ ** Processing line: ~ 7280,1920,7520,1920~ ** Processing line: ~ 7760,1920,8100,1900~ ** Processing line: ~ 8100,1900,8420,1900~ ** Processing line: ~ 8420,1900,8460,1940~ ** Processing line: ~ 8460,2120,8460,1940~ ** Processing line: ~ 8460,2280,8460,2120~ ** Processing line: ~ 8460,2280,8560,2420~ ** Processing line: ~ 8560,2420,8660,2380~ ** Processing line: ~ 8660,2380,8800,2340~ ** Processing line: ~ 8800,2340,8840,2400~ ** Processing line: ~ 8840,2520,8840,2400~ ** Processing line: ~ 8800,2620,8840,2520~ ** Processing line: ~ 8800,2740,8800,2620~ ** Processing line: ~ 8800,2860,8800,2740~ ** Processing line: ~ 8800,2940,8800,2860~ ** Processing line: ~ 8760,2980,8800,2940~ ** Processing line: ~ 8660,2980,8760,2980~ ** Processing line: ~ 8620,2960,8660,2980~ ** Processing line: ~ 8560,2880,8620,2960~ ** Processing line: ~ 8560,2880,8560,2780~ ** Processing line: ~ 8500,2740,8560,2780~ ** Processing line: ~ 8420,2760,8500,2740~ ** Processing line: ~ 8420,2840,8420,2760~ ** Processing line: ~ 8420,2840,8420,2940~ ** Processing line: ~ 8420,3040,8420,2940~ ** Processing line: ~ 8420,3160,8420,3040~ ** Processing line: ~ 8420,3280,8420,3380~ ** Processing line: ~ 8420,3280,8420,3160~ ** Processing line: ~ 8420,3380,8620,3460~ ** Processing line: ~ 8620,3460,8760,3460~ ** Processing line: ~ 8760,3460,8840,3400~ ** Processing line: ~ 8840,3400,8960,3400~ ** Processing line: ~ 8960,3400,9000,3500~ ** Processing line: ~ 9000,3700,9000,3500~ ** Processing line: ~ 9000,3900,9000,3700~ ** Processing line: ~ 9000,4080,9000,3900~ ** Processing line: ~ 9000,4280,9000,4080~ ** Processing line: ~ 9000,4500,9000,4280~ ** Processing line: ~ 9000,4620,9000,4500~ ** Processing line: ~ 9000,4780,9000,4620~ ** Processing line: ~ 9000,4780,9000,4960~ ** Processing line: ~ 9000,5120,9000,4960~ ** Processing line: ~ 9000,5120,9000,5300~ ** Processing line: ~ 8960,5460,9000,5300~ ** Processing line: ~ 8920,5620,8960,5460~ ** Processing line: ~ 8920,5620,8920,5800~ ** Processing line: ~ 8920,5800,8920,5960~ ** Processing line: ~ 8920,5960,8920,6120~ ** Processing line: ~ 8920,6120,8960,6300~ ** Processing line: ~ 8960,6300,8960,6480~ ** Processing line: ~ 8960,6660,8960,6480~ ** Processing line: ~ 8960,6860,8960,6660~ ** Processing line: ~ 8960,7040,8960,6860~ ** Processing line: ~ 8920,7420,8920,7220~ ** Processing line: ~ 8920,7420,8960,7620~ ** Processing line: ~ 8960,7620,8960,7800~ ** Processing line: ~ 8960,7800,8960,8000~ ** Processing line: ~ 8960,8000,8960,8180~ ** Processing line: ~ 8960,8180,8960,8380~ ** Processing line: ~ 8960,8580,8960,8380~ ** Processing line: ~ 8920,8800,8960,8580~ ** Processing line: ~ 8880,9000,8920,8800~ ** Processing line: ~ 8840,9180,8880,9000~ ** Processing line: ~ 8800,9220,8840,9180~ ** Processing line: ~ 8800,9220,8840,9340~ ** Processing line: ~ 8760,9380,8840,9340~ ** Processing line: ~ 8560,9340,8760,9380~ ** Processing line: ~ 8360,9360,8560,9340~ ** Processing line: ~ 8160,9360,8360,9360~ ** Processing line: ~ 8040,9340,8160,9360~ ** Processing line: ~ 7860,9360,8040,9340~ ** Processing line: ~ 7680,9360,7860,9360~ ** Processing line: ~ 7520,9360,7680,9360~ ** Processing line: ~ 7420,9260,7520,9360~ ** Processing line: ~ 7400,9080,7420,9260~ ** Processing line: ~ 7400,9080,7420,8860~ ** Processing line: ~ 7420,8860,7440,8720~ ** Processing line: ~ 7440,8720,7480,8660~ ** Processing line: ~ 7480,8660,7520,8540~ ** Processing line: ~ 7520,8540,7600,8460~ ** Processing line: ~ 7600,8460,7800,8480~ ** Processing line: ~ 7800,8480,8040,8480~ ** Processing line: ~ 8040,8480,8280,8480~ ** Processing line: ~ 8280,8480,8500,8460~ ** Processing line: ~ 8500,8460,8620,8440~ ** Processing line: ~ 8620,8440,8660,8340~ ** Processing line: ~ 8660,8340,8660,8220~ ** Processing line: ~ 8660,8220,8700,8080~ ** Processing line: ~ 8700,8080,8700,7920~ ** Processing line: ~ 8700,7920,8700,7760~ ** Processing line: ~ 8700,7760,8700,7620~ ** Processing line: ~ 8700,7480,8700,7620~ ** Processing line: ~ 8700,7480,8700,7320~ ** Processing line: ~ 8700,7160,8700,7320~ ** Processing line: ~ 8920,7220,8960,7040~ ** Processing line: ~ 8660,7040,8700,7160~ ** Processing line: ~ 8660,7040,8700,6880~ ** Processing line: ~ 8660,6700,8700,6880~ ** Processing line: ~ 8660,6700,8700,6580~ ** Processing line: ~ 8700,6460,8700,6580~ ** Processing line: ~ 8700,6460,8700,6320~ ** Processing line: ~ 8700,6160,8700,6320~ ** Processing line: ~ 8700,6160,8760,6020~ ** Processing line: ~ 8760,6020,8760,5860~ ** Processing line: ~ 8760,5860,8760,5700~ ** Processing line: ~ 8760,5700,8760,5540~ ** Processing line: ~ 8760,5540,8760,5360~ ** Processing line: ~ 8760,5360,8760,5180~ ** Processing line: ~ 8760,5000,8760,5180~ ** Processing line: ~ 8700,4820,8760,5000~ ** Processing line: ~ 8560,4740,8700,4820~ ** Processing line: ~ 8420,4700,8560,4740~ ** Processing line: ~ 8280,4700,8420,4700~ ** Processing line: ~ 8100,4700,8280,4700~ ** Processing line: ~ 7980,4700,8100,4700~ ** Processing line: ~ 7820,4740,7980,4700~ ** Processing line: ~ 7800,4920,7820,4740~ ** Processing line: ~ 7800,4920,7900,4960~ ** Processing line: ~ 7900,4960,8060,4980~ ** Processing line: ~ 8060,4980,8220,5000~ ** Processing line: ~ 8220,5000,8420,5040~ ** Processing line: ~ 8420,5040,8460,5120~ ** Processing line: ~ 8460,5180,8460,5120~ ** Processing line: ~ 8360,5200,8460,5180~ ** Processing line: ~ 8360,5280,8360,5200~ ** Processing line: ~ 8160,5300,8360,5280~ ** Processing line: ~ 8040,5260,8160,5300~ ** Processing line: ~ 7860,5220,8040,5260~ ** Processing line: ~ 7720,5160,7860,5220~ ** Processing line: ~ 7640,5120,7720,5160~ ** Processing line: ~ 7480,5120,7640,5120~ ** Processing line: ~ 7240,5120,7480,5120~ ** Processing line: ~ 7000,5120,7240,5120~ ** Processing line: ~ 6800,5160,7000,5120~ ** Processing line: ~ 6640,5220,6800,5160~ ** Processing line: ~ 6600,5360,6640,5220~ ** Processing line: ~ 6600,5460,6600,5360~ ** Processing line: ~ 6480,5520,6600,5460~ ** Processing line: ~ 6240,5540,6480,5520~ ** Processing line: ~ 5980,5540,6240,5540~ ** Processing line: ~ 5740,5540,5980,5540~ ** Processing line: ~ 5500,5520,5740,5540~ ** Processing line: ~ 5400,5520,5500,5520~ ** Processing line: ~ 5280,5540,5400,5520~ ** Processing line: ~ 5080,5540,5280,5540~ ** Processing line: ~ 4940,5540,5080,5540~ ** Processing line: ~ 4760,5540,4940,5540~ ** Processing line: ~ 4600,5540,4760,5540~ ** Processing line: ~ 4440,5560,4600,5540~ ** Processing line: ~ 4040,5580,4120,5520~ ** Processing line: ~ 4260,5540,4440,5560~ ** Processing line: ~ 4120,5520,4260,5540~ ** Processing line: ~ 4020,5720,4040,5580~ ** Processing line: ~ 4020,5840,4020,5720~ ** Processing line: ~ 4020,5840,4080,5940~ ** Processing line: ~ 4080,5940,4120,6040~ ** Processing line: ~ 4120,6040,4200,6080~ ** Processing line: ~ 4200,6080,4340,6080~ ** Processing line: ~ 4340,6080,4500,6060~ ** Processing line: ~ 4500,6060,4700,6060~ ** Processing line: ~ 4700,6060,4880,6060~ ** Processing line: ~ 4880,6060,5080,6060~ ** Processing line: ~ 5080,6060,5280,6080~ ** Processing line: ~ 5280,6080,5440,6100~ ** Processing line: ~ 5440,6100,5660,6100~ ** Processing line: ~ 5660,6100,5900,6080~ ** Processing line: ~ 5900,6080,6120,6080~ ** Processing line: ~ 6120,6080,6360,6080~ ** Processing line: ~ 6360,6080,6480,6100~ ** Processing line: ~ 6480,6100,6540,6060~ ** Processing line: ~ 6540,6060,6720,6060~ ** Processing line: ~ 6720,6060,6940,6060~ ** Processing line: ~ 6940,6060,7140,6060~ ** Processing line: ~ 7400,6060,7600,6060~ ** Processing line: ~ 7140,6060,7400,6060~ ** Processing line: ~ 7600,6060,7800,6060~ ** Processing line: ~ 7800,6060,7860,6080~ ** Processing line: ~ 7860,6080,8060,6080~ ** Processing line: ~ 8060,6080,8220,6080~ ** Processing line: ~ 8220,6080,8320,6140~ ** Processing line: ~ 8320,6140,8360,6300~ ** Processing line: ~ 8320,6460,8360,6300~ ** Processing line: ~ 8320,6620,8320,6460~ ** Processing line: ~ 8320,6800,8320,6620~ ** Processing line: ~ 8320,6960,8320,6800~ ** Processing line: ~ 8320,6960,8360,7120~ ** Processing line: ~ 8320,7280,8360,7120~ ** Processing line: ~ 8320,7440,8320,7280~ ** Processing line: ~ 8320,7600,8320,7440~ ** Processing line: ~ 8100,7580,8220,7600~ ** Processing line: ~ 8220,7600,8320,7600~ ** Processing line: ~ 7900,7560,8100,7580~ ** Processing line: ~ 7680,7560,7900,7560~ ** Processing line: ~ 7480,7580,7680,7560~ ** Processing line: ~ 7280,7580,7480,7580~ ** Processing line: ~ 7080,7580,7280,7580~ ** Processing line: ~ 7000,7600,7080,7580~ ** Processing line: ~ 6880,7600,7000,7600~ ** Processing line: ~ 6800,7580,6880,7600~ ** Processing line: ~ 6640,7580,6800,7580~ ** Processing line: ~ 6540,7580,6640,7580~ ** Processing line: ~ 6380,7600,6540,7580~ ** Processing line: ~ 6280,7620,6380,7600~ ** Processing line: ~ 6240,7700,6280,7620~ ** Processing line: ~ 6240,7700,6240,7800~ ** Processing line: ~ 6240,7840,6240,7800~ ** Processing line: ~ 6080,7840,6240,7840~ ** Processing line: ~ 5960,7820,6080,7840~ ** Processing line: ~ 5660,7840,5800,7840~ ** Processing line: ~ 5500,7800,5660,7840~ ** Processing line: ~ 5440,7700,5500,7800~ ** Processing line: ~ 5800,7840,5960,7820~ ** Processing line: ~ 5440,7540,5440,7700~ ** Processing line: ~ 5440,7440,5440,7540~ ** Processing line: ~ 5440,7320,5440,7440~ ** Processing line: ~ 5400,7320,5440,7320~ ** Processing line: ~ 5340,7400,5400,7320~ ** Processing line: ~ 5340,7400,5340,7500~ ** Processing line: ~ 5340,7600,5340,7500~ ** Processing line: ~ 5340,7600,5340,7720~ ** Processing line: ~ 5340,7720,5340,7860~ ** Processing line: ~ 5340,7860,5340,7960~ ** Processing line: ~ 5340,7960,5440,8020~ ** Processing line: ~ 5440,8020,5560,8020~ ** Processing line: ~ 5560,8020,5720,8040~ ** Processing line: ~ 5720,8040,5900,8060~ ** Processing line: ~ 5900,8060,6080,8060~ ** Processing line: ~ 6080,8060,6240,8060~ ** Processing line: ~ 6720,8040,6840,8060~ ** Processing line: ~ 6240,8060,6480,8040~ ** Processing line: ~ 6480,8040,6720,8040~ ** Processing line: ~ 6840,8060,6940,8060~ ** Processing line: ~ 6940,8060,7080,8120~ ** Processing line: ~ 7080,8120,7140,8180~ ** Processing line: ~ 7140,8460,7140,8320~ ** Processing line: ~ 7140,8620,7140,8460~ ** Processing line: ~ 7140,8620,7140,8740~ ** Processing line: ~ 7140,8860,7140,8740~ ** Processing line: ~ 7140,8960,7140,8860~ ** Processing line: ~ 7140,8960,7200,9080~ ** Processing line: ~ 7140,9200,7200,9080~ ** Processing line: ~ 7140,9200,7200,9320~ ** Processing line: ~ 7200,9320,7200,9460~ ** Processing line: ~ 7200,9760,7200,9900~ ** Processing line: ~ 7200,9620,7200,9460~ ** Processing line: ~ 7200,9620,7200,9760~ ** Processing line: ~ 7200,9900,7200,10060~ ** Processing line: ~ 7200,10220,7200,10060~ ** Processing line: ~ 7200,10360,7200,10220~ ** Processing line: ~ 7140,10400,7200,10360~ ** Processing line: ~ 6880,10400,7140,10400~ ** Processing line: ~ 6640,10360,6880,10400~ ** Processing line: ~ 6420,10360,6640,10360~ ** Processing line: ~ 6160,10380,6420,10360~ ** Processing line: ~ 5940,10340,6160,10380~ ** Processing line: ~ 5720,10320,5940,10340~ ** Processing line: ~ 5500,10340,5720,10320~ ** Processing line: ~ 5280,10300,5500,10340~ ** Processing line: ~ 5080,10300,5280,10300~ ** Processing line: ~ 4840,10280,5080,10300~ ** Processing line: ~ 4700,10280,4840,10280~ ** Processing line: ~ 4540,10280,4700,10280~ ** Processing line: ~ 4360,10280,4540,10280~ ** Processing line: ~ 4200,10300,4360,10280~ ** Processing line: ~ 4040,10380,4200,10300~ ** Processing line: ~ 4020,10500,4040,10380~ ** Processing line: ~ 3980,10640,4020,10500~ ** Processing line: ~ 3980,10640,3980,10760~ ** Processing line: ~ 3980,10760,4020,10920~ ** Processing line: ~ 4020,10920,4080,11000~ ** Processing line: ~ 4080,11000,4340,11020~ ** Processing line: ~ 4340,11020,4600,11060~ ** Processing line: ~ 4600,11060,4840,11040~ ** Processing line: ~ 4840,11040,4880,10960~ ** Processing line: ~ 4880,10740,4880,10960~ ** Processing line: ~ 4880,10740,4880,10600~ ** Processing line: ~ 4880,10600,5080,10560~ ** Processing line: ~ 5080,10560,5340,10620~ ** Processing line: ~ 5340,10620,5660,10620~ ** Processing line: ~ 5660,10620,6040,10600~ ** Processing line: ~ 6040,10600,6120,10620~ ** Processing line: ~ 6120,10620,6240,10720~ ** Processing line: ~ 6240,10720,6420,10740~ ** Processing line: ~ 6420,10740,6640,10760~ ** Processing line: ~ 6640,10760,6880,10780~ ** Processing line: ~ 7140,10780,7400,10780~ ** Processing line: ~ 6880,10780,7140,10780~ ** Processing line: ~ 7400,10780,7680,10780~ ** Processing line: ~ 7680,10780,8100,10760~ ** Processing line: ~ 8100,10760,8460,10740~ ** Processing line: ~ 8460,10740,8700,10760~ ** Processing line: ~ 8800,10840,8800,10980~ ** Processing line: ~ 8700,10760,8800,10840~ ** Processing line: ~ 8760,11200,8800,10980~ ** Processing line: ~ 8760,11200,8760,11380~ ** Processing line: ~ 8760,11380,8800,11560~ ** Processing line: ~ 8760,11680,8800,11560~ ** Processing line: ~ 8760,11760,8760,11680~ ** Processing line: ~ 8760,11760,8760,11920~ ** Processing line: ~ 8760,11920,8800,12080~ ** Processing line: ~ 8800,12200,8800,12080~ ** Processing line: ~ 8700,12240,8800,12200~ ** Processing line: ~ 8560,12220,8700,12240~ ** Processing line: ~ 8360,12220,8560,12220~ ** Processing line: ~ 8160,12240,8360,12220~ ** Processing line: ~ 7720,12220,7980,12220~ ** Processing line: ~ 7980,12220,8160,12240~ ** Processing line: ~ 7400,12200,7720,12220~ ** Processing line: ~ 7200,12180,7400,12200~ ** Processing line: ~ 7000,12160,7200,12180~ ** Processing line: ~ 6800,12160,7000,12160~ ** Processing line: ~ 6280,12140,6380,12180~ ** Processing line: ~ 6120,12180,6280,12140~ ** Processing line: ~ 6540,12180,6800,12160~ ** Processing line: ~ 6380,12180,6540,12180~ ** Processing line: ~ 5900,12200,6120,12180~ ** Processing line: ~ 5620,12180,5900,12200~ ** Processing line: ~ 5340,12120,5620,12180~ ** Processing line: ~ 5140,12100,5340,12120~ ** Processing line: ~ 4980,12120,5140,12100~ ** Processing line: ~ 4840,12120,4980,12120~ ** Processing line: ~ 4700,12200,4840,12120~ ** Processing line: ~ 4700,12380,4700,12200~ ** Processing line: ~ 4740,12480,4940,12520~ ** Processing line: ~ 4700,12380,4740,12480~ ** Processing line: ~ 4940,12520,5160,12560~ ** Processing line: ~ 5160,12560,5340,12600~ ** Processing line: ~ 5340,12600,5400,12600~ ** Processing line: ~ 5400,12600,5500,12600~ ** Processing line: ~ 5500,12600,5620,12600~ ** Processing line: ~ 5620,12600,5720,12560~ ** Processing line: ~ 5720,12560,5800,12440~ ** Processing line: ~ 5800,12440,5900,12380~ ** Processing line: ~ 5900,12380,6120,12420~ ** Processing line: ~ 6120,12420,6380,12440~ ** Processing line: ~ 6380,12440,6600,12460~ ** Processing line: ~ 6720,12460,6840,12520~ ** Processing line: ~ 6840,12520,6960,12520~ ** Processing line: ~ 6600,12460,6720,12460~ ** Processing line: ~ 6960,12520,7040,12500~ ** Processing line: ~ 7040,12500,7140,12440~ ** Processing line: ~ 7200,12440,7360,12500~ ** Processing line: ~ 7360,12500,7600,12560~ ** Processing line: ~ 7600,12560,7860,12600~ ** Processing line: ~ 7860,12600,8060,12500~ ** Processing line: ~ 8100,12500,8200,12340~ ** Processing line: ~ 8200,12340,8360,12360~ ** Processing line: ~ 8360,12360,8560,12400~ ** Processing line: ~ 8560,12400,8660,12420~ ** Processing line: ~ 8660,12420,8840,12400~ ** Processing line: ~ 8840,12400,9000,12360~ ** Processing line: ~ 9000,12360,9000,12360~ ** Processing line: ~ 2900,4400,2900,4280~ ** Processing line: ~ 900,7320,1000,7220~ ** Processing line: ~ 2640,13040,2900,12920~ ** Processing line: ~ 2900,12920,3160,12840~ ** Processing line: ~ 3480,12760,3780,12620~ ** Processing line: ~ 3780,12620,4020,12460~ ** Processing line: ~ 4300,12360,4440,12260~ ** Processing line: ~ 4020,12460,4300,12360~ ** Processing line: ~ 3160,12840,3480,12760~ ** Processing line: ~ 4440,12080,4440,12260~ ** Processing line: ~ 4440,12080,4440,11880~ ** Processing line: ~ 4440,11880,4440,11720~ ** Processing line: ~ 4440,11720,4600,11720~ ** Processing line: ~ 4600,11720,4760,11740~ ** Processing line: ~ 4760,11740,4980,11760~ ** Processing line: ~ 4980,11760,5160,11760~ ** Processing line: ~ 5160,11760,5340,11780~ ** Processing line: ~ 6000,11860,6120,11820~ ** Processing line: ~ 5340,11780,5620,11820~ ** Processing line: ~ 5620,11820,6000,11860~ ** Processing line: ~ 6120,11820,6360,11820~ ** Processing line: ~ 6360,11820,6640,11860~ ** Processing line: ~ 6940,11920,7240,11940~ ** Processing line: ~ 7240,11940,7520,11960~ ** Processing line: ~ 7520,11960,7860,11960~ ** Processing line: ~ 7860,11960,8100,11920~ ** Processing line: ~ 8100,11920,8420,11940~ ** Processing line: ~ 8420,11940,8460,11960~ ** Processing line: ~ 8460,11960,8500,11860~ ** Processing line: ~ 8460,11760,8500,11860~ ** Processing line: ~ 8320,11720,8460,11760~ ** Processing line: ~ 8160,11720,8320,11720~ ** Processing line: ~ 7940,11720,8160,11720~ ** Processing line: ~ 7720,11700,7940,11720~ ** Processing line: ~ 7520,11680,7720,11700~ ** Processing line: ~ 7320,11680,7520,11680~ ** Processing line: ~ 7200,11620,7320,11680~ ** Processing line: ~ 7200,11620,7200,11500~ ** Processing line: ~ 7200,11500,7280,11440~ ** Processing line: ~ 7280,11440,7420,11440~ ** Processing line: ~ 7420,11440,7600,11440~ ** Processing line: ~ 7600,11440,7980,11460~ ** Processing line: ~ 7980,11460,8160,11460~ ** Processing line: ~ 8160,11460,8360,11460~ ** Processing line: ~ 8360,11460,8460,11400~ ** Processing line: ~ 8420,11060,8500,11200~ ** Processing line: ~ 8280,11040,8420,11060~ ** Processing line: ~ 8100,11060,8280,11040~ ** Processing line: ~ 8460,11400,8500,11200~ ** Processing line: ~ 7800,11060,8100,11060~ ** Processing line: ~ 7520,11060,7800,11060~ ** Processing line: ~ 7240,11060,7520,11060~ ** Processing line: ~ 6940,11040,7240,11060~ ** Processing line: ~ 6640,11000,6940,11040~ ** Processing line: ~ 6420,10980,6640,11000~ ** Processing line: ~ 6360,11060,6420,10980~ ** Processing line: ~ 6360,11180,6360,11060~ ** Processing line: ~ 6200,11280,6360,11180~ ** Processing line: ~ 5960,11300,6200,11280~ ** Processing line: ~ 5720,11280,5960,11300~ ** Processing line: ~ 5500,11280,5720,11280~ ** Processing line: ~ 4940,11300,5200,11280~ ** Processing line: ~ 4660,11260,4940,11300~ ** Processing line: ~ 4440,11280,4660,11260~ ** Processing line: ~ 4260,11280,4440,11280~ ** Processing line: ~ 4220,11220,4260,11280~ ** Processing line: ~ 4080,11280,4220,11220~ ** Processing line: ~ 3980,11420,4080,11280~ ** Processing line: ~ 3980,11420,4040,11620~ ** Processing line: ~ 4040,11620,4040,11820~ ** Processing line: ~ 3980,11960,4040,11820~ ** Processing line: ~ 3840,12000,3980,11960~ ** Processing line: ~ 3720,11940,3840,12000~ ** Processing line: ~ 3680,11800,3720,11940~ ** Processing line: ~ 3680,11580,3680,11800~ ** Processing line: ~ 3680,11360,3680,11580~ ** Processing line: ~ 3680,11360,3680,11260~ ** Processing line: ~ 3680,11080,3680,11260~ ** Processing line: ~ 3680,11080,3680,10880~ ** Processing line: ~ 3680,10700,3680,10880~ ** Processing line: ~ 3680,10700,3680,10620~ ** Processing line: ~ 3680,10480,3680,10620~ ** Processing line: ~ 3680,10480,3680,10300~ ** Processing line: ~ 3680,10300,3680,10100~ ** Processing line: ~ 3680,10100,3680,9940~ ** Processing line: ~ 3680,9940,3720,9860~ ** Processing line: ~ 3720,9860,3920,9900~ ** Processing line: ~ 3920,9900,4220,9880~ ** Processing line: ~ 4980,9940,5340,9960~ ** Processing line: ~ 4220,9880,4540,9900~ ** Processing line: ~ 4540,9900,4980,9940~ ** Processing line: ~ 5340,9960,5620,9960~ ** Processing line: ~ 5620,9960,5900,9960~ ** Processing line: ~ 5900,9960,6160,10000~ ** Processing line: ~ 6160,10000,6480,10000~ ** Processing line: ~ 6480,10000,6720,10000~ ** Processing line: ~ 6720,10000,6880,9860~ ** Processing line: ~ 6880,9860,6880,9520~ ** Processing line: ~ 6880,9520,6940,9340~ ** Processing line: ~ 6940,9120,6940,9340~ ** Processing line: ~ 6940,9120,6940,8920~ ** Processing line: ~ 6940,8700,6940,8920~ ** Processing line: ~ 6880,8500,6940,8700~ ** Processing line: ~ 6880,8320,6880,8500~ ** Processing line: ~ 7140,8320,7140,8180~ ** Processing line: ~ 6760,8260,6880,8320~ ** Processing line: ~ 6540,8240,6760,8260~ ** Processing line: ~ 6420,8180,6540,8240~ ** Processing line: ~ 6280,8240,6420,8180~ ** Processing line: ~ 6160,8300,6280,8240~ ** Processing line: ~ 6120,8400,6160,8300~ ** Processing line: ~ 6080,8520,6120,8400~ ** Processing line: ~ 5840,8480,6080,8520~ ** Processing line: ~ 5620,8500,5840,8480~ ** Processing line: ~ 5500,8500,5620,8500~ ** Processing line: ~ 5340,8560,5500,8500~ ** Processing line: ~ 5160,8540,5340,8560~ ** Processing line: ~ 4620,8520,4880,8520~ ** Processing line: ~ 4360,8480,4620,8520~ ** Processing line: ~ 4880,8520,5160,8540~ ** Processing line: ~ 4140,8440,4360,8480~ ** Processing line: ~ 3920,8460,4140,8440~ ** Processing line: ~ 3720,8380,3920,8460~ ** Processing line: ~ 3680,8160,3720,8380~ ** Processing line: ~ 3680,8160,3720,7940~ ** Processing line: ~ 3720,7720,3720,7940~ ** Processing line: ~ 3680,7580,3720,7720~ ** Processing line: ~ 3680,7580,3720,7440~ ** Processing line: ~ 3720,7440,3720,7300~ ** Processing line: ~ 3720,7160,3720,7300~ ** Processing line: ~ 3720,7160,3720,7020~ ** Processing line: ~ 3720,7020,3780,6900~ ** Processing line: ~ 3780,6900,4080,6940~ ** Processing line: ~ 4080,6940,4340,6980~ ** Processing line: ~ 4340,6980,4600,6980~ ** Processing line: ~ 4600,6980,4880,6980~ ** Processing line: ~ 4880,6980,5160,6980~ ** Processing line: ~ 5160,6980,5400,7000~ ** Processing line: ~ 5400,7000,5560,7020~ ** Processing line: ~ 5560,7020,5660,7080~ ** Processing line: ~ 5660,7080,5660,7280~ ** Processing line: ~ 5660,7280,5660,7440~ ** Processing line: ~ 5660,7440,5740,7520~ ** Processing line: ~ 5740,7520,5740,7600~ ** Processing line: ~ 5740,7600,5900,7600~ ** Processing line: ~ 5900,7600,6040,7540~ ** Processing line: ~ 6040,7540,6040,7320~ ** Processing line: ~ 6040,7320,6120,7200~ ** Processing line: ~ 6120,7200,6120,7040~ ** Processing line: ~ 6120,7040,6240,7000~ ** Processing line: ~ 6240,7000,6480,7060~ ** Processing line: ~ 6480,7060,6800,7060~ ** Processing line: ~ 6800,7060,7080,7080~ ** Processing line: ~ 7080,7080,7320,7100~ ** Processing line: ~ 7940,7100,7980,6920~ ** Processing line: ~ 7860,6860,7980,6920~ ** Processing line: ~ 7640,6860,7860,6860~ ** Processing line: ~ 7400,6840,7640,6860~ ** Processing line: ~ 7320,7100,7560,7120~ ** Processing line: ~ 7560,7120,7760,7120~ ** Processing line: ~ 7760,7120,7940,7100~ ** Processing line: ~ 7200,6820,7400,6840~ ** Processing line: ~ 7040,6820,7200,6820~ ** Processing line: ~ 6600,6840,6840,6840~ ** Processing line: ~ 6380,6800,6600,6840~ ** Processing line: ~ 6120,6800,6380,6800~ ** Processing line: ~ 5900,6840,6120,6800~ ** Processing line: ~ 5620,6820,5900,6840~ ** Processing line: ~ 5400,6800,5620,6820~ ** Processing line: ~ 5140,6800,5400,6800~ ** Processing line: ~ 4880,6780,5140,6800~ ** Processing line: ~ 4600,6760,4880,6780~ ** Processing line: ~ 4340,6760,4600,6760~ ** Processing line: ~ 4080,6760,4340,6760~ ** Processing line: ~ 3840,6740,4080,6760~ ** Processing line: ~ 3680,6720,3840,6740~ ** Processing line: ~ 3680,6720,3680,6560~ ** Processing line: ~ 3680,6560,3720,6400~ ** Processing line: ~ 3720,6400,3720,6200~ ** Processing line: ~ 3720,6200,3780,6000~ ** Processing line: ~ 3720,5780,3780,6000~ ** Processing line: ~ 3720,5580,3720,5780~ ** Processing line: ~ 3720,5360,3720,5580~ ** Processing line: ~ 3720,5360,3840,5240~ ** Processing line: ~ 3840,5240,4200,5260~ ** Processing line: ~ 4200,5260,4600,5280~ ** Processing line: ~ 4600,5280,4880,5280~ ** Processing line: ~ 4880,5280,5140,5200~ ** Processing line: ~ 5140,5200,5220,5100~ ** Processing line: ~ 5220,5100,5280,4900~ ** Processing line: ~ 5280,4900,5340,4840~ ** Processing line: ~ 5340,4840,5720,4880~ ** Processing line: ~ 6120,4880,6480,4860~ ** Processing line: ~ 6880,4840,7200,4860~ ** Processing line: ~ 6480,4860,6880,4840~ ** Processing line: ~ 7200,4860,7320,4860~ ** Processing line: ~ 7320,4860,7360,4740~ ** Processing line: ~ 7360,4600,7440,4520~ ** Processing line: ~ 7360,4600,7360,4740~ ** Processing line: ~ 7440,4520,7640,4520~ ** Processing line: ~ 7640,4520,7800,4480~ ** Processing line: ~ 7800,4480,7800,4280~ ** Processing line: ~ 7800,4280,7800,4040~ ** Processing line: ~ 7800,4040,7800,3780~ ** Processing line: ~ 7800,3560,7800,3780~ ** Processing line: ~ 7800,3560,7860,3440~ ** Processing line: ~ 7860,3440,8060,3460~ ** Processing line: ~ 8060,3460,8160,3340~ ** Processing line: ~ 8160,3340,8160,3140~ ** Processing line: ~ 8160,3140,8160,2960~ ** Processing line: ~ 8000,2900,8160,2960~ ** Processing line: ~ 7860,2900,8000,2900~ ** Processing line: ~ 7640,2940,7860,2900~ ** Processing line: ~ 7400,2980,7640,2940~ ** Processing line: ~ 7100,2980,7400,2980~ ** Processing line: ~ 6840,3000,7100,2980~ ** Processing line: ~ 5620,2980,5840,2980~ ** Processing line: ~ 5840,2980,6500,3000~ ** Processing line: ~ 6500,3000,6840,3000~ ** Processing line: ~ 5560,2780,5620,2980~ ** Processing line: ~ 5560,2780,5560,2580~ ** Processing line: ~ 5560,2580,5560,2380~ ** Processing line: ~ 5560,2140,5560,2380~ ** Processing line: ~ 5560,2140,5560,1900~ ** Processing line: ~ 5560,1900,5620,1660~ ** Processing line: ~ 5620,1660,5660,1460~ ** Processing line: ~ 5660,1460,5660,1300~ ** Processing line: ~ 5500,1260,5660,1300~ ** Processing line: ~ 5340,1260,5500,1260~ ** Processing line: ~ 4600,1220,4840,1240~ ** Processing line: ~ 4440,1220,4600,1220~ ** Processing line: ~ 4440,1080,4440,1220~ ** Processing line: ~ 4440,1080,4600,1020~ ** Processing line: ~ 5080,1260,5340,1260~ ** Processing line: ~ 4840,1240,5080,1260~ ** Processing line: ~ 4600,1020,4940,1020~ ** Processing line: ~ 4940,1020,5220,1020~ ** Processing line: ~ 5220,1020,5560,960~ ** Processing line: ~ 5560,960,5660,860~ ** Processing line: ~ 5660,740,5660,860~ ** Processing line: ~ 5280,740,5660,740~ ** Processing line: ~ 4940,780,5280,740~ ** Processing line: ~ 4660,760,4940,780~ ** Processing line: ~ 4500,700,4660,760~ ** Processing line: ~ 4500,520,4500,700~ ** Processing line: ~ 4500,520,4700,460~ ** Processing line: ~ 4700,460,5080,440~ ** Processing line: ~ 5440,420,5740,420~ ** Processing line: ~ 5080,440,5440,420~ ** Processing line: ~ 5740,420,5840,360~ ** Processing line: ~ 5800,280,5840,360~ ** Processing line: ~ 5560,280,5800,280~ ** Processing line: ~ 4980,300,5280,320~ ** Processing line: ~ 4360,320,4660,300~ ** Processing line: ~ 4200,360,4360,320~ ** Processing line: ~ 5280,320,5560,280~ ** Processing line: ~ 4660,300,4980,300~ ** Processing line: ~ 4140,480,4200,360~ ** Processing line: ~ 4140,480,4140,640~ ** Processing line: ~ 4140,640,4200,780~ ** Processing line: ~ 4200,780,4200,980~ ** Processing line: ~ 4200,980,4220,1180~ ** Processing line: ~ 4220,1400,4220,1180~ ** Processing line: ~ 4220,1400,4260,1540~ ** Processing line: ~ 4260,1540,4500,1540~ ** Processing line: ~ 4500,1540,4700,1520~ ** Processing line: ~ 4700,1520,4980,1540~ ** Processing line: ~ 5280,1560,5400,1560~ ** Processing line: ~ 4980,1540,5280,1560~ ** Processing line: ~ 5400,1560,5400,1700~ ** Processing line: ~ 5400,1780,5400,1700~ ** Processing line: ~ 5340,1900,5400,1780~ ** Processing line: ~ 5340,2020,5340,1900~ ** Processing line: ~ 5340,2220,5340,2020~ ** Processing line: ~ 5340,2220,5340,2420~ ** Processing line: ~ 5340,2420,5340,2520~ ** Processing line: ~ 5080,2600,5220,2580~ ** Processing line: ~ 5220,2580,5340,2520~ ** Processing line: ~ 4900,2580,5080,2600~ ** Processing line: ~ 4700,2540,4900,2580~ ** Processing line: ~ 4500,2540,4700,2540~ ** Processing line: ~ 4220,2580,4340,2540~ ** Processing line: ~ 4200,2700,4220,2580~ ** Processing line: ~ 4340,2540,4500,2540~ ** Processing line: ~ 3980,2740,4200,2700~ ** Processing line: ~ 3840,2740,3980,2740~ ** Processing line: ~ 3780,2640,3840,2740~ ** Processing line: ~ 3780,2640,3780,2460~ ** Processing line: ~ 3780,2280,3780,2460~ ** Processing line: ~ 3620,2020,3780,2100~ ** Processing line: ~ 3780,2280,3780,2100~ ** Processing line: ~ 3360,2040,3620,2020~ ** Processing line: ~ 3080,2040,3360,2040~ ** Processing line: ~ 2840,2020,3080,2040~ ** Processing line: ~ 2740,1940,2840,2020~ ** Processing line: ~ 2740,1940,2800,1800~ ** Processing line: ~ 2800,1640,2800,1800~ ** Processing line: ~ 2800,1640,2800,1460~ ** Processing line: ~ 2800,1300,2800,1460~ ** Processing line: ~ 2700,1180,2800,1300~ ** Processing line: ~ 2480,1140,2700,1180~ ** Processing line: ~ 1580,1200,1720,1200~ ** Processing line: ~ 2240,1180,2480,1140~ ** Processing line: ~ 1960,1180,2240,1180~ ** Processing line: ~ 1720,1200,1960,1180~ ** Processing line: ~ 1500,1320,1580,1200~ ** Processing line: ~ 1500,1440,1500,1320~ ** Processing line: ~ 1500,1440,1760,1480~ ** Processing line: ~ 1760,1480,1940,1480~ ** Processing line: ~ 1940,1480,2140,1500~ ** Processing line: ~ 2140,1500,2320,1520~ ** Processing line: ~ 2400,1560,2400,1700~ ** Processing line: ~ 2280,1820,2380,1780~ ** Processing line: ~ 2320,1520,2400,1560~ ** Processing line: ~ 2380,1780,2400,1700~ ** Processing line: ~ 2080,1840,2280,1820~ ** Processing line: ~ 1720,1820,2080,1840~ ** Processing line: ~ 1420,1800,1720,1820~ ** Processing line: ~ 1280,1800,1420,1800~ ** Processing line: ~ 1240,1720,1280,1800~ ** Processing line: ~ 1240,1720,1240,1600~ ** Processing line: ~ 1240,1600,1280,1480~ ** Processing line: ~ 1280,1340,1280,1480~ ** Processing line: ~ 1180,1280,1280,1340~ ** Processing line: ~ 1000,1280,1180,1280~ ** Processing line: ~ 760,1280,1000,1280~ ** Processing line: ~ 360,1240,540,1260~ ** Processing line: ~ 180,1220,360,1240~ ** Processing line: ~ 540,1260,760,1280~ ** Processing line: ~ 180,1080,180,1220~ ** Processing line: ~ 180,1080,180,1000~ ** Processing line: ~ 180,1000,360,940~ ** Processing line: ~ 360,940,540,960~ ** Processing line: ~ 540,960,820,980~ ** Processing line: ~ 1100,980,1200,920~ ** Processing line: ~ 820,980,1100,980~ ** Processing line: ~ 6640,11860,6940,11920~ ** Processing line: ~ 5200,11280,5500,11280~ ** Processing line: ~ 4120,7330,4120,7230~ ** Processing line: ~ 4120,7230,4660,7250~ ** Processing line: ~ 4660,7250,4940,7250~ ** Processing line: ~ 4940,7250,5050,7340~ ** Processing line: ~ 5010,7400,5050,7340~ ** Processing line: ~ 4680,7380,5010,7400~ ** Processing line: ~ 4380,7370,4680,7380~ ** Processing line: ~ 4120,7330,4360,7370~ ** Processing line: ~ 4120,7670,4120,7760~ ** Processing line: ~ 4120,7670,4280,7650~ ** Processing line: ~ 4280,7650,4540,7660~ ** Processing line: ~ 4550,7660,4820,7680~ ** Processing line: ~ 4820,7680,4900,7730~ ** Processing line: ~ 4880,7800,4900,7730~ ** Processing line: ~ 4620,7820,4880,7800~ ** Processing line: ~ 4360,7790,4620,7820~ ** Processing line: ~ 4120,7760,4360,7790~ ** Processing line: ~ 6840,6840,7040,6820~ ** Processing line: ~ 5720,4880,6120,4880~ ** Processing line: ~ 1200,920,1340,810~ ** Processing line: ~ 1340,810,1520,790~ ** Processing line: ~ 1520,790,1770,800~ ** Processing line: ~ 2400,790,2600,750~ ** Processing line: ~ 2600,750,2640,520~ ** Processing line: ~ 2520,470,2640,520~ ** Processing line: ~ 2140,470,2520,470~ ** Processing line: ~ 1760,800,2090,800~ ** Processing line: ~ 2080,800,2400,790~ ** Processing line: ~ 1760,450,2140,470~ ** Processing line: ~ 1420,450,1760,450~ ** Processing line: ~ 1180,440,1420,450~ ** Processing line: ~ 900,480,1180,440~ ** Processing line: ~ 640,450,900,480~ ** Processing line: ~ 360,440,620,450~ ** Processing line: ~ 120,430,360,440~ ** Processing line: ~ 0,520,120,430~ ** Processing line: ~ -20,780,0,520~ ** Processing line: ~ -20,780,-20,1020~ ** Processing line: ~ -20,1020,-20,1150~ ** Processing line: ~ -20,1150,0,1300~ ** Processing line: ~ 0,1470,60,1530~ ** Processing line: ~ 0,1300,0,1470~ ** Processing line: ~ 60,1530,360,1530~ ** Processing line: ~ 360,1530,660,1520~ ** Processing line: ~ 660,1520,980,1520~ ** Processing line: ~ 980,1520,1040,1520~ ** Processing line: ~ 1040,1520,1070,1560~ ** Processing line: ~ 1070,1770,1070,1560~ ** Processing line: ~ 1070,1770,1100,2010~ ** Processing line: ~ 1070,2230,1100,2010~ ** Processing line: ~ 1070,2240,1180,2340~ ** Processing line: ~ 1180,2340,1580,2340~ ** Processing line: ~ 1580,2340,1940,2350~ ** Processing line: ~ 1940,2350,2440,2350~ ** Processing line: ~ 2440,2350,2560,2380~ ** Processing line: ~ 2560,2380,2600,2540~ ** Processing line: ~ 2810,2640,3140,2680~ ** Processing line: ~ 2600,2540,2810,2640~ ** Processing line: ~ 3140,2680,3230,2780~ ** Processing line: ~ 3230,2780,3260,2970~ ** Processing line: ~ 3230,3220,3260,2970~ ** Processing line: ~ 3200,3470,3230,3220~ ** Processing line: ~ 3200,3480,3210,3760~ ** Processing line: ~ 3210,3760,3210,4040~ ** Processing line: ~ 3200,4040,3230,4310~ ** Processing line: ~ 3210,4530,3230,4310~ ** Processing line: ~ 3210,4530,3230,4730~ ** Processing line: ~ 3230,4960,3230,4730~ ** Processing line: ~ 3230,4960,3260,5190~ ** Processing line: ~ 3170,5330,3260,5190~ ** Processing line: ~ 2920,5330,3170,5330~ ** Processing line: ~ 2660,5360,2920,5330~ ** Processing line: ~ 2420,5330,2660,5360~ ** Processing line: ~ 2200,5280,2400,5330~ ** Processing line: ~ 2020,5280,2200,5280~ ** Processing line: ~ 1840,5260,2020,5280~ ** Processing line: ~ 1660,5280,1840,5260~ ** Processing line: ~ 1500,5300,1660,5280~ ** Processing line: ~ 1360,5270,1500,5300~ ** Processing line: ~ 1200,5290,1340,5270~ ** Processing line: ~ 1070,5400,1200,5290~ ** Processing line: ~ 1040,5630,1070,5400~ ** Processing line: ~ 1000,5900,1040,5630~ ** Processing line: ~ 980,6170,1000,5900~ ** Processing line: ~ 980,6280,980,6170~ ** Processing line: ~ 980,6540,980,6280~ ** Processing line: ~ 980,6540,1040,6720~ ** Processing line: ~ 1040,6720,1360,6730~ ** Processing line: ~ 1360,6730,1760,6710~ ** Processing line: ~ 2110,6720,2420,6730~ ** Processing line: ~ 1760,6710,2110,6720~ ** Processing line: ~ 2420,6730,2640,6720~ ** Processing line: ~ 2640,6720,2970,6720~ ** Processing line: ~ 2970,6720,3160,6700~ ** Processing line: ~ 3160,6700,3240,6710~ ** Processing line: ~ 3240,6710,3260,6890~ ** Processing line: ~ 3260,7020,3260,6890~ ** Processing line: ~ 3230,7180,3260,7020~ ** Processing line: ~ 3230,7350,3230,7180~ ** Processing line: ~ 3210,7510,3230,7350~ ** Processing line: ~ 3210,7510,3210,7690~ ** Processing line: ~ 3210,7870,3210,7690~ ** Processing line: ~ 3210,7870,3210,7980~ ** Processing line: ~ 3200,8120,3210,7980~ ** Processing line: ~ 3200,8330,3200,8120~ ** Processing line: ~ 3160,8520,3200,8330~ ** Processing line: ~ 2460,11100,2480,11020~ ** Processing line: ~ 2200,11180,2460,11100~ ** Processing line: ~ 1260,11350,1600,11320~ ** Processing line: ~ 600,11430,930,11400~ ** Processing line: ~ 180,11340,620,11430~ ** Processing line: ~ 1600,11320,1910,11280~ ** Processing line: ~ 1910,11280,2200,11180~ ** Processing line: ~ 923.0029599285435,11398.99893503157,1264.002959928544,11351.99893503157~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Platformer - The Little Probe - Data - level_lava.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - The Little Probe - Data - level_lava.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Platformer - The Little Probe - Data - level_lava.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_platformer/the_little_probe/data/level_lava.txt~ ** Processing line: ~ 100,10740,500,10780~ ** Processing line: ~ 500,10780,960,10760~ ** Processing line: ~ 960,10760,1340,10760~ ** Processing line: ~ 1380,10760,1820,10780~ ** Processing line: ~ 1820,10780,2240,10780~ ** Processing line: ~ 2280,10780,2740,10740~ ** Processing line: ~ 2740,10740,3000,10780~ ** Processing line: ~ 3000,10780,3140,11020~ ** Processing line: ~ -520,8820,-480,9160~ ** Processing line: ~ -520,8480,-520,8820~ ** Processing line: ~ -520,8480,-480,8180~ ** Processing line: ~ -480,8180,-200,8120~ ** Processing line: ~ -200,8120,100,8220~ ** Processing line: ~ 100,8220,420,8240~ ** Processing line: ~ 420,8240,760,8260~ ** Processing line: ~ 760,8260,1140,8280~ ** Processing line: ~ 1140,8280,1500,8200~ ** Processing line: ~ 1500,8200,1880,8240~ ** Processing line: ~ 1880,8240,2240,8260~ ** Processing line: ~ 2240,8260,2320,8480~ ** Processing line: ~ 2320,8480,2380,8680~ ** Processing line: ~ 2240,8860,2380,8680~ ** Processing line: ~ 2240,9080,2240,8860~ ** Processing line: ~ 2240,9080,2320,9260~ ** Processing line: ~ 2320,9260,2480,9440~ ** Processing line: ~ 2480,9440,2600,9640~ ** Processing line: ~ 2480,9840,2600,9640~ ** Processing line: ~ 2400,10020,2480,9840~ ** Processing line: ~ 2240,10080,2400,10020~ ** Processing line: ~ 1960,10080,2240,10080~ ** Processing line: ~ 1720,10080,1960,10080~ ** Processing line: ~ 1460,10080,1720,10080~ ** Processing line: ~ 1180,10080,1420,10080~ ** Processing line: ~ 900,10080,1180,10080~ ** Processing line: ~ 640,10080,900,10080~ ** Processing line: ~ 640,10080,640,9900~ ** Processing line: ~ 60,10520,100,10740~ ** Processing line: ~ 40,10240,60,10520~ ** Processing line: ~ 40,10240,40,9960~ ** Processing line: ~ 40,9960,40,9680~ ** Processing line: ~ 40,9680,40,9360~ ** Processing line: ~ 40,9360,60,9080~ ** Processing line: ~ 60,9080,100,8860~ ** Processing line: ~ 100,8860,460,9040~ ** Processing line: ~ 460,9040,760,9220~ ** Processing line: ~ 760,9220,1140,9220~ ** Processing line: ~ 1140,9220,1720,9200~ ** Processing line: ~ -660,11580,-600,11420~ ** Processing line: ~ -660,11800,-660,11580~ ** Processing line: ~ -660,12000,-660,11800~ ** Processing line: ~ -660,12000,-600,12220~ ** Processing line: ~ -600,12220,-600,12440~ ** Processing line: ~ -600,12440,-600,12640~ ** Processing line: ~ -600,11240,-260,11280~ ** Processing line: ~ -260,11280,100,11240~ ** Processing line: ~ 9000,12360,9020,12400~ ** Processing line: ~ 9020,12620,9020,12400~ ** Processing line: ~ 9020,12840,9020,12620~ ** Processing line: ~ 9020,13060,9020,12840~ ** Processing line: ~ 9020,13060,9020,13240~ ** Processing line: ~ 9020,13240,9020,13420~ ** Processing line: ~ 9020,13420,9020,13600~ ** Processing line: ~ 9020,13600,9020,13780~ ** Processing line: ~ 8880,13900,9020,13780~ ** Processing line: ~ 8560,13800,8880,13900~ ** Processing line: ~ 8220,13780,8560,13800~ ** Processing line: ~ 7860,13760,8220,13780~ ** Processing line: ~ 7640,13780,7860,13760~ ** Processing line: ~ 7360,13800,7640,13780~ ** Processing line: ~ 7100,13800,7360,13800~ ** Processing line: ~ 6540,13760,6800,13780~ ** Processing line: ~ 6800,13780,7100,13800~ ** Processing line: ~ 6280,13760,6540,13760~ ** Processing line: ~ 5760,13760,6280,13760~ ** Processing line: ~ 5220,13780,5760,13760~ ** Processing line: ~ 4700,13760,5220,13780~ ** Processing line: ~ 4200,13740,4700,13760~ ** Processing line: ~ 3680,13720,4200,13740~ ** Processing line: ~ 3140,13700,3680,13720~ ** Processing line: ~ 2600,13680,3140,13700~ ** Processing line: ~ 2040,13940,2600,13680~ ** Processing line: ~ 1640,13940,2040,13940~ ** Processing line: ~ 1200,13960,1640,13940~ ** Processing line: ~ 840,14000,1200,13960~ ** Processing line: ~ 300,13960,840,14000~ ** Processing line: ~ -200,13900,300,13960~ ** Processing line: ~ -600,12840,-600,12640~ ** Processing line: ~ -600,13140,-600,12840~ ** Processing line: ~ -600,13140,-600,13420~ ** Processing line: ~ -600,13700,-600,13420~ ** Processing line: ~ -600,13700,-600,13820~ ** Processing line: ~ -600,13820,-200,13900~ ** Processing line: ~ -600,11240,-560,11000~ ** Processing line: ~ -560,11000,-480,10840~ ** Processing line: ~ -520,10660,-480,10840~ ** Processing line: ~ -520,10660,-520,10480~ ** Processing line: ~ -520,10480,-520,10300~ ** Processing line: ~ -520,10260,-480,10080~ ** Processing line: ~ -480,9880,-440,10060~ ** Processing line: ~ -520,9680,-480,9880~ ** Processing line: ~ -520,9680,-480,9400~ ** Processing line: ~ -480,9400,-480,9160~ ** Processing line: ~ 1820,9880,2140,9800~ ** Processing line: ~ 1540,9880,1820,9880~ ** Processing line: ~ 1200,9920,1500,9880~ ** Processing line: ~ 900,9880,1200,9920~ ** Processing line: ~ 640,9900,840,9880~ ** Processing line: ~ 2380,8760,2800,8760~ ** Processing line: ~ 2800,8760,2840,8660~ ** Processing line: ~ 2840,8660,2840,8420~ ** Processing line: ~ 2840,8160,2840,8420~ ** Processing line: ~ 2800,7900,2840,8160~ ** Processing line: ~ 2800,7900,2800,7720~ ** Processing line: ~ 2800,7540,2800,7720~ ** Processing line: ~ 2800,7540,2800,7360~ ** Processing line: ~ 2700,7220,2800,7360~ ** Processing line: ~ 2400,7220,2700,7220~ ** Processing line: ~ 2080,7240,2400,7220~ ** Processing line: ~ 1760,7320,2080,7240~ ** Processing line: ~ 1380,7360,1720,7320~ ** Processing line: ~ 1040,7400,1340,7360~ ** Processing line: ~ 640,7400,1000,7420~ ** Processing line: ~ 300,7380,640,7400~ ** Processing line: ~ 0,7300,240,7380~ ** Processing line: ~ -300,7180,-60,7300~ ** Processing line: ~ -380,6860,-360,7180~ ** Processing line: ~ -380,6880,-360,6700~ ** Processing line: ~ -360,6700,-260,6540~ ** Processing line: ~ -260,6540,0,6520~ ** Processing line: ~ 0,6520,240,6640~ ** Processing line: ~ 240,6640,460,6640~ ** Processing line: ~ 460,6640,500,6480~ ** Processing line: ~ 500,6260,500,6480~ ** Processing line: ~ 460,6060,500,6260~ ** Processing line: ~ 460,5860,460,6060~ ** Processing line: ~ 460,5860,500,5640~ ** Processing line: ~ 500,5640,540,5440~ ** Processing line: ~ 540,5440,580,5220~ ** Processing line: ~ 580,5220,580,5000~ ** Processing line: ~ 580,4960,580,4740~ ** Processing line: ~ 580,4740,960,4700~ ** Processing line: ~ 960,4700,1140,4760~ ** Processing line: ~ 1140,4760,1420,4740~ ** Processing line: ~ 1420,4740,1720,4700~ ** Processing line: ~ 1720,4700,2000,4740~ ** Processing line: ~ 2000,4740,2380,4760~ ** Processing line: ~ 2380,4760,2700,4800~ ** Processing line: ~ 1720,4600,1760,4300~ ** Processing line: ~ 1760,4300,2200,4340~ ** Processing line: ~ 2200,4340,2560,4340~ ** Processing line: ~ 2560,4340,2740,4340~ ** Processing line: ~ 2160,12580,2440,12400~ ** Processing line: ~ 1820,12840,2160,12580~ ** Processing line: ~ 1500,13080,1820,12840~ ** Processing line: ~ 1140,13340,1500,13080~ ** Processing line: ~ 1140,13340,1580,13220~ ** Processing line: ~ 2110,13080,2520,13000~ ** Processing line: ~ 2520,13000,2900,12800~ ** Processing line: ~ 1580,13220,2110,13080~ ** Processing line: ~ 2900,12800,3200,12680~ ** Processing line: ~ 3200,12680,3440,12640~ ** Processing line: ~ 3440,12640,3720,12460~ ** Processing line: ~ 3720,12460,4040,12320~ ** Processing line: ~ 4040,12320,4360,12200~ ** Processing line: ~ 4360,11940,4380,12180~ ** Processing line: ~ 4360,11700,4360,11940~ ** Processing line: ~ 4360,11700,4540,11500~ ** Processing line: ~ 4540,11500,4880,11540~ ** Processing line: ~ 6000,11660,6280,11640~ ** Processing line: ~ 5440,11600,5720,11610~ ** Processing line: ~ 5720,11610,6000,11660~ ** Processing line: ~ 6280,11640,6760,11720~ ** Processing line: ~ 6760,11720,7060,11780~ ** Processing line: ~ 7060,11780,7360,11810~ ** Processing line: ~ 7360,11810,7640,11840~ ** Processing line: ~ 7640,11840,8000,11830~ ** Processing line: ~ 8000,11830,8320,11850~ ** Processing line: ~ 8320,11850,8390,11800~ ** Processing line: ~ 8330,11760,8390,11800~ ** Processing line: ~ 8160,11760,8330,11760~ ** Processing line: ~ 7910,11750,8160,11760~ ** Processing line: ~ 7660,11740,7900,11750~ ** Processing line: ~ 7400,11730,7660,11740~ ** Processing line: ~ 7160,11680,7400,11730~ ** Processing line: ~ 7080,11570,7160,11680~ ** Processing line: ~ 7080,11570,7100,11350~ ** Processing line: ~ 7100,11350,7440,11280~ ** Processing line: ~ 7440,11280,7940,11280~ ** Processing line: ~ 7960,11280,8360,11280~ ** Processing line: ~ 5840,11540,6650,11170~ ** Processing line: ~ 4880,11540,5440,11600~ ** Processing line: ~ 3410,11830,3420,11300~ ** Processing line: ~ 3410,11260,3520,10920~ ** Processing line: ~ 3520,10590,3520,10920~ ** Processing line: ~ 3520,10590,3540,10260~ ** Processing line: ~ 3520,9900,3540,10240~ ** Processing line: ~ 3520,9900,3640,9590~ ** Processing line: ~ 3640,9570,4120,9590~ ** Processing line: ~ 4140,9590,4600,9680~ ** Processing line: ~ 4620,9680,5030,9730~ ** Processing line: ~ 5120,9750,5520,9800~ ** Processing line: ~ 5620,9820,6080,9800~ ** Processing line: ~ 6130,9810,6580,9820~ ** Processing line: ~ 6640,9820,6800,9700~ ** Processing line: ~ 6780,9400,6800,9700~ ** Processing line: ~ 6780,9400,6840,9140~ ** Processing line: ~ 6820,8860,6840,9120~ ** Processing line: ~ 6780,8600,6820,8830~ ** Processing line: ~ 6720,8350,6780,8570~ ** Processing line: ~ 6480,8340,6720,8320~ ** Processing line: ~ 6260,8400,6480,8340~ ** Processing line: ~ 6050,8580,6240,8400~ ** Processing line: ~ 5760,8630,6040,8590~ ** Processing line: ~ 5520,8690,5740,8630~ ** Processing line: ~ 5120,8690,5450,8700~ ** Processing line: ~ 4570,8670,5080,8690~ ** Processing line: ~ 4020,8610,4540,8670~ ** Processing line: ~ 3540,8480,4020,8610~ ** Processing line: ~ 3520,8230,3520,8480~ ** Processing line: ~ 3520,7930,3520,8230~ ** Processing line: ~ 3520,7930,3540,7630~ ** Processing line: ~ 3480,7320,3540,7610~ ** Processing line: ~ 3480,7280,3500,7010~ ** Processing line: ~ 3500,6980,3680,6850~ ** Processing line: ~ 3680,6850,4220,6840~ ** Processing line: ~ 4230,6840,4760,6850~ ** Processing line: ~ 4780,6850,5310,6860~ ** Processing line: ~ 5310,6860,5720,6940~ ** Processing line: ~ 5720,6940,5880,7250~ ** Processing line: ~ 5880,7250,5900,7520~ ** Processing line: ~ 100,11240,440,11300~ ** Processing line: ~ 440,11300,760,11330~ ** Processing line: ~ 1480,11280,1840,11230~ ** Processing line: ~ 2200,11130,2360,11090~ ** Processing line: ~ 1840,11230,2200,11130~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Choose Your Own Adventure - decision.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Choose Your Own Adventure - decision.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Choose Your Own Adventure - decision.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/choose_your_own_adventure/app/decision.rb~ ** Processing line: ~ # Hey there! Welcome to Four Decisions. Here is how you~ ** Processing line: ~ # create your decision tree. Remove =being and =end from the text to~ ** Processing line: ~ # enable the game (just save the file). Change stuff and see what happens!~ ** Processing line: ~~ ** Processing line: ~ def game~ ** Processing line: ~ {~ ** Processing line: ~ starting_decision: :stormy_night,~ ** Processing line: ~ decisions: {~ ** Processing line: ~ stormy_night: {~ ** Processing line: ~ description: 'It was a dark and stormy night. (storyline located in decision.rb)',~ ** Processing line: ~ option_one: {~ ** Processing line: ~ description: 'Go to sleep.',~ ** Processing line: ~ decision: :nap~ ** Processing line: ~ },~ ** Processing line: ~ option_two: {~ ** Processing line: ~ description: 'Watch a movie.',~ ** Processing line: ~ decision: :movie~ ** Processing line: ~ },~ ** Processing line: ~ option_three: {~ ** Processing line: ~ description: 'Go outside.',~ ** Processing line: ~ decision: :go_outside~ ** Processing line: ~ },~ ** Processing line: ~ option_four: {~ ** Processing line: ~ description: 'Get a snack.',~ ** Processing line: ~ decision: :get_a_snack~ ** Processing line: ~ }~ ** Processing line: ~ },~ ** Processing line: ~ nap: {~ ** Processing line: ~ description: 'You took a nap. The end.',~ ** Processing line: ~ option_one: {~ ** Processing line: ~ description: 'Start over.',~ ** Processing line: ~ decision: :stormy_night~ ** Processing line: ~ }~ ** Processing line: ~ }~ ** Processing line: ~ }~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Choose Your Own Adventure - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Choose Your Own Adventure - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Choose Your Own Adventure - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/choose_your_own_adventure/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - Hashes: Collection of unique keys and their corresponding values. The values can be found~ ** Processing line: ~ using their keys.~ ** Processing line: ~~ ** Processing line: ~ In this sample app, the decisions needed for the game are stored in a hash. In fact, the~ ** Processing line: ~ decision.rb file contains hashes inside of other hashes!~ ** Processing line: ~~ ** Processing line: ~ Each option is a key in the first hash, but also contains a hash (description and~ ** Processing line: ~ decision being its keys) as its value.~ ** Processing line: ~ Go into the decision.rb file and take a look before diving into the code below.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ ** Processing line: ~~ ** Processing line: ~ - args.keyboard.key_down.KEY: Determines if a key is in the down state or pressed down.~ ** Processing line: ~ For more information about the keyboard, go to mygame/documentation/06-keyboard.md.~ ** Processing line: ~~ ** Processing line: ~ - String interpolation: uses #{} syntax; everything between the #{ and the } is evaluated~ ** Processing line: ~ as Ruby code, and the placeholder is replaced with its corresponding value or result.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app provides users with a story and multiple decisions that they can choose to make.~ ** Processing line: ~ # Users can make a decision using their keyboard, and the story will move forward based on user choices.~ ** Processing line: ~~ ** Processing line: ~ # The decisions available to users are stored in the decision.rb file.~ ** Processing line: ~ # We must have access to it for the game to function properly.~ ** Processing line: ~ GAME_FILE = 'app/decision.rb' # found in app folder~ ** Processing line: ~~ ** Processing line: ~ require GAME_FILE # require used to load another file, import class/method definitions~ ** Processing line: ~~ ** Processing line: ~ # Instructions are given using labels to users if they have not yet set up their story in the decision.rb file.~ ** Processing line: ~ # Otherwise, the game is run.~ ** Processing line: ~ def tick args~ ** Processing line: ~ if !args.state.loaded && !respond_to?(:game) # if game is not loaded and not responding to game symbol's method~ ** Processing line: ~ args.labels << [640, 370, 'Hey there! Welcome to Four Decisions.', 0, 1] # a welcome label is shown~ ** Processing line: ~ args.labels << [640, 340, 'Go to the file called decision.rb and tell me your story.', 0, 1]~ ** Processing line: ~ elsif respond_to?(:game) # otherwise, if responds to game~ ** Processing line: ~ args.state.loaded = true~ ** Processing line: ~ tick_game args # calls tick_game method, runs game~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.tick_count.mod_zero? 60 # update every 60 frames~ ** Processing line: ~ t = args.gtk.ffi_file.mtime GAME_FILE # mtime returns modification time for named file~ ** Processing line: ~ if t != args.state.mtime~ ** Processing line: ~ args.state.mtime = t~ ** Processing line: ~ require GAME_FILE # require used to load file~ ** Processing line: ~ args.state.game_definition = nil # game definition and decision are empty~ ** Processing line: ~ args.state.decision_id = nil~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Runs methods needed for game to function properly~ ** Processing line: ~ # Creates a rectangular border around the screen~ ** Processing line: ~ def tick_game args~ ** Processing line: ~ defaults args~ ** Processing line: ~ args.borders << args.grid.rect~ ** Processing line: ~ render_decision args~ ** Processing line: ~ process_inputs args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets default values and uses decision.rb file to define game and decision_id~ ** Processing line: ~ # variable using the starting decision~ ** Processing line: ~ def defaults args~ ** Processing line: ~ args.state.game_definition ||= game~ ** Processing line: ~ args.state.decision_id ||= args.state.game_definition[:starting_decision]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs the possible decision descriptions the user can choose onto the screen~ ** Processing line: ~ # as well as what key to press on their keyboard to make their decision~ ** Processing line: ~ def render_decision args~ ** Processing line: ~ decision = current_decision args~ ** Processing line: ~ # text is either the value of decision's description key or warning that no description exists~ ** Processing line: ~ args.labels << [640, 360, decision[:description] || "No definition found for #{args.state.decision_id}. Please update decision.rb.", 0, 1] # uses string interpolation~ ** Processing line: ~~ ** Processing line: ~ # All decisions are stored in a hash~ ** Processing line: ~ # The descriptions output onto the screen are the values for the description keys of the hash.~ ** Processing line: ~ if decision[:option_one]~ ** Processing line: ~ args.labels << [10, 360, decision[:option_one][:description], 0, 0] # option one's description label~ ** Processing line: ~ args.labels << [10, 335, "(Press 'left' on the keyboard to select this decision)", -5, 0] # label of what key to press to select the decision~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if decision[:option_two]~ ** Processing line: ~ args.labels << [1270, 360, decision[:option_two][:description], 0, 2] # option two's description~ ** Processing line: ~ args.labels << [1270, 335, "(Press 'right' on the keyboard to select this decision)", -5, 2]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if decision[:option_three]~ ** Processing line: ~ args.labels << [640, 45, decision[:option_three][:description], 0, 1] # option three's description~ ** Processing line: ~ args.labels << [640, 20, "(Press 'down' on the keyboard to select this decision)", -5, 1]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if decision[:option_four]~ ** Processing line: ~ args.labels << [640, 700, decision[:option_four][:description], 0, 1] # option four's description~ ** Processing line: ~ args.labels << [640, 675, "(Press 'up' on the keyboard to select this decision)", -5, 1]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Uses keyboard input from the user to make a decision~ ** Processing line: ~ # Assigns the decision as the value of the decision_id variable~ ** Processing line: ~ def process_inputs args~ ** Processing line: ~ decision = current_decision args # calls current_decision method~ ** Processing line: ~~ ** Processing line: ~ if args.keyboard.key_down.left! && decision[:option_one] # if left key pressed and option one exists~ ** Processing line: ~ args.state.decision_id = decision[:option_one][:decision] # value of option one's decision hash key is set to decision_id~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.keyboard.key_down.right! && decision[:option_two] # if right key pressed and option two exists~ ** Processing line: ~ args.state.decision_id = decision[:option_two][:decision] # value of option two's decision hash key is set to decision_id~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.keyboard.key_down.down! && decision[:option_three] # if down key pressed and option three exists~ ** Processing line: ~ args.state.decision_id = decision[:option_three][:decision] # value of option three's decision hash key is set to decision_id~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.keyboard.key_down.up! && decision[:option_four] # if up key pressed and option four exists~ ** Processing line: ~ args.state.decision_id = decision[:option_four][:decision] # value of option four's decision hash key is set to decision_id~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Uses decision_id's value to keep track of current decision being made~ ** Processing line: ~ def current_decision args~ ** Processing line: ~ args.state.game_definition[:decisions][args.state.decision_id] || {} # either has value or is empty~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Resets the game.~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Return Of Serenity - lowrez_simulator.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - lowrez_simulator.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - lowrez_simulator.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/lowrez_simulator.rb~ ** Processing line: ~ ###################################################################################~ ** Processing line: ~ # YOU CAN PLAY AROUND WITH THE CODE BELOW, BUT USE CAUTION AS THIS IS WHAT EMULATES~ ** Processing line: ~ # THE 64x64 CANVAS.~ ** Processing line: ~ ###################################################################################~ ** Processing line: ~~ ** Processing line: ~ TINY_RESOLUTION = 64~ ** Processing line: ~ TINY_SCALE = 720.fdiv(TINY_RESOLUTION + 5)~ ** Processing line: ~ CENTER_OFFSET = 10~ ** Processing line: ~ EMULATED_FONT_SIZE = 20~ ** Processing line: ~ EMULATED_FONT_X_ZERO = 0~ ** Processing line: ~ EMULATED_FONT_Y_ZERO = 46~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ sprites = []~ ** Processing line: ~ labels = []~ ** Processing line: ~ borders = []~ ** Processing line: ~ solids = []~ ** Processing line: ~ mouse = emulate_lowrez_mouse args~ ** Processing line: ~ args.state.show_gridlines = false~ ** Processing line: ~ lowrez_tick args, sprites, labels, borders, solids, mouse~ ** Processing line: ~ render_gridlines_if_needed args~ ** Processing line: ~ render_mouse_crosshairs args, mouse~ ** Processing line: ~ emulate_lowrez_scene args, sprites, labels, borders, solids, mouse~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def emulate_lowrez_mouse args~ ** Processing line: ~ args.state.new_entity_strict(:lowrez_mouse) do |m|~ ** Processing line: ~ m.x = args.mouse.x.idiv(TINY_SCALE) - CENTER_OFFSET.idiv(TINY_SCALE) - 1~ ** Processing line: ~ m.y = args.mouse.y.idiv(TINY_SCALE)~ ** Processing line: ~ if args.mouse.click~ ** Processing line: ~ m.click = [~ ** Processing line: ~ args.mouse.click.point.x.idiv(TINY_SCALE) - CENTER_OFFSET.idiv(TINY_SCALE) - 1,~ ** Processing line: ~ args.mouse.click.point.y.idiv(TINY_SCALE)~ ** Processing line: ~ ]~ ** Processing line: ~ m.down = m.click~ ** Processing line: ~ else~ ** Processing line: ~ m.click = nil~ ** Processing line: ~ m.down = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.mouse.up~ ** Processing line: ~ m.up = [~ ** Processing line: ~ args.mouse.up.point.x.idiv(TINY_SCALE) - CENTER_OFFSET.idiv(TINY_SCALE) - 1,~ ** Processing line: ~ args.mouse.up.point.y.idiv(TINY_SCALE)~ ** Processing line: ~ ]~ ** Processing line: ~ else~ ** Processing line: ~ m.up = nil~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_mouse_crosshairs args, mouse~ ** Processing line: ~ return unless args.state.show_gridlines~ ** Processing line: ~ args.labels << [10, 25, "mouse: #{mouse.x} #{mouse.y}", 255, 255, 255]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def emulate_lowrez_scene args, sprites, labels, borders, solids, mouse~ ** Processing line: ~ args.render_target(:lowrez).solids << [0, 0, 1280, 720]~ ** Processing line: ~ args.render_target(:lowrez).sprites << sprites~ ** Processing line: ~ args.render_target(:lowrez).borders << borders~ ** Processing line: ~ args.render_target(:lowrez).solids << solids~ ** Processing line: ~ args.outputs.primitives << labels.map do |l|~ ** Processing line: ~ as_label = l.label~ ** Processing line: ~ l.text.each_char.each_with_index.map do |char, i|~ ** Processing line: ~ [CENTER_OFFSET + EMULATED_FONT_X_ZERO + (as_label.x * TINY_SCALE) + i * 5 * TINY_SCALE,~ ** Processing line: ~ EMULATED_FONT_Y_ZERO + (as_label.y * TINY_SCALE), char,~ ** Processing line: ~ EMULATED_FONT_SIZE, 0, as_label.r, as_label.g, as_label.b, as_label.a, 'fonts/dragonruby-gtk-4x4.ttf'].label~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.sprites << [CENTER_OFFSET, 0, 1280 * TINY_SCALE, 720 * TINY_SCALE, :lowrez]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_gridlines_if_needed args~ ** Processing line: ~ if args.state.show_gridlines && args.static_lines.length == 0~ ** Processing line: ~ args.static_lines << 65.times.map do |i|~ ** Processing line: ~ [~ ** Processing line: ~ [CENTER_OFFSET + i * TINY_SCALE + 1, 0,~ ** Processing line: ~ CENTER_OFFSET + i * TINY_SCALE + 1, 720, 128, 128, 128],~ ** Processing line: ~ [CENTER_OFFSET + i * TINY_SCALE, 0,~ ** Processing line: ~ CENTER_OFFSET + i * TINY_SCALE, 720, 128, 128, 128],~ ** Processing line: ~ [CENTER_OFFSET, 0 + i * TINY_SCALE,~ ** Processing line: ~ CENTER_OFFSET + 720, 0 + i * TINY_SCALE, 128, 128, 128],~ ** Processing line: ~ [CENTER_OFFSET, 1 + i * TINY_SCALE,~ ** Processing line: ~ CENTER_OFFSET + 720, 1 + i * TINY_SCALE, 128, 128, 128]~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ elsif !args.state.show_gridlines~ ** Processing line: ~ args.static_lines.clear~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Return Of Serenity - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/main.rb~ ** Processing line: ~ require 'app/require.rb'~ ** Processing line: ~~ ** Processing line: ~ def defaults args~ ** Processing line: ~ args.outputs.background_color = [0, 0, 0]~ ** Processing line: ~ args.state.last_story_line_text ||= ""~ ** Processing line: ~ args.state.scene_history ||= []~ ** Processing line: ~ args.state.storyline_history ||= []~ ** Processing line: ~ args.state.word_delay ||= 8~ ** Processing line: ~ if args.state.tick_count == 0~ ** Processing line: ~ args.gtk.stop_music~ ** Processing line: ~ args.outputs.sounds << 'sounds/static-loop.ogg'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.last_story_line_text~ ** Processing line: ~ lines = args.state~ ** Processing line: ~ .last_story_line_text~ ** Processing line: ~ .gsub("-", "")~ ** Processing line: ~ .gsub("~", "")~ ** Processing line: ~ .wrapped_lines(50)~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << lines.map_with_index { |l, i| [690, 200 - (i * 25), l, 1, 0, 255, 255, 255] }~ ** Processing line: ~ elsif args.state.storyline_history[-1]~ ** Processing line: ~ lines = args.state~ ** Processing line: ~ .storyline_history[-1]~ ** Processing line: ~ .gsub("-", "")~ ** Processing line: ~ .gsub("~", "")~ ** Processing line: ~ .wrapped_lines(50)~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << lines.map_with_index { |l, i| [690, 200 - (i * 25), l, 1, 0, 255, 255, 255] }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return if args.state.current_scene~ ** Processing line: ~ set_scene(args, day_one_beginning(args))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inputs_move_player args~ ** Processing line: ~ if args.state.scene_changed_at.elapsed_time > 5~ ** Processing line: ~ if args.keyboard.down || args.keyboard.s || args.keyboard.j~ ** Processing line: ~ args.state.player.y -= 0.25~ ** Processing line: ~ elsif args.keyboard.up || args.keyboard.w || args.keyboard.k~ ** Processing line: ~ args.state.player.y += 0.25~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.keyboard.left || args.keyboard.a || args.keyboard.h~ ** Processing line: ~ args.state.player.x -= 0.25~ ** Processing line: ~ elsif args.keyboard.right || args.keyboard.d || args.keyboard.l~ ** Processing line: ~ args.state.player.x += 0.25~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.state.player.y = 60 if args.state.player.y > 63~ ** Processing line: ~ args.state.player.y = 0 if args.state.player.y < -3~ ** Processing line: ~ args.state.player.x = 60 if args.state.player.x > 63~ ** Processing line: ~ args.state.player.x = 0 if args.state.player.x < -3~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def null_or_empty? ary~ ** Processing line: ~ return true unless ary~ ** Processing line: ~ return true if ary.length == 0~ ** Processing line: ~ return false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_storyline_hotspot args~ ** Processing line: ~ hotspots = args.state.storylines.find_all do |hs|~ ** Processing line: ~ args.state.player.inside_rect?(hs.shift_rect(-2, 0))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if !null_or_empty?(hotspots) && !args.state.inside_storyline_hotspot~ ** Processing line: ~ _, _, _, _, storyline = hotspots.first~ ** Processing line: ~ queue_storyline_text(args, storyline)~ ** Processing line: ~ args.state.inside_storyline_hotspot = true~ ** Processing line: ~ elsif null_or_empty?(hotspots)~ ** Processing line: ~ args.state.inside_storyline_hotspot = false~ ** Processing line: ~~ ** Processing line: ~ args.state.storyline_queue_empty_at ||= args.state.tick_count~ ** Processing line: ~ args.state.is_storyline_dialog_active = false~ ** Processing line: ~ args.state.scene_storyline_queue.clear~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_scenes args~ ** Processing line: ~ hotspots = args.state.scenes.find_all do |hs|~ ** Processing line: ~ args.state.player.inside_rect?(hs.shift_rect(-2, 0))~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if !null_or_empty?(hotspots) && !args.state.inside_scene_hotspot~ ** Processing line: ~ _, _, _, _, scene_method_or_hash = hotspots.first~ ** Processing line: ~ if scene_method_or_hash.is_a? Symbol~ ** Processing line: ~ set_scene(args, send(scene_method_or_hash, args))~ ** Processing line: ~ args.state.last_hotspot_scene = scene_method_or_hash~ ** Processing line: ~ args.state.scene_history << scene_method_or_hash~ ** Processing line: ~ else~ ** Processing line: ~ set_scene(args, scene_method_or_hash)~ ** Processing line: ~ end~ ** Processing line: ~ args.state.inside_scene_hotspot = true~ ** Processing line: ~ elsif null_or_empty?(hotspots)~ ** Processing line: ~ args.state.inside_scene_hotspot = false~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def null_or_whitespace? word~ ** Processing line: ~ return true if !word~ ** Processing line: ~ return true if word.strip.length == 0~ ** Processing line: ~ return false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_storyline_presentation args~ ** Processing line: ~ return unless args.state.tick_count > args.state.next_storyline~ ** Processing line: ~ return unless args.state.scene_storyline_queue~ ** Processing line: ~ next_storyline = args.state.scene_storyline_queue.shift~ ** Processing line: ~ if null_or_whitespace? next_storyline~ ** Processing line: ~ args.state.storyline_queue_empty_at ||= args.state.tick_count~ ** Processing line: ~ args.state.is_storyline_dialog_active = false~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~ args.state.storyline_to_show = next_storyline~ ** Processing line: ~ args.state.is_storyline_dialog_active = true~ ** Processing line: ~ args.state.storyline_queue_empty_at = nil~ ** Processing line: ~ if next_storyline.end_with?(".") || next_storyline.end_with?("!") || next_storyline.end_with?("?") || next_storyline.end_with?("\"")~ ** Processing line: ~ args.state.next_storyline += 60~ ** Processing line: ~ elsif next_storyline.end_with?(",")~ ** Processing line: ~ args.state.next_storyline += 50~ ** Processing line: ~ elsif next_storyline.end_with?(":")~ ** Processing line: ~ args.state.next_storyline += 60~ ** Processing line: ~ else~ ** Processing line: ~ default_word_delay = 13 + args.state.word_delay - 8~ ** Processing line: ~ if next_storyline.gsub("-", "").gsub("~", "").length <= 4~ ** Processing line: ~ default_word_delay = 11 + args.state.word_delay - 8~ ** Processing line: ~ end~ ** Processing line: ~ number_of_syllabals = next_storyline.length - next_storyline.gsub("-", "").length~ ** Processing line: ~ args.state.next_storyline += default_word_delay + number_of_syllabals * (args.state.word_delay + 1)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inputs_reload_current_scene args~ ** Processing line: ~ return~ ** Processing line: ~ if args.inputs.keyboard.key_down.r!~ ** Processing line: ~ reload_current_scene~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inputs_dismiss_current_storyline args~ ** Processing line: ~ if args.inputs.keyboard.key_down.x!~ ** Processing line: ~ args.state.scene_storyline_queue.clear~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inputs_restart_game args~ ** Processing line: ~ if args.inputs.keyboard.exclamation_point~ ** Processing line: ~ args.gtk.reset_state~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inputs_change_word_delay args~ ** Processing line: ~ if args.inputs.keyboard.key_down.plus || args.inputs.keyboard.key_down.equal_sign~ ** Processing line: ~ args.state.word_delay -= 2~ ** Processing line: ~ if args.state.word_delay < 0~ ** Processing line: ~ args.state.word_delay = 0~ ** Processing line: ~ # queue_storyline_text args, "Text speed at MAXIMUM. Geez, how fast do you read?"~ ** Processing line: ~ else~ ** Processing line: ~ # queue_storyline_text args, "Text speed INCREASED."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.keyboard.key_down.hyphen || args.inputs.keyboard.key_down.underscore~ ** Processing line: ~ args.state.word_delay += 2~ ** Processing line: ~ # queue_storyline_text args, "Text speed DECREASED."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def multiple_lines args, x, y, texts, size = 0, minimum_alpha = nil~ ** Processing line: ~ texts.each_with_index.map do |t, i|~ ** Processing line: ~ [x, y - i * (25 + size * 2), t, size, 0, 255, 255, 255, adornments_alpha(args, 255, minimum_alpha)]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def lowrez_tick args, lowrez_sprites, lowrez_labels, lowrez_borders, lowrez_solids, lowrez_mouse~ ** Processing line: ~ # args.state.show_gridlines = true~ ** Processing line: ~ defaults args~ ** Processing line: ~ render_current_scene args, lowrez_sprites, lowrez_labels, lowrez_solids~ ** Processing line: ~ render_controller args, lowrez_borders~ ** Processing line: ~ lowrez_solids << [0, 0, 64, 64, 0, 0, 0]~ ** Processing line: ~ calc_storyline_presentation args~ ** Processing line: ~ calc_scenes args~ ** Processing line: ~ calc_storyline_hotspot args~ ** Processing line: ~ inputs_move_player args~ ** Processing line: ~ inputs_print_mouse_rect args, lowrez_mouse~ ** Processing line: ~ inputs_reload_current_scene args~ ** Processing line: ~ inputs_dismiss_current_storyline args~ ** Processing line: ~ inputs_change_word_delay args~ ** Processing line: ~ inputs_restart_game args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_controller args, lowrez_borders~ ** Processing line: ~ args.state.up_button = [85, 40, 15, 15, 255, 255, 255]~ ** Processing line: ~ args.state.down_button = [85, 20, 15, 15, 255, 255, 255]~ ** Processing line: ~ args.state.left_button = [65, 20, 15, 15, 255, 255, 255]~ ** Processing line: ~ args.state.right_button = [105, 20, 15, 15, 255, 255, 255]~ ** Processing line: ~ lowrez_borders << args.state.up_button~ ** Processing line: ~ lowrez_borders << args.state.down_button~ ** Processing line: ~ lowrez_borders << args.state.left_button~ ** Processing line: ~ lowrez_borders << args.state.right_button~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inputs_print_mouse_rect args, lowrez_mouse~ ** Processing line: ~ if lowrez_mouse.up~ ** Processing line: ~ args.state.mouse_held = false~ ** Processing line: ~ elsif lowrez_mouse.click~ ** Processing line: ~ mouse_rect = [lowrez_mouse.x, lowrez_mouse.y, 1, 1]~ ** Processing line: ~ if args.state.up_button.intersect_rect? mouse_rect~ ** Processing line: ~ args.state.player.y += 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.down_button.intersect_rect? mouse_rect~ ** Processing line: ~ args.state.player.y -= 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.left_button.intersect_rect? mouse_rect~ ** Processing line: ~ args.state.player.x -= 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.right_button.intersect_rect? mouse_rect~ ** Processing line: ~ args.state.player.x += 1~ ** Processing line: ~ end~ ** Processing line: ~ args.state.mouse_held = true~ ** Processing line: ~ elsif args.state.mouse_held~ ** Processing line: ~ mouse_rect = [lowrez_mouse.x, lowrez_mouse.y, 1, 1]~ ** Processing line: ~ if args.state.up_button.intersect_rect? mouse_rect~ ** Processing line: ~ args.state.player.y += 0.25~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.down_button.intersect_rect? mouse_rect~ ** Processing line: ~ args.state.player.y -= 0.25~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.left_button.intersect_rect? mouse_rect~ ** Processing line: ~ args.state.player.x -= 0.25~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.state.right_button.intersect_rect? mouse_rect~ ** Processing line: ~ args.state.player.x += 0.25~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if lowrez_mouse.click~ ** Processing line: ~ dx = lowrez_mouse.click.x - args.state.previous_mouse_click.x~ ** Processing line: ~ dy = lowrez_mouse.click.y - args.state.previous_mouse_click.y~ ** Processing line: ~ x, y, w, h = args.state.previous_mouse_click.x, args.state.previous_mouse_click.y, dx, dy~ ** Processing line: ~ puts "x #{lowrez_mouse.click.x}, y: #{lowrez_mouse.click.y}"~ ** Processing line: ~ if args.state.previous_mouse_click~ ** Processing line: ~~ ** Processing line: ~ if dx < 0 && dx < 0~ ** Processing line: ~ x = x + w~ ** Processing line: ~ w = w.abs~ ** Processing line: ~ y = y + h~ ** Processing line: ~ h = h.abs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ w += 1~ ** Processing line: ~ h += 1~ ** Processing line: ~~ ** Processing line: ~ args.state.previous_mouse_click = nil~ ** Processing line: ~ else~ ** Processing line: ~ args.state.previous_mouse_click = lowrez_mouse.click~ ** Processing line: ~ square_x, square_y = lowrez_mouse.click~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def try_centering! word~ ** Processing line: ~ word ||= ""~ ** Processing line: ~ just_word = word.gsub("-", "").gsub(",", "").gsub(".", "").gsub("'", "").gsub('""', "\"-\"")~ ** Processing line: ~ return word if just_word.strip.length == 0~ ** Processing line: ~ return word if just_word.include? "~"~ ** Processing line: ~ return "~#{word}" if just_word.length <= 2~ ** Processing line: ~ if just_word.length.mod_zero? 2~ ** Processing line: ~ center_index = just_word.length.idiv(2) - 1~ ** Processing line: ~ else~ ** Processing line: ~ center_index = (just_word.length - 1).idiv(2)~ ** Processing line: ~ end~ ** Processing line: ~ return "#{word[0..center_index - 1]}~#{word[center_index]}#{word[center_index + 1..-1]}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def queue_storyline args, scene~ ** Processing line: ~ queue_storyline_text args, scene[:storyline]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def queue_storyline_text args, text~ ** Processing line: ~ args.state.last_story_line_text = text~ ** Processing line: ~ args.state.storyline_history << text if text~ ** Processing line: ~ words = (text || "").split(" ")~ ** Processing line: ~ words = words.map { |w| try_centering! w }~ ** Processing line: ~ args.state.scene_storyline_queue = words~ ** Processing line: ~ if args.state.scene_storyline_queue.length != 0~ ** Processing line: ~ args.state.scene_storyline_queue.unshift "~$--"~ ** Processing line: ~ args.state.storyline_to_show = "~."~ ** Processing line: ~ else~ ** Processing line: ~ args.state.storyline_to_show = ""~ ** Processing line: ~ end~ ** Processing line: ~ args.state.scene_storyline_queue << ""~ ** Processing line: ~ args.state.next_storyline = args.state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_scene args, scene~ ** Processing line: ~ args.state.current_scene = scene~ ** Processing line: ~ args.state.background = scene[:background] || 'sprites/todo.png'~ ** Processing line: ~ args.state.scene_fade = scene[:fade] || 0~ ** Processing line: ~ args.state.scenes = (scene[:scenes] || []).reject { |s| !s }~ ** Processing line: ~ args.state.scene_render_override = scene[:render_override]~ ** Processing line: ~ args.state.storylines = (scene[:storylines] || []).reject { |s| !s }~ ** Processing line: ~ args.state.scene_changed_at = args.state.tick_count~ ** Processing line: ~ if scene[:player]~ ** Processing line: ~ args.state.player = scene[:player]~ ** Processing line: ~ end~ ** Processing line: ~ args.state.inside_scene_hotspot = false~ ** Processing line: ~ args.state.inside_storyline_hotspot = false~ ** Processing line: ~ queue_storyline args, scene~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replay_storyline_rect~ ** Processing line: ~ [26, -1, 7, 4]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def labels_for_word word~ ** Processing line: ~ left_side_of_word = ""~ ** Processing line: ~ center_letter = ""~ ** Processing line: ~ right_side_of_word = ""~ ** Processing line: ~~ ** Processing line: ~ if word[0] == "~"~ ** Processing line: ~ left_side_of_word = ""~ ** Processing line: ~ center_letter = word[1]~ ** Processing line: ~ right_side_of_word = word[2..-1]~ ** Processing line: ~ elsif word.length > 0~ ** Processing line: ~ left_side_of_word, right_side_of_word = word.split("~")~ ** Processing line: ~ center_letter = right_side_of_word[0]~ ** Processing line: ~ right_side_of_word = right_side_of_word[1..-1]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ right_side_of_word = right_side_of_word.gsub("-", "")~ ** Processing line: ~~ ** Processing line: ~ {~ ** Processing line: ~ left: [29 - left_side_of_word.length * 4 - 1 * left_side_of_word.length, 2, left_side_of_word],~ ** Processing line: ~ center: [29, 2, center_letter, 255, 0, 0],~ ** Processing line: ~ right: [34, 2, right_side_of_word]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_scenes args, lowrez_sprites~ ** Processing line: ~ lowrez_sprites << args.state.scenes.flat_map do |hs|~ ** Processing line: ~ hotspot_square args, hs.x, hs.y, hs.w, hs.h~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_storylines args, lowrez_sprites~ ** Processing line: ~ lowrez_sprites << args.state.storylines.flat_map do |hs|~ ** Processing line: ~ hotspot_square args, hs.x, hs.y, hs.w, hs.h~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def adornments_alpha args, target_alpha = nil, minimum_alpha = nil~ ** Processing line: ~ return (minimum_alpha || 80) unless args.state.storyline_queue_empty_at~ ** Processing line: ~ target_alpha ||= 255~ ** Processing line: ~ target_alpha * args.state.storyline_queue_empty_at.ease(60)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def hotspot_square args, x, y, w, h~ ** Processing line: ~ if w >= 3 && h >= 3~ ** Processing line: ~ [~ ** Processing line: ~ [x + w.idiv(2) + 1, y, w.idiv(2), h, 'sprites/label-background.png', 0, adornments_alpha(args, 50), 23, 23, 23],~ ** Processing line: ~ [x, y, w.idiv(2), h, 'sprites/label-background.png', 0, adornments_alpha(args, 100), 223, 223, 223],~ ** Processing line: ~ [x + 1, y + 1, w - 2, h - 2, 'sprites/label-background.png', 0, adornments_alpha(args, 200), 40, 140, 40],~ ** Processing line: ~ ]~ ** Processing line: ~ else~ ** Processing line: ~ [~ ** Processing line: ~ [x, y, w, h, 'sprites/label-background.png', 0, adornments_alpha(args, 200), 0, 140, 0],~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_storyline_dialog args, lowrez_labels, lowrez_sprites~ ** Processing line: ~ return unless args.state.is_storyline_dialog_active~ ** Processing line: ~ return unless args.state.storyline_to_show~ ** Processing line: ~ labels = labels_for_word args.state.storyline_to_show~ ** Processing line: ~ if true # high rez version~ ** Processing line: ~ scale = 8.88~ ** Processing line: ~ offset = 45~ ** Processing line: ~ size = 25~ ** Processing line: ~ args.outputs.labels << [offset + labels[:left].x.-(1) * scale,~ ** Processing line: ~ labels[:left].y * TINY_SCALE + 55,~ ** Processing line: ~ labels[:left].text, size, 0, 0, 0, 0, 255,~ ** Processing line: ~ 'fonts/manaspc.ttf']~ ** Processing line: ~ center_text = labels[:center].text~ ** Processing line: ~ center_text = "|" if center_text == "$"~ ** Processing line: ~ args.outputs.labels << [offset + labels[:center].x * scale,~ ** Processing line: ~ labels[:center].y * TINY_SCALE + 55,~ ** Processing line: ~ center_text, size, 0, 255, 0, 0, 255,~ ** Processing line: ~ 'fonts/manaspc.ttf']~ ** Processing line: ~ args.outputs.labels << [offset + labels[:right].x * scale,~ ** Processing line: ~ labels[:right].y * TINY_SCALE + 55,~ ** Processing line: ~ labels[:right].text, size, 0, 0, 0, 0, 255,~ ** Processing line: ~ 'fonts/manaspc.ttf']~ ** Processing line: ~ else~ ** Processing line: ~ lowrez_labels << labels[:left]~ ** Processing line: ~ lowrez_labels << labels[:center]~ ** Processing line: ~ lowrez_labels << labels[:right]~ ** Processing line: ~ end~ ** Processing line: ~ args.state.is_storyline_dialog_active = true~ ** Processing line: ~ render_player args, lowrez_sprites~ ** Processing line: ~ lowrez_sprites << [0, 0, 64, 8, 'sprites/label-background.png']~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_player args, lowrez_sprites~ ** Processing line: ~ lowrez_sprites << player_md_down(args, *args.state.player)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_adornments args, lowrez_sprites~ ** Processing line: ~ render_scenes args, lowrez_sprites~ ** Processing line: ~ render_storylines args, lowrez_sprites~ ** Processing line: ~ return if args.state.is_storyline_dialog_active~ ** Processing line: ~ lowrez_sprites << player_md_down(args, *args.state.player)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def global_alpha_percentage args, max_alpha = 255~ ** Processing line: ~ return 255 unless args.state.scene_changed_at~ ** Processing line: ~ return 255 unless args.state.scene_fade~ ** Processing line: ~ return 255 unless args.state.scene_fade > 0~ ** Processing line: ~ return max_alpha * args.state.scene_changed_at.ease(args.state.scene_fade)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_current_scene args, lowrez_sprites, lowrez_labels, lowrez_solids~ ** Processing line: ~ lowrez_sprites << [0, 0, 64, 64, args.state.background, 0, (global_alpha_percentage args)]~ ** Processing line: ~ if args.state.scene_render_override~ ** Processing line: ~ send args.state.scene_render_override, args, lowrez_sprites, lowrez_labels, lowrez_solids~ ** Processing line: ~ end~ ** Processing line: ~ storyline_to_show = args.state.storyline_to_show || ""~ ** Processing line: ~ render_adornments args, lowrez_sprites~ ** Processing line: ~ render_storyline_dialog args, lowrez_labels, lowrez_sprites~ ** Processing line: ~~ ** Processing line: ~ if args.state.background == 'sprites/tribute-game-over.png'~ ** Processing line: ~ lowrez_sprites << [0, 0, 64, 11, 'sprites/label-background.png', 0, adornments_alpha(args, 200), 0, 0, 0]~ ** Processing line: ~ lowrez_labels << [9, 6, 'Return of', 255, 255, 255]~ ** Processing line: ~ lowrez_labels << [9, 1, ' Serenity', 255, 255, 255]~ ** Processing line: ~ if !args.state.ended~ ** Processing line: ~ args.gtk.stop_music~ ** Processing line: ~ args.outputs.sounds << 'sounds/music-loop.ogg'~ ** Processing line: ~ args.state.ended = true~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_md_right args, x, y~ ** Processing line: ~ [x, y, 4, 11, 'sprites/player-right.png', 0, (global_alpha_percentage args)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_md_left args, x, y~ ** Processing line: ~ [x, y, 4, 11, 'sprites/player-left.png', 0, (global_alpha_percentage args)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_md_up args, x, y~ ** Processing line: ~ [x, y, 4, 11, 'sprites/player-up.png', 0, (global_alpha_percentage args)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_md_down args, x, y~ ** Processing line: ~ [x, y, 4, 11, 'sprites/player-down.png', 0, (global_alpha_percentage args)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_sm args, x, y~ ** Processing line: ~ [x, y, 3, 7, 'sprites/player-zoomed-out.png', 0, (global_alpha_percentage args)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def player_xs args, x, y~ ** Processing line: ~ [x, y, 1, 4, 'sprites/player-zoomed-out.png', 0, (global_alpha_percentage args)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Return Of Serenity - require.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - require.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - require.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/require.rb~ ** Processing line: ~ require 'app/lowrez_simulator.rb'~ ** Processing line: ~ require 'app/storyline_day_one.rb'~ ** Processing line: ~ require 'app/storyline_blinking_light.rb'~ ** Processing line: ~ require 'app/storyline_serenity_introduction.rb'~ ** Processing line: ~ require 'app/storyline_speed_of_light.rb'~ ** Processing line: ~ require 'app/storyline_serenity_alive.rb'~ ** Processing line: ~ require 'app/storyline_serenity_bio.rb'~ ** Processing line: ~ require 'app/storyline_anka.rb'~ ** Processing line: ~ require 'app/storyline_final_message.rb'~ ** Processing line: ~ require 'app/storyline_final_decision.rb'~ ** Processing line: ~ require 'app/storyline.rb'~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline.rb~ ** Processing line: ~ def hotspot_top~ ** Processing line: ~ [4, 61, 56, 3]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def hotspot_bottom~ ** Processing line: ~ [4, 0, 56, 3]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def hotspot_top_right~ ** Processing line: ~ [62, 35, 3, 25]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def hotspot_bottom_right~ ** Processing line: ~ [62, 0, 3, 25]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def storyline_history_include? args, text~ ** Processing line: ~ args.state.storyline_history.any? { |s| s.gsub("-", "").gsub(" ", "").include? text.gsub("-", "").gsub(" ", "") }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def blinking_light_side_of_home_render args, lowrez_sprites, lowrez_labels, lowrez_solids~ ** Processing line: ~ lowrez_sprites << [48, 44, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ lowrez_sprites << [49, 45, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ lowrez_sprites << [50, 46, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def blinking_light_mountain_pass_render args, lowrez_sprites, lowrez_labels, lowrez_solids~ ** Processing line: ~ lowrez_sprites << [18, 47, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ lowrez_sprites << [19, 48, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ lowrez_sprites << [20, 49, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def blinking_light_path_to_observatory_render args, lowrez_sprites, lowrez_labels, lowrez_solids~ ** Processing line: ~ lowrez_sprites << [0, 26, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ lowrez_sprites << [1, 27, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ lowrez_sprites << [2, 28, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def blinking_light_observatory_render args, lowrez_sprites, lowrez_labels, lowrez_solids~ ** Processing line: ~ lowrez_sprites << [23, 59, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ lowrez_sprites << [24, 60, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ lowrez_sprites << [25, 61, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def blinking_light_inside_observatory_render args, lowrez_sprites, lowrez_labels, lowrez_solids~ ** Processing line: ~ lowrez_sprites << [30, 30, 5, 5, 'sprites/square.png', 0, 50 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ lowrez_sprites << [31, 31, 3, 3, 'sprites/square.png', 0, 100 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ lowrez_sprites << [32, 32, 1, 1, 'sprites/square.png', 0, 255 * (args.state.tick_count % 50).fdiv(50), 0, 255, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def decision_graph context_message, context_action, context_result_one, context_result_two, context_result_three = [], context_result_four = []~ ** Processing line: ~ result_one_scene, result_one_label, result_one_text = context_result_one~ ** Processing line: ~ result_two_scene, result_two_label, result_two_text = context_result_two~ ** Processing line: ~ result_three_scene, result_three_label, result_three_text = context_result_three~ ** Processing line: ~ result_four_scene, result_four_label, result_four_text = context_result_four~ ** Processing line: ~~ ** Processing line: ~ top_level_hash = {~ ** Processing line: ~ background: 'sprites/decision.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [20, 36],~ ** Processing line: ~ storylines: [ ],~ ** Processing line: ~ scenes: [ ]~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ confirmation_result_one_hash = {~ ** Processing line: ~ background: 'sprites/decision.png',~ ** Processing line: ~ scenes: [ ],~ ** Processing line: ~ storylines: [ ]~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ confirmation_result_two_hash = {~ ** Processing line: ~ background: 'sprites/decision.png',~ ** Processing line: ~ scenes: [ ],~ ** Processing line: ~ storylines: [ ]~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ confirmation_result_three_hash = {~ ** Processing line: ~ background: 'sprites/decision.png',~ ** Processing line: ~ scenes: [ ],~ ** Processing line: ~ storylines: [ ]~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ confirmation_result_four_hash = {~ ** Processing line: ~ background: 'sprites/decision.png',~ ** Processing line: ~ scenes: [ ],~ ** Processing line: ~ storylines: [ ]~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ top_level_hash[:storylines] << [ 5, 35, 4, 4, context_message]~ ** Processing line: ~ top_level_hash[:storylines] << [20, 35, 4, 4, context_action]~ ** Processing line: ~~ ** Processing line: ~ confirmation_result_one_hash[:scenes] << [20, 35, 4, 4, top_level_hash]~ ** Processing line: ~ confirmation_result_one_hash[:scenes] << [60, 50, 4, 4, result_one_scene]~ ** Processing line: ~ confirmation_result_one_hash[:storylines] << [40, 50, 4, 4, "#{result_one_label}: \"#{result_one_text}\""]~ ** Processing line: ~ confirmation_result_one_hash[:scenes] << [40, 40, 4, 4, confirmation_result_four_hash] if result_four_scene~ ** Processing line: ~ confirmation_result_one_hash[:scenes] << [40, 30, 4, 4, confirmation_result_three_hash] if result_three_scene~ ** Processing line: ~ confirmation_result_one_hash[:scenes] << [40, 20, 4, 4, confirmation_result_two_hash]~ ** Processing line: ~~ ** Processing line: ~ confirmation_result_two_hash[:scenes] << [20, 35, 4, 4, top_level_hash]~ ** Processing line: ~ confirmation_result_two_hash[:scenes] << [40, 50, 4, 4, confirmation_result_one_hash]~ ** Processing line: ~ confirmation_result_two_hash[:scenes] << [40, 40, 4, 4, confirmation_result_four_hash] if result_four_scene~ ** Processing line: ~ confirmation_result_two_hash[:scenes] << [40, 30, 4, 4, confirmation_result_three_hash] if result_three_scene~ ** Processing line: ~ confirmation_result_two_hash[:scenes] << [60, 20, 4, 4, result_two_scene]~ ** Processing line: ~ confirmation_result_two_hash[:storylines] << [40, 20, 4, 4, "#{result_two_label}: \"#{result_two_text}\""]~ ** Processing line: ~~ ** Processing line: ~ confirmation_result_three_hash[:scenes] << [20, 35, 4, 4, top_level_hash]~ ** Processing line: ~ confirmation_result_three_hash[:scenes] << [40, 50, 4, 4, confirmation_result_one_hash]~ ** Processing line: ~ confirmation_result_three_hash[:scenes] << [40, 40, 4, 4, confirmation_result_four_hash]~ ** Processing line: ~ confirmation_result_three_hash[:scenes] << [60, 30, 4, 4, result_three_scene]~ ** Processing line: ~ confirmation_result_three_hash[:storylines] << [40, 30, 4, 4, "#{result_three_label}: \"#{result_three_text}\""]~ ** Processing line: ~ confirmation_result_three_hash[:scenes] << [40, 20, 4, 4, confirmation_result_two_hash]~ ** Processing line: ~~ ** Processing line: ~ confirmation_result_four_hash[:scenes] << [20, 35, 4, 4, top_level_hash]~ ** Processing line: ~ confirmation_result_four_hash[:scenes] << [40, 50, 4, 4, confirmation_result_one_hash]~ ** Processing line: ~ confirmation_result_four_hash[:scenes] << [60, 40, 4, 4, result_four_scene]~ ** Processing line: ~ confirmation_result_four_hash[:storylines] << [40, 40, 4, 4, "#{result_four_label}: \"#{result_four_text}\""]~ ** Processing line: ~ confirmation_result_four_hash[:scenes] << [40, 30, 4, 4, confirmation_result_three_hash]~ ** Processing line: ~ confirmation_result_four_hash[:scenes] << [40, 20, 4, 4, confirmation_result_two_hash]~ ** Processing line: ~~ ** Processing line: ~ top_level_hash[:scenes] << [40, 50, 4, 4, confirmation_result_one_hash]~ ** Processing line: ~ top_level_hash[:scenes] << [40, 40, 4, 4, confirmation_result_four_hash] if result_four_scene~ ** Processing line: ~ top_level_hash[:scenes] << [40, 30, 4, 4, confirmation_result_three_hash] if result_three_scene~ ** Processing line: ~ top_level_hash[:scenes] << [40, 20, 4, 4, confirmation_result_two_hash]~ ** Processing line: ~~ ** Processing line: ~ top_level_hash~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def ship_control_hotspot offset_x, offset_y, a, b, c, d~ ** Processing line: ~ results = []~ ** Processing line: ~ results << [ 6 + offset_x, 0 + offset_y, 4, 4, a] if a~ ** Processing line: ~ results << [ 1 + offset_x, 5 + offset_y, 4, 4, b] if b~ ** Processing line: ~ results << [ 6 + offset_x, 5 + offset_y, 4, 4, c] if c~ ** Processing line: ~ results << [ 11 + offset_x, 5 + offset_y, 4, 4, d] if d~ ** Processing line: ~ results~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reload_current_scene~ ** Processing line: ~ if $gtk.args.state.last_hotspot_scene~ ** Processing line: ~ set_scene $gtk.args, send($gtk.args.state.last_hotspot_scene, $gtk.args)~ ** Processing line: ~ tick $gtk.args~ ** Processing line: ~ elsif respond_to? :set_scene~ ** Processing line: ~ set_scene $gtk.args, (replied_to_serenity_alive_firmly $gtk.args)~ ** Processing line: ~ tick $gtk.args~ ** Processing line: ~ end~ ** Processing line: ~ $gtk.console.close~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_anka.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_anka.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_anka.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_anka.rb~ ** Processing line: ~ def anka_inside_room args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-home.png',~ ** Processing line: ~ player: [34, 35],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [34, 34, 4, 4, "Ahhhh!!! Oh god, it was just- a nightmare."],~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [32, -1, 8, 3, :anka_observatory]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def anka_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [51, 12],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [50, 10, 4, 4, "Breathe, Hiro. Just see what's there... everything--- will- be okay."]~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [30, 18, 5, 12, :anka_inside_mainframe]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_inside_observatory_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def anka_inside_mainframe args~ ** Processing line: ~ {~ ** Processing line: ~ player: [32, 4],~ ** Processing line: ~ background: 'sprites/mainframe.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [22, 45, 17, 4, (anka_last_reply args)],~ ** Processing line: ~ [45, 45, 4, 4, (anka_current_reply args)],~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [*hotspot_top_right, :reply_to_anka]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reply_to_anka args~ ** Processing line: ~ decision_graph anka_current_reply(args),~ ** Processing line: ~ "Matthew's-- wife is doing-- well. What's-- even-- better-- is that he's-- a dad, and he didn't-- even-- know it. Should- I- leave- out the part about-- the crew- being-- in hibernation-- for 20-- years? They- should- enter-- statis-- on a high- note... Right?",~ ** Processing line: ~ [:replied_with_whole_truth, "Whole-- Truth--", anka_reply_whole_truth],~ ** Processing line: ~ [:replied_with_half_truth, "Half-- Truth--", anka_reply_half_truth]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def anka_last_reply args~ ** Processing line: ~ if args.state.scene_history.include? :replied_to_serenity_alive_firmly~ ** Processing line: ~ return "Buffer--: #{serenity_alive_firm_reply.quote}"~ ** Processing line: ~ else~ ** Processing line: ~ return "Buffer--: #{serenity_alive_sugarcoated_reply.quote}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def anka_reply_whole_truth~ ** Processing line: ~ "Matthew's wife is doing-- very-- well. In fact, she was pregnant. Matthew-- is a dad. He has a son. But, I need- all-- of-- you-- to brace-- yourselves. You've-- been in statis-- for 20 years. A lot has changed. Most of Earth's-- population--- didn't-- survive. Tell- Matthew-- that I'm-- sorry he didn't-- get to see- his- son grow- up."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def anka_reply_half_truth~ ** Processing line: ~ "Matthew's--- wife- is doing-- very-- well. In fact, she was pregnant. Matthew is a dad! It's a boy! Tell- Matthew-- congrats-- for me. Hope-- to see- all of you- soon."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replied_with_whole_truth args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [32, 21],~ ** Processing line: ~ scenes: [[60, 0, 4, 32, :replied_to_anka_back_home]],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [30, 18, 5, 12, "Buffer-- has been set to: #{anka_reply_whole_truth.quote}"],~ ** Processing line: ~ [30, 10, 5, 4, "I- hope- I- did the right- thing- by laying-- it all- out- there."],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replied_with_half_truth args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [32, 21],~ ** Processing line: ~ scenes: [[60, 0, 4, 32, :replied_to_anka_back_home]],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [30, 18, 5, 12, "Buffer-- has been set to: #{anka_reply_half_truth.quote}"],~ ** Processing line: ~ [30, 10, 5, 4, "I- hope- I- did the right- thing- by not giving-- them- the whole- truth."],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def anka_current_reply args~ ** Processing line: ~ if args.state.scene_history.include? :replied_to_serenity_alive_firmly~ ** Processing line: ~ return "Hello. This is, Aanka. Sasha-- is still- trying-- to gather-- her wits about-- her, given- the gravity--- of your- last- reply. Thank- you- for being-- honest, and thank- you- for the help- with the ship- diagnostics. I was able-- to retrieve-- all of the navigation--- information---- after-- the battery--- swap. We- are ready-- to head back to Earth. Before-- we go- back- into-- statis, Matthew--- wanted-- to know- how his- wife- is doing. Please- reply-- as soon- as you can. He's-- not going-- to get- into-- the statis-- chamber-- until-- he knows- his wife is okay."~ ** Processing line: ~ else~ ** Processing line: ~ return "Hello. This is, Aanka. Thank- you for the help- with the ship's-- diagnostics. I was able-- to retrieve-- all of the navigation--- information--- after-- the battery-- swap. I- know-- that- you didn't-- tell- the whole truth- about-- how far we are from- Earth. Don't-- worry. I understand-- why you did it. We- are ready-- to head back to Earth. Before-- we go- back- into-- statis, Matthew--- wanted-- to know- how his- wife- is doing. Please- reply-- as soon- as you can. He's-- not going-- to get- into-- the statis-- chamber-- until-- he knows- his wife is okay."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replied_to_anka_back_home args~ ** Processing line: ~ if args.state.scene_history.include? :replied_with_whole_truth~ ** Processing line: ~ return {~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ background: 'sprites/inside-home.png',~ ** Processing line: ~ player: [34, 4],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [34, 4, 4, 4, "I- hope-- this pit in my stomach-- is gone-- by tomorrow---."],~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [30, 38, 12, 13, :final_message_sad],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ else~ ** Processing line: ~ return {~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ background: 'sprites/inside-home.png',~ ** Processing line: ~ player: [34, 4],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [34, 4, 4, 4, "I- get the feeling-- I'm going-- to sleep real well tonight--."],~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [30, 38, 12, 13, :final_message_happy],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_blinking_light.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_blinking_light.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_blinking_light.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_blinking_light.rb~ ** Processing line: ~ def the_blinking_light args~ ** Processing line: ~ {~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ background: 'sprites/side-of-home.png',~ ** Processing line: ~ player: [16, 13],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [52, 24, 11, 5, :blinking_light_mountain_pass],~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_side_of_home_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def blinking_light_mountain_pass args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/mountain-pass-zoomed-out.png',~ ** Processing line: ~ player: [4, 4],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [18, 47, 5, 5, :blinking_light_path_to_observatory]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_mountain_pass_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def blinking_light_path_to_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/path-to-observatory.png',~ ** Processing line: ~ player: [60, 4],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [0, 26, 5, 5, :blinking_light_observatory]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_path_to_observatory_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def blinking_light_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/observatory.png',~ ** Processing line: ~ player: [60, 2],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [28, 39, 4, 10, :blinking_light_inside_observatory]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_observatory_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def blinking_light_inside_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ player: [60, 2],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [50, 2, 4, 8, "That's weird. I thought- this- mainframe-- was broken--."]~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [30, 18, 5, 12, :blinking_light_inside_mainframe]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_inside_observatory_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def blinking_light_inside_mainframe args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/mainframe.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [30, 4],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [62, 32, 4, 32, :reply_to_introduction]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [43, 43, 8, 8, "\"Mission-- control--, your- main- comm-- channels-- seem-- to be down. My apologies-- for- using-- this low- level-- exploit--. What's-- going-- on down there? We are ready-- for reentry--.\" Message--- Timestamp---: 4- hours-- 23--- minutes-- ago--."],~ ** Processing line: ~ [30, 30, 4, 4, "There's-- a low- level-- message-- here... NANI.T.F?"],~ ** Processing line: ~ [14, 10, 24, 4, "Oh interesting---. This transistor--- needed-- to be activated--- for the- mainframe-- to work."],~ ** Processing line: ~ [14, 20, 24, 4, "What the heck activated--- this thing- though?"]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_day_one.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_day_one.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_day_one.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_day_one.rb~ ** Processing line: ~ def day_one_beginning args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/side-of-home.png',~ ** Processing line: ~ player: [16, 13],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [0, 0, 64, 2, :day_one_infront_of_home],~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [35, 10, 6, 6, "Man. Hard to believe- that today- is the 20th--- anniversary-- of The Impact."]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def day_one_infront_of_home args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/front-of-home.png',~ ** Processing line: ~ player: [56, 23],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [43, 34, 10, 16, :day_one_home],~ ** Processing line: ~ [62, 0, 3, 40, :day_one_beginning],~ ** Processing line: ~ [0, 4, 3, 20, :day_one_ceremony]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [40, 20, 4, 4, "It looks like everyone- is already- at the rememberance-- ceremony."],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def day_one_home args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-home.png',~ ** Processing line: ~ player: [34, 3],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [28, 0, 12, 2, :day_one_infront_of_home]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [~ ** Processing line: ~ 38, 4, 4, 4, "My mansion- in all its glory! Okay yea, it's just a shipping- container-. Apparently-, it's nothing- like the luxuries- of the 2040's. But it's- all we have- in- this day and age. And it'll suffice."~ ** Processing line: ~ ],~ ** Processing line: ~ [~ ** Processing line: ~ 28, 7, 4, 7,~ ** Processing line: ~ "Ahhh. My reading- couch. It's so comfortable--."~ ** Processing line: ~ ],~ ** Processing line: ~ [~ ** Processing line: ~ 38, 21, 4, 4,~ ** Processing line: ~ "I'm- lucky- to have a computer--. I'm- one of the few people- with- the skills to put this- thing to good use."~ ** Processing line: ~ ],~ ** Processing line: ~ [~ ** Processing line: ~ 45, 37, 4, 8,~ ** Processing line: ~ "This corner- of my home- is always- warmer-. It's cause of the ref~lected-- light- from the solar-- panels--, just on the other- side- of this wall. It's hard- to believe- there was o~nce-- an unlimited- amount- of electricity--."~ ** Processing line: ~ ],~ ** Processing line: ~ [~ ** Processing line: ~ 32, 40, 8, 10,~ ** Processing line: ~ "This isn't- a good time- to sleep. I- should probably- head to the ceremony-."~ ** Processing line: ~ ],~ ** Processing line: ~ [~ ** Processing line: ~ 25, 21, 5, 12,~ ** Processing line: ~ "Fifteen-- years- of computer-- science-- notes, neatly-- organized. Compiler--- Theory--, Linear--- Algebra---, Game-- Development---... Every-- subject-- imaginable--."~ ** Processing line: ~ ]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def day_one_ceremony args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/tribute.png',~ ** Processing line: ~ player: [57, 21],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [62, 0, 2, 40, :day_one_infront_of_home],~ ** Processing line: ~ [0, 24, 2, 40, :day_one_infront_of_library]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [53, 12, 3, 8, "It's- been twenty- years since The Impact. Twenty- years, since Halley's-- Comet-- set Earth's- blue- sky on fire."],~ ** Processing line: ~ [45, 12, 3, 8, "The space mission- sent to prevent- Earth's- total- destruction--, was a success. Only- 99.9%------ of the world's- population-- died-- that day. Hey, it's- better-- than 100%---- of humanity-- dying."],~ ** Processing line: ~ [20, 12, 23, 4, "The monument--- reads:---- Here- stands- the tribute-- to Space- Mission-- Serenity--- and- its- crew. You- have- given-- humanity--- a second-- chance."],~ ** Processing line: ~ [15, 12, 3, 8, "Rest- in- peace--- Matthew----, Sasha----, Aanka----"],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def day_one_infront_of_library args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/outside-library.png',~ ** Processing line: ~ player: [57, 21],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [62, 0, 2, 40, :day_one_ceremony],~ ** Processing line: ~ [49, 39, 6, 9, :day_one_library]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [50, 20, 4, 8, "Shipping- containers-- as far- as the eye- can see. It's- rather- beautiful-- if you ask me. Even- though-- this- view- represents-- all- that's-- left- of humanity-."]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def day_one_library args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/library.png',~ ** Processing line: ~ player: [27, 4],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [0, 0, 64, 2, :end_day_one_infront_of_library]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [28, 22, 8, 4, "I grew- up- in this library. I've- read every- book- here. My favorites-- were- of course-- anything- computer-- related."],~ ** Processing line: ~ [6, 32, 10, 6, "My favorite-- area--- of the library. The Science-- Section."]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def end_day_one_infront_of_library args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/outside-library.png',~ ** Processing line: ~ player: [51, 33],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [49, 39, 6, 9, :day_one_library],~ ** Processing line: ~ [62, 0, 2, 40, :end_day_one_monument],~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [50, 27, 4, 4, "It's getting late. Better get some sleep."]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def end_day_one_monument args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/tribute.png',~ ** Processing line: ~ player: [2, 36],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [62, 0, 2, 40, :end_day_one_infront_of_home],~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [50, 27, 4, 4, "It's getting late. Better get some sleep."],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def end_day_one_infront_of_home args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/front-of-home.png',~ ** Processing line: ~ player: [1, 17],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [43, 34, 10, 16, :end_day_one_home],~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [20, 10, 4, 4, "It's getting late. Better get some sleep."],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def end_day_one_home args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-home.png',~ ** Processing line: ~ player: [34, 3],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [32, 40, 8, 10, :end_day_one_dream],~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [38, 4, 4, 4, "It's getting late. Better get some sleep."],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def end_day_one_dream args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/dream.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [4, 4],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [62, 0, 2, 64, :explaining_the_special_power]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [10, 10, 4, 4, "Why- does this- moment-- always- haunt- my dreams?"],~ ** Processing line: ~ [20, 10, 4, 4, "This kid- reads these computer--- science--- books- nonstop-. What's- wrong with him?"],~ ** Processing line: ~ [30, 10, 4, 4, "There- is nothing-- wrong- with him. This behavior-- should be encouraged---! In fact-, I think- he's- special---. Have- you seen- him use- a computer---? It's-- almost-- as if he can- speak-- to it."]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def explaining_the_special_power args~ ** Processing line: ~ {~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ background: 'sprites/inside-home.png',~ ** Processing line: ~ player: [32, 30],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [~ ** Processing line: ~ 38, 21, 4, 4, :explaining_the_special_power_inside_computer~ ** Processing line: ~ ],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def explaining_the_special_power_inside_computer args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/pc.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [34, 4],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [0, 62, 64, 3, :the_blinking_light]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [14, 20, 24, 4, "So... I have a special-- power--. I don't-- need a mouse-, keyboard--, or even-- a monitor--- to control-- a computer--."],~ ** Processing line: ~ [14, 25, 24, 4, "I only-- pretend-- to use peripherals---, so as not- to freak- anyone--- out."],~ ** Processing line: ~ [14, 30, 24, 4, "Inside-- this silicon--- Universe---, is the only-- place I- feel- at peace."],~ ** Processing line: ~ [14, 35, 24, 4, "It's-- the only-- place where I don't-- feel alone."]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_final_decision.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_final_decision.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_final_decision.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_final_decision.rb~ ** Processing line: ~ def final_decision_side_of_home args~ ** Processing line: ~ {~ ** Processing line: ~ fade: 120,~ ** Processing line: ~ background: 'sprites/side-of-home.png',~ ** Processing line: ~ player: [16, 13],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [52, 24, 11, 5, :final_decision_mountain_pass],~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_side_of_home_render,~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [28, 13, 8, 4, "Man. Hard to believe- that today- is the 21st--- anniversary-- of The Impact. Serenity--- will- be- home- soon."]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_decision_mountain_pass args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/mountain-pass-zoomed-out.png',~ ** Processing line: ~ player: [4, 4],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [18, 47, 5, 5, :final_decision_path_to_observatory]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_mountain_pass_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_decision_path_to_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/path-to-observatory.png',~ ** Processing line: ~ player: [60, 4],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [0, 26, 5, 5, :final_decision_observatory]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_path_to_observatory_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_decision_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/observatory.png',~ ** Processing line: ~ player: [60, 2],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [28, 39, 4, 10, :final_decision_inside_observatory]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_observatory_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_decision_inside_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ player: [60, 2],~ ** Processing line: ~ storylines: [],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [30, 18, 5, 12, :final_decision_inside_mainframe]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_inside_observatory_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_decision_inside_mainframe args~ ** Processing line: ~ {~ ** Processing line: ~ player: [32, 4],~ ** Processing line: ~ background: 'sprites/mainframe.png',~ ** Processing line: ~ storylines: [],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [*hotspot_top, :final_decision_ship_status],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_decision_ship_status args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/serenity.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [30, 10],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [*hotspot_top_right, :final_decision]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [30, 8, 4, 4, "????"],~ ** Processing line: ~ *final_decision_ship_status_shared(args)~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_decision args~ ** Processing line: ~ decision_graph "Stasis-- Chambers--: UNDERPOWERED, Life- forms-- will be terminated---- unless-- equilibrium----- is reached.",~ ** Processing line: ~ "I CAN'T DO THIS... But... If-- I-- don't--- bring-- the- chambers--- to- equilibrium-----, they all die...",~ ** Processing line: ~ [:final_decision_game_over_noone, "Kill--- Everyone---", "DO--- NOTHING?"],~ ** Processing line: ~ [:final_decision_game_over_matthew, "Kill--- Sasha---", "KILL--- SASHA?"],~ ** Processing line: ~ [:final_decision_game_over_anka, "Kill--- Aanka---", "KILL--- AANKA?"],~ ** Processing line: ~ [:final_decision_game_over_sasha, "Kill--- Matthew---", "KILL--- MATTHEW?"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_decision_game_over_noone args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/tribute-game-over.png',~ ** Processing line: ~ player: [53, 14],~ ** Processing line: ~ fade: 600~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_decision_game_over_matthew args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/tribute-game-over.png',~ ** Processing line: ~ player: [53, 14],~ ** Processing line: ~ fade: 600~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_decision_game_over_anka args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/tribute-game-over.png',~ ** Processing line: ~ player: [53, 14],~ ** Processing line: ~ fade: 600~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_decision_game_over_sasha args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/tribute-game-over.png',~ ** Processing line: ~ player: [53, 14],~ ** Processing line: ~ fade: 600~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_decision_ship_status_shared args~ ** Processing line: ~ [~ ** Processing line: ~ *ship_control_hotspot(24, 22,~ ** Processing line: ~ "Stasis-- Chambers--: UNDERPOWERED, Life- forms-- will be terminated---- unless-- equilibrium----- is reached. WHAT?! NO!",~ ** Processing line: ~ "Matthew's--- Chamber--: UNDER-- THREAT-- OF-- TERMINATION. WHAT?! NO!",~ ** Processing line: ~ "Aanka's--- Chamber--: UNDER-- THREAT-- OF-- TERMINATION. WHAT?! NO!",~ ** Processing line: ~ "Sasha's--- Chamber--: UNDER-- THREAT-- OF-- TERMINATION. WHAT?! NO!"),~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_final_message.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_final_message.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_final_message.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_final_message.rb~ ** Processing line: ~ def final_message_sad args~ ** Processing line: ~ {~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ background: 'sprites/inside-home.png',~ ** Processing line: ~ player: [34, 35],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [34, 34, 4, 4, "Another-- sleepless-- night..."],~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [32, -1, 8, 3, :final_message_observatory]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_message_happy args~ ** Processing line: ~ {~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ background: 'sprites/inside-home.png',~ ** Processing line: ~ player: [34, 35],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [34, 34, 4, 4, "Oh man, I slept like rock!"],~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [32, -1, 8, 3, :final_message_observatory]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_message_side_of_home args~ ** Processing line: ~ {~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ background: 'sprites/side-of-home.png',~ ** Processing line: ~ player: [16, 13],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [52, 24, 11, 5, :final_message_mountain_pass],~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_side_of_home_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_message_mountain_pass args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/mountain-pass-zoomed-out.png',~ ** Processing line: ~ player: [4, 4],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [18, 47, 5, 5, :final_message_path_to_observatory],~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [18, 13, 5, 5, "Hnnnnnnnggg. My legs-- are still sore- from yesterday."]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_mountain_pass_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_message_path_to_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/path-to-observatory.png',~ ** Processing line: ~ player: [60, 4],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [0, 26, 5, 5, :final_message_observatory]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [22, 20, 10, 10, "This spot--, on the mountain, right here, it's-- perfect. This- is where- I'll-- yeet-- the person-- who is playing-- this- prank- on me."]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_path_to_observatory_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_message_observatory args~ ** Processing line: ~ if args.state.scene_history.include? :replied_with_whole_truth~ ** Processing line: ~ return {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [51, 12],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [50, 10, 4, 4, "Here-- we- go..."]~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [30, 18, 5, 12, :final_message_inside_mainframe]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_inside_observatory_render~ ** Processing line: ~ }~ ** Processing line: ~ else~ ** Processing line: ~ return {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [51, 12],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [50, 10, 4, 4, "I feel like I'm-- walking-- on sunshine!"]~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [30, 18, 5, 12, :final_message_inside_mainframe]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_inside_observatory_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_message_inside_mainframe args~ ** Processing line: ~ {~ ** Processing line: ~ player: [32, 4],~ ** Processing line: ~ background: 'sprites/mainframe.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ scenes: [[45, 45, 4, 4, :final_message_check_ship_status]]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_message_check_ship_status args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/mainframe.png',~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [45, 45, 4, 4, (final_message_current args)],~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [*hotspot_top, :final_message_ship_status],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_message_ship_status args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/serenity.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [30, 10],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [30, 50, 4, 4, :final_message_ship_status_reviewed]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [30, 8, 4, 4, "Let me make- sure- everything--- looks good. It'll-- give me peace- of mind."],~ ** Processing line: ~ *final_message_ship_status_shared(args)~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_message_ship_status_reviewed args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/serenity.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [*hotspot_bottom, :final_message_summary]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [0, 62, 62, 3, "Whew. Everyone-- is in their- chambers. The engines-- are roaring-- and Serenity-- is coming-- home."],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_message_ship_status_shared args~ ** Processing line: ~ [~ ** Processing line: ~ *ship_control_hotspot( 0, 50,~ ** Processing line: ~ "Stasis-- Chambers--: Online, All chambers-- are powered. Battery--- Allocation---: 3--- of-- 3--.",~ ** Processing line: ~ "Matthew's--- Chamber--: OCCUPIED----",~ ** Processing line: ~ "Aanka's--- Chamber--: OCCUPIED----",~ ** Processing line: ~ "Sasha's--- Chamber--: OCCUPIED----"),~ ** Processing line: ~ *ship_control_hotspot(12, 35,~ ** Processing line: ~ "Life- Support--: Not-- Needed---",~ ** Processing line: ~ "O2--- Production---: OFF---",~ ** Processing line: ~ "CO2--- Scrubbers---: OFF---",~ ** Processing line: ~ "H2O--- Production---: OFF---"),~ ** Processing line: ~ *ship_control_hotspot(24, 20,~ ** Processing line: ~ "Navigation: Offline---",~ ** Processing line: ~ "Sensor: OFF---",~ ** Processing line: ~ "Heads- Up- Display: DAMAGED---",~ ** Processing line: ~ "Arithmetic--- Unit: DAMAGED----"),~ ** Processing line: ~ *ship_control_hotspot(36, 35,~ ** Processing line: ~ "COMM: Underpowered----",~ ** Processing line: ~ "Text: ON---",~ ** Processing line: ~ "Audio: SEGFAULT---",~ ** Processing line: ~ "Video: DAMAGED---"),~ ** Processing line: ~ *ship_control_hotspot(48, 50,~ ** Processing line: ~ "Engine: Online, Coordinates--- Set- for Earth. Battery--- Allocation---: 3--- of-- 3---",~ ** Processing line: ~ "Engine I: ON---",~ ** Processing line: ~ "Engine II: ON---",~ ** Processing line: ~ "Engine III: ON---")~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_message_last_reply args~ ** Processing line: ~ if args.state.scene_history.include? :replied_with_whole_truth~ ** Processing line: ~ return "Buffer--: #{anka_reply_whole_truth.quote}"~ ** Processing line: ~ else~ ** Processing line: ~ return "Buffer--: #{anka_reply_half_truth.quote}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_message_current args~ ** Processing line: ~ if args.state.scene_history.include? :replied_with_whole_truth~ ** Processing line: ~ return "Hey... It's-- me Sasha. Aanka-- is trying-- her best to comfort-- Matthew. This- is the first- time- I've-- ever-- seen-- Matthew-- cry. We'll-- probably-- be in stasis-- by the time you get this message--. Thank- you- again-- for all your help. I look forward-- to meeting-- you in person."~ ** Processing line: ~ else~ ** Processing line: ~ return "Hey! It's-- me Sasha! LOL! Aanka-- and Matthew-- are dancing-- around-- like- goofballs--! They- are both- so adorable! Only-- this- tiny-- little-- genius-- can make-- a battle-- hardened-- general--- put- on a tiara-- and dance- around-- like a fairy-- princess-- XD------ Anyways, we are heading-- back into-- the chambers--. I hope our welcome-- home- parade-- has fireworks!"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def final_message_summary args~ ** Processing line: ~ if args.state.scene_history.include? :replied_with_whole_truth~ ** Processing line: ~ return {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [31, 11],~ ** Processing line: ~ scenes: [[60, 0, 4, 32, :final_decision_side_of_home]],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [30, 10, 5, 4, "I can't-- imagine-- what they are feeling-- right now. But at least- they- know everything---, and we can- concentrate-- on rebuilding--- this world-- right- off the bat. I can't-- wait to see the future-- they'll-- help- build."],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ else~ ** Processing line: ~ return {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [31, 11],~ ** Processing line: ~ scenes: [[60, 0, 4, 32, :final_decision_side_of_home]],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [30, 10, 5, 4, "They all sounded-- so happy. I know- they'll-- be in for a tough- dose- of reality--- when they- arrive. But- at least- they'll-- be around-- all- of us. We'll-- help them- cope."],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_serenity_alive.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_serenity_alive.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_serenity_alive.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_serenity_alive.rb~ ** Processing line: ~ def serenity_alive_side_of_home args~ ** Processing line: ~ {~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ background: 'sprites/side-of-home.png',~ ** Processing line: ~ player: [16, 13],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [52, 24, 11, 5, :serenity_alive_mountain_pass],~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_side_of_home_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_mountain_pass args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/mountain-pass-zoomed-out.png',~ ** Processing line: ~ player: [4, 4],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [18, 47, 5, 5, :serenity_alive_path_to_observatory],~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [18, 13, 5, 5, "Hnnnnnnnggg. My legs-- are still sore- from yesterday."]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_mountain_pass_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_path_to_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/path-to-observatory.png',~ ** Processing line: ~ player: [60, 4],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [0, 26, 5, 5, :serenity_alive_observatory]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [22, 20, 10, 10, "This spot--, on the mountain, right here, it's-- perfect. This- is where- I'll-- yeet-- the person-- who is playing-- this- prank- on me."]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_path_to_observatory_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/observatory.png',~ ** Processing line: ~ player: [60, 2],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [28, 39, 4, 10, :serenity_alive_inside_observatory]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_observatory_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_inside_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ player: [60, 2],~ ** Processing line: ~ storylines: [],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [30, 18, 5, 12, :serenity_alive_inside_mainframe]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_inside_observatory_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_inside_mainframe args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/mainframe.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [30, 4],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [*hotspot_top, :serenity_alive_ship_status],~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [22, 45, 17, 4, (serenity_alive_last_reply args)],~ ** Processing line: ~ [45, 45, 4, 4, (serenity_alive_current_message args)],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_ship_status args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/serenity.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [30, 10],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [30, 50, 4, 4, :serenity_alive_ship_status_reviewed]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [30, 8, 4, 4, "Serenity? THE--- Mission-- Serenity?! How is that possible? They- are supposed-- to be dead."],~ ** Processing line: ~ [30, 10, 4, 4, "I... can't-- believe-- it. I- can access-- Serenity's-- computer? I- guess my \"superpower----\" isn't limited-- by proximity-- to- a machine--."],~ ** Processing line: ~ *serenity_alive_shared_ship_status(args)~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_ship_status_reviewed args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/serenity.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [*hotspot_bottom, :serenity_alive_time_to_reply]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [0, 62, 62, 3, "Okay. Reviewing-- everything--, it looks- like- I- can- take- the batteries--- from the Stasis--- Chambers--- and- Engine--- to keep- the crew-- alive-- and-- their-- location--- pinpointed---."],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_time_to_reply args~ ** Processing line: ~ decision_graph serenity_alive_current_message(args),~ ** Processing line: ~ "Okay... time to deliver the bad news...",~ ** Processing line: ~ [:replied_to_serenity_alive_firmly, "Firm-- Reply", serenity_alive_firm_reply],~ ** Processing line: ~ [:replied_to_serenity_alive_kindly, "Sugar-- Coated---- Reply", serenity_alive_sugarcoated_reply]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_shared_ship_status args~ ** Processing line: ~ [~ ** Processing line: ~ *ship_control_hotspot( 0, 50,~ ** Processing line: ~ "Stasis-- Chambers--: Online, All chambers-- are powered. Battery--- Allocation---: 3--- of-- 3--, Hmmm. They don't-- need this to be powered-- right- now. Everyone-- is awake.",~ ** Processing line: ~ nil,~ ** Processing line: ~ nil,~ ** Processing line: ~ nil),~ ** Processing line: ~ *ship_control_hotspot(12, 35,~ ** Processing line: ~ "Life- Support--: Offline, Unable--- to- Sustain-- Life. Battery--- Allocation---: 0--- of-- 3---, Okay. That is definitely---- not a good thing.",~ ** Processing line: ~ nil,~ ** Processing line: ~ nil,~ ** Processing line: ~ nil),~ ** Processing line: ~ *ship_control_hotspot(24, 20,~ ** Processing line: ~ "Navigation: Offline, Unable--- to- Calculate--- Location. Battery--- Allocation---: 0--- of-- 3---, Whelp. No wonder-- Sasha-- can't-- get- any-- readings. Their- Navigation--- is completely--- offline.",~ ** Processing line: ~ nil,~ ** Processing line: ~ nil,~ ** Processing line: ~ nil),~ ** Processing line: ~ *ship_control_hotspot(36, 35,~ ** Processing line: ~ "COMM: Underpowered----, Limited--- to- Text-- Based-- COMM. Battery--- Allocation---: 1--- of-- 3---, It's-- lucky- that- their- COMM---- system was able to survive-- twenty-- years--. Just- barely-- it seems.",~ ** Processing line: ~ nil,~ ** Processing line: ~ nil,~ ** Processing line: ~ nil),~ ** Processing line: ~ *ship_control_hotspot(48, 50,~ ** Processing line: ~ "Engine: Online, Full- Control-- Available. Battery--- Allocation---: 3--- of-- 3---, Hmmm. No point of having an engine-- online--, if you don't- know- where you're-- going.",~ ** Processing line: ~ nil,~ ** Processing line: ~ nil,~ ** Processing line: ~ nil)~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_firm_reply~ ** Processing line: ~ "Serenity, you are at a distance-- farther-- than- Neptune. All- of the ship's-- systems-- are failing. Please- move the batteries---- from- the Stasis-- Chambers-- over- to- Life-- Support--. I also-- need- you to move-- the batteries---- from- the Engines--- to your Navigation---- System."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_sugarcoated_reply~ ** Processing line: ~ "So... you- are- a teeny--- tiny--- bit--- farther-- from Earth- than you think. And you have a teeny--- tiny--- problem-- with your ship. Please-- move the batteries--- from the Stasis--- Chambers--- over to Life--- Support---. I also need you to move the batteries--- from the Engines--- to your- Navigation--- System. Don't-- worry-- Sasha. I'll-- get y'all-- home."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replied_to_serenity_alive_firmly args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [32, 21],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [*hotspot_bottom_right, :serenity_alive_path_from_observatory]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [30, 18, 5, 12, "Buffer-- has been set to: #{serenity_alive_firm_reply.quote}"],~ ** Processing line: ~ *serenity_alive_reply_completed_shared_hotspots(args),~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replied_to_serenity_alive_kindly args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [32, 21],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [*hotspot_bottom_right, :serenity_alive_path_from_observatory]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [30, 18, 5, 12, "Buffer-- has been set to: #{serenity_alive_sugarcoated_reply.quote}"],~ ** Processing line: ~ *serenity_alive_reply_completed_shared_hotspots(args),~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_path_from_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ background: 'sprites/path-to-observatory.png',~ ** Processing line: ~ player: [4, 21],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [*hotspot_bottom_right, :serenity_bio_infront_of_home]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [22, 20, 10, 10, "I'm not sure what's-- worse. Waiting-- for Sasha's-- reply. Or jumping-- off- from- right- here."]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_reply_completed_shared_hotspots args~ ** Processing line: ~ [~ ** Processing line: ~ [30, 10, 5, 4, "I guess it wasn't-- a joke- after-- all."],~ ** Processing line: ~ [40, 10, 5, 4, "I barely-- remember--- the- history----- of the crew."],~ ** Processing line: ~ [50, 10, 5, 4, "It probably--- wouldn't-- hurt- to- refresh-- my memory--."]~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_last_reply args~ ** Processing line: ~ if args.state.scene_history.include? :replied_to_introduction_seriously~ ** Processing line: ~ return "Buffer--: \"Hello, Who- is sending-- this message--?\""~ ** Processing line: ~ else~ ** Processing line: ~ return "Buffer--: \"New- phone. Who dis?\""~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_alive_current_message args~ ** Processing line: ~ if args.state.scene_history.include? :replied_to_introduction_seriously~ ** Processing line: ~ "This- is Sasha. The Serenity--- crew-- is out of hibernation---- and ready-- for Earth reentry--. But, it seems like we are having-- trouble-- with our Navigation---- systems. Please advise.".quote~ ** Processing line: ~ else~ ** Processing line: ~ "LOL! Thanks for the laugh. I needed that. This- is Sasha. The Serenity--- crew-- is out of hibernation---- and ready-- for Earth reentry--. But, it seems like we are having-- trouble-- with our Navigation---- systems. Can you help me out- babe?".quote~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_serenity_bio.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_serenity_bio.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_serenity_bio.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_serenity_bio.rb~ ** Processing line: ~ def serenity_bio_infront_of_home args~ ** Processing line: ~ {~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ background: 'sprites/front-of-home.png',~ ** Processing line: ~ player: [54, 23],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [44, 34, 8, 14, :serenity_bio_inside_home],~ ** Processing line: ~ [0, 3, 3, 22, :serenity_bio_library]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_bio_inside_home args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-home.png',~ ** Processing line: ~ player: [34, 4],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [34, 4, 4, 4, "I'm--- completely--- exhausted."],~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [30, 38, 12, 13, :serenity_bio_restless_sleep],~ ** Processing line: ~ [32, 0, 8, 3, :serenity_bio_infront_of_home],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_bio_restless_sleep args~ ** Processing line: ~ {~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ background: 'sprites/inside-home.png',~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [32, 38, 10, 13, "I can't-- seem to sleep. I know nothing-- about the- crew-. Maybe- I- should- go read- up- on- them."],~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [32, 0, 8, 3, :serenity_bio_infront_of_home],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_bio_library args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/library.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [30, 7],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [21, 35, 3, 18, :serenity_bio_book]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_bio_book args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/book.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [6, 52],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [ 4, 50, 56, 4, "The Title-- Reads: Never-- Forget-- Mission-- Serenity---"],~ ** Processing line: ~~ ** Processing line: ~ [ 4, 38, 8, 8, "Name: Matthew--- R. Sex: Male--- Age-- at-- Departure: 36-----"],~ ** Processing line: ~ [14, 38, 46, 8, "Tribute-- Text: Matthew graduated-- Magna-- Cum-- Laude-- from MIT--- with-- a- PHD---- in Aero-- Nautical--- Engineering. He was immensely--- competitive, and had an insatiable---- thirst- for aerial-- battle. From the age of twenty, he remained-- undefeated--- in the Israeli-- Air- Force- \"Blue Flag\" combat-- exercises. By the age of 29--- he had already-- risen through- the ranks, and became-- the Lieutenant--- General--- of Lufwaffe. Matthew-- volenteered-- to- pilot-- Mission-- Serenity. To- this day, his wife- and son- are pillars-- of strength- for us. Rest- in Peace- Matthew, we are sorry-- that- news of the pregancy-- never-- reached- you. Please forgive us."],~ ** Processing line: ~~ ** Processing line: ~ [4, 26, 8, 8, "Name: Aanka--- P. Sex: Female--- Age-- at-- Departure: 9-----"],~ ** Processing line: ~ [14, 26, 46, 8, "Tribute-- Text: Aanka--- gratuated--- Magna-- Cum- Laude-- from MIT, at- the- age- of eight, with a- PHD---- in Astro-- Physics. Her-- IQ--- was over 390, the highest-- ever- recorded--- IQ-- in- human-- history. She changed- the landscape-- of Physics-- with her efforts- in- unravelling--- the mysteries--- of- Dark- Matter--. Anka discovered-- the threat- of Halley's-- Comet-- collision--- with Earth. She spear headed-- the global-- effort-- for Misson-- Serenity. Her- multilingual--- address-- to- the world-- brought- us all hope."],~ ** Processing line: ~~ ** Processing line: ~ [4, 14, 8, 8, "Name: Sasha--- N. Sex: Female--- Age-- at-- Departure: 29-----"],~ ** Processing line: ~ [14, 14, 46, 8, "Tribute-- Text: Sasha gratuated-- Magna-- Cum- Laude-- from MIT--- with-- a- PHD---- in Computer---- Science----. She-- was-- brilliant--, strong- willed--, and-- a-- stunningly--- beautiful--- woman---. Sasha---- is- the- creator--- of the world's--- first- Ruby--- Quantum-- Machine---. After-- much- critical--- acclaim--, the Quantum-- Computer-- was placed in MIT's---- Museam-- next- to- Richard--- G. and Thomas--- K.'s---- Lisp-- Machine---. Her- engineering--- skills-- were-- paramount--- for Mission--- Serenity's--- success. Humanity-- misses-- you-- dearly,-- Sasha--. Life-- shines-- a dimmer-- light-- now- that- your- angelic- voice-- can never- be heard- again."],~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [*hotspot_bottom, :serenity_bio_finally_to_bed]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serenity_bio_finally_to_bed args~ ** Processing line: ~ {~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ background: 'sprites/inside-home.png',~ ** Processing line: ~ player: [35, 3],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [34, 4, 4, 4, "Maybe-- I'll-- be able-- to sleep- now..."],~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [32, 38, 10, 13, :bad_dream],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def bad_dream args~ ** Processing line: ~ {~ ** Processing line: ~ fade: 120,~ ** Processing line: ~ background: 'sprites/inside-home.png',~ ** Processing line: ~ player: [34, 35],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [34, 34, 4, 4, "Man. I did not- sleep- well- at all..."],~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [32, -1, 8, 3, :bad_dream_observatory]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def bad_dream_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ fade: 120,~ ** Processing line: ~ player: [51, 12],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [50, 10, 4, 4, "Breathe, Hiro. Just see what's there... everything--- will- be okay."]~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [30, 18, 5, 12, :bad_dream_inside_mainframe]~ ** Processing line: ~ ],~ ** Processing line: ~ render_override: :blinking_light_inside_observatory_render~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def bad_dream_inside_mainframe args~ ** Processing line: ~ {~ ** Processing line: ~ player: [32, 4],~ ** Processing line: ~ background: 'sprites/mainframe.png',~ ** Processing line: ~ fade: 120,~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [22, 45, 17, 4, (bad_dream_last_reply args)],~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [45, 45, 4, 4, :bad_dream_everyone_dead],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def bad_dream_everyone_dead args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/mainframe.png',~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [22, 45, 17, 4, (bad_dream_last_reply args)],~ ** Processing line: ~ [45, 45, 4, 4, "Hi-- Hiro. This is Sasha. By the time- you get this- message, chances-- are we will- already-- be- dead. The batteries--- got- damaged-- during-- removal. And- we don't-- have enough-- power-- for Life-- Support. The air-- is- already--- starting-- to taste- bad. It... would- have been- nice... to go- on a date--- with- you-- when-- I- got- back- to Earth. Anyways, good-- bye-- Hiro-- XOXOXO----"],~ ** Processing line: ~ [22, 5, 17, 4, "Meh. Whatever, I didn't-- want to save them anyways. What- a pain- in my ass."],~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [*hotspot_bottom, :anka_inside_room]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def bad_dream_last_reply args~ ** Processing line: ~ if args.state.scene_history.include? :replied_to_serenity_alive_firmly~ ** Processing line: ~ return "Buffer--: #{serenity_alive_firm_reply.quote}"~ ** Processing line: ~ else~ ** Processing line: ~ return "Buffer--: #{serenity_alive_sugarcoated_reply.quote}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_serenity_introduction.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_serenity_introduction.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_serenity_introduction.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_serenity_introduction.rb~ ** Processing line: ~ # decision_graph "Message from Sasha",~ ** Processing line: ~ # "I should reply.",~ ** Processing line: ~ # [:replied_to_introduction_seriously, "Reply Seriously", "Who is this?"],~ ** Processing line: ~ # [:replied_to_introduction_humorously, "Reply Humorously", "New phone who dis?"]~ ** Processing line: ~ def reply_to_introduction args~ ** Processing line: ~ decision_graph "\"Mission-- control--, your- main- comm-- channels-- seem-- to be down. My apologies-- for- using-- this low- level-- exploit--. What's-- going-- on down there? We are ready-- for reentry--.\" Message--- Timestamp---: 4- hours-- 23--- minutes-- ago--.",~ ** Processing line: ~ "Whoever-- pulled- off this exploit-- knows their stuff. I should reply--.",~ ** Processing line: ~ [:replied_to_introduction_seriously, "Serious Reply", "Hello, Who- is sending-- this message--?"],~ ** Processing line: ~ [:replied_to_introduction_humorously, "Humorous Reply", "New phone, who dis?"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replied_to_introduction_seriously args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [32, 21],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ *replied_to_introduction_shared_scenes(args)~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [30, 18, 5, 12, "Buffer-- has been set to: \"Hello, Who- is sending-- this message--?\""],~ ** Processing line: ~ *replied_to_introduction_shared_storylines(args)~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replied_to_introduction_humorously args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-observatory.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [32, 21],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ *replied_to_introduction_shared_scenes(args)~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [30, 18, 5, 12, "Buffer-- has been set to: \"New- phone. Who dis?\""],~ ** Processing line: ~ *replied_to_introduction_shared_storylines(args)~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replied_to_introduction_shared_storylines args~ ** Processing line: ~ [~ ** Processing line: ~ [30, 10, 5, 4, "It's-- going-- to take a while-- for this reply-- to make it's-- way back."],~ ** Processing line: ~ [40, 10, 5, 4, "4- hours-- to send a message-- at light speed?! How far away-- is the sender--?"],~ ** Processing line: ~ [50, 10, 5, 4, "I know- I've-- read about-- light- speed- travel-- before--. Maybe-- the library--- still has that- poster."]~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replied_to_introduction_shared_scenes args~ ** Processing line: ~ [[60, 0, 4, 32, :replied_to_introduction_observatory]]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replied_to_introduction_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/observatory.png',~ ** Processing line: ~ player: [28, 39],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [60, 0, 4, 32, :replied_to_introduction_path_to_observatory]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replied_to_introduction_path_to_observatory args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/path-to-observatory.png',~ ** Processing line: ~ player: [0, 26],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [60, 0, 4, 20, :replied_to_introduction_mountain_pass]~ ** Processing line: ~ ],~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replied_to_introduction_mountain_pass args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/mountain-pass-zoomed-out.png',~ ** Processing line: ~ player: [21, 48],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [0, 0, 15, 4, :replied_to_introduction_side_of_home]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [15, 28, 5, 3, "At least I'm-- getting-- my- exercise-- in- for- today--."]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replied_to_introduction_side_of_home args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/side-of-home.png',~ ** Processing line: ~ player: [58, 29],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [2, 0, 61, 2, :speed_of_light_front_of_home]~ ** Processing line: ~ ],~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Narrative - Return Of Serenity - storyline_speed_of_light.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_speed_of_light.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Narrative - Return Of Serenity - storyline_speed_of_light.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/storyline_speed_of_light.rb~ ** Processing line: ~ def speed_of_light_front_of_home args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/front-of-home.png',~ ** Processing line: ~ player: [54, 23],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [44, 34, 8, 14, :speed_of_light_inside_home],~ ** Processing line: ~ [0, 3, 3, 22, :speed_of_light_outside_library]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def speed_of_light_inside_home args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/inside-home.png',~ ** Processing line: ~ player: [35, 4],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [30, 38, 12, 13, "Can't- sleep right now. I have to- find- out- why- it took- over-- 4- hours-- to receive-- that message."]~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [32, 0, 8, 3, :speed_of_light_front_of_home],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def speed_of_light_outside_library args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/outside-library.png',~ ** Processing line: ~ player: [55, 19],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [49, 39, 6, 10, :speed_of_light_library],~ ** Processing line: ~ [61, 11, 3, 20, :speed_of_light_front_of_home]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def speed_of_light_library args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/library.png',~ ** Processing line: ~ player: [30, 7],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [3, 50, 10, 3, :speed_of_light_celestial_bodies_diagram]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def speed_of_light_celestial_bodies_diagram args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/planets.png',~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ player: [30, 3],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [56 - 2, 10, 5, 5, :speed_of_light_distance_discovered]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [30, 2, 4, 4, "Here- it is! This is a diagram--- of the solar-- system--. It was printed-- over-- fifty-- years- ago. Geez-- that's-- old."],~ ** Processing line: ~~ ** Processing line: ~ [ 0 - 2, 10, 5, 5, "The label- reads: Sun. The length- of the Astronomical-------- Unit-- (AU), is the distance-- from the Sun- to the Earth. Which is about 150--- million--- kilometers----."],~ ** Processing line: ~ [ 7 - 2, 10, 5, 5, "The label- reads: Mercury. Distance from Sun: 0.39AU------------ or- 3----- light-- minutes--."],~ ** Processing line: ~ [14 - 2, 10, 5, 5, "The label- reads: Venus. Distance from Sun: 0.72AU------------ or- 6----- light-- minutes--."],~ ** Processing line: ~ [21 - 2, 10, 5, 5, "The label- reads: Earth. Distance from Sun: 1.00AU------------ or- 8----- light-- minutes--."],~ ** Processing line: ~ [28 - 2, 10, 5, 5, "The label- reads: Mars. Distance from Sun: 1.52AU------------ or- 12----- light-- minutes--."],~ ** Processing line: ~ [35 - 2, 10, 5, 5, "The label- reads: Jupiter. Distance from Sun: 5.20AU------------ or- 45----- light-- minutes--."],~ ** Processing line: ~ [42 - 2, 10, 5, 5, "The label- reads: Saturn. Distance from Sun: 9.53AU------------ or- 79----- light-- minutes--."],~ ** Processing line: ~ [49 - 2, 10, 5, 5, "The label- reads: Uranus. Distance from Sun: 19.81AU------------ or- 159----- light-- minutes--."],~ ** Processing line: ~ # [56 - 2, 15, 4, 4, "The label- reads: Neptune. Distance from Sun: 30.05AU------------ or- 4.1----- light-- hours--."],~ ** Processing line: ~ [63 - 2, 10, 5, 5, "The label- reads: Pluto. Wait. WTF? Pluto-- isn't-- a planet."],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def speed_of_light_distance_discovered args~ ** Processing line: ~ {~ ** Processing line: ~ background: 'sprites/planets.png',~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [13, 0, 44, 3, :speed_of_light_end_of_day]~ ** Processing line: ~ ],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [ 0 - 2, 10, 5, 5, "The label- reads: Sun. The length- of the Astronomical-------- Unit-- (AU), is the distance-- from the Sun- to the Earth. Which is about 150--- million--- kilometers----."],~ ** Processing line: ~ [ 7 - 2, 10, 5, 5, "The label- reads: Mercury. Distance from Sun: 0.39AU------------ or- 3----- light-- minutes--."],~ ** Processing line: ~ [14 - 2, 10, 5, 5, "The label- reads: Venus. Distance from Sun: 0.72AU------------ or- 6----- light-- minutes--."],~ ** Processing line: ~ [21 - 2, 10, 5, 5, "The label- reads: Earth. Distance from Sun: 1.00AU------------ or- 8----- light-- minutes--."],~ ** Processing line: ~ [28 - 2, 10, 5, 5, "The label- reads: Mars. Distance from Sun: 1.52AU------------ or- 12----- light-- minutes--."],~ ** Processing line: ~ [35 - 2, 10, 5, 5, "The label- reads: Jupiter. Distance from Sun: 5.20AU------------ or- 45----- light-- minutes--."],~ ** Processing line: ~ [42 - 2, 10, 5, 5, "The label- reads: Saturn. Distance from Sun: 9.53AU------------ or- 79----- light-- minutes--."],~ ** Processing line: ~ [49 - 2, 10, 5, 5, "The label- reads: Uranus. Distance from Sun: 19.81AU------------ or- 159----- light-- minutes--."],~ ** Processing line: ~ [56 - 2, 10, 5, 5, "The label- reads: Neptune. Distance from Sun: 30.05AU------------ or- 4.1----- light-- hours--. What?! The message--- I received-- was from a source-- farther-- than-- Neptune?!"],~ ** Processing line: ~ [63 - 2, 10, 5, 5, "The label- reads: Pluto. Dista- Wait... Pluto-- isn't-- a planet. People-- thought- Pluto-- was a planet-- back- then?--"],~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def speed_of_light_end_of_day args~ ** Processing line: ~ {~ ** Processing line: ~ fade: 60,~ ** Processing line: ~ background: 'sprites/inside-home.png',~ ** Processing line: ~ player: [35, 0],~ ** Processing line: ~ storylines: [~ ** Processing line: ~ [35, 10, 4, 4, "Wonder-- what the reply-- will be. Who- the hell is contacting--- me from beyond-- Neptune? This- has to be some- kind- of- joke."]~ ** Processing line: ~ ],~ ** Processing line: ~ scenes: [~ ** Processing line: ~ [31, 38, 10, 12, :serenity_alive_side_of_home]~ ** Processing line: ~ ]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Roguelike - Roguelike Starting Point - constants.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Roguelike - Roguelike Starting Point - constants.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Roguelike - Roguelike Starting Point - constants.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_roguelike/01_roguelike_starting_point/app/constants.rb~ ** Processing line: ~ SHOW_LEGEND = true~ ** Processing line: ~ SOURCE_TILE_SIZE = 16~ ** Processing line: ~ DESTINATION_TILE_SIZE = 16~ ** Processing line: ~ TILE_SHEET_SIZE = 256~ ** Processing line: ~ TILE_R = 0~ ** Processing line: ~ TILE_G = 0~ ** Processing line: ~ TILE_B = 0~ ** Processing line: ~ TILE_A = 255~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Roguelike - Roguelike Starting Point - legend.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Roguelike - Roguelike Starting Point - legend.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Roguelike - Roguelike Starting Point - legend.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_roguelike/01_roguelike_starting_point/app/legend.rb~ ** Processing line: ~ def tick_legend args~ ** Processing line: ~ return unless SHOW_LEGEND~ ** Processing line: ~~ ** Processing line: ~ legend_padding = 16~ ** Processing line: ~ legend_x = 1280 - TILE_SHEET_SIZE - legend_padding~ ** Processing line: ~ legend_y = 720 - TILE_SHEET_SIZE - legend_padding~ ** Processing line: ~ tile_sheet_sprite = [legend_x,~ ** Processing line: ~ legend_y,~ ** Processing line: ~ TILE_SHEET_SIZE,~ ** Processing line: ~ TILE_SHEET_SIZE,~ ** Processing line: ~ 'sprites/simple-mood-16x16.png', 0,~ ** Processing line: ~ TILE_A,~ ** Processing line: ~ TILE_R,~ ** Processing line: ~ TILE_G,~ ** Processing line: ~ TILE_B]~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.mouse.point.inside_rect? tile_sheet_sprite~ ** Processing line: ~ mouse_row = args.inputs.mouse.point.y.idiv(SOURCE_TILE_SIZE)~ ** Processing line: ~ tile_row = 15 - (mouse_row - legend_y.idiv(SOURCE_TILE_SIZE))~ ** Processing line: ~~ ** Processing line: ~ mouse_col = args.inputs.mouse.point.x.idiv(SOURCE_TILE_SIZE)~ ** Processing line: ~ tile_col = (mouse_col - legend_x.idiv(SOURCE_TILE_SIZE))~ ** Processing line: ~~ ** Processing line: ~ args.outputs.primitives << [legend_x - legend_padding * 2,~ ** Processing line: ~ mouse_row * SOURCE_TILE_SIZE, 256 + legend_padding * 2, 16, 128, 128, 128, 64].solid~ ** Processing line: ~~ ** Processing line: ~ args.outputs.primitives << [mouse_col * SOURCE_TILE_SIZE,~ ** Processing line: ~ legend_y - legend_padding * 2, 16, 256 + legend_padding * 2, 128, 128, 128, 64].solid~ ** Processing line: ~~ ** Processing line: ~ sprite_key = sprite_lookup.find { |k, v| v == [tile_row, tile_col] }~ ** Processing line: ~ if sprite_key~ ** Processing line: ~ member_name, _ = sprite_key~ ** Processing line: ~ member_name = member_name_as_code member_name~ ** Processing line: ~ args.outputs.labels << [660, 70, "# CODE SAMPLE (place in the tick_game method located in main.rb)", -1, 0]~ ** Processing line: ~ args.outputs.labels << [660, 50, "# GRID_X, GRID_Y, TILE_KEY", -1, 0]~ ** Processing line: ~ args.outputs.labels << [660, 30, "args.outputs.sprites << tile_in_game( 5, 6, #{member_name} )", -1, 0]~ ** Processing line: ~ else~ ** Processing line: ~ args.outputs.labels << [660, 50, "Tile [#{tile_row}, #{tile_col}] not found. Add a key and value to app/sprite_lookup.rb:", -1, 0]~ ** Processing line: ~ args.outputs.labels << [660, 30, "{ \"some_string\" => [#{tile_row}, #{tile_col}] } OR { some_symbol: [#{tile_row}, #{tile_col}] }.", -1, 0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # render the sprite in the top right with a padding to the top and right so it's~ ** Processing line: ~ # not flush against the edge~ ** Processing line: ~ args.outputs.sprites << tile_sheet_sprite~ ** Processing line: ~~ ** Processing line: ~ # carefully place some ascii arrows to show the legend labels~ ** Processing line: ~ args.outputs.labels << [895, 707, "ROW --->"]~ ** Processing line: ~ args.outputs.labels << [943, 412, " ^"]~ ** Processing line: ~ args.outputs.labels << [943, 412, " |"]~ ** Processing line: ~ args.outputs.labels << [943, 394, "COL ---+"]~ ** Processing line: ~~ ** Processing line: ~ # use the tile sheet to print out row and column numbers~ ** Processing line: ~ args.outputs.sprites << 16.map_with_index do |i|~ ** Processing line: ~ sprite_key = i % 10~ ** Processing line: ~ [~ ** Processing line: ~ tile(1280 - TILE_SHEET_SIZE - legend_padding * 2 - SOURCE_TILE_SIZE,~ ** Processing line: ~ 720 - legend_padding * 2 - (SOURCE_TILE_SIZE * i),~ ** Processing line: ~ sprite(sprite_key)),~ ** Processing line: ~ tile(1280 - TILE_SHEET_SIZE - SOURCE_TILE_SIZE + (SOURCE_TILE_SIZE * i),~ ** Processing line: ~ 720 - TILE_SHEET_SIZE - legend_padding * 3, sprite(sprite_key))~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Roguelike - Roguelike Starting Point - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Roguelike - Roguelike Starting Point - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Roguelike - Roguelike Starting Point - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_roguelike/01_roguelike_starting_point/app/main.rb~ ** Processing line: ~ require 'app/constants.rb'~ ** Processing line: ~ require 'app/sprite_lookup.rb'~ ** Processing line: ~ require 'app/legend.rb'~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ tick_game args~ ** Processing line: ~ tick_legend args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_game args~ ** Processing line: ~ # setup the grid~ ** Processing line: ~ args.state.grid.padding = 104~ ** Processing line: ~ args.state.grid.size = 512~ ** Processing line: ~~ ** Processing line: ~ # set up your game~ ** Processing line: ~ # initialize the game/game defaults. ||= means that you only initialize it if~ ** Processing line: ~ # the value isn't alread initialized~ ** Processing line: ~ args.state.player.x ||= 0~ ** Processing line: ~ args.state.player.y ||= 0~ ** Processing line: ~~ ** Processing line: ~ args.state.enemies ||= [~ ** Processing line: ~ { x: 10, y: 10, type: :goblin, tile_key: :G },~ ** Processing line: ~ { x: 15, y: 30, type: :rat, tile_key: :R }~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ args.state.info_message ||= "Use arrow keys to move around."~ ** Processing line: ~~ ** Processing line: ~ # handle keyboard input~ ** Processing line: ~ # keyboard input (arrow keys to move player)~ ** Processing line: ~ new_player_x = args.state.player.x~ ** Processing line: ~ new_player_y = args.state.player.y~ ** Processing line: ~ player_direction = ""~ ** Processing line: ~ player_moved = false~ ** Processing line: ~ if args.inputs.keyboard.key_down.up~ ** Processing line: ~ new_player_y += 1~ ** Processing line: ~ player_direction = "north"~ ** Processing line: ~ player_moved = true~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.down~ ** Processing line: ~ new_player_y -= 1~ ** Processing line: ~ player_direction = "south"~ ** Processing line: ~ player_moved = true~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.right~ ** Processing line: ~ new_player_x += 1~ ** Processing line: ~ player_direction = "east"~ ** Processing line: ~ player_moved = true~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.left~ ** Processing line: ~ new_player_x -= 1~ ** Processing line: ~ player_direction = "west"~ ** Processing line: ~ player_moved = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #handle game logic~ ** Processing line: ~ # determine if there is an enemy on that square,~ ** Processing line: ~ # if so, don't let the player move there~ ** Processing line: ~ if player_moved~ ** Processing line: ~ found_enemy = args.state.enemies.find do |e|~ ** Processing line: ~ e[:x] == new_player_x && e[:y] == new_player_y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if !found_enemy~ ** Processing line: ~ args.state.player.x = new_player_x~ ** Processing line: ~ args.state.player.y = new_player_y~ ** Processing line: ~ args.state.info_message = "You moved #{player_direction}."~ ** Processing line: ~ else~ ** Processing line: ~ args.state.info_message = "You cannot move into a square an enemy occupies."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.outputs.sprites << tile_in_game(args.state.player.x,~ ** Processing line: ~ args.state.player.y, '@')~ ** Processing line: ~~ ** Processing line: ~ # render game~ ** Processing line: ~ # render enemies at locations~ ** Processing line: ~ args.outputs.sprites << args.state.enemies.map do |e|~ ** Processing line: ~ tile_in_game(e[:x], e[:y], e[:tile_key])~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # render the border~ ** Processing line: ~ border_x = args.state.grid.padding - DESTINATION_TILE_SIZE~ ** Processing line: ~ border_y = args.state.grid.padding - DESTINATION_TILE_SIZE~ ** Processing line: ~ border_size = args.state.grid.size + DESTINATION_TILE_SIZE * 2~ ** Processing line: ~~ ** Processing line: ~ args.outputs.borders << [border_x,~ ** Processing line: ~ border_y,~ ** Processing line: ~ border_size,~ ** Processing line: ~ border_size]~ ** Processing line: ~~ ** Processing line: ~ # render label stuff~ ** Processing line: ~ args.outputs.labels << [border_x, border_y - 10, "Current player location is: #{args.state.player.x}, #{args.state.player.y}"]~ ** Processing line: ~ args.outputs.labels << [border_x, border_y + 25 + border_size, args.state.info_message]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tile_in_game x, y, tile_key~ ** Processing line: ~ tile($gtk.args.state.grid.padding + x * DESTINATION_TILE_SIZE,~ ** Processing line: ~ $gtk.args.state.grid.padding + y * DESTINATION_TILE_SIZE,~ ** Processing line: ~ tile_key)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Roguelike - Roguelike Starting Point - sprite_lookup.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Roguelike - Roguelike Starting Point - sprite_lookup.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Roguelike - Roguelike Starting Point - sprite_lookup.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_roguelike/01_roguelike_starting_point/app/sprite_lookup.rb~ ** Processing line: ~ def sprite_lookup~ ** Processing line: ~ {~ ** Processing line: ~ 0 => [3, 0],~ ** Processing line: ~ 1 => [3, 1],~ ** Processing line: ~ 2 => [3, 2],~ ** Processing line: ~ 3 => [3, 3],~ ** Processing line: ~ 4 => [3, 4],~ ** Processing line: ~ 5 => [3, 5],~ ** Processing line: ~ 6 => [3, 6],~ ** Processing line: ~ 7 => [3, 7],~ ** Processing line: ~ 8 => [3, 8],~ ** Processing line: ~ 9 => [3, 9],~ ** Processing line: ~ '@' => [4, 0],~ ** Processing line: ~ A: [ 4, 1],~ ** Processing line: ~ B: [ 4, 2],~ ** Processing line: ~ C: [ 4, 3],~ ** Processing line: ~ D: [ 4, 4],~ ** Processing line: ~ E: [ 4, 5],~ ** Processing line: ~ F: [ 4, 6],~ ** Processing line: ~ G: [ 4, 7],~ ** Processing line: ~ H: [ 4, 8],~ ** Processing line: ~ I: [ 4, 9],~ ** Processing line: ~ J: [ 4, 10],~ ** Processing line: ~ K: [ 4, 11],~ ** Processing line: ~ L: [ 4, 12],~ ** Processing line: ~ M: [ 4, 13],~ ** Processing line: ~ N: [ 4, 14],~ ** Processing line: ~ O: [ 4, 15],~ ** Processing line: ~ P: [ 5, 0],~ ** Processing line: ~ Q: [ 5, 1],~ ** Processing line: ~ R: [ 5, 2],~ ** Processing line: ~ S: [ 5, 3],~ ** Processing line: ~ T: [ 5, 4],~ ** Processing line: ~ U: [ 5, 5],~ ** Processing line: ~ V: [ 5, 6],~ ** Processing line: ~ W: [ 5, 7],~ ** Processing line: ~ X: [ 5, 8],~ ** Processing line: ~ Y: [ 5, 9],~ ** Processing line: ~ Z: [ 5, 10],~ ** Processing line: ~ a: [ 6, 1],~ ** Processing line: ~ b: [ 6, 2],~ ** Processing line: ~ c: [ 6, 3],~ ** Processing line: ~ d: [ 6, 4],~ ** Processing line: ~ e: [ 6, 5],~ ** Processing line: ~ f: [ 6, 6],~ ** Processing line: ~ g: [ 6, 7],~ ** Processing line: ~ h: [ 6, 8],~ ** Processing line: ~ i: [ 6, 9],~ ** Processing line: ~ j: [ 6, 10],~ ** Processing line: ~ k: [ 6, 11],~ ** Processing line: ~ l: [ 6, 12],~ ** Processing line: ~ m: [ 6, 13],~ ** Processing line: ~ n: [ 6, 14],~ ** Processing line: ~ o: [ 6, 15],~ ** Processing line: ~ p: [ 7, 0],~ ** Processing line: ~ q: [ 7, 1],~ ** Processing line: ~ r: [ 7, 2],~ ** Processing line: ~ s: [ 7, 3],~ ** Processing line: ~ t: [ 7, 4],~ ** Processing line: ~ u: [ 7, 5],~ ** Processing line: ~ v: [ 7, 6],~ ** Processing line: ~ w: [ 7, 7],~ ** Processing line: ~ x: [ 7, 8],~ ** Processing line: ~ y: [ 7, 9],~ ** Processing line: ~ z: [ 7, 10],~ ** Processing line: ~ '|' => [ 7, 12]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def sprite key~ ** Processing line: ~ $gtk.args.state.reserved.sprite_lookup[key]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def member_name_as_code raw_member_name~ ** Processing line: ~ if raw_member_name.is_a? Symbol~ ** Processing line: ~ ":#{raw_member_name}"~ ** Processing line: ~ elsif raw_member_name.is_a? String~ ** Processing line: ~ "'#{raw_member_name}'"~ ** Processing line: ~ elsif raw_member_name.is_a? Fixnum~ ** Processing line: ~ "#{raw_member_name}"~ ** Processing line: ~ else~ ** Processing line: ~ "UNKNOWN: #{raw_member_name}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tile x, y, tile_row_column_or_key~ ** Processing line: ~ tile_extended x, y, DESTINATION_TILE_SIZE, DESTINATION_TILE_SIZE, TILE_R, TILE_G, TILE_B, TILE_A, tile_row_column_or_key~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tile_extended x, y, w, h, r, g, b, a, tile_row_column_or_key~ ** Processing line: ~ row_or_key, column = tile_row_column_or_key~ ** Processing line: ~ if !column~ ** Processing line: ~ row, column = sprite row_or_key~ ** Processing line: ~ else~ ** Processing line: ~ row, column = row_or_key, column~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if !row~ ** Processing line: ~ member_name = member_name_as_code tile_row_column_or_key~ ** Processing line: ~ raise "Unabled to find a sprite for #{member_name}. Make sure the value exists in app/sprite_lookup.rb."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sprite provided by Rogue Yun~ ** Processing line: ~ # http://www.bay12forums.com/smf/index.php?topic=144897.0~ ** Processing line: ~ # License: Public Domain~ ** Processing line: ~~ ** Processing line: ~ {~ ** Processing line: ~ x: x,~ ** Processing line: ~ y: y,~ ** Processing line: ~ w: w,~ ** Processing line: ~ h: h,~ ** Processing line: ~ tile_x: column * 16,~ ** Processing line: ~ tile_y: (row * 16),~ ** Processing line: ~ tile_w: 16,~ ** Processing line: ~ tile_h: 16,~ ** Processing line: ~ r: r,~ ** Processing line: ~ g: g,~ ** Processing line: ~ b: b,~ ** Processing line: ~ a: a,~ ** Processing line: ~ path: 'sprites/simple-mood-16x16.png'~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.args.state.reserved.sprite_lookup = sprite_lookup~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Roguelike - Roguelike Line Of Sight - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Roguelike - Roguelike Line Of Sight - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Roguelike - Roguelike Line Of Sight - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_roguelike/02_roguelike_line_of_sight/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - lambda: A way to define a block and its parameters with special syntax.~ ** Processing line: ~ For example, the syntax of lambda looks like this:~ ** Processing line: ~ my_lambda = -> { puts "This is my lambda" }~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.~ ** Processing line: ~~ ** Processing line: ~ - ARRAY#inside_rect?: Returns whether or not the point is inside a rect.~ ** Processing line: ~~ ** Processing line: ~ - product: Returns an array of all combinations of elements from all arrays.~ ** Processing line: ~~ ** Processing line: ~ - find: Finds all elements of a collection that meet requirements.~ ** Processing line: ~~ ** Processing line: ~ - abs: Returns the absolute value.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This sample app allows the player to move around in the dungeon, which becomes more or less visible~ ** Processing line: ~ # depending on the player's location, and also has enemies.~ ** Processing line: ~~ ** Processing line: ~ class Game~ ** Processing line: ~ attr_accessor :args, :state, :inputs, :outputs, :grid~ ** Processing line: ~~ ** Processing line: ~ # Calls all the methods needed for the game to run properly.~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render_canvas~ ** Processing line: ~ render_dungeon~ ** Processing line: ~ render_player~ ** Processing line: ~ render_enemies~ ** Processing line: ~ print_cell_coordinates~ ** Processing line: ~ calc_canvas~ ** Processing line: ~ input_move~ ** Processing line: ~ input_click_map~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets default values and initializes variables~ ** Processing line: ~ def defaults~ ** Processing line: ~ outputs.background_color = [0, 0, 0] # black background~ ** Processing line: ~~ ** Processing line: ~ # Initializes empty canvas, dungeon, and enemies collections.~ ** Processing line: ~ state.canvas ||= []~ ** Processing line: ~ state.dungeon ||= []~ ** Processing line: ~ state.enemies ||= []~ ** Processing line: ~~ ** Processing line: ~ # If state.area doesn't have value, load_area_one and derive_dungeon_from_area methods are called~ ** Processing line: ~ if !state.area~ ** Processing line: ~ load_area_one~ ** Processing line: ~ derive_dungeon_from_area~ ** Processing line: ~~ ** Processing line: ~ # Changing these values will change the position of player~ ** Processing line: ~ state.x = 7~ ** Processing line: ~ state.y = 5~ ** Processing line: ~~ ** Processing line: ~ # Creates new enemies, sets their values, and adds them to the enemies collection.~ ** Processing line: ~ state.enemies << state.new_entity(:enemy) do |e| # declares each enemy as new entity~ ** Processing line: ~ e.x = 13 # position~ ** Processing line: ~ e.y = 5~ ** Processing line: ~ e.previous_hp = 3~ ** Processing line: ~ e.hp = 3~ ** Processing line: ~ e.max_hp = 3~ ** Processing line: ~ e.is_dead = false # the enemy is alive~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ update_line_of_sight # updates line of sight by adding newly visible cells~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds elements into the state.area collection~ ** Processing line: ~ # The dungeon is derived using the coordinates of this collection~ ** Processing line: ~ def load_area_one~ ** Processing line: ~ state.area ||= []~ ** Processing line: ~ state.area << [8, 6]~ ** Processing line: ~ state.area << [7, 6]~ ** Processing line: ~ state.area << [7, 7]~ ** Processing line: ~ state.area << [8, 9]~ ** Processing line: ~ state.area << [7, 8]~ ** Processing line: ~ state.area << [7, 9]~ ** Processing line: ~ state.area << [6, 4]~ ** Processing line: ~ state.area << [7, 3]~ ** Processing line: ~ state.area << [7, 4]~ ** Processing line: ~ state.area << [6, 5]~ ** Processing line: ~ state.area << [7, 5]~ ** Processing line: ~ state.area << [8, 5]~ ** Processing line: ~ state.area << [8, 4]~ ** Processing line: ~ state.area << [1, 1]~ ** Processing line: ~ state.area << [0, 1]~ ** Processing line: ~ state.area << [0, 2]~ ** Processing line: ~ state.area << [1, 2]~ ** Processing line: ~ state.area << [2, 2]~ ** Processing line: ~ state.area << [2, 1]~ ** Processing line: ~ state.area << [2, 3]~ ** Processing line: ~ state.area << [1, 3]~ ** Processing line: ~ state.area << [1, 4]~ ** Processing line: ~ state.area << [2, 4]~ ** Processing line: ~ state.area << [2, 5]~ ** Processing line: ~ state.area << [1, 5]~ ** Processing line: ~ state.area << [2, 6]~ ** Processing line: ~ state.area << [3, 6]~ ** Processing line: ~ state.area << [4, 6]~ ** Processing line: ~ state.area << [4, 7]~ ** Processing line: ~ state.area << [4, 8]~ ** Processing line: ~ state.area << [5, 8]~ ** Processing line: ~ state.area << [5, 9]~ ** Processing line: ~ state.area << [6, 9]~ ** Processing line: ~ state.area << [7, 10]~ ** Processing line: ~ state.area << [7, 11]~ ** Processing line: ~ state.area << [7, 12]~ ** Processing line: ~ state.area << [7, 12]~ ** Processing line: ~ state.area << [7, 13]~ ** Processing line: ~ state.area << [8, 13]~ ** Processing line: ~ state.area << [9, 13]~ ** Processing line: ~ state.area << [10, 13]~ ** Processing line: ~ state.area << [11, 13]~ ** Processing line: ~ state.area << [12, 13]~ ** Processing line: ~ state.area << [12, 12]~ ** Processing line: ~ state.area << [8, 12]~ ** Processing line: ~ state.area << [9, 12]~ ** Processing line: ~ state.area << [10, 12]~ ** Processing line: ~ state.area << [11, 12]~ ** Processing line: ~ state.area << [12, 11]~ ** Processing line: ~ state.area << [13, 11]~ ** Processing line: ~ state.area << [13, 10]~ ** Processing line: ~ state.area << [13, 9]~ ** Processing line: ~ state.area << [13, 8]~ ** Processing line: ~ state.area << [13, 7]~ ** Processing line: ~ state.area << [13, 6]~ ** Processing line: ~ state.area << [12, 6]~ ** Processing line: ~ state.area << [14, 6]~ ** Processing line: ~ state.area << [14, 5]~ ** Processing line: ~ state.area << [13, 5]~ ** Processing line: ~ state.area << [12, 5]~ ** Processing line: ~ state.area << [12, 4]~ ** Processing line: ~ state.area << [13, 4]~ ** Processing line: ~ state.area << [14, 4]~ ** Processing line: ~ state.area << [1, 6]~ ** Processing line: ~ state.area << [6, 6]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Starts with an empty dungeon collection, and adds dungeon cells into it.~ ** Processing line: ~ def derive_dungeon_from_area~ ** Processing line: ~ state.dungeon = [] # starts as empty collection~ ** Processing line: ~~ ** Processing line: ~ state.area.each do |a| # for each element of the area collection~ ** Processing line: ~ state.dungeon << state.new_entity(:dungeon_cell) do |d| # declares each dungeon cell as new entity~ ** Processing line: ~ d.x = a.x # dungeon cell position using coordinates from area~ ** Processing line: ~ d.y = a.y~ ** Processing line: ~ d.is_visible = false # cell is not visible~ ** Processing line: ~ d.alpha = 0 # not transparent at all~ ** Processing line: ~ d.border = [left_margin + a.x * grid_size,~ ** Processing line: ~ bottom_margin + a.y * grid_size,~ ** Processing line: ~ grid_size,~ ** Processing line: ~ grid_size,~ ** Processing line: ~ *blue,~ ** Processing line: ~ 255] # sets border definition for dungeon cell~ ** Processing line: ~ d # returns dungeon cell~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def left_margin~ ** Processing line: ~ 40 # sets left margin~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def bottom_margin~ ** Processing line: ~ 60 # sets bottom margin~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def grid_size~ ** Processing line: ~ 40 # sets size of grid square~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Updates the line of sight by calling the thick_line_of_sight method and~ ** Processing line: ~ # adding dungeon cells to the newly_visible collection~ ** Processing line: ~ def update_line_of_sight~ ** Processing line: ~ variations = [-1, 0, 1]~ ** Processing line: ~ # creates collection of newly visible dungeon cells~ ** Processing line: ~ newly_visible = variations.product(variations).flat_map do |rise, run| # combo of all elements~ ** Processing line: ~ thick_line_of_sight state.x, state.y, rise, run, 15, # calls thick_line_of_sight method~ ** Processing line: ~ lambda { |x, y| dungeon_cell_exists? x, y } # checks whether or not cell exists~ ** Processing line: ~ end.uniq# removes duplicates~ ** Processing line: ~~ ** Processing line: ~ state.dungeon.each do |d| # perform action on each element of dungeons collection~ ** Processing line: ~ d.is_visible = newly_visible.find { |v| v.x == d.x && v.y == d.y } # finds match inside newly_visible collection~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Returns a boolean value~ ** Processing line: ~ def dungeon_cell_exists? x, y~ ** Processing line: ~ # Finds cell coordinates inside dungeon collection to determine if dungeon cell exists~ ** Processing line: ~ state.dungeon.find { |d| d.x == x && d.y == y }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Calls line_of_sight method to add elements to result collection~ ** Processing line: ~ def thick_line_of_sight start_x, start_y, rise, run, distance, cell_exists_lambda~ ** Processing line: ~ result = []~ ** Processing line: ~ result += line_of_sight start_x, start_y, rise, run, distance, cell_exists_lambda~ ** Processing line: ~ result += line_of_sight start_x - 1, start_y, rise, run, distance, cell_exists_lambda # one left~ ** Processing line: ~ result += line_of_sight start_x + 1, start_y, rise, run, distance, cell_exists_lambda # one right~ ** Processing line: ~ result~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds points to the result collection to create the player's line of sight~ ** Processing line: ~ def line_of_sight start_x, start_y, rise, run, distance, cell_exists_lambda~ ** Processing line: ~ result = [] # starts as empty collection~ ** Processing line: ~ points = points_on_line start_x, start_y, rise, run, distance # calls points_on_line method~ ** Processing line: ~ points.each do |p| # for each point in collection~ ** Processing line: ~ if cell_exists_lambda.call(p.x, p.y) # if the cell exists~ ** Processing line: ~ result << p # add it to result collection~ ** Processing line: ~ else # if cell does not exist~ ** Processing line: ~ return result # return result collection as it is~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ result # return result collection~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Finds the coordinates of the points on the line by performing calculations~ ** Processing line: ~ def points_on_line start_x, start_y, rise, run, distance~ ** Processing line: ~ distance.times.map do |i| # perform an action~ ** Processing line: ~ [start_x + run * i, start_y + rise * i] # definition of point~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_canvas~ ** Processing line: ~ return~ ** Processing line: ~ outputs.borders << state.canvas.map do |c| # on each element of canvas collection~ ** Processing line: ~ c.border # outputs border~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs the dungeon cells.~ ** Processing line: ~ def render_dungeon~ ** Processing line: ~ outputs.solids << [0, 0, grid.w, grid.h] # outputs black background for grid~ ** Processing line: ~~ ** Processing line: ~ # Sets the alpha value (opacity) for each dungeon cell and calls the cell_border method.~ ** Processing line: ~ outputs.borders << state.dungeon.map do |d| # for each element in dungeon collection~ ** Processing line: ~ d.alpha += if d.is_visible # if cell is visible~ ** Processing line: ~ 255.fdiv(30) # increment opacity (transparency)~ ** Processing line: ~ else # if cell is not visible~ ** Processing line: ~ 255.fdiv(600) * -1 # decrease opacity~ ** Processing line: ~ end~ ** Processing line: ~ d.alpha = d.alpha.cap_min_max(0, 255)~ ** Processing line: ~ cell_border d.x, d.y, [*blue, d.alpha] # sets blue border using alpha value~ ** Processing line: ~ end.reject_nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets definition of a cell border using the parameters~ ** Processing line: ~ def cell_border x, y, color = nil~ ** Processing line: ~ [left_margin + x * grid_size,~ ** Processing line: ~ bottom_margin + y * grid_size,~ ** Processing line: ~ grid_size,~ ** Processing line: ~ grid_size,~ ** Processing line: ~ *color]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the values for the player and outputs it as a label~ ** Processing line: ~ def render_player~ ** Processing line: ~ outputs.labels << [grid_x(state.x) + 20, # positions "@" text in center of grid square~ ** Processing line: ~ grid_y(state.y) + 35,~ ** Processing line: ~ "@", # player is represented by a white "@" character~ ** Processing line: ~ 1, 1, *white]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def grid_x x~ ** Processing line: ~ left_margin + x * grid_size # positions horizontally on grid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def grid_y y~ ** Processing line: ~ bottom_margin + y * grid_size # positions vertically on grid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Outputs enemies onto the screen.~ ** Processing line: ~ def render_enemies~ ** Processing line: ~ state.enemies.map do |e| # for each enemy in the collection~ ** Processing line: ~ alpha = 255 # set opacity (full transparency)~ ** Processing line: ~~ ** Processing line: ~ # Outputs an enemy using a label.~ ** Processing line: ~ outputs.labels << [~ ** Processing line: ~ left_margin + 20 + e.x * grid_size, # positions enemy's "r" text in center of grid square~ ** Processing line: ~ bottom_margin + 35 + e.y * grid_size,~ ** Processing line: ~ "r", # enemy's text~ ** Processing line: ~ 1, 1, *white, alpha]~ ** Processing line: ~~ ** Processing line: ~ # Creates a red border around an enemy.~ ** Processing line: ~ outputs.borders << [grid_x(e.x), grid_y(e.y), grid_size, grid_size, *red]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #White labels are output for the cell coordinates of each element in the dungeon collection.~ ** Processing line: ~ def print_cell_coordinates~ ** Processing line: ~ return unless state.debug~ ** Processing line: ~ state.dungeon.each do |d|~ ** Processing line: ~ outputs.labels << [grid_x(d.x) + 2,~ ** Processing line: ~ grid_y(d.y) - 2,~ ** Processing line: ~ "#{d.x},#{d.y}",~ ** Processing line: ~ -2, 0, *white]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Adds new elements into the canvas collection and sets their values.~ ** Processing line: ~ def calc_canvas~ ** Processing line: ~ return if state.canvas.length > 0 # return if canvas collection has at least one element~ ** Processing line: ~ 15.times do |x| # 15 times perform an action~ ** Processing line: ~ 15.times do |y|~ ** Processing line: ~ state.canvas << state.new_entity(:canvas) do |c| # declare canvas element as new entity~ ** Processing line: ~ c.x = x # set position~ ** Processing line: ~ c.y = y~ ** Processing line: ~ c.border = [left_margin + x * grid_size,~ ** Processing line: ~ bottom_margin + y * grid_size,~ ** Processing line: ~ grid_size,~ ** Processing line: ~ grid_size,~ ** Processing line: ~ *white, 30] # sets border definition~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Updates x and y values of the player, and updates player's line of sight~ ** Processing line: ~ def input_move~ ** Processing line: ~ x, y, x_diff, y_diff = input_target_cell~ ** Processing line: ~~ ** Processing line: ~ return unless dungeon_cell_exists? x, y # player can't move there if a dungeon cell doesn't exist in that location~ ** Processing line: ~ return if enemy_at x, y # player can't move there if there is an enemy in that location~ ** Processing line: ~~ ** Processing line: ~ state.x += x_diff # increments x by x_diff (so player moves left or right)~ ** Processing line: ~ state.y += y_diff # same with y and y_diff ( so player moves up or down)~ ** Processing line: ~ update_line_of_sight # updates visible cells~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def enemy_at x, y~ ** Processing line: ~ # Finds if coordinates exist in enemies collection and enemy is not dead~ ** Processing line: ~ state.enemies.find { |e| e.x == x && e.y == y && !e.is_dead }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #M oves the user based on their keyboard input and sets values for target cell~ ** Processing line: ~ def input_target_cell~ ** Processing line: ~ if inputs.keyboard.key_down.up # if "up" key is in "down" state~ ** Processing line: ~ [state.x, state.y + 1, 0, 1] # user moves up~ ** Processing line: ~ elsif inputs.keyboard.key_down.down # if "down" key is pressed~ ** Processing line: ~ [state.x, state.y - 1, 0, -1] # user moves down~ ** Processing line: ~ elsif inputs.keyboard.key_down.left # if "left" key is pressed~ ** Processing line: ~ [state.x - 1, state.y, -1, 0] # user moves left~ ** Processing line: ~ elsif inputs.keyboard.key_down.right # if "right" key is pressed~ ** Processing line: ~ [state.x + 1, state.y, 1, 0] # user moves right~ ** Processing line: ~ else~ ** Processing line: ~ nil # otherwise, empty~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Goes through the canvas collection to find if the mouse was clicked inside of the borders of an element.~ ** Processing line: ~ def input_click_map~ ** Processing line: ~ return unless inputs.mouse.click # return unless the mouse is clicked~ ** Processing line: ~ canvas_entry = state.canvas.find do |c| # find element from canvas collection that meets requirements~ ** Processing line: ~ inputs.mouse.click.inside_rect? c.border # find border that mouse was clicked inside of~ ** Processing line: ~ end~ ** Processing line: ~ puts canvas_entry # prints canvas_entry value~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the definition of a label using the parameters.~ ** Processing line: ~ def label text, x, y, color = nil~ ** Processing line: ~ color ||= white # color is initialized to white~ ** Processing line: ~ [x, y, text, 1, 1, *color] # sets label definition~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def green~ ** Processing line: ~ [60, 200, 100] # sets color saturation to shade of green~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def blue~ ** Processing line: ~ [50, 50, 210] # sets color saturation to shade of blue~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def white~ ** Processing line: ~ [255, 255, 255] # sets color saturation to white~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def red~ ** Processing line: ~ [230, 80, 80] # sets color saturation to shade of red~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def orange~ ** Processing line: ~ [255, 80, 60] # sets color saturation to shade of orange~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def pink~ ** Processing line: ~ [255, 0, 200] # sets color saturation to shade of pink~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def gray~ ** Processing line: ~ [75, 75, 75] # sets color saturation to shade of gray~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Recolors the border using the parameters.~ ** Processing line: ~ def recolor_border border, r, g, b~ ** Processing line: ~ border[4] = r~ ** Processing line: ~ border[5] = g~ ** Processing line: ~ border[6] = b~ ** Processing line: ~ border~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a boolean value.~ ** Processing line: ~ def visible? cell~ ** Processing line: ~ # finds cell's coordinates inside visible_cells collections to determine if cell is visible~ ** Processing line: ~ state.visible_cells.find { |c| c.x == cell.x && c.y == cell.y}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Exports dungeon by printing dungeon cell coordinates~ ** Processing line: ~ def export_dungeon~ ** Processing line: ~ state.dungeon.each do |d| # on each element of dungeon collection~ ** Processing line: ~ puts "state.dungeon << [#{d.x}, #{d.y}]" # prints cell coordinates~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def distance_to_cell cell~ ** Processing line: ~ distance_to state.x, cell.x, state.y, cell.y # calls distance_to method~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def distance_to from_x, x, from_y, y~ ** Processing line: ~ (from_x - x).abs + (from_y - y).abs # finds distance between two cells using coordinates~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $game = Game.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $game.args = args~ ** Processing line: ~ $game.state = args.state~ ** Processing line: ~ $game.inputs = args.inputs~ ** Processing line: ~ $game.outputs = args.outputs~ ** Processing line: ~ $game.grid = args.grid~ ** Processing line: ~ $game.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Tactical - Hexagonal Grid - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Tactical - Hexagonal Grid - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Tactical - Hexagonal Grid - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_tactical/hexagonal_grid/app/main.rb~ ** Processing line: ~ class HexagonTileGame~ ** Processing line: ~ attr_gtk~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ state.tile_scale = 1.3~ ** Processing line: ~ state.tile_size = 80~ ** Processing line: ~ state.tile_w = Math.sqrt(3) * state.tile_size.half~ ** Processing line: ~ state.tile_h = state.tile_size * 3/4~ ** Processing line: ~ state.tiles_x_count = 1280.idiv(state.tile_w) - 1~ ** Processing line: ~ state.tiles_y_count = 720.idiv(state.tile_h) - 1~ ** Processing line: ~ state.world_width_px = state.tiles_x_count * state.tile_w~ ** Processing line: ~ state.world_height_px = state.tiles_y_count * state.tile_h~ ** Processing line: ~ state.world_x_offset = (1280 - state.world_width_px).half~ ** Processing line: ~ state.world_y_offset = (720 - state.world_height_px).half~ ** Processing line: ~ state.tiles ||= state.tiles_x_count.map_with_ys(state.tiles_y_count) do |ordinal_x, ordinal_y|~ ** Processing line: ~ {~ ** Processing line: ~ ordinal_x: ordinal_x,~ ** Processing line: ~ ordinal_y: ordinal_y,~ ** Processing line: ~ offset_x: (ordinal_y.even?) ?~ ** Processing line: ~ (state.world_x_offset + state.tile_w.half.half) :~ ** Processing line: ~ (state.world_x_offset - state.tile_w.half.half),~ ** Processing line: ~ offset_y: state.world_y_offset,~ ** Processing line: ~ w: state.tile_w,~ ** Processing line: ~ h: state.tile_h,~ ** Processing line: ~ type: :blank,~ ** Processing line: ~ path: "sprites/hexagon-gray.png",~ ** Processing line: ~ a: 20~ ** Processing line: ~ }.associate do |h|~ ** Processing line: ~ h.merge(x: h[:offset_x] + h[:ordinal_x] * h[:w],~ ** Processing line: ~ y: h[:offset_y] + h[:ordinal_y] * h[:h]).scale_rect(state.tile_scale)~ ** Processing line: ~ end.associate do |h|~ ** Processing line: ~ h.merge(center: {~ ** Processing line: ~ x: h[:x] + h[:w].half,~ ** Processing line: ~ y: h[:y] + h[:h].half~ ** Processing line: ~ }, radius: [h[:w].half, h[:h].half].max)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input~ ** Processing line: ~ if inputs.click~ ** Processing line: ~ tile = state.tiles.find { |t| inputs.click.point_inside_circle? t[:center], t[:radius] }~ ** Processing line: ~ if tile~ ** Processing line: ~ tile[:a] = 255~ ** Processing line: ~ tile[:path] = "sprites/hexagon-black.png"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ input~ ** Processing line: ~ render~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render~ ** Processing line: ~ outputs.sprites << state.tiles~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $game = HexagonTileGame.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $game.args = args~ ** Processing line: ~ $game.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Tactical - Isometric Grid - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Tactical - Isometric Grid - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Tactical - Isometric Grid - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_tactical/isometric_grid/app/main.rb~ ** Processing line: ~ class Isometric~ ** Processing line: ~ attr_accessor :grid, :inputs, :state, :outputs~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ defaults~ ** Processing line: ~ render~ ** Processing line: ~ calc~ ** Processing line: ~ process_inputs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults~ ** Processing line: ~ state.quantity ||= 6 #Size of grid~ ** Processing line: ~ state.tileSize ||= [262 / 2, 194 / 2] #width and heigth of orange tiles~ ** Processing line: ~ state.tileGrid ||= [] #Holds ordering of tiles~ ** Processing line: ~ state.currentSpriteLocation ||= -1 #Current Sprite hovering location~ ** Processing line: ~ state.tileCords ||= [] #Physical, rendering cordinates~ ** Processing line: ~ state.initCords ||= [640 - (state.quantity / 2 * state.tileSize[0]), 330] #Location of tile (0, 0)~ ** Processing line: ~ state.sideSize ||= [state.tileSize[0] / 2, 242 / 2] #Purple & green cube face size~ ** Processing line: ~ state.mode ||= :delete #Switches between :delete and :insert~ ** Processing line: ~ state.spriteSelection ||= [['river', 0, 0, 262 / 2, 194 / 2],~ ** Processing line: ~ ['mountain', 0, 0, 262 / 2, 245 / 2],~ ** Processing line: ~ ['ocean', 0, 0, 262 / 2, 194 / 2]] #Storage for sprite information~ ** Processing line: ~ #['name', deltaX, deltaY, sizeW, sizeH]~ ** Processing line: ~ #^delta refers to distance from tile cords~ ** Processing line: ~~ ** Processing line: ~ #Orders tiles based on tile placement and fancy math. Very left: 0,0. Very bottom: quantity-1, 0, etc~ ** Processing line: ~ if state.tileGrid == []~ ** Processing line: ~ tempX = 0~ ** Processing line: ~ tempY = 0~ ** Processing line: ~ tempLeft = false~ ** Processing line: ~ tempRight = false~ ** Processing line: ~ count = 0~ ** Processing line: ~ (state.quantity * state.quantity).times do~ ** Processing line: ~ if tempY == 0~ ** Processing line: ~ tempLeft = true~ ** Processing line: ~ end~ ** Processing line: ~ if tempX == (state.quantity - 1)~ ** Processing line: ~ tempRight = true~ ** Processing line: ~ end~ ** Processing line: ~ state.tileGrid.push([tempX, tempY, true, tempLeft, tempRight, count])~ ** Processing line: ~ #orderX, orderY, exists?, leftSide, rightSide, order~ ** Processing line: ~ tempX += 1~ ** Processing line: ~ if tempX == state.quantity~ ** Processing line: ~ tempX = 0~ ** Processing line: ~ tempY += 1~ ** Processing line: ~ end~ ** Processing line: ~ tempLeft = false~ ** Processing line: ~ tempRight = false~ ** Processing line: ~ count += 1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ #Calculates physical cordinates for tiles~ ** Processing line: ~ if state.tileCords == []~ ** Processing line: ~ state.tileCords = state.tileGrid.map do~ ** Processing line: ~ |val|~ ** Processing line: ~ x = (state.initCords[0]) + ((val[0] + val[1]) * state.tileSize[0] / 2)~ ** Processing line: ~ y = (state.initCords[1]) + (-1 * val[0] * state.tileSize[1] / 2) + (val[1] * state.tileSize[1] / 2)~ ** Processing line: ~ [x, y, val[2], val[3], val[4], val[5], -1] #-1 represents sprite on top of tile. -1 for now~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render~ ** Processing line: ~ renderBackground~ ** Processing line: ~ renderLeft~ ** Processing line: ~ renderRight~ ** Processing line: ~ renderTiles~ ** Processing line: ~ renderObjects~ ** Processing line: ~ renderLabels~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def renderBackground~ ** Processing line: ~ outputs.solids << [0, 0, 1280, 720, 0, 0, 0] #Background color~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def renderLeft~ ** Processing line: ~ #Shows the pink left cube face~ ** Processing line: ~ outputs.sprites << state.tileCords.map do~ ** Processing line: ~ |val|~ ** Processing line: ~ if val[2] == true && val[3] == true #Checks if the tile exists and right face needs to be rendered~ ** Processing line: ~ [val[0], val[1] + (state.tileSize[1] / 2) - state.sideSize[1], state.sideSize[0],~ ** Processing line: ~ state.sideSize[1], 'sprites/leftSide.png']~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def renderRight~ ** Processing line: ~ #Shows the green right cube face~ ** Processing line: ~ outputs.sprites << state.tileCords.map do~ ** Processing line: ~ |val|~ ** Processing line: ~ if val[2] == true && val[4] == true #Checks if it exists & checks if right face needs to be rendered~ ** Processing line: ~ [val[0] + state.tileSize[0] / 2, val[1] + (state.tileSize[1] / 2) - state.sideSize[1], state.sideSize[0],~ ** Processing line: ~ state.sideSize[1], 'sprites/rightSide.png']~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def renderTiles~ ** Processing line: ~ #Shows the tile itself. Important that it's rendered after the two above!~ ** Processing line: ~ outputs.sprites << state.tileCords.map do~ ** Processing line: ~ |val|~ ** Processing line: ~ if val[2] == true #Chcekcs if tile needs to be rendered~ ** Processing line: ~ if val[5] == state.currentSpriteLocation~ ** Processing line: ~ [val[0], val[1], state.tileSize[0], state.tileSize[1], 'sprites/selectedTile.png']~ ** Processing line: ~ else~ ** Processing line: ~ [val[0], val[1], state.tileSize[0], state.tileSize[1], 'sprites/tile.png']~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def renderObjects~ ** Processing line: ~ #Renders the sprites on top of the tiles. Order of rendering: top corner to right corner and cascade down until left corner~ ** Processing line: ~ #to bottom corner.~ ** Processing line: ~ a = (state.quantity * state.quantity) - state.quantity~ ** Processing line: ~ iter = 0~ ** Processing line: ~ loop do~ ** Processing line: ~ if state.tileCords[a][2] == true && state.tileCords[a][6] != -1~ ** Processing line: ~ outputs.sprites << [state.tileCords[a][0] + state.spriteSelection[state.tileCords[a][6]][1],~ ** Processing line: ~ state.tileCords[a][1] + state.spriteSelection[state.tileCords[a][6]][2],~ ** Processing line: ~ state.spriteSelection[state.tileCords[a][6]][3], state.spriteSelection[state.tileCords[a][6]][4],~ ** Processing line: ~ 'sprites/' + state.spriteSelection[state.tileCords[a][6]][0] + '.png']~ ** Processing line: ~ end~ ** Processing line: ~ iter += 1~ ** Processing line: ~ a += 1~ ** Processing line: ~ a -= state.quantity * 2 if iter == state.quantity~ ** Processing line: ~ iter = 0 if iter == state.quantity~ ** Processing line: ~ break if a < 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def renderLabels~ ** Processing line: ~ #Labels~ ** Processing line: ~ outputs.labels << [50, 680, 'Click to delete!', 5, 0, 255, 255, 255, 255] if state.mode == :delete~ ** Processing line: ~ outputs.labels << [50, 640, 'Press \'i\' for insert mode!', 5, 0, 255, 255, 255, 255] if state.mode == :delete~ ** Processing line: ~ outputs.labels << [50, 680, 'Click to insert!', 5, 0, 255, 255, 255, 255] if state.mode == :insert~ ** Processing line: ~ outputs.labels << [50, 640, 'Press \'d\' for delete mode!', 5, 0, 255, 255, 255, 255] if state.mode == :insert~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc~ ** Processing line: ~ calcCurrentHover~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calcCurrentHover~ ** Processing line: ~ #This determines what tile the mouse is hovering (or last hovering) over~ ** Processing line: ~ x = inputs.mouse.position.x~ ** Processing line: ~ y = inputs.mouse.position.y~ ** Processing line: ~ m = (state.tileSize[1] / state.tileSize[0]) #slope~ ** Processing line: ~ state.tileCords.map do~ ** Processing line: ~ |val|~ ** Processing line: ~ #Conditions that makes runtime faster. Checks if the mouse click was between tile dimensions (rectangle collision)~ ** Processing line: ~ next unless val[0] < x && x < val[0] + state.tileSize[0]~ ** Processing line: ~ next unless val[1] < y && y < val[1] + state.tileSize[1]~ ** Processing line: ~ next unless val[2] == true~ ** Processing line: ~ tempBool = false~ ** Processing line: ~ if x == val[0] + (state.tileSize[0] / 2)~ ** Processing line: ~ #The height of a diamond is the height of the diamond, so if x equals that exact point, it must be inside the diamond~ ** Processing line: ~ tempBool = true~ ** Processing line: ~ elsif x < state.tileSize[0] / 2 + val[0]~ ** Processing line: ~ #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the left half of diamond~ ** Processing line: ~ tempY1 = (m * (x - val[0])) + val[1] + (state.tileSize[1] / 2)~ ** Processing line: ~ tempY2 = (-1 * m * (x - val[0])) + val[1] + (state.tileSize[1] / 2)~ ** Processing line: ~ #Checks to see if the mouse click y value is between those temp y values~ ** Processing line: ~ tempBool = true if y < tempY1 && y > tempY2~ ** Processing line: ~ elsif x > state.tileSize[0] / 2 + val[0]~ ** Processing line: ~ #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the right half of diamond~ ** Processing line: ~ tempY1 = (m * (x - val[0] - (state.tileSize[0] / 2))) + val[1]~ ** Processing line: ~ tempY2 = (-1 * m * (x - val[0] - (state.tileSize[0] / 2))) + val[1] + state.tileSize[1]~ ** Processing line: ~ #Checks to see if the mouse click y value is between those temp y values~ ** Processing line: ~ tempBool = true if y > tempY1 && y < tempY2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if tempBool == true~ ** Processing line: ~ state.currentSpriteLocation = val[5] #Current sprite location set to the order value~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_inputs~ ** Processing line: ~ #Makes development much faster and easier~ ** Processing line: ~ if inputs.keyboard.key_up.r~ ** Processing line: ~ $dragon.reset~ ** Processing line: ~ end~ ** Processing line: ~ checkTileSelected~ ** Processing line: ~ switchModes~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def checkTileSelected~ ** Processing line: ~ if inputs.mouse.down~ ** Processing line: ~ x = inputs.mouse.down.point.x~ ** Processing line: ~ y = inputs.mouse.down.point.y~ ** Processing line: ~ m = (state.tileSize[1] / state.tileSize[0]) #slope~ ** Processing line: ~ state.tileCords.map do~ ** Processing line: ~ |val|~ ** Processing line: ~ #Conditions that makes runtime faster. Checks if the mouse click was between tile dimensions (rectangle collision)~ ** Processing line: ~ next unless val[0] < x && x < val[0] + state.tileSize[0]~ ** Processing line: ~ next unless val[1] < y && y < val[1] + state.tileSize[1]~ ** Processing line: ~ next unless val[2] == true~ ** Processing line: ~ tempBool = false~ ** Processing line: ~ if x == val[0] + (state.tileSize[0] / 2)~ ** Processing line: ~ #The height of a diamond is the height of the diamond, so if x equals that exact point, it must be inside the diamond~ ** Processing line: ~ tempBool = true~ ** Processing line: ~ elsif x < state.tileSize[0] / 2 + val[0]~ ** Processing line: ~ #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the left half of diamond~ ** Processing line: ~ tempY1 = (m * (x - val[0])) + val[1] + (state.tileSize[1] / 2)~ ** Processing line: ~ tempY2 = (-1 * m * (x - val[0])) + val[1] + (state.tileSize[1] / 2)~ ** Processing line: ~ #Checks to see if the mouse click y value is between those temp y values~ ** Processing line: ~ tempBool = true if y < tempY1 && y > tempY2~ ** Processing line: ~ elsif x > state.tileSize[0] / 2 + val[0]~ ** Processing line: ~ #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the right half of diamond~ ** Processing line: ~ tempY1 = (m * (x - val[0] - (state.tileSize[0] / 2))) + val[1]~ ** Processing line: ~ tempY2 = (-1 * m * (x - val[0] - (state.tileSize[0] / 2))) + val[1] + state.tileSize[1]~ ** Processing line: ~ #Checks to see if the mouse click y value is between those temp y values~ ** Processing line: ~ tempBool = true if y > tempY1 && y < tempY2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if tempBool == true~ ** Processing line: ~ if state.mode == :delete~ ** Processing line: ~ val[2] = false~ ** Processing line: ~ state.tileGrid[val[5]][2] = false #Unnecessary because never used again but eh, I like consistency~ ** Processing line: ~ state.tileCords[val[5]][2] = false #Ensures that the tile isn't rendered~ ** Processing line: ~ unless state.tileGrid[val[5]][0] == 0 #If tile is the left most tile in the row, right doesn't get rendered~ ** Processing line: ~ state.tileGrid[val[5] - 1][4] = true #Why the order value is amazing~ ** Processing line: ~ state.tileCords[val[5] - 1][4] = true~ ** Processing line: ~ end~ ** Processing line: ~ unless state.tileGrid[val[5]][1] == state.quantity - 1 #Same but left side~ ** Processing line: ~ state.tileGrid[val[5] + state.quantity][3] = true~ ** Processing line: ~ state.tileCords[val[5] + state.quantity][3] = true~ ** Processing line: ~ end~ ** Processing line: ~ elsif state.mode == :insert~ ** Processing line: ~ #adds the current sprite value selected to tileCords. (changes from the -1 earlier)~ ** Processing line: ~ val[6] = rand(state.spriteSelection.length)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def switchModes~ ** Processing line: ~ #Switches between insert and delete modes~ ** Processing line: ~ if inputs.keyboard.key_up.i && state.mode == :delete~ ** Processing line: ~ state.mode = :insert~ ** Processing line: ~ inputs.keyboard.clear~ ** Processing line: ~ elsif inputs.keyboard.key_up.d && state.mode == :insert~ ** Processing line: ~ state.mode = :delete~ ** Processing line: ~ inputs.keyboard.clear~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $isometric = Isometric.new~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ $isometric.grid = args.grid~ ** Processing line: ~ $isometric.inputs = args.inputs~ ** Processing line: ~ $isometric.state = args.state~ ** Processing line: ~ $isometric.outputs = args.outputs~ ** Processing line: ~ $isometric.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Topdown - Topdown Casino - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Topdown - Topdown Casino - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Topdown - Topdown Casino - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_topdown/topdown_casino/app/main.rb~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~ def coinflip~ ** Processing line: ~ rand < 0.5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class Game~ ** Processing line: ~ attr_accessor :args~ ** Processing line: ~~ ** Processing line: ~ def text_font~ ** Processing line: ~ return nil #"rpg.ttf"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def text_color~ ** Processing line: ~ [ 255, 255, 255, 255 ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_gem_values~ ** Processing line: ~ @args.state.gem0 = ((coinflip) ? 100 : 20)~ ** Processing line: ~ @args.state.gem1 = ((coinflip) ? -10 : -50)~ ** Processing line: ~ @args.state.gem2 = ((coinflip) ? -10 : -30)~ ** Processing line: ~ if coinflip~ ** Processing line: ~ tmp = @args.state.gem0~ ** Processing line: ~ @args.state.gem0 = @args.state.gem1~ ** Processing line: ~ @args.state.gem1 = tmp~ ** Processing line: ~ end~ ** Processing line: ~ if coinflip~ ** Processing line: ~ tmp = @args.state.gem1~ ** Processing line: ~ @args.state.gem1 = @args.state.gem2~ ** Processing line: ~ @args.state.gem2 = tmp~ ** Processing line: ~ end~ ** Processing line: ~ if coinflip~ ** Processing line: ~ tmp = @args.state.gem0~ ** Processing line: ~ @args.state.gem0 = @args.state.gem2~ ** Processing line: ~ @args.state.gem2 = tmp~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def initialize args~ ** Processing line: ~ @args = args~ ** Processing line: ~ @args.state.animticks = 0~ ** Processing line: ~ @args.state.score = 0~ ** Processing line: ~ @args.state.gem_chosen = false~ ** Processing line: ~ @args.state.round_finished = false~ ** Processing line: ~ @args.state.gem0_x = 197~ ** Processing line: ~ @args.state.gem0_y = 720-274~ ** Processing line: ~ @args.state.gem1_x = 623~ ** Processing line: ~ @args.state.gem1_y = 720-274~ ** Processing line: ~ @args.state.gem2_x = 1049~ ** Processing line: ~ @args.state.gem2_y = 720-274~ ** Processing line: ~ @args.state.hero_sprite = "sprites/herodown100.png"~ ** Processing line: ~ @args.state.hero_x = 608~ ** Processing line: ~ @args.state.hero_y = 720-656~ ** Processing line: ~ set_gem_values~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_gem_value x, y, gem~ ** Processing line: ~ if @args.state.gem_chosen~ ** Processing line: ~ @args.outputs.labels << [ x, y + 96, gem.to_s, 1, 1, *text_color, text_font ]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render~ ** Processing line: ~ gemsprite = ((@args.state.animticks % 400) < 200) ? 'sprites/gem200.png' : 'sprites/gem400.png'~ ** Processing line: ~ @args.outputs.background_color = [ 0, 0, 0, 255 ]~ ** Processing line: ~ @args.outputs.sprites << [608, 720-150, 64, 64, 'sprites/oldman.png']~ ** Processing line: ~ @args.outputs.sprites << [300, 720-150, 64, 64, 'sprites/fire.png']~ ** Processing line: ~ @args.outputs.sprites << [900, 720-150, 64, 64, 'sprites/fire.png']~ ** Processing line: ~ @args.outputs.sprites << [@args.state.gem0_x, @args.state.gem0_y, 32, 64, gemsprite]~ ** Processing line: ~ @args.outputs.sprites << [@args.state.gem1_x, @args.state.gem1_y, 32, 64, gemsprite]~ ** Processing line: ~ @args.outputs.sprites << [@args.state.gem2_x, @args.state.gem2_y, 32, 64, gemsprite]~ ** Processing line: ~ @args.outputs.sprites << [@args.state.hero_x, @args.state.hero_y, 64, 64, @args.state.hero_sprite]~ ** Processing line: ~~ ** Processing line: ~ @args.outputs.labels << [ 630, 720-30, "IT'S A SECRET TO EVERYONE.", 1, 1, *text_color, text_font ]~ ** Processing line: ~ @args.outputs.labels << [ 50, 720-85, @args.state.score.to_s, 1, 1, *text_color, text_font ]~ ** Processing line: ~ render_gem_value @args.state.gem0_x, @args.state.gem0_y, @args.state.gem0~ ** Processing line: ~ render_gem_value @args.state.gem1_x, @args.state.gem1_y, @args.state.gem1~ ** Processing line: ~ render_gem_value @args.state.gem2_x, @args.state.gem2_y, @args.state.gem2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc~ ** Processing line: ~ @args.state.animticks += 16~ ** Processing line: ~~ ** Processing line: ~ return unless @args.state.gem_chosen~ ** Processing line: ~ @args.state.round_finished_debounce ||= 60 * 3~ ** Processing line: ~ @args.state.round_finished_debounce -= 1~ ** Processing line: ~ return if @args.state.round_finished_debounce > 0~ ** Processing line: ~~ ** Processing line: ~ @args.state.gem_chosen = false~ ** Processing line: ~ @args.state.hero.sprite[0] = 'sprites/herodown100.png'~ ** Processing line: ~ @args.state.hero.sprite[1] = 608~ ** Processing line: ~ @args.state.hero.sprite[2] = 656~ ** Processing line: ~ @args.state.round_finished_debounce = nil~ ** Processing line: ~ set_gem_values~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def walk xdir, ydir, anim~ ** Processing line: ~ @args.state.hero_sprite = "sprites/#{anim}#{(((@args.state.animticks % 200) < 100) ? '100' : '200')}.png"~ ** Processing line: ~ @args.state.hero_x += 5 * xdir~ ** Processing line: ~ @args.state.hero_y += 5 * ydir~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def check_gem_touching gem_x, gem_y, gem~ ** Processing line: ~ return if @args.state.gem_chosen~ ** Processing line: ~ herorect = [ @args.state.hero_x, @args.state.hero_y, 64, 64 ]~ ** Processing line: ~ return if !herorect.intersect_rect?([gem_x, gem_y, 32, 64])~ ** Processing line: ~ @args.state.gem_chosen = true~ ** Processing line: ~ @args.state.score += gem~ ** Processing line: ~ @args.outputs.sounds << ((gem < 0) ? 'sounds/lose.wav' : 'sounds/win.wav')~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def input~ ** Processing line: ~ if @args.inputs.keyboard.key_held.left~ ** Processing line: ~ walk(-1.0, 0.0, 'heroleft')~ ** Processing line: ~ elsif @args.inputs.keyboard.key_held.right~ ** Processing line: ~ walk(1.0, 0.0, 'heroright')~ ** Processing line: ~ elsif @args.inputs.keyboard.key_held.up~ ** Processing line: ~ walk(0.0, 1.0, 'heroup')~ ** Processing line: ~ elsif @args.inputs.keyboard.key_held.down~ ** Processing line: ~ walk(0.0, -1.0, 'herodown')~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ check_gem_touching(@args.state.gem0_x, @args.state.gem0_y, @args.state.gem0)~ ** Processing line: ~ check_gem_touching(@args.state.gem1_x, @args.state.gem1_y, @args.state.gem1)~ ** Processing line: ~ check_gem_touching(@args.state.gem2_x, @args.state.gem2_y, @args.state.gem2)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ input~ ** Processing line: ~ calc~ ** Processing line: ~ render~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.game ||= Game.new args~ ** Processing line: ~ args.state.game.args = args~ ** Processing line: ~ args.state.game.tick~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Rpg Topdown - Topdown Starting Point - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Topdown - Topdown Starting Point - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Rpg Topdown - Topdown Starting Point - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_rpg_topdown/topdown_starting_point/app/main.rb~ ** Processing line: ~ =begin~ ** Processing line: ~~ ** Processing line: ~ APIs listing that haven't been encountered in previous sample apps:~ ** Processing line: ~~ ** Processing line: ~ - reverse: Returns a new string with the characters from original string in reverse order.~ ** Processing line: ~ For example, the command~ ** Processing line: ~ "dragonruby".reverse~ ** Processing line: ~ would return the string~ ** Processing line: ~ "yburnogard".~ ** Processing line: ~ Reverse is not only limited to strings, but can be applied to arrays and other collections.~ ** Processing line: ~~ ** Processing line: ~ Reminders:~ ** Processing line: ~~ ** Processing line: ~ - ARRAY#intersect_rect?: Returns true or false depending on if two rectangles intersect.~ ** Processing line: ~~ ** Processing line: ~ - args.outputs.labels: An array. The values generate a label.~ ** Processing line: ~ The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE]~ ** Processing line: ~ For more information about labels, go to mygame/documentation/02-labels.md.~ ** Processing line: ~~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~ # This code shows a maze and uses input from the keyboard to move the user around the screen.~ ** Processing line: ~ # The objective is to reach the goal.~ ** Processing line: ~~ ** Processing line: ~ # Sets values of tile size and player's movement speed~ ** Processing line: ~ # Also creates tile or box for player and generates map~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.state.tile_size = 80~ ** Processing line: ~ args.state.player_speed = 4~ ** Processing line: ~ args.state.player ||= tile(args, 7, 3, 0, 128, 180)~ ** Processing line: ~ generate_map args~ ** Processing line: ~~ ** Processing line: ~ # Adds walls, goal, and player to args.outputs.solids so they appear on screen~ ** Processing line: ~ args.outputs.solids << args.state.walls~ ** Processing line: ~ args.outputs.solids << args.state.goal~ ** Processing line: ~ args.outputs.solids << args.state.player~ ** Processing line: ~~ ** Processing line: ~ # If player's box intersects with goal, a label is output onto the screen~ ** Processing line: ~ if args.state.player.intersect_rect? args.state.goal~ ** Processing line: ~ args.outputs.labels << [30, 720 - 30, "You're a wizard Harry!!"] # 30 pixels lower than top of screen~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ move_player args, -1, 0 if args.inputs.keyboard.left # x position decreases by 1 if left key is pressed~ ** Processing line: ~ move_player args, 1, 0 if args.inputs.keyboard.right # x position increases by 1 if right key is pressed~ ** Processing line: ~ move_player args, 0, 1 if args.inputs.keyboard.up # y position increases by 1 if up is pressed~ ** Processing line: ~ move_player args, 0, -1 if args.inputs.keyboard.down # y position decreases by 1 if down is pressed~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets position, size, and color of the tile~ ** Processing line: ~ def tile args, x, y, *color~ ** Processing line: ~ [x * args.state.tile_size, # sets definition for array using method parameters~ ** Processing line: ~ y * args.state.tile_size, # multiplying by tile_size sets x and y to correct position using pixel values~ ** Processing line: ~ args.state.tile_size,~ ** Processing line: ~ args.state.tile_size,~ ** Processing line: ~ *color]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Creates map by adding tiles to the wall, as well as a goal (that the player needs to reach)~ ** Processing line: ~ def generate_map args~ ** Processing line: ~ return if args.state.area~ ** Processing line: ~~ ** Processing line: ~ # Creates the area of the map. There are 9 rows running horizontally across the screen~ ** Processing line: ~ # and 16 columns running vertically on the screen. Any spot with a "1" is not~ ** Processing line: ~ # open for the player to move into (and is green), and any spot with a "0" is available~ ** Processing line: ~ # for the player to move in.~ ** Processing line: ~ args.state.area = [~ ** Processing line: ~ [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,],~ ** Processing line: ~ [1, 1, 1, 2, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,], # the "2" represents the goal~ ** Processing line: ~ [1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,],~ ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,],~ ** Processing line: ~ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,],~ ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,],~ ** Processing line: ~ [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,],~ ** Processing line: ~ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,],~ ** Processing line: ~ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],~ ** Processing line: ~ ].reverse # reverses the order of the area collection~ ** Processing line: ~~ ** Processing line: ~ # By reversing the order, the way that the area appears above is how it appears~ ** Processing line: ~ # on the screen in the game. If we did not reverse, the map would appear inverted.~ ** Processing line: ~~ ** Processing line: ~ #The wall starts off with no tiles.~ ** Processing line: ~ args.state.walls = []~ ** Processing line: ~~ ** Processing line: ~ # If v is 1, a green tile is added to args.state.walls.~ ** Processing line: ~ # If v is 2, a black tile is created as the goal.~ ** Processing line: ~ args.state.area.map_2d do |y, x, v|~ ** Processing line: ~ if v == 1~ ** Processing line: ~ args.state.walls << tile(args, x, y, 0, 255, 0) # green tile~ ** Processing line: ~ elsif v == 2 # notice there is only one "2" above because there is only one single goal~ ** Processing line: ~ args.state.goal = tile(args, x, y, 0, 0, 0) # black tile~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Allows the player to move their box around the screen~ ** Processing line: ~ def move_player args, *vector~ ** Processing line: ~ box = args.state.player.shift_rect(vector) # box is able to move at an angle~ ** Processing line: ~~ ** Processing line: ~ # If the player's box hits a wall, it is not able to move further in that direction~ ** Processing line: ~ return if args.state.walls~ ** Processing line: ~ .any_intersect_rect?(box)~ ** Processing line: ~~ ** Processing line: ~ # Player's box is able to move at angles (not just the four general directions) fast~ ** Processing line: ~ args.state.player =~ ** Processing line: ~ args.state.player~ ** Processing line: ~ .shift_rect(vector.x * args.state.player_speed, # if we don't multiply by speed, then~ ** Processing line: ~ vector.y * args.state.player_speed) # the box will move extremely slow~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Teenytiny - Teenytiny Starting Point - main.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Teenytiny - Teenytiny Starting Point - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Teenytiny - Teenytiny Starting Point - main.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_teenytiny/teenytiny_starting_point/app/main.rb~ ** Processing line: ~ # full documenation is at http://docs.dragonruby.org~ ** Processing line: ~ # be sure to come to the discord if you hit any snags: http://discord.dragonruby.org~ ** Processing line: ~ def tick args~ ** Processing line: ~ # ====================================================~ ** Processing line: ~ # initialize default variables~ ** Processing line: ~ # ====================================================~ ** Processing line: ~~ ** Processing line: ~ # ruby has an operator called ||= which means "only initialize this if it's nil"~ ** Processing line: ~ args.state.count_down ||= 20 * 60 # set the count down to 20 seconds~ ** Processing line: ~ # set the initial position of the target~ ** Processing line: ~ args.state.target ||= { x: args.grid.w.half,~ ** Processing line: ~ y: args.grid.h.half,~ ** Processing line: ~ w: 20,~ ** Processing line: ~ h: 20 }~ ** Processing line: ~~ ** Processing line: ~ # set the initial position of the player~ ** Processing line: ~ args.state.player ||= { x: 50,~ ** Processing line: ~ y: 50,~ ** Processing line: ~ w: 20,~ ** Processing line: ~ h: 20 }~ ** Processing line: ~~ ** Processing line: ~ # set the player movement speed~ ** Processing line: ~ args.state.player_speed ||= 5~ ** Processing line: ~~ ** Processing line: ~ # set the score~ ** Processing line: ~ args.state.score ||= 0~ ** Processing line: ~ args.state.teleports ||= 3~ ** Processing line: ~~ ** Processing line: ~ # set the instructions~ ** Processing line: ~ args.state.instructions ||= "Get to the red goal! Use arrow keys to move. Spacebar to teleport (use them carefully)!"~ ** Processing line: ~~ ** Processing line: ~ # ====================================================~ ** Processing line: ~ # render the game~ ** Processing line: ~ # ====================================================~ ** Processing line: ~ args.outputs.labels << { x: args.grid.w.half, y: args.grid.h - 10,~ ** Processing line: ~ text: args.state.instructions,~ ** Processing line: ~ alignment_enum: 1 }~ ** Processing line: ~~ ** Processing line: ~ # check if it's game over. if so, then render game over~ ** Processing line: ~ # otherwise render the current time left~ ** Processing line: ~ if game_over? args~ ** Processing line: ~ args.outputs.labels << { x: args.grid.w.half,~ ** Processing line: ~ y: args.grid.h - 40,~ ** Processing line: ~ text: "game over! (press r to start over)",~ ** Processing line: ~ alignment_enum: 1 }~ ** Processing line: ~ else~ ** Processing line: ~ args.outputs.labels << { x: args.grid.w.half,~ ** Processing line: ~ y: args.grid.h - 40,~ ** Processing line: ~ text: "time left: #{(args.state.count_down.idiv 60) + 1}",~ ** Processing line: ~ alignment_enum: 1 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # render the score~ ** Processing line: ~ args.outputs.labels << { x: args.grid.w.half,~ ** Processing line: ~ y: args.grid.h - 70,~ ** Processing line: ~ text: "score: #{args.state.score}",~ ** Processing line: ~ alignment_enum: 1 }~ ** Processing line: ~~ ** Processing line: ~ # render the player with teleport count~ ** Processing line: ~ args.outputs.sprites << { x: args.state.player.x,~ ** Processing line: ~ y: args.state.player.y,~ ** Processing line: ~ w: args.state.player.w,~ ** Processing line: ~ h: args.state.player.h,~ ** Processing line: ~ path: 'sprites/square-green.png' }~ ** Processing line: ~~ ** Processing line: ~ args.outputs.labels << { x: args.state.player.x + 10,~ ** Processing line: ~ y: args.state.player.y + 40,~ ** Processing line: ~ text: "teleports: #{args.state.teleports}",~ ** Processing line: ~ alignment_enum: 1, size_enum: -2 }~ ** Processing line: ~~ ** Processing line: ~ # render the target~ ** Processing line: ~ args.outputs.sprites << { x: args.state.target.x,~ ** Processing line: ~ y: args.state.target.y,~ ** Processing line: ~ w: args.state.target.w,~ ** Processing line: ~ h: args.state.target.h,~ ** Processing line: ~ path: 'sprites/square-red.png' }~ ** Processing line: ~~ ** Processing line: ~ # ====================================================~ ** Processing line: ~ # run simulation~ ** Processing line: ~ # ====================================================~ ** Processing line: ~~ ** Processing line: ~ # count down calculation~ ** Processing line: ~ args.state.count_down -= 1~ ** Processing line: ~ args.state.count_down = -1 if args.state.count_down < -1~ ** Processing line: ~~ ** Processing line: ~ # ====================================================~ ** Processing line: ~ # process player input~ ** Processing line: ~ # ====================================================~ ** Processing line: ~ # if it isn't game over let them move~ ** Processing line: ~ if !game_over? args~ ** Processing line: ~ dir_y = 0~ ** Processing line: ~ dir_x = 0~ ** Processing line: ~~ ** Processing line: ~ # determine the change horizontally~ ** Processing line: ~ if args.inputs.keyboard.up~ ** Processing line: ~ dir_y += args.state.player_speed~ ** Processing line: ~ elsif args.inputs.keyboard.down~ ** Processing line: ~ dir_y -= args.state.player_speed~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # determine the change vertically~ ** Processing line: ~ if args.inputs.keyboard.left~ ** Processing line: ~ dir_x -= args.state.player_speed~ ** Processing line: ~ elsif args.inputs.keyboard.right~ ** Processing line: ~ dir_x += args.state.player_speed~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # determine if teleport can be used~ ** Processing line: ~ if args.inputs.keyboard.key_down.space && args.state.teleports > 0~ ** Processing line: ~ args.state.teleports -= 1~ ** Processing line: ~ dir_x *= 20~ ** Processing line: ~ dir_y *= 20~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # apply change to player~ ** Processing line: ~ args.state.player.x += dir_x~ ** Processing line: ~ args.state.player.y += dir_y~ ** Processing line: ~ else~ ** Processing line: ~ # if r is pressed, reset the game~ ** Processing line: ~ if args.inputs.keyboard.key_down.r~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # ====================================================~ ** Processing line: ~ # determine score~ ** Processing line: ~ # ====================================================~ ** Processing line: ~~ ** Processing line: ~ # calculate new score if the player is at goal~ ** Processing line: ~ if !game_over? args~ ** Processing line: ~~ ** Processing line: ~ # if the player is at the goal, then move the goal~ ** Processing line: ~ if args.state.player.intersect_rect? args.state.target~ ** Processing line: ~ # increment the goal~ ** Processing line: ~ args.state.score += 1~ ** Processing line: ~~ ** Processing line: ~ # move the goal to a random location~ ** Processing line: ~ args.state.target = { x: (rand args.grid.w), y: (rand args.grid.h), w: 20, h: 20 }~ ** Processing line: ~~ ** Processing line: ~ # make sure the goal is inside the view area~ ** Processing line: ~ if args.state.target.x < 0~ ** Processing line: ~ args.state.target.x += 20~ ** Processing line: ~ elsif args.state.target.x > 1280~ ** Processing line: ~ args.state.target.x -= 20~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # make sure the goal is inside the view area~ ** Processing line: ~ if args.state.target.y < 0~ ** Processing line: ~ args.state.target.y += 20~ ** Processing line: ~ elsif args.state.target.y > 720~ ** Processing line: ~ args.state.target.y -= 20~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def game_over? args~ ** Processing line: ~ args.state.count_down < 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** Teenytiny - Teenytiny Starting Point - license.txt~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Teenytiny - Teenytiny Starting Point - license.txt~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~Teenytiny - Teenytiny Starting Point - license.txt~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./samples/99_genre_teenytiny/teenytiny_starting_point/license.txt~ ** Processing line: ~ Copyright 2019 DragonRuby LLC~ ** Processing line: ~~ ** Processing line: ~ MIT License~ ** Processing line: ~~ ** Processing line: ~ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:~ ** Processing line: ~~ ** Processing line: ~ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.~ ** Processing line: ~~ ** Processing line: ~ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~** OSS~ - H2 detected. - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~OSS~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~** ~... gsub-ing empty string - Formatting line: ~OSS~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~Follows is a source code listing for all files that have been open sourced. This code can be found online at [[https://github.com/DragonRuby/dragonruby-game-toolkit-contrib/]].~ - P detected. - Determining if line is a header. - Line does not appear to be a header. - Formatting line: ~Follows is a source code listing for all files that have been open sourced. This code can be found online at [[https://github.com/DragonRuby/dragonruby-game-toolkit-contrib/]].~ - Line's tilde count is: 0 - Line contains link marker: true - LINK detected. ** Processing line: ~*** api.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~api.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~api.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/api.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # api.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Api~ ** Processing line: ~ def initialize~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_api_autocomplete args, req~ ** Processing line: ~ html = <<-S~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ DragonRuby Game Toolkit Documentation~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~
    ~ ** Processing line: ~
    index
    ~ ** Processing line: ~ ~ ** Processing line: ~
    code
    ~ ** Processing line: ~ ~ ** Processing line: ~
    ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~
    ~ ** Processing line: ~
    ~
    ** Processing line: ~        
    ~ ** Processing line: ~~ ** Processing line: ~ #{links}~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ S~ ** Processing line: ~~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ html,~ ** Processing line: ~ { 'Content-Type' => 'text/html' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def post_api_autocomplete args, req~ ** Processing line: ~ json = ($gtk.parse_json req.body)~ ** Processing line: ~ index = json["index"].to_i~ ** Processing line: ~ text = json["text"]~ ** Processing line: ~ suggestions = args.gtk.suggest_autocompletion index: index, text: text~ ** Processing line: ~ list_as_string = suggestions.join("\n")~ ** Processing line: ~ req.respond 200, list_as_string, { 'Content-Type' => 'text/plain' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ define_method :links do~ ** Processing line: ~ <<-S~ ** Processing line: ~
      ~ ** Processing line: ~
    • Home
    • ~ ** Processing line: ~
    • Docs
    • ~ ** Processing line: ~
    • Control Panel
    • ~ ** Processing line: ~
    • Console
    • ~ ** Processing line: ~
    • Logs
    • ~ ** Processing line: ~
    • Puts
    • ~ ** Processing line: ~
    • Code
    • ~ ** Processing line: ~
    ~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_index args, req~ ** Processing line: ~ req.respond 200, <<-S, { 'Content-Type' => 'text/html' }~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ DragonRuby Game Toolkit Documentation~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ #{links}~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def source_code_links args~ ** Processing line: ~ links = args.gtk.reload_list_history.keys.map do |f|~ ** Processing line: ~ "
  • #{f}
  • "~ ** Processing line: ~ end~ ** Processing line: ~ <<-S~ ** Processing line: ~
      ~ ** Processing line: ~ #{links.join("\n")}~ ** Processing line: ~
    ~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_api_code args, req~ ** Processing line: ~ view = <<-S~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ DragonRuby Game Toolkit Documentation~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ #{source_code_links args}~ ** Processing line: ~~ ** Processing line: ~ #{links}~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ S~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ view,~ ** Processing line: ~ { 'Content-Type' => 'text/html' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def code_edit_view args, file~ ** Processing line: ~ view = <<-S~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ DragonRuby Game Toolkit Documentation~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~
    ~ ** Processing line: ~
    #{file}:
    ~ ** Processing line: ~ ~ ** Processing line: ~
    ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~
    ~ ** Processing line: ~ #{source_code_links args}~ ** Processing line: ~~ ** Processing line: ~ #{links}~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_api_code_edit args, req~ ** Processing line: ~ file = req.uri.split('?').last.gsub("file=", "")~ ** Processing line: ~ view = code_edit_view args, file~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ view,~ ** Processing line: ~ { 'Content-Type' => 'text/html' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def post_api_code_update args, req~ ** Processing line: ~ file = req.uri.split('?').last.gsub("file=", "")~ ** Processing line: ~ code = ($gtk.parse_json req.body)["code"]~ ** Processing line: ~ args.gtk.write_file file, code~ ** Processing line: ~ view = code_edit_view args, file~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ view,~ ** Processing line: ~ { 'Content-Type' => 'text/html' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_api_boot args, req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ args.gtk.read_file("tmp/src_backup/boot.txt"),~ ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_api_trace args, req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ args.gtk.read_file("logs/trace.txt"),~ ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_api_log args, req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ args.gtk.read_file("logs/log.txt"),~ ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def post_api_log args, req~ ** Processing line: ~ Log.log req.body~ ** Processing line: ~~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ "ok",~ ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_api_puts args, req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ args.gtk.read_file("logs/puts.txt"),~ ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_api_changes args, req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ args.gtk.read_file("tmp/src_backup/src_backup_changes.txt"),~ ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_favicon_ico args, req~ ** Processing line: ~ @favicon ||= args.gtk.read_file('docs/favicon.ico')~ ** Processing line: ~ req.respond 200, @favicon, { "Content-Type" => 'image/x-icon' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_src_backup args, req~ ** Processing line: ~ file_name = req.uri.gsub("/dragon/", "")~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ args.gtk.read_file("tmp/src_backup/#{file_name}"),~ ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_not_found args, req~ ** Processing line: ~ puts("METHOD: #{req.method}");~ ** Processing line: ~ puts("URI: #{req.uri}");~ ** Processing line: ~ puts("HEADERS:");~ ** Processing line: ~ req.headers.each { |k,v| puts(" #{k}: #{v}") }~ ** Processing line: ~ req.respond 404, "not found: #{req.uri}", { }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_docs_html args, req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ args.gtk.read_file("docs/docs.html"),~ ** Processing line: ~ { 'Content-Type' => 'text/html' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_docs_css args, req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ args.gtk.read_file("docs/docs.css"),~ ** Processing line: ~ { 'Content-Type' => 'text/css' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_docs_search_gif args, req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ args.gtk.read_file("docs/docs_search.gif"),~ ** Processing line: ~ { 'Content-Type' => 'image/gif' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_src_backup_index_html args, req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ args.gtk.read_file("/tmp/src_backup/src_backup_index.html"),~ ** Processing line: ~ { 'Content-Type' => 'text/html' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_src_backup_index_txt args, req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ args.gtk.read_file("/tmp/src_backup/src_backup_index.txt"),~ ** Processing line: ~ { 'Content-Type' => 'text/txt' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_src_backup_css args, req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ args.gtk.read_file("/tmp/src_backup/src_backup.css"),~ ** Processing line: ~ { 'Content-Type' => 'text/css' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_src_backup_changes_html args, req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ args.gtk.read_file("/tmp/src_backup/src_backup_changes.html"),~ ** Processing line: ~ { 'Content-Type' => 'text/html' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_src_backup_changes_txt args, req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ args.gtk.read_file("/tmp/src_backup/src_backup_changes.txt"),~ ** Processing line: ~ { 'Content-Type' => 'text/txt' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_api_eval args, req~ ** Processing line: ~ eval_view = <<-S~ ** Processing line: ~ ~ ** Processing line: ~ Eval~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~
    ~ ** Processing line: ~ ~ ** Processing line: ~
    ~ ** Processing line: ~ ~ ** Processing line: ~
    ~ ** Processing line: ~
    curl -H "Content-Type: application/json" --data '{ "code": "$result = $args.state" }' -X POST http://localhost:9001/dragon/eval/
    ~ ** Processing line: ~
    Eval Result:
    ~ ** Processing line: ~
    ~
    ** Processing line: ~      #{links}~
    ** Processing line: ~    ~
    ** Processing line: ~  ~
    ** Processing line: ~  S~
    ** Processing line: ~        req.respond 200,~
    ** Processing line: ~                    eval_view,~
    ** Processing line: ~                    { 'Content-Type' => 'text/html' }~
    ** Processing line: ~      end~
    ** Processing line: ~~
    ** Processing line: ~      def post_api_eval args, req~
    ** Processing line: ~        if json? req~
    ** Processing line: ~          code = ($gtk.parse_json req.body)["code"]~
    ** Processing line: ~          code = code.gsub("$result", "$eval_result")~
    ** Processing line: ~          Object.new.instance_eval do~
    ** Processing line: ~            begin~
    ** Processing line: ~              Kernel.eval code~
    ** Processing line: ~            rescue Exception => e~
    ** Processing line: ~              $eval_result = e~
    ** Processing line: ~            end~
    ** Processing line: ~          end~
    ** Processing line: ~        end~
    ** Processing line: ~~
    ** Processing line: ~        req.respond 200,~
    ** Processing line: ~                    "#{$eval_result || $eval_results || "nil"}",~
    ** Processing line: ~                    { 'Content-Type' => 'text/plain' }~
    ** Processing line: ~~
    ** Processing line: ~        $eval_result  = nil~
    ** Processing line: ~        $eval_results = nil~
    ** Processing line: ~      end~
    ** Processing line: ~~
    ** Processing line: ~      def api_css_string~
    ** Processing line: ~~
    ** Processing line: ~      end~
    ** Processing line: ~~
    ** Processing line: ~      def get_api_console args, req~
    ** Processing line: ~        html = console_view "# write your code here and set $result.\n$result = $gtk.args.state"~
    ** Processing line: ~        req.respond 200,~
    ** Processing line: ~                    html,~
    ** Processing line: ~                    { 'Content-Type' => 'text/html' }~
    ** Processing line: ~      end~
    ** Processing line: ~~
    ** Processing line: ~      def control_panel_view~
    ** Processing line: ~        <<-S~
    ** Processing line: ~  ~
    ** Processing line: ~    console~
    ** Processing line: ~    ~
    ** Processing line: ~      ~
    ** Processing line: ~      
    ~ ** Processing line: ~ ~ ** Processing line: ~
    ~ ** Processing line: ~
    ~ ** Processing line: ~ ~ ** Processing line: ~
    ~ ** Processing line: ~
    ~ ** Processing line: ~ ~ ** Processing line: ~
    ~ ** Processing line: ~
    ~ ** Processing line: ~ ~ ** Processing line: ~
    ~ ** Processing line: ~
    ~ ** Processing line: ~ ~ ** Processing line: ~
    ~ ** Processing line: ~
    ~ ** Processing line: ~ #{links}~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_api_control_panel args, req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ control_panel_view,~ ** Processing line: ~ { 'Content-Type' => 'text/html' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def json? req~ ** Processing line: ~ req.headers.find { |k, v| k == "Content-Type" && (v.include? "application/json") }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def post_api_reset args, req~ ** Processing line: ~ $gtk.reset if json? req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ control_panel_view,~ ** Processing line: ~ { 'Content-Type' => 'text/html' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def post_api_record args, req~ ** Processing line: ~ $recording.start 100 if json? req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ control_panel_view,~ ** Processing line: ~ { 'Content-Type' => 'text/html' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def post_api_record_stop args, req~ ** Processing line: ~ $recording.stop 'replay.txt' if json? req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ control_panel_view,~ ** Processing line: ~ { 'Content-Type' => 'text/html' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def post_api_replay args, req~ ** Processing line: ~ $replay.start 'replay.txt' if json? req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ control_panel_view,~ ** Processing line: ~ { 'Content-Type' => 'text/html' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def post_api_show_console args, req~ ** Processing line: ~ $gtk.console.show if json? req~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ control_panel_view,~ ** Processing line: ~ { 'Content-Type' => 'text/html' }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ args.inputs.http_requests.each do |req|~ ** Processing line: ~ match_candidate = { method: req.method.downcase.to_sym,~ ** Processing line: ~ uri: req.uri,~ ** Processing line: ~ uri_without_query_string: (req.uri.split '?').first,~ ** Processing line: ~ query_string: (req.uri.split '?').last,~ ** Processing line: ~ has_query_string: !!(req.uri.split '?').last,~ ** Processing line: ~ has_api_prefix: (req.uri.start_with? "/dragon"),~ ** Processing line: ~ end_with_rb: (req.uri.end_with? ".rb"),~ ** Processing line: ~ has_file_extension: file_extensions.find { |f| req.uri.include? f },~ ** Processing line: ~ has_trailing_slash: (req.uri.split('?').first.end_with? "/") }~ ** Processing line: ~~ ** Processing line: ~ if !match_candidate[:has_file_extension]~ ** Processing line: ~ if !match_candidate[:has_trailing_slash]~ ** Processing line: ~ match_candidate[:uri] = match_candidate[:uri_without_query_string] + "/"~ ** Processing line: ~ if match_candidate[:query_string]~ ** Processing line: ~ match_candidate[:uri] += "?#{match_candidate[:query_string]}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ context = { args: args, req: req, match_candidate: match_candidate }~ ** Processing line: ~~ ** Processing line: ~ process! context: context, routes: routes~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def url_decode args, string~ ** Processing line: ~ args.fn.gsub string,~ ** Processing line: ~ '+', " ",~ ** Processing line: ~ '%27', "'",~ ** Processing line: ~ '%22', '"',~ ** Processing line: ~ '%0D%0A', "\n",~ ** Processing line: ~ '%3D', "=",~ ** Processing line: ~ '%3B', ";",~ ** Processing line: ~ '%7C', "|",~ ** Processing line: ~ '%28', "(",~ ** Processing line: ~ '%29', ")",~ ** Processing line: ~ '%7B', "{",~ ** Processing line: ~ '%7D', "}",~ ** Processing line: ~ '%2C', ",",~ ** Processing line: ~ '%3A', ":",~ ** Processing line: ~ '%5B', "[",~ ** Processing line: ~ '%5D', "]",~ ** Processing line: ~ '%23', "#",~ ** Processing line: ~ '%21', "!",~ ** Processing line: ~ '%3C', "<",~ ** Processing line: ~ '%3E', ">",~ ** Processing line: ~ '%2B', "+",~ ** Processing line: ~ '%2F', "/",~ ** Processing line: ~ '%40', "@",~ ** Processing line: ~ '%3F', "?",~ ** Processing line: ~ '%26', "&",~ ** Processing line: ~ '%24', "$",~ ** Processing line: ~ '%5C', "\\",~ ** Processing line: ~ '%60', "`",~ ** Processing line: ~ '%7E', "~",~ ** Processing line: ~ '%C2%B2', "²",~ ** Processing line: ~ '%5E', "^",~ ** Processing line: ~ '%C2%BA', "º",~ ** Processing line: ~ '%C2%A7', "§",~ ** Processing line: ~ '%20', " ",~ ** Processing line: ~ '%0A', "\n",~ ** Processing line: ~ '%25', "%",~ ** Processing line: ~ '%2A', "*"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def file_extensions~ ** Processing line: ~ [".html", ".css", ".gif", ".txt", ".ico", ".rb"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def routes~ ** Processing line: ~ [{ match_criteria: { method: :get, uri: "/" },~ ** Processing line: ~ handler: :get_index },~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/" },~ ** Processing line: ~ handler: :get_index },~ ** Processing line: ~~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/boot/" },~ ** Processing line: ~ handler: :get_api_boot },~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/trace/" },~ ** Processing line: ~ handler: :get_api_trace },~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/puts/" },~ ** Processing line: ~ handler: :get_api_puts },~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/log/" },~ ** Processing line: ~ handler: :get_api_log },~ ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/log/" },~ ** Processing line: ~ handler: :post_api_log },~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/changes/" },~ ** Processing line: ~ handler: :get_api_changes },~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/eval/" },~ ** Processing line: ~ handler: :get_api_eval },~ ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/eval/" },~ ** Processing line: ~ handler: :post_api_eval },~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/console/" },~ ** Processing line: ~ handler: :get_api_console },~ ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/console/" },~ ** Processing line: ~ handler: :post_api_console },~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/control_panel/" },~ ** Processing line: ~ handler: :get_api_control_panel },~ ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/reset/" },~ ** Processing line: ~ handler: :post_api_reset },~ ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/record/" },~ ** Processing line: ~ handler: :post_api_record },~ ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/record_stop/" },~ ** Processing line: ~ handler: :post_api_record_stop },~ ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/replay/" },~ ** Processing line: ~ handler: :post_api_replay },~ ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/show_console/" },~ ** Processing line: ~ handler: :post_api_show_console },~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/code/" },~ ** Processing line: ~ handler: :get_api_code },~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/dragon/autocomplete/" },~ ** Processing line: ~ handler: :get_api_autocomplete },~ ** Processing line: ~ { match_criteria: { method: :post, uri: "/dragon/autocomplete/" },~ ** Processing line: ~ handler: :post_api_autocomplete },~ ** Processing line: ~ { match_criteria: { method: :get, uri_without_query_string: "/dragon/code/edit/", has_query_string: true },~ ** Processing line: ~ handler: :get_api_code_edit },~ ** Processing line: ~ { match_criteria: { method: :post, uri_without_query_string: "/dragon/code/update/", has_query_string: true },~ ** Processing line: ~ handler: :post_api_code_update },~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/docs.html" },~ ** Processing line: ~ handler: :get_docs_html },~ ** Processing line: ~ { match_criteria: { method: :get, uri_without_query_string: "/docs.css" },~ ** Processing line: ~ handler: :get_docs_css },~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/docs_search.gif" },~ ** Processing line: ~ handler: :get_docs_search_gif },~ ** Processing line: ~~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/src_backup_index.html" },~ ** Processing line: ~ handler: :get_src_backup_index_html },~ ** Processing line: ~~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/src_backup_index.txt" },~ ** Processing line: ~ handler: :get_src_backup_index_txt },~ ** Processing line: ~~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/src_backup_changes.html" },~ ** Processing line: ~ handler: :get_src_backup_changes_html },~ ** Processing line: ~~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/src_backup_changes.txt" },~ ** Processing line: ~ handler: :get_src_backup_changes_txt },~ ** Processing line: ~~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/src_backup.css" },~ ** Processing line: ~ handler: :get_src_backup_css },~ ** Processing line: ~~ ** Processing line: ~ { match_criteria: { method: :get, uri: "/favicon.ico" },~ ** Processing line: ~ handler: :get_favicon_ico },~ ** Processing line: ~~ ** Processing line: ~ { match_criteria: { method: :get, end_with_rb: true },~ ** Processing line: ~ handler: :get_src_backup },~ ** Processing line: ~~ ** Processing line: ~ { match_criteria: { method: :get, end_with_rb: true },~ ** Processing line: ~ handler: :get_src_backup }~ ** Processing line: ~~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process! opts~ ** Processing line: ~ routes = opts[:routes]~ ** Processing line: ~ context = opts[:context]~ ** Processing line: ~ routes.each do |route|~ ** Processing line: ~ match_found = (process_single! route: route, context: context)~ ** Processing line: ~ return if match_found~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_single! opts~ ** Processing line: ~ match_criteria = opts[:route][:match_criteria]~ ** Processing line: ~ m = opts[:route][:handler]~ ** Processing line: ~ args = opts[:context][:args]~ ** Processing line: ~ req = opts[:context][:req]~ ** Processing line: ~ match_candidate = opts[:context][:match_candidate]~ ** Processing line: ~ match_criteria.each do |k, v|~ ** Processing line: ~ return false if match_candidate[k] != v~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ begin~ ** Processing line: ~ send m, args, req~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ req.respond 200,~ ** Processing line: ~ "#{e}\n#{e.__backtrace_to_org__}",~ ** Processing line: ~ { 'Content-Type' => 'text/plain' }~ ** Processing line: ~ end~ ** Processing line: ~ return true~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** args.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~args.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~args.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/args.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # args.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ # This class is the one you'll interact with the most. It's~ ** Processing line: ~ # constructed by the DragonRuby Runtime and is provided to you on~ ** Processing line: ~ # each tick.~ ** Processing line: ~ class Args~ ** Processing line: ~ include ArgsDeprecated~ ** Processing line: ~ include Serialize~ ** Processing line: ~ attr_accessor :cvars~ ** Processing line: ~ attr_accessor :inputs~ ** Processing line: ~ attr_accessor :outputs~ ** Processing line: ~ attr_accessor :audio~ ** Processing line: ~ attr_accessor :grid~ ** Processing line: ~ attr_accessor :recording~ ** Processing line: ~ attr_accessor :geometry~ ** Processing line: ~ attr_accessor :fn~ ** Processing line: ~ attr_accessor :state~ ** Processing line: ~ attr_accessor :temp_state~ ** Processing line: ~ attr_accessor :runtime~ ** Processing line: ~ alias_method :gtk, :runtime~ ** Processing line: ~ attr_accessor :passes~ ** Processing line: ~ attr_accessor :wizards~ ** Processing line: ~ attr_accessor :layout~ ** Processing line: ~ attr_accessor :easing~ ** Processing line: ~ attr_accessor :string~ ** Processing line: ~~ ** Processing line: ~ def initialize runtime, recording~ ** Processing line: ~ @inputs = Inputs.new~ ** Processing line: ~ @outputs = Outputs.new args: self~ ** Processing line: ~ @cvars = {}~ ** Processing line: ~ @audio = {}~ ** Processing line: ~ @passes = []~ ** Processing line: ~ @state = OpenEntity.new~ ** Processing line: ~ @temp_state = OpenEntity.new~ ** Processing line: ~ @state.tick_count = -1~ ** Processing line: ~ @runtime = runtime~ ** Processing line: ~ @recording = recording~ ** Processing line: ~ @grid = Grid.new runtime~ ** Processing line: ~ @render_targets = {}~ ** Processing line: ~ @pixel_arrays = {}~ ** Processing line: ~ @all_tests = []~ ** Processing line: ~ @geometry = GTK::Geometry~ ** Processing line: ~ @fn = GTK::Fn~ ** Processing line: ~ @wizards = Wizards.new~ ** Processing line: ~ @layout = GTK::Layout.new @grid.w, @grid.h~ ** Processing line: ~ @easing = GTK::Easing~ ** Processing line: ~ @string = String~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # The number of ticks since the start of the game.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Integer]~ ** Processing line: ~ def tick_count~ ** Processing line: ~ @state.tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_count= value~ ** Processing line: ~ @state.tick_count = value~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ {~ ** Processing line: ~ state: state.as_hash,~ ** Processing line: ~ temp_state: temp_state.as_hash,~ ** Processing line: ~ inputs: inputs.serialize,~ ** Processing line: ~ passes: passes.serialize,~ ** Processing line: ~ outputs: outputs.serialize,~ ** Processing line: ~ grid: grid.serialize~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def destructure~ ** Processing line: ~ [grid, inputs, state, outputs, runtime, passes]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def clear_pixel_arrays~ ** Processing line: ~ pixel_arrays_clear~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def pixel_arrays_clear~ ** Processing line: ~ @pixel_arrays = {}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def pixel_arrays~ ** Processing line: ~ @pixel_arrays~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def pixel_array name~ ** Processing line: ~ name = name.to_s~ ** Processing line: ~ if !@pixel_arrays[name]~ ** Processing line: ~ @pixel_arrays[name] = PixelArray.new~ ** Processing line: ~ end~ ** Processing line: ~ @pixel_arrays[name]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def clear_render_targets~ ** Processing line: ~ render_targets_clear~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_targets_clear~ ** Processing line: ~ @render_targets = {}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_targets~ ** Processing line: ~ @render_targets~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_target name~ ** Processing line: ~ name = name.to_s~ ** Processing line: ~ if !@render_targets[name]~ ** Processing line: ~ @render_targets[name] = Outputs.new(args: self, target: name, background_color_override: [255, 255, 255, 0])~ ** Processing line: ~ @passes << @render_targets[name]~ ** Processing line: ~ end~ ** Processing line: ~ @render_targets[name]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def solids~ ** Processing line: ~ @outputs.solids~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def static_solids~ ** Processing line: ~ @outputs.static_solids~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def sprites~ ** Processing line: ~ @outputs.sprites~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def static_sprites~ ** Processing line: ~ @outputs.static_sprites~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def labels~ ** Processing line: ~ @outputs.labels~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def static_labels~ ** Processing line: ~ @outputs.static_labels~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def lines~ ** Processing line: ~ @outputs.lines~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def static_lines~ ** Processing line: ~ @outputs.static_lines~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def borders~ ** Processing line: ~ @outputs.borders~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def static_borders~ ** Processing line: ~ @outputs.static_borders~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def primitives~ ** Processing line: ~ @outputs.primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def static_primitives~ ** Processing line: ~ @outputs.static_primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def keyboard~ ** Processing line: ~ @inputs.keyboard~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def click~ ** Processing line: ~ return nil unless @inputs.mouse.click~ ** Processing line: ~~ ** Processing line: ~ @inputs.mouse.click.point~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def click_at~ ** Processing line: ~ return nil unless @inputs.mouse.click~ ** Processing line: ~~ ** Processing line: ~ @inputs.mouse.click.created_at~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mouse~ ** Processing line: ~ @inputs.mouse~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @see Inputs#controller_one~ ** Processing line: ~ # @return (see Inputs#controller_one)~ ** Processing line: ~ def controller_one~ ** Processing line: ~ @inputs.controller_one~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @see Inputs#controller_two~ ** Processing line: ~ # @return (see Inputs#controller_two)~ ** Processing line: ~ def controller_two~ ** Processing line: ~ @inputs.controller_two~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def autocomplete_methods~ ** Processing line: ~ [:inputs, :outputs, :gtk, :state, :geometry, :audio, :grid, :layout, :fn]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def method_missing name, *args, &block~ ** Processing line: ~ if (args.length <= 1) && (@state.as_hash.key? name)~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ * ERROR - :#{name} method missing on ~#{self.class.name}~.~ ** Processing line: ~ The method~ ** Processing line: ~ :#{name}~ ** Processing line: ~ with args~ ** Processing line: ~ #{args}~ ** Processing line: ~ doesn't exist on #{inspect}.~ ** Processing line: ~ ** POSSIBLE SOLUTION - ~args.state.#{name}~ exists.~ ** Processing line: ~ Did you forget ~.state~ before ~.#{name}~?~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ super~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** assert.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~assert.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~assert.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/assert.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # assert.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ =begin~ ** Processing line: ~ This is a tiny assertion api for the unit testing portion of Game Toolkit.~ ** Processing line: ~~ ** Processing line: ~ @example~ ** Processing line: ~~ ** Processing line: ~ 1. Create a file called tests.rb under mygame.~ ** Processing line: ~ 2. Any method that begins with the word test_ will be considered a test.~ ** Processing line: ~~ ** Processing line: ~ def test_this_works args, assert~ ** Processing line: ~ assert.equal! 1, 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ 3. To run a test, save the file while the game is running.~ ** Processing line: ~~ ** Processing line: ~ @example~ ** Processing line: ~~ ** Processing line: ~ To add an assertion open up this class and write:~ ** Processing line: ~~ ** Processing line: ~ class Assert~ ** Processing line: ~ def custom_assertion actual, expected, message = nil~ ** Processing line: ~ # this tells Game Toolkit that an assertion was performed (so that the test isn't marked inconclusive).~ ** Processing line: ~ @assertion_performed = true~ ** Processing line: ~~ ** Processing line: ~ # perform your custom logic here and raise an exception to denote a failure.~ ** Processing line: ~~ ** Processing line: ~ raise "Some Error. #{message}."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ =end~ ** Processing line: ~ class Assert~ ** Processing line: ~ attr :assertion_performed~ ** Processing line: ~~ ** Processing line: ~ =begin~ ** Processing line: ~ Use this if you are throwing your own exceptions and you want to mark the tests as ran (so that it wont be marked as inconclusive).~ ** Processing line: ~ =end~ ** Processing line: ~ def ok!~ ** Processing line: ~ @assertion_performed = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ =begin~ ** Processing line: ~ Assert if a value is a truthy value. All assert methods take an optional final parameter that is the message to display to the user.~ ** Processing line: ~~ ** Processing line: ~ @example~ ** Processing line: ~~ ** Processing line: ~ def test_does_this_work args, assert~ ** Processing line: ~ some_result = Person.new~ ** Processing line: ~ assert.true! some_result~ ** Processing line: ~ # OR~ ** Processing line: ~ assert.true! some_result, "Person was not created."~ ** Processing line: ~ end~ ** Processing line: ~ =end~ ** Processing line: ~ def true! value, message = nil~ ** Processing line: ~ @assertion_performed = true~ ** Processing line: ~ if !value~ ** Processing line: ~ message = "#{value} was not truthy.\n#{message}"~ ** Processing line: ~ raise "#{message}"~ ** Processing line: ~ end~ ** Processing line: ~ nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ =begin~ ** Processing line: ~ Assert if a value is a falsey value.~ ** Processing line: ~~ ** Processing line: ~ @example~ ** Processing line: ~~ ** Processing line: ~ def test_does_this_work args, assert~ ** Processing line: ~ some_result = nil~ ** Processing line: ~ assert.false! some_result~ ** Processing line: ~ end~ ** Processing line: ~ =end~ ** Processing line: ~ def false! value, message = nil~ ** Processing line: ~ @assertion_performed = true~ ** Processing line: ~ if value~ ** Processing line: ~ message = "#{value} was not falsey.\n#{message}"~ ** Processing line: ~ raise message~ ** Processing line: ~ end~ ** Processing line: ~ nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ =begin~ ** Processing line: ~ Assert if two values are equal.~ ** Processing line: ~~ ** Processing line: ~ @example~ ** Processing line: ~~ ** Processing line: ~ def test_does_this_work args, assert~ ** Processing line: ~ a = 1~ ** Processing line: ~ b = 1~ ** Processing line: ~ assert.equal! a, b~ ** Processing line: ~ end~ ** Processing line: ~ =end~ ** Processing line: ~ def equal! actual, expected, message = nil~ ** Processing line: ~ @assertion_performed = true~ ** Processing line: ~ if actual != expected~ ** Processing line: ~ actual_string = "#{actual}#{actual.nil? ? " (nil) " : " " }".strip~ ** Processing line: ~ message = "actual:\n#{actual_string}\n\ndid not equal\n\nexpected:\n#{expected}\n#{message}"~ ** Processing line: ~ raise message~ ** Processing line: ~ end~ ** Processing line: ~ nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def not_equal! actual, expected, message = nil~ ** Processing line: ~ @assertion_performed = true~ ** Processing line: ~ if actual == expected~ ** Processing line: ~ actual_string = "#{actual}#{actual.nil? ? " (nil) " : " " }".strip~ ** Processing line: ~ message = "actual:\n#{actual_string}\n\nequaled\n\nexpected:\n#{expected}\n#{message}"~ ** Processing line: ~ raise message~ ** Processing line: ~ end~ ** Processing line: ~ nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ =begin~ ** Processing line: ~ Assert if a value is explicitly nil (not false).~ ** Processing line: ~~ ** Processing line: ~ @example~ ** Processing line: ~~ ** Processing line: ~ def test_does_this_work args, assert~ ** Processing line: ~ a = nil~ ** Processing line: ~ b = false~ ** Processing line: ~ assert.nil! a # this will pass~ ** Processing line: ~ assert.nil! b # this will throw an exception.~ ** Processing line: ~ end~ ** Processing line: ~ =end~ ** Processing line: ~ def nil! value, message = nil~ ** Processing line: ~ @assertion_performed = true~ ** Processing line: ~ if !value.nil?~ ** Processing line: ~ message = "#{value} was supposed to be nil, but wasn't.\n#{message}"~ ** Processing line: ~ raise message~ ** Processing line: ~ end~ ** Processing line: ~ nil~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** attr_gtk.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~attr_gtk.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~attr_gtk.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/attr_gtk.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # attr_gtk.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ # @private~ ** Processing line: ~ module AttrGTK~ ** Processing line: ~ attr_accessor :args~ ** Processing line: ~~ ** Processing line: ~ def keyboard~ ** Processing line: ~ args.inputs.keyboard~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def grid~ ** Processing line: ~ args.grid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def state~ ** Processing line: ~ args.state~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def temp_state~ ** Processing line: ~ args.temp_state~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inputs~ ** Processing line: ~ args.inputs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def outputs~ ** Processing line: ~ args.outputs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def gtk~ ** Processing line: ~ args.gtk~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def passes~ ** Processing line: ~ args.passes~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def pixel_arrays~ ** Processing line: ~ args.pixel_arrays~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def geometry~ ** Processing line: ~ args.geometry~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def layout~ ** Processing line: ~ args.layout~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_entity entity_type, init_hash = nil, &block~ ** Processing line: ~ args.state.new_entity entity_type, init_hash, &block~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new_entity_strict entity_type, init_hash = nil, &block~ ** Processing line: ~ args.state.new_entity_strict entity_type, init_hash, &block~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** attr_sprite.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~attr_sprite.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~attr_sprite.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/attr_sprite.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # attr_sprite.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ # @private~ ** Processing line: ~ module AttrRect~ ** Processing line: ~ include GTK::Geometry~ ** Processing line: ~~ ** Processing line: ~ def left~ ** Processing line: ~ (@x || self.x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def right~ ** Processing line: ~ (@x || self.x) + (@w || self.w)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def bottom~ ** Processing line: ~ (@y || self.y)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def top~ ** Processing line: ~ (@y || self.y) + (@h || self.h)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def x1~ ** Processing line: ~ (@x || self.x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def y1~ ** Processing line: ~ (@y || self.y)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ module AttrSprite~ ** Processing line: ~ include AttrRect~ ** Processing line: ~~ ** Processing line: ~ attr_accessor :x, :y, :w, :h, :path, :angle, :a, :r, :g, :b, :tile_x,~ ** Processing line: ~ :tile_y, :tile_w, :tile_h, :flip_horizontally,~ ** Processing line: ~ :flip_vertically, :angle_anchor_x, :angle_anchor_y, :id,~ ** Processing line: ~ :source_x, :source_y, :source_w, :source_h, :blendmode_enum~ ** Processing line: ~~ ** Processing line: ~ def primitive_marker~ ** Processing line: ~ :sprite~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def sprite~ ** Processing line: ~ self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def x1= value~ ** Processing line: ~ @x = value~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def y1= value~ ** Processing line: ~ @y = value~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** console.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~console.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~console.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/console.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # console.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright:~ ** Processing line: ~ # - Kevin Fischer: https://github.com/kfischer-okarin~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Console~ ** Processing line: ~ include ConsoleDeprecated~ ** Processing line: ~~ ** Processing line: ~ attr_accessor :show_reason, :log, :logo,~ ** Processing line: ~ :animation_duration,~ ** Processing line: ~ :max_log_lines, :max_history, :log,~ ** Processing line: ~ :last_command_errored, :last_command, :shown_at,~ ** Processing line: ~ :archived_log, :last_log_lines, :last_log_lines_count,~ ** Processing line: ~ :suppress_left_arrow_behavior, :command_set_at,~ ** Processing line: ~ :toast_ids, :bottom,~ ** Processing line: ~ :font_style, :menu,~ ** Processing line: ~ :background_color, :spam_color, :text_color, :warn_color,~ ** Processing line: ~ :error_color, :header_color, :code_color, :comment_color,~ ** Processing line: ~ :debug_color, :unfiltered_color~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @font_style = FontStyle.new(font: 'font.ttf', size_enum: -1.5, line_height: 1.1)~ ** Processing line: ~ @menu = Menu.new self~ ** Processing line: ~ @disabled = false~ ** Processing line: ~ @log_offset = 0~ ** Processing line: ~ @visible = false~ ** Processing line: ~ @toast_ids = []~ ** Processing line: ~ @archived_log = []~ ** Processing line: ~ @log = [ 'Console ready.' ]~ ** Processing line: ~ @max_log_lines = 1000 # I guess...?~ ** Processing line: ~ @max_history = 1000 # I guess...?~ ** Processing line: ~ @log_invocation_count = 0~ ** Processing line: ~ @command_history = []~ ** Processing line: ~ @command_history_index = -1~ ** Processing line: ~ @nonhistory_input = ''~ ** Processing line: ~ @logo = 'console-logo.png'~ ** Processing line: ~ @history_fname = 'logs/console_history.txt'~ ** Processing line: ~ @background_color = Color.new [0, 0, 0, 224]~ ** Processing line: ~ @header_color = Color.new [100, 200, 220]~ ** Processing line: ~ @code_color = Color.new [210, 168, 255]~ ** Processing line: ~ @comment_color = Color.new [0, 200, 100]~ ** Processing line: ~ @animation_duration = 1.seconds~ ** Processing line: ~ @shown_at = -1~ ** Processing line: ~~ ** Processing line: ~ # these are the colors for text at various log levels.~ ** Processing line: ~ @spam_color = Color.new [160, 160, 160]~ ** Processing line: ~ @debug_color = Color.new [0, 255, 0]~ ** Processing line: ~ @text_color = Color.new [255, 255, 255]~ ** Processing line: ~ @warn_color = Color.new [255, 255, 0]~ ** Processing line: ~ @error_color = Color.new [200, 50, 50]~ ** Processing line: ~ @unfiltered_color = Color.new [0, 255, 255]~ ** Processing line: ~~ ** Processing line: ~ load_history~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def console_text_width~ ** Processing line: ~ @console_text_width ||= ($gtk.logical_width - 20).idiv(font_style.letter_size.x)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def save_history~ ** Processing line: ~ $gtk.ffi_file.write_root @history_fname, (@command_history.reverse.join "\n")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def load_history~ ** Processing line: ~ @command_history.clear~ ** Processing line: ~ str = $gtk.ffi_file.read @history_fname~ ** Processing line: ~ return if str.nil? # no history to load.~ ** Processing line: ~~ ** Processing line: ~ str.chomp!("\n") # Don't let endlines at the end cause extra blank line.~ ** Processing line: ~ str.chomp!("\r")~ ** Processing line: ~ str.each_line { |s|~ ** Processing line: ~ s.chomp!("\n")~ ** Processing line: ~ s.chomp!("\r")~ ** Processing line: ~ if s.length > 0~ ** Processing line: ~ @command_history.unshift s~ ** Processing line: ~ break if @command_history.length >= @max_history~ ** Processing line: ~ end~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ @command_history.uniq!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def disable~ ** Processing line: ~ @disabled = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def enable~ ** Processing line: ~ @disabled = false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def add_sprite obj~ ** Processing line: ~ @log_invocation_count += 1~ ** Processing line: ~ obj[:id] ||= "id_#{obj[:path]}_#{Time.now.to_i}".to_sym~ ** Processing line: ~~ ** Processing line: ~ if @last_line_log_index &&~ ** Processing line: ~ @last_sprite_line.is_a?(Hash) &&~ ** Processing line: ~ @last_sprite_line[:id] == obj[:id]~ ** Processing line: ~~ ** Processing line: ~ @log[@last_line_log_index] = obj~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @log << obj~ ** Processing line: ~ @last_line_log_index = @log.length - 1~ ** Processing line: ~ @last_sprite_line = obj~ ** Processing line: ~ nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def add_primitive obj~ ** Processing line: ~ if obj.is_a? Hash~ ** Processing line: ~ add_sprite obj~ ** Processing line: ~ else~ ** Processing line: ~ add_text obj~ ** Processing line: ~ end~ ** Processing line: ~ nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def add_text obj, loglevel=-1~ ** Processing line: ~ # loglevel is one of the values of LogLevel in logging.h, or -1 to say "we don't care, colorize it with your special string parsing magic"~ ** Processing line: ~ loglevel = -1 if loglevel < 0~ ** Processing line: ~ loglevel = 5 if loglevel > 5 # 5 == unfiltered (it's 0x7FFFFFFE in C, clamp it down)~ ** Processing line: ~ loglevel = 2 if (loglevel == -1) && obj.start_with?('!c!') # oh well~ ** Processing line: ~ colorstr = (loglevel != -1) ? "!c!#{loglevel}" : nil~ ** Processing line: ~~ ** Processing line: ~ @last_log_lines_count ||= 1~ ** Processing line: ~ @log_invocation_count += 1~ ** Processing line: ~~ ** Processing line: ~ str = obj.to_s~ ** Processing line: ~~ ** Processing line: ~ log_lines = []~ ** Processing line: ~~ ** Processing line: ~ str.each_line do |s|~ ** Processing line: ~ if colorstr.nil?~ ** Processing line: ~ s.wrapped_lines(self.console_text_width).each do |l|~ ** Processing line: ~ log_lines << l~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ s.wrapped_lines(self.console_text_width).each do |l|~ ** Processing line: ~ log_lines << "#{colorstr}#{l}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if log_lines == @last_log_lines && log_lines.length != 0~ ** Processing line: ~ @last_log_lines_count += 1~ ** Processing line: ~ new_log_line_with_count = @last_log_lines.last + " (#{@last_log_lines_count})"~ ** Processing line: ~ if log_lines.length > 1~ ** Processing line: ~ @log = @log[0..-(@log.length - log_lines.length)] + log_lines[0..-2] + [new_log_line_with_count]~ ** Processing line: ~ else~ ** Processing line: ~ @log = @log[0..-2] + [new_log_line_with_count]~ ** Processing line: ~ end~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ log_lines.each do |l|~ ** Processing line: ~ @log.shift if @log.length > @max_log_lines~ ** Processing line: ~ @log << l~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @last_log_lines_count = 1~ ** Processing line: ~ @last_log_lines = log_lines~ ** Processing line: ~ nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def ready?~ ** Processing line: ~ visible? && @toggled_at.elapsed?(@animation_duration, Kernel.global_tick_count)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def hidden?~ ** Processing line: ~ !@visible~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def visible?~ ** Processing line: ~ @visible~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def open reason = nil~ ** Processing line: ~ show reason~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def show reason = nil~ ** Processing line: ~ @shown_at = Kernel.global_tick_count~ ** Processing line: ~ @show_reason = reason~ ** Processing line: ~ toggle if hidden?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def hide~ ** Processing line: ~ if visible?~ ** Processing line: ~ toggle~ ** Processing line: ~ @archived_log += @log~ ** Processing line: ~ if @archived_log.length > @max_log_lines~ ** Processing line: ~ @archived_log = @archived_log.drop(@archived_log.length - @max_log_lines)~ ** Processing line: ~ end~ ** Processing line: ~ @log.clear~ ** Processing line: ~ @show_reason = nil~ ** Processing line: ~ clear_toast~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def close~ ** Processing line: ~ hide~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def clear_toast~ ** Processing line: ~ @toasted_at = nil~ ** Processing line: ~ @toast_duration = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def toggle~ ** Processing line: ~ @visible = !@visible~ ** Processing line: ~ @toggled_at = Kernel.global_tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def currently_toasting?~ ** Processing line: ~ return false if hidden?~ ** Processing line: ~ return false unless @show_reason == :toast~ ** Processing line: ~ return false unless @toasted_at~ ** Processing line: ~ return false if @toasted_at.elapsed?(5.seconds, Kernel.global_tick_count)~ ** Processing line: ~ return true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def toast_extended id = nil, duration = nil, *messages~ ** Processing line: ~ if !id.is_a?(Symbol)~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ args.gtk.console.toast has the following signature:~ ** Processing line: ~~ ** Processing line: ~ def toast id, *messages~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ The id property uniquely defines the message and must be~ ** Processing line: ~ a symbol.~ ** Processing line: ~~ ** Processing line: ~ After that, you can provide all the objects you want to~ ** Processing line: ~ look at.~ ** Processing line: ~~ ** Processing line: ~ Example:~ ** Processing line: ~~ ** Processing line: ~ args.gtk.console.toast :say_hello,~ ** Processing line: ~ \"Hello world.\",~ ** Processing line: ~ args.state.tick_count~ ** Processing line: ~~ ** Processing line: ~ Toast messages autohide after 5 seconds.~ ** Processing line: ~~ ** Processing line: ~ If you need to look at something for longer, use~ ** Processing line: ~ args.gtk.console.perma_toast instead (which you can manually dismiss).~ ** Processing line: ~~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return if currently_toasting?~ ** Processing line: ~ return if @toast_ids.include? id~ ** Processing line: ~ @toasted_at = Kernel.global_tick_count~ ** Processing line: ~ log_once_info :perma_toast_tip, "Use console.perma_toast to show the toast for longer."~ ** Processing line: ~ dwim_duration = 5.seconds~ ** Processing line: ~ add_text "* toast :#{id}"~ ** Processing line: ~ puts "* TOAST: :#{id}"~ ** Processing line: ~ messages.each do |message|~ ** Processing line: ~ lines = message.to_s.wrapped_lines(self.console_text_width)~ ** Processing line: ~ dwim_duration += lines.length.seconds~ ** Processing line: ~ add_text "** #{message}"~ ** Processing line: ~ puts "** #{message}"~ ** Processing line: ~ end~ ** Processing line: ~ show :toast~ ** Processing line: ~ @toast_duration += duration || dwim_duration~ ** Processing line: ~ @toast_ids << id~ ** Processing line: ~ set_command "$gtk.console.hide"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def perma_toast id = nil, messages~ ** Processing line: ~ toast_extended id, 600.seconds, *messages~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def toast id = nil, *messages~ ** Processing line: ~ toast_extended id, nil, *messages~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def console_toggle_keys~ ** Processing line: ~ [~ ** Processing line: ~ :backtick!,~ ** Processing line: ~ :tilde!,~ ** Processing line: ~ :superscript_two!,~ ** Processing line: ~ :section_sign!,~ ** Processing line: ~ :ordinal_indicator!,~ ** Processing line: ~ :circumflex!,~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def console_toggle_key_down? args~ ** Processing line: ~ args.inputs.keyboard.key_down.any? console_toggle_keys~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def try_search_docs exception~ ** Processing line: ~ string_e = "#{exception}"~ ** Processing line: ~ @last_command_errored = true~ ** Processing line: ~~ ** Processing line: ~ if (string_e.include? "wrong number of arguments")~ ** Processing line: ~ method_name = ((string_e.split ":")[0].gsub "'", "")~ ** Processing line: ~ if !(method_name.include? " ")~ ** Processing line: ~ results = (Kernel.__docs_search_results__ method_name)~ ** Processing line: ~ if !results.include? "* DOCS: No results found."~ ** Processing line: ~ puts (results.join "\n")~ ** Processing line: ~ puts <<-S~ ** Processing line: ~ * INFO: #{results.length} matches(s) found in DOCS for ~#{method_name}~ (see above).~ ** Processing line: ~ You can search the documentation yourself using the following command in the Console:~ ** Processing line: ~ #+begin_src ruby~ ** Processing line: ~ docs_search \"#{method_name}\"~ ** Processing line: ~ #+end_src~ ** Processing line: ~ S~ ** Processing line: ~ log_once_info :exported_search_results, "The search results above has been seen in logs/puts.txt and docs/search_results.txt."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ rescue Exception => se~ ** Processing line: ~ puts <<-S~ ** Processing line: ~ * FATAL: ~GTK::Console#try_search_docs~~ ** Processing line: ~ There was an exception searching for docs (~GTK::Console#try_search_docs~). You might want to let DragonRuby know about this.~ ** Processing line: ~ ** INNER EXCEPTION~ ** Processing line: ~ #{se}~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def eval_the_set_command~ ** Processing line: ~ cmd = current_input_str.strip~ ** Processing line: ~ if cmd.length != 0~ ** Processing line: ~ @log_offset = 0~ ** Processing line: ~ prompt.clear~ ** Processing line: ~~ ** Processing line: ~ @command_history.pop while @command_history.length >= @max_history~ ** Processing line: ~ @command_history.unshift cmd~ ** Processing line: ~ @command_history_index = -1~ ** Processing line: ~ @nonhistory_input = ''~ ** Processing line: ~~ ** Processing line: ~ if cmd == 'quit' || cmd == ':wq' || cmd == ':q!' || cmd == ':q' || cmd == ':wqa'~ ** Processing line: ~ $gtk.request_quit~ ** Processing line: ~ elsif cmd.start_with? ':'~ ** Processing line: ~ send ((cmd.gsub '-', '_').gsub ':', '')~ ** Processing line: ~ else~ ** Processing line: ~ puts "-> #{cmd}"~ ** Processing line: ~ begin~ ** Processing line: ~ @last_command = cmd~ ** Processing line: ~ Kernel.eval("$results = (#{cmd})")~ ** Processing line: ~ if $results.nil?~ ** Processing line: ~ puts "=> nil"~ ** Processing line: ~ elsif $results == :console_silent_eval~ ** Processing line: ~ # do nothing since the console is silent~ ** Processing line: ~ else~ ** Processing line: ~ puts "=> #{$results}"~ ** Processing line: ~ end~ ** Processing line: ~ @last_command_errored = false~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ try_search_docs e~ ** Processing line: ~ # if an exception is thrown and the bactrace includes something helpful, then show it~ ** Processing line: ~ if (e.backtrace || []).first && (e.backtrace.first.include? "(eval)")~ ** Processing line: ~ puts "* EXCEPTION: #{e}"~ ** Processing line: ~ else~ ** Processing line: ~ puts "* EXCEPTION: #{e}\n#{e.__backtrace_to_org__}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inputs_scroll_up_full? args~ ** Processing line: ~ return false if @disabled~ ** Processing line: ~ args.inputs.keyboard.key_down.pageup ||~ ** Processing line: ~ (args.inputs.keyboard.key_up.b && args.inputs.keyboard.key_up.control)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def scroll_to_bottom~ ** Processing line: ~ @log_offset = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def scroll_up_full~ ** Processing line: ~ @log_offset += lines_on_one_page~ ** Processing line: ~ @log_offset = @log.size if @log_offset > @log.size~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inputs_scroll_up_half? args~ ** Processing line: ~ return false if @disabled~ ** Processing line: ~ args.inputs.keyboard.ctrl_u~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def scroll_up_half~ ** Processing line: ~ @log_offset += lines_on_one_page.idiv(2)~ ** Processing line: ~ @log_offset = @log.size if @log_offset > @log.size~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inputs_scroll_down_full? args~ ** Processing line: ~ return false if @disabled~ ** Processing line: ~ args.inputs.keyboard.key_down.pagedown ||~ ** Processing line: ~ (args.inputs.keyboard.key_up.f && args.inputs.keyboard.key_up.control)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def scroll_down_full~ ** Processing line: ~ @log_offset -= lines_on_one_page~ ** Processing line: ~ @log_offset = 0 if @log_offset < 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inputs_scroll_down_half? args~ ** Processing line: ~ return false if @disabled~ ** Processing line: ~ args.inputs.keyboard.ctrl_d~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inputs_clear_command? args~ ** Processing line: ~ return false if @disabled~ ** Processing line: ~ args.inputs.keyboard.escape || args.inputs.keyboard.ctrl_g~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def scroll_down_half~ ** Processing line: ~ @log_offset -= lines_on_one_page.idiv(2)~ ** Processing line: ~ @log_offset = 0 if @log_offset < 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mouse_wheel_scroll args~ ** Processing line: ~ @inertia ||= 0~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.mouse.wheel~ ** Processing line: ~ if args.inputs.mouse.wheel.y > 0~ ** Processing line: ~ @inertia = 1~ ** Processing line: ~ elsif args.inputs.mouse.wheel.y < 0~ ** Processing line: ~ @inertia = -1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.mouse.click~ ** Processing line: ~ @inertia = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return if @inertia == 0~ ** Processing line: ~~ ** Processing line: ~ @inertia = (@inertia * 0.7)~ ** Processing line: ~ if @inertia > 0~ ** Processing line: ~ @log_offset += 1~ ** Processing line: ~ elsif @inertia < 0~ ** Processing line: ~ @log_offset -= 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if @inertia.abs < 0.01~ ** Processing line: ~ @inertia = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if @log_offset > @log.size~ ** Processing line: ~ @log_offset = @log.size~ ** Processing line: ~ elsif @log_offset < 0~ ** Processing line: ~ @log_offset = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def process_inputs args~ ** Processing line: ~ if console_toggle_key_down? args~ ** Processing line: ~ args.inputs.text.clear~ ** Processing line: ~ toggle~ ** Processing line: ~ args.inputs.keyboard.clear if !@visible~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return unless visible?~ ** Processing line: ~~ ** Processing line: ~ args.inputs.text.each { |str| prompt << str }~ ** Processing line: ~ args.inputs.text.clear~ ** Processing line: ~ mouse_wheel_scroll args~ ** Processing line: ~~ ** Processing line: ~ @log_offset = 0 if @log_offset < 0~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.keyboard.key_down.enter~ ** Processing line: ~ if slide_progress > 0.5~ ** Processing line: ~ # in the event of an exception, the console window pops up~ ** Processing line: ~ # and is pre-filled with $gtk.reset.~ ** Processing line: ~ # there is an annoying scenario where the exception could be thrown~ ** Processing line: ~ # by pressing enter (while playing the game). if you press enter again~ ** Processing line: ~ # quickly, then the game is reset which closes the console.~ ** Processing line: ~ # so enter in the console is only evaluated if the slide_progress~ ** Processing line: ~ # is atleast half way down the page.~ ** Processing line: ~ eval_the_set_command~ ** Processing line: ~ end~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.v~ ** Processing line: ~ if args.inputs.keyboard.key_down.control || args.inputs.keyboard.key_down.meta~ ** Processing line: ~ prompt << $gtk.ffi_misc.getclipboard~ ** Processing line: ~ end~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.home~ ** Processing line: ~ prompt.move_cursor_home~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.end~ ** Processing line: ~ prompt.move_cursor_end~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.up~ ** Processing line: ~ if @command_history_index == -1~ ** Processing line: ~ @nonhistory_input = current_input_str~ ** Processing line: ~ end~ ** Processing line: ~ if @command_history_index < (@command_history.length - 1)~ ** Processing line: ~ @command_history_index += 1~ ** Processing line: ~ self.current_input_str = @command_history[@command_history_index].dup~ ** Processing line: ~ end~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.down~ ** Processing line: ~ if @command_history_index == 0~ ** Processing line: ~ @command_history_index = -1~ ** Processing line: ~ self.current_input_str = @nonhistory_input~ ** Processing line: ~ @nonhistory_input = ''~ ** Processing line: ~ elsif @command_history_index > 0~ ** Processing line: ~ @command_history_index -= 1~ ** Processing line: ~ self.current_input_str = @command_history[@command_history_index].dup~ ** Processing line: ~ end~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.left~ ** Processing line: ~ if args.inputs.keyboard.key_down.control~ ** Processing line: ~ prompt.move_cursor_left_word~ ** Processing line: ~ else~ ** Processing line: ~ prompt.move_cursor_left~ ** Processing line: ~ end~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.right~ ** Processing line: ~ if args.inputs.keyboard.key_down.control~ ** Processing line: ~ prompt.move_cursor_right_word~ ** Processing line: ~ else~ ** Processing line: ~ prompt.move_cursor_right~ ** Processing line: ~ end~ ** Processing line: ~ elsif inputs_scroll_up_full? args~ ** Processing line: ~ scroll_up_full~ ** Processing line: ~ elsif inputs_scroll_down_full? args~ ** Processing line: ~ scroll_down_full~ ** Processing line: ~ elsif inputs_scroll_up_half? args~ ** Processing line: ~ scroll_up_half~ ** Processing line: ~ elsif inputs_scroll_down_half? args~ ** Processing line: ~ scroll_down_half~ ** Processing line: ~ elsif inputs_clear_command? args~ ** Processing line: ~ prompt.clear~ ** Processing line: ~ @command_history_index = -1~ ** Processing line: ~ @nonhistory_input = ''~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.backspace~ ** Processing line: ~ prompt.backspace~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.delete~ ** Processing line: ~ prompt.delete~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.tab~ ** Processing line: ~ prompt.autocomplete~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ args.inputs.keyboard.key_down.clear~ ** Processing line: ~ args.inputs.keyboard.key_up.clear~ ** Processing line: ~ args.inputs.keyboard.key_held.clear~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def write_primitive_and_return_offset(args, left, y, str, archived: false)~ ** Processing line: ~ if str.is_a?(Hash)~ ** Processing line: ~ padding = 10~ ** Processing line: ~ args.outputs.reserved << [left + 10, y + 5, str[:w], str[:h], str[:path]].sprite~ ** Processing line: ~ return str[:h] + padding~ ** Processing line: ~ else~ ** Processing line: ~ write_line args, left, y, str, archived: archived~ ** Processing line: ~ return line_height_px~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def write_line(args, left, y, str, archived: false)~ ** Processing line: ~ color = color_for_log_entry(str)~ ** Processing line: ~ color = color.mult_alpha(0.5) if archived~ ** Processing line: ~ str = str[4..-1] if str.start_with?('!c!') # chop off loglevel color~ ** Processing line: ~ args.outputs.reserved << font_style.label(x: left.shift_right(10), y: y, text: str, color: color)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def should_tick?~ ** Processing line: ~ return false if !@toggled_at~ ** Processing line: ~ return false if slide_progress == 0~ ** Processing line: ~ return false if @disabled~ ** Processing line: ~ return visible?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render args~ ** Processing line: ~ return if !@toggled_at~ ** Processing line: ~ return if slide_progress == 0~ ** Processing line: ~~ ** Processing line: ~ @bottom = top - (h * slide_progress)~ ** Processing line: ~ args.outputs.reserved << [left, @bottom, w, h, *@background_color.mult_alpha(slide_progress)].solid~ ** Processing line: ~ args.outputs.reserved << [right.shift_left(110), @bottom.shift_up(630), 100, 100, @logo, 0, (80.0 * slide_progress).to_i].sprite~ ** Processing line: ~~ ** Processing line: ~ y = @bottom + 2 # just give us a little padding at the bottom.~ ** Processing line: ~ prompt.render args, x: left.shift_right(10), y: y~ ** Processing line: ~ y += line_height_px * 1.5~ ** Processing line: ~ args.outputs.reserved << line(y: y, color: @text_color.mult_alpha(slide_progress))~ ** Processing line: ~ y += line_height_px.to_f / 2.0~ ** Processing line: ~~ ** Processing line: ~ ((@log.size - @log_offset) - 1).downto(0) do |idx|~ ** Processing line: ~ offset_after_write = write_primitive_and_return_offset args, left, y, @log[idx]~ ** Processing line: ~ y += offset_after_write~ ** Processing line: ~ break if y > top~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # past log separator~ ** Processing line: ~ args.outputs.reserved << line(y: y + line_height_px.half, color: @text_color.mult_alpha(0.25 * slide_progress))~ ** Processing line: ~~ ** Processing line: ~ y += line_height_px~ ** Processing line: ~~ ** Processing line: ~ ((@archived_log.size - @log_offset) - 1).downto(0) do |idx|~ ** Processing line: ~ offset_after_write = write_primitive_and_return_offset args, left, y, @archived_log[idx], archived: true~ ** Processing line: ~ y += offset_after_write~ ** Processing line: ~ break if y > top~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ render_log_offset args~ ** Processing line: ~~ ** Processing line: ~ args.outputs.reserved << { x: 10.from_right, y: @bottom + 10,~ ** Processing line: ~ text: "Press CTRL+g or ESCAPE to clear the prompt.",~ ** Processing line: ~ vertical_alignment_enum: 0,~ ** Processing line: ~ alignment_enum: 2, r: 80, g: 80, b: 80 }.label!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_log_offset args~ ** Processing line: ~ return if @log_offset <= 0~ ** Processing line: ~ args.outputs.reserved << font_style.label(~ ** Processing line: ~ x: right.shift_left(5),~ ** Processing line: ~ y: top.shift_down(5 + line_height_px),~ ** Processing line: ~ text: "[#{@log_offset}/#{@log.size}]",~ ** Processing line: ~ color: @text_color,~ ** Processing line: ~ alignment_enum: 2~ ** Processing line: ~ )~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def include_error_marker? text~ ** Processing line: ~ include_any_words?(text.gsub('OutputsDeprecated', ''), error_markers)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def error_markers~ ** Processing line: ~ ["exception:", "error:", "undefined method", "failed", "syntax", "deprecated"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def include_subdued_markers? text~ ** Processing line: ~ (text.start_with? "* INFO: ") && (include_any_words? text, subdued_markers)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def include_any_words? text, words~ ** Processing line: ~ words.any? { |w| text.downcase.include?(w) && !text.downcase.include?(":#{w}") }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def subdued_markers~ ** Processing line: ~ ["reloaded", "exported the", "~require~"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc args~ ** Processing line: ~ if visible? &&~ ** Processing line: ~ @show_reason == :toast &&~ ** Processing line: ~ @toasted_at &&~ ** Processing line: ~ @toasted_at.elapsed?(@toast_duration, Kernel.global_tick_count)~ ** Processing line: ~ hide~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if !$gtk.paused? && visible? && (show_reason == :exception || show_reason == :exception_on_load)~ ** Processing line: ~ hide~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if $gtk.files_reloaded.length > 0~ ** Processing line: ~ clear_toast~ ** Processing line: ~ @toast_ids.clear~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ begin~ ** Processing line: ~ return if @disabled~ ** Processing line: ~ render args~ ** Processing line: ~ process_inputs args~ ** Processing line: ~ return unless should_tick?~ ** Processing line: ~ calc args~ ** Processing line: ~ prompt.tick~ ** Processing line: ~ menu.tick args~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ begin~ ** Processing line: ~ puts "#{e}"~ ** Processing line: ~ puts "* FATAL: The GTK::Console console threw an unhandled exception and has been reset. You should report this exception (along with reproduction steps) to DragonRuby."~ ** Processing line: ~ rescue~ ** Processing line: ~ end~ ** Processing line: ~ @disabled = true~ ** Processing line: ~ $stdout.puts e~ ** Processing line: ~ $stdout.puts "* FATAL: The GTK::Console console threw an unhandled exception and has been reset. You should report this exception (along with reproduction steps) to DragonRuby."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_command_with_history_silent command, histories, show_reason = nil~ ** Processing line: ~ set_command_extended command: command, histories: histories, show_reason: show_reason~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def defaults_set_command_extended~ ** Processing line: ~ {~ ** Processing line: ~ command: "puts 'Hello World'",~ ** Processing line: ~ histories: [],~ ** Processing line: ~ show_reason: nil,~ ** Processing line: ~ force: false~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_command_extended opts~ ** Processing line: ~ opts = defaults_set_command_extended.merge opts~ ** Processing line: ~ @command_history.concat opts[:histories]~ ** Processing line: ~ @command_history << opts[:command] if @command_history[-1] != opts[:command]~ ** Processing line: ~ self.current_input_str = opts[:command] if @command_set_at != Kernel.global_tick_count || opts[:force]~ ** Processing line: ~ @command_set_at = Kernel.global_tick_count~ ** Processing line: ~ @command_history_index = -1~ ** Processing line: ~ save_history~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_command_with_history command, histories, show_reason = nil~ ** Processing line: ~ set_command_with_history_silent command, histories, show_reason~ ** Processing line: ~ show show_reason~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def set_command command, show_reason = nil~ ** Processing line: ~ set_command_silent command, show_reason~ ** Processing line: ~ show show_reason~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_command_silent command, show_reason = nil~ ** Processing line: ~ set_command_with_history_silent command, [], show_reason~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_system_command command, show_reason = nil~ ** Processing line: ~ if $gtk.platform == "Mac OS X"~ ** Processing line: ~ set_command_silent "$gtk.system \"open #{command}\""~ ** Processing line: ~ else~ ** Processing line: ~ set_command_silent "$gtk.system \"start #{command}\""~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def system_command~ ** Processing line: ~ if $gtk.platform == "Mac OS X"~ ** Processing line: ~ "open"~ ** Processing line: ~ else~ ** Processing line: ~ "start"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ private~ ** Processing line: ~~ ** Processing line: ~ def w~ ** Processing line: ~ $gtk.logical_width~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def h~ ** Processing line: ~ $gtk.logical_height~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # methods top; left; right~ ** Processing line: ~ # Forward to grid~ ** Processing line: ~ %i[top left right].each do |method|~ ** Processing line: ~ define_method method do~ ** Processing line: ~ $gtk.args.grid.send(method)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def line_height_px~ ** Processing line: ~ font_style.line_height_px~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def lines_on_one_page~ ** Processing line: ~ (h - 4).idiv(line_height_px)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def line(y:, color:)~ ** Processing line: ~ [left, y, right, y, *color].line~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def include_row_marker? log_entry~ ** Processing line: ~ log_entry[0] == "|"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def include_header_marker? log_entry~ ** Processing line: ~ return false if (log_entry.strip.include? ".rb")~ ** Processing line: ~ (log_entry.start_with? "* ") ||~ ** Processing line: ~ (log_entry.start_with? "** ") ||~ ** Processing line: ~ (log_entry.start_with? "*** ") ||~ ** Processing line: ~ (log_entry.start_with? "**** ")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def code? log_entry~ ** Processing line: ~ (just_symbol? log_entry) || (codeblock_marker? log_entry)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def just_symbol? log_entry~ ** Processing line: ~ scrubbed = log_entry.gsub("*", "").strip~ ** Processing line: ~ (scrubbed.start_with? ":") && (!scrubbed.include? " ") && (!scrubbed.include? "=>")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def code_comment? log_entry~ ** Processing line: ~ return true if log_entry.strip.start_with?("# ")~ ** Processing line: ~ return false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def codeblock_marker? log_entry~ ** Processing line: ~ return true if log_entry.strip.start_with?("#+begin_src")~ ** Processing line: ~ return true if log_entry.strip.start_with?("#+end_src")~ ** Processing line: ~ return false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def color_for_plain_text log_entry~ ** Processing line: ~ log_entry = log_entry[4..-1] if log_entry.start_with? "!c!"~ ** Processing line: ~~ ** Processing line: ~ if code? log_entry~ ** Processing line: ~ @code_color~ ** Processing line: ~ elsif code_comment? log_entry~ ** Processing line: ~ @comment_color~ ** Processing line: ~ elsif include_row_marker? log_entry~ ** Processing line: ~ @text_color~ ** Processing line: ~ elsif include_error_marker? log_entry~ ** Processing line: ~ @error_color~ ** Processing line: ~ elsif include_subdued_markers? log_entry~ ** Processing line: ~ @text_color.mult_alpha(0.5)~ ** Processing line: ~ elsif include_header_marker? log_entry~ ** Processing line: ~ @header_color~ ** Processing line: ~ elsif log_entry.start_with?("====")~ ** Processing line: ~ @header_color~ ** Processing line: ~ else~ ** Processing line: ~ @text_color~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def color_for_log_entry(log_entry)~ ** Processing line: ~ if log_entry.start_with?('!c!') # loglevel color specified.~ ** Processing line: ~ return case log_entry[3..3].to_i~ ** Processing line: ~ when 0 # spam~ ** Processing line: ~ @spam_color~ ** Processing line: ~ when 1 # debug~ ** Processing line: ~ @debug_color~ ** Processing line: ~ #when 2 # info (caught by the `else` block.)~ ** Processing line: ~ # @text_color~ ** Processing line: ~ when 3 # warn~ ** Processing line: ~ @warn_color~ ** Processing line: ~ when 4 # error~ ** Processing line: ~ @error_color~ ** Processing line: ~ when 5 # unfiltered~ ** Processing line: ~ @unfiltered_color~ ** Processing line: ~ else~ ** Processing line: ~ color_for_plain_text log_entry~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return color_for_plain_text log_entry~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def prompt~ ** Processing line: ~ @prompt ||= Prompt.new(font_style: font_style, text_color: @text_color, console_text_width: console_text_width)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def current_input_str~ ** Processing line: ~ prompt.current_input_str~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def current_input_str=(str)~ ** Processing line: ~ prompt.current_input_str = str~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def clear~ ** Processing line: ~ @archived_log.clear~ ** Processing line: ~ @log.clear~ ** Processing line: ~ @prompt.clear~ ** Processing line: ~ :console_silent_eval~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def slide_progress~ ** Processing line: ~ return 0 if !@toggled_at~ ** Processing line: ~ if visible?~ ** Processing line: ~ @slide_progress = @toggled_at.global_ease(@animation_duration, :flip, :quint, :flip)~ ** Processing line: ~ else~ ** Processing line: ~ @slide_progress = @toggled_at.global_ease(@animation_duration, :flip, :quint)~ ** Processing line: ~ end~ ** Processing line: ~ @slide_progress~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** console_color.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~console_color.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~console_color.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/console_color.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # console_color.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright:~ ** Processing line: ~ # - Kevin Fischer: https://github.com/kfischer-okarin~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Console~ ** Processing line: ~ class Color~ ** Processing line: ~ def initialize(color)~ ** Processing line: ~ @color = color~ ** Processing line: ~ @color << 255 if @color.size == 3~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mult_alpha(alpha_modifier)~ ** Processing line: ~ Color.new [@color[0], @color[1], @color[2], (@color[3].to_f * alpha_modifier).to_i]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Support splat operator~ ** Processing line: ~ def to_a~ ** Processing line: ~ @color~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ "GTK::Console::Color #{to_h}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_h~ ** Processing line: ~ { r: @color[0], g: @color[1], b: @color[2], a: @color[3] }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** console_font_style.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~console_font_style.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~console_font_style.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/console_font_style.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # console_font_style.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright:~ ** Processing line: ~ # - Kevin Fischer: https://github.com/kfischer-okarin~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Console~ ** Processing line: ~ class FontStyle~ ** Processing line: ~ attr_reader :font, :size_enum, :line_height~ ** Processing line: ~~ ** Processing line: ~ def initialize(font:, size_enum:, line_height:)~ ** Processing line: ~ @font = font~ ** Processing line: ~ @size_enum = size_enum~ ** Processing line: ~ @line_height = line_height~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def letter_size~ ** Processing line: ~ @letter_size ||= $gtk.calcstringbox 'W', size_enum, font~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def line_height_px~ ** Processing line: ~ @line_height_px ||= letter_size.y * line_height~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def label(x:, y:, text:, color:, alignment_enum: 0)~ ** Processing line: ~ {~ ** Processing line: ~ x: x,~ ** Processing line: ~ y: y.shift_up(line_height_px), # !!! FIXME: remove .shift_up(line_height_px) when we fix coordinate origin on labels.~ ** Processing line: ~ text: text,~ ** Processing line: ~ font: font,~ ** Processing line: ~ size_enum: size_enum,~ ** Processing line: ~ alignment_enum: alignment_enum,~ ** Processing line: ~ **color.to_h,~ ** Processing line: ~ }.label!~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** console_menu.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~console_menu.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~console_menu.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/console_menu.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # console_menu.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Console~ ** Processing line: ~ class Menu~ ** Processing line: ~ attr_accessor :buttons~ ** Processing line: ~~ ** Processing line: ~ def initialize console~ ** Processing line: ~ @console = console~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def record_clicked~ ** Processing line: ~ $recording.start 100~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replay_clicked~ ** Processing line: ~ $replay.start 'replay.txt'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reset_clicked~ ** Processing line: ~ $gtk.reset~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def scroll_up_clicked~ ** Processing line: ~ @console.scroll_up_half~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def scroll_down_clicked~ ** Processing line: ~ @console.scroll_down_half~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def show_menu_clicked~ ** Processing line: ~ @menu_shown = :visible~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def close_clicked~ ** Processing line: ~ @menu_shown = :hidden~ ** Processing line: ~ @console.hide~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def hide_menu_clicked~ ** Processing line: ~ @menu_shown = :hidden~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def framerate_diagnostics_clicked~ ** Processing line: ~ @console.scroll_to_bottom~ ** Processing line: ~ $gtk.framerate_diagnostics~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def itch_wizard_clicked~ ** Processing line: ~ @console.scroll_to_bottom~ ** Processing line: ~ $wizards.itch.restart~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def docs_clicked~ ** Processing line: ~ @console.scroll_to_bottom~ ** Processing line: ~ log Kernel.docs_classes~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def scroll_end_clicked~ ** Processing line: ~ @console.scroll_to_bottom~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def custom_buttons~ ** Processing line: ~ []~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ return unless @console.visible?~ ** Processing line: ~~ ** Processing line: ~ @menu_shown ||= :hidden~ ** Processing line: ~~ ** Processing line: ~ if $gtk.production~ ** Processing line: ~ @buttons = [~ ** Processing line: ~ (button id: :record, row: 0, col: 9, text: "record gameplay", method: :record_clicked),~ ** Processing line: ~ (button id: :replay, row: 0, col: 10, text: "start replay", method: :replay_clicked),~ ** Processing line: ~ *custom_buttons~ ** Processing line: ~ ]~ ** Processing line: ~ elsif @menu_shown == :hidden~ ** Processing line: ~ @buttons = [~ ** Processing line: ~ (button id: :show_menu, row: 0, col: 10, text: "show menu", method: :show_menu_clicked),~ ** Processing line: ~ ]~ ** Processing line: ~ else~ ** Processing line: ~ @buttons = [~ ** Processing line: ~ (button id: :scroll_up, row: 0, col: 6, text: "scroll up", method: :scroll_up_clicked),~ ** Processing line: ~ (button id: :scroll_down, row: 0, col: 7, text: "scroll down", method: :scroll_down_clicked),~ ** Processing line: ~ (button id: :scroll_down, row: 0, col: 8, text: "scroll end", method: :scroll_end_clicked),~ ** Processing line: ~ (button id: :close, row: 0, col: 9, text: "close console", method: :close_clicked),~ ** Processing line: ~ (button id: :hide, row: 0, col: 10, text: "hide menu", method: :hide_menu_clicked),~ ** Processing line: ~~ ** Processing line: ~ (button id: :record, row: 1, col: 7, text: "record gameplay", method: :record_clicked),~ ** Processing line: ~ (button id: :replay, row: 1, col: 8, text: "start replay", method: :replay_clicked),~ ** Processing line: ~ (button id: :record, row: 1, col: 9, text: "framerate diagnostics", method: :framerate_diagnostics_clicked),~ ** Processing line: ~ (button id: :reset, row: 1, col: 10, text: "reset game", method: :reset_clicked),~ ** Processing line: ~~ ** Processing line: ~ (button id: :reset, row: 2, col: 10, text: "docs", method: :docs_clicked),~ ** Processing line: ~ (button id: :reset, row: 2, col: 9, text: "itch wizard", method: :itch_wizard_clicked),~ ** Processing line: ~ *custom_buttons~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # render~ ** Processing line: ~ args.outputs.reserved << @buttons.map { |b| b[:primitives] }~ ** Processing line: ~~ ** Processing line: ~ # inputs~ ** Processing line: ~ if args.inputs.mouse.click~ ** Processing line: ~ clicked = @buttons.find { |b| args.inputs.mouse.inside_rect? b[:rect] }~ ** Processing line: ~ if clicked~ ** Processing line: ~ args.inputs.mouse.click = nil~ ** Processing line: ~ send clicked[:method]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rect_for_layout row, col~ ** Processing line: ~ col_width = 100~ ** Processing line: ~ row_height = 50~ ** Processing line: ~ col_margin = 5~ ** Processing line: ~ row_margin = 5~ ** Processing line: ~ x = (col_margin + (col * col_width) + (col * col_margin))~ ** Processing line: ~ y = (row_margin + (row * row_height) + (row * row_margin) + row_height).from_top~ ** Processing line: ~ { x: x, y: y, w: col_width, h: row_height }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def button args~ ** Processing line: ~ id, row, col, text, method = args[:id], args[:row], args[:col], args[:text], args[:method]~ ** Processing line: ~~ ** Processing line: ~ font_height = @console.font_style.line_height_px.half~ ** Processing line: ~ {~ ** Processing line: ~ id: id,~ ** Processing line: ~ rect: (rect_for_layout row, col),~ ** Processing line: ~ text: text,~ ** Processing line: ~ method: method~ ** Processing line: ~ }.let do |entity|~ ** Processing line: ~ primitives = []~ ** Processing line: ~ primitives << entity[:rect].solid!(a: 164)~ ** Processing line: ~ primitives << entity[:rect].border!(r: 255, g: 255, b: 255)~ ** Processing line: ~ primitives << text.wrapped_lines(5)~ ** Processing line: ~ .map_with_index do |l, i|~ ** Processing line: ~ [~ ** Processing line: ~ entity[:rect][:x] + entity[:rect][:w].half,~ ** Processing line: ~ entity[:rect][:y] + entity[:rect][:h].half + font_height - (i * (font_height + 2)),~ ** Processing line: ~ l, -3, 1, 255, 255, 255~ ** Processing line: ~ ]~ ** Processing line: ~ end.labels~ ** Processing line: ~~ ** Processing line: ~ entity.merge(primitives: primitives)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ {~ ** Processing line: ~ not_supported: "#{self}"~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** console_prompt.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~console_prompt.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~console_prompt.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/console_prompt.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # console_prompt.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright:~ ** Processing line: ~ # - Kevin Fischer: https://github.com/kfischer-okarin~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Console~ ** Processing line: ~ class Prompt~ ** Processing line: ~ # ? Can be changed, it was just taken from my editor settings :>~ ** Processing line: ~ WORD_LIMITER_CHARS = "`~!@#$%^&*-=+()[]{}\|;:'\",.<>/?_ \t\n\0".chars~ ** Processing line: ~~ ** Processing line: ~ attr_accessor :current_input_str, :font_style, :console_text_width, :last_input_str, :last_input_str_changed~ ** Processing line: ~~ ** Processing line: ~ def initialize(font_style:, text_color:, console_text_width:)~ ** Processing line: ~ @prompt = '-> '~ ** Processing line: ~ @current_input_str = ''~ ** Processing line: ~ @font_style = font_style~ ** Processing line: ~ @text_color = text_color~ ** Processing line: ~ @cursor_color = Color.new [187, 21, 6]~ ** Processing line: ~ @console_text_width = console_text_width~ ** Processing line: ~~ ** Processing line: ~ @cursor_position = 0~ ** Processing line: ~ update_cursor_position_px~ ** Processing line: ~~ ** Processing line: ~ @last_autocomplete_prefix = nil~ ** Processing line: ~ @next_candidate_index = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def update_cursor_position_px~ ** Processing line: ~ @cursor_position_px = ($gtk.calcstringbox (@prompt + @current_input_str[0...@cursor_position]), @font_style.size_enum, @font_style.font).x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def current_input_str=(str)~ ** Processing line: ~ @current_input_str = str~ ** Processing line: ~ @cursor_position = str.length~ ** Processing line: ~ update_cursor_position_px~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def <<(str)~ ** Processing line: ~ @current_input_str = @current_input_str[0...@cursor_position] + str + @current_input_str[@cursor_position..-1]~ ** Processing line: ~ @cursor_position += str.length~ ** Processing line: ~ update_cursor_position_px~ ** Processing line: ~ @current_input_changed_at = Kernel.global_tick_count~ ** Processing line: ~ reset_autocomplete~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def backspace~ ** Processing line: ~ return if current_input_str.length.zero? || @cursor_position.zero?~ ** Processing line: ~~ ** Processing line: ~ @current_input_str = @current_input_str[0...(@cursor_position - 1)] + @current_input_str[@cursor_position..-1]~ ** Processing line: ~ @cursor_position -= 1~ ** Processing line: ~ update_cursor_position_px~ ** Processing line: ~ reset_autocomplete~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def delete~ ** Processing line: ~ return if current_input_str.length.zero? || @cursor_position == current_input_str.length~ ** Processing line: ~~ ** Processing line: ~ @cursor_position += 1~ ** Processing line: ~ backspace~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_cursor_left~ ** Processing line: ~ @cursor_position -= 1 if @cursor_position > 0~ ** Processing line: ~ update_cursor_position_px~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_cursor_left_word~ ** Processing line: ~ return if @cursor_position.zero?~ ** Processing line: ~~ ** Processing line: ~ new_pos = @cursor_position - 1~ ** Processing line: ~ (is_word_boundary? @current_input_str[new_pos]) ?~ ** Processing line: ~ (new_pos -= 1 until !(is_word_boundary? @current_input_str[new_pos - 1]) || new_pos.zero?):~ ** Processing line: ~ (new_pos -= 1 until (is_word_boundary? @current_input_str[new_pos - 1]) || new_pos.zero?)~ ** Processing line: ~~ ** Processing line: ~ @cursor_position = new_pos~ ** Processing line: ~ update_cursor_position_px~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_cursor_right~ ** Processing line: ~ @cursor_position += 1 if @cursor_position < current_input_str.length~ ** Processing line: ~ update_cursor_position_px~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_cursor_right_word~ ** Processing line: ~ return if @cursor_position.equal? str_len~ ** Processing line: ~~ ** Processing line: ~ new_pos = @cursor_position + 1~ ** Processing line: ~ (is_word_boundary? @current_input_str[new_pos]) ?~ ** Processing line: ~ (new_pos += 1 until !(is_word_boundary? @current_input_str[new_pos]) || (new_pos.equal? str_len)):~ ** Processing line: ~ (new_pos += 1 until (is_word_boundary? @current_input_str[new_pos]) || (new_pos.equal? str_len))~ ** Processing line: ~~ ** Processing line: ~ @cursor_position = new_pos~ ** Processing line: ~ update_cursor_position_px~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_cursor_home~ ** Processing line: ~ @cursor_position = 0~ ** Processing line: ~ update_cursor_position_px~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_cursor_end~ ** Processing line: ~ @cursor_position = str_len~ ** Processing line: ~ update_cursor_position_px~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def clear~ ** Processing line: ~ @current_input_str = ''~ ** Processing line: ~ @cursor_position = 0~ ** Processing line: ~ update_cursor_position_px~ ** Processing line: ~ reset_autocomplete~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def autocomplete~ ** Processing line: ~ if !@last_autocomplete_prefix~ ** Processing line: ~ @last_autocomplete_prefix = calc_autocomplete_prefix~ ** Processing line: ~~ ** Processing line: ~ puts "* AUTOCOMPLETE CANDIDATES: #{current_input_str}.."~ ** Processing line: ~ pretty_print_strings_as_table method_candidates(@last_autocomplete_prefix)~ ** Processing line: ~ else~ ** Processing line: ~ candidates = method_candidates(@last_autocomplete_prefix)~ ** Processing line: ~ return if candidates.empty?~ ** Processing line: ~~ ** Processing line: ~ candidate = candidates[@next_candidate_index]~ ** Processing line: ~ candidate = candidate[0..-2] + " = " if candidate.end_with? '='~ ** Processing line: ~ @next_candidate_index += 1~ ** Processing line: ~ @next_candidate_index = 0 if @next_candidate_index >= candidates.length~ ** Processing line: ~ self.current_input_str = display_autocomplete_candidate(candidate)~ ** Processing line: ~ update_cursor_position_px~ ** Processing line: ~ end~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ puts "* BUG: Tab autocompletion failed. Let us know about this.\n#{e}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def pretty_print_strings_as_table items~ ** Processing line: ~ if items.length == 0~ ** Processing line: ~ puts <<-S.strip~ ** Processing line: ~ +--------+~ ** Processing line: ~ | (none) |~ ** Processing line: ~ +--------+~ ** Processing line: ~ S~ ** Processing line: ~ else~ ** Processing line: ~ # figure out the largest string~ ** Processing line: ~ string_width = items.sort_by { |c| -c.to_s.length }.first~ ** Processing line: ~~ ** Processing line: ~ # add spacing to each side of the string which represents the cell width~ ** Processing line: ~ cell_width = string_width.length + 2~ ** Processing line: ~~ ** Processing line: ~ # add spacing to each side of the cell to represent the column width~ ** Processing line: ~ column_width = cell_width + 2~ ** Processing line: ~~ ** Processing line: ~ # determine the max number of columns that can fit on the screen~ ** Processing line: ~ columns = @console_text_width.idiv column_width~ ** Processing line: ~ columns = items.length if items.length < columns~ ** Processing line: ~~ ** Processing line: ~ # partition the original list of items into a string to be printed~ ** Processing line: ~ items.each_slice(columns).each_with_index do |cells, i|~ ** Processing line: ~ pretty_print_row_separator string_width, cell_width, column_width, columns~ ** Processing line: ~ pretty_print_row cells, string_width, cell_width, column_width, columns~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ pretty_print_row_separator string_width, cell_width, column_width, columns~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def pretty_print_row cells, string_width, cell_width, column_width, columns~ ** Processing line: ~ # if the number of cells doesn't match the number of columns, then pad the array with empty values~ ** Processing line: ~ cells += (columns - cells.length).map { "" }~ ** Processing line: ~~ ** Processing line: ~ # right align each cell value~ ** Processing line: ~ formated_row = "|" + cells.map do |c|~ ** Processing line: ~ "#{" " * (string_width.length - c.length) } #{c} |"~ ** Processing line: ~ end.join~ ** Processing line: ~~ ** Processing line: ~ # remove separators between empty values~ ** Processing line: ~ formated_row = formated_row.gsub(" | ", " ")~ ** Processing line: ~~ ** Processing line: ~ puts formated_row~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def pretty_print_row_separator string_width, cell_width, column_width, columns~ ** Processing line: ~ # this is a joint: +--------~ ** Processing line: ~ column_joint = "+#{"-" * cell_width}"~ ** Processing line: ~~ ** Processing line: ~ # multiple joints create a row separator: +----+----+~ ** Processing line: ~ puts (column_joint * columns) + "+"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render(args, x:, y:)~ ** Processing line: ~ args.outputs.reserved << font_style.label(x: x, y: y, text: "#{@prompt}#{current_input_str}", color: @text_color)~ ** Processing line: ~ args.outputs.reserved << (@cursor_color.to_h.merge x: x + @cursor_position_px + 0.5,~ ** Processing line: ~ y: y + 5,~ ** Processing line: ~ x2: x + @cursor_position_px + 0.5,~ ** Processing line: ~ y2: y + @font_style.letter_size.y + 4)~ ** Processing line: ~~ ** Processing line: ~ args.outputs.reserved << (@cursor_color.to_h.merge x: x + @cursor_position_px + 1,~ ** Processing line: ~ y: y + 5,~ ** Processing line: ~ x2: x + @cursor_position_px + 1,~ ** Processing line: ~ y2: y + @font_style.letter_size.y + 4)~ ** Processing line: ~~ ** Processing line: ~ # debugging rectangle for string~ ** Processing line: ~ # args.outputs.reserved << (@cursor_color.to_h.merge x: x,~ ** Processing line: ~ # y: y + 5,~ ** Processing line: ~ # w: @cursor_position_px,~ ** Processing line: ~ # h: @font_style.letter_size.y).border~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ if (@current_input_changed_at) &&~ ** Processing line: ~ (@current_input_changed_at < Kernel.global_tick_count) &&~ ** Processing line: ~ (@last_input_str != @current_input_str)~ ** Processing line: ~ @last_input_str_changed = true~ ** Processing line: ~ @last_input_str = "#{@current_input_str}"~ ** Processing line: ~ @current_input_changed_at = nil~ ** Processing line: ~ else~ ** Processing line: ~ @last_input_str_changed = false~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ private~ ** Processing line: ~~ ** Processing line: ~ def last_period_index~ ** Processing line: ~ current_input_str.rindex('.')~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_autocomplete_prefix~ ** Processing line: ~ if last_period_index~ ** Processing line: ~ current_input_str[(last_period_index + 1)..-1]~ ** Processing line: ~ else~ ** Processing line: ~ current_input_str~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def current_object~ ** Processing line: ~ return Kernel unless last_period_index~ ** Processing line: ~~ ** Processing line: ~ Kernel.eval(current_input_str[0...last_period_index])~ ** Processing line: ~ rescue NameError~ ** Processing line: ~ nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def method_candidates(prefix)~ ** Processing line: ~ current_object.autocomplete_methods.map(&:to_s).select { |m| m.start_with? prefix }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def display_autocomplete_candidate(candidate)~ ** Processing line: ~ if last_period_index~ ** Processing line: ~ @current_input_str[0..last_period_index] + candidate.to_s~ ** Processing line: ~ else~ ** Processing line: ~ candidate.to_s~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reset_autocomplete~ ** Processing line: ~ @last_autocomplete_prefix = nil~ ** Processing line: ~ @next_candidate_index = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def is_word_boundary? char~ ** Processing line: ~ # Alternative method~ ** Processing line: ~ # (WORD_LIMITER_CHARS - [char]).length != WORD_LIMITER_CHARS.length~ ** Processing line: ~ # Production code~ ** Processing line: ~ WORD_LIMITER_CHARS.include? char~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def str_len~ ** Processing line: ~ @current_input_str.length~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** controller.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~controller.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~controller.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/controller.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # controller.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ # @gtk~ ** Processing line: ~ class Controller~ ** Processing line: ~ # Access to keys that have been pressed down.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Controller::Keys]~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_reader :key_down~ ** Processing line: ~~ ** Processing line: ~ # Access to keys that have been released up.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Controller::Keys]~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_reader :key_up~ ** Processing line: ~~ ** Processing line: ~ # Access to keys that have been held down.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Controller::Keys]~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_reader :key_held~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_accessor :left_analog_x_raw,~ ** Processing line: ~ :left_analog_y_raw,~ ** Processing line: ~ :left_analog_x_perc,~ ** Processing line: ~ :left_analog_y_perc,~ ** Processing line: ~ :right_analog_x_raw,~ ** Processing line: ~ :right_analog_y_raw,~ ** Processing line: ~ :right_analog_x_perc,~ ** Processing line: ~ :right_analog_y_perc~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @key_down = Controller::Keys.new~ ** Processing line: ~ @key_up = Controller::Keys.new~ ** Processing line: ~ @key_held = Controller::Keys.new~ ** Processing line: ~ @left_analog_x_raw = 0~ ** Processing line: ~ @left_analog_y_raw = 0~ ** Processing line: ~ @left_analog_x_perc = 0~ ** Processing line: ~ @left_analog_y_perc = 0~ ** Processing line: ~ @right_analog_x_raw = 0~ ** Processing line: ~ @right_analog_y_raw = 0~ ** Processing line: ~ @right_analog_x_perc = 0~ ** Processing line: ~ @right_analog_y_perc = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ {~ ** Processing line: ~ key_down: @key_down.serialize,~ ** Processing line: ~ key_held: @key_held.serialize,~ ** Processing line: ~ key_up: @key_up.serialize~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Clear all current key presses.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [void]~ ** Processing line: ~ def clear~ ** Processing line: ~ @key_down.clear~ ** Processing line: ~ @key_up.clear~ ** Processing line: ~ @key_held.clear~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def up~ ** Processing line: ~ @key_up.up || @key_held.up~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def down~ ** Processing line: ~ @key_up.down || @key_held.down~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def left~ ** Processing line: ~ @key_up.left || @key_held.left~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def right~ ** Processing line: ~ @key_up.right || @key_held.right~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Activates a key into the down position.~ ** Processing line: ~ #~ ** Processing line: ~ # @param key [Symbol] The key to press down.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [void]~ ** Processing line: ~ def activate_down(key)~ ** Processing line: ~ key_down.activate(key)~ ** Processing line: ~ key_held.deactivate(key)~ ** Processing line: ~ key_up.deactivate(key)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Activates a key into the held down position.~ ** Processing line: ~ #~ ** Processing line: ~ # @param key [Symbol] The key to hold down.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [void]~ ** Processing line: ~ def activate_held(key)~ ** Processing line: ~ key_down.deactivate(key)~ ** Processing line: ~ key_held.activate(key) unless key_held.send(key)~ ** Processing line: ~ key_up.deactivate(key)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Activates a key release into the up position.~ ** Processing line: ~ #~ ** Processing line: ~ # @param key [Symbol] The key release up.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [void]~ ** Processing line: ~ def activate_up(key)~ ** Processing line: ~ key_down.deactivate(key)~ ** Processing line: ~ key_held.deactivate(key)~ ** Processing line: ~ key_up.activate(key)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ include DirectionalInputHelperMethods~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** controller/config.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~controller/config.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~controller/config.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/controller/config.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # controller/config.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ # !!! FIXME: add console command to forget custom binding(s)~ ** Processing line: ~ # !!! FIXME: add console command to forget replace existing binding(s)~ ** Processing line: ~ # !!! FIXME: add console command go into play_around mode to make sure controller isn't wonky.~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Controller~ ** Processing line: ~ class Config~ ** Processing line: ~ def initialize runtime~ ** Processing line: ~ @runtime = runtime~ ** Processing line: ~ @raw_joysticks = {} # things that aren't game controllers to try to configure.~ ** Processing line: ~ @target = nil~ ** Processing line: ~ @animation_duration = (1.5).seconds~ ** Processing line: ~ @toggled_at = 0~ ** Processing line: ~ @fading = 0~ ** Processing line: ~ @current_part = 0~ ** Processing line: ~ @part_alpha = 0~ ** Processing line: ~ @part_alpha_increment = 10~ ** Processing line: ~ @joystick_state = {}~ ** Processing line: ~ @playing_around = false~ ** Processing line: ~ @used_bindings = {}~ ** Processing line: ~ @bindings = []~ ** Processing line: ~ @parts = [~ ** Processing line: ~ [ 919, 282, 'A button', 'a' ],~ ** Processing line: ~ [ 960, 323, 'B button', 'b' ],~ ** Processing line: ~ [ 878, 323, 'X button', 'x' ],~ ** Processing line: ~ [ 919, 365, 'Y button', 'y' ],~ ** Processing line: ~ [ 433, 246, 'left stick left', '-leftx' ],~ ** Processing line: ~ [ 497, 246, 'left stick right', '+leftx' ],~ ** Processing line: ~ [ 466, 283, 'left stick up', '-lefty' ],~ ** Processing line: ~ [ 466, 218, 'left stick down', '+lefty' ],~ ** Processing line: ~ [ 466, 246, 'left stick button', 'leftstick' ],~ ** Processing line: ~ [ 741, 246, 'right stick left', '-rightx' ],~ ** Processing line: ~ [ 802, 246, 'right stick right', '+rightx' ],~ ** Processing line: ~ [ 773, 283, 'right stick up', '-righty' ],~ ** Processing line: ~ [ 773, 218, 'right stick down', '+righty' ],~ ** Processing line: ~ [ 772, 246, 'right stick button', 'rightstick' ],~ ** Processing line: ~ [ 263, 465, 'left shoulder button', 'leftshoulder' ],~ ** Processing line: ~ [ 263, 503, 'left trigger', 'lefttrigger' ],~ ** Processing line: ~ [ 977, 465, 'right shoulder button', 'rightshoulder' ],~ ** Processing line: ~ [ 977, 503, 'right trigger', 'righttrigger' ],~ ** Processing line: ~ [ 318, 365, 'D-pad up', 'dpup' ],~ ** Processing line: ~ [ 360, 322, 'D-pad right', 'dpright' ],~ ** Processing line: ~ [ 318, 280, 'D-pad down', 'dpdown' ],~ ** Processing line: ~ [ 275, 322, 'D-pad left', 'dpleft' ],~ ** Processing line: ~ [ 570, 402, 'select/back button', 'back'],~ ** Processing line: ~ [ 619, 448, 'guide/home button', 'guide' ],~ ** Processing line: ~ [ 669, 402, 'start button', 'start' ],~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rawjoystick_connected jid, joystickname, guid~ ** Processing line: ~ return if jid < 0~ ** Processing line: ~ @raw_joysticks[jid] = { name: joystickname, guid: guid }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rawjoystick_disconnected jid~ ** Processing line: ~ return if jid < 0~ ** Processing line: ~ if @raw_joysticks[jid] != nil~ ** Processing line: ~ @raw_joysticks.delete(jid)~ ** Processing line: ~ @runtime.ffi_misc.close_raw_joystick(jid)~ ** Processing line: ~ # Fade out the config screen if we were literally configuring this controller right now.~ ** Processing line: ~ if !@target.nil? && @target[0] == jid~ ** Processing line: ~ @target[0] = nil~ ** Processing line: ~ @toggled_at = Kernel.global_tick_count~ ** Processing line: ~ @fading = -1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def build_binding_string~ ** Processing line: ~ bindingstr = ''~ ** Processing line: ~ skip = false~ ** Processing line: ~~ ** Processing line: ~ for i in 0..@parts.length-1~ ** Processing line: ~ if skip ; skip = false ; next ; end~ ** Processing line: ~~ ** Processing line: ~ binding = @bindings[i]~ ** Processing line: ~ next if binding.nil?~ ** Processing line: ~~ ** Processing line: ~ part = @parts[i][3]~ ** Processing line: ~~ ** Processing line: ~ # clean up string:~ ** Processing line: ~ # if axis uses -a0 for negative and +a0 for positive, just make it "leftx:a0" instead of "-leftx:-a0,+leftx:+a0"~ ** Processing line: ~ # if axis uses +a0 for negative and -a0 for positive, just make it "leftx:a0~" instead of "-leftx:+a0,+leftx:-a0"~ ** Processing line: ~ if part == '-leftx' || part == '-lefty' || part == '-rightx' || part == '-righty'~ ** Processing line: ~ nextbinding = @bindings[i+1]~ ** Processing line: ~ if binding.start_with?('-a') && nextbinding.start_with?('+a') && binding[2..-1] == nextbinding[2..-1]~ ** Processing line: ~ skip = true~ ** Processing line: ~ part = part[1..-1]~ ** Processing line: ~ binding = binding[1..-1]~ ** Processing line: ~ elsif binding.start_with?('+a') && nextbinding.start_with?('-a') && binding[2..-1] == nextbinding[2..-1]~ ** Processing line: ~ skip = true~ ** Processing line: ~ part = part[1..-1]~ ** Processing line: ~ binding = "#{binding[1..-1]}~"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ bindingstr += "#{!bindingstr.empty? ? ',' : ''}#{part}:#{binding}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ details = @target[1]~ ** Processing line: ~~ ** Processing line: ~ # !!! FIXME: no String.delete in mRuby?!?! Maybe so when upgrading.~ ** Processing line: ~ #name = details[:name].delete(',')~ ** Processing line: ~ # !!! FIXME: ...no regexp either... :/~ ** Processing line: ~ #name = details[:name].gsub(/,/, ' ') # !!! FIXME: will SDL let you escape these instead?~ ** Processing line: ~ unescaped = details[:name]~ ** Processing line: ~ name = ''~ ** Processing line: ~ for i in 0..unescaped.length-1~ ** Processing line: ~ ch = unescaped[i]~ ** Processing line: ~ name += (ch == ',') ? ' ' : ch~ ** Processing line: ~ end~ ** Processing line: ~ return "#{details[:guid]},#{name},platform:#{@runtime.platform},#{bindingstr}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def move_to_different_part part~ ** Processing line: ~ if !@joystick_state[:axes].nil?~ ** Processing line: ~ @joystick_state[:axes].each { |i| i[:farthestval] = i[:startingval] if !i.nil? }~ ** Processing line: ~ end~ ** Processing line: ~ @current_part = part~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def previous_part~ ** Processing line: ~ if @current_part > 0~ ** Processing line: ~ # remove the binding that we previous had here so it can be reused.~ ** Processing line: ~ bindstr = @bindings[@current_part - 1]~ ** Processing line: ~ @bindings[@current_part - 1] = nil~ ** Processing line: ~ @used_bindings[bindstr] = nil~ ** Processing line: ~ move_to_different_part @current_part - 1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def next_part~ ** Processing line: ~ if @current_part < (@parts.length - 1)~ ** Processing line: ~ move_to_different_part @current_part + 1~ ** Processing line: ~ else~ ** Processing line: ~ @playing_around = true~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_binding bindstr~ ** Processing line: ~ return false if !@used_bindings[bindstr].nil?~ ** Processing line: ~ @used_bindings[bindstr] = @current_part~ ** Processing line: ~ @bindings[@current_part] = bindstr~ ** Processing line: ~ return true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Called when a lowlevel joystick moves an axis.~ ** Processing line: ~ def rawjoystick_axis jid, axis, value~ ** Processing line: ~ return if @target.nil? || jid != @target[0] || @fading != 0 # skip if not currently considering this joystick.~ ** Processing line: ~~ ** Processing line: ~ @joystick_state[:axes] ||= []~ ** Processing line: ~ @joystick_state[:axes][axis] ||= {~ ** Processing line: ~ moving: false,~ ** Processing line: ~ startingval: 0,~ ** Processing line: ~ currentval: 0,~ ** Processing line: ~ farthestval: 0~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ # this is the logic from SDL's controllermap.c, more or less, since this is hard to get right from scratch.~ ** Processing line: ~ state = @joystick_state[:axes][axis]~ ** Processing line: ~ state[:currentval] = value~ ** Processing line: ~ if !state[:moving]~ ** Processing line: ~ state[:moving] = true~ ** Processing line: ~ state[:startingval] = value~ ** Processing line: ~ state[:farthestval] = value~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ current_distance = (value - state[:startingval]).abs~ ** Processing line: ~ farthest_distance = (state[:farthestval] - state[:startingval]).abs~ ** Processing line: ~ if current_distance > farthest_distance~ ** Processing line: ~ state[:farthestval] = value~ ** Processing line: ~ farthest_distance = (state[:farthestval] - state[:startingval]).abs~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # If we've gone out far enough and started to come back, let's bind this axis~ ** Processing line: ~ if (farthest_distance >= 16000) && (current_distance <= 10000)~ ** Processing line: ~ next_part if set_binding("#{(state[:farthestval] < 0) ? '-' : '+'}a#{axis}")~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Called when a lowlevel joystick moves a hat.~ ** Processing line: ~ def rawjoystick_hat jid, hat, value~ ** Processing line: ~ return if @target.nil? || jid != @target[0] || @fading != 0 # skip if not currently considering this joystick.~ ** Processing line: ~~ ** Processing line: ~ @joystick_state[:hats] ||= []~ ** Processing line: ~ @joystick_state[:hats][hat] = value~ ** Processing line: ~~ ** Processing line: ~ return if value == 0 # 0 == centered, skip it~ ** Processing line: ~ next_part if set_binding("h#{hat}.#{value}")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Called when a lowlevel joystick moves a button.~ ** Processing line: ~ def rawjoystick_button jid, button, pressed~ ** Processing line: ~ return if @target.nil? || jid != @target[0] || @fading != 0 # skip if not currently considering this joystick.~ ** Processing line: ~~ ** Processing line: ~ @joystick_state[:buttons] ||= []~ ** Processing line: ~ @joystick_state[:buttons][button] = pressed~ ** Processing line: ~~ ** Processing line: ~ return if !pressed~ ** Processing line: ~ next_part if set_binding("b#{button}")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_fading~ ** Processing line: ~ if @fading == 0~ ** Processing line: ~ return 255~ ** Processing line: ~ elsif @fading > 0 # fading in~ ** Processing line: ~ percent = @toggled_at.global_ease(@animation_duration, :flip, :quint, :flip)~ ** Processing line: ~ if percent >= 1.0~ ** Processing line: ~ percent = 1.0~ ** Processing line: ~ @fading = 0~ ** Processing line: ~ end~ ** Processing line: ~ else # fading out~ ** Processing line: ~ percent = @toggled_at.global_ease(@animation_duration, :flip, :quint)~ ** Processing line: ~ if percent <= 0.0~ ** Processing line: ~ percent = 0.0~ ** Processing line: ~ @fading = 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return (percent * 255.0).to_i~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_basics args, msg, fade=255~ ** Processing line: ~ joystickname = @target[1][:name]~ ** Processing line: ~ args.outputs.primitives << [0, 0, $gtk.logical_width, $gtk.logical_height, 255, 255, 255, fade].solid~ ** Processing line: ~ args.outputs.primitives << [0, 0, $gtk.logical_width, $gtk.logical_height, 'dragonruby-controller.png', 0, fade, 255, 255, 255].sprite~ ** Processing line: ~ args.outputs.primitives << [$gtk.logical_width / 2, 700, joystickname, 2, 1, 0, 0, 0, fade].label~ ** Processing line: ~ args.outputs.primitives << [$gtk.logical_height / 2, 650, msg, 0, 1, 0, 0, 0, 255].label if !msg.empty?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_part_highlight args, part, alpha=255~ ** Processing line: ~ partsize = 41~ ** Processing line: ~ args.outputs.primitives << [part[0], part[1], partsize, partsize, 255, 0, 0, alpha].border~ ** Processing line: ~ args.outputs.primitives << [part[0]-1, part[1]-1, partsize+2, partsize+2, 255, 0, 0, alpha].border~ ** Processing line: ~ args.outputs.primitives << [part[0]-2, part[1]-2, partsize+4, partsize+4, 255, 0, 0, alpha].border~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def choose_target~ ** Processing line: ~ if @target.nil?~ ** Processing line: ~ while !@raw_joysticks.empty?~ ** Processing line: ~ t = @raw_joysticks.shift # see if there's a joystick waiting on us.~ ** Processing line: ~ next if t[0] < 0 # just in case.~ ** Processing line: ~ next if t[1][:guid].nil? # did we already handle this guid? Dump it.~ ** Processing line: ~ @target = t~ ** Processing line: ~ break~ ** Processing line: ~ end~ ** Processing line: ~ return false if @target.nil? # nothing to configure at the moment.~ ** Processing line: ~ @toggled_at = Kernel.global_tick_count~ ** Processing line: ~ @fading = 1~ ** Processing line: ~ @current_part = 0~ ** Processing line: ~ @part_alpha = 0~ ** Processing line: ~ @part_alpha_increment = 10~ ** Processing line: ~ @joystick_state = {}~ ** Processing line: ~ @used_bindings = {}~ ** Processing line: ~ @playing_around = false~ ** Processing line: ~ @bindings = []~ ** Processing line: ~ end~ ** Processing line: ~ return true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def render_part_highlight_from_bindstr args, bindstr, alpha=255~ ** Processing line: ~ partidx = @used_bindings[bindstr]~ ** Processing line: ~ return if partidx.nil?~ ** Processing line: ~ render_part_highlight args, @parts[partidx], alpha~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def play_around args~ ** Processing line: ~ return false if !@playing_around~ ** Processing line: ~~ ** Processing line: ~ if args.inputs.keyboard.key_down.escape~ ** Processing line: ~ @current_part = 0~ ** Processing line: ~ @part_alpha = 0~ ** Processing line: ~ @part_alpha_increment = 10~ ** Processing line: ~ @used_bindings = {}~ ** Processing line: ~ @playing_around = false~ ** Processing line: ~ @bindings = []~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.space~ ** Processing line: ~ jid = @target[0]~ ** Processing line: ~ bindingstr = build_binding_string~ ** Processing line: ~ #puts("new controller binding: '#{bindingstr}'")~ ** Processing line: ~ @runtime.ffi_misc.add_controller_config bindingstr~ ** Processing line: ~ @runtime.ffi_misc.convert_rawjoystick_to_controller jid~ ** Processing line: ~ @target[0] = -1 # Conversion closes the raw joystick.~ ** Processing line: ~~ ** Processing line: ~ # Handle any other pending joysticks that have the same GUID (so if you plug in four of the same model, we're already done!)~ ** Processing line: ~ guid = @target[1][:guid]~ ** Processing line: ~ @raw_joysticks.each { |jid, details|~ ** Processing line: ~ if details[:guid] == guid~ ** Processing line: ~ @runtime.ffi_misc.convert_rawjoystick_to_controller jid~ ** Processing line: ~ details[:guid] = nil~ ** Processing line: ~ end~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ # Done with this guy.~ ** Processing line: ~ @playing_around = false~ ** Processing line: ~ @toggled_at = Kernel.global_tick_count~ ** Processing line: ~ @fading = -1~ ** Processing line: ~ return false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ render_basics args, 'Now play around with the controller, and make sure it feels right!'~ ** Processing line: ~ args.outputs.primitives << [$gtk.logical_width / 2, 90, '[ESCAPE]: Reconfigure, [SPACE]: Save this configuration', 0, 1, 0, 0, 0, 255].label~ ** Processing line: ~~ ** Processing line: ~ axes = @joystick_state[:axes]~ ** Processing line: ~ if !axes.nil?~ ** Processing line: ~ for i in 0..axes.length-1~ ** Processing line: ~ next if axes[i].nil?~ ** Processing line: ~ value = axes[i][:currentval]~ ** Processing line: ~ next if value.nil? || (value.abs < 16000)~ ** Processing line: ~ render_part_highlight_from_bindstr args, "#{value < 0 ? '-' : '+'}a#{i}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ hats = @joystick_state[:hats]~ ** Processing line: ~ if !hats.nil?~ ** Processing line: ~ for i in 0..hats.length-1~ ** Processing line: ~ value = hats[i]~ ** Processing line: ~ next if value.nil? || (value == 0)~ ** Processing line: ~ render_part_highlight_from_bindstr args, "h#{i}.#{value}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ buttons = @joystick_state[:buttons]~ ** Processing line: ~ if !buttons.nil?~ ** Processing line: ~ for i in 0..buttons.length-1~ ** Processing line: ~ value = buttons[i]~ ** Processing line: ~ next if value.nil? || !value~ ** Processing line: ~ render_part_highlight_from_bindstr args, "b#{i}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def should_tick?~ ** Processing line: ~ return true if @play_around~ ** Processing line: ~ return true if @target~ ** Processing line: ~ return false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick args~ ** Processing line: ~ return true if play_around args~ ** Processing line: ~ return false if !choose_target~ ** Processing line: ~~ ** Processing line: ~ jid = @target[0]~ ** Processing line: ~~ ** Processing line: ~ if @fading == 0~ ** Processing line: ~ # Cancel config?~ ** Processing line: ~ if args.inputs.keyboard.key_down.escape~ ** Processing line: ~ # !!! FIXME: prompt to ignore this joystick forever or just this run~ ** Processing line: ~ @toggled_at = Kernel.global_tick_count~ ** Processing line: ~ @fading = -1~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if @fading == 0~ ** Processing line: ~ if args.inputs.keyboard.key_down.backspace~ ** Processing line: ~ previous_part~ ** Processing line: ~ elsif args.inputs.keyboard.key_down.space~ ** Processing line: ~ next_part~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ fade = calc_fading~ ** Processing line: ~ if (@fading < 0) && (fade == 0)~ ** Processing line: ~ @runtime.ffi_misc.close_raw_joystick(jid) if jid >= 0~ ** Processing line: ~ @target = nil # done with this controller~ ** Processing line: ~ return false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ render_basics args, (@fading >= 0) ? "We don't recognize this controller, so tell us about it!" : '', fade~ ** Processing line: ~~ ** Processing line: ~ return true if fade < 255 # all done for now~ ** Processing line: ~~ ** Processing line: ~ part = @parts[@current_part]~ ** Processing line: ~ args.outputs.primitives << [$gtk.logical_width / 2, 575, "Please press the #{part[2]}.", 0, 1, 0, 0, 0, 255].label~ ** Processing line: ~ render_part_highlight args, part, @part_alpha~ ** Processing line: ~ args.outputs.primitives << [$gtk.logical_width / 2, 90, '[ESCAPE]: Ignore controller, [BACKSPACE]: Go back one button, [SPACE]: Skip this button', 0, 1, 0, 0, 0, 255].label~ ** Processing line: ~~ ** Processing line: ~ @part_alpha += @part_alpha_increment~ ** Processing line: ~ if (@part_alpha_increment > 0) && (@part_alpha >= 255)~ ** Processing line: ~ @part_alpha = 255~ ** Processing line: ~ @part_alpha_increment = -10~ ** Processing line: ~ elsif (@part_alpha_increment < 0) && (@part_alpha <= 0)~ ** Processing line: ~ @part_alpha = 0~ ** Processing line: ~ @part_alpha_increment = 10~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return true~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** controller/keys.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~controller/keys.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~controller/keys.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/controller/keys.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # controller/keys.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Controller~ ** Processing line: ~ class Keys~ ** Processing line: ~ include Serialize~ ** Processing line: ~~ ** Processing line: ~ LABELS = [~ ** Processing line: ~ :up, :down, :left, :right,~ ** Processing line: ~ :a, :b, :x, :y,~ ** Processing line: ~ :l1, :r1,~ ** Processing line: ~ :l2, :r2,~ ** Processing line: ~ :l3, :r3,~ ** Processing line: ~ :start, :select, :home,~ ** Processing line: ~ :directional_up, :directional_down, :directional_left, :directional_right~ ** Processing line: ~ ].freeze~ ** Processing line: ~~ ** Processing line: ~ LABELS.each do |label|~ ** Processing line: ~ attr label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def back~ ** Processing line: ~ @select~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def back= value~ ** Processing line: ~ @select = value~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def guide~ ** Processing line: ~ @home~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def guide= value~ ** Processing line: ~ @home = value~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Activate a key.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [void]~ ** Processing line: ~ def activate key~ ** Processing line: ~ instance_variable_set("@#{key}", Kernel.tick_count + 1)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Deactivate a key.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [void]~ ** Processing line: ~ def deactivate key~ ** Processing line: ~ instance_variable_set("@#{key}", nil)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Clear all key inputs.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [void]~ ** Processing line: ~ def clear~ ** Processing line: ~ LABELS.each { |label| deactivate(label) }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def truthy_keys~ ** Processing line: ~ LABELS.select { |label| send(label) }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** directional_input_helper_methods.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~directional_input_helper_methods.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~directional_input_helper_methods.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/directional_input_helper_methods.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # directional_input_helper_methods.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ # This is a module that contains normalization of behavior related to `up`|`down`|`left`|`right` on keyboards and controllers.~ ** Processing line: ~ module DirectionalInputHelperMethods~ ** Processing line: ~ def self.included klass~ ** Processing line: ~ key_state_methods = [:key_held, :key_down]~ ** Processing line: ~ directional_methods = [:up, :down, :left, :right]~ ** Processing line: ~ method_results = (directional_methods + key_state_methods).map {|m| [m, klass.instance_methods.include?(m)] }~ ** Processing line: ~~ ** Processing line: ~ error_message = <<-S~ ** Processing line: ~ * ERROR~ ** Processing line: ~ The GTK::DirectionalKeys module should only be included in objects that respond to the following api hierarchy:~ ** Processing line: ~~ ** Processing line: ~ - (#{ directional_methods.join("|") })~ ** Processing line: ~ - key_held.(#{ directional_methods.join("|") })~ ** Processing line: ~ - key_down.(#{ directional_methods.join("|") })~ ** Processing line: ~~ ** Processing line: ~ #{klass} does not respond to all of these methods (here is the diagnostics):~ ** Processing line: ~ #{method_results.map {|m, r| "- #{m}: #{r}"}.join("\n")}~ ** Processing line: ~~ ** Processing line: ~ Please implement the methods that returned false inthe list above.~ ** Processing line: ~ S~ ** Processing line: ~ unless method_results.map {|m, result| result}.all?~ ** Processing line: ~ raise error_message~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a signal indicating left (`-1`), right (`1`), or neither ('0').~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Integer]~ ** Processing line: ~ def left_right~ ** Processing line: ~ return -1 if self.left~ ** Processing line: ~ return 1 if self.right~ ** Processing line: ~ return 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a signal indicating up (`1`), down (`-1`), or neither ('0').~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Integer]~ ** Processing line: ~ def up_down~ ** Processing line: ~ return 1 if self.up~ ** Processing line: ~ return -1 if self.down~ ** Processing line: ~ return 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a normal vector (in the form of an Array with two values). If no directionals are held/down, the function returns nil.~ ** Processing line: ~ #~ ** Processing line: ~ # The possible results are:~ ** Processing line: ~ #~ ** Processing line: ~ # - ~nil~ which denotes that no directional input exists.~ ** Processing line: ~ # - ~[ 0, 1]~ which denotes that only up is being held/pressed.~ ** Processing line: ~ # - ~[ 0, -1]~ which denotes that only down is being held/pressed.~ ** Processing line: ~ # - ~[-0.707, 0.707]~ which denotes that right and up are being pressed/held.~ ** Processing line: ~ # - ~[-0.707, -0.707]~ which denotes that left and down are being pressed/held.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def directional_vector~ ** Processing line: ~ lr, ud = [self.left_right, self.up_down]~ ** Processing line: ~~ ** Processing line: ~ if lr == 0 && ud == 0~ ** Processing line: ~ return nil~ ** Processing line: ~ elsif lr.abs == ud.abs~ ** Processing line: ~ return [45.vector_x * lr.sign, 45.vector_y * ud.sign, ud.sign]~ ** Processing line: ~ else~ ** Processing line: ~ return [lr, ud]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def directional_angle~ ** Processing line: ~ return nil unless directional_vector~ ** Processing line: ~~ ** Processing line: ~ Math.atan2(up_down, left_right).to_degrees~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def method_missing m, *args~ ** Processing line: ~ # combine the key with ctrl_~ ** Processing line: ~ if m.to_s.start_with?("ctrl_")~ ** Processing line: ~ other_key = m.to_s.split("_").last~ ** Processing line: ~ define_singleton_method(m) do~ ** Processing line: ~ return self.key_up.send(other_key.to_sym) && self.key_up.control~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return send(m)~ ** Processing line: ~ else~ ** Processing line: ~ # see if the key is either held or down~ ** Processing line: ~ define_singleton_method(m) do~ ** Processing line: ~ self.key_down.send(m) || self.key_held.send(m)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return send(m)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** easing.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~easing.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~easing.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/easing.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # easing.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ module Easing~ ** Processing line: ~ def self.ease start_tick, current_tick, duration, *definitions~ ** Processing line: ~ ease_extended start_tick,~ ** Processing line: ~ current_tick,~ ** Processing line: ~ start_tick + duration,~ ** Processing line: ~ initial_value(*definitions),~ ** Processing line: ~ final_value(*definitions),~ ** Processing line: ~ *definitions~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.ease_extended start_tick, current_tick, end_tick, default_before, default_after, *definitions~ ** Processing line: ~ definitions.flatten!~ ** Processing line: ~ definitions = [:identity] if definitions.length == 0~ ** Processing line: ~ duration = end_tick - start_tick~ ** Processing line: ~ elapsed = current_tick - start_tick~ ** Processing line: ~ y = elapsed.percentage_of(duration).cap_min_max(0, 1)~ ** Processing line: ~~ ** Processing line: ~ definitions.map do |definition|~ ** Processing line: ~ y = Easing.exec_definition(definition, start_tick, duration, y)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.ease_spline start_tick, current_tick, duration, spline~ ** Processing line: ~ ease_spline_extended start_tick, current_tick, start_tick + duration, spline~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.ease_spline_extended start_tick, current_tick, end_tick, spline~ ** Processing line: ~ return spline[-1][-1] if current_tick >= end_tick~ ** Processing line: ~ duration = end_tick - start_tick~ ** Processing line: ~ t = (current_tick - start_tick).fdiv duration~ ** Processing line: ~ time_allocation_per_curve = 1.fdiv(spline.length)~ ** Processing line: ~ curve_index, curve_t = t.fdiv(time_allocation_per_curve).let do |spline_t|~ ** Processing line: ~ [spline_t.to_i, spline_t - spline_t.to_i]~ ** Processing line: ~ end~ ** Processing line: ~ Geometry.cubic_bezier curve_t, *spline[curve_index]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.initial_value *definitions~ ** Processing line: ~ definitions.flatten!~ ** Processing line: ~ return Easing.exec_definition (definitions.at(-1) || :identity), 0, 10, 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.final_value *definitions~ ** Processing line: ~ definitions.flatten!~ ** Processing line: ~ return Easing.exec_definition (definitions.at(-1) || :identity), 0, 10, 1.0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.exec_definition definition, start_tick, duration, x~ ** Processing line: ~ if definition.is_a? Symbol~ ** Processing line: ~ return Easing.send(definition, x).cap_min_max(0, 1)~ ** Processing line: ~ elsif definition.is_a? Proc~ ** Processing line: ~ return definition.call(x, start_tick, duration).cap_min_max(0, 1)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ I don't know how to execute easing function with definition #{definition}.~ ** Processing line: ~~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.identity x~ ** Processing line: ~ x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.flip x~ ** Processing line: ~ 1 - x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.quad x~ ** Processing line: ~ x * x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.cube x~ ** Processing line: ~ x * x * x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.quart x~ ** Processing line: ~ x * x * x * x * x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.quint x~ ** Processing line: ~ x * x * x * x * x * x~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ Easing = GTK::Easing~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** entity.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~entity.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~entity.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/entity.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # entity.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Entity~ ** Processing line: ~ def self.id!~ ** Processing line: ~ @id ||= 0~ ** Processing line: ~ @id += 1~ ** Processing line: ~ @id~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.__reset_id__!~ ** Processing line: ~ @id = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.strict_entities~ ** Processing line: ~ @strict_entities ||= {}~ ** Processing line: ~ @strict_entities~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.parse_serialization_data data~ ** Processing line: ~ r = Entity.parse_serialization_data data~ ** Processing line: ~ return r if r.is_a? OpenEntity~ ** Processing line: ~ return r if r.is_a? StrictEntity~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ The save data looks to be corrupt.~ ** Processing line: ~~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.parse_serialization_data value~ ** Processing line: ~ if value.is_a?(Hash) && value[:entity_id] && value[:entity_strict]~ ** Processing line: ~ o = new_entity_strict value[:entity_name], value~ ** Processing line: ~ o.load_entity_data! value~ ** Processing line: ~ return o~ ** Processing line: ~ elsif value.is_a?(Hash) && value[:entity_id]~ ** Processing line: ~ o = OpenEntity.new~ ** Processing line: ~ o.load_entity_data! value~ ** Processing line: ~ return o~ ** Processing line: ~ elsif value.is_a? Array~ ** Processing line: ~ return value.map { |entry| Entity.parse_serialization_data entry }~ ** Processing line: ~ else~ ** Processing line: ~ return value~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.new_entity entity_type, init_hash = nil, block = nil~ ** Processing line: ~ n = OpenEntity.new(entity_type)~ ** Processing line: ~ n.entity_type = entity_type~ ** Processing line: ~ n.created_at = Kernel.tick_count~ ** Processing line: ~ n.global_created_at = Kernel.global_tick_count~ ** Processing line: ~~ ** Processing line: ~ if init_hash~ ** Processing line: ~ init_hash.each do |k, v|~ ** Processing line: ~ n.as_hash[k] = v~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ block.call(n) if block~ ** Processing line: ~~ ** Processing line: ~ n~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.new_entity_strict entity_type, init_hash = nil, block = nil~ ** Processing line: ~ if !Entity.strict_entities[entity_type]~ ** Processing line: ~ init_hash ||= { }~ ** Processing line: ~~ ** Processing line: ~ n = new_entity entity_type, init_hash, block~ ** Processing line: ~ klass = Class.new(StrictEntity)~ ** Processing line: ~~ ** Processing line: ~ klass.class_eval do~ ** Processing line: ~ init_hash.each do |k, v|~ ** Processing line: ~ attr_accessor k~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ n.as_hash.each do |k, v|~ ** Processing line: ~ attr_accessor k if !init_hash[k]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ Entity.strict_entities[entity_type] = klass~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ klass = Entity.strict_entities[entity_type]~ ** Processing line: ~ (klass.new entity_type, init_hash, block)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** geometry.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~geometry.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~geometry.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/geometry.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # geometry.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ module Geometry~ ** Processing line: ~ def self.rotate_point point, angle, around = nil~ ** Processing line: ~ s = Math.sin angle.to_radians~ ** Processing line: ~ c = Math.cos angle.to_radians~ ** Processing line: ~ px = point.x~ ** Processing line: ~ py = point.y~ ** Processing line: ~ cx = 0~ ** Processing line: ~ cy = 0~ ** Processing line: ~ if around~ ** Processing line: ~ cx = around.x~ ** Processing line: ~ cy = around.y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ point.merge(x: ((px - cx) * c - (py - cy) * s) + cx,~ ** Processing line: ~ y: ((px - cx) * s + (py - cy) * c) + cy)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns f(t) for a cubic Bezier curve.~ ** Processing line: ~ def self.cubic_bezier t, a, b, c, d~ ** Processing line: ~ s = 1 - t~ ** Processing line: ~ s0 = 1~ ** Processing line: ~ s1 = s~ ** Processing line: ~ s2 = s * s~ ** Processing line: ~ s3 = s * s * s~ ** Processing line: ~~ ** Processing line: ~ t0 = 1~ ** Processing line: ~ t1 = t~ ** Processing line: ~ t2 = t * t~ ** Processing line: ~ t3 = t * t * t~ ** Processing line: ~~ ** Processing line: ~ 1 * s3 * t0 * a +~ ** Processing line: ~ 3 * s2 * t1 * b +~ ** Processing line: ~ 3 * s1 * t2 * c +~ ** Processing line: ~ 1 * s0 * t3 * d~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns true if a primitive's rectangle is entirely inside another primitive's rectangle.~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def inside_rect? outer, tolerance = 0.0~ ** Processing line: ~ Geometry.inside_rect? self, outer, tolerance~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns true if a primitive's rectangle overlaps another primitive's rectangle.~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def intersect_rect? other, tolerance = 0.1~ ** Processing line: ~ Geometry.intersect_rect? self, other, tolerance~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def intersects_rect? *args~ ** Processing line: ~ Geometry.intersects_rect?(*args)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def scale_rect_extended percentage_x: percentage_x,~ ** Processing line: ~ percentage_y: percentage_y,~ ** Processing line: ~ anchor_x: anchor_x,~ ** Processing line: ~ anchor_y: anchor_y~ ** Processing line: ~~ ** Processing line: ~ Geometry.scale_rect_extended self,~ ** Processing line: ~ percentage_x: percentage_x,~ ** Processing line: ~ percentage_y: percentage_y,~ ** Processing line: ~ anchor_x: anchor_x,~ ** Processing line: ~ anchor_y: anchor_y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Scales a primitive rect by a percentage.~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def scale_rect percentage, *anchors~ ** Processing line: ~ Geometry.scale_rect self, percentage, *anchors~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns the angle from one primitive to another primitive.~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def angle_to other_point~ ** Processing line: ~ Geometry.angle_to self, other_point~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns the angle to one primitive from another primitive.~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def angle_from other_point~ ** Processing line: ~ Geometry.angle_from self, other_point~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns true if a primitive is within a circle specified by the circle's center and radius.~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def point_inside_circle? circle_center_point, radius~ ** Processing line: ~ Geometry.point_inside_circle? self, circle_center_point, radius~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.center_inside_rect rect, other_rect~ ** Processing line: ~ offset_x = (other_rect.w - rect.w).half~ ** Processing line: ~ offset_y = (other_rect.h - rect.h).half~ ** Processing line: ~ new_rect = rect.shift_rect(0, 0)~ ** Processing line: ~ new_rect.x = other_rect.x + offset_x~ ** Processing line: ~ new_rect.y = other_rect.y + offset_y~ ** Processing line: ~ new_rect~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise e, <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ center_inside_rect for self #{self} and other_rect #{other_rect}.\n#{e}.~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def center_inside_rect other_rect~ ** Processing line: ~ Geometry.center_inside_rect self, other_rect~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.center_inside_rect_x rect, other_rect~ ** Processing line: ~ offset_x = (other_rect.w - rect.w).half~ ** Processing line: ~ new_rect = rect.shift_rect(0, 0)~ ** Processing line: ~ new_rect.x = other_rect.x + offset_x~ ** Processing line: ~ new_rect.y = other_rect.y~ ** Processing line: ~ new_rect~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise e, <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ center_inside_rect_x for self #{self} and other_rect #{other_rect}.\n#{e}.~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def center_inside_rect_x other_rect~ ** Processing line: ~ Geometry.center_inside_rect_x self, other_rect~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.center_inside_rect_y rect, other_rect~ ** Processing line: ~ offset_y = (other_rect.h - rect.h).half~ ** Processing line: ~ new_rect = rect.shift_rect(0, 0)~ ** Processing line: ~ new_rect.x = other_rect.x~ ** Processing line: ~ new_rect.y = other_rect.y + offset_y~ ** Processing line: ~ new_rect~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise e, <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ center_inside_rect_y for self #{self} and other_rect #{other_rect}.\n#{e}.~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def center_inside_rect_y other_rect~ ** Processing line: ~ Geometry.center_inside_rect_y self, other_rect~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ # Returns a primitive that is anchored/repositioned based off its rectangle.~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def anchor_rect anchor_x, anchor_y~ ** Processing line: ~ current_w = self.w~ ** Processing line: ~ current_h = self.h~ ** Processing line: ~ delta_x = -1 * (anchor_x * current_w)~ ** Processing line: ~ delta_y = -1 * (anchor_y * current_h)~ ** Processing line: ~ self.shift_rect(delta_x, delta_y)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def angle_given_point other_point~ ** Processing line: ~ raise ":angle_given_point has been deprecated use :angle_from instead."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.shift_line line, x, y~ ** Processing line: ~ if line.is_a?(Array) || line.is_a?(Hash)~ ** Processing line: ~ new_line = line.dup~ ** Processing line: ~ new_line.x += x~ ** Processing line: ~ new_line.x2 += x~ ** Processing line: ~ new_line.y += y~ ** Processing line: ~ new_line.y2 += y~ ** Processing line: ~ new_line~ ** Processing line: ~ else~ ** Processing line: ~ raise "shift_line for #{line} is not supported."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.intersects_rect? *args~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ intersects_rect? (with an \"s\") has been deprecated.~ ** Processing line: ~ Use intersect_rect? instead (remove the \"s\").~ ** Processing line: ~~ ** Processing line: ~ * NOTE:~ ** Processing line: ~ Ruby's naming convention is to *never* include the \"s\" for~ ** Processing line: ~ interrogative method names (methods that end with a ?). It~ ** Processing line: ~ doesn't sound grammatically correct, but that has been the~ ** Processing line: ~ rule for a long time (and why intersects_rect? has been deprecated).~ ** Processing line: ~~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.line_y_intercept line, replace_infinity: nil~ ** Processing line: ~ line.y - line_slope(line, replace_infinity: replace_infinity) * line.x~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ * ERROR: ~Geometry::line_y_intercept~~ ** Processing line: ~ The following exception was thrown for line: #{line}~ ** Processing line: ~ #{e}~ ** Processing line: ~~ ** Processing line: ~ Consider passing in ~replace_infinity: VALUE~ to handle for vertical lines.~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.angle_between_lines line_one, line_two, replace_infinity: nil~ ** Processing line: ~ m_line_one = line_slope line_one, replace_infinity: replace_infinity~ ** Processing line: ~ m_line_two = line_slope line_two, replace_infinity: replace_infinity~ ** Processing line: ~ Math.atan((m_line_one - m_line_two) / (1 + m_line_two * m_line_one)).to_degrees~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.line_slope line, replace_infinity: nil~ ** Processing line: ~ return replace_infinity if line.x2 == line.x~ ** Processing line: ~ (line.y2 - line.y).fdiv(line.x2 - line.x)~ ** Processing line: ~ .replace_infinity(replace_infinity)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.line_rise_run line~ ** Processing line: ~ rise = (line.y2 - line.y).to_f~ ** Processing line: ~ run = (line.x2 - line.x).to_f~ ** Processing line: ~ if rise.abs > run.abs && rise != 0~ ** Processing line: ~ rise = rise.fdiv rise.abs~ ** Processing line: ~ run = run.fdiv rise.abs~ ** Processing line: ~ elsif run.abs > rise.abs && run != 0~ ** Processing line: ~ rise = rise.fdiv run.abs~ ** Processing line: ~ run = run.fdiv run.abs~ ** Processing line: ~ else~ ** Processing line: ~ rise = rise / rise.abs if rise != 0~ ** Processing line: ~ run = run / run.abs if run != 0~ ** Processing line: ~ end~ ** Processing line: ~ return { x: run , y: rise }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.ray_test point, line~ ** Processing line: ~ slope = (line.y2 - line.y).fdiv(line.x2 - line.x)~ ** Processing line: ~~ ** Processing line: ~ if line.x > line.x2~ ** Processing line: ~ point_two, point_one = [point_one, point_two]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ r = ((line.x2 - line.x) * (point.y - line.y) -~ ** Processing line: ~ (point.x - line.x) * (line.y2 - line.y))~ ** Processing line: ~~ ** Processing line: ~ if r == 0~ ** Processing line: ~ return :on~ ** Processing line: ~ elsif r < 0~ ** Processing line: ~ return :right if slope >= 0~ ** Processing line: ~ return :left~ ** Processing line: ~ elsif r > 0~ ** Processing line: ~ return :left if slope >= 0~ ** Processing line: ~ return :right~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.line_rect line~ ** Processing line: ~ if line.x > line.x2~ ** Processing line: ~ x = line.x2~ ** Processing line: ~ y = line.y2~ ** Processing line: ~ x2 = line.x~ ** Processing line: ~ y2 = line.y~ ** Processing line: ~ else~ ** Processing line: ~ x = line.x~ ** Processing line: ~ y = line.y~ ** Processing line: ~ x2 = line.x2~ ** Processing line: ~ y2 = line.y2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ w = x2 - x~ ** Processing line: ~ h = y2 - y~ ** Processing line: ~~ ** Processing line: ~ { x: x, y: y, w: w, h: h }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.line_intersect line_one, line_two, replace_infinity: nil~ ** Processing line: ~ m1 = line_slope(line_one, replace_infinity: replace_infinity)~ ** Processing line: ~ m2 = line_slope(line_two, replace_infinity: replace_infinity)~ ** Processing line: ~ b1 = line_y_intercept(line_one, replace_infinity: replace_infinity)~ ** Processing line: ~ b2 = line_y_intercept(line_two, replace_infinity: replace_infinity)~ ** Processing line: ~ x = (b1 - b2) / (m2 - m1)~ ** Processing line: ~ y = (-b2.fdiv(m2) + b1.fdiv(m1)).fdiv(1.fdiv(m1) - 1.fdiv(m2))~ ** Processing line: ~ [x, y]~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ * ERROR: ~Geometry::line_intersect~~ ** Processing line: ~ The following exception was thrown for line_one: #{line_one}, line_two: #{line_two}~ ** Processing line: ~ #{e}~ ** Processing line: ~~ ** Processing line: ~ Consider passing in ~replace_infinity: VALUE~ to handle for vertical lines.~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.contract_intersect_rect?~ ** Processing line: ~ [:left, :right, :top, :bottom]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.intersect_rect? rect_one, rect_two, tolerance = 0.1~ ** Processing line: ~ return false if ((rect_one.x + rect_one.w) - tolerance) < (rect_two.x + tolerance)~ ** Processing line: ~ return false if (rect_one.x + tolerance) > ((rect_two.x + rect_two.w) - tolerance)~ ** Processing line: ~ return false if ((rect_one.y + rect_one.h) - tolerance) < (rect_two.y + tolerance)~ ** Processing line: ~ return false if (rect_one.y + tolerance) > ((rect_two.y + rect_two.h) - tolerance)~ ** Processing line: ~ return true~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ context_help_rect_one = (rect_one.__help_contract_implementation contract_intersect_rect?)[:not_implemented_methods]~ ** Processing line: ~ context_help_rect_two = (rect_two.__help_contract_implementation contract_intersect_rect?)[:not_implemented_methods]~ ** Processing line: ~ context_help = ""~ ** Processing line: ~ if context_help_rect_one && context_help_rect_one.length > 0~ ** Processing line: ~ context_help += <<-S~ ** Processing line: ~ rect_one needs to implement the following methods: #{context_help_rect_one}~ ** Processing line: ~~ ** Processing line: ~ You may want to try include the ~AttrRect~ module which will give you these methods.~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if context_help_rect_two && context_help_rect_two.length > 0~ ** Processing line: ~ context_help += <<-S~ ** Processing line: ~ * FAILURE REASON:~ ** Processing line: ~ rect_two needs to implement the following methods: #{context_help_rect_two}~ ** Processing line: ~ NOTE: You may want to try include the ~GTK::Geometry~ module which will give you these methods.~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ raise e, <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ :intersect_rect? failed for~ ** Processing line: ~ - rect_one: #{rect_one}~ ** Processing line: ~ - rect_two: #{rect_two}~ ** Processing line: ~ #{context_help}~ ** Processing line: ~ \n#{e}~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.to_square size, x, y, anchor_x = 0.5, anchor_y = nil~ ** Processing line: ~ anchor_y ||= anchor_x~ ** Processing line: ~ x = x.shift_left(size * anchor_x)~ ** Processing line: ~ y = y.shift_down(size * anchor_y)~ ** Processing line: ~ [x, y, size, size]~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise e, ":to_square failed for size: #{size} x: #{x} y: #{y} anchor_x: #{anchor_x} anchor_y: #{anchor_y}.\n#{e}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.distance point_one, point_two~ ** Processing line: ~ Math.sqrt((point_two.x - point_one.x)**2 + (point_two.y - point_one.y)**2)~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise e, ":distance failed for point_one: #{point_one} point_two #{point_two}.\n#{e}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.angle_from start_point, end_point~ ** Processing line: ~ d_y = end_point.y - start_point.y~ ** Processing line: ~ d_x = end_point.x - start_point.x~ ** Processing line: ~ Math::PI.+(Math.atan2(d_y, d_x)).to_degrees~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise e, ":angle_from failed for start_point: #{start_point} end_point: #{end_point}.\n#{e}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.angle_to start_point, end_point~ ** Processing line: ~ angle_from end_point, start_point~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise e, ":angle_to failed for start_point: #{start_point} end_point: #{end_point}.\n#{e}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.point_inside_circle? point, circle_center_point, radius~ ** Processing line: ~ (point.x - circle_center_point.x) ** 2 + (point.y - circle_center_point.y) ** 2 < radius ** 2~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise e, ":point_inside_circle? failed for point: #{point} circle_center_point: #{circle_center_point} radius: #{radius}.\n#{e}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.inside_rect? inner_rect, outer_rect, tolerance = 0.0~ ** Processing line: ~ return nil if !inner_rect~ ** Processing line: ~ return nil if !outer_rect~ ** Processing line: ~~ ** Processing line: ~ inner_rect.x + tolerance >= outer_rect.x - tolerance &&~ ** Processing line: ~ (inner_rect.x + inner_rect.w) - tolerance <= (outer_rect.x + outer_rect.w) + tolerance &&~ ** Processing line: ~ inner_rect.y + tolerance >= outer_rect.y - tolerance &&~ ** Processing line: ~ (inner_rect.y + inner_rect.h) - tolerance <= (outer_rect.y + outer_rect.h) + tolerance~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise e, ":inside_rect? failed for inner_rect: #{inner_rect} outer_rect: #{outer_rect}.\n#{e}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.scale_rect_extended rect,~ ** Processing line: ~ percentage_x: percentage_x,~ ** Processing line: ~ percentage_y: percentage_y,~ ** Processing line: ~ anchor_x: anchor_x,~ ** Processing line: ~ anchor_y: anchor_y~ ** Processing line: ~ anchor_x ||= 0.0~ ** Processing line: ~ anchor_y ||= 0.0~ ** Processing line: ~ percentage_x ||= 1.0~ ** Processing line: ~ percentage_y ||= 1.0~ ** Processing line: ~ new_w = rect.w * percentage_x~ ** Processing line: ~ new_h = rect.h * percentage_y~ ** Processing line: ~ new_x = rect.x + (rect.w - new_w) * anchor_x~ ** Processing line: ~ new_y = rect.y + (rect.h - new_h) * anchor_y~ ** Processing line: ~ if rect.is_a? Array~ ** Processing line: ~ return [~ ** Processing line: ~ new_x,~ ** Processing line: ~ new_y,~ ** Processing line: ~ new_w,~ ** Processing line: ~ new_h,~ ** Processing line: ~ *rect[4..-1]~ ** Processing line: ~ ]~ ** Processing line: ~ elsif rect.is_a? Hash~ ** Processing line: ~ return rect.merge(x: new_x, y: new_y, w: new_w, h: new_h)~ ** Processing line: ~ else~ ** Processing line: ~ rect.x = new_x~ ** Processing line: ~ rect.y = new_y~ ** Processing line: ~ rect.w = new_w~ ** Processing line: ~ rect.h = new_h~ ** Processing line: ~ return rect~ ** Processing line: ~ end~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise e, ":scale_rect_extended failed for rect: #{rect} percentage_x: #{percentage_x} percentage_y: #{percentage_y} anchors_x: #{anchor_x} anchor_y: #{anchor_y}.\n#{e}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.scale_rect rect, percentage, *anchors~ ** Processing line: ~ anchor_x, anchor_y = *anchors.flatten~ ** Processing line: ~ anchor_x ||= 0~ ** Processing line: ~ anchor_y ||= anchor_x~ ** Processing line: ~ Geometry.scale_rect_extended rect,~ ** Processing line: ~ percentage_x: percentage,~ ** Processing line: ~ percentage_y: percentage,~ ** Processing line: ~ anchor_x: anchor_x,~ ** Processing line: ~ anchor_y: anchor_y~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise e, ":scale_rect failed for rect: #{rect} percentage: #{percentage} anchors [#{anchor_x} (x), #{anchor_y} (y)].\n#{e}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.rect_to_line rect~ ** Processing line: ~ l = rect.to_hash.line~ ** Processing line: ~ l.merge(x2: l.x + l.w - 1,~ ** Processing line: ~ y2: l.y + l.h)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.rect_center_point rect~ ** Processing line: ~ { x: rect.x + rect.w.half, y: rect.y + rect.h.half }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rect_center_point~ ** Processing line: ~ Geometry.rect_center_point self~ ** Processing line: ~ end~ ** Processing line: ~ end # module Geometry~ ** Processing line: ~ end # module GTK~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** grid.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~grid.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~grid.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/grid.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # grid.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Grid~ ** Processing line: ~ include Serialize~ ** Processing line: ~ SCREEN_Y_DIRECTION = -1.0~ ** Processing line: ~~ ** Processing line: ~ # The coordinate system currently in use.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Symbol] `:bottom_left` or `:center`~ ** Processing line: ~ attr_accessor :name~ ** Processing line: ~~ ** Processing line: ~ # Returns the "x" coordinate indicating the bottom of the screen.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ attr_accessor :bottom~ ** Processing line: ~~ ** Processing line: ~ # Returns the "x" coordinate indicating the top of the screen.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ attr_accessor :top~ ** Processing line: ~~ ** Processing line: ~ # Returns the "y" coordinate indicating the left of the screen.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ attr_accessor :left~ ** Processing line: ~~ ** Processing line: ~ # Returns the "y" coordinate indicating the right of the screen.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ attr_accessor :right~ ** Processing line: ~~ ** Processing line: ~ # Returns the "x" coordinate indicating the center of the screen.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ attr_accessor :center_x~ ** Processing line: ~~ ** Processing line: ~ # Returns the "y" coordinate indicating the center of the screen.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ attr_accessor :center_y~ ** Processing line: ~~ ** Processing line: ~ # Returns the bottom left and top right coordinates in a single list.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [[Float, Float, Float, Float]]~ ** Processing line: ~ attr_accessor :rect~ ** Processing line: ~~ ** Processing line: ~ # Returns the "x" coordinate of the origin.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ attr_accessor :origin_x~ ** Processing line: ~~ ** Processing line: ~ # Returns the "y" coordinate of the origin.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ attr_accessor :origin_y~ ** Processing line: ~~ ** Processing line: ~ attr_accessor :left_margin, :bottom_margin~ ** Processing line: ~~ ** Processing line: ~ def initialize runtime~ ** Processing line: ~ @runtime = runtime~ ** Processing line: ~ @ffi_draw = runtime.ffi_draw~ ** Processing line: ~ origin_bottom_left!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns `x` plus the origin "x".~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ def transform_x x~ ** Processing line: ~ @origin_x + x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns `x` minus the origin "x".~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ def untransform_x x~ ** Processing line: ~ x - @origin_x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns `y` plus the origin "y".~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ def transform_y y~ ** Processing line: ~ @origin_y + y * SCREEN_Y_DIRECTION~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns `y` minus the origin "y".~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ def untransform_y y~ ** Processing line: ~ @origin_y + y * SCREEN_Y_DIRECTION~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def ffi_draw~ ** Processing line: ~ @ffi_draw~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def ffi_draw= value~ ** Processing line: ~ @ffi_draw = value~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the rendering coordinate system to have its origin in the bottom left.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [void]~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def origin_bottom_left!~ ** Processing line: ~ return if @name == :bottom_left~ ** Processing line: ~ @name = :bottom_left~ ** Processing line: ~ @origin_x = 0.0~ ** Processing line: ~ @origin_y = @runtime.logical_height~ ** Processing line: ~ @left = 0.0~ ** Processing line: ~ @right = @runtime.logical_width~ ** Processing line: ~ @top = @runtime.logical_height~ ** Processing line: ~ @bottom = 0.0~ ** Processing line: ~ @left_margin = 0.0~ ** Processing line: ~ @bottom_margin = 0.0~ ** Processing line: ~ @center_x = @runtime.logical_width.half~ ** Processing line: ~ @center_y = @runtime.logical_height.half~ ** Processing line: ~ @rect = [@left, @bottom, @runtime.logical_width, @runtime.logical_height].rect~ ** Processing line: ~ @center = [@center_x, @center_y].point~ ** Processing line: ~ @ffi_draw.set_grid @origin_x, @origin_y, SCREEN_Y_DIRECTION~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Sets the rendering coordinate system to have its origin in the center.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [void]~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def origin_center!~ ** Processing line: ~ return if @name == :center~ ** Processing line: ~ @name = :center~ ** Processing line: ~ @origin_x = @runtime.logical_width.half~ ** Processing line: ~ @origin_y = @runtime.logical_height.half~ ** Processing line: ~ @left = -@runtime.logical_width.half~ ** Processing line: ~ @right = @runtime.logical_width.half~ ** Processing line: ~ @top = @runtime.logical_height.half~ ** Processing line: ~ @bottom = -@runtime.logical_height.half~ ** Processing line: ~ @center_x = 0.0~ ** Processing line: ~ @center_y = 0.0~ ** Processing line: ~ @rect = [@left, @bottom, @runtime.logical_width, @runtime.logical_height].rect~ ** Processing line: ~ @center = [@center_x, @center_y].point~ ** Processing line: ~ @ffi_draw.set_grid @origin_x, @origin_y, SCREEN_Y_DIRECTION~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The logical width used for rendering.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ def w~ ** Processing line: ~ @runtime.logical_width~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Half the logical width used for rendering.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ def w_half~ ** Processing line: ~ w.half~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The logical height used for rendering.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ def h~ ** Processing line: ~ @runtime.logical_height~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Half the logical height used for rendering.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float]~ ** Processing line: ~ def h_half~ ** Processing line: ~ h.half~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns the coordinates indicating the center of the screen.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [[Float, Float]]~ ** Processing line: ~ def center~ ** Processing line: ~ @center~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns the coordinates indicating the bottom right of the screen.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [[Float, Float]]~ ** Processing line: ~ def bottom_right~ ** Processing line: ~ [@right, @bottom].point~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def x~ ** Processing line: ~ 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def y~ ** Processing line: ~ 0~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** inputs.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~inputs.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~inputs.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/inputs.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # inputs.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ # Represents all the keys available on the keyboard.~ ** Processing line: ~ # @gtk~ ** Processing line: ~ class KeyboardKeys~ ** Processing line: ~ include Serialize~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_accessor :exclamation_point,~ ** Processing line: ~ :zero, :one, :two, :three, :four,~ ** Processing line: ~ :five, :six, :seven, :eight, :nine,~ ** Processing line: ~ :backspace, :delete, :escape, :enter, :tab,~ ** Processing line: ~ :open_round_brace, :close_round_brace,~ ** Processing line: ~ :open_curly_brace, :close_curly_brace,~ ** Processing line: ~ :open_square_brace, :close_square_brace,~ ** Processing line: ~ :colon, :semicolon, :equal_sign,~ ** Processing line: ~ :hyphen, :space, :dollar_sign,~ ** Processing line: ~ :double_quotation_mark,~ ** Processing line: ~ :single_quotation_mark,~ ** Processing line: ~ :backtick,~ ** Processing line: ~ :tilde, :period, :comma, :pipe,~ ** Processing line: ~ :underscore,~ ** Processing line: ~ :a, :b, :c, :d, :e, :f, :g, :h,~ ** Processing line: ~ :i, :j, :k, :l, :m, :n, :o, :p,~ ** Processing line: ~ :q, :r, :s, :t, :u, :v, :w, :x,~ ** Processing line: ~ :y, :z,~ ** Processing line: ~ :shift, :control, :alt, :meta,~ ** Processing line: ~ :shift_left, :shift_right,~ ** Processing line: ~ :control_left, :control_right,~ ** Processing line: ~ :alt_left, :alt_right,~ ** Processing line: ~ :meta_left, :meta_right,~ ** Processing line: ~ :home, :end,~ ** Processing line: ~ :left, :right, :up, :down, :pageup, :pagedown,~ ** Processing line: ~ :char, :plus, :at, :forward_slash, :back_slash, :asterisk,~ ** Processing line: ~ :less_than, :greater_than, :carat, :ampersand, :superscript_two,~ ** Processing line: ~ :circumflex,~ ** Processing line: ~ :question_mark, :section_sign, :ordinal_indicator,~ ** Processing line: ~ :raw_key~ ** Processing line: ~~ ** Processing line: ~ def self.sdl_to_key raw_key, modifier~ ** Processing line: ~ return nil unless (raw_key >= 0 && raw_key <= 255) ||~ ** Processing line: ~ raw_key == 1073741903 ||~ ** Processing line: ~ raw_key == 1073741904 ||~ ** Processing line: ~ raw_key == 1073741905 ||~ ** Processing line: ~ raw_key == 1073741906 ||~ ** Processing line: ~ raw_key == 1073741899 ||~ ** Processing line: ~ raw_key == 1073741902 ||~ ** Processing line: ~ raw_key == 1073741898 ||~ ** Processing line: ~ raw_key == 1073741901 ||~ ** Processing line: ~ (raw_key >= 1073742048 && raw_key <= 1073742055) # Modifier Keys~ ** Processing line: ~~ ** Processing line: ~ char = KeyboardKeys.char_with_shift raw_key, modifier~ ** Processing line: ~ names = KeyboardKeys.char_to_method char, raw_key~ ** Processing line: ~ names << :alt if (modifier & (256|512)) != 0 # alt key~ ** Processing line: ~ names << :meta if (modifier & (1024|2048)) != 0 # meta key (command/apple/windows key)~ ** Processing line: ~ names << :control if (modifier & (64|128)) != 0 # ctrl key~ ** Processing line: ~ names << :shift if (modifier & (1|2)) != 0 # shift key~ ** Processing line: ~ names~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.utf_8_char raw_key~ ** Processing line: ~ return "²" if raw_key == 178~ ** Processing line: ~ return "§" if raw_key == 167~ ** Processing line: ~ return "º" if raw_key == 186~ ** Processing line: ~ return raw_key.chr~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.char_with_shift raw_key, modifier~ ** Processing line: ~ return nil unless raw_key >= 0 && raw_key <= 255~ ** Processing line: ~ if modifier != 1 && modifier != 2 && modifier != 3~ ** Processing line: ~ return utf_8_char raw_key~ ** Processing line: ~ else~ ** Processing line: ~ @shift_keys ||= {~ ** Processing line: ~ '`' => '~', '-' => '_', "'" => '"', "1" => '!',~ ** Processing line: ~ "2" => '@', "3" => '#', "4" => '$', "5" => '%',~ ** Processing line: ~ "6" => '^', "7" => '&', "8" => '*', "9" => '(',~ ** Processing line: ~ "0" => ')', ";" => ":", "=" => "+", "[" => "{",~ ** Processing line: ~ "]" => "}", '\\'=> "|", '/' => "?", '.' => ">",~ ** Processing line: ~ ',' => "<", 'a' => 'A', 'b' => 'B', 'c' => 'C',~ ** Processing line: ~ 'd' => 'D', 'e' => 'E', 'f' => 'F', 'g' => 'G',~ ** Processing line: ~ 'h' => 'H', 'i' => 'I', 'j' => 'J', 'k' => 'K',~ ** Processing line: ~ 'l' => 'L', 'm' => 'M', 'n' => 'N', 'o' => 'O',~ ** Processing line: ~ 'p' => 'P', 'q' => 'Q', 'r' => 'R', 's' => 'S',~ ** Processing line: ~ 't' => 'T', 'u' => 'U', 'v' => 'V', 'w' => 'W',~ ** Processing line: ~ 'x' => 'X', 'y' => 'Y', 'z' => 'Z'~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ @shift_keys[raw_key.chr.to_s] || raw_key.chr.to_s~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.char_to_method_hash~ ** Processing line: ~ @char_to_method ||= {~ ** Processing line: ~ 'A' => [:a],~ ** Processing line: ~ 'B' => [:b],~ ** Processing line: ~ 'C' => [:c],~ ** Processing line: ~ 'D' => [:d],~ ** Processing line: ~ 'E' => [:e],~ ** Processing line: ~ 'F' => [:f],~ ** Processing line: ~ 'G' => [:g],~ ** Processing line: ~ 'H' => [:h],~ ** Processing line: ~ 'I' => [:i],~ ** Processing line: ~ 'J' => [:j],~ ** Processing line: ~ 'K' => [:k],~ ** Processing line: ~ 'L' => [:l],~ ** Processing line: ~ 'M' => [:m],~ ** Processing line: ~ 'N' => [:n],~ ** Processing line: ~ 'O' => [:o],~ ** Processing line: ~ 'P' => [:p],~ ** Processing line: ~ 'Q' => [:q],~ ** Processing line: ~ 'R' => [:r],~ ** Processing line: ~ 'S' => [:s],~ ** Processing line: ~ 'T' => [:t],~ ** Processing line: ~ 'U' => [:u],~ ** Processing line: ~ 'V' => [:v],~ ** Processing line: ~ 'W' => [:w],~ ** Processing line: ~ 'X' => [:x],~ ** Processing line: ~ 'Y' => [:y],~ ** Processing line: ~ 'Z' => [:z],~ ** Processing line: ~ "!" => [:exclamation_point],~ ** Processing line: ~ "0" => [:zero],~ ** Processing line: ~ "1" => [:one],~ ** Processing line: ~ "2" => [:two],~ ** Processing line: ~ "3" => [:three],~ ** Processing line: ~ "4" => [:four],~ ** Processing line: ~ "5" => [:five],~ ** Processing line: ~ "6" => [:six],~ ** Processing line: ~ "7" => [:seven],~ ** Processing line: ~ "8" => [:eight],~ ** Processing line: ~ "9" => [:nine],~ ** Processing line: ~ "\b" => [:backspace],~ ** Processing line: ~ "\e" => [:escape],~ ** Processing line: ~ "\r" => [:enter],~ ** Processing line: ~ "\t" => [:tab],~ ** Processing line: ~ "(" => [:open_round_brace],~ ** Processing line: ~ ")" => [:close_round_brace],~ ** Processing line: ~ "{" => [:open_curly_brace],~ ** Processing line: ~ "}" => [:close_curly_brace],~ ** Processing line: ~ "[" => [:open_square_brace],~ ** Processing line: ~ "]" => [:close_square_brace],~ ** Processing line: ~ ":" => [:colon],~ ** Processing line: ~ ";" => [:semicolon],~ ** Processing line: ~ "=" => [:equal_sign],~ ** Processing line: ~ "-" => [:hyphen],~ ** Processing line: ~ " " => [:space],~ ** Processing line: ~ "$" => [:dollar_sign],~ ** Processing line: ~ "\"" => [:double_quotation_mark],~ ** Processing line: ~ "'" => [:single_quotation_mark],~ ** Processing line: ~ "`" => [:backtick],~ ** Processing line: ~ "~" => [:tilde],~ ** Processing line: ~ "." => [:period],~ ** Processing line: ~ "," => [:comma],~ ** Processing line: ~ "|" => [:pipe],~ ** Processing line: ~ "_" => [:underscore],~ ** Processing line: ~ "#" => [:hash],~ ** Processing line: ~ "+" => [:plus],~ ** Processing line: ~ "@" => [:at],~ ** Processing line: ~ "/" => [:forward_slash],~ ** Processing line: ~ "\\" => [:back_slash],~ ** Processing line: ~ "*" => [:asterisk],~ ** Processing line: ~ "<" => [:less_than],~ ** Processing line: ~ ">" => [:greater_than],~ ** Processing line: ~ "^" => [:circumflex],~ ** Processing line: ~ "&" => [:ampersand],~ ** Processing line: ~ "²" => [:superscript_two],~ ** Processing line: ~ "§" => [:section_sign],~ ** Processing line: ~ "?" => [:question_mark],~ ** Processing line: ~ '%' => [:percent_sign],~ ** Processing line: ~ "º" => [:ordinal_indicator],~ ** Processing line: ~ 1073741898 => [:home],~ ** Processing line: ~ 1073741901 => [:end],~ ** Processing line: ~ 1073741903 => [:right],~ ** Processing line: ~ 1073741904 => [:left],~ ** Processing line: ~ 1073741905 => [:down],~ ** Processing line: ~ 1073741906 => [:up],~ ** Processing line: ~ 1073741899 => [:pageup],~ ** Processing line: ~ 1073741902 => [:pagedown],~ ** Processing line: ~ 127 => [:delete],~ ** Processing line: ~ 1073742049 => [:shift_left, :shift],~ ** Processing line: ~ 1073742053 => [:shift_right, :shift],~ ** Processing line: ~ 1073742048 => [:control_left, :control],~ ** Processing line: ~ 1073742052 => [:control_right, :control],~ ** Processing line: ~ 1073742050 => [:alt_left, :alt],~ ** Processing line: ~ 1073742054 => [:alt_right, :alt],~ ** Processing line: ~ 1073742051 => [:meta_left, :meta],~ ** Processing line: ~ 1073742055 => [:meta_right, :meta]~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.method_to_key_hash~ ** Processing line: ~ return @method_to_key_hash if @method_to_key_hash~ ** Processing line: ~ @method_to_key_hash = {}~ ** Processing line: ~ string_representation_overrides ||= {~ ** Processing line: ~ backspace: '\b'~ ** Processing line: ~ }~ ** Processing line: ~ char_to_method_hash.each do |k, v|~ ** Processing line: ~ v.each do |vi|~ ** Processing line: ~ t = { char_or_raw_key: k }~ ** Processing line: ~~ ** Processing line: ~ if k.is_a? Numeric~ ** Processing line: ~ t[:raw_key] = k~ ** Processing line: ~ t[:string_representation] = "raw_key == #{k}"~ ** Processing line: ~ else~ ** Processing line: ~ t[:char] = k~ ** Processing line: ~ t[:string_representation] = "\"#{k.strip}\""~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @method_to_key_hash[vi] = t~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ @method_to_key_hash~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.char_to_method char, int = nil~ ** Processing line: ~ methods = char_to_method_hash[char] || char_to_method_hash[int]~ ** Processing line: ~ methods ? methods.dup : [char.to_sym || int]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def clear~ ** Processing line: ~ set truthy_keys, false~ ** Processing line: ~ @scrubbed_ivars = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def left_right~ ** Processing line: ~ return -1 if self.left~ ** Processing line: ~ return 1 if self.right~ ** Processing line: ~ return 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def up_down~ ** Processing line: ~ return 1 if self.up~ ** Processing line: ~ return -1 if self.down~ ** Processing line: ~ return 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def truthy_keys~ ** Processing line: ~ get(all).find_all { |_, v| v }~ ** Processing line: ~ .map { |k, _| k.to_sym }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def all? keys~ ** Processing line: ~ values = get(keys.map { |k| k.without_ending_bang })~ ** Processing line: ~ all_true = values.all? do |k, v|~ ** Processing line: ~ v~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if all_true~ ** Processing line: ~ keys.each do |k|~ ** Processing line: ~ clear_key k if k.end_with_bang?~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ all_true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def any? keys~ ** Processing line: ~ values = get(keys.map { |k| k.without_ending_bang })~ ** Processing line: ~ any_true = values.any? do |k, v|~ ** Processing line: ~ v~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if any_true~ ** Processing line: ~ keys.each do |k|~ ** Processing line: ~ clear_key k if k.end_with_bang?~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ any_true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def clear_key key~ ** Processing line: ~ @scrubbed_ivars = nil~ ** Processing line: ~ self.instance_variable_set("@#{key.without_ending_bang}", false)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def all~ ** Processing line: ~ @scrubbed_ivars ||= self.instance_variables~ ** Processing line: ~ .reject { |i| i == :@all || i == :@scrubbed_ivars }~ ** Processing line: ~ .map { |i| i.to_s.gsub("@", "") }~ ** Processing line: ~~ ** Processing line: ~ get(@scrubbed_ivars).map { |k, _| k }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def get collection~ ** Processing line: ~ return [] if collection.length == 0~ ** Processing line: ~ collection.map do |m|~ ** Processing line: ~ if m.end_with_bang?~ ** Processing line: ~ clear_after_return = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ value = self.instance_variable_get("@#{m.without_ending_bang}".to_sym)~ ** Processing line: ~ clear_key m if clear_after_return~ ** Processing line: ~ [m.without_ending_bang, value]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def set collection, value = true~ ** Processing line: ~ return if collection.length == 0~ ** Processing line: ~ @scrubbed_ivars = nil~ ** Processing line: ~ value = Kernel.tick_count if value~ ** Processing line: ~~ ** Processing line: ~ collection.each do |m|~ ** Processing line: ~ m_to_s = m.to_s~ ** Processing line: ~ self.instance_variable_set("@#{m_to_s}".to_sym, value) if m_to_s.strip.length > 0~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise e, <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ Attempted to set the a key on the DragonRuby GTK's Keyboard data~ ** Processing line: ~ structure, but the property isn't available for raw_key #{raw_key} #{m}.~ ** Processing line: ~~ ** Processing line: ~ You should contact DragonRuby and tell them to associate the raw_key #{raw_key}~ ** Processing line: ~ with a friendly property name (we are open to suggestions if you have any).~ ** Processing line: ~ [GTK::KeyboardKeys#set, GTK::KeyboardKeys#char_to_method]~ ** Processing line: ~~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def method_missing m, *args~ ** Processing line: ~ if KeyboardKeys.method_to_key_hash[m.without_ending_bang]~ ** Processing line: ~ begin~ ** Processing line: ~ define_singleton_method(m) do~ ** Processing line: ~ r = self.instance_variable_get("@#{m.without_ending_bang}".to_sym)~ ** Processing line: ~ clear_key m~ ** Processing line: ~ return r~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return self.send m~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ log_important "#{e}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ did_you_mean = KeyboardKeys.method_to_key_hash.find_all do |k, v|~ ** Processing line: ~ k.to_s[0..1] == m.to_s[0..1]~ ** Processing line: ~ end.map {|k, v| ":#{k} (#{v[:string_representation]})" }~ ** Processing line: ~ did_you_mean_string = ""~ ** Processing line: ~ did_you_mean_string = ". Did you mean #{did_you_mean.join ", "}?"~ ** Processing line: ~~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ #{KeyboardKeys.method_to_key_hash.map { |k, v| "** :#{k} #{v.string_representation}" }.join("\n")}~ ** Processing line: ~~ ** Processing line: ~ There is no key on the keyboard called :#{m}#{did_you_mean_string}.~ ** Processing line: ~ Full list of available keys =:points_up:=.~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ hash = super~ ** Processing line: ~ hash.delete(:scrubbed_ivars)~ ** Processing line: ~ hash[:truthy_keys] = self.truthy_keys~ ** Processing line: ~ hash~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ # @gtk~ ** Processing line: ~ class Keyboard~ ** Processing line: ~~ ** Processing line: ~ # @return [KeyboardKeys]~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_accessor :key_up~ ** Processing line: ~~ ** Processing line: ~ # @return [KeyboardKeys]~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_accessor :key_held~ ** Processing line: ~~ ** Processing line: ~ # @return [KeyboardKeys]~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_accessor :key_down~ ** Processing line: ~~ ** Processing line: ~ # @return [Boolean]~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_accessor :has_focus~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @key_up = KeyboardKeys.new~ ** Processing line: ~ @key_held = KeyboardKeys.new~ ** Processing line: ~ @key_down = KeyboardKeys.new~ ** Processing line: ~ @has_focus = false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def p~ ** Processing line: ~ @key_down.p || @key_held.p~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The left arrow or "a" was pressed.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Boolean]~ ** Processing line: ~ def left~ ** Processing line: ~ @key_up.left || @key_held.left || a~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The right arrow or "d" was pressed.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Boolean]~ ** Processing line: ~ def right~ ** Processing line: ~ @key_up.right || @key_held.right || d~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The up arrow or "w" was pressed.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Boolean]~ ** Processing line: ~ def up~ ** Processing line: ~ @key_up.up || @key_held.up || w~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The down arrow or "s" was pressed.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Boolean]~ ** Processing line: ~ def down~ ** Processing line: ~ @key_up.down || @key_held.down || s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Clear all current key presses.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [void]~ ** Processing line: ~ def clear~ ** Processing line: ~ @key_up.clear~ ** Processing line: ~ @key_held.clear~ ** Processing line: ~ @key_down.clear~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ {~ ** Processing line: ~ key_up: @key_up.serialize,~ ** Processing line: ~ key_held: @key_held.serialize,~ ** Processing line: ~ key_down: @key_down.serialize,~ ** Processing line: ~ has_focus: @has_focus~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ alias_method :inspect, :serialize~ ** Processing line: ~~ ** Processing line: ~ # @return [String]~ ** Processing line: ~ def to_s~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def key~ ** Processing line: ~ {~ ** Processing line: ~ down: @key_down.truthy_keys,~ ** Processing line: ~ held: @key_held.truthy_keys,~ ** Processing line: ~ down_or_held: (@key_down.truthy_keys + @key_held.truthy_keys).uniq,~ ** Processing line: ~ up: @key_up.truthy_keys,~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ alias_method :keys, :key~ ** Processing line: ~~ ** Processing line: ~ include DirectionalInputHelperMethods~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class MousePoint~ ** Processing line: ~ include GTK::Geometry~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_accessor :x, :y, :point, :created_at, :global_created_at~ ** Processing line: ~~ ** Processing line: ~ def initialize x, y~ ** Processing line: ~ @x = x~ ** Processing line: ~ @y = y~ ** Processing line: ~ @point = [x, y]~ ** Processing line: ~ @created_at = Kernel.tick_count~ ** Processing line: ~ @global_created_at = Kernel.global_tick_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def w; 0; end~ ** Processing line: ~ def h; 0; end~ ** Processing line: ~ def left; x; end~ ** Processing line: ~ def right; x; end~ ** Processing line: ~ def top; y; end~ ** Processing line: ~ def bottom; y; end~ ** Processing line: ~~ ** Processing line: ~ def created_at_elapsed~ ** Processing line: ~ @created_at.elapsed_time~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_hash~ ** Processing line: ~ serialize~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ {~ ** Processing line: ~ x: @x,~ ** Processing line: ~ y: @y,~ ** Processing line: ~ created_at: @created_at,~ ** Processing line: ~ global_created_at: @global_created_at~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inspect~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Provides access to the mouse.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ class Mouse~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_accessor :moved,~ ** Processing line: ~ :moved_at,~ ** Processing line: ~ :global_moved_at,~ ** Processing line: ~ :up, :has_focus,~ ** Processing line: ~ :button_bits, :button_left,~ ** Processing line: ~ :button_middle, :button_right,~ ** Processing line: ~ :button_x1, :button_x2,~ ** Processing line: ~ :wheel~ ** Processing line: ~~ ** Processing line: ~ attr_accessor :click~ ** Processing line: ~ attr_accessor :previous_click~ ** Processing line: ~ attr_accessor :x~ ** Processing line: ~ attr_accessor :y~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @x = 0~ ** Processing line: ~ @y = 0~ ** Processing line: ~ @has_focus = false~ ** Processing line: ~ @button_bits = 0~ ** Processing line: ~ @button_left = false~ ** Processing line: ~ @button_middle = false~ ** Processing line: ~ @button_right = false~ ** Processing line: ~ @button_x1 = false~ ** Processing line: ~ @button_x2 = false~ ** Processing line: ~ clear~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def point~ ** Processing line: ~ [@x, @y].point~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inside_rect? rect~ ** Processing line: ~ point.inside_rect? rect~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inside_circle? center, radius~ ** Processing line: ~ point.point_inside_circle? center, radius~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def intersect_rect? other_rect~ ** Processing line: ~ { x: point.x, y: point.y, w: 0, h: 0 }.intersect_rect? other_rect~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ alias_method :position, :point~ ** Processing line: ~~ ** Processing line: ~ def clear~ ** Processing line: ~ if @click~ ** Processing line: ~ @previous_click = MousePoint.new @click.point.x, @click.point.y~ ** Processing line: ~ @previous_click.created_at = @click.created_at~ ** Processing line: ~ @previous_click.global_created_at = @click.global_created_at~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @click = nil~ ** Processing line: ~ @up = nil~ ** Processing line: ~ @moved = nil~ ** Processing line: ~ @wheel = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def up~ ** Processing line: ~ @up~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def down~ ** Processing line: ~ @click~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ result = {}~ ** Processing line: ~~ ** Processing line: ~ if @click~ ** Processing line: ~ result[:click] = @click.to_hash~ ** Processing line: ~ result[:down] = @click.to_hash~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ result[:up] = @up.to_hash if @up~ ** Processing line: ~ result[:x] = @x~ ** Processing line: ~ result[:y] = @y~ ** Processing line: ~ result[:moved] = @moved~ ** Processing line: ~ result[:moved_at] = @moved_at~ ** Processing line: ~ result[:has_focus] = @has_focus~ ** Processing line: ~~ ** Processing line: ~ result~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ alias_method :inspect, :to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Provides access to multitouch input~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ class FingerTouch~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_accessor :moved,~ ** Processing line: ~ :moved_at,~ ** Processing line: ~ :global_moved_at,~ ** Processing line: ~ :down_at,~ ** Processing line: ~ :global_down_at,~ ** Processing line: ~ :touch_order,~ ** Processing line: ~ :first_tick_down,~ ** Processing line: ~ :x, :y~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @moved = false~ ** Processing line: ~ @moved_at = 0~ ** Processing line: ~ @global_moved_at = 0~ ** Processing line: ~ @down_at = 0~ ** Processing line: ~ @global_down_at = 0~ ** Processing line: ~ @touch_order = 0~ ** Processing line: ~ @first_tick_down = true~ ** Processing line: ~ @x = 0~ ** Processing line: ~ @y = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def point~ ** Processing line: ~ [@x, @y].point~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inside_rect? rect~ ** Processing line: ~ point.inside_rect? rect~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inside_circle? center, radius~ ** Processing line: ~ point.point_inside_circle? center, radius~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ alias_method :position, :point~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ result = {}~ ** Processing line: ~ result[:x] = @x~ ** Processing line: ~ result[:y] = @y~ ** Processing line: ~ result[:touch_order] = @touch_order~ ** Processing line: ~ result[:moved] = @moved~ ** Processing line: ~ result[:moved_at] = @moved_at~ ** Processing line: ~ result[:global_moved_at] = @global_moved_at~ ** Processing line: ~ result[:down_at] = @down_at~ ** Processing line: ~ result[:global_down_at] = @global_down_at~ ** Processing line: ~~ ** Processing line: ~ result~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ alias_method :inspect, :to_s~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ # @gtk~ ** Processing line: ~ class Inputs~ ** Processing line: ~~ ** Processing line: ~ # A list of all controllers.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Controller[]]~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_reader :controllers~ ** Processing line: ~~ ** Processing line: ~ # @return [Keyboard]~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_reader :keyboard~ ** Processing line: ~~ ** Processing line: ~ # @return [Mouse]~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_reader :mouse~ ** Processing line: ~~ ** Processing line: ~ # @return [HTTPRequest[]]~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_accessor :http_requests~ ** Processing line: ~~ ** Processing line: ~ # @return {FingerTouch}~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_reader :touch~ ** Processing line: ~ attr_accessor :finger_one, :finger_two~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ attr_accessor :text, :history~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @controllers = [Controller.new, Controller.new]~ ** Processing line: ~ @keyboard = Keyboard.new~ ** Processing line: ~ @mouse = Mouse.new~ ** Processing line: ~ @touch = {}~ ** Processing line: ~ @finger_one = nil~ ** Processing line: ~ @finger_two = nil~ ** Processing line: ~ @text = []~ ** Processing line: ~ @http_requests = []~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def up~ ** Processing line: ~ keyboard.up ||~ ** Processing line: ~ (controller_one && controller_one.up)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def down~ ** Processing line: ~ keyboard.down ||~ ** Processing line: ~ (controller_one && controller_one.down)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def left~ ** Processing line: ~ keyboard.left ||~ ** Processing line: ~ (controller_one && controller_one.left)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def right~ ** Processing line: ~ keyboard.right ||~ ** Processing line: ~ (controller_one && controller_one.right)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def directional_vector~ ** Processing line: ~ keyboard.directional_vector ||~ ** Processing line: ~ (controller_one && controller_one.directional_vector)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def directional_angle~ ** Processing line: ~ keyboard.directional_angle || (controller_one && controller_one.directional_angle)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a signal indicating right (`1`), left (`-1`), or neither ('0').~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Integer]~ ** Processing line: ~ def left_right~ ** Processing line: ~ return -1 if self.left~ ** Processing line: ~ return 1 if self.right~ ** Processing line: ~ return 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a signal indicating up (`1`), down (`-1`), or neither ('0').~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Integer]~ ** Processing line: ~ def up_down~ ** Processing line: ~ return 1 if self.up~ ** Processing line: ~ return -1 if self.down~ ** Processing line: ~ return 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns the coordinates of the last click.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Float, Float]~ ** Processing line: ~ def click~ ** Processing line: ~ return nil unless @mouse.click~ ** Processing line: ~ return @mouse.click.point~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The first controller.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Controller]~ ** Processing line: ~ def controller_one~ ** Processing line: ~ @controllers[0]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # The second controller.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [Controller]~ ** Processing line: ~ def controller_two~ ** Processing line: ~ @controllers[1]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Clears all inputs.~ ** Processing line: ~ #~ ** Processing line: ~ # @return [void]~ ** Processing line: ~ def clear~ ** Processing line: ~ @mouse.clear~ ** Processing line: ~ @keyboard.clear~ ** Processing line: ~ @controllers.each(&:clear)~ ** Processing line: ~ @touch.clear~ ** Processing line: ~ @http_requests.clear~ ** Processing line: ~ @finger_one = nil~ ** Processing line: ~ @finger_two = nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @return [Hash]~ ** Processing line: ~ def serialize~ ** Processing line: ~ {~ ** Processing line: ~ controller_one: controller_one.serialize,~ ** Processing line: ~ controller_two: controller_two.serialize,~ ** Processing line: ~ keyboard: keyboard.serialize,~ ** Processing line: ~ mouse: mouse.serialize,~ ** Processing line: ~ text: text.serialize~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** ios_wizard.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~ios_wizard.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~ios_wizard.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/ios_wizard.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # ios_wizard.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright: Michał Dudziński~ ** Processing line: ~~ ** Processing line: ~ class IOSWizard < Wizard~ ** Processing line: ~ def initialize~ ** Processing line: ~ @doctor_executed_at = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def relative_path~ ** Processing line: ~ (File.dirname $gtk.binary_path)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def steps~ ** Processing line: ~ @steps ||= []~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def prerequisite_steps~ ** Processing line: ~ [~ ** Processing line: ~ :check_for_xcode,~ ** Processing line: ~ :check_for_brew,~ ** Processing line: ~ :check_for_certs,~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def app_metadata_retrieval_steps~ ** Processing line: ~ [~ ** Processing line: ~ :determine_team_identifier,~ ** Processing line: ~ :determine_app_name,~ ** Processing line: ~ :determine_app_id,~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def steps_development_build~ ** Processing line: ~ [~ ** Processing line: ~ *prerequisite_steps,~ ** Processing line: ~~ ** Processing line: ~ :check_for_device,~ ** Processing line: ~ :check_for_dev_profile,~ ** Processing line: ~~ ** Processing line: ~ *app_metadata_retrieval_steps,~ ** Processing line: ~ :determine_devcert,~ ** Processing line: ~~ ** Processing line: ~ :clear_tmp_directory,~ ** Processing line: ~ :stage_app,~ ** Processing line: ~~ ** Processing line: ~ :development_write_info_plist,~ ** Processing line: ~~ ** Processing line: ~ :write_entitlements_plist,~ ** Processing line: ~ :compile_icons,~ ** Processing line: ~ :clear_payload_directory,~ ** Processing line: ~~ ** Processing line: ~ :create_payload_directory_dev,~ ** Processing line: ~~ ** Processing line: ~ :create_payload,~ ** Processing line: ~ :code_sign_payload,~ ** Processing line: ~~ ** Processing line: ~ :create_ipa,~ ** Processing line: ~ :deploy~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def steps_production_build~ ** Processing line: ~ [~ ** Processing line: ~ *prerequisite_steps,~ ** Processing line: ~~ ** Processing line: ~ :check_for_distribution_profile,~ ** Processing line: ~ :determine_app_version,~ ** Processing line: ~~ ** Processing line: ~ *app_metadata_retrieval_steps,~ ** Processing line: ~ :determine_prodcert,~ ** Processing line: ~~ ** Processing line: ~ :clear_tmp_directory,~ ** Processing line: ~ :stage_app,~ ** Processing line: ~~ ** Processing line: ~ :production_write_info_plist,~ ** Processing line: ~~ ** Processing line: ~ :write_entitlements_plist,~ ** Processing line: ~ :compile_icons,~ ** Processing line: ~ :clear_payload_directory,~ ** Processing line: ~~ ** Processing line: ~ :create_payload_directory_prod,~ ** Processing line: ~~ ** Processing line: ~ :create_payload,~ ** Processing line: ~ :code_sign_payload,~ ** Processing line: ~~ ** Processing line: ~ :create_ipa,~ ** Processing line: ~ :print_publish_help~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_reserved_sprite png~ ** Processing line: ~ sprite_path = ".dragonruby/sprites/wizards/ios/#{png}"~ ** Processing line: ~~ ** Processing line: ~ if !$gtk.ivar :rcb_release_mode~ ** Processing line: ~ sprite_path = "deploy_template/#{sprite_path}"~ ** Processing line: ~ $gtk.reset_sprite sprite_path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if !$gtk.read_file sprite_path~ ** Processing line: ~ log_error "png #{png} not found."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ sprite_path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def start opts = nil~ ** Processing line: ~ @opts = opts || {}~ ** Processing line: ~~ ** Processing line: ~ if !(@opts.is_a? Hash) || !($gtk.args.fn.eq_any? @opts[:env], :dev, :prod)~ ** Processing line: ~ raise WizardException.new(~ ** Processing line: ~ "* $wizards.ios.start needs to be provided an environment option.",~ ** Processing line: ~ "** For development builds type: $wizards.ios.start env: :dev",~ ** Processing line: ~ "** For production builds type: $wizards.ios.start env: :prod"~ ** Processing line: ~ )~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @production_build = (@opts[:env] == :prod)~ ** Processing line: ~ @steps = steps_development_build~ ** Processing line: ~ @steps = steps_production_build if @production_build~ ** Processing line: ~ @certificate_name = nil~ ** Processing line: ~ @app_version = opts[:version]~ ** Processing line: ~ @app_version = "1.0" if @opts[:env] == :dev && !@app_version~ ** Processing line: ~ init_wizard_status~ ** Processing line: ~ log_info "Starting iOS Wizard so we can deploy to your device."~ ** Processing line: ~ @start_at = Kernel.global_tick_count~ ** Processing line: ~ steps.each do |m|~ ** Processing line: ~ log_info "Running step ~:#{m}~."~ ** Processing line: ~ result = (send m) || :success if @wizard_status[m][:result] != :success~ ** Processing line: ~ @wizard_status[m][:result] = result~ ** Processing line: ~ log_info "Running step ~:#{m}~ complete."~ ** Processing line: ~ end~ ** Processing line: ~ nil~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ if e.is_a? WizardException~ ** Processing line: ~ $console.log.clear~ ** Processing line: ~ $console.archived_log.clear~ ** Processing line: ~ log "=" * $console.console_text_width~ ** Processing line: ~ e.console_primitives.each do |p|~ ** Processing line: ~ $console.add_primitive p~ ** Processing line: ~ end~ ** Processing line: ~ log "=" * $console.console_text_width~ ** Processing line: ~ else~ ** Processing line: ~ log_error e.to_s~ ** Processing line: ~ log e.__backtrace_to_org__~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ init_wizard_status~ ** Processing line: ~ $console.set_command "$wizards.ios.start env: :#{@opts[:env]}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def always_fail~ ** Processing line: ~ return false if $gtk.ivar :rcb_release_mode~ ** Processing line: ~ return true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def check_for_xcode~ ** Processing line: ~ if !cli_app_exist?(xcodebuild_cli_app)~ ** Processing line: ~ raise WizardException.new(~ ** Processing line: ~ "* You need Xcode to use $wizards.ios.start.",~ ** Processing line: ~ { w: 75, h: 75, path: get_reserved_sprite("xcode.png") },~ ** Processing line: ~ "** 1. Go to http://developer.apple.com and register.",~ ** Processing line: ~ "** 2. Download Xcode 11.3+ from http://developer.apple.com/downloads.",~ ** Processing line: ~ " NOTE: DO NOT install Xcode from the App Store. Use the link above.",~ ** Processing line: ~ { w: 700, h: 359, path: get_reserved_sprite("xcode-downloads.png") },~ ** Processing line: ~ "** 3. After installing. Open up Xcode to accept the EULA."~ ** Processing line: ~ )~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def check_for_brew~ ** Processing line: ~ if !cli_app_exist?('brew')~ ** Processing line: ~ raise WizardException.new(~ ** Processing line: ~ "* You need to install Brew.",~ ** Processing line: ~ { w: 700, h: 388, path: get_reserved_sprite("brew.png") },~ ** Processing line: ~ "** 1. Go to http://brew.sh.",~ ** Processing line: ~ "** 2. Copy the command that starts with `/bin/bash -c` on the site.",~ ** Processing line: ~ "** 3. Open Terminal and run the command you copied from the website.",~ ** Processing line: ~ { w: 700, h: 99, path: get_reserved_sprite("terminal.png") },~ ** Processing line: ~ )~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def init_wizard_status~ ** Processing line: ~ @wizard_status = {}~ ** Processing line: ~ steps.each do |m|~ ** Processing line: ~ @wizard_status[m] = { result: :not_started }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ previous_step = nil~ ** Processing line: ~ next_step = nil~ ** Processing line: ~ steps.each_cons(2) do |current_step, next_step|~ ** Processing line: ~ @wizard_status[current_step][:next_step] = next_step~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ steps.reverse.each_cons(2) do |current_step, previous_step|~ ** Processing line: ~ @wizard_status[current_step][:previous_step] = previous_step~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def restart~ ** Processing line: ~ init_wizard_status~ ** Processing line: ~ start~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def check_for_distribution_profile~ ** Processing line: ~ @provisioning_profile_path = "profiles/distribution.mobileprovision"~ ** Processing line: ~ if !($gtk.read_file @provisioning_profile_path)~ ** Processing line: ~ $gtk.system "mkdir -p #{relative_path}/profiles"~ ** Processing line: ~ $gtk.system "open #{relative_path}/profiles"~ ** Processing line: ~ $gtk.system "echo Download the mobile provisioning profile and place it here with the name distribution.mobileprovision > #{relative_path}/profiles/README.txt"~ ** Processing line: ~ raise WizardException.new(~ ** Processing line: ~ "* I didn't find a mobile provision.",~ ** Processing line: ~ "** 1. Go to http://developer.apple.com and click \"Certificates, IDs & Profiles\".",~ ** Processing line: ~ "** 2. Add an App Identifier.",~ ** Processing line: ~ "** 3. Select the App IDs option from the list.",~ ** Processing line: ~ { w: 700, h: 75, path: get_reserved_sprite("identifiers.png") },~ ** Processing line: ~ "** 4. Add your Device next. You can use idevice_id -l to get the UUID of your device.",~ ** Processing line: ~ { w: 365, h: 69, path: get_reserved_sprite("device-link.png") },~ ** Processing line: ~ "** 5. Create a Profile. Associate your certs, id, and device.",~ ** Processing line: ~ { w: 300, h: 122, path: get_reserved_sprite("profiles.png") },~ ** Processing line: ~ "** 6. Download the mobile provision and save it to 'profiles/development.mobileprovision'.",~ ** Processing line: ~ { w: 200, h: 124, path: get_reserved_sprite("profiles-folder.png") },~ ** Processing line: ~ )~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def check_for_dev_profile~ ** Processing line: ~ @provisioning_profile_path = "profiles/development.mobileprovision"~ ** Processing line: ~ if !($gtk.read_file @provisioning_profile_path)~ ** Processing line: ~ $gtk.system "mkdir -p #{relative_path}/profiles"~ ** Processing line: ~ $gtk.system "open #{relative_path}/profiles"~ ** Processing line: ~ $gtk.system "echo Download the mobile provisioning profile and place it here with the name development.mobileprovision > #{relative_path}/profiles/README.txt"~ ** Processing line: ~ raise WizardException.new(~ ** Processing line: ~ "* I didn't find a mobile provision.",~ ** Processing line: ~ "** 1. Go to http://developer.apple.com and click \"Certificates, IDs & Profiles\".",~ ** Processing line: ~ "** 2. Add an App Identifier.",~ ** Processing line: ~ "** 3. Select the App IDs option from the list.",~ ** Processing line: ~ { w: 700, h: 75, path: get_reserved_sprite("identifiers.png") },~ ** Processing line: ~ "** 4. Add your Device next. You can use idevice_id -l to get the UUID of your device.",~ ** Processing line: ~ { w: 365, h: 69, path: get_reserved_sprite("device-link.png") },~ ** Processing line: ~ "** 5. Create a Profile. Associate your certs, id, and device.",~ ** Processing line: ~ { w: 300, h: 122, path: get_reserved_sprite("profiles.png") },~ ** Processing line: ~ "** 6. Download the mobile provision and save it to 'profiles/development.mobileprovision'.",~ ** Processing line: ~ { w: 200, h: 124, path: get_reserved_sprite("profiles-folder.png") },~ ** Processing line: ~ )~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def provisioning_profile_path environment~ ** Processing line: ~ return "profiles/distribution.mobileprovision" if environment == :prod~ ** Processing line: ~ return "profiles/development.mobileprovision"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def ios_metadata_template~ ** Processing line: ~ <<-S~ ** Processing line: ~ # ios_metadata.txt is used by the Pro version of DragonRuby Game Toolkit to create iOS apps.~ ** Processing line: ~ # Information about the Pro version can be found at: http://dragonruby.org/toolkit/game#purchase~ ** Processing line: ~~ ** Processing line: ~ # teamid needs to be set to your assigned Team Id which can be found at https://developer.apple.com/account/#/membership/~ ** Processing line: ~ teamid=~ ** Processing line: ~ # appid needs to be set to your application identifier which can be found at https://developer.apple.com/account/resources/identifiers/list~ ** Processing line: ~ appid=~ ** Processing line: ~ # appname is the name you want to show up underneath the app icon on the device. Keep it under 10 characters.~ ** Processing line: ~ appname=~ ** Processing line: ~ # devcert is the certificate to use for development/deploying to your local device~ ** Processing line: ~ devcert=~ ** Processing line: ~ # prodcert is the certificate to use for distribution to the app store~ ** Processing line: ~ prodcert=~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def ios_metadata~ ** Processing line: ~ contents = $gtk.read_file 'metadata/ios_metadata.txt'~ ** Processing line: ~~ ** Processing line: ~ if !contents~ ** Processing line: ~ $gtk.write_file 'metadata/ios_metadata.txt', ios_metadata_template~ ** Processing line: ~ contents = $gtk.read_file 'metadata/ios_metadata.txt'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ kvps = contents.each_line~ ** Processing line: ~ .reject { |l| l.strip.length == 0 || (l.strip.start_with? "#") }~ ** Processing line: ~ .map do |l|~ ** Processing line: ~ key, value = l.split("=")~ ** Processing line: ~ [key.strip.to_sym, value.strip]~ ** Processing line: ~ end.flatten~ ** Processing line: ~ Hash[*kvps]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def game_metadata~ ** Processing line: ~ contents = $gtk.read_file 'metadata/game_metadata.txt'~ ** Processing line: ~~ ** Processing line: ~ kvps = contents.each_line~ ** Processing line: ~ .reject { |l| l.strip.length == 0 || (l.strip.start_with? "#") }~ ** Processing line: ~ .map do |l|~ ** Processing line: ~ key, value = l.split("=")~ ** Processing line: ~ [key.strip.to_sym, value.strip]~ ** Processing line: ~ end.flatten~ ** Processing line: ~ Hash[*kvps]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def raise_ios_metadata_required~ ** Processing line: ~ raise WizardException.new(~ ** Processing line: ~ "* mygame/metadata/ios_metadata.txt needs to be filled out.",~ ** Processing line: ~ "You need to update metadata/ios_metadata.txt with a valid teamid, appname, appid, devcert, and prodcert.",~ ** Processing line: ~ "Instructions for where the values should come from are within metadata/ios_metadata.txt."~ ** Processing line: ~ )~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def determine_team_identifier~ ** Processing line: ~ @team_id = (ios_metadata.teamid || "")~ ** Processing line: ~ raise_ios_metadata_required if @team_id.strip.length == 0~ ** Processing line: ~ log_info "Team Identifer is: #{@team_id}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def determine_app_name~ ** Processing line: ~ @app_name = (ios_metadata.appname || "")~ ** Processing line: ~ raise_ios_metadata_required if @app_name.strip.length == 0~ ** Processing line: ~ log_info "App name is: #{@app_name}."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def provisioning_profile_xml environment~ ** Processing line: ~ xml = $gtk.read_file (provisioning_profile_path environment)~ ** Processing line: ~ scrubbed = xml.each_line.map do |l|~ ** Processing line: ~ if l.strip.start_with? "<"~ ** Processing line: ~ if l.start_with? ''~ ** Processing line: ~ ''~ ** Processing line: ~ elsif l.include? "Apple Inc."~ ** Processing line: ~ nil~ ** Processing line: ~ elsif l.include? ''~ ** Processing line: ~ nil~ ** Processing line: ~ else~ ** Processing line: ~ l~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ nil~ ** Processing line: ~ end~ ** Processing line: ~ end.reject { |l| !l }.join~ ** Processing line: ~ $gtk.parse_xml scrubbed~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def determine_app_id~ ** Processing line: ~ @app_id = ios_metadata.appid~ ** Processing line: ~ raise_ios_metadata_required if @app_id.strip.length == 0~ ** Processing line: ~ log_info "App Identifier is set to: #{@app_id}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def determine_devcert~ ** Processing line: ~ @certificate_name = ios_metadata.devcert~ ** Processing line: ~ raise_ios_metadata_required if @certificate_name.strip.length == 0~ ** Processing line: ~ log_info "Dev Certificate is set to: #{@certificate_name}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def determine_prodcert~ ** Processing line: ~ @certificate_name = ios_metadata.prodcert~ ** Processing line: ~ raise_ios_metadata_required if @certificate_name.strip.length == 0~ ** Processing line: ~ log_info "Production (Distribution) Certificate is set to: #{@certificate_name}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_app_name name~ ** Processing line: ~ @app_name = name~ ** Processing line: ~ start~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_dev_profile path~ ** Processing line: ~ if !$gtk.read_file path~ ** Processing line: ~ log_error "I couldn't find a development profile at #{path}."~ ** Processing line: ~ ask_for_dev_profile~ ** Processing line: ~ else~ ** Processing line: ~ @provisioning_profile_path = path~ ** Processing line: ~ start~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def clear_tmp_directory~ ** Processing line: ~ sh "rm -rf #{tmp_directory}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_app_id id~ ** Processing line: ~ log_info = "App Id set to: #{id}"~ ** Processing line: ~ @app_id = id~ ** Processing line: ~ start~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def check_for_device~ ** Processing line: ~ log_info "Looking for device."~ ** Processing line: ~~ ** Processing line: ~ if !cli_app_exist?(idevice_id_cli_app)~ ** Processing line: ~ raise WizardException.new(~ ** Processing line: ~ "* It doesn't look like you have the libimobiledevice iOS protocol library installed.",~ ** Processing line: ~ "** 1. Open Terminal.",~ ** Processing line: ~ { w: 700, h: 99, path: get_reserved_sprite("terminal.png") },~ ** Processing line: ~ "** 2. Run: `brew install libimobiledevice`.",~ ** Processing line: ~ { w: 500, h: 93, path: get_reserved_sprite("brew-install-libimobiledevice.png") },~ ** Processing line: ~ )~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if connected_devices.length == 0~ ** Processing line: ~ raise WizardException.new("* I couldn't find any connected devices. Connect your iOS device to your Mac and try again.")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @device_id = connected_devices.first~ ** Processing line: ~ log_info "I will be using device with UUID #{@device_id}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def check_for_certs~ ** Processing line: ~ log_info "Attempting to find certificates on your computer."~ ** Processing line: ~~ ** Processing line: ~ if @production_build~ ** Processing line: ~ @certificate_name = ios_metadata[:prodcert]~ ** Processing line: ~ else~ ** Processing line: ~ @certificate_name = ios_metadata[:devcert]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ log_info "I will be using certificate: '#{@certificate_name}'."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def idevice_id_cli_app~ ** Processing line: ~ "idevice_id"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def security_cli_app~ ** Processing line: ~ "/usr/bin/security"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def xcodebuild_cli_app~ ** Processing line: ~ "xcodebuild"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def connected_devices~ ** Processing line: ~ sh("idevice_id -l").strip.each_line.map do |l|~ ** Processing line: ~ l.strip~ ** Processing line: ~ end.reject { |l| l.length == 0 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def cli_app_exist? app~ ** Processing line: ~ `which #{app}`.strip.length != 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def write_entitlements_plist~ ** Processing line: ~ if @production_build~ ** Processing line: ~ entitlement_plist_string = <<-XML~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ application-identifier~ ** Processing line: ~ :app_id~ ** Processing line: ~ beta-reports-active~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ XML~ ** Processing line: ~ else~ ** Processing line: ~ entitlement_plist_string = <<-XML~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ application-identifier~ ** Processing line: ~ :app_id~ ** Processing line: ~ get-task-allow~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ XML~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ log_info "Creating Entitlements.plist"~ ** Processing line: ~~ ** Processing line: ~ $gtk.write_file_root "tmp/ios/Entitlements.plist", entitlement_plist_string.gsub(":app_id", "#{@team_id}.#{@app_id}").strip~ ** Processing line: ~ $gtk.write_file_root "tmp/ios/Entitlements.txt", entitlement_plist_string.gsub(":app_id", "#{@team_id}.#{@app_id}").strip~ ** Processing line: ~~ ** Processing line: ~ sh "/usr/bin/plutil -convert binary1 \"#{tmp_directory}/Entitlements.plist\""~ ** Processing line: ~ sh "/usr/bin/plutil -convert xml1 \"#{tmp_directory}/Entitlements.plist\""~ ** Processing line: ~~ ** Processing line: ~ @entitlement_plist_written = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def code_sign_payload~ ** Processing line: ~ log_info "Signing app with #{@certificate_name}."~ ** Processing line: ~~ ** Processing line: ~ sh "CODESIGN_ALLOCATE=\"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate\" /usr/bin/codesign -f -s \"#{@certificate_name}\" --entitlements #{tmp_directory}/Entitlements.plist \"#{tmp_directory}/ipa_root/Payload/#{@app_name}.app\""~ ** Processing line: ~ sh "CODESIGN_ALLOCATE=\"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate\" /usr/bin/codesign -f -s \"#{@certificate_name}\" --entitlements #{tmp_directory}/Entitlements.plist \"#{tmp_directory}/ipa_root/Payload/#{@app_name}.app/Runtime\""~ ** Processing line: ~~ ** Processing line: ~ @code_sign_completed = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def write_info_plist_distribution~ ** Processing line: ~ log_info "Adding Info.plist."~ ** Processing line: ~~ ** Processing line: ~ <<-XML~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ BuildMachineOSBuild~ ** Processing line: ~ 20D91~ ** Processing line: ~ CFBundleDevelopmentRegion~ ** Processing line: ~ en~ ** Processing line: ~ CFBundleName~ ** Processing line: ~ :app_name~ ** Processing line: ~ CFBundleDisplayName~ ** Processing line: ~ A Dark Room~ ** Processing line: ~ CFBundleIdentifier~ ** Processing line: ~ :app_id~ ** Processing line: ~ CFBundleExecutable~ ** Processing line: ~ :app_name~ ** Processing line: ~ CFBundleInfoDictionaryVersion~ ** Processing line: ~ :app_version~ ** Processing line: ~ CFBundlePackageType~ ** Processing line: ~ APPL~ ** Processing line: ~ CFBundleShortVersionString~ ** Processing line: ~ :app_version~ ** Processing line: ~ CFBundleSignature~ ** Processing line: ~ ????~ ** Processing line: ~ CFBundleVersion~ ** Processing line: ~ :app_version~ ** Processing line: ~ CFBundleIcons~ ** Processing line: ~ ~ ** Processing line: ~ CFBundlePrimaryIcon~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIconName~ ** Processing line: ~ AppIcon~ ** Processing line: ~ CFBundleIconFiles~ ** Processing line: ~ ~ ** Processing line: ~ AppIcon60x60~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIcons~ipad~ ** Processing line: ~ ~ ** Processing line: ~ CFBundlePrimaryIcon~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIconName~ ** Processing line: ~ AppIcon~ ** Processing line: ~ CFBundleIconFiles~ ** Processing line: ~ ~ ** Processing line: ~ AppIcon60x60~ ** Processing line: ~ AppIcon76x76~ ** Processing line: ~ AppIcon83.5x83.5~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ UILaunchStoryboardName~ ** Processing line: ~ SimpleSplash~ ** Processing line: ~ UIRequiresFullScreen~ ** Processing line: ~ ~ ** Processing line: ~ ITSAppUsesNonExemptEncryption~ ** Processing line: ~ ~ ** Processing line: ~ UIRequiredDeviceCapabilities~ ** Processing line: ~ ~ ** Processing line: ~ arm64~ ** Processing line: ~ ~ ** Processing line: ~ MinimumOSVersion~ ** Processing line: ~ 10.3~ ** Processing line: ~ CFBundleSupportedPlatforms~ ** Processing line: ~ ~ ** Processing line: ~ iPhoneOS~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIconFiles~ ** Processing line: ~ ~ ** Processing line: ~ AppIcon20x20~ ** Processing line: ~ AppIcon29x29~ ** Processing line: ~ AppIcon40x40~ ** Processing line: ~ AppIcon60x60~ ** Processing line: ~ ~ ** Processing line: ~ UIDeviceFamily~ ** Processing line: ~ ~ ** Processing line: ~ 1~ ** Processing line: ~ 2~ ** Processing line: ~ ~ ** Processing line: ~ UISupportedInterfaceOrientations~ ** Processing line: ~ ~ ** Processing line: ~ UIInterfaceOrientationPortrait~ ** Processing line: ~ ~ ** Processing line: ~ UIStatusBarStyle~ ** Processing line: ~ UIStatusBarStyleDefault~ ** Processing line: ~ UIBackgroundModes~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ DTXcode~ ** Processing line: ~ 0124~ ** Processing line: ~ DTXcodeBuild~ ** Processing line: ~ 12D4e~ ** Processing line: ~ DTSDKName~ ** Processing line: ~ iphoneos14.4~ ** Processing line: ~ DTSDKBuild~ ** Processing line: ~ 18D46~ ** Processing line: ~ DTPlatformName~ ** Processing line: ~ iphoneos~ ** Processing line: ~ DTCompiler~ ** Processing line: ~ com.apple.compilers.llvm.clang.1_0~ ** Processing line: ~ DTPlatformVersion~ ** Processing line: ~ 14.4~ ** Processing line: ~ DTPlatformBuild~ ** Processing line: ~ 18D46~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ XML~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def development_write_info_plist~ ** Processing line: ~ log_info "Adding Info.plist."~ ** Processing line: ~~ ** Processing line: ~ info_plist_string = <<-XML~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ NSAppTransportSecurity~ ** Processing line: ~ ~ ** Processing line: ~ NSAllowsArbitraryLoads~ ** Processing line: ~ ~ ** Processing line: ~ NSExceptionDomains~ ** Processing line: ~ ~ ** Processing line: ~ google.com~ ** Processing line: ~ ~ ** Processing line: ~ NSExceptionAllowsInsecureHTTPLoads~ ** Processing line: ~ ~ ** Processing line: ~ NSIncludesSubdomains~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ BuildMachineOSBuild~ ** Processing line: ~ 20D91~ ** Processing line: ~ CFBundleDevelopmentRegion~ ** Processing line: ~ en~ ** Processing line: ~ CFBundleDisplayName~ ** Processing line: ~ :app_name~ ** Processing line: ~ CFBundleExecutable~ ** Processing line: ~ Runtime~ ** Processing line: ~ CFBundleIconFiles~ ** Processing line: ~ ~ ** Processing line: ~ AppIcon60x60~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIcons~ ** Processing line: ~ ~ ** Processing line: ~ CFBundlePrimaryIcon~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIconFiles~ ** Processing line: ~ ~ ** Processing line: ~ AppIcon60x60~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIconName~ ** Processing line: ~ AppIcon~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIcons~ipad~ ** Processing line: ~ ~ ** Processing line: ~ CFBundlePrimaryIcon~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIconFiles~ ** Processing line: ~ ~ ** Processing line: ~ AppIcon60x60~ ** Processing line: ~ AppIcon76x76~ ** Processing line: ~ AppIcon83.5x83.5~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIconName~ ** Processing line: ~ AppIcon~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIdentifier~ ** Processing line: ~ :app_id~ ** Processing line: ~ CFBundleInfoDictionaryVersion~ ** Processing line: ~ :app_version~ ** Processing line: ~ CFBundleName~ ** Processing line: ~ :app_name~ ** Processing line: ~ CFBundlePackageType~ ** Processing line: ~ APPL~ ** Processing line: ~ CFBundleShortVersionString~ ** Processing line: ~ :app_version~ ** Processing line: ~ CFBundleSignature~ ** Processing line: ~ ????~ ** Processing line: ~ CFBundleSupportedPlatforms~ ** Processing line: ~ ~ ** Processing line: ~ iPhoneOS~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleVersion~ ** Processing line: ~ :app_version~ ** Processing line: ~ DTCompiler~ ** Processing line: ~ com.apple.compilers.llvm.clang.1_0~ ** Processing line: ~ DTPlatformBuild~ ** Processing line: ~ 18D46~ ** Processing line: ~ DTPlatformName~ ** Processing line: ~ iphoneos~ ** Processing line: ~ DTPlatformVersion~ ** Processing line: ~ 14.4~ ** Processing line: ~ DTSDKBuild~ ** Processing line: ~ 18D46~ ** Processing line: ~ DTSDKName~ ** Processing line: ~ iphoneos14.4~ ** Processing line: ~ DTXcode~ ** Processing line: ~ 0124~ ** Processing line: ~ DTXcodeBuild~ ** Processing line: ~ 12D4e~ ** Processing line: ~ MinimumOSVersion~ ** Processing line: ~ 14.4~ ** Processing line: ~ UIAppFonts~ ** Processing line: ~ ~ ** Processing line: ~ UIBackgroundModes~ ** Processing line: ~ ~ ** Processing line: ~ UIDeviceFamily~ ** Processing line: ~ ~ ** Processing line: ~ 1~ ** Processing line: ~ 2~ ** Processing line: ~ ~ ** Processing line: ~ UILaunchImages~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ UILaunchImageMinimumOSVersion~ ** Processing line: ~ 7.0~ ** Processing line: ~ UILaunchImageName~ ** Processing line: ~ Default-568h@2x~ ** Processing line: ~ UILaunchImageOrientation~ ** Processing line: ~ Portrait~ ** Processing line: ~ UILaunchImageSize~ ** Processing line: ~ {320, 568}~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ UILaunchImageMinimumOSVersion~ ** Processing line: ~ 7.0~ ** Processing line: ~ UILaunchImageName~ ** Processing line: ~ Default-667h@2x~ ** Processing line: ~ UILaunchImageOrientation~ ** Processing line: ~ Portrait~ ** Processing line: ~ UILaunchImageSize~ ** Processing line: ~ {375, 667}~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ UILaunchImageMinimumOSVersion~ ** Processing line: ~ 7.0~ ** Processing line: ~ UILaunchImageName~ ** Processing line: ~ Default-736h@3x~ ** Processing line: ~ UILaunchImageOrientation~ ** Processing line: ~ Portrait~ ** Processing line: ~ UILaunchImageSize~ ** Processing line: ~ {414, 736}~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ UILaunchStoryboardName~ ** Processing line: ~ SimpleSplash~ ** Processing line: ~ UIRequiredDeviceCapabilities~ ** Processing line: ~ ~ ** Processing line: ~ arm64~ ** Processing line: ~ ~ ** Processing line: ~ UIRequiresFullScreen~ ** Processing line: ~ ~ ** Processing line: ~ UIStatusBarStyle~ ** Processing line: ~ UIStatusBarStyleDefault~ ** Processing line: ~ UISupportedInterfaceOrientations~ ** Processing line: ~ ~ ** Processing line: ~ UIInterfaceOrientationLandscapeRight~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ XML~ ** Processing line: ~~ ** Processing line: ~ # UIInterfaceOrientationPortrait~ ** Processing line: ~ # UIInterfaceOrientationLandscapeRight~ ** Processing line: ~~ ** Processing line: ~ info_plist_string.gsub!(":app_name", @app_name)~ ** Processing line: ~ info_plist_string.gsub!(":app_id", @app_id)~ ** Processing line: ~~ ** Processing line: ~ $gtk.write_file_root "tmp/ios/#{@app_name}.app/Info.plist", info_plist_string.strip~ ** Processing line: ~ $gtk.write_file_root "tmp/ios/Info.txt", info_plist_string.strip~ ** Processing line: ~~ ** Processing line: ~ @info_plist_written = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def production_write_info_plist~ ** Processing line: ~ log_info "Adding Info.plist."~ ** Processing line: ~~ ** Processing line: ~ info_plist_string = <<-XML~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ BuildMachineOSBuild~ ** Processing line: ~ 20D91~ ** Processing line: ~ CFBundleDevelopmentRegion~ ** Processing line: ~ en~ ** Processing line: ~ CFBundleDisplayName~ ** Processing line: ~ :app_name~ ** Processing line: ~ CFBundleExecutable~ ** Processing line: ~ Runtime~ ** Processing line: ~ CFBundleIconFiles~ ** Processing line: ~ ~ ** Processing line: ~ AppIcon60x60~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIcons~ ** Processing line: ~ ~ ** Processing line: ~ CFBundlePrimaryIcon~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIconFiles~ ** Processing line: ~ ~ ** Processing line: ~ AppIcon60x60~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIconName~ ** Processing line: ~ AppIcon~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIcons~ipad~ ** Processing line: ~ ~ ** Processing line: ~ CFBundlePrimaryIcon~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIconFiles~ ** Processing line: ~ ~ ** Processing line: ~ AppIcon60x60~ ** Processing line: ~ AppIcon76x76~ ** Processing line: ~ AppIcon83.5x83.5~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIconName~ ** Processing line: ~ AppIcon~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleIdentifier~ ** Processing line: ~ :app_id~ ** Processing line: ~ CFBundleInfoDictionaryVersion~ ** Processing line: ~ :app_version~ ** Processing line: ~ CFBundleName~ ** Processing line: ~ :app_name~ ** Processing line: ~ CFBundlePackageType~ ** Processing line: ~ APPL~ ** Processing line: ~ CFBundleShortVersionString~ ** Processing line: ~ :app_version~ ** Processing line: ~ CFBundleSignature~ ** Processing line: ~ ????~ ** Processing line: ~ CFBundleSupportedPlatforms~ ** Processing line: ~ ~ ** Processing line: ~ iPhoneOS~ ** Processing line: ~ ~ ** Processing line: ~ CFBundleVersion~ ** Processing line: ~ :app_version~ ** Processing line: ~ DTCompiler~ ** Processing line: ~ com.apple.compilers.llvm.clang.1_0~ ** Processing line: ~ DTPlatformBuild~ ** Processing line: ~ 18D46~ ** Processing line: ~ DTPlatformName~ ** Processing line: ~ iphoneos~ ** Processing line: ~ DTPlatformVersion~ ** Processing line: ~ 14.4~ ** Processing line: ~ DTSDKBuild~ ** Processing line: ~ 18D46~ ** Processing line: ~ DTSDKName~ ** Processing line: ~ iphoneos14.4~ ** Processing line: ~ DTXcode~ ** Processing line: ~ 0124~ ** Processing line: ~ DTXcodeBuild~ ** Processing line: ~ 12D4e~ ** Processing line: ~ MinimumOSVersion~ ** Processing line: ~ 14.4~ ** Processing line: ~ UIAppFonts~ ** Processing line: ~ ~ ** Processing line: ~ UIBackgroundModes~ ** Processing line: ~ ~ ** Processing line: ~ UIDeviceFamily~ ** Processing line: ~ ~ ** Processing line: ~ 1~ ** Processing line: ~ 2~ ** Processing line: ~ ~ ** Processing line: ~ UILaunchImages~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ UILaunchImageMinimumOSVersion~ ** Processing line: ~ 7.0~ ** Processing line: ~ UILaunchImageName~ ** Processing line: ~ Default-568h@2x~ ** Processing line: ~ UILaunchImageOrientation~ ** Processing line: ~ Portrait~ ** Processing line: ~ UILaunchImageSize~ ** Processing line: ~ {320, 568}~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ UILaunchImageMinimumOSVersion~ ** Processing line: ~ 7.0~ ** Processing line: ~ UILaunchImageName~ ** Processing line: ~ Default-667h@2x~ ** Processing line: ~ UILaunchImageOrientation~ ** Processing line: ~ Portrait~ ** Processing line: ~ UILaunchImageSize~ ** Processing line: ~ {375, 667}~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ UILaunchImageMinimumOSVersion~ ** Processing line: ~ 7.0~ ** Processing line: ~ UILaunchImageName~ ** Processing line: ~ Default-736h@3x~ ** Processing line: ~ UILaunchImageOrientation~ ** Processing line: ~ Portrait~ ** Processing line: ~ UILaunchImageSize~ ** Processing line: ~ {414, 736}~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ UILaunchStoryboardName~ ** Processing line: ~ SimpleSplash~ ** Processing line: ~ UIRequiredDeviceCapabilities~ ** Processing line: ~ ~ ** Processing line: ~ arm64~ ** Processing line: ~ ~ ** Processing line: ~ UIRequiresFullScreen~ ** Processing line: ~ ~ ** Processing line: ~ UIStatusBarStyle~ ** Processing line: ~ UIStatusBarStyleDefault~ ** Processing line: ~ UISupportedInterfaceOrientations~ ** Processing line: ~ ~ ** Processing line: ~ UIInterfaceOrientationLandscapeRight~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ ~ ** Processing line: ~ XML~ ** Processing line: ~~ ** Processing line: ~ # UIInterfaceOrientationPortrait~ ** Processing line: ~ # UIInterfaceOrientationLandscapeRight~ ** Processing line: ~~ ** Processing line: ~ info_plist_string.gsub!(":app_name", @app_name)~ ** Processing line: ~ info_plist_string.gsub!(":app_id", @app_id)~ ** Processing line: ~ info_plist_string.gsub!(":app_version", @app_version)~ ** Processing line: ~~ ** Processing line: ~ $gtk.write_file_root "tmp/ios/#{@app_name}.app/Info.plist", info_plist_string.strip~ ** Processing line: ~ $gtk.write_file_root "tmp/ios/Info.txt", info_plist_string.strip~ ** Processing line: ~~ ** Processing line: ~ @info_plist_written = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def device_orientation_xml~ ** Processing line: ~ return "UIInterfaceOrientationLandscapeRight" if $gtk.logical_width > $gtk.logical_height~ ** Processing line: ~ return "UIInterfaceOrientationPortrait"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tmp_directory~ ** Processing line: ~ "#{relative_path}/tmp/ios"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def app_path~ ** Processing line: ~ "#{tmp_directory}/#{@app_name}.app"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def root_folder~ ** Processing line: ~ "#{relative_path}/#{$gtk.cli_arguments[:dragonruby]}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def embed_mobileprovision~ ** Processing line: ~ sh %Q[cp #{@provisioning_profile_path} "#{app_path}/embedded.mobileprovision"]~ ** Processing line: ~ sh %Q[/usr/bin/plutil -convert binary1 "#{app_path}/Info.plist"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def clear_payload_directory~ ** Processing line: ~ sh %Q[rm "#{@app_name}".ipa]~ ** Processing line: ~ sh %Q[rm -rf "#{app_path}/app"]~ ** Processing line: ~ sh %Q[rm -rf "#{app_path}/sounds"]~ ** Processing line: ~ sh %Q[rm -rf "#{app_path}/sprites"]~ ** Processing line: ~ sh %Q[rm -rf "#{app_path}/data"]~ ** Processing line: ~ sh %Q[rm -rf "#{app_path}/fonts"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def stage_app~ ** Processing line: ~ log_info "Staging."~ ** Processing line: ~ sh "mkdir -p #{tmp_directory}"~ ** Processing line: ~ sh "cp -R #{relative_path}/dragonruby-ios.app \"#{tmp_directory}/#{@app_name}.app\""~ ** Processing line: ~ sh %Q[cp -r "#{root_folder}/app/" "#{app_path}/app/"]~ ** Processing line: ~ sh %Q[cp -r "#{root_folder}/sounds/" "#{app_path}/sounds/"]~ ** Processing line: ~ sh %Q[cp -r "#{root_folder}/sprites/" "#{app_path}/sprites/"]~ ** Processing line: ~ sh %Q[cp -r "#{root_folder}/data/" "#{app_path}/data/"]~ ** Processing line: ~ sh %Q[cp -r "#{root_folder}/fonts/" "#{app_path}/fonts/"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def create_payload~ ** Processing line: ~ sh %Q[mkdir -p #{tmp_directory}/ipa_root/Payload]~ ** Processing line: ~ sh %Q[cp -r "#{app_path}" "#{tmp_directory}/ipa_root/Payload"]~ ** Processing line: ~ sh %Q[chmod -R 755 "#{tmp_directory}/ipa_root/Payload"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def create_payload_directory_dev~ ** Processing line: ~ # write dev machine's ip address for hotloading~ ** Processing line: ~ $gtk.write_file "app/server_ip_address.txt", $gtk.ffi_misc.get_local_ip_address.strip~ ** Processing line: ~~ ** Processing line: ~ embed_mobileprovision~ ** Processing line: ~ clear_payload_directory~ ** Processing line: ~ stage_app~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def create_payload_directory_prod~ ** Processing line: ~ # production builds does not hotload ip address~ ** Processing line: ~ sh %Q[rm "#{root_folder}/app/server_ip_address.txt"]~ ** Processing line: ~~ ** Processing line: ~ embed_mobileprovision~ ** Processing line: ~ stage_app~ ** Processing line: ~~ ** Processing line: ~ # production build marker~ ** Processing line: ~ sh %Q[mkdir -p "#{app_path}/metadata/"]~ ** Processing line: ~ sh %Q[touch metadata/DRAGONRUBY_PRODUCTION_BUILD]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def create_ipa~ ** Processing line: ~ do_zip~ ** Processing line: ~ sh "cp \"#{tmp_directory}/ipa_root/archive.zip\" \"#{tmp_directory}/#{@app_name}.ipa\""~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def do_zip~ ** Processing line: ~ $gtk.write_file_root "tmp/ios/do_zip.sh", <<-SCRIPT~ ** Processing line: ~ pushd #{tmp_directory}/ipa_root/~ ** Processing line: ~ zip -q -r archive.zip Payload~ ** Processing line: ~ popd~ ** Processing line: ~ SCRIPT~ ** Processing line: ~~ ** Processing line: ~ sh "sh #{tmp_directory}/do_zip.sh"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def sh cmd~ ** Processing line: ~ log_info cmd.strip~ ** Processing line: ~ result = `#{cmd}`~ ** Processing line: ~ if result.strip.length > 0~ ** Processing line: ~ log_info result.strip.each_line.map(&:strip).join("\n")~ ** Processing line: ~ end~ ** Processing line: ~ result~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def deploy~ ** Processing line: ~ sh "XCODE_DIR=\"/Applications/Xcode.app/Contents/Developer\" \"#{relative_path}/dragonruby-deploy-ios\" -d \"#{@device_id}\" \"#{tmp_directory}/#{@app_name}.ipa\""~ ** Processing line: ~ log_info "Check your device!!"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def print_publish_help~ ** Processing line: ~ has_transporter = (sh "ls /Applications/Transporter.app").include? "Contents"~ ** Processing line: ~ if !has_transporter~ ** Processing line: ~ $gtk.openurl "https://apps.apple.com/us/app/transporter/id1450874784?mt=12"~ ** Processing line: ~ $console.set_command "$wizards.ios.start env: :#{@opts[:env]}, version: \"#{@opts[:version]}\""~ ** Processing line: ~ raise WizardException.new(~ ** Processing line: ~ "* To upload your app, Download Transporter from the App Store https://apps.apple.com/us/app/transporter/id1450874784?mt=12."~ ** Processing line: ~ )~ ** Processing line: ~ else~ ** Processing line: ~ sh "mkdir ./tmp/ios/intermediary_artifacts"~ ** Processing line: ~ sh "mv \"#{tmp_directory}/#{@app_name}.app\" #{tmp_directory}/intermediary_artifacts/"~ ** Processing line: ~ sh "mv \"#{tmp_directory}/do_zip.sh\" #{tmp_directory}/intermediary_artifacts"~ ** Processing line: ~ sh "mv \"#{tmp_directory}/Entitlements.plist\" #{tmp_directory}/intermediary_artifacts"~ ** Processing line: ~ sh "mv \"#{tmp_directory}/ipa_root\" #{tmp_directory}/intermediary_artifacts/"~ ** Processing line: ~ sh "open /Applications/Transporter.app"~ ** Processing line: ~ sh "open ./tmp/ios/"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def compile_icons~ ** Processing line: ~ cmd = <<-S~ ** Processing line: ~ "/Applications/Xcode.app/Contents/Developer/usr/bin/actool" --output-format human-readable-text \~ ** Processing line: ~ --notices --warnings --platform iphoneos \~ ** Processing line: ~ --minimum-deployment-target 10.3 \~ ** Processing line: ~ --target-device iphone \~ ** Processing line: ~ --target-device ipad --app-icon 'AppIcon' \~ ** Processing line: ~ --output-partial-info-plist '#{app_path}/AssetCatalog-Info.plist' \~ ** Processing line: ~ --compress-pngs --compile "#{app_path}" \~ ** Processing line: ~ "#{app_path}/Assets.xcassets"~ ** Processing line: ~ S~ ** Processing line: ~ sh cmd~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def stage_native_libs~ ** Processing line: ~ sh "cp -r \"#{root_folder}/native/\" \"#{app_path}/native/\""~ ** Processing line: ~ sh "CODESIGN_ALLOCATE=\"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate\" /usr/bin/codesign -f -s \"#{@certificate_name}\" --entitlements #{tmp_directory}/Entitlements.plist \"#{tmp_directory}/#{@app_name}.app/native/ios-device/ext.dylib\""~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_version version~ ** Processing line: ~ @app_version = version~ ** Processing line: ~ start env: @opts[:env], version: version~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def app_version~ ** Processing line: ~ log_info "Attempting to retrieve App Version from metadata/ios_metadata.txt."~ ** Processing line: ~ ios_version_number = (ios_metadata.version || "").strip~ ** Processing line: ~ if ios_version_number.length == 0~ ** Processing line: ~ log_info "Not found. Attempting to retrieve App Version from metadata/game_metadata.txt."~ ** Processing line: ~ ios_version_number = (game_metadata.version || "").strip~ ** Processing line: ~ end~ ** Processing line: ~ ios_version_number~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def determine_app_version~ ** Processing line: ~ @app_version = app_version~ ** Processing line: ~ return if @app_version~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** itch_wizard.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~itch_wizard.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~itch_wizard.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/itch_wizard.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # itch_wizard.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ class ItchWizard < Wizard~ ** Processing line: ~ def steps~ ** Processing line: ~ [~ ** Processing line: ~ :check_metadata,~ ** Processing line: ~ :deploy,~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def write_blank_metadata~ ** Processing line: ~ $gtk.write_file metadata_file_path, <<-S.strip~ ** Processing line: ~ #devid=myname~ ** Processing line: ~ #devtitle=My Name~ ** Processing line: ~ #gameid=mygame~ ** Processing line: ~ #gametitle=My Game~ ** Processing line: ~ #version=0.1~ ** Processing line: ~ #icon=metadata/icon.png~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def check_metadata~ ** Processing line: ~ metadata_text = $gtk.read_file metadata_file_path~ ** Processing line: ~ if !metadata_text~ ** Processing line: ~ write_blank_metadata~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if metadata_text.strip.each_line.to_a.length < 6~ ** Processing line: ~ write_blank_metadata~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ log "* INFO: Contents of #{metadata_file_path}:"~ ** Processing line: ~ log "#+begin_src txt"~ ** Processing line: ~ metadata_text.each_line { |l| log " #{l}" }~ ** Processing line: ~ log "#+end_src"~ ** Processing line: ~ metadata = get_metadata~ ** Processing line: ~~ ** Processing line: ~ if metadata[:dev_id].start_with?("#") || !@dev_id~ ** Processing line: ~ log "* PROMPT: Please provide your username for Itch."~ ** Processing line: ~ $console.set_command "$wizards.itch.set_dev_id \"#{metadata[:dev_id]}\""~ ** Processing line: ~ return :need_dev_id~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if metadata[:dev_title].start_with?("#") || !@dev_title~ ** Processing line: ~ log "* PROMPT: Please provide developer's/company's name that you want displayed."~ ** Processing line: ~ $console.set_command "$wizards.itch.set_dev_title \"#{metadata[:dev_title]}\""~ ** Processing line: ~ return :need_dev_title~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if metadata[:game_id].start_with?("#") || !@game_id~ ** Processing line: ~ log "* PROMPT: Please provide the id for you game. This is the id you specified when you set up a new game page on Itch."~ ** Processing line: ~ $console.set_command "$wizards.itch.set_game_id \"#{metadata[:game_id]}\""~ ** Processing line: ~ return :need_game_id~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if metadata[:game_title].start_with?("#") || !@game_title~ ** Processing line: ~ log "* PROMPT: Please provide the display name for your game. (This can include spaces)"~ ** Processing line: ~ $console.set_command "$wizards.itch.set_game_title \"#{metadata[:game_title]}\""~ ** Processing line: ~ return :need_game_title~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if metadata[:version].start_with?("#") || !@version~ ** Processing line: ~ log "* PROMPT: Please provide the version for your game."~ ** Processing line: ~ $console.set_command "$wizards.itch.set_version \"#{metadata[:version]}\""~ ** Processing line: ~ return :need_version~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if metadata[:icon].start_with?("#") || !@icon~ ** Processing line: ~ log "* PROMPT: Please provide icon path for your game."~ ** Processing line: ~ $console.set_command "$wizards.itch.set_icon \"#{metadata[:icon]}\""~ ** Processing line: ~ return :need_icon~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ puts "here!! success!!!"~ ** Processing line: ~~ ** Processing line: ~ return :success~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_dev_id value~ ** Processing line: ~ @dev_id = value~ ** Processing line: ~ start~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_dev_title value~ ** Processing line: ~ @dev_title = value~ ** Processing line: ~ start~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_game_id value~ ** Processing line: ~ @game_id = value~ ** Processing line: ~ start~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_game_title value~ ** Processing line: ~ @game_title = value~ ** Processing line: ~ start~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_version value~ ** Processing line: ~ @version = value~ ** Processing line: ~ start~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def set_icon value~ ** Processing line: ~ @icon = value~ ** Processing line: ~ write_metadata~ ** Processing line: ~ start~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def write_metadata~ ** Processing line: ~ text = ""~ ** Processing line: ~ if @dev_id~ ** Processing line: ~ text += "devid=#{@dev_id}\n"~ ** Processing line: ~ else~ ** Processing line: ~ text += "#devid=myname\n"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if @dev_title~ ** Processing line: ~ text += "devtitle=#{@dev_title}\n"~ ** Processing line: ~ else~ ** Processing line: ~ text += "#devtitle=My Name\n"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if @game_id~ ** Processing line: ~ text += "gameid=#{@game_id}\n"~ ** Processing line: ~ else~ ** Processing line: ~ text += "#gameid=gameid\n"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if @game_title~ ** Processing line: ~ text += "gametitle=#{@game_title}\n"~ ** Processing line: ~ else~ ** Processing line: ~ text += "#gametitle=Game Name\n"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if @version~ ** Processing line: ~ text += "version=#{@version}\n"~ ** Processing line: ~ else~ ** Processing line: ~ text += "#version=0.1\n"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if @icon~ ** Processing line: ~ text += "icon=#{@icon}\n"~ ** Processing line: ~ else~ ** Processing line: ~ text += "#icon=metadata/icon.png\n"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.write_file metadata_file_path, text~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def relative_path~ ** Processing line: ~ (File.dirname $gtk.binary_path)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def package_command~ ** Processing line: ~ "#{File.join $gtk.get_base_dir, 'dragonruby-publish'}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def deploy~ ** Processing line: ~ log_info "* Running dragonruby-publish: #{package_command}"~ ** Processing line: ~ $gtk.openurl "http://itch.io/dashboard" if $gtk.platform == "Mac OS X"~ ** Processing line: ~ if $gtk.platform? :mac~ ** Processing line: ~ $gtk.exec "rm -rf ./builds"~ ** Processing line: ~ end~ ** Processing line: ~ results = $gtk.exec "#{package_command} --only-package"~ ** Processing line: ~ puts File.expand_path("./builds")~ ** Processing line: ~~ ** Processing line: ~ log "#+begin_src"~ ** Processing line: ~ log results~ ** Processing line: ~ log "#+end_src"~ ** Processing line: ~~ ** Processing line: ~ if $gtk.platform? :mac~ ** Processing line: ~ $gtk.exec "open ./builds/"~ ** Processing line: ~ elsif $gtk.platform? :windows~ ** Processing line: ~ $gtk.exec "powershell \"ii .\""~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $gtk.openurl "https://itch.io/dashboard"~ ** Processing line: ~~ ** Processing line: ~ :success~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def start~ ** Processing line: ~ log "================"~ ** Processing line: ~ log "* INFO: Starting Itch Wizard."~ ** Processing line: ~ @start_at = Kernel.global_tick_count~ ** Processing line: ~ steps.each do |m|~ ** Processing line: ~ begin~ ** Processing line: ~ log_info "Running Itch Wizard Step: ~$wizards.itch.#{m}~"~ ** Processing line: ~ result = (send m) || :success~ ** Processing line: ~ @wizard_status[m][:result] = result~ ** Processing line: ~ if result != :success~ ** Processing line: ~ log_info "Exiting wizard. :#{result}"~ ** Processing line: ~ break~ ** Processing line: ~ end~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ if e.is_a? WizardException~ ** Processing line: ~ $console.log.clear~ ** Processing line: ~ $console.archived_log.clear~ ** Processing line: ~ log "=" * $console.console_text_width~ ** Processing line: ~ e.console_primitives.each do |p|~ ** Processing line: ~ $console.add_primitive p~ ** Processing line: ~ end~ ** Processing line: ~ log "=" * $console.console_text_width~ ** Processing line: ~ $console.set_command (e.console_command || "$wizards.itch.start")~ ** Processing line: ~ else~ ** Processing line: ~ log_error "Step #{m} failed."~ ** Processing line: ~ log_error e.to_s~ ** Processing line: ~ $console.set_command "$wizards.itch.start"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ break~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reset~ ** Processing line: ~ @dev_id = nil~ ** Processing line: ~ @dev_title = nil~ ** Processing line: ~ @game_id = nil~ ** Processing line: ~ @game_title = nil~ ** Processing line: ~ @version = nil~ ** Processing line: ~ @icon = nil~ ** Processing line: ~ init_wizard_status~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def restart~ ** Processing line: ~ reset~ ** Processing line: ~ start~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ reset~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def init_wizard_status~ ** Processing line: ~ @wizard_status = {}~ ** Processing line: ~~ ** Processing line: ~ steps.each do |m|~ ** Processing line: ~ @wizard_status[m] = { result: :not_started }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ previous_step = nil~ ** Processing line: ~ next_step = nil~ ** Processing line: ~~ ** Processing line: ~ steps.each_cons(2) do |current_step, next_step|~ ** Processing line: ~ @wizard_status[current_step][:next_step] = next_step~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ steps.reverse.each_cons(2) do |current_step, previous_step|~ ** Processing line: ~ @wizard_status[current_step][:previous_step] = previous_step~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** layout.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~layout.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~layout.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/layout.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # layout.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Margin~ ** Processing line: ~ attr :left, :right, :top, :bottom~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @left = 0~ ** Processing line: ~ @right = 0~ ** Processing line: ~ @top = 0~ ** Processing line: ~ @bottom = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ {~ ** Processing line: ~ left: @left,~ ** Processing line: ~ right: @right,~ ** Processing line: ~ top: @top,~ ** Processing line: ~ bottom: @bottom,~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inspect~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class SafeArea~ ** Processing line: ~ attr :w, :h, :margin~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @w = 0~ ** Processing line: ~ @h = 0~ ** Processing line: ~ @margin = Margin.new~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ {~ ** Processing line: ~ w: @w,~ ** Processing line: ~ h: @h,~ ** Processing line: ~ margin: @margin.serialize~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inspect~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class GridArea~ ** Processing line: ~ attr :w, :h, :margin, :gutter, :col_count, :row_count, :cell_w, :cell_h, :outer_gutter~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @w = 0~ ** Processing line: ~ @h = 0~ ** Processing line: ~ @gutter = 0~ ** Processing line: ~ @outer_gutter = 0~ ** Processing line: ~ @col_count = 0~ ** Processing line: ~ @row_count = 0~ ** Processing line: ~ @margin = Margin.new~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ {~ ** Processing line: ~ w: @w,~ ** Processing line: ~ h: @h,~ ** Processing line: ~ gutter: @gutter,~ ** Processing line: ~ outer_gutter: @outer_gutter,~ ** Processing line: ~ col_count: @col_count,~ ** Processing line: ~ row_count: @row_count,~ ** Processing line: ~ margin: @margin.serialize~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inspect~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class ControlArea~ ** Processing line: ~ attr :cell_size, :w, :h, :margin~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @margin = Margin.new~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ {~ ** Processing line: ~ cell_size: @cell_size,~ ** Processing line: ~ w: @w,~ ** Processing line: ~ h: @h,~ ** Processing line: ~ margin: @margin.serialize,~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inspect~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class Device~ ** Processing line: ~ attr :w, :h, :safe_area, :grid_area, :control_area, :name, :aspect~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @name = ""~ ** Processing line: ~ @w = 0~ ** Processing line: ~ @h = 0~ ** Processing line: ~ @safe_area = SafeArea.new~ ** Processing line: ~ @grid_area = GridArea.new~ ** Processing line: ~ @control_area = ControlArea.new~ ** Processing line: ~ @aspect = AspectRatio.new~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def assert! result, message~ ** Processing line: ~ return if result~ ** Processing line: ~ raise message~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def check_math!~ ** Processing line: ~ assert! (@control_area.w + @control_area.margin.left + @control_area.margin.right) == @w, "Math for Width didn't pan out."~ ** Processing line: ~ assert! (@control_area.h + @control_area.margin.top + @control_area.margin.bottom) == @h, "Math for Height didn't pan out."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ {~ ** Processing line: ~ name: @name,~ ** Processing line: ~ w: @w,~ ** Processing line: ~ h: @h,~ ** Processing line: ~ aspect: @aspect.serialize,~ ** Processing line: ~ safe_area: @safe_area.serialize,~ ** Processing line: ~ grid_area: @grid_area.serialize,~ ** Processing line: ~ control_area: @control_area.serialize~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inspect~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class AspectRatio~ ** Processing line: ~ attr :w, :h, :u~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @w = 0~ ** Processing line: ~ @h = 0~ ** Processing line: ~ @u = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ {~ ** Processing line: ~ w: @w,~ ** Processing line: ~ h: @h,~ ** Processing line: ~ u: @u~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inspect~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class Layout~ ** Processing line: ~ attr :w, :h, :rect_cache~ ** Processing line: ~~ ** Processing line: ~ def initialize w, h~ ** Processing line: ~ @w = w~ ** Processing line: ~ @h = h~ ** Processing line: ~ @rect_cache = {}~ ** Processing line: ~ init_device @w, @h~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def u_for_16x9 w, h~ ** Processing line: ~ u = (w.fdiv 16).floor~ ** Processing line: ~ u = (h.fdiv 9).floor if (u * 9) > h~ ** Processing line: ~~ ** Processing line: ~ {~ ** Processing line: ~ u: u,~ ** Processing line: ~ w: u * 16,~ ** Processing line: ~ h: u * 9~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def font_relative_size_enum size_enum~ ** Processing line: ~ base_line_logical = 22~ ** Processing line: ~ base_line_actual = font_size_med~ ** Processing line: ~ target_logical = size_enum~ ** Processing line: ~ target_logical = 1 if target_logical <= 0~ ** Processing line: ~ (base_line_actual / base_line_logical) * target_logical~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def font_px_to_pt px~ ** Processing line: ~ (px / 1.33333).floor~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def font_pt_to_px pt~ ** Processing line: ~ pt * 1.333333~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def font_size_cell~ ** Processing line: ~ (cell_height / 1.33333)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def font_size_xl~ ** Processing line: ~ font_size_cell~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def font_size_lg~ ** Processing line: ~ font_size_cell * 0.8~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def font_size_med~ ** Processing line: ~ font_size_cell * 0.7~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def font_size_sm~ ** Processing line: ~ font_size_cell * 0.6~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def font_size_xs~ ** Processing line: ~ font_size_cell * 0.5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def font_size~ ** Processing line: ~ font_size_cell * 0.7~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def logical_rect~ ** Processing line: ~ @logical_rect ||= { x: 0,~ ** Processing line: ~ y: 0,~ ** Processing line: ~ w: @w,~ ** Processing line: ~ h: @h }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def safe_rect~ ** Processing line: ~ @safe_rect ||= { x: 0,~ ** Processing line: ~ y: 0,~ ** Processing line: ~ w: @w,~ ** Processing line: ~ h: @h }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def control_rect~ ** Processing line: ~ @control_rect ||= { x: device.control_area.margin.left,~ ** Processing line: ~ y: device.control_area.margin.top,~ ** Processing line: ~ w: device.control_area.w,~ ** Processing line: ~ h: device.control_area.h }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def row_count~ ** Processing line: ~ device.grid_area.row_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def row_max_index~ ** Processing line: ~ row_count - 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def col_count~ ** Processing line: ~ device.grid_area.col_count~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def col_max_index~ ** Processing line: ~ col_count - 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def gutter_height~ ** Processing line: ~ device.grid_area.gutter~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def gutter_width~ ** Processing line: ~ device.grid_area.gutter~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def outer_gutter~ ** Processing line: ~ device.grid_area.outer_gutter~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def cell_height~ ** Processing line: ~ device.control_area.cell_size~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def cell_width~ ** Processing line: ~ device.control_area.cell_size~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rect_defaults~ ** Processing line: ~ {~ ** Processing line: ~ row: nil,~ ** Processing line: ~ col: nil,~ ** Processing line: ~ h: 1,~ ** Processing line: ~ w: 1,~ ** Processing line: ~ dx: 0,~ ** Processing line: ~ dx_ratio: 1,~ ** Processing line: ~ dy: 0,~ ** Processing line: ~ dy_ratio: 1,~ ** Processing line: ~ dh_ratio: 1,~ ** Processing line: ~ dw_ratio: 1,~ ** Processing line: ~ merge: nil,~ ** Processing line: ~ rect: :control_rect~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def row n~ ** Processing line: ~ (rect row: n, col: 0, w: 0, h: 0).x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def row_from_bottom n~ ** Processing line: ~ (rect row: row_count - n, col: 0, w: 0, h: 0).x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def col n~ ** Processing line: ~ (rect row: 0, col: n, w: 0, h: 0).y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def col_from_right n~ ** Processing line: ~ (rect row: 0, col: col_max_index - n, w: 0, h: 0).y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def w n~ ** Processing line: ~ (rect row: 0, col: 0, w: n, h: 1).w~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def h n~ ** Processing line: ~ (rect row: 0, col: 0, w: 1, h: n).h~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rect_group opts~ ** Processing line: ~ group = opts.group~ ** Processing line: ~ r = opts.row || 0~ ** Processing line: ~ r = row_max_index - opts.row_from_bottom if opts.row_from_bottom~ ** Processing line: ~ c = opts.col || 0~ ** Processing line: ~ c = col_max_index - opts.col_from_right if opts.col_from_right~ ** Processing line: ~ drow = opts.drow || 0~ ** Processing line: ~ dcol = opts.dcol || 0~ ** Processing line: ~ w = opts.w || 0~ ** Processing line: ~ h = opts.h || 0~ ** Processing line: ~ merge = opts[:merge]~ ** Processing line: ~~ ** Processing line: ~ running_row = r~ ** Processing line: ~ running_col = c~ ** Processing line: ~~ ** Processing line: ~ running_col = calc_col_offset(opts.col_offset) if opts.col_offset~ ** Processing line: ~ running_row = calc_row_offset(opts.row_offset) if opts.row_offset~ ** Processing line: ~~ ** Processing line: ~ group.map do |i|~ ** Processing line: ~ group_layout_opts = i.layout || {}~ ** Processing line: ~ group_layout_opts = group_layout_opts.merge row: running_row,~ ** Processing line: ~ col: running_col,~ ** Processing line: ~ merge: merge,~ ** Processing line: ~ w: w, h: h~ ** Processing line: ~ result = (rect group_layout_opts).merge i~ ** Processing line: ~~ ** Processing line: ~ if (i.is_a? Hash) && (i.primitive_marker == :label)~ ** Processing line: ~ if i.alignment_enum == 1~ ** Processing line: ~ result.x += result.w.half~ ** Processing line: ~ elsif i.alignment_enum == 2~ ** Processing line: ~ result.x += result.w~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ running_row += drow~ ** Processing line: ~ running_col += dcol~ ** Processing line: ~ result~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_row_offset opts = {}~ ** Processing line: ~ count = opts[:count] || opts[:length] || 0~ ** Processing line: ~ h = opts.h || 1~ ** Processing line: ~ (row_count - (count * h)) / 2.0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def calc_col_offset opts = {}~ ** Processing line: ~ count = opts[:count] || opts[:length] || 0~ ** Processing line: ~ w = opts.w || 1~ ** Processing line: ~ (col_count - (count * w)) / 2.0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def point opts = {}~ ** Processing line: ~ opts.w = 1~ ** Processing line: ~ opts.h = 1~ ** Processing line: ~ opts.row ||= 0~ ** Processing line: ~ opts.col ||= 0~ ** Processing line: ~ r = rect opts~ ** Processing line: ~ r.x += r.w * opts.col_anchor if opts.col_anchor~ ** Processing line: ~ r.y += r.h * opts.row_anchor if opts.row_anchor~ ** Processing line: ~ r~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rect *all_opts~ ** Processing line: ~ if all_opts.length == 1~ ** Processing line: ~ opts = all_opts.first~ ** Processing line: ~ else~ ** Processing line: ~ opts = {}~ ** Processing line: ~ all_opts.each do |o|~ ** Processing line: ~ opts.merge! o~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ opts.row = row_max_index - opts.row_from_bottom if opts.row_from_bottom~ ** Processing line: ~ opts.col = col_max_index - opts.col_from_right if opts.col_from_right~ ** Processing line: ~ opts = rect_defaults.merge opts~ ** Processing line: ~ opts.row ||= 0~ ** Processing line: ~ opts.col ||= 0~ ** Processing line: ~~ ** Processing line: ~ result = send opts[:rect]~ ** Processing line: ~ if opts[:row] && opts[:col] && opts[:w] && opts[:h]~ ** Processing line: ~ col = rect_col opts[:col], opts[:w]~ ** Processing line: ~ row = rect_row opts[:row], opts[:h]~ ** Processing line: ~ result = control_rect.merge x: col.x,~ ** Processing line: ~ y: row.y,~ ** Processing line: ~ w: col.w,~ ** Processing line: ~ h: row.h,~ ** Processing line: ~ center_x: col.center_x,~ ** Processing line: ~ center_y: row.center_y~ ** Processing line: ~ elsif opts[:row] && !opts[:col]~ ** Processing line: ~ result = rect_row opts[:row], opts[:h]~ ** Processing line: ~ elsif !opts[:row] && opts[:col]~ ** Processing line: ~ result = rect_col opts[:col], opts[:w]~ ** Processing line: ~ else~ ** Processing line: ~ raise "LayoutTheory::rect unable to process opts #{opts}."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if opts[:max_height] && opts[:max_height] >= 0~ ** Processing line: ~ if result[:h] > opts[:max_height]~ ** Processing line: ~ delta = (result[:h] - opts[:max_height]) * 2~ ** Processing line: ~ result[:y] += delta~ ** Processing line: ~ result[:h] = opts[:max_height]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if opts[:max_width] && opts[:max_width] >= 0~ ** Processing line: ~ if result[:w] > opts[:max_width]~ ** Processing line: ~ delta = (result[:w] - opts[:max_width]) * 2~ ** Processing line: ~ result[:x] += delta~ ** Processing line: ~ result[:w] = opts[:max_width]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ result[:x] += opts[:dx]~ ** Processing line: ~ result[:y] += opts[:dy]~ ** Processing line: ~~ ** Processing line: ~ if opts[:include_row_gutter]~ ** Processing line: ~ result[:x] -= device.grid_area.gutter~ ** Processing line: ~ result[:w] += device.grid_area.gutter * 2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if opts[:include_col_gutter]~ ** Processing line: ~ result[:y] -= device.grid_area.gutter~ ** Processing line: ~ result[:h] += device.grid_area.gutter * 2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ result[:x] += opts[:dx] if opts[:dx]~ ** Processing line: ~ result[:x] *= opts[:dx_ratio] if opts[:dx_ratio]~ ** Processing line: ~ result[:y] += opts[:dy] if opts[:dy]~ ** Processing line: ~ result[:y] *= opts[:dy_ratio] if opts[:dy_ratio]~ ** Processing line: ~ result[:w] += opts[:dw] if opts[:dw]~ ** Processing line: ~ result[:w] *= opts[:dw_ratio] if opts[:dw_ratio]~ ** Processing line: ~ result[:h] += opts[:dh] if opts[:dh]~ ** Processing line: ~ result[:h] *= opts[:dh_ratio] if opts[:dh_ratio]~ ** Processing line: ~ result.merge! opts[:merge] if opts[:merge]~ ** Processing line: ~ result[:row] = opts[:row]~ ** Processing line: ~ result[:col] = opts[:col]~ ** Processing line: ~~ ** Processing line: ~ result[:h] = result[:h].clamp 0~ ** Processing line: ~ result[:w] = result[:w].clamp 0~ ** Processing line: ~~ ** Processing line: ~ if $gtk.args.grid.name == :center~ ** Processing line: ~ result[:x] -= 640~ ** Processing line: ~ result[:y] -= 360~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ result~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rect_center reference, target~ ** Processing line: ~ delta_x = (reference.w - target.w).fdiv 2~ ** Processing line: ~ delta_y = (reference.h - target.h).fdiv 2~ ** Processing line: ~ [target.x - delta_x, target.y - delta_y, target.w, target.h]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rect_row index, h~ ** Processing line: ~ @rect_cache[:row] ||= {}~ ** Processing line: ~ @rect_cache[:row][index] ||= {}~ ** Processing line: ~ return @rect_cache[:row][index][h] if @rect_cache[:row][index][h]~ ** Processing line: ~ row_h = (device.grid_area.gutter * (h - 1)) +~ ** Processing line: ~ (device.control_area.cell_size * h)~ ** Processing line: ~~ ** Processing line: ~ row_h = row_h.to_i~ ** Processing line: ~ row_h -= 1 if row_h.odd?~ ** Processing line: ~~ ** Processing line: ~ row_y = (control_rect.y) +~ ** Processing line: ~ (device.grid_area.gutter * index) +~ ** Processing line: ~ (device.control_area.cell_size * index)~ ** Processing line: ~~ ** Processing line: ~ row_y = row_y.to_i~ ** Processing line: ~ row_y += 1 if row_y.odd? && (index + 1) > @device.grid_area.row_count.half~ ** Processing line: ~ row_y += 1 if row_y.odd? && (index + 1) <= @device.grid_area.row_count.half~ ** Processing line: ~~ ** Processing line: ~ row_y = device.h - row_y - row_h~ ** Processing line: ~~ ** Processing line: ~ result = control_rect.merge y: row_y, h: row_h, center_y: (row_y + row_h.half)~ ** Processing line: ~ @rect_cache[:row][index][h] = result~ ** Processing line: ~ @rect_cache[:row][index][h]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rect_col index, w~ ** Processing line: ~ @rect_cache[:col] ||= {}~ ** Processing line: ~ @rect_cache[:col][index] ||= {}~ ** Processing line: ~ return @rect_cache[:col][index][w] if @rect_cache[:col][index][w]~ ** Processing line: ~ col_x = (control_rect.x) +~ ** Processing line: ~ (device.grid_area.gutter * index) +~ ** Processing line: ~ (device.control_area.cell_size * index)~ ** Processing line: ~~ ** Processing line: ~ col_x = col_x.to_i~ ** Processing line: ~ col_x -= 1 if col_x.odd? && (index + 1) < @device.grid_area.col_count.half~ ** Processing line: ~ col_x += 1 if col_x.odd? && (index + 1) >= @device.grid_area.col_count.half~ ** Processing line: ~~ ** Processing line: ~ col_w = (device.grid_area.gutter * (w - 1)) +~ ** Processing line: ~ (device.control_area.cell_size * w)~ ** Processing line: ~~ ** Processing line: ~ col_w = col_w.to_i~ ** Processing line: ~ col_w -= 1 if col_w.odd?~ ** Processing line: ~~ ** Processing line: ~ result = control_rect.merge x: col_x, w: col_w, center_x: (col_x + col_w.half)~ ** Processing line: ~ @rect_cache[:col][index][w] = result~ ** Processing line: ~ @rect_cache[:col][index][w]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def device~ ** Processing line: ~ @device~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def init_device w, h~ ** Processing line: ~ @device = Device.new~ ** Processing line: ~ @device.w = w~ ** Processing line: ~ @device.h = h~ ** Processing line: ~ @device.name = "Device"~ ** Processing line: ~ @device.aspect.w = (u_for_16x9 w, h)[:w]~ ** Processing line: ~ @device.aspect.h = (u_for_16x9 w, h)[:h]~ ** Processing line: ~ @device.aspect.u = (u_for_16x9 w, h)[:u]~ ** Processing line: ~ @device.safe_area.w = @device.aspect.u * 16~ ** Processing line: ~ @device.safe_area.h = @device.aspect.u * 9~ ** Processing line: ~ @device.safe_area.margin.left = ((@device.w - @device.safe_area.w).fdiv 2).floor~ ** Processing line: ~ @device.safe_area.margin.right = ((@device.w - @device.safe_area.w).fdiv 2).floor~ ** Processing line: ~ @device.safe_area.margin.top = ((@device.h - @device.safe_area.h).fdiv 2).floor~ ** Processing line: ~ @device.safe_area.margin.bottom = ((@device.h - @device.safe_area.h).fdiv 2).floor~ ** Processing line: ~ @device.grid_area.outer_gutter = @device.w / 80~ ** Processing line: ~ @device.grid_area.gutter = @device.w / 160~ ** Processing line: ~~ ** Processing line: ~ @device.grid_area.w = @device.safe_area.w - (@device.grid_area.outer_gutter * 2)~ ** Processing line: ~ @device.grid_area.h = @device.safe_area.h - (@device.grid_area.outer_gutter * 2)~ ** Processing line: ~~ ** Processing line: ~ @device.grid_area.margin.left = ((@device.w - @device.grid_area.w).fdiv 2).floor~ ** Processing line: ~ @device.grid_area.margin.right = ((@device.w - @device.grid_area.w).fdiv 2).floor~ ** Processing line: ~ @device.grid_area.margin.top = ((@device.h - @device.grid_area.h).fdiv 2).floor~ ** Processing line: ~ @device.grid_area.margin.bottom = ((@device.h - @device.grid_area.h).fdiv 2).floor~ ** Processing line: ~~ ** Processing line: ~ @device.grid_area.col_count = 24~ ** Processing line: ~ @device.grid_area.row_count = 12~ ** Processing line: ~ @device.grid_area.cell_w = ((@device.aspect.w - (@device.grid_area.outer_gutter * 2)) - ((@device.grid_area.col_count - 1) * @device.grid_area.gutter)).fdiv @device.grid_area.col_count~ ** Processing line: ~ @device.grid_area.cell_h = ((@device.aspect.h - (@device.grid_area.outer_gutter * 2)) - ((@device.grid_area.row_count - 1) * @device.grid_area.gutter)).fdiv @device.grid_area.row_count~ ** Processing line: ~~ ** Processing line: ~ @device.control_area.cell_size = @device.grid_area.cell_w~ ** Processing line: ~ @device.control_area.cell_size = @device.grid_area.cell_h if @device.grid_area.cell_h < @device.grid_area.cell_w && @device.grid_area.cell_h > 0~ ** Processing line: ~ @device.control_area.cell_size = @device.control_area.cell_size.floor~ ** Processing line: ~ @device.control_area.w = (@device.control_area.cell_size * @device.grid_area.col_count) + (@device.grid_area.gutter * (@device.grid_area.col_count - 1))~ ** Processing line: ~ @device.control_area.h = (@device.control_area.cell_size * @device.grid_area.row_count) + (@device.grid_area.gutter * (@device.grid_area.row_count - 1))~ ** Processing line: ~ @device.control_area.margin.left = (@device.w - @device.control_area.w).fdiv 2~ ** Processing line: ~ @device.control_area.margin.right = (@device.w - @device.control_area.w).fdiv 2~ ** Processing line: ~ @device.control_area.margin.top = (@device.h - @device.control_area.h).fdiv 2~ ** Processing line: ~ @device.control_area.margin.bottom = (@device.h - @device.control_area.h).fdiv 2~ ** Processing line: ~ @device~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def debug_primitives opts = {}~ ** Processing line: ~ @primitives ||= col_count.map_with_index do |col|~ ** Processing line: ~ row_count.map_with_index do |row|~ ** Processing line: ~ cell = rect row: row, col: col~ ** Processing line: ~ center = Geometry.rect_center_point cell~ ** Processing line: ~ [~ ** Processing line: ~ cell.merge(opts).border,~ ** Processing line: ~ cell.merge(opts)~ ** Processing line: ~ .label!(x: center.x,~ ** Processing line: ~ y: center.y,~ ** Processing line: ~ text: "#{row},#{col}",~ ** Processing line: ~ size_enum: -3,~ ** Processing line: ~ vertical_alignment_enum: 1,~ ** Processing line: ~ alignment_enum: 1)~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ @primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ {~ ** Processing line: ~ device: @device.serialize,~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def inspect~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_s~ ** Processing line: ~ serialize.to_s~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reset~ ** Processing line: ~ @primitives = nil~ ** Processing line: ~ @rect_cache ||= {}~ ** Processing line: ~ @rect_cache.clear~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** log.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~log.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~log.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/log.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # log.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ XTERM_COLOR = {~ ** Processing line: ~ black: "\u001b[30m",~ ** Processing line: ~ red: "\u001b[31m",~ ** Processing line: ~ green: "\u001b[32m",~ ** Processing line: ~ yellow: "\u001b[33m",~ ** Processing line: ~ blue: "\u001b[34m",~ ** Processing line: ~ magenta: "\u001b[35m",~ ** Processing line: ~ cyan: "\u001b[36m",~ ** Processing line: ~ white: "\u001b[37m",~ ** Processing line: ~ bright_black: "\u001b[30;1m",~ ** Processing line: ~ bright_red: "\u001b[31;1m",~ ** Processing line: ~ bright_green: "\u001b[32;1m",~ ** Processing line: ~ bright_yellow: "\u001b[33;1m",~ ** Processing line: ~ bright_blue: "\u001b[34;1m",~ ** Processing line: ~ bright_magenta: "\u001b[35;1m",~ ** Processing line: ~ bright_cyan: "\u001b[36;1m",~ ** Processing line: ~ bright_white: "\u001b[37;1m",~ ** Processing line: ~ reset: "\u001b[0m",~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Log~ ** Processing line: ~ def self.write_to_log_and_puts *args~ ** Processing line: ~ return if $gtk.production~ ** Processing line: ~ $gtk.append_file_root 'logs/log.txt', args.join("\n") + "\n"~ ** Processing line: ~ args.each { |obj| $gtk.log obj, self }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.write_to_log_and_print *args~ ** Processing line: ~ return if $gtk.production~ ** Processing line: ~ $gtk.append_file_root 'logs/log.txt', args.join("\n")~ ** Processing line: ~ Object.print(*args)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.puts_important *args~ ** Processing line: ~ return if $gtk.production~ ** Processing line: ~ $gtk.append_file_root 'logs/log.txt', args.join("\n")~ ** Processing line: ~ $gtk.notify! "Important notification occurred."~ ** Processing line: ~ args.each { |obj| $gtk.log obj }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.puts *args~ ** Processing line: ~ message_id, message = args~ ** Processing line: ~ message ||= message_id~ ** Processing line: ~ write_to_log_and_puts message~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.multiline? *args~ ** Processing line: ~ return true if args.length > 1~ ** Processing line: ~ return !args[0].to_s.multiline?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.join_lines args~ ** Processing line: ~ return "" if args.length == 0~ ** Processing line: ~ return args if args.is_a? String~ ** Processing line: ~ return args[0] if args.length == 1~ ** Processing line: ~ return args.to_s.join("\n")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.headline name~ ** Processing line: ~ @asterisk_count ||= 1~ ** Processing line: ~ @asterisk_count = @asterisk_count.greater(1)~ ** Processing line: ~ result_from_yield = join_lines yield~ ** Processing line: ~ result_from_yield = result_from_yield.each_line.map { |l| " #{l}" }.join~ ** Processing line: ~ r ="#{"*" * @asterisk_count} #{name}\n#{result_from_yield}"~ ** Processing line: ~ @asterisk_count -= 1~ ** Processing line: ~ @asterisk_count = @asterisk_count.greater(1)~ ** Processing line: ~ r~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.dynamic_block~ ** Processing line: ~ "#+BEGIN:~ ** Processing line: ~ #{join_lines yield}~ ** Processing line: ~ #+END:~ ** Processing line: ~~ ** Processing line: ~ "~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.puts_error *args~ ** Processing line: ~ args ||= []~ ** Processing line: ~ title = args[0]~ ** Processing line: ~ additional = args[1..-1] || []~ ** Processing line: ~ additional = "" if additional.length == 0~ ** Processing line: ~ if !title.multiline? && join_lines(additional).multiline?~ ** Processing line: ~ message = headline "ERROR: #{title}" do~ ** Processing line: ~ dynamic_block do~ ** Processing line: ~ additional~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ elsif title.multiline?~ ** Processing line: ~ message = headline "ERROR: " do~ ** Processing line: ~ dynamic_block do~ ** Processing line: ~ args~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ message = "* ERROR: #{title} #{additional}".strip~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ self.puts message~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.puts_info *args~ ** Processing line: ~ args ||= []~ ** Processing line: ~ title = args[0]~ ** Processing line: ~ additional = args[1..-1] || []~ ** Processing line: ~ additional = "" if additional.length == 0~ ** Processing line: ~ if !title.multiline? && join_lines(additional).multiline?~ ** Processing line: ~ message = headline "INFO: #{title}" do~ ** Processing line: ~ dynamic_block do~ ** Processing line: ~ additional~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ elsif title.multiline?~ ** Processing line: ~ message = headline "INFO: " do~ ** Processing line: ~ dynamic_block do~ ** Processing line: ~ args~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ else~ ** Processing line: ~ message = "* INFO: #{title} #{additional}".strip~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ self.puts message~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.reset~ ** Processing line: ~ @once = {}~ ** Processing line: ~ nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.puts_once *ids, message~ ** Processing line: ~ id = "#{ids}"~ ** Processing line: ~ @once ||= {}~ ** Processing line: ~ return if @once[id]~ ** Processing line: ~ @once[id] = id~ ** Processing line: ~ if !$gtk.cli_arguments[:replay] && !$gtk.cli_arguments[:record]~ ** Processing line: ~ $gtk.notify!("Open the DragonRuby Console by pressing [`] [~] [²] [^] [º] or [§]. [Message ID: #{id}].")~ ** Processing line: ~ end~ ** Processing line: ~ write_to_log_and_puts ""~ ** Processing line: ~ write_to_log_and_puts "#{message.strip}"~ ** Processing line: ~ write_to_log_and_puts ""~ ** Processing line: ~ write_to_log_and_puts "[Message ID: #{id}]"~ ** Processing line: ~ write_to_log_and_puts ""~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.puts_once_info *ids, message~ ** Processing line: ~ id = "#{ids}"~ ** Processing line: ~ @once ||= {}~ ** Processing line: ~ return if @once[id]~ ** Processing line: ~ @once[id] = id~ ** Processing line: ~ log_info message~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.print *args~ ** Processing line: ~ write_to_log_and_print(*args)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class Object~ ** Processing line: ~ def log_print *args~ ** Processing line: ~ GTK::Log.print(*args)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_important *args~ ** Processing line: ~ GTK::Log.puts_important(*args)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log *args~ ** Processing line: ~ GTK::Log.puts(*args)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_with_color xterm_escape_code, *args~ ** Processing line: ~ log_print xterm_escape_code~ ** Processing line: ~ log(*args)~ ** Processing line: ~ ensure~ ** Processing line: ~ log_reset_color~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_reset_color~ ** Processing line: ~ log_print XTERM_COLOR[:reset]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_black *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:black], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_red *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:red], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_green *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:green], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_yellow *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:yellow], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_blue *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:blue], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_magenta *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:magenta], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_cyan *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:cyan], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_white *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:white], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_bright_black *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:bright_black], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_bright_red *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:bright_red], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_bright_green *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:bright_green], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_bright_yellow *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:bright_yellow], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_bright_blue *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:bright_blue], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_bright_magenta *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:bright_magenta], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_bright_cyan *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:bright_cyan], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_bright_white *args~ ** Processing line: ~ log_with_color XTERM_COLOR[:bright_white], *args~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_error *args~ ** Processing line: ~ GTK::Log.puts_error(*args)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_info *args~ ** Processing line: ~ GTK::Log.puts_info(*args)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_once *ids, message~ ** Processing line: ~ GTK::Log.puts_once(*ids, message)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_once_info *ids, message~ ** Processing line: ~ GTK::Log.puts_once_info(*ids, message)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** metadata.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~metadata.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~metadata.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/metadata.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2021 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # metadata.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright: Michał Dudziński~ ** Processing line: ~~ ** Processing line: ~ module Metadata~ ** Processing line: ~ def metadata_file_path~ ** Processing line: ~ "metadata/game_metadata.txt"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_metadata~ ** Processing line: ~ metadata = $gtk.read_file metadata_file_path~ ** Processing line: ~~ ** Processing line: ~ if !metadata~ ** Processing line: ~ write_blank_metadata~ ** Processing line: ~ metadata = $gtk.read_file metadata_file_path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ dev_id, dev_title, game_id, game_title, version, icon = *metadata.each_line.to_a~ ** Processing line: ~~ ** Processing line: ~ {~ ** Processing line: ~ dev_id: dev_id.strip,~ ** Processing line: ~ dev_title: dev_title.strip,~ ** Processing line: ~ game_id: game_id.strip,~ ** Processing line: ~ game_title: game_title.strip,~ ** Processing line: ~ version: version.strip,~ ** Processing line: ~ icon: icon.strip~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def write_blank_metadata~ ** Processing line: ~ $gtk.write_file metadata_file_path, <<-S.strip~ ** Processing line: ~ #devid=myname~ ** Processing line: ~ #devtitle=My Name~ ** Processing line: ~ #gameid=mygame~ ** Processing line: ~ #gametitle=My Game~ ** Processing line: ~ #version=0.1~ ** Processing line: ~ #icon=metadata/icon.png~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** numeric.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~numeric.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~numeric.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/numeric.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # numeric.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ class Numeric~ ** Processing line: ~ include ValueType~ ** Processing line: ~ include NumericDeprecated~ ** Processing line: ~~ ** Processing line: ~ alias_method :gt, :>~ ** Processing line: ~ alias_method :gte, :>=~ ** Processing line: ~ alias_method :lt, :<~ ** Processing line: ~ alias_method :lte, :<=~ ** Processing line: ~ alias_method :__original_eq_eq__, :== unless Numeric.instance_methods.include? :__original_eq_eq__~ ** Processing line: ~~ ** Processing line: ~ def to_layout_row opts = {}~ ** Processing line: ~ $layout.rect(row: self,~ ** Processing line: ~ col: opts.col || 0,~ ** Processing line: ~ w: opts.w || 0,~ ** Processing line: ~ h: opts.h || 0).y~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_layout_col opts = {}~ ** Processing line: ~ $layout.rect(row: 0,~ ** Processing line: ~ col: self,~ ** Processing line: ~ w: opts.w || 0,~ ** Processing line: ~ h: opts.h || 0).x~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_layout_w~ ** Processing line: ~ $layout.rect(row: 0, col: 0, w: self, h: 1).w~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_layout_h~ ** Processing line: ~ $layout.rect(row: 0, col: 0, w: 1, h: self).h~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_layout_row_from_bottom opts = {}~ ** Processing line: ~ ($layout.row_max_index - self).to_layout_row opts~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_layout_col_from_right opts = {}~ ** Processing line: ~ ($layout.col_max_index - self).to_layout_col opts~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Converts a numeric value representing seconds into frames.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def seconds~ ** Processing line: ~ self * 60~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Divides the number by `2.0` and returns a `float`.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def half~ ** Processing line: ~ self / 2.0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def third~ ** Processing line: ~ self / 3.0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def quarter~ ** Processing line: ~ self / 4.0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_byte~ ** Processing line: ~ clamp(0, 255).to_i~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def clamp *opts~ ** Processing line: ~ min = (opts.at 0)~ ** Processing line: ~ max = (opts.at 1)~ ** Processing line: ~ return min if min && self < min~ ** Processing line: ~ return max if max && self > max~ ** Processing line: ~ return self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def clamp_wrap min, max~ ** Processing line: ~ max, min = min, max if min > max~ ** Processing line: ~ return self if self >= min && self <= max~ ** Processing line: ~ return min if min == max~ ** Processing line: ~ if self < min~ ** Processing line: ~ overflow = min - self~ ** Processing line: ~ return (max - overflow).clamp_wrap min, max~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if self > max~ ** Processing line: ~ overflow = self - max~ ** Processing line: ~ return (min + overflow).clamp_wrap min, max~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def elapsed_time tick_count_override = nil~ ** Processing line: ~ (tick_count_override || Kernel.tick_count) - self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def elapsed_time_percent duration~ ** Processing line: ~ elapsed_time.percentage_of duration~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def new?~ ** Processing line: ~ elapsed_time == 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns `true` if the numeric value has passed a duration/offset number.~ ** Processing line: ~ # `Kernel.tick_count` is used to determine if a number represents an elapsed~ ** Processing line: ~ # moment in time.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def elapsed? offset = 0, tick_count_override = Kernel.tick_count~ ** Processing line: ~ (self + offset) < tick_count_override~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def frame_index *opts~ ** Processing line: ~ frame_count_or_hash, hold_for, repeat, tick_count_override = opts~ ** Processing line: ~ if frame_count_or_hash.is_a? Hash~ ** Processing line: ~ frame_count = frame_count_or_hash[:count]~ ** Processing line: ~ hold_for = frame_count_or_hash[:hold_for]~ ** Processing line: ~ repeat = frame_count_or_hash[:repeat]~ ** Processing line: ~ tick_count_override = frame_count_or_hash[:tick_count_override]~ ** Processing line: ~ else~ ** Processing line: ~ frame_count = frame_count_or_hash~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ tick_count_override ||= Kernel.tick_count~ ** Processing line: ~ animation_frame_count = frame_count~ ** Processing line: ~ animation_frame_hold_time = hold_for~ ** Processing line: ~ animation_length = animation_frame_hold_time * animation_frame_count~ ** Processing line: ~ return nil if Kernel.tick_count < self~ ** Processing line: ~~ ** Processing line: ~ if !repeat && (self + animation_length) < (tick_count_override - 1)~ ** Processing line: ~ return nil~ ** Processing line: ~ else~ ** Processing line: ~ return self.elapsed_time.-(1).idiv(animation_frame_hold_time) % animation_frame_count~ ** Processing line: ~ end~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ #{opts}~ ** Processing line: ~ #{e}~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def zero?~ ** Processing line: ~ self == 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def zero~ ** Processing line: ~ 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def one~ ** Processing line: ~ 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def two~ ** Processing line: ~ 2~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def five~ ** Processing line: ~ 5~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def ten~ ** Processing line: ~ 10~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ alias_method :gt, :>~ ** Processing line: ~ alias_method :above?, :>~ ** Processing line: ~ alias_method :right_of?, :>~ ** Processing line: ~~ ** Processing line: ~ alias_method :lt, :<~ ** Processing line: ~ alias_method :below?, :<~ ** Processing line: ~ alias_method :left_of?, :<~ ** Processing line: ~~ ** Processing line: ~ def shift_right i~ ** Processing line: ~ self + i~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def shift_left i~ ** Processing line: ~ shift_right(i * -1)~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise_immediately e, :shift_left, i~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def shift_up i~ ** Processing line: ~ self + i~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise_immediately e, :shift_up, i~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def shift_down i~ ** Processing line: ~ shift_up(i * -1)~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise_immediately e, :shift_down, i~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # This provides a way for a numeric value to be randomized based on a combination~ ** Processing line: ~ # of two options: `:sign` and `:ratio`.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def randomize *definitions~ ** Processing line: ~ result = self~ ** Processing line: ~~ ** Processing line: ~ if definitions.include?(:sign)~ ** Processing line: ~ result = rand_sign~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if definitions.include?(:ratio)~ ** Processing line: ~ result = rand * result~ ** Processing line: ~ elsif definitions.include?(:int)~ ** Processing line: ~ result = (rand result)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ result~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rand_sign~ ** Processing line: ~ return self * -1 if rand > 0.5~ ** Processing line: ~ self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rand_ratio~ ** Processing line: ~ self * rand~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def remainder_of_divide n~ ** Processing line: ~ mod n~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easing function progress/percentage for a specific point in time.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def ease_extended tick_count_override, duration, default_before, default_after, *definitions~ ** Processing line: ~ GTK::Easing.ease_extended self,~ ** Processing line: ~ tick_count_override,~ ** Processing line: ~ self + duration,~ ** Processing line: ~ default_before,~ ** Processing line: ~ default_after,~ ** Processing line: ~ *definitions~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easing function progress/percentage for a specific point in time.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def global_ease duration, *definitions~ ** Processing line: ~ ease_extended Kernel.global_tick_count,~ ** Processing line: ~ duration,~ ** Processing line: ~ GTK::Easing.initial_value(*definitions),~ ** Processing line: ~ GTK::Easing.final_value(*definitions),~ ** Processing line: ~ *definitions~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easing function progress/percentage for a specific point in time.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def ease duration, *definitions~ ** Processing line: ~ ease_extended Kernel.tick_count,~ ** Processing line: ~ duration,~ ** Processing line: ~ GTK::Easing.initial_value(*definitions),~ ** Processing line: ~ GTK::Easing.final_value(*definitions),~ ** Processing line: ~ *definitions~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easing function progress/percentage for a specific point in time.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def ease_spline_extended tick_count_override, duration, spline~ ** Processing line: ~ GTK::Easing.ease_spline_extended self,~ ** Processing line: ~ tick_count_override,~ ** Processing line: ~ self + duration,~ ** Processing line: ~ spline~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easing function progress/percentage for a specific point in time.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def global_ease_spline duration, spline~ ** Processing line: ~ ease_spline_extended Kernel.global_tick_count,~ ** Processing line: ~ duration,~ ** Processing line: ~ spline~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Easing function progress/percentage for a specific point in time.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def ease_spline duration, spline~ ** Processing line: ~ ease_spline_extended Kernel.tick_count,~ ** Processing line: ~ duration,~ ** Processing line: ~ spline~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Converts a number representing an angle in degrees to radians.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def to_radians~ ** Processing line: ~ self * Math::PI.fdiv(180)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Converts a number representing an angle in radians to degrees.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def to_degrees~ ** Processing line: ~ self / Math::PI.fdiv(180)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Given `self`, a rectangle primitive is returned.~ ** Processing line: ~ #~ ** Processing line: ~ # @example~ ** Processing line: ~ # 5.to_square 100, 300 # returns [100, 300, 5, 5]~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def to_square x, y, anchor_x = 0.5, anchor_y = nil~ ** Processing line: ~ GTK::Geometry.to_square(self, x, y, anchor_x, anchor_y)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a normal vector for a number that represents an angle in degrees.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def vector max_value = 1~ ** Processing line: ~ [vector_x(max_value), vector_y(max_value)]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns the y component of a normal vector for a number that represents an angle in degrees.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def vector_y max_value = 1~ ** Processing line: ~ max_value * Math.sin(self.to_radians)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns the x component of a normal vector for a number that represents an angle in degrees.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def vector_x max_value = 1~ ** Processing line: ~ max_value * Math.cos(self.to_radians)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def x_vector max_value = 1~ ** Processing line: ~ vector_x max_value~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def y_vector max_value = 1~ ** Processing line: ~ vector_y max_value~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mod n~ ** Processing line: ~ self % n~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mod_zero? *ns~ ** Processing line: ~ ns.any? { |n| mod(n) == 0 }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def zmod? n~ ** Processing line: ~ (self % n) == 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def multiply n~ ** Processing line: ~ self * n~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def fmult n~ ** Processing line: ~ self * n.to_f~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def imult n~ ** Processing line: ~ (self * n).to_i~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mult n~ ** Processing line: ~ self * n~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def fdiv n~ ** Processing line: ~ self / n.to_f~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Divides `self` by a number `n` as a float, and converts it `to_i`.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def idiv n~ ** Processing line: ~ (self / n.to_f).to_i~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns a numeric value that is a quantity `magnitude` closer to~ ** Processing line: ~ #`self`. If the distance between `self` and `target` is less than~ ** Processing line: ~ #the `magnitude` then `target` is returned.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def towards target, magnitude~ ** Processing line: ~ return self if self == target~ ** Processing line: ~ delta = (self - target).abs~ ** Processing line: ~ return target if delta < magnitude~ ** Processing line: ~ return self - magnitude if self > target~ ** Processing line: ~ return self + magnitude~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Given `self` and a number representing `y` of a grid. This~ ** Processing line: ~ # function will return a one dimensional array containing the value~ ** Processing line: ~ # yielded by an implicit block.~ ** Processing line: ~ #~ ** Processing line: ~ # @example~ ** Processing line: ~ # 3.map_with_ys 2 do |x, y|~ ** Processing line: ~ # x * y~ ** Processing line: ~ # end~ ** Processing line: ~ # # x y x y x y x y x y x y~ ** Processing line: ~ # # 0*0, 0*1 1*0 1*1 2*0 2*1~ ** Processing line: ~ # # => [ 0, 0, 0, 1, 0, 2]~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def map_with_ys ys, &block~ ** Processing line: ~ self.times.flat_map do |x|~ ** Processing line: ~ ys.map_with_index do |y|~ ** Processing line: ~ yield x, y~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise_immediately e, :map_with_ys, [self, ys]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def combinations other_int~ ** Processing line: ~ self.numbers.product(other_int.numbers)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def percentage_of n~ ** Processing line: ~ (self / n.to_f).cap_min_max(0, 1)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def cap i~ ** Processing line: ~ return i if self > i~ ** Processing line: ~ self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def cap_min_max min, max~ ** Processing line: ~ return min if self < min~ ** Processing line: ~ return max if self > max~ ** Processing line: ~ self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def lesser other~ ** Processing line: ~ return other if other < self~ ** Processing line: ~ self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def greater other~ ** Processing line: ~ return other if other > self~ ** Processing line: ~ self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def subtract i~ ** Processing line: ~ self - i~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def minus i~ ** Processing line: ~ self - i~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def add i~ ** Processing line: ~ self + i~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def plus i~ ** Processing line: ~ self + i~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def numbers~ ** Processing line: ~ (0..self).to_a~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def map~ ** Processing line: ~ unless block_given?~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ A block is required for Numeric#map.~ ** Processing line: ~~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ self.to_i.times.map do~ ** Processing line: ~ yield~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def each~ ** Processing line: ~ unless block_given?~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ A block is required for Numeric#each.~ ** Processing line: ~~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ self.to_i.times do~ ** Processing line: ~ yield~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def times_with_index~ ** Processing line: ~ unless block_given?~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ A block is required for Numeric#times_with_index.~ ** Processing line: ~~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ self.to_i.times.with_index do |i|~ ** Processing line: ~ yield i~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def each_with_index~ ** Processing line: ~ unless block_given?~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ A block is required for Numeric#each_with_index.~ ** Processing line: ~~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ self.to_i.times.with_index do |i|~ ** Processing line: ~ yield i~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def map_with_index~ ** Processing line: ~ unless block_given?~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ A block is required for Numeric#map.~ ** Processing line: ~~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ self.to_i.times.map do |i|~ ** Processing line: ~ yield i~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def __raise_arithmetic_exception__ other, m, e~ ** Processing line: ~ raise <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ Attempted to invoke :#{m} on #{self} with the right hand argument of:~ ** Processing line: ~~ ** Processing line: ~ #{other}~ ** Processing line: ~~ ** Processing line: ~ The object above is not a Numeric.~ ** Processing line: ~~ ** Processing line: ~ #{e}~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.from_top n~ ** Processing line: ~ return 720 - n unless $gtk~ ** Processing line: ~ $gtk.args.grid.top - n~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def from_top~ ** Processing line: ~ Numeric.from_top self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.from_right n~ ** Processing line: ~ return 1280 - n unless $gtk~ ** Processing line: ~ $gtk.args.grid.right - n~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def from_right~ ** Processing line: ~ Numeric.from_right self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.clamp n, min, max~ ** Processing line: ~ n.clamp min, max~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mid? l, r~ ** Processing line: ~ (between? l, r) || (between? r, l)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class Fixnum~ ** Processing line: ~ include ValueType~ ** Processing line: ~~ ** Processing line: ~ alias_method :__original_eq_eq__, :== unless Fixnum.instance_methods.include? :__original_eq_eq__~ ** Processing line: ~ alias_method :__original_add__, :+ unless Fixnum.instance_methods.include? :__original_add__~ ** Processing line: ~ alias_method :__original_subtract__, :- unless Fixnum.instance_methods.include? :__original_subtract__~ ** Processing line: ~ alias_method :__original_multiply__, :* unless Fixnum.instance_methods.include? :__original_multiply__~ ** Processing line: ~ alias_method :__original_divide__, :- unless Fixnum.instance_methods.include? :__original_divide__~ ** Processing line: ~~ ** Processing line: ~ # Returns `true` if the numeric value is evenly divisible by 2.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def even?~ ** Processing line: ~ return (self % 2) == 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns `true` if the numeric value is *NOT* evenly divisible by 2.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def odd?~ ** Processing line: ~ return !even?~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns `-1` if the number is less than `0`. `+1` if the number~ ** Processing line: ~ # is greater than `0`. Returns `0` if the number is equal to `0`.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def sign~ ** Processing line: ~ return -1 if self < 0~ ** Processing line: ~ return 1 if self > 0~ ** Processing line: ~ return 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns `true` if number is greater than `0`.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def pos?~ ** Processing line: ~ sign > 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns `true` if number is less than `0`.~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def neg?~ ** Processing line: ~ sign < 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns the cosine of a represented in degrees (NOT radians).~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def cos~ ** Processing line: ~ Math.cos(self.to_radians)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # Returns the cosine of a represented in degrees (NOT radians).~ ** Processing line: ~ #~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def sin~ ** Processing line: ~ Math.sin(self.to_radians)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_sf~ ** Processing line: ~ "%.2f" % self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def ifloor int~ ** Processing line: ~ (self.idiv int.to_i) * int.to_i~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class Float~ ** Processing line: ~ include ValueType~ ** Processing line: ~~ ** Processing line: ~ alias_method :__original_add__, :+ unless Float.instance_methods.include? :__original_add__~ ** Processing line: ~ alias_method :__original_subtract__, :- unless Float.instance_methods.include? :__original_subtract__~ ** Processing line: ~ alias_method :__original_multiply__, :* unless Float.instance_methods.include? :__original_multiply__~ ** Processing line: ~ alias_method :__original_divide__, :- unless Float.instance_methods.include? :__original_divide__~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def sign~ ** Processing line: ~ return -1 if self < 0~ ** Processing line: ~ return 1 if self > 0~ ** Processing line: ~ return 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def replace_infinity scalar~ ** Processing line: ~ return self if !scalar~ ** Processing line: ~ return self unless self.infinite?~ ** Processing line: ~ return -scalar if self < 0~ ** Processing line: ~ return scalar if self > 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def to_sf~ ** Processing line: ~ "%.2f" % self~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def ifloor int~ ** Processing line: ~ (self.idiv int.to_i) * int.to_i~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class Integer~ ** Processing line: ~ alias_method :__original_round__, :round unless Integer.instance_methods.include? :__original_round__~ ** Processing line: ~ alias_method :__original_add__, :+ unless Integer.instance_methods.include? :__original_add__~ ** Processing line: ~ alias_method :__original_subtract__, :- unless Integer.instance_methods.include? :__original_subtract__~ ** Processing line: ~ alias_method :__original_multiply__, :* unless Integer.instance_methods.include? :__original_multiply__~ ** Processing line: ~ alias_method :__original_divide__, :- unless Integer.instance_methods.include? :__original_divide__~ ** Processing line: ~~ ** Processing line: ~ def round *args~ ** Processing line: ~ __original_round__~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def nan?~ ** Processing line: ~ false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def center other~ ** Processing line: ~ (self - other).abs.fdiv(2)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** recording.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~recording.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~recording.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/recording.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # recording.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ # FIXME: Gross~ ** Processing line: ~ # @gtk~ ** Processing line: ~ class Replay~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.start file_name = nil~ ** Processing line: ~ $recording.start_replay file_name~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.stop~ ** Processing line: ~ $recording.stop_replay~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ class Recording~ ** Processing line: ~ def initialize runtime~ ** Processing line: ~ @runtime = runtime~ ** Processing line: ~ @tick_count = 0~ ** Processing line: ~ @global_input_order = 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ @tick_count += 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def start_recording seed_number = nil~ ** Processing line: ~ if !seed_number~ ** Processing line: ~ log <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ To start recording, you must provide an integer value to~ ** Processing line: ~ seed random number generation.~ ** Processing line: ~ S~ ** Processing line: ~ $console.set_command "$recording.start SEED_NUMBER"~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if @is_recording~ ** Processing line: ~ log <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ You are already recording, first cancel (or stop) the current recording.~ ** Processing line: ~ S~ ** Processing line: ~ $console.set_command "$recording.cancel"~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if @is_replaying~ ** Processing line: ~ log <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ You are currently replaying a recording, first stop the replay.~ ** Processing line: ~ S~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ log_info <<-S~ ** Processing line: ~ Recording has begun with RNG seed value set to #{seed_number}.~ ** Processing line: ~ To stop recording use stop_recording(filename).~ ** Processing line: ~ The recording will stop without saving a file if a filename is nil.~ ** Processing line: ~ S~ ** Processing line: ~~ ** Processing line: ~ $console.set_command "$recording.stop 'replay.txt'"~ ** Processing line: ~ @runtime.__reset__~ ** Processing line: ~ @seed_number = seed_number~ ** Processing line: ~ @runtime.set_rng seed_number~ ** Processing line: ~~ ** Processing line: ~ @tick_count = 0~ ** Processing line: ~ @global_input_order = 1~ ** Processing line: ~ @is_recording = true~ ** Processing line: ~ @input_history = []~ ** Processing line: ~ @runtime.notify! "Recording started. When completed, open the console to save it using $recording.stop FILE_NAME (or cancel).", 300~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def start seed_number = nil~ ** Processing line: ~ start_recording seed_number~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def is_replaying?~ ** Processing line: ~ @is_replaying~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def is_recording?~ ** Processing line: ~ @is_recording~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def stop file_name = nil~ ** Processing line: ~ stop_recording file_name~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def cancel~ ** Processing line: ~ stop_recording_core~ ** Processing line: ~ @runtime.notify! "Recording cancelled."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def stop_recording file_name = nil~ ** Processing line: ~ if !file_name~ ** Processing line: ~ log <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ To please specify a file name when calling:~ ** Processing line: ~ $recording.stop FILE_NAME~ ** Processing line: ~~ ** Processing line: ~ If you do NOT want to save the recording, call:~ ** Processing line: ~ $recording.cancel~ ** Processing line: ~ S~ ** Processing line: ~ $console.set_command "$recording.stop 'replay.txt'"~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if !@is_recording~ ** Processing line: ~ log_info "You are not currently recording. Use start_recording(seed_number) to start recording."~ ** Processing line: ~ $console.set_command "$recording.start"~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if file_name~ ** Processing line: ~ text = "replay_version 2.0\n"~ ** Processing line: ~ text << "stopped_at #{@tick_count}\n"~ ** Processing line: ~ text << "seed #{@seed_number}\n"~ ** Processing line: ~ text << "recorded_at #{Time.now.to_s}\n"~ ** Processing line: ~ @input_history.each do |items|~ ** Processing line: ~ text << "#{items}\n"~ ** Processing line: ~ end~ ** Processing line: ~ @runtime.write_file file_name, text~ ** Processing line: ~ @runtime.write_file 'last_replay.txt', text~ ** Processing line: ~ log_info "The recording has been saved successfully at #{file_name}. You can use start_replay(\"#{file_name}\") to replay the recording."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $console.set_command "$replay.start '#{file_name}'"~ ** Processing line: ~ stop_recording_core~ ** Processing line: ~ @runtime.notify! "Recording saved to #{file_name}. To replay it: $replay.start \"#{file_name}\"."~ ** Processing line: ~ log_info "You can run the replay later on startup using: ./dragonruby mygame --replay #{@replay_file_name}"~ ** Processing line: ~ nil~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def stop_recording_core~ ** Processing line: ~ @is_recording = false~ ** Processing line: ~ @input_history = nil~ ** Processing line: ~ @last_history = nil~ ** Processing line: ~ @runtime.__reset__~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def start_replay file_name = nil~ ** Processing line: ~ if !file_name~ ** Processing line: ~ log <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ Please provide a file name to $recording.start.~ ** Processing line: ~ S~ ** Processing line: ~ $console.set_command "$replay.start 'replay.txt'"~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ text = @runtime.read_file file_name~ ** Processing line: ~ return false unless text~ ** Processing line: ~~ ** Processing line: ~ if text.each_line.first.strip != "replay_version 2.0"~ ** Processing line: ~ raise "The replay file #{file_name} is not compatible with this version of DragonRuby Game Toolkit. Please recreate the replay (sorry)."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @replay_file_name = file_name~ ** Processing line: ~~ ** Processing line: ~ $replay_data = { input_history: { } }~ ** Processing line: ~ text.each_line do |l|~ ** Processing line: ~ if l.strip.length == 0~ ** Processing line: ~ next~ ** Processing line: ~ elsif l.start_with? 'replay_version'~ ** Processing line: ~ next~ ** Processing line: ~ elsif l.start_with? 'seed'~ ** Processing line: ~ $replay_data[:seed] = l.split(' ').last.to_i~ ** Processing line: ~ elsif l.start_with? 'stopped_at'~ ** Processing line: ~ $replay_data[:stopped_at] = l.split(' ').last.to_i~ ** Processing line: ~ elsif l.start_with? 'recorded_at'~ ** Processing line: ~ $replay_data[:recorded_at] = l.split(' ')[1..-1].join(' ')~ ** Processing line: ~ elsif l.start_with? '['~ ** Processing line: ~ name, value_1, value_2, value_count, id, tick_count = l.strip.gsub('[', '').gsub(']', '').split(',')~ ** Processing line: ~ $replay_data[:input_history][tick_count.to_i] ||= []~ ** Processing line: ~ $replay_data[:input_history][tick_count.to_i] << {~ ** Processing line: ~ id: id.to_i,~ ** Processing line: ~ name: name.gsub(':', '').to_sym,~ ** Processing line: ~ value_1: value_1.to_f,~ ** Processing line: ~ value_2: value_2.to_f,~ ** Processing line: ~ value_count: value_count.to_i~ ** Processing line: ~ }~ ** Processing line: ~ else~ ** Processing line: ~ raise "Replay data seems corrupt. I don't know how to parse #{l}."~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ $replay_data[:input_history].keys.each do |key|~ ** Processing line: ~ $replay_data[:input_history][key] = $replay_data[:input_history][key].sort_by {|input| input[:id]}~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @runtime.__reset__~ ** Processing line: ~ @runtime.set_rng $replay_data[:seed]~ ** Processing line: ~ @tick_count = 0~ ** Processing line: ~ @is_replaying = true~ ** Processing line: ~ log_info "Replay has been started."~ ** Processing line: ~ @runtime.notify! "Replay started [#{@replay_file_name}]."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def stop_replay notification_message = "Replay has been stopped."~ ** Processing line: ~ if !is_replaying?~ ** Processing line: ~ log <<-S~ ** Processing line: ~ * ERROR:~ ** Processing line: ~ No replay is currently running. Call $replay.start FILE_NAME to start a replay.~ ** Processing line: ~ S~ ** Processing line: ~~ ** Processing line: ~ $console.set_command "$replay.start 'replay.txt'"~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~ log_info notification_message~ ** Processing line: ~ @is_replaying = false~ ** Processing line: ~ $replay_data = nil~ ** Processing line: ~ @tick_count = 0~ ** Processing line: ~ @global_input_order = 1~ ** Processing line: ~ $console.set_command_silent "$replay.start '#{@replay_file_name}'"~ ** Processing line: ~ @runtime.__reset__~ ** Processing line: ~ @runtime.notify! notification_message~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def record_input_history name, value_1, value_2, value_count, clear_cache = false~ ** Processing line: ~ return if @is_replaying~ ** Processing line: ~ return unless @is_recording~ ** Processing line: ~ @input_history << [name, value_1, value_2, value_count, @global_input_order, @tick_count]~ ** Processing line: ~ @global_input_order += 1~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def stage_replay_values~ ** Processing line: ~ return unless @is_replaying~ ** Processing line: ~ return unless $replay_data~ ** Processing line: ~~ ** Processing line: ~ if $replay_data[:stopped_at] <= @tick_count~ ** Processing line: ~ stop_replay "Replay completed [#{@replay_file_name}]. To rerun, bring up the Console and press enter."~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ inputs_this_tick = $replay_data[:input_history][@tick_count]~ ** Processing line: ~~ ** Processing line: ~ if @tick_count.zmod? 60~ ** Processing line: ~ log_info "Replay ends in #{($replay_data[:stopped_at] - @tick_count).idiv 60} second(s)."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ return unless inputs_this_tick~ ** Processing line: ~ inputs_this_tick.each do |v|~ ** Processing line: ~ args = []~ ** Processing line: ~ args << v[:value_1] if v[:value_count] >= 1~ ** Processing line: ~ args << v[:value_2] if v[:value_count] >= 2~ ** Processing line: ~ args << :replay~ ** Processing line: ~ $gtk.send v[:name], *args~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** remote_hotload_client.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~remote_hotload_client.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~remote_hotload_client.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/remote_hotload_client.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # hotload_client.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class RemoteHotloadClient~ ** Processing line: ~ attr :args~ ** Processing line: ~~ ** Processing line: ~ def gtk~ ** Processing line: ~ args.gtk~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def state~ ** Processing line: ~ local_state~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def initialize local_ip_address~ ** Processing line: ~ local_state.local_ip_address = local_ip_address~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick~ ** Processing line: ~ return unless server_available?~ ** Processing line: ~ return unless server_needed?~ ** Processing line: ~~ ** Processing line: ~ if should_tick? && server_needed? && !local_state.notified~ ** Processing line: ~ if server_available?~ ** Processing line: ~ remote_log "* REMOTE CLIENT INFO: Hotload server found at #{get_server_ip_address}:9001."~ ** Processing line: ~ end~ ** Processing line: ~ local_state.notified = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ tick_process_file_retrieval~ ** Processing line: ~ tick_process_queue~ ** Processing line: ~ tick_changes~ ** Processing line: ~ tick_http_boot~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def should_tick?~ ** Processing line: ~ (game_state.tick_count.mod_zero? 60) && game_state.tick_count > 5.seconds~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def game_state~ ** Processing line: ~ args.state~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def local_state~ ** Processing line: ~ @local_state ||= OpenEntity.new~ ** Processing line: ~ @local_state.hotload_client ||= @local_state.new_entity(:hotload_client,~ ** Processing line: ~ notes: "This entity is used by DragonRuby Game Toolkit to provide you hotloading on remote machines.",~ ** Processing line: ~ changes: { },~ ** Processing line: ~ changes_queue: [],~ ** Processing line: ~ reloaded_files_times: [])~ ** Processing line: ~ @local_state.hotload_client~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def remote_log message~ ** Processing line: ~ log message~ ** Processing line: ~ args.gtk.http_post "http://#{get_server_ip_address}:9001/dragon/log/", { message: "=======\n#{message}\n=======\n" }, ["Content-Type: application/x-www-form-urlencoded"]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_server_ip_address~ ** Processing line: ~ return local_state.ip_address if local_state.ip_address~ ** Processing line: ~ local_state.ip_address ||= ((gtk.read_file 'app/server_ip_address.txt') || "").strip~ ** Processing line: ~ local_state.ip_address~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def server_available?~ ** Processing line: ~ return false if gtk.platform == 'Emscripten'~ ** Processing line: ~ get_server_ip_address.length != 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def server_needed?~ ** Processing line: ~ return false if gtk.platform == 'Emscripten'~ ** Processing line: ~ local_state.local_ip_address != get_server_ip_address~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_changes~ ** Processing line: ~ return unless should_tick?~ ** Processing line: ~~ ** Processing line: ~ local_state.greatest_tick ||= 0~ ** Processing line: ~ local_state.last_greatest_tick ||= 0~ ** Processing line: ~~ ** Processing line: ~ tick_http_changes~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_http_boot~ ** Processing line: ~ return if local_state.booted_at~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ if !local_state.http_boot~ ** Processing line: ~ # first retrieve changes.txt which has the following format~ ** Processing line: ~ # file with latest change,~ ** Processing line: ~ # latest file update_time key~ ** Processing line: ~ # tmp/src_backup/src_backup_app_main.rb, 1597926596, app/main.rb~ ** Processing line: ~ local_state.http_boot = args.gtk.http_get "http://#{get_server_ip_address}:9001/dragon/boot/"~ ** Processing line: ~ elsif local_state.http_boot && local_state.http_boot[:http_response_code] == 200~ ** Processing line: ~ local_state.last_greatest_tick = local_state.http_boot[:response_data].strip.to_i~ ** Processing line: ~ local_state.greatest_tick = local_state.http_boot[:response_data].strip.to_i~ ** Processing line: ~ local_state.booted_at = local_state.greatest_tick~ ** Processing line: ~ remote_log '* REMOTE CLIENT INFO: HTTP GET for local_state. boot.txt succeeded.'~ ** Processing line: ~ remote_log "* REMOTE CLIENT INFO: Looking for changes after: #{local_state.greatest_tick}."~ ** Processing line: ~ elsif local_state.http_boot && local_state.http_boot[:http_response_code] == -1 && local_state.http_boot[:complete]~ ** Processing line: ~ remote_log '* REMOTE CLIENT INFO: HTTP GET for boot.txt failed. Retrying.'~ ** Processing line: ~ local_state.http_boot = nil~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_http_changes~ ** Processing line: ~ return unless local_state.booted_at~ ** Processing line: ~~ ** Processing line: ~ if !local_state.http_changes~ ** Processing line: ~ local_state.http_changes = args.gtk.http_get "http://#{get_server_ip_address}:9001/dragon/changes/"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if local_state.http_changes && local_state.http_changes[:http_response_code] == 200 && local_state.booted_at~ ** Processing line: ~ local_state.last_greatest_tick = local_state.greatest_tick~ ** Processing line: ~ # if the retrieval of changes.txt was successful~ ** Processing line: ~ local_state.http_changes[:response_data].each_line do |l|~ ** Processing line: ~ if l.strip.length != 0~ ** Processing line: ~ # within reload state for that specific changes hash~ ** Processing line: ~ # set the last time the file was updated~ ** Processing line: ~ file_name, updated_at, key = l.strip.split(',')~ ** Processing line: ~ file_name.strip!~ ** Processing line: ~ updated_at.strip!~ ** Processing line: ~ key.strip!~ ** Processing line: ~ updated_at = updated_at.to_i~ ** Processing line: ~ file_name = file_name.gsub("tmp/src_backup/", "")~ ** Processing line: ~~ ** Processing line: ~ # keep an internal clock that denotes that current time on the~ ** Processing line: ~ # dev machine~ ** Processing line: ~ if updated_at > local_state.greatest_tick~ ** Processing line: ~ local_state.greatest_tick = updated_at~ ** Processing line: ~~ ** Processing line: ~ # create a new entry in change tracking for the file~ ** Processing line: ~ # for every file where the file was last updated, find all the ones where the time is not the same~ ** Processing line: ~ # and queue those to be retrieved and required~ ** Processing line: ~ # if the last time the dev machine time was retrieved is less than the file time changed~ ** Processing line: ~ # then queue the file for reload~ ** Processing line: ~ current_updated_at = (local_state.changes[key] || { updated_at: 0 })[:updated_at]~ ** Processing line: ~ if updated_at > current_updated_at~ ** Processing line: ~ remote_log "* REMOTE CLIENT INFO: Queueing file #{file_name} for update."~ ** Processing line: ~ local_state.changes[key] = { key: key,~ ** Processing line: ~ latest_file: file_name,~ ** Processing line: ~ updated_at: updated_at }~ ** Processing line: ~ local_state.changes_queue << local_state.changes[key]~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # set the greatest tick/current time of the machine~ ** Processing line: ~ local_state.http_changes = nil~ ** Processing line: ~ elsif local_state.http_changes && local_state.http_changes[:http_response_code] == -1 && local_state.http_change[:complete] && local_state.booted_at~ ** Processing line: ~ local_state.http_changes = nil~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_process_queue~ ** Processing line: ~ return if local_state.http_file_changes # don't pop a file off the queue if there is an http request in flight~ ** Processing line: ~ return if local_state.processing_file_changes # don't pop a file if there is a file currently being processed~ ** Processing line: ~ return unless local_state.changes_queue.length > 0 # return if the queue is empty~ ** Processing line: ~~ ** Processing line: ~ # if it isn't empty, pop the first file off the queue (FIFO)~ ** Processing line: ~ local_state.processing_file_changes = local_state.changes_queue.shift~ ** Processing line: ~~ ** Processing line: ~ # create an http request for the file~ ** Processing line: ~ url = "http://#{get_server_ip_address}:9001/dragon/#{local_state.processing_file_changes[:latest_file]}"~ ** Processing line: ~ remote_log "* REMOTE CLIENT INFO: Getting new version of #{local_state.processing_file_changes[:latest_file]} (#{url})."~ ** Processing line: ~ local_state.http_file_changes = args.gtk.http_get url~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def tick_process_file_retrieval~ ** Processing line: ~ return if !local_state.http_file_changes~ ** Processing line: ~~ ** Processing line: ~ # if the http request has finished successfully~ ** Processing line: ~ if local_state.http_file_changes[:http_response_code] == 200~ ** Processing line: ~ file_key = local_state.processing_file_changes[:key]~ ** Processing line: ~ # notify that a file will be reloaded~ ** Processing line: ~ remote_log "* REMOTE CLIENT INFO: Loading #{file_key}: #{local_state.processing_file_changes[:latest_file]}"~ ** Processing line: ~ remote_log "#{local_state.http_file_changes[:response_data]}"~ ** Processing line: ~~ ** Processing line: ~ # write the latest file with what came back from the response data~ ** Processing line: ~ gtk.write_file "#{file_key}", local_state.http_file_changes[:response_data]~ ** Processing line: ~~ ** Processing line: ~ # nil out the currently processing file so a new item can be processed from the queue~ ** Processing line: ~ # local_state.reloaded_files_times << local_state.processing_file_changes[:key]~ ** Processing line: ~ local_state.http_file_changes = nil~ ** Processing line: ~ local_state.processing_file_changes = nil~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** runtime/autocomplete.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~runtime/autocomplete.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~runtime/autocomplete.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/runtime/autocomplete.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # autocomplete.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Runtime~ ** Processing line: ~ module Autocomplete~ ** Processing line: ~ def autocomplete_parse opts~ ** Processing line: ~ if opts[:file] && !opts[:text]~ ** Processing line: ~ opts[:text] = read_file opts[:file]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ text = opts[:text]~ ** Processing line: ~ index = opts[:index]~ ** Processing line: ~ sum = 0~ ** Processing line: ~ lines = text.each_line.to_a.map do |l|~ ** Processing line: ~ sum += l.length~ ** Processing line: ~ { line: l, length: l.length, sum: sum }~ ** Processing line: ~ end~ ** Processing line: ~ cursor_line = lines.find { |l| l[:sum] >= index }~ ** Processing line: ~ previous_line = lines.find { |l| l[:sum] < index }~ ** Processing line: ~ previous_line ||= { sum: 0 }~ ** Processing line: ~ if cursor_line~ ** Processing line: ~ sub_index = index - previous_line[:sum]~ ** Processing line: ~ word = (cursor_line[:line][0..sub_index - 1]).strip~ ** Processing line: ~ token = (word.split " ")[-1]~ ** Processing line: ~ dots = (token.split ".").flat_map { |s| s.split "[" }.flat_map { |s| s.split "]" }.flat_map { |s| s.split "(" }.flat_map { |s| s.split ")" }~ ** Processing line: ~ dot = dots[-1]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ {~ ** Processing line: ~ text: opts[:text],~ ** Processing line: ~ file: opts[:file],~ ** Processing line: ~ index: opts[:index],~ ** Processing line: ~ cursor_line: cursor_line,~ ** Processing line: ~ previous_line: previous_line,~ ** Processing line: ~ word: word,~ ** Processing line: ~ token: token,~ ** Processing line: ~ dots: dots,~ ** Processing line: ~ dot: dot~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def autocomplete_filter_methods keys, *ignores~ ** Processing line: ~ ignores ||= []~ ** Processing line: ~ ignores = [ignores].flatten~ ** Processing line: ~ keys = keys.map { |k| k.to_s }~ ** Processing line: ~ keys = keys.reject { |k| k.include? '"' }~ ** Processing line: ~ .reject { |k| k.start_with? "'" }~ ** Processing line: ~ .reject { |k| k.include? "," }~ ** Processing line: ~ .reject { |k| k.start_with? "#" }~ ** Processing line: ~ others = ["def", "end"] +~ ** Processing line: ~ [ :entity_keys_by_ref,~ ** Processing line: ~ :entity_name,~ ** Processing line: ~ :as_hash,~ ** Processing line: ~ :clear!,~ ** Processing line: ~ :created_at_elapsed,~ ** Processing line: ~ :entity_id,~ ** Processing line: ~ "entity_id=",~ ** Processing line: ~ "tick_count=",~ ** Processing line: ~ :global_created_at_elapsed,~ ** Processing line: ~ :load_entity_data!,~ ** Processing line: ~ :meta,~ ** Processing line: ~ :meta!,~ ** Processing line: ~ :new?,~ ** Processing line: ~ :old?,~ ** Processing line: ~ :__original_eq_eq__, :set!,~ ** Processing line: ~ :update_entity_keys_by_ref,~ ** Processing line: ~ :with_meta] +~ ** Processing line: ~ ignores + keys.find_all { |k| k.to_s.to_i.to_s == k.to_s }~ ** Processing line: ~~ ** Processing line: ~ final = (keys - (others.map { |m| m.to_s })).uniq~ ** Processing line: ~ final~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def suggest_autocompletion opts~ ** Processing line: ~ parse_result = autocomplete_parse opts~ ** Processing line: ~ return [] unless parse_result[:cursor_line]~ ** Processing line: ~ text = parse_result[:text]~ ** Processing line: ~ word = parse_result[:word]~ ** Processing line: ~ token = parse_result[:token]~ ** Processing line: ~ dots = parse_result[:dots]~ ** Processing line: ~ dot = parse_result[:dot]~ ** Processing line: ~~ ** Processing line: ~ return [] if word.strip.start_with? "#"~ ** Processing line: ~~ ** Processing line: ~ if word[-1] == "." && token~ ** Processing line: ~ lookup = {~ ** Processing line: ~ 'args' => lambda { $gtk.args.autocomplete_methods },~ ** Processing line: ~ 'inputs' => lambda { $gtk.args.inputs.autocomplete_methods },~ ** Processing line: ~ 'geometry' => lambda { $gtk.args.geometry.autocomplete_methods },~ ** Processing line: ~ 'outputs' => lambda { $gtk.args.outputs.autocomplete_methods },~ ** Processing line: ~ 'layout' => lambda { $gtk.args.layouts.autocomplete_methods },~ ** Processing line: ~ 'keyboard' => lambda { $gtk.args.keyboard.autocomplete_methods },~ ** Processing line: ~ 'key_down' => lambda { $gtk.args.keyboard.key_down.autocomplete_methods },~ ** Processing line: ~ 'key_up' => lambda { $gtk.args.keyboard.key_up.autocomplete_methods },~ ** Processing line: ~ 'state' => lambda { $gtk.args.state.autocomplete_methods },~ ** Processing line: ~ 'fn' => lambda { $gtk.args.fn.autocomplete_methods },~ ** Processing line: ~ '$gtk' => lambda { $gtk.autocomplete_methods },~ ** Processing line: ~ 'gtk' => lambda { $gtk.autocomplete_methods },~ ** Processing line: ~ 'mouse' => lambda { $gtk.args.inputs.mouse.autocomplete_methods },~ ** Processing line: ~ 'click' => lambda { [:x, :y, :point] }~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ lookup_result = lookup[dot]~ ** Processing line: ~~ ** Processing line: ~ return autocomplete_filter_methods lookup_result.call if lookup_result~ ** Processing line: ~~ ** Processing line: ~ if dot[0].upcase == dot[0] && (Object.const_defined? dot.to_sym)~ ** Processing line: ~ return (Object.const_get dot.to_sym).autocomplete_methods~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ start_collecting = false~ ** Processing line: ~ dots_after_state = dots.find_all do |s|~ ** Processing line: ~ if s == "state"~ ** Processing line: ~ start_collecting = true~ ** Processing line: ~ false~ ** Processing line: ~ else~ ** Processing line: ~ start_collecting~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ target = $gtk.args.state~ ** Processing line: ~ dots_after_state.each do |k|~ ** Processing line: ~ target = target.as_hash[k.to_sym] if target.respond_to? :as_hash~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if target.respond_to? :as_hash~ ** Processing line: ~ return autocomplete_filter_methods target.as_hash.keys~ ** Processing line: ~ else~ ** Processing line: ~ return autocomplete_filter_methods target.autocomplete_methods~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~ text = text.each_line.reject { |l| l.strip.start_with? "#" }.join "\n"~ ** Processing line: ~ text = text.each_line.map { |l| l.split("#").first }.join "\n"~ ** Processing line: ~ text.gsub!("[", " ")~ ** Processing line: ~ text.gsub!("]", " ")~ ** Processing line: ~ text.gsub!("(", " ")~ ** Processing line: ~ text.gsub!(")", " ")~ ** Processing line: ~ text.gsub!(":", "")~ ** Processing line: ~ text.gsub!(".", " ")~ ** Processing line: ~ text.gsub!("=", " ")~ ** Processing line: ~ return (autocomplete_filter_methods (text.split " "),~ ** Processing line: ~ :gtk, :false, :true, :args, :suppress_mailbox, :end)~ ** Processing line: ~ end~ ** Processing line: ~ end # end Autocomplete~ ** Processing line: ~ end # end Runtime~ ** Processing line: ~ end # end GTK~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** runtime/benchmark.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~runtime/benchmark.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~runtime/benchmark.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/runtime/benchmark.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # benchmark.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Runtime~ ** Processing line: ~ module Benchmark~ ** Processing line: ~ def benchmark_single iterations, name, proc~ ** Processing line: ~ log <<-S~ ** Processing line: ~ ** Invoking :#{name}...~ ** Processing line: ~ S~ ** Processing line: ~ idx = 0~ ** Processing line: ~ r = nil~ ** Processing line: ~ time_start = Time.now~ ** Processing line: ~ while idx < iterations~ ** Processing line: ~ r = proc.call~ ** Processing line: ~ idx += 1~ ** Processing line: ~ end~ ** Processing line: ~ result = (Time.now - time_start).round 3~ ** Processing line: ~~ ** Processing line: ~ { name: name,~ ** Processing line: ~ time: result,~ ** Processing line: ~ time_ms: (result * 1000).to_i }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def benchmark opts = {}~ ** Processing line: ~ iterations = opts.iterations~ ** Processing line: ~~ ** Processing line: ~ log <<-S~ ** Processing line: ~ * BENCHMARK: Started~ ** Processing line: ~ ** Caller: #{(caller || []).first}~ ** Processing line: ~ ** Iterations: #{iterations}~ ** Processing line: ~ S~ ** Processing line: ~ procs = opts.find_all { |k, v| v.respond_to? :call }~ ** Processing line: ~~ ** Processing line: ~ times = procs.map do |(name, proc)|~ ** Processing line: ~ benchmark_single iterations, name, proc~ ** Processing line: ~ end.sort_by { |r| r.time }~ ** Processing line: ~~ ** Processing line: ~ first_place = times.first~ ** Processing line: ~ second_place = times.second || first_place~ ** Processing line: ~~ ** Processing line: ~ times = times.map do |candidate|~ ** Processing line: ~ average_time = first_place.time~ ** Processing line: ~ .add(candidate.time)~ ** Processing line: ~ .abs~ ** Processing line: ~ .fdiv(2)~ ** Processing line: ~~ ** Processing line: ~ difference_percentage = 0~ ** Processing line: ~ if average_time == 0~ ** Processing line: ~ difference_percentage = 0~ ** Processing line: ~ else~ ** Processing line: ~ difference_percentage = first_place.time~ ** Processing line: ~ .subtract(candidate.time)~ ** Processing line: ~ .abs~ ** Processing line: ~ .fdiv(average_time)~ ** Processing line: ~ .imult(100)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ difference_time = ((first_place.time - candidate.time) * 1000).round~ ** Processing line: ~ candidate.merge(difference_percentage: difference_percentage,~ ** Processing line: ~ difference_time: difference_time)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ too_small_to_measure = false~ ** Processing line: ~ if (first_place.time + second_place.time) == 0~ ** Processing line: ~ too_small_to_measure = true~ ** Processing line: ~ difference_percentage = 0~ ** Processing line: ~ log <<-S~ ** Processing line: ~ * BENCHMARK: Average time for experiments were too small. Increase the number of iterations.~ ** Processing line: ~ S~ ** Processing line: ~ else~ ** Processing line: ~ difference_percentage = (((first_place.time - second_place.time).abs.fdiv((first_place.time + second_place.time).abs.fdiv(2))) * 100).round~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ difference_time = first_place.time.-(second_place.time).*(1000).abs.round~ ** Processing line: ~~ ** Processing line: ~ r = {~ ** Processing line: ~ iterations: iterations,~ ** Processing line: ~ first_place: first_place,~ ** Processing line: ~ second_place: second_place,~ ** Processing line: ~ difference_time: difference_time,~ ** Processing line: ~ difference_percentage: difference_percentage,~ ** Processing line: ~ times: times,~ ** Processing line: ~ too_small_to_measure: too_small_to_measure~ ** Processing line: ~ }~ ** Processing line: ~~ ** Processing line: ~ log_message = []~ ** Processing line: ~ only_one_result = first_place.name == second_place.name~ ** Processing line: ~~ ** Processing line: ~ if only_one_result~ ** Processing line: ~ log <<-S~ ** Processing line: ~ * BENCHMARK: #{r.first_place.name} completed in #{r.first_place.time_ms}ms."~ ** Processing line: ~ S~ ** Processing line: ~ else~ ** Processing line: ~ log <<-S~ ** Processing line: ~ * BENCHMARK: #{r.message}~ ** Processing line: ~ ** Fastest: #{r.first_place.name.inspect}~ ** Processing line: ~ ** Second: #{r.second_place.name.inspect}~ ** Processing line: ~ ** Margin: #{r.difference_percentage}% (#{r.difference_time.abs}ms) #{r.first_place.time_ms}ms vs #{r.second_place.time_ms}ms.~ ** Processing line: ~ ** Times:~ ** Processing line: ~ #{r.times.map { |t| "*** #{t.name}: #{t.time_ms}ms (#{t.difference_percentage}% #{t.difference_time.abs}ms)." }.join("\n")}~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ r~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** runtime/draw.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~runtime/draw.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~runtime/draw.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/runtime/draw.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # draw.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Runtime~ ** Processing line: ~ module Draw~ ** Processing line: ~ def primitives pass~ ** Processing line: ~ if $top_level.respond_to? :primitives_override~ ** Processing line: ~ return $top_level.tick_render @args, pass~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ fn.each_send pass.solids, self, :draw_solid~ ** Processing line: ~ fn.each_send pass.static_solids, self, :draw_solid~ ** Processing line: ~ fn.each_send pass.sprites, self, :draw_sprite~ ** Processing line: ~ fn.each_send pass.static_sprites, self, :draw_sprite~ ** Processing line: ~ fn.each_send pass.primitives, self, :draw_primitive~ ** Processing line: ~ fn.each_send pass.static_primitives, self, :draw_primitive~ ** Processing line: ~ fn.each_send pass.labels, self, :draw_label~ ** Processing line: ~ fn.each_send pass.static_labels, self, :draw_label~ ** Processing line: ~ fn.each_send pass.lines, self, :draw_line~ ** Processing line: ~ fn.each_send pass.static_lines, self, :draw_line~ ** Processing line: ~ fn.each_send pass.borders, self, :draw_border~ ** Processing line: ~ fn.each_send pass.static_borders, self, :draw_border~ ** Processing line: ~~ ** Processing line: ~ if !self.production~ ** Processing line: ~ fn.each_send pass.debug, self, :draw_primitive~ ** Processing line: ~ fn.each_send pass.static_debug, self, :draw_primitive~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ fn.each_send pass.reserved, self, :draw_primitive~ ** Processing line: ~ fn.each_send pass.static_reserved, self, :draw_primitive~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ pause!~ ** Processing line: ~ pretty_print_exception_and_export! e~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw_solid s~ ** Processing line: ~ return unless s~ ** Processing line: ~ if s.respond_to? :draw_override~ ** Processing line: ~ s.draw_override @ffi_draw~ ** Processing line: ~ else~ ** Processing line: ~ s = s.as_hash if s.is_a? OpenEntity~ ** Processing line: ~ @ffi_draw.draw_solid_2 s.x, s.y, s.w, s.h,~ ** Processing line: ~ s.r, s.g, s.b, s.a,~ ** Processing line: ~ (s.blendmode_enum || 1)~ ** Processing line: ~ end~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise_conversion_for_rendering_failed s, e, :solid~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw_sprite s~ ** Processing line: ~ return unless s~ ** Processing line: ~ if s.respond_to? :draw_override~ ** Processing line: ~ s.draw_override @ffi_draw~ ** Processing line: ~ else~ ** Processing line: ~ s = s.as_hash if s.is_a? OpenEntity~ ** Processing line: ~ @ffi_draw.draw_sprite_4 s.x, s.y, s.w, s.h,~ ** Processing line: ~ (s.path || '').to_s,~ ** Processing line: ~ s.angle,~ ** Processing line: ~ s.a, s.r, s.g, s.b,~ ** Processing line: ~ s.tile_x, s.tile_y, s.tile_w, s.tile_h,~ ** Processing line: ~ !!s.flip_horizontally, !!s.flip_vertically,~ ** Processing line: ~ s.angle_anchor_x, s.angle_anchor_y,~ ** Processing line: ~ s.source_x, s.source_y, s.source_w, s.source_h,~ ** Processing line: ~ (s.blendmode_enum || 1)~ ** Processing line: ~ end~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise_conversion_for_rendering_failed s, e, :sprite~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw_screenshot s~ ** Processing line: ~ return unless s~ ** Processing line: ~ if s.respond_to? :draw_override~ ** Processing line: ~ s.draw_override @ffi_draw~ ** Processing line: ~ else~ ** Processing line: ~ s = s.as_hash if s.is_a? OpenEntity~ ** Processing line: ~ @ffi_draw.draw_screenshot (s.path || '').to_s,~ ** Processing line: ~ s.x, s.y, s.w, s.h,~ ** Processing line: ~ s.angle,~ ** Processing line: ~ s.a, s.r, s.g, s.b,~ ** Processing line: ~ s.tile_x, s.tile_y, s.tile_w, s.tile_h,~ ** Processing line: ~ !!s.flip_horizontally, !!s.flip_vertically,~ ** Processing line: ~ s.angle_anchor_x, s.angle_anchor_y,~ ** Processing line: ~ s.source_x, s.source_y, s.source_w, s.source_h~ ** Processing line: ~ end~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise_conversion_for_rendering_failed s, e, :screenshot~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw_label l~ ** Processing line: ~ return unless l~ ** Processing line: ~ if l.respond_to? :draw_override~ ** Processing line: ~ l.draw_override @ffi_draw~ ** Processing line: ~ else~ ** Processing line: ~ l = l.as_hash if l.is_a? OpenEntity~ ** Processing line: ~ @ffi_draw.draw_label_3 l.x, l.y,~ ** Processing line: ~ (l.text || '').to_s,~ ** Processing line: ~ l.size_enum, l.alignment_enum,~ ** Processing line: ~ l.r, l.g, l.b, l.a,~ ** Processing line: ~ l.font,~ ** Processing line: ~ (l.vertical_alignment_enum || 2),~ ** Processing line: ~ (l.blendmode_enum || 1)~ ** Processing line: ~ end~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise_conversion_for_rendering_failed l, e, :label~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw_line l~ ** Processing line: ~ return unless l~ ** Processing line: ~ if l.respond_to? :draw_override~ ** Processing line: ~ l.draw_override @ffi_draw~ ** Processing line: ~ else~ ** Processing line: ~ l = l.as_hash if l.is_a? OpenEntity~ ** Processing line: ~ if l.x2~ ** Processing line: ~ @ffi_draw.draw_line_2 l.x, l.y, l.x2, l.y2,~ ** Processing line: ~ l.r, l.g, l.b, l.a,~ ** Processing line: ~ (l.blendmode_enum || 1)~ ** Processing line: ~ else~ ** Processing line: ~ w = l.w || 0~ ** Processing line: ~ w = 1 if w == 0~ ** Processing line: ~ h = l.h || 0~ ** Processing line: ~ h = 1 if h == 0~ ** Processing line: ~ @ffi_draw.draw_line_2 l.x, l.y,~ ** Processing line: ~ l.x + w - 1,~ ** Processing line: ~ l.y + h - 1,~ ** Processing line: ~ l.r, l.g, l.b, l.a,~ ** Processing line: ~ (l.blendmode_enum || 1)~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise_conversion_for_rendering_failed l, e, :line~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw_border s~ ** Processing line: ~ return unless s~ ** Processing line: ~ if s.respond_to? :draw_override~ ** Processing line: ~ s.draw_override @ffi_draw~ ** Processing line: ~ else~ ** Processing line: ~ s = s.as_hash if s.is_a? OpenEntity~ ** Processing line: ~ @ffi_draw.draw_border_2 s.x, s.y, s.w, s.h,~ ** Processing line: ~ s.r, s.g, s.b, s.a,~ ** Processing line: ~ (s.blendmode_enum || 1)~ ** Processing line: ~ end~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ raise_conversion_for_rendering_failed s, e, :border~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def draw_screenshots~ ** Processing line: ~ @args.outputs.screenshots.each { |s| draw_screenshot s }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def pixel_arrays~ ** Processing line: ~ @args.pixel_arrays.each { |k,v|~ ** Processing line: ~ if v.pixels.length == (v.width * v.height) # !!! FIXME: warning? exception? Different API?~ ** Processing line: ~ @ffi_draw.upload_pixel_array k.to_s, v.width.to_i, v.height.to_i, v.pixels~ ** Processing line: ~ end~ ** Processing line: ~ }~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ pause!~ ** Processing line: ~ pretty_print_exception_and_export! e~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** runtime/framerate.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~runtime/framerate.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~runtime/framerate.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/runtime/framerate.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # framerate.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Runtime~ ** Processing line: ~ module Framerate~ ** Processing line: ~ def framerate_init~ ** Processing line: ~ @tick_time = Time.new.to_i~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def delta_framerate~ ** Processing line: ~ (current_framerate || 0) - (@previous_framerate || 0)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reset_framerate_calculation~ ** Processing line: ~ @tick_speed_sum = 0~ ** Processing line: ~ @tick_speed_count = 0~ ** Processing line: ~ @previous_framerate = 0~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def check_framerate~ ** Processing line: ~ if @framerate_diagnostics_requested~ ** Processing line: ~ log "================================"~ ** Processing line: ~ log framerate_get_diagnostics~ ** Processing line: ~ @framerate_diagnostics_requested = false~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ if !@paused~ ** Processing line: ~ if @tick_time~ ** Processing line: ~ @tick_speed_count += 1~ ** Processing line: ~ @tick_speed_sum += Time.now.to_i - @tick_time~ ** Processing line: ~ if @tick_speed_count > 60 * 2~ ** Processing line: ~ if framerate_below_threshold?~ ** Processing line: ~ @last_framerate = current_framerate~ ** Processing line: ~ if !@console.visible? && !@recording.is_replaying?~ ** Processing line: ~ log framerate_warning_message~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @previous_framerate = current_framerate.floor~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ @tick_time = Time.new.to_i~ ** Processing line: ~ else~ ** Processing line: ~ reset_framerate_calculation~ ** Processing line: ~ end~ ** Processing line: ~ rescue~ ** Processing line: ~ reset_framerate_calculation~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def framerate_diagnostics~ ** Processing line: ~ # request framerate diagnostics to be printed at the end of tick~ ** Processing line: ~ @framerate_diagnostics_requested = true~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def framerate_below_threshold?~ ** Processing line: ~ @last_framerate ||= 60~ ** Processing line: ~ current_framerate < @last_framerate &&~ ** Processing line: ~ current_framerate < 50 &&~ ** Processing line: ~ @previous_framerate > current_framerate &&~ ** Processing line: ~ Kernel.tick_count > 600~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def current_framerate~ ** Processing line: ~ return 60 if !@tick_speed_sum || !@tick_speed_sum~ ** Processing line: ~ r = 100.fdiv(@tick_speed_sum.fdiv(@tick_speed_count) * 100)~ ** Processing line: ~ if (r.nan? || r.infinite? || r > 58)~ ** Processing line: ~ r = 60~ ** Processing line: ~ end~ ** Processing line: ~ r || 60~ ** Processing line: ~ rescue~ ** Processing line: ~ 60~ ** Processing line: ~ end~ ** Processing line: ~ end # module Framerate~ ** Processing line: ~ end # end class Runtime~ ** Processing line: ~ end # end module GTK~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** runtime/framerate_diagnostics.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~runtime/framerate_diagnostics.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~runtime/framerate_diagnostics.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/runtime/framerate_diagnostics.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # framerate_diagnostics.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Runtime~ ** Processing line: ~ module FramerateDiagnostics~ ** Processing line: ~ def framerate_get_diagnostics~ ** Processing line: ~ <<-S~ ** Processing line: ~ * INFO: Framerate Diagnostics~ ** Processing line: ~ You can display these diagnostics using:~ ** Processing line: ~~ ** Processing line: ~ #+begin_src~ ** Processing line: ~ def tick args~ ** Processing line: ~ # ....~ ** Processing line: ~~ ** Processing line: ~ # IMPORTANT: Put this at the END of the ~tick~ method.~ ** Processing line: ~ args.outputs.debug << args.gtk.framerate_diagnostics_primitives~ ** Processing line: ~ end~ ** Processing line: ~ #+end_src~ ** Processing line: ~~ ** Processing line: ~ ** Draw Calls: ~<<~ Invocation Perf Counter~ ** Processing line: ~ Here is how many times ~args.outputs.PRIMITIVE_ARRAY <<~ was called:~ ** Processing line: ~~ ** Processing line: ~ #{$perf_counter_outputs_push_count} times invoked.~ ** Processing line: ~~ ** Processing line: ~ If the number above is high, consider batching primitives so you can lower the invocation of ~<<~. For example.~ ** Processing line: ~~ ** Processing line: ~ Instead of:~ ** Processing line: ~~ ** Processing line: ~ #+begin_src~ ** Processing line: ~ args.state.enemies.map do |e|~ ** Processing line: ~ e.alpha = 128~ ** Processing line: ~ args.outputs.sprites << e # <-- ~args.outputs.sprites <<~ is invoked a lot~ ** Processing line: ~ end~ ** Processing line: ~ #+end_src~ ** Processing line: ~~ ** Processing line: ~ Do this:~ ** Processing line: ~~ ** Processing line: ~ #+begin_src~ ** Processing line: ~ args.outputs.sprites << args.state~ ** Processing line: ~ .enemies~ ** Processing line: ~ .map do |e| # <-- ~args.outputs.sprites <<~ is only invoked once.~ ** Processing line: ~ e.alpha = 128~ ** Processing line: ~ e~ ** Processing line: ~ end~ ** Processing line: ~ #+end_src~ ** Processing line: ~~ ** Processing line: ~ ** Array Primitives~ ** Processing line: ~ ~Primitives~ represented as an ~Array~ (~Tuple~) are great for prototyping, but are not as performant as using a ~Hash~.~ ** Processing line: ~~ ** Processing line: ~ Here is the number of ~Array~ primitives that were encountered:~ ** Processing line: ~~ ** Processing line: ~ #{$perf_counter_primitive_is_array} Array Primitives.~ ** Processing line: ~~ ** Processing line: ~ If the number above is high, consider converting them to hashes. For example.~ ** Processing line: ~~ ** Processing line: ~ Instead of:~ ** Processing line: ~~ ** Processing line: ~ #+begin_src~ ** Processing line: ~ args.outputs.sprites << [0, 0, 100, 100, 'sprites/enemy.png']~ ** Processing line: ~ #+begin_end~ ** Processing line: ~~ ** Processing line: ~ Do this:~ ** Processing line: ~~ ** Processing line: ~ #+begin_src~ ** Processing line: ~ args.outputs.sprites << { x: 0,~ ** Processing line: ~ y: 0,~ ** Processing line: ~ w: 100,~ ** Processing line: ~ h: 100,~ ** Processing line: ~ path: 'sprites/enemy.png' }~ ** Processing line: ~ #+begin_end~ ** Processing line: ~~ ** Processing line: ~ ** Primitive Counts~ ** Processing line: ~ Here are the draw counts ordered by lowest to highest z order:~ ** Processing line: ~~ ** Processing line: ~ PRIMITIVE COUNT, STATIC COUNT~ ** Processing line: ~ solids: #{@args.outputs.solids.length}, #{@args.outputs.static_solids.length}~ ** Processing line: ~ sprites: #{@args.outputs.sprites.length}, #{@args.outputs.static_sprites.length}~ ** Processing line: ~ primitives: #{@args.outputs.primitives.length}, #{@args.outputs.static_primitives.length}~ ** Processing line: ~ labels: #{@args.outputs.labels.length}, #{@args.outputs.static_labels.length}~ ** Processing line: ~ lines: #{@args.outputs.lines.length}, #{@args.outputs.static_lines.length}~ ** Processing line: ~ borders: #{@args.outputs.borders.length}, #{@args.outputs.static_borders.length}~ ** Processing line: ~ debug: #{@args.outputs.debug.length}, #{@args.outputs.static_debug.length}~ ** Processing line: ~ reserved: #{@args.outputs.reserved.length}, #{@args.outputs.static_reserved.length}~ ** Processing line: ~~ ** Processing line: ~ ** Additional Help~ ** Processing line: ~ Come to the DragonRuby Discord channel if you need help troubleshooting performance issues. http://discord.dragonruby.org.~ ** Processing line: ~~ ** Processing line: ~ Source code for these diagnostics can be found at: [[https://github.com/dragonruby/dragonruby-game-toolkit-contrib/]]~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def framerate_warning_message~ ** Processing line: ~ <<-S~ ** Processing line: ~ * WARNING:~ ** Processing line: ~ Your average framerate dropped below 60 fps for two seconds.~ ** Processing line: ~~ ** Processing line: ~ The average FPS was #{current_framerate}.~ ** Processing line: ~~ ** Processing line: ~ ** How To Disable Warning~ ** Processing line: ~ If this warning is getting annoying put the following in your tick method:~ ** Processing line: ~~ ** Processing line: ~ #+begin_src~ ** Processing line: ~ args.gtk.log_level = :off~ ** Processing line: ~ #+end_src~ ** Processing line: ~~ ** Processing line: ~ #{framerate_get_diagnostics}~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def current_framerate_primitives~ ** Processing line: ~ framerate_diagnostics_primitives~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def framerate_diagnostics_primitives~ ** Processing line: ~ [~ ** Processing line: ~ { x: 0, y: 93.from_top, w: 500, h: 93, a: 128 }.solid!,~ ** Processing line: ~ {~ ** Processing line: ~ x: 5,~ ** Processing line: ~ y: 5.from_top,~ ** Processing line: ~ text: "More Info via DragonRuby Console: $gtk.framerate_diagnostics",~ ** Processing line: ~ r: 255,~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 255,~ ** Processing line: ~ size_enum: -2~ ** Processing line: ~ }.label!,~ ** Processing line: ~ {~ ** Processing line: ~ x: 5,~ ** Processing line: ~ y: 20.from_top,~ ** Processing line: ~ text: "FPS: %.2f" % args.gtk.current_framerate,~ ** Processing line: ~ r: 255,~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 255,~ ** Processing line: ~ size_enum: -2~ ** Processing line: ~ }.label!,~ ** Processing line: ~ {~ ** Processing line: ~ x: 5,~ ** Processing line: ~ y: 35.from_top,~ ** Processing line: ~ text: "Draw Calls: #{$perf_counter_outputs_push_count}",~ ** Processing line: ~ r: 255,~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 255,~ ** Processing line: ~ size_enum: -2~ ** Processing line: ~ }.label!,~ ** Processing line: ~ {~ ** Processing line: ~ x: 5,~ ** Processing line: ~ y: 50.from_top,~ ** Processing line: ~ text: "Array Primitives: #{$perf_counter_primitive_is_array}",~ ** Processing line: ~ r: 255,~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 255,~ ** Processing line: ~ size_enum: -2~ ** Processing line: ~ }.label!,~ ** Processing line: ~ {~ ** Processing line: ~ x: 5,~ ** Processing line: ~ y: 65.from_top,~ ** Processing line: ~ text: "Mouse: #{@args.inputs.mouse.point}",~ ** Processing line: ~ r: 255,~ ** Processing line: ~ g: 255,~ ** Processing line: ~ b: 255,~ ** Processing line: ~ size_enum: -2~ ** Processing line: ~ }.label!,~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** runtime/hotload.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~runtime/hotload.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~runtime/hotload.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/runtime/hotload.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # hotlaod.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Runtime~ ** Processing line: ~ # @visibility private~ ** Processing line: ~ module Hotload~ ** Processing line: ~ def hotload_init~ ** Processing line: ~ @hotload_if_needed = 0~ ** Processing line: ~ @mailbox_if_needed = 0~ ** Processing line: ~~ ** Processing line: ~ # schema for file_mtimes~ ** Processing line: ~ # { FILE_PATH: { current: (Time as Fixnum),~ ** Processing line: ~ # last: (Time as Fixnum) },~ ** Processing line: ~ # FILE_PATH: { current: (Time as Fixnum),~ ** Processing line: ~ # last: (Time as Fixnum) } }~ ** Processing line: ~ @file_mtimes = { }~ ** Processing line: ~~ ** Processing line: ~ @suppress_mailbox = true~ ** Processing line: ~ files_to_reload.each { |f| init_mtimes f }~ ** Processing line: ~ init_mtimes 'app/mailbox.rb'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def hotload_on_write_file file_name~ ** Processing line: ~ return unless file_name.include? 'mailbox.rb'~ ** Processing line: ~ @mailbox_if_needed = :force~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def files_to_reload~ ** Processing line: ~ if @rcb_release_mode~ ** Processing line: ~ core_files_to_reload + @required_files~ ** Processing line: ~ else~ ** Processing line: ~ [~ ** Processing line: ~ 'dragon/docs.rb',~ ** Processing line: ~ 'dragon/help.rb',~ ** Processing line: ~ 'dragon/kernel_docs.rb',~ ** Processing line: ~ 'dragon/kernel.rb',~ ** Processing line: ~ 'dragon/easing.rb',~ ** Processing line: ~ 'dragon/top_level.rb',~ ** Processing line: ~ 'dragon/log.rb',~ ** Processing line: ~ 'dragon/geometry.rb',~ ** Processing line: ~ 'dragon/attr_gtk.rb',~ ** Processing line: ~ 'dragon/attr_sprite.rb',~ ** Processing line: ~ 'dragon/object.rb',~ ** Processing line: ~ 'dragon/class.rb',~ ** Processing line: ~ 'dragon/string.rb',~ ** Processing line: ~ 'dragon/entity.rb',~ ** Processing line: ~ 'dragon/strict_entity.rb',~ ** Processing line: ~ 'dragon/open_entity.rb',~ ** Processing line: ~ 'dragon/serialize.rb',~ ** Processing line: ~ 'dragon/primitive.rb',~ ** Processing line: ~ 'dragon/nil_class_false_class.rb',~ ** Processing line: ~ 'dragon/symbol.rb',~ ** Processing line: ~ 'dragon/numeric_deprecated.rb',~ ** Processing line: ~ 'dragon/numeric.rb',~ ** Processing line: ~ 'dragon/hash_deprecated.rb',~ ** Processing line: ~ 'dragon/hash.rb',~ ** Processing line: ~ 'dragon/outputs_deprecated.rb',~ ** Processing line: ~ 'dragon/array_docs.rb',~ ** Processing line: ~ 'dragon/array.rb',~ ** Processing line: ~ 'dragon/outputs.rb',~ ** Processing line: ~ 'dragon/inputs.rb',~ ** Processing line: ~ 'dragon/mouse_docs.rb',~ ** Processing line: ~ 'dragon/recording.rb',~ ** Processing line: ~ 'dragon/grid.rb',~ ** Processing line: ~ 'dragon/layout.rb',~ ** Processing line: ~ 'dragon/args_deprecated.rb',~ ** Processing line: ~ 'dragon/fn.rb',~ ** Processing line: ~ 'dragon/args.rb',~ ** Processing line: ~ 'dragon/console_prompt.rb',~ ** Processing line: ~ 'dragon/console_menu.rb',~ ** Processing line: ~ 'dragon/console.rb',~ ** Processing line: ~ 'dragon/assert.rb',~ ** Processing line: ~ 'dragon/tests.rb',~ ** Processing line: ~ 'dragon/controller_config.rb',~ ** Processing line: ~ 'dragon/runtime/draw.rb',~ ** Processing line: ~ 'dragon/runtime/deprecated.rb',~ ** Processing line: ~ 'dragon/runtime/framerate.rb',~ ** Processing line: ~ 'dragon/runtime/c_bridge.rb',~ ** Processing line: ~ 'dragon/runtime/hotload.rb',~ ** Processing line: ~ 'dragon/runtime/backup.rb',~ ** Processing line: ~ 'dragon/runtime/async_require.rb',~ ** Processing line: ~ 'dragon/runtime/autocomplete.rb',~ ** Processing line: ~ 'dragon/api.rb',~ ** Processing line: ~ 'dragon/runtime.rb',~ ** Processing line: ~ 'dragon/trace.rb',~ ** Processing line: ~ 'dragon/readme_docs.rb',~ ** Processing line: ~ 'dragon/hotload_client.rb',~ ** Processing line: ~ 'dragon/wizards.rb',~ ** Processing line: ~ 'dragon/ios_wizard.rb',~ ** Processing line: ~ 'dragon/itch_wizard.rb',~ ** Processing line: ~ ] + core_files_to_reload + @required_files~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def core_files_to_reload~ ** Processing line: ~ [~ ** Processing line: ~ 'repl.rb',~ ** Processing line: ~ 'app/main.rb',~ ** Processing line: ~ 'app/repl.rb',~ ** Processing line: ~ 'app/tests.rb',~ ** Processing line: ~ 'app/test.rb',~ ** Processing line: ~ 'app/stdin.rb'~ ** Processing line: ~ ]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def init_mtimes file~ ** Processing line: ~ @file_mtimes[file] ||= { current: @ffi_file.mtime(file),~ ** Processing line: ~ last: @ffi_file.mtime(file) }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def hotload_source_files~ ** Processing line: ~ @hotload_if_needed += 1~ ** Processing line: ~ return unless @hotload_if_needed == 60~ ** Processing line: ~ @hotload_if_needed = 0~ ** Processing line: ~ files_to_reload.each { |f| reload_if_needed f }~ ** Processing line: ~ console.enable~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mailbox_timeout~ ** Processing line: ~ if @suppress_mailbox~ ** Processing line: ~ 60~ ** Processing line: ~ else~ ** Processing line: ~ 3~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def check_mailbox~ ** Processing line: ~ if @mailbox_if_needed == :force # lol~ ** Processing line: ~ reload_if_needed 'app/mailbox.rb', true~ ** Processing line: ~ @mailbox_if_needed = 1~ ** Processing line: ~ return~ ** Processing line: ~ end~ ** Processing line: ~ @mailbox_if_needed += 1~ ** Processing line: ~ return unless @mailbox_if_needed.mod_zero? mailbox_timeout~ ** Processing line: ~ @mailbox_if_needed = 1~ ** Processing line: ~ reload_if_needed 'app/mailbox.rb'~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def hotload_if_needed~ ** Processing line: ~ return if Kernel.tick_count < 0~ ** Processing line: ~ hotload_source_files~ ** Processing line: ~ check_mailbox~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def on_load_succeeded file~ ** Processing line: ~ self.files_reloaded << file~ ** Processing line: ~ self.reloaded_files << file~ ** Processing line: ~ Trace.untrace_classes!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reset_all_mtimes~ ** Processing line: ~ @file_mtimes.each do |file, _|~ ** Processing line: ~ @file_mtimes[file].current = @ffi_file.mtime(file)~ ** Processing line: ~ @file_mtimes[file].last = @file_mtimes[file].current~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ files_to_reload.each do |file, _|~ ** Processing line: ~ @file_mtimes[file] ||= {}~ ** Processing line: ~ @file_mtimes[file].current = @ffi_file.mtime(file)~ ** Processing line: ~ @file_mtimes[file].last = @file_mtimes[file].current~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def reload_if_needed file, force = false~ ** Processing line: ~ @file_mtimes[file] ||= { current: @ffi_file.mtime(file), last: @ffi_file.mtime(file) }~ ** Processing line: ~ @file_mtimes[file].current = @ffi_file.mtime(file)~ ** Processing line: ~ return if !force && @file_mtimes[file].current == @file_mtimes[file].last~ ** Processing line: ~ on_load_succeeded file if reload_ruby_file file~ ** Processing line: ~ @file_mtimes[file].last = @file_mtimes[file].current~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** string.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~string.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~string.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/string.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # string.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ class String~ ** Processing line: ~ include ValueType~ ** Processing line: ~~ ** Processing line: ~ def self.wrapped_lines_recur word, rest, length, aggregate~ ** Processing line: ~ if word.nil?~ ** Processing line: ~ return aggregate~ ** Processing line: ~ elsif rest[0].nil?~ ** Processing line: ~ aggregate << word + "\n"~ ** Processing line: ~ return aggregate~ ** Processing line: ~ elsif (word + " " + rest[0]).length > length~ ** Processing line: ~ aggregate << word + "\n"~ ** Processing line: ~ return wrapped_lines_recur rest[0], rest[1..-1], length, aggregate~ ** Processing line: ~ elsif (word + " " + rest[0]).length <= length~ ** Processing line: ~ next_word = (word + " " + rest[0])~ ** Processing line: ~ return wrapped_lines_recur next_word, rest[1..-1], length, aggregate~ ** Processing line: ~ else~ ** Processing line: ~ log <<-S~ ** Processing line: ~ WARNING:~ ** Processing line: ~ #{word} is too long to fit in length of #{length}.~ ** Processing line: ~~ ** Processing line: ~ S~ ** Processing line: ~ next_word = (word + " " + rest[0])~ ** Processing line: ~ return wrapped_lines_recur next_word, rest[1..-1], length, aggregate~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def char_byte~ ** Processing line: ~ return nil if self.length == 0~ ** Processing line: ~ c = self.each_char.first.bytes~ ** Processing line: ~ c = c.first if c.is_a? Enumerable~ ** Processing line: ~ c~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def insert_character_at index, char~ ** Processing line: ~ t = each_char.to_a~ ** Processing line: ~ t = (t.insert index, char)~ ** Processing line: ~ t.join~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def excluding_character_at index~ ** Processing line: ~ t = each_char.to_a~ ** Processing line: ~ t.delete_at index~ ** Processing line: ~ t.join~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def excluding_last_character~ ** Processing line: ~ return "" if self.length <= 1~ ** Processing line: ~ return excluding_character_at(self.length - 1)~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def end_with_bang?~ ** Processing line: ~ self[-1] == "!"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def without_ending_bang~ ** Processing line: ~ return self unless end_with_bang?~ ** Processing line: ~ self[0..-2]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.wrapped_lines string, length~ ** Processing line: ~ string.each_line.map do |l|~ ** Processing line: ~ l = l.rstrip~ ** Processing line: ~ if l.length < length~ ** Processing line: ~ l + "\n"~ ** Processing line: ~ else~ ** Processing line: ~ words = l.split ' '~ ** Processing line: ~ wrapped_lines_recur(words[0], words[1..-1], length, []).flatten~ ** Processing line: ~ end~ ** Processing line: ~ end.flatten~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def wrapped_lines length~ ** Processing line: ~ String.wrapped_lines self, length~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def wrap length~ ** Processing line: ~ wrapped_lines(length).join.rstrip~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def multiline?~ ** Processing line: ~ include? "\n"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def indent_lines amount, char = " "~ ** Processing line: ~ self.each_line.each_with_index.map do |l, i|~ ** Processing line: ~ if i == 0~ ** Processing line: ~ l~ ** Processing line: ~ else~ ** Processing line: ~ char * amount + l~ ** Processing line: ~ end~ ** Processing line: ~ end.join~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def quote~ ** Processing line: ~ "\"#{self}\""~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def trim~ ** Processing line: ~ strip~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def trim!~ ** Processing line: ~ strip!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def ltrim~ ** Processing line: ~ lstrip~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def ltrim!~ ** Processing line: ~ lstrip!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rtrim~ ** Processing line: ~ rstrip~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def rtrim!~ ** Processing line: ~ rstrip!~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def serialize~ ** Processing line: ~ self~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** tests.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~tests.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/tests.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # tests.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Tests~ ** Processing line: ~ attr_accessor :failed, :passed, :inconclusive~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @failed = []~ ** Processing line: ~ @passed = []~ ** Processing line: ~ @inconclusive = []~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def run_test m~ ** Processing line: ~ args = Args.new $gtk, nil~ ** Processing line: ~ assert = Assert.new~ ** Processing line: ~ begin~ ** Processing line: ~ log_test_running m~ ** Processing line: ~ send(m, args, assert)~ ** Processing line: ~ if !assert.assertion_performed~ ** Processing line: ~ log_inconclusive m~ ** Processing line: ~ else~ ** Processing line: ~ log_passed m~ ** Processing line: ~ end~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ if test_signature_invalid_exception? e, m~ ** Processing line: ~ log_test_signature_incorrect m~ ** Processing line: ~ else~ ** Processing line: ~ mark_test_failed m, e~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_methods_focused~ ** Processing line: ~ Object.methods.find_all { |m| m.start_with?( "focus_test_") }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_methods~ ** Processing line: ~ Object.methods.find_all { |m| m.start_with? "test_" }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def start~ ** Processing line: ~ log "* TEST: gtk.test.start has been invoked."~ ** Processing line: ~ if test_methods_focused.length != 0~ ** Processing line: ~ @is_running = true~ ** Processing line: ~ test_methods_focused.each { |m| run_test m }~ ** Processing line: ~ print_summary~ ** Processing line: ~ @is_running = false~ ** Processing line: ~ elsif test_methods.length == 0~ ** Processing line: ~ log_no_tests_found~ ** Processing line: ~ else~ ** Processing line: ~ @is_running = true~ ** Processing line: ~ test_methods.each { |m| run_test m }~ ** Processing line: ~ print_summary~ ** Processing line: ~ @is_running = false~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def mark_test_failed m, e~ ** Processing line: ~ message = "Failed."~ ** Processing line: ~ self.failed << { m: m, e: e }~ ** Processing line: ~ log message~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def running?~ ** Processing line: ~ @is_running~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_inconclusive m~ ** Processing line: ~ self.inconclusive << {m: m}~ ** Processing line: ~ log "Inconclusive."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_passed m~ ** Processing line: ~ self.passed << {m: m}~ ** Processing line: ~ log "Passed."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_no_tests_found~ ** Processing line: ~ log <<-S~ ** Processing line: ~ No tests were found. To create a test. Define a method~ ** Processing line: ~ that begins with test_. For example:~ ** Processing line: ~ #+begin_src~ ** Processing line: ~ def test_game_over args, assert~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~ #+end_src~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_test_running m~ ** Processing line: ~ log "** Running: #{m}"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def test_signature_invalid_exception? e, m~ ** Processing line: ~ e.to_s.include?(m.to_s) && e.to_s.include?("wrong number of arguments")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def log_test_signature_incorrect m~ ** Processing line: ~ log "TEST METHOD INVALID:", <<-S~ ** Processing line: ~ I found a test method called :#{m}. But it needs to have~ ** Processing line: ~ the following method signature:~ ** Processing line: ~ #+begin_src~ ** Processing line: ~ def #{m} args, assert~ ** Processing line: ~~ ** Processing line: ~ end~ ** Processing line: ~ #+end_src~ ** Processing line: ~ Please update the method signature to match the code above. If you~ ** Processing line: ~ did not intend this to be a test method. Rename the method so it does~ ** Processing line: ~ not start with "test_".~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def print_summary~ ** Processing line: ~ log "** Summary"~ ** Processing line: ~ log "*** Passed"~ ** Processing line: ~ log "#{self.passed.length} test(s) passed."~ ** Processing line: ~ self.passed.each { |h| log "**** :#{h[:m]}" }~ ** Processing line: ~ log "*** Inconclusive"~ ** Processing line: ~ if self.inconclusive.length > 0~ ** Processing line: ~ log_once :assertion_ok_note, <<-S~ ** Processing line: ~ NOTE FOR INCONCLUSIVE TESTS: No assertion was performed in the test.~ ** Processing line: ~ Add assert.ok! at the end of the test if you are using your own assertions.~ ** Processing line: ~ S~ ** Processing line: ~ end~ ** Processing line: ~ log "#{self.inconclusive.length} test(s) inconclusive."~ ** Processing line: ~ self.inconclusive.each { |h| log "**** :#{h[:m]}" }~ ** Processing line: ~ log "*** Failed"~ ** Processing line: ~ log "#{self.failed.length} test(s) failed."~ ** Processing line: ~ self.failed.each do |h|~ ** Processing line: ~ log "**** Test name: :#{h[:m]}"~ ** Processing line: ~ log "#{h[:e].to_s.gsub("* ERROR:", "").strip}\n#{h[:e].__backtrace_to_org__}"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** trace.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~trace.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~trace.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/trace.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # trace.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright:~ ** Processing line: ~ # - Dan Healy: https://github.com/danhealy~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ module Trace~ ** Processing line: ~ IGNORED_METHODS = [~ ** Processing line: ~ :define_singleton_method, :raise_immediately, :instance_of?,~ ** Processing line: ~ :raise_with_caller, :initialize_copy, :class_defined?,~ ** Processing line: ~ :instance_variable_get, :format, :purge_class, :instance_variable_defined?,~ ** Processing line: ~ :metadata_object_id, :instance_variable_set, :__printstr__,~ ** Processing line: ~ :instance_variables, :is_a?, :p, :kind_of?, :==, :log_once,~ ** Processing line: ~ :protected_methods, :log_once_info, :private_methods, :open,~ ** Processing line: ~ :!=, :initialize, :object_id, :Hash, :methods, :tick, :!,~ ** Processing line: ~ :respond_to?, :yield_self, :send, :instance_eval, :then,~ ** Processing line: ~ :__method__, :__send__, :log_print, :dig, :itself, :log_info,~ ** Processing line: ~ :remove_instance_variable, :raise, :public_methods, :instance_exec,~ ** Processing line: ~ :gets, :local_variables, :tap, :__id__, :class, :singleton_class,~ ** Processing line: ~ :block_given?, :_inspect, :puts, :global_variables, :getc, :iterator?,~ ** Processing line: ~ :hash, :to_enum, :printf, :frozen?, :print, :original_puts,~ ** Processing line: ~ :srand, :freeze, :rand, :extend, :eql?, :equal?, :sprintf, :clone,~ ** Processing line: ~ :dup, :to_s, :primitive_determined?, :inspect, :primitive?, :help,~ ** Processing line: ~ :__object_methods__, :proc, :__custom_object_methods__, :Float, :enum_for,~ ** Processing line: ~ :__supports_ivars__?, :nil?, :fast_rand, :or, :and,~ ** Processing line: ~ :__caller_without_noise__, :__gtk_ruby_string_contains_source_file_path__?,~ ** Processing line: ~ :__pretty_print_exception__, :__gtk_ruby_source_files__,~ ** Processing line: ~ :String, :log, :Array, :putsc, :Integer, :===, :here,~ ** Processing line: ~ :raise_error_with_kind_of_okay_message, :better_instance_information,~ ** Processing line: ~ :lambda, :fail, :method_missing, :__case_eqq, :caller,~ ** Processing line: ~ :raise_method_missing_better_error, :require, :singleton_methods,~ ** Processing line: ~ :!~, :loop, :numeric_or_default, :`, :state, :inputs, :outputs, "args=".to_sym,~ ** Processing line: ~ :grid, :gtk, :dragon, :args, :passes, :tick, :grep_source, :grep_source_file,~ ** Processing line: ~ :numeric_or_default, :f_or_default, :s_or_default, :i_or_default,~ ** Processing line: ~ :comment, :primitive_marker, :xrepl, :repl~ ** Processing line: ~ ]~ ** Processing line: ~~ ** Processing line: ~ def self.traced_classes~ ** Processing line: ~ @traced_classes ||= []~ ** Processing line: ~ @traced_classes~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.mark_class_as_traced! klass~ ** Processing line: ~ @traced_classes << klass~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.untrace_classes!~ ** Processing line: ~ traced_classes.each do |klass|~ ** Processing line: ~ klass.class_eval do~ ** Processing line: ~ all_methods = klass.instance_methods false~ ** Processing line: ~ if klass.instance_methods.respond_to?(:__trace_call_depth__)~ ** Processing line: ~ undef_method :__trace_call_depth__~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ GTK::Trace.filter_methods_to_trace(all_methods).each do |m|~ ** Processing line: ~ original_method_name = m~ ** Processing line: ~ trace_method_name = GTK::Trace.trace_method_name_for m~ ** Processing line: ~ if klass.instance_methods.include? trace_method_name~ ** Processing line: ~ alias_method m, trace_method_name~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ $last_method_traced = nil~ ** Processing line: ~ @traced_classes.clear~ ** Processing line: ~ $trace_enabled = false~ ** Processing line: ~ if !$gtk.production~ ** Processing line: ~ $gtk.write_file_root 'logs/trace.txt', "Add trace!(SOMEOBJECT) to the top of ~tick~ and this file will be populated with invocation information.\n"~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.trace_method_name_for m~ ** Processing line: ~ "__trace_original_#{m}__".to_sym~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.original_method_name_for m~ ** Processing line: ~ return m unless m.to_s.start_with?("__trace_original_") && m.to_s.end_with?("__")~ ** Processing line: ~ m[16..-3]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.filter_methods_to_trace methods~ ** Processing line: ~ methods.reject { |m| m.start_with? "__trace_" }.reject { |m| IGNORED_METHODS.include? m }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.trace_times_string~ ** Processing line: ~ str = []~ ** Processing line: ~ $trace_performance.sort_by {|method_name, times| -times[:avg] }.each do |method_name, times|~ ** Processing line: ~ str << "#{method_name}: #{times[:sum].round(2)}/#{times[:count]} #{times[:min]}ms min, #{times[:avg].round(2)}ms avg, #{times[:max]}ms max"~ ** Processing line: ~ end~ ** Processing line: ~ str.join("\n")~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def self.flush_trace pad_with_newline = false~ ** Processing line: ~ $trace_puts ||= []~ ** Processing line: ~ puts "(Trace info flushed!)"~ ** Processing line: ~ if $trace_puts.length > 0~ ** Processing line: ~ text = $trace_puts.join("").strip + "\n" + self.trace_times_string + "\n"~ ** Processing line: ~ if pad_with_newline~ ** Processing line: ~ $gtk.append_file_root 'logs/trace.txt', "\n" + text.strip~ ** Processing line: ~ else~ ** Processing line: ~ $gtk.append_file_root 'logs/trace.txt', text.strip~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ $trace_puts.clear~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ # @gtk~ ** Processing line: ~ def self.trace! instance = nil~ ** Processing line: ~ $trace_history ||= []~ ** Processing line: ~ $trace_enabled = true~ ** Processing line: ~ $trace_call_depth ||=0~ ** Processing line: ~ $trace_performance = Hash.new {|h,k|~ ** Processing line: ~ h[k] = {~ ** Processing line: ~ min: 100000,~ ** Processing line: ~ max: 0,~ ** Processing line: ~ avg: 0,~ ** Processing line: ~ sum: 0,~ ** Processing line: ~ count: 0~ ** Processing line: ~ }~ ** Processing line: ~ }~ ** Processing line: ~ flush_trace~ ** Processing line: ~ instance = $top_level unless instance~ ** Processing line: ~ return if Trace.traced_classes.include? instance.class~ ** Processing line: ~ all_methods = instance.class.instance_methods false~ ** Processing line: ~ instance.class.class_eval do~ ** Processing line: ~ attr_accessor :__trace_call_depth__ unless instance.class.instance_methods.include?(:__trace_call_depth__)~ ** Processing line: ~ GTK::Trace.filter_methods_to_trace(all_methods).each do |m|~ ** Processing line: ~ original_method_name = m~ ** Processing line: ~ trace_method_name = GTK::Trace.trace_method_name_for m~ ** Processing line: ~ alias_method trace_method_name, m~ ** Processing line: ~ $trace_puts << "Tracing #{m} on #{instance.class}.\n"~ ** Processing line: ~ define_method(m) do |*args|~ ** Processing line: ~ instance.__trace_call_depth__ ||= 0~ ** Processing line: ~ tab_width = " " * (instance.__trace_call_depth__ * 8)~ ** Processing line: ~ instance.__trace_call_depth__ += 1~ ** Processing line: ~ $trace_call_depth = instance.__trace_call_depth__~ ** Processing line: ~ parameters = "#{args}"[1..-2]~ ** Processing line: ~~ ** Processing line: ~ $trace_puts << "\n #{tab_width}#{m}(#{parameters})"~ ** Processing line: ~~ ** Processing line: ~ execution_time = Time.new~ ** Processing line: ~~ ** Processing line: ~ $last_method_traced = trace_method_name~ ** Processing line: ~ $trace_history << [m, parameters]~ ** Processing line: ~~ ** Processing line: ~ result = send(trace_method_name, *args)~ ** Processing line: ~~ ** Processing line: ~ class_m = "#{instance.class}##{m}"~ ** Processing line: ~ completion_time = ((Time.new - execution_time).to_f * 1000).round(2)~ ** Processing line: ~ $trace_performance[class_m][:min] = [$trace_performance[class_m][:min], completion_time].min~ ** Processing line: ~ $trace_performance[class_m][:max] = [$trace_performance[class_m][:max], completion_time].max~ ** Processing line: ~ $trace_performance[class_m][:count] += 1~ ** Processing line: ~ $trace_performance[class_m][:sum] += completion_time~ ** Processing line: ~ $trace_performance[class_m][:avg] = $trace_performance[class_m][:sum].fdiv($trace_performance[class_m][:count])~ ** Processing line: ~~ ** Processing line: ~ instance.__trace_call_depth__ -= 1~ ** Processing line: ~ instance.__trace_call_depth__ = instance.__trace_call_depth__.greater 0~ ** Processing line: ~ $trace_puts << "\n #{tab_width} #{completion_time > 10 ? '!!! ' : ''}#{completion_time}ms success: #{m}"~ ** Processing line: ~ if instance.__trace_call_depth__ == 0~ ** Processing line: ~ $trace_puts << "\n"~ ** Processing line: ~ $trace_history.clear~ ** Processing line: ~ end~ ** Processing line: ~ result~ ** Processing line: ~ rescue Exception => e~ ** Processing line: ~ instance.__trace_call_depth__ -= 1~ ** Processing line: ~ instance.__trace_call_depth__ = instance.__trace_call_depth__.greater 0~ ** Processing line: ~ $trace_puts << "\n #{tab_width} failed: #{m}"~ ** Processing line: ~ if instance.__trace_call_depth__ == 0~ ** Processing line: ~ $trace_puts << "\n #{tab_width} #{e}"~ ** Processing line: ~ $trace_puts << "\n"~ ** Processing line: ~ end~ ** Processing line: ~ $trace_call_depth = 0~ ** Processing line: ~ GTK::Trace.flush_trace true~ ** Processing line: ~ raise e~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ mark_class_as_traced! instance.class~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** tweetcart.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~tweetcart.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~tweetcart.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/tweetcart.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # tweetcart.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ def $top_level.TICK &block~ ** Processing line: ~ $top_level.define_method(:tick) do |args|~ ** Processing line: ~ args.outputs[:scene].w = 160~ ** Processing line: ~ args.outputs[:scene].h = 90~ ** Processing line: ~ args.outputs[:scene].background_color = [0, 0, 0, 0]~ ** Processing line: ~ block.call args~ ** Processing line: ~ args.outputs.sprites << { x: 0, y: 0, w: 1280, h: 720, path: :scene }~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def $top_level.bg! *rgb~ ** Processing line: ~ r,g,b = rgb~ ** Processing line: ~ r ||= 255~ ** Processing line: ~ g ||= r~ ** Processing line: ~ b ||= g~ ** Processing line: ~ $args.outputs.background_color = [r, g, b]~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def $top_level.slds~ ** Processing line: ~ $args.outputs[:scene].sprites~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def $top_level.slds! *os~ ** Processing line: ~ if (os.first.is_a? Numeric)~ ** Processing line: ~ sld!(*os)~ ** Processing line: ~ else~ ** Processing line: ~ os.each { |o| sld!(*o) }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def $top_level.sld! *params~ ** Processing line: ~ x, y, w, h, r, g, b, a = nil~ ** Processing line: ~ if params.length == 2~ ** Processing line: ~ x, y = params~ ** Processing line: ~ elsif params.length == 3 && (params.last.is_a? Array)~ ** Processing line: ~ x = params[0]~ ** Processing line: ~ y = params[1]~ ** Processing line: ~ r, g, b, a = params[2]~ ** Processing line: ~ r ||= 255~ ** Processing line: ~ g ||= r~ ** Processing line: ~ b ||= g~ ** Processing line: ~ a ||= 255~ ** Processing line: ~ elsif params.length == 4~ ** Processing line: ~ x, y, w, h = params~ ** Processing line: ~ elsif params.length == 5 && (params.last.is_a? Array)~ ** Processing line: ~ x = params[0]~ ** Processing line: ~ y = params[1]~ ** Processing line: ~ w = params[2]~ ** Processing line: ~ h = params[3]~ ** Processing line: ~ r,g,b,a = params[4]~ ** Processing line: ~ r ||= 255~ ** Processing line: ~ g ||= r~ ** Processing line: ~ b ||= g~ ** Processing line: ~ a ||= 255~ ** Processing line: ~ elsif params.length >= 7~ ** Processing line: ~ x, y, w, h, r, g, b = params~ ** Processing line: ~ else~ ** Processing line: ~ raise "I don't know how to render #{params} with reasonable defaults."~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ w ||= 1~ ** Processing line: ~ h ||= 1~ ** Processing line: ~ r ||= 255~ ** Processing line: ~ g ||= 255~ ** Processing line: ~ b ||= 255~ ** Processing line: ~ a ||= 255~ ** Processing line: ~~ ** Processing line: ~ slds << { x: x, y: y,~ ** Processing line: ~ w: w, h: h,~ ** Processing line: ~ r: r, g: g, b: b, a: a,~ ** Processing line: ~ path: :pixel }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ =begin~ ** Processing line: ~ wht = [255] * 3~ ** Processing line: ~ red = [255, 0, 0]~ ** Processing line: ~ blu = [0, 130, 255]~ ** Processing line: ~ purp = [150, 80, 255]~ ** Processing line: ~~ ** Processing line: ~ TICK {~ ** Processing line: ~ bg! 0~ ** Processing line: ~~ ** Processing line: ~ slds << [0, 0, 3, 3, 0, 255, 0, 255]~ ** Processing line: ~~ ** Processing line: ~ sld! 10, 10~ ** Processing line: ~ sld! 20, 20, 3, 2~ ** Processing line: ~ sld! 30, 30, 2, 2, red~ ** Processing line: ~ sld! 35, 35, blu~ ** Processing line: ~~ ** Processing line: ~ slds! 40, 40~ ** Processing line: ~~ ** Processing line: ~ slds! [50, 50],~ ** Processing line: ~ [60, 60, purp],~ ** Processing line: ~ [70, 70, 10, 10, wht],~ ** Processing line: ~ [80, 80, 4, 4, 255, 0, 255]~ ** Processing line: ~ }~ ** Processing line: ~ =end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected. ** Processing line: ~~ ** Processing line: ~~ ** Processing line: ~*** wizards.rb~ - H3 detected. - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~wizards.rb~ - Line's tilde count is: 0 - Line contains link marker: false - Determining if line is a header. - Line contains ~*** ~... gsub-ing empty string - Formatting line: ~wizards.rb~ - Line's tilde count is: 0 - Line contains link marker: false ** Processing line: ~~ ** Processing line: ~#+begin_src ruby~ - PRE start detected. ** Processing line: ~ # ./dragon/wizards.rb~ ** Processing line: ~ # coding: utf-8~ ** Processing line: ~ # Copyright 2019 DragonRuby LLC~ ** Processing line: ~ # MIT License~ ** Processing line: ~ # wizards.rb has been released under MIT (*only this file*).~ ** Processing line: ~~ ** Processing line: ~ class Wizard~ ** Processing line: ~ def metadata_file_path~ ** Processing line: ~ "metadata/game_metadata.txt"~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ def get_metadata~ ** Processing line: ~ metadata = $gtk.read_file metadata_file_path~ ** Processing line: ~~ ** Processing line: ~ if !metadata~ ** Processing line: ~ write_blank_metadata~ ** Processing line: ~ metadata = $gtk.read_file metadata_file_path~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ dev_id, dev_title, game_id, game_title, version, icon = *metadata.each_line.to_a~ ** Processing line: ~~ ** Processing line: ~ {~ ** Processing line: ~ dev_id: dev_id.strip.gsub("#", "").gsub("devid=", ""),~ ** Processing line: ~ dev_title: dev_title.strip.gsub("#", "").gsub("devtitle=", ""),~ ** Processing line: ~ game_id: game_id.strip.gsub("#", "").gsub("gameid=", ""),~ ** Processing line: ~ game_title: game_title.strip.gsub("#", "").gsub("gametitle=", ""),~ ** Processing line: ~ version: version.strip.gsub("#", "").gsub("version=", ""),~ ** Processing line: ~ icon: icon.strip.gsub("#", "").gsub("icon=", "")~ ** Processing line: ~ }~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ class WizardException < Exception~ ** Processing line: ~ attr_accessor :console_primitives~ ** Processing line: ~~ ** Processing line: ~ def initialize *console_primitives~ ** Processing line: ~ @console_primitives = console_primitives~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~ module GTK~ ** Processing line: ~ class Wizards~ ** Processing line: ~ attr_accessor :ios, :itch~ ** Processing line: ~~ ** Processing line: ~ def initialize~ ** Processing line: ~ @ios = IOSWizard.new~ ** Processing line: ~ @itch = ItchWizard.new~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~ end~ ** Processing line: ~~ ** Processing line: ~#+end_src~ - PRE end detected.